Lines Matching refs:dev
58 static inline u32 r592_read_reg(struct r592_device *dev, int address) in r592_read_reg() argument
60 u32 value = readl(dev->mmio + address); in r592_read_reg()
66 static inline void r592_write_reg(struct r592_device *dev, in r592_write_reg() argument
70 writel(value, dev->mmio + address); in r592_write_reg()
74 static inline u32 r592_read_reg_raw_be(struct r592_device *dev, int address) in r592_read_reg_raw_be() argument
76 u32 value = __raw_readl(dev->mmio + address); in r592_read_reg_raw_be()
82 static inline void r592_write_reg_raw_be(struct r592_device *dev, in r592_write_reg_raw_be() argument
86 __raw_writel(cpu_to_be32(value), dev->mmio + address); in r592_write_reg_raw_be()
90 static inline void r592_set_reg_mask(struct r592_device *dev, in r592_set_reg_mask() argument
93 u32 reg = readl(dev->mmio + address); in r592_set_reg_mask()
95 writel(reg | mask , dev->mmio + address); in r592_set_reg_mask()
99 static inline void r592_clear_reg_mask(struct r592_device *dev, in r592_clear_reg_mask() argument
102 u32 reg = readl(dev->mmio + address); in r592_clear_reg_mask()
105 writel(reg & ~mask, dev->mmio + address); in r592_clear_reg_mask()
110 static int r592_wait_status(struct r592_device *dev, u32 mask, u32 wanted_mask) in r592_wait_status() argument
113 u32 reg = r592_read_reg(dev, R592_STATUS); in r592_wait_status()
120 reg = r592_read_reg(dev, R592_STATUS); in r592_wait_status()
135 static int r592_enable_device(struct r592_device *dev, bool enable) in r592_enable_device() argument
142 r592_write_reg(dev, R592_POWER, R592_POWER_0 | R592_POWER_1); in r592_enable_device()
145 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); in r592_enable_device()
150 r592_write_reg(dev, R592_POWER, 0); in r592_enable_device()
156 static int r592_set_mode(struct r592_device *dev, bool parallel_mode) in r592_set_mode() argument
162 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_SERIAL); in r592_set_mode()
164 r592_clear_reg_mask(dev, R592_POWER, R592_POWER_20); in r592_set_mode()
170 r592_set_reg_mask(dev, R592_POWER, R592_POWER_20); in r592_set_mode()
172 r592_clear_reg_mask(dev, R592_IO, in r592_set_mode()
176 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_PARALLEL); in r592_set_mode()
179 dev->parallel_mode = parallel_mode; in r592_set_mode()
184 static void r592_host_reset(struct r592_device *dev) in r592_host_reset() argument
186 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); in r592_host_reset()
188 r592_set_mode(dev, dev->parallel_mode); in r592_host_reset()
193 static void r592_clear_interrupts(struct r592_device *dev) in r592_clear_interrupts() argument
196 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_ACK_MASK); in r592_clear_interrupts()
197 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_EN_MASK); in r592_clear_interrupts()
202 static int r592_test_io_error(struct r592_device *dev) in r592_test_io_error() argument
204 if (!(r592_read_reg(dev, R592_STATUS) & in r592_test_io_error()
212 static int r592_test_fifo_empty(struct r592_device *dev) in r592_test_fifo_empty() argument
214 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) in r592_test_fifo_empty()
218 r592_host_reset(dev); in r592_test_fifo_empty()
220 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) in r592_test_fifo_empty()
228 static void r592_start_dma(struct r592_device *dev, bool is_write) in r592_start_dma() argument
232 spin_lock_irqsave(&dev->irq_lock, flags); in r592_start_dma()
235 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); in r592_start_dma()
236 r592_set_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); in r592_start_dma()
239 r592_write_reg(dev, R592_FIFO_DMA, sg_dma_address(&dev->req->sg)); in r592_start_dma()
242 reg = r592_read_reg(dev, R592_FIFO_DMA_SETTINGS); in r592_start_dma()
249 r592_write_reg(dev, R592_FIFO_DMA_SETTINGS, reg); in r592_start_dma()
251 spin_unlock_irqrestore(&dev->irq_lock, flags); in r592_start_dma()
255 static void r592_stop_dma(struct r592_device *dev, int error) in r592_stop_dma() argument
257 r592_clear_reg_mask(dev, R592_FIFO_DMA_SETTINGS, in r592_stop_dma()
261 r592_write_reg(dev, R592_FIFO_DMA, in r592_stop_dma()
262 dev->dummy_dma_page_physical_address); in r592_stop_dma()
264 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); in r592_stop_dma()
265 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); in r592_stop_dma()
266 dev->dma_error = error; in r592_stop_dma()
270 static void r592_check_dma(struct r592_device *dev) in r592_check_dma() argument
272 dev->dma_capable = r592_enable_dma && in r592_check_dma()
273 (r592_read_reg(dev, R592_FIFO_DMA_SETTINGS) & in r592_check_dma()
278 static int r592_transfer_fifo_dma(struct r592_device *dev) in r592_transfer_fifo_dma() argument
283 if (!dev->dma_capable || !dev->req->long_data) in r592_transfer_fifo_dma()
286 len = dev->req->sg.length; in r592_transfer_fifo_dma()
287 is_write = dev->req->data_dir == WRITE; in r592_transfer_fifo_dma()
294 dev->dma_error = 0; in r592_transfer_fifo_dma()
295 reinit_completion(&dev->dma_done); in r592_transfer_fifo_dma()
298 sg_count = dma_map_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? in r592_transfer_fifo_dma()
302 (sg_dma_len(&dev->req->sg) < dev->req->sg.length)) { in r592_transfer_fifo_dma()
307 r592_start_dma(dev, is_write); in r592_transfer_fifo_dma()
311 &dev->dma_done, msecs_to_jiffies(1000))) { in r592_transfer_fifo_dma()
313 r592_stop_dma(dev, -ETIMEDOUT); in r592_transfer_fifo_dma()
316 dma_unmap_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? in r592_transfer_fifo_dma()
320 return dev->dma_error; in r592_transfer_fifo_dma()
330 static void r592_write_fifo_pio(struct r592_device *dev, in r592_write_fifo_pio() argument
334 if (!kfifo_is_empty(&dev->pio_fifo)) { in r592_write_fifo_pio()
337 int copy_len = kfifo_in(&dev->pio_fifo, buffer, len); in r592_write_fifo_pio()
339 if (!kfifo_is_full(&dev->pio_fifo)) in r592_write_fifo_pio()
344 copy_len = kfifo_out(&dev->pio_fifo, tmp, 4); in r592_write_fifo_pio()
346 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)tmp); in r592_write_fifo_pio()
349 WARN_ON(!kfifo_is_empty(&dev->pio_fifo)); in r592_write_fifo_pio()
353 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); in r592_write_fifo_pio()
360 kfifo_in(&dev->pio_fifo, buffer, len); in r592_write_fifo_pio()
364 static void r592_flush_fifo_write(struct r592_device *dev) in r592_flush_fifo_write() argument
369 if (kfifo_is_empty(&dev->pio_fifo)) in r592_flush_fifo_write()
372 len = kfifo_out(&dev->pio_fifo, buffer, 4); in r592_flush_fifo_write()
373 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); in r592_flush_fifo_write()
381 static void r592_read_fifo_pio(struct r592_device *dev, in r592_read_fifo_pio() argument
387 if (!kfifo_is_empty(&dev->pio_fifo)) { in r592_read_fifo_pio()
389 kfifo_out(&dev->pio_fifo, buffer, min(4, len)); in r592_read_fifo_pio()
393 if (!kfifo_is_empty(&dev->pio_fifo)) in r592_read_fifo_pio()
399 *(u32 *)buffer = r592_read_reg_raw_be(dev, R592_FIFO_PIO); in r592_read_fifo_pio()
405 *(u32 *)tmp = r592_read_reg_raw_be(dev, R592_FIFO_PIO); in r592_read_fifo_pio()
406 kfifo_in(&dev->pio_fifo, tmp, 4); in r592_read_fifo_pio()
407 len -= kfifo_out(&dev->pio_fifo, buffer, len); in r592_read_fifo_pio()
415 static int r592_transfer_fifo_pio(struct r592_device *dev) in r592_transfer_fifo_pio() argument
419 bool is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; in r592_transfer_fifo_pio()
422 kfifo_reset(&dev->pio_fifo); in r592_transfer_fifo_pio()
424 if (!dev->req->long_data) { in r592_transfer_fifo_pio()
426 r592_write_fifo_pio(dev, dev->req->data, in r592_transfer_fifo_pio()
427 dev->req->data_len); in r592_transfer_fifo_pio()
428 r592_flush_fifo_write(dev); in r592_transfer_fifo_pio()
430 r592_read_fifo_pio(dev, dev->req->data, in r592_transfer_fifo_pio()
431 dev->req->data_len); in r592_transfer_fifo_pio()
436 sg_miter_start(&miter, &dev->req->sg, 1, SG_MITER_ATOMIC | in r592_transfer_fifo_pio()
442 r592_write_fifo_pio(dev, miter.addr, miter.length); in r592_transfer_fifo_pio()
444 r592_read_fifo_pio(dev, miter.addr, miter.length); in r592_transfer_fifo_pio()
449 r592_flush_fifo_write(dev); in r592_transfer_fifo_pio()
457 static void r592_execute_tpc(struct r592_device *dev) in r592_execute_tpc() argument
463 if (!dev->req) { in r592_execute_tpc()
468 is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; in r592_execute_tpc()
469 len = dev->req->long_data ? in r592_execute_tpc()
470 dev->req->sg.length : dev->req->data_len; in r592_execute_tpc()
479 if (!(r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_PRSNT)) { in r592_execute_tpc()
486 memstick_debug_get_tpc_name(dev->req->tpc), len); in r592_execute_tpc()
490 r592_set_reg_mask(dev, R592_IO, R592_IO_DIRECTION); in r592_execute_tpc()
492 r592_clear_reg_mask(dev, R592_IO, R592_IO_DIRECTION); in r592_execute_tpc()
495 error = r592_test_fifo_empty(dev); in r592_execute_tpc()
501 error = r592_transfer_fifo_dma(dev); in r592_execute_tpc()
503 error = r592_transfer_fifo_pio(dev); in r592_execute_tpc()
511 (dev->req->tpc << R592_TPC_EXEC_TPC_SHIFT) | in r592_execute_tpc()
514 r592_write_reg(dev, R592_TPC_EXEC, reg); in r592_execute_tpc()
518 if (dev->req->need_card_int) in r592_execute_tpc()
521 error = r592_wait_status(dev, status, status); in r592_execute_tpc()
528 error = r592_test_io_error(dev); in r592_execute_tpc()
536 error = r592_transfer_fifo_dma(dev); in r592_execute_tpc()
538 error = r592_transfer_fifo_pio(dev); in r592_execute_tpc()
543 if (dev->parallel_mode && dev->req->need_card_int) { in r592_execute_tpc()
545 dev->req->int_reg = 0; in r592_execute_tpc()
546 status = r592_read_reg(dev, R592_STATUS); in r592_execute_tpc()
549 dev->req->int_reg |= MEMSTICK_INT_CMDNAK; in r592_execute_tpc()
551 dev->req->int_reg |= MEMSTICK_INT_BREQ; in r592_execute_tpc()
553 dev->req->int_reg |= MEMSTICK_INT_ERR; in r592_execute_tpc()
555 dev->req->int_reg |= MEMSTICK_INT_CED; in r592_execute_tpc()
561 dev->req->error = error; in r592_execute_tpc()
562 r592_clear_reg_mask(dev, R592_REG_MSC, R592_REG_MSC_LED); in r592_execute_tpc()
570 struct r592_device *dev = (struct r592_device *)data; in r592_process_thread() local
574 spin_lock_irqsave(&dev->io_thread_lock, flags); in r592_process_thread()
576 error = memstick_next_req(dev->host, &dev->req); in r592_process_thread()
577 spin_unlock_irqrestore(&dev->io_thread_lock, flags); in r592_process_thread()
593 r592_execute_tpc(dev); in r592_process_thread()
601 static void r592_update_card_detect(struct r592_device *dev) in r592_update_card_detect() argument
603 u32 reg = r592_read_reg(dev, R592_REG_MSC); in r592_update_card_detect()
616 r592_write_reg(dev, R592_REG_MSC, reg); in r592_update_card_detect()
622 struct r592_device *dev = (struct r592_device *)data; in r592_detect_timer() local
623 r592_update_card_detect(dev); in r592_detect_timer()
624 memstick_detect_change(dev->host); in r592_detect_timer()
630 struct r592_device *dev = (struct r592_device *)data; in r592_irq() local
637 spin_lock_irqsave(&dev->irq_lock, flags); in r592_irq()
639 reg = r592_read_reg(dev, R592_REG_MSC); in r592_irq()
645 r592_write_reg(dev, R592_REG_MSC, reg); in r592_irq()
659 mod_timer(&dev->detect_timer, in r592_irq()
675 r592_stop_dma(dev, error); in r592_irq()
676 complete(&dev->dma_done); in r592_irq()
679 spin_unlock_irqrestore(&dev->irq_lock, flags); in r592_irq()
687 struct r592_device *dev = memstick_priv(host); in r592_set_param() local
693 return r592_enable_device(dev, true); in r592_set_param()
695 return r592_enable_device(dev, false); in r592_set_param()
702 return r592_set_mode(dev, 0); in r592_set_param()
704 return r592_set_mode(dev, 1); in r592_set_param()
716 struct r592_device *dev = memstick_priv(host); in r592_submit_req() local
719 if (dev->req) in r592_submit_req()
722 spin_lock_irqsave(&dev->io_thread_lock, flags); in r592_submit_req()
723 if (wake_up_process(dev->io_thread)) in r592_submit_req()
725 spin_unlock_irqrestore(&dev->io_thread_lock, flags); in r592_submit_req()
739 struct r592_device *dev; in r592_probe() local
742 host = memstick_alloc_host(sizeof(struct r592_device), &pdev->dev); in r592_probe()
746 dev = memstick_priv(host); in r592_probe()
747 dev->host = host; in r592_probe()
748 dev->pci_dev = pdev; in r592_probe()
749 pci_set_drvdata(pdev, dev); in r592_probe()
757 error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); in r592_probe()
765 dev->mmio = pci_ioremap_bar(pdev, 0); in r592_probe()
766 if (!dev->mmio) in r592_probe()
769 dev->irq = pdev->irq; in r592_probe()
770 spin_lock_init(&dev->irq_lock); in r592_probe()
771 spin_lock_init(&dev->io_thread_lock); in r592_probe()
772 init_completion(&dev->dma_done); in r592_probe()
773 INIT_KFIFO(dev->pio_fifo); in r592_probe()
774 setup_timer(&dev->detect_timer, in r592_probe()
775 r592_detect_timer, (long unsigned int)dev); in r592_probe()
781 r592_check_dma(dev); in r592_probe()
783 dev->io_thread = kthread_run(r592_process_thread, dev, "r592_io"); in r592_probe()
784 if (IS_ERR(dev->io_thread)) { in r592_probe()
785 error = PTR_ERR(dev->io_thread); in r592_probe()
790 dev->dummy_dma_page = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, in r592_probe()
791 &dev->dummy_dma_page_physical_address, GFP_KERNEL); in r592_probe()
792 r592_stop_dma(dev , 0); in r592_probe()
794 if (request_irq(dev->irq, &r592_irq, IRQF_SHARED, in r592_probe()
795 DRV_NAME, dev)) in r592_probe()
798 r592_update_card_detect(dev); in r592_probe()
805 free_irq(dev->irq, dev); in r592_probe()
807 if (dev->dummy_dma_page) in r592_probe()
808 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, in r592_probe()
809 dev->dummy_dma_page_physical_address); in r592_probe()
811 kthread_stop(dev->io_thread); in r592_probe()
813 iounmap(dev->mmio); in r592_probe()
827 struct r592_device *dev = pci_get_drvdata(pdev); in r592_remove() local
831 kthread_stop(dev->io_thread); in r592_remove()
833 r592_enable_device(dev, false); in r592_remove()
835 while (!error && dev->req) { in r592_remove()
836 dev->req->error = -ETIME; in r592_remove()
837 error = memstick_next_req(dev->host, &dev->req); in r592_remove()
839 memstick_remove_host(dev->host); in r592_remove()
841 free_irq(dev->irq, dev); in r592_remove()
842 iounmap(dev->mmio); in r592_remove()
845 memstick_free_host(dev->host); in r592_remove()
847 if (dev->dummy_dma_page) in r592_remove()
848 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, in r592_remove()
849 dev->dummy_dma_page_physical_address); in r592_remove()
856 struct r592_device *dev = pci_get_drvdata(pdev); in r592_suspend() local
858 r592_clear_interrupts(dev); in r592_suspend()
859 memstick_suspend_host(dev->host); in r592_suspend()
860 del_timer_sync(&dev->detect_timer); in r592_suspend()
867 struct r592_device *dev = pci_get_drvdata(pdev); in r592_resume() local
869 r592_clear_interrupts(dev); in r592_resume()
870 r592_enable_device(dev, false); in r592_resume()
871 memstick_resume_host(dev->host); in r592_resume()
872 r592_update_card_detect(dev); in r592_resume()