10 #include <linux/kernel.h>
11 #include <linux/module.h>
15 #include <linux/pci.h>
18 #include <linux/slab.h>
20 #include <linux/sched.h>
22 #include <asm/byteorder.h>
23 #include <linux/swab.h>
26 static bool r592_enable_dma = 1;
29 static const char *tpc_names[] = {
30 "MS_TPC_READ_MG_STATUS",
31 "MS_TPC_READ_LONG_DATA",
32 "MS_TPC_READ_SHORT_DATA",
34 "MS_TPC_READ_QUAD_DATA",
37 "MS_TPC_SET_RW_REG_ADRS",
39 "MS_TPC_WRITE_QUAD_DATA",
41 "MS_TPC_WRITE_SHORT_DATA",
42 "MS_TPC_WRITE_LONG_DATA",
52 return tpc_names[tpc-1];
61 dbg_reg(
"reg #%02d == 0x%08x", address, value);
69 dbg_reg(
"reg #%02d <- 0x%08x", address, value);
77 dbg_reg(
"reg #%02d == 0x%08x", address, value);
85 dbg_reg(
"reg #%02d <- 0x%08x", address, value);
90 static inline void r592_set_reg_mask(
struct r592_device *dev,
94 dbg_reg(
"reg #%02d |= 0x%08x (old =0x%08x)", address, mask, reg);
99 static inline void r592_clear_reg_mask(
struct r592_device *dev,
103 dbg_reg(
"reg #%02d &= 0x%08x (old = 0x%08x, mask = 0x%08x)",
104 address, ~mask, reg, mask);
115 if ((reg & mask) == wanted_mask)
122 if ((reg & mask) == wanted_mask)
137 dbg(
"%sabling the device", enable ?
"en" :
"dis");
156 static int r592_set_mode(
struct r592_device *dev,
bool parallel_mode)
158 if (!parallel_mode) {
159 dbg(
"switching to serial mode");
167 dbg(
"switching to parallel mode");
172 r592_clear_reg_mask(dev,
R592_IO,
184 static void r592_host_reset(
struct r592_device *dev)
192 static void r592_clear_interrupts(
struct r592_device *dev)
200 static int r592_test_io_error(
struct r592_device *dev)
210 static int r592_test_fifo_empty(
struct r592_device *dev)
215 dbg(
"FIFO not ready, trying to reset the device");
216 r592_host_reset(dev);
218 if (r592_read_reg(dev,
R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY)
221 message(
"FIFO still not ready, giving up");
226 static void r592_start_dma(
struct r592_device *dev,
bool is_write)
249 spin_unlock_irqrestore(&dev->
irq_lock, flags);
268 static void r592_check_dma(
struct r592_device *dev)
276 static int r592_transfer_fifo_dma(
struct r592_device *dev)
284 len = dev->
req->sg.length;
285 is_write = dev->
req->data_dir ==
WRITE;
301 message(
"problem in dma_map_sg");
305 r592_start_dma(dev, is_write);
328 static void r592_write_fifo_pio(
struct r592_device *dev,
329 unsigned char *
buffer,
int len)
335 int copy_len =
kfifo_in(&dev->pio_fifo, buffer, len);
342 copy_len =
kfifo_out(&dev->pio_fifo, tmp, 4);
358 kfifo_in(&dev->pio_fifo, buffer, len);
362 static void r592_flush_fifo_write(
struct r592_device *dev)
364 u8 buffer[4] = { 0 };
370 len =
kfifo_out(&dev->pio_fifo, buffer, 4);
379 static void r592_read_fifo_pio(
struct r592_device *dev,
380 unsigned char *buffer,
int len)
388 buffer += bytes_copied;
405 len -=
kfifo_out(&dev->pio_fifo, buffer, len);
413 static int r592_transfer_fifo_pio(
struct r592_device *dev)
422 if (!dev->
req->long_data) {
424 r592_write_fifo_pio(dev, dev->
req->data,
426 r592_flush_fifo_write(dev);
428 r592_read_fifo_pio(dev, dev->
req->data,
440 r592_write_fifo_pio(dev, miter.addr, miter.length);
442 r592_read_fifo_pio(dev, miter.addr, miter.length);
447 r592_flush_fifo_write(dev);
455 static void r592_execute_tpc(
struct r592_device *dev)
462 message(
"BUG: tpc execution without request!");
466 len = dev->
req->long_data ?
467 dev->
req->sg.length : dev->
req->data_len;
471 message(
"IO: hardware doesn't support TPCs longer that 512");
477 dbg(
"IO: refusing to send TPC because card is absent");
482 dbg(
"IO: executing %s LEN=%d",
492 error = r592_test_fifo_empty(dev);
498 error = r592_transfer_fifo_dma(dev);
500 error = r592_transfer_fifo_pio(dev);
515 if (dev->
req->need_card_int)
518 error = r592_wait_status(dev, status, status);
520 message(
"card didn't respond");
525 error = r592_test_io_error(dev);
533 error = r592_transfer_fifo_dma(dev);
535 error = r592_transfer_fifo_pio(dev);
542 dev->
req->int_reg = 0;
556 dbg(
"FIFO read error");
564 static int r592_process_thread(
void *
data)
580 dbg(
"IO: unknown error from "
581 "memstick_next_req %d", error);
590 r592_execute_tpc(dev);
598 static void r592_update_card_detect(
struct r592_device *dev)
603 dbg(
"update card detect. card state: %s", card_detected ?
604 "present" :
"absent");
617 static void r592_detect_timer(
long unsigned int data)
620 r592_update_card_detect(dev);
637 irq_enable = reg >> 16;
638 irq_status = reg & 0xFFFF;
654 message(
"IRQ: card %s", card_was_added ?
"added" :
"removed");
672 r592_stop_dma(dev, error);
676 spin_unlock_irqrestore(&dev->
irq_lock, flags);
690 return r592_enable_device(dev,
true);
692 return r592_enable_device(dev,
false);
699 return r592_set_mode(dev, 0);
701 return r592_set_mode(dev, 1);
721 dbg_verbose(
"IO thread woken to process requests");
743 dev = memstick_priv(host);
746 pci_set_drvdata(pdev, dev);
772 r592_detect_timer, (
long unsigned int)dev);
776 host->
request = r592_submit_req;
789 r592_stop_dma(dev , 0);
795 r592_update_card_detect(dev);
799 message(
"driver successfully loaded");
821 static void r592_remove(
struct pci_dev *pdev)
830 r592_enable_device(dev,
false);
832 while (!error && dev->
req) {
850 static int r592_suspend(
struct device *core_dev)
855 r592_clear_interrupts(dev);
861 static int r592_resume(
struct device *core_dev)
866 r592_clear_interrupts(dev);
867 r592_enable_device(dev,
false);
869 r592_update_card_detect(dev);
880 .id_table = r592_pci_id_tbl,
882 .remove = r592_remove,
884 .driver.pm = &r592_pm_ops,
888 static __init int r592_module_init(
void)
890 return pci_register_driver(&r852_pci_driver);
893 static void __exit r592_module_exit(
void)