Lines Matching refs:soft
201 static inline int mbcs_getdma_start(struct mbcs_soft *soft) in mbcs_getdma_start() argument
208 mmr_base = soft->mmr_base; in mbcs_getdma_start()
209 gdma = &soft->getdma; in mbcs_getdma_start()
241 static inline int mbcs_putdma_start(struct mbcs_soft *soft) in mbcs_putdma_start() argument
248 mmr_base = soft->mmr_base; in mbcs_putdma_start()
249 pdma = &soft->putdma; in mbcs_putdma_start()
281 static inline int mbcs_algo_start(struct mbcs_soft *soft) in mbcs_algo_start() argument
283 struct algoblock *algo_soft = &soft->algo; in mbcs_algo_start()
284 void *mmr_base = soft->mmr_base; in mbcs_algo_start()
287 if (mutex_lock_interruptible(&soft->algolock)) in mbcs_algo_start()
290 atomic_set(&soft->algo_done, 0); in mbcs_algo_start()
304 mutex_unlock(&soft->algolock); in mbcs_algo_start()
310 do_mbcs_sram_dmawrite(struct mbcs_soft *soft, uint64_t hostAddr, in do_mbcs_sram_dmawrite() argument
315 if (mutex_lock_interruptible(&soft->dmawritelock)) in do_mbcs_sram_dmawrite()
318 atomic_set(&soft->dmawrite_done, 0); in do_mbcs_sram_dmawrite()
320 soft->putdma.hostAddr = hostAddr; in do_mbcs_sram_dmawrite()
321 soft->putdma.localAddr = *off; in do_mbcs_sram_dmawrite()
322 soft->putdma.bytes = len; in do_mbcs_sram_dmawrite()
324 if (mbcs_putdma_start(soft) < 0) { in do_mbcs_sram_dmawrite()
331 if (wait_event_interruptible(soft->dmawrite_queue, in do_mbcs_sram_dmawrite()
332 atomic_read(&soft->dmawrite_done))) { in do_mbcs_sram_dmawrite()
341 mutex_unlock(&soft->dmawritelock); in do_mbcs_sram_dmawrite()
347 do_mbcs_sram_dmaread(struct mbcs_soft *soft, uint64_t hostAddr, in do_mbcs_sram_dmaread() argument
352 if (mutex_lock_interruptible(&soft->dmareadlock)) in do_mbcs_sram_dmaread()
355 atomic_set(&soft->dmawrite_done, 0); in do_mbcs_sram_dmaread()
357 soft->getdma.hostAddr = hostAddr; in do_mbcs_sram_dmaread()
358 soft->getdma.localAddr = *off; in do_mbcs_sram_dmaread()
359 soft->getdma.bytes = len; in do_mbcs_sram_dmaread()
361 if (mbcs_getdma_start(soft) < 0) { in do_mbcs_sram_dmaread()
367 if (wait_event_interruptible(soft->dmaread_queue, in do_mbcs_sram_dmaread()
368 atomic_read(&soft->dmaread_done))) { in do_mbcs_sram_dmaread()
377 mutex_unlock(&soft->dmareadlock); in do_mbcs_sram_dmaread()
384 struct mbcs_soft *soft; in mbcs_open() local
391 list_for_each_entry(soft, &soft_list, list) { in mbcs_open()
392 if (soft->nasid == minor) { in mbcs_open()
393 fp->private_data = soft->cxdev; in mbcs_open()
406 struct mbcs_soft *soft = cx_dev->soft; in mbcs_sram_read() local
414 rv = do_mbcs_sram_dmawrite(soft, hostAddr, len, off); in mbcs_sram_read()
431 struct mbcs_soft *soft = cx_dev->soft; in mbcs_sram_write() local
444 rv = do_mbcs_sram_dmaread(soft, hostAddr, len, off); in mbcs_sram_write()
481 static uint64_t mbcs_pioaddr(struct mbcs_soft *soft, uint64_t offset) in mbcs_pioaddr() argument
485 mmr_base = (uint64_t) (soft->mmr_base + offset); in mbcs_pioaddr()
490 static void mbcs_debug_pioaddr_set(struct mbcs_soft *soft) in mbcs_debug_pioaddr_set() argument
492 soft->debug_addr = mbcs_pioaddr(soft, MBCS_DEBUG_START); in mbcs_debug_pioaddr_set()
495 static void mbcs_gscr_pioaddr_set(struct mbcs_soft *soft) in mbcs_gscr_pioaddr_set() argument
497 soft->gscr_addr = mbcs_pioaddr(soft, MBCS_GSCR_START); in mbcs_gscr_pioaddr_set()
503 struct mbcs_soft *soft = cx_dev->soft; in mbcs_gscr_mmap() local
513 __pa(soft->gscr_addr) >> PAGE_SHIFT, in mbcs_gscr_mmap()
530 struct mbcs_soft *soft = (struct mbcs_soft *)arg; in mbcs_completion_intr_handler() local
535 mmr_base = soft->mmr_base; in mbcs_completion_intr_handler()
545 atomic_set(&soft->dmaread_done, 1); in mbcs_completion_intr_handler()
546 wake_up(&soft->dmaread_queue); in mbcs_completion_intr_handler()
555 atomic_set(&soft->dmawrite_done, 1); in mbcs_completion_intr_handler()
556 wake_up(&soft->dmawrite_queue); in mbcs_completion_intr_handler()
565 atomic_set(&soft->algo_done, 1); in mbcs_completion_intr_handler()
566 wake_up(&soft->algo_queue); in mbcs_completion_intr_handler()
580 struct mbcs_soft *soft; in mbcs_intr_alloc() local
585 soft = dev->soft; in mbcs_intr_alloc()
586 getdma = &soft->getdma; in mbcs_intr_alloc()
587 putdma = &soft->putdma; in mbcs_intr_alloc()
588 algo = &soft->algo; in mbcs_intr_alloc()
590 soft->get_sn_irq = NULL; in mbcs_intr_alloc()
591 soft->put_sn_irq = NULL; in mbcs_intr_alloc()
592 soft->algo_sn_irq = NULL; in mbcs_intr_alloc()
597 soft->get_sn_irq = sn_irq; in mbcs_intr_alloc()
602 "MBCS get intr", (void *)soft)) { in mbcs_intr_alloc()
603 tiocx_irq_free(soft->get_sn_irq); in mbcs_intr_alloc()
609 free_irq(soft->get_sn_irq->irq_irq, soft); in mbcs_intr_alloc()
610 tiocx_irq_free(soft->get_sn_irq); in mbcs_intr_alloc()
613 soft->put_sn_irq = sn_irq; in mbcs_intr_alloc()
618 "MBCS put intr", (void *)soft)) { in mbcs_intr_alloc()
619 tiocx_irq_free(soft->put_sn_irq); in mbcs_intr_alloc()
620 free_irq(soft->get_sn_irq->irq_irq, soft); in mbcs_intr_alloc()
621 tiocx_irq_free(soft->get_sn_irq); in mbcs_intr_alloc()
627 free_irq(soft->put_sn_irq->irq_irq, soft); in mbcs_intr_alloc()
628 tiocx_irq_free(soft->put_sn_irq); in mbcs_intr_alloc()
629 free_irq(soft->get_sn_irq->irq_irq, soft); in mbcs_intr_alloc()
630 tiocx_irq_free(soft->get_sn_irq); in mbcs_intr_alloc()
633 soft->algo_sn_irq = sn_irq; in mbcs_intr_alloc()
638 "MBCS algo intr", (void *)soft)) { in mbcs_intr_alloc()
639 tiocx_irq_free(soft->algo_sn_irq); in mbcs_intr_alloc()
640 free_irq(soft->put_sn_irq->irq_irq, soft); in mbcs_intr_alloc()
641 tiocx_irq_free(soft->put_sn_irq); in mbcs_intr_alloc()
642 free_irq(soft->get_sn_irq->irq_irq, soft); in mbcs_intr_alloc()
643 tiocx_irq_free(soft->get_sn_irq); in mbcs_intr_alloc()
657 struct mbcs_soft *soft; in mbcs_intr_dealloc() local
659 soft = dev->soft; in mbcs_intr_dealloc()
661 free_irq(soft->get_sn_irq->irq_irq, soft); in mbcs_intr_dealloc()
662 tiocx_irq_free(soft->get_sn_irq); in mbcs_intr_dealloc()
663 free_irq(soft->put_sn_irq->irq_irq, soft); in mbcs_intr_dealloc()
664 tiocx_irq_free(soft->put_sn_irq); in mbcs_intr_dealloc()
665 free_irq(soft->algo_sn_irq->irq_irq, soft); in mbcs_intr_dealloc()
666 tiocx_irq_free(soft->algo_sn_irq); in mbcs_intr_dealloc()
669 static inline int mbcs_hw_init(struct mbcs_soft *soft) in mbcs_hw_init() argument
671 void *mmr_base = soft->mmr_base; in mbcs_hw_init()
683 mbcs_gscr_pioaddr_set(soft); in mbcs_hw_init()
684 mbcs_debug_pioaddr_set(soft); in mbcs_hw_init()
710 struct mbcs_soft *soft = cx_dev->soft; in show_algo() local
717 debug0 = *(uint64_t *) soft->debug_addr; in show_algo()
727 struct mbcs_soft *soft = cx_dev->soft; in store_algo() local
735 mbcs_algo_start(soft); in store_algo()
736 if (wait_event_interruptible(soft->algo_queue, in store_algo()
737 atomic_read(&soft->algo_done))) in store_algo()
754 struct mbcs_soft *soft; in mbcs_probe() local
756 dev->soft = NULL; in mbcs_probe()
758 soft = kzalloc(sizeof(struct mbcs_soft), GFP_KERNEL); in mbcs_probe()
759 if (soft == NULL) in mbcs_probe()
762 soft->nasid = dev->cx_id.nasid; in mbcs_probe()
763 list_add(&soft->list, &soft_list); in mbcs_probe()
764 soft->mmr_base = (void *)tiocx_swin_base(dev->cx_id.nasid); in mbcs_probe()
765 dev->soft = soft; in mbcs_probe()
766 soft->cxdev = dev; in mbcs_probe()
768 init_waitqueue_head(&soft->dmawrite_queue); in mbcs_probe()
769 init_waitqueue_head(&soft->dmaread_queue); in mbcs_probe()
770 init_waitqueue_head(&soft->algo_queue); in mbcs_probe()
772 mutex_init(&soft->dmawritelock); in mbcs_probe()
773 mutex_init(&soft->dmareadlock); in mbcs_probe()
774 mutex_init(&soft->algolock); in mbcs_probe()
776 mbcs_getdma_init(&soft->getdma); in mbcs_probe()
777 mbcs_putdma_init(&soft->putdma); in mbcs_probe()
778 mbcs_algo_init(&soft->algo); in mbcs_probe()
780 mbcs_hw_init(soft); in mbcs_probe()
792 if (dev->soft) { in mbcs_remove()
794 kfree(dev->soft); in mbcs_remove()