ppa.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:28k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* ppa.c   --  low level driver for the IOMEGA PPA3 
  2.  * parallel port SCSI host adapter.
  3.  * 
  4.  * (The PPA3 is the embedded controller in the ZIP drive.)
  5.  * 
  6.  * (c) 1995,1996 Grant R. Guenther, grant@torque.net,
  7.  * under the terms of the GNU General Public License.
  8.  * 
  9.  * Current Maintainer: David Campbell (Perth, Western Australia, GMT+0800)
  10.  *                     campbell@torque.net
  11.  */
  12. #include <linux/config.h>
  13. /* The following #define is to avoid a clash with hosts.c */
  14. #define PPA_CODE 1
  15. #include <linux/blk.h>
  16. #include <asm/io.h>
  17. #include <linux/parport.h>
  18. #include "sd.h"
  19. #include "hosts.h"
  20. int ppa_release(struct Scsi_Host *);
  21. static void ppa_reset_pulse(unsigned int base);
  22. typedef struct {
  23.     struct pardevice *dev; /* Parport device entry         */
  24.     int base; /* Actual port address          */
  25.     int mode; /* Transfer mode                */
  26.     int host; /* Host number (for proc)       */
  27.     Scsi_Cmnd *cur_cmd; /* Current queued command       */
  28.     struct tq_struct ppa_tq; /* Polling interrupt stuff       */
  29.     unsigned long jstart; /* Jiffies at start             */
  30.     unsigned long recon_tmo;    /* How many usecs to wait for reconnection (6th bit) */
  31.     unsigned int failed:1; /* Failure flag                 */
  32.     unsigned int p_busy:1; /* Parport sharing busy flag    */
  33. } ppa_struct;
  34. #define PPA_EMPTY
  35. { dev: NULL,
  36. base: -1,
  37. mode: PPA_AUTODETECT,
  38. host: -1,
  39. cur_cmd: NULL,
  40. ppa_tq: { routine: ppa_interrupt },
  41. jstart: 0,
  42. recon_tmo:      PPA_RECON_TMO,
  43. failed: 0,
  44. p_busy: 0
  45. }
  46. #include  "ppa.h"
  47. #define NO_HOSTS 4
  48. static ppa_struct ppa_hosts[NO_HOSTS] =
  49. {PPA_EMPTY, PPA_EMPTY, PPA_EMPTY, PPA_EMPTY};
  50. #define PPA_BASE(x) ppa_hosts[(x)].base
  51. void ppa_wakeup(void *ref)
  52. {
  53.     ppa_struct *ppa_dev = (ppa_struct *) ref;
  54.     if (!ppa_dev->p_busy)
  55. return;
  56.     if (parport_claim(ppa_dev->dev)) {
  57. printk("ppa: bug in ppa_wakeupn");
  58. return;
  59.     }
  60.     ppa_dev->p_busy = 0;
  61.     ppa_dev->base = ppa_dev->dev->port->base;
  62.     if (ppa_dev->cur_cmd)
  63. ppa_dev->cur_cmd->SCp.phase++;
  64.     return;
  65. }
  66. int ppa_release(struct Scsi_Host *host)
  67. {
  68.     int host_no = host->unique_id;
  69.     printk("Releasing ppa%in", host_no);
  70.     parport_unregister_device(ppa_hosts[host_no].dev);
  71.     return 0;
  72. }
  73. static int ppa_pb_claim(int host_no)
  74. {
  75.     if (parport_claim(ppa_hosts[host_no].dev)) {
  76. ppa_hosts[host_no].p_busy = 1;
  77. return 1;
  78.     }
  79.     if (ppa_hosts[host_no].cur_cmd)
  80. ppa_hosts[host_no].cur_cmd->SCp.phase++;
  81.     return 0;
  82. }
  83. #define ppa_pb_release(x) parport_release(ppa_hosts[(x)].dev)
  84. /***************************************************************************
  85.  *                   Parallel port probing routines                        *
  86.  ***************************************************************************/
  87. static Scsi_Host_Template driver_template = PPA;
  88. #include  "scsi_module.c"
  89. /*
  90.  * Start of Chipset kludges
  91.  */
  92. int ppa_detect(Scsi_Host_Template * host)
  93. {
  94.     struct Scsi_Host *hreg;
  95.     int ports;
  96.     int i, nhosts, try_again;
  97.     struct parport *pb;
  98.     /*
  99.      * unlock to allow the lowlevel parport driver to probe
  100.      * the irqs
  101.      */
  102.     spin_unlock_irq(&io_request_lock);
  103.     pb = parport_enumerate();
  104.     printk("ppa: Version %sn", PPA_VERSION);
  105.     nhosts = 0;
  106.     try_again = 0;
  107.     if (!pb) {
  108. printk("ppa: parport reports no devices.n");
  109. spin_lock_irq(&io_request_lock);
  110. return 0;
  111.     }
  112.   retry_entry:
  113.     for (i = 0; pb; i++, pb = pb->next) {
  114. int modes, ppb, ppb_hi;
  115. ppa_hosts[i].dev =
  116.     parport_register_device(pb, "ppa", NULL, ppa_wakeup,
  117.     NULL, 0, (void *) &ppa_hosts[i]);
  118. if (!ppa_hosts[i].dev)
  119.     continue;
  120. /* Claim the bus so it remembers what we do to the control
  121.  * registers. [ CTR and ECP ]
  122.  */
  123. if (ppa_pb_claim(i)) {
  124.     unsigned long now = jiffies;
  125.     while (ppa_hosts[i].p_busy) {
  126. schedule(); /* We are safe to schedule here */
  127. if (time_after(jiffies, now + 3 * HZ)) {
  128.     printk(KERN_ERR "ppa%d: failed to claim parport because a "
  129.       "pardevice is owning the port for too longtime!n",
  130.    i);
  131.     parport_unregister_device(ppa_hosts[i].dev);
  132.     spin_lock_irq(&io_request_lock);
  133.     return 0;
  134. }
  135.     }
  136. }
  137. ppb = PPA_BASE(i) = ppa_hosts[i].dev->port->base;
  138. ppb_hi =  ppa_hosts[i].dev->port->base_hi;
  139. w_ctr(ppb, 0x0c);
  140. modes = ppa_hosts[i].dev->port->modes;
  141. /* Mode detection works up the chain of speed
  142.  * This avoids a nasty if-then-else-if-... tree
  143.  */
  144. ppa_hosts[i].mode = PPA_NIBBLE;
  145. if (modes & PARPORT_MODE_TRISTATE)
  146.     ppa_hosts[i].mode = PPA_PS2;
  147. if (modes & PARPORT_MODE_ECP) {
  148.     w_ecr(ppb_hi, 0x20);
  149.     ppa_hosts[i].mode = PPA_PS2;
  150. }
  151. if ((modes & PARPORT_MODE_EPP) && (modes & PARPORT_MODE_ECP))
  152.     w_ecr(ppb_hi, 0x80);
  153. /* Done configuration */
  154. ppa_pb_release(i);
  155. if (ppa_init(i)) {
  156.     parport_unregister_device(ppa_hosts[i].dev);
  157.     continue;
  158. }
  159. /* now the glue ... */
  160. switch (ppa_hosts[i].mode) {
  161. case PPA_NIBBLE:
  162.     ports = 3;
  163.     break;
  164. case PPA_PS2:
  165.     ports = 3;
  166.     break;
  167. case PPA_EPP_8:
  168. case PPA_EPP_16:
  169. case PPA_EPP_32:
  170.     ports = 8;
  171.     break;
  172. default: /* Never gets here */
  173.     continue;
  174. }
  175. host->can_queue = PPA_CAN_QUEUE;
  176. host->sg_tablesize = ppa_sg;
  177. hreg = scsi_register(host, 0);
  178. if(hreg == NULL)
  179. continue;
  180. hreg->io_port = pb->base;
  181. hreg->n_io_port = ports;
  182. hreg->dma_channel = -1;
  183. hreg->unique_id = i;
  184. ppa_hosts[i].host = hreg->host_no;
  185. nhosts++;
  186.     }
  187.     if (nhosts == 0) {
  188. if (try_again == 1) {
  189.     printk("WARNING - no ppa compatible devices found.n");
  190.     printk("  As of 31/Aug/1998 Iomega started shipping paralleln");
  191.     printk("  port ZIP drives with a different interface which isn");
  192.     printk("  supported by the imm (ZIP Plus) driver. If then");
  193.     printk("  cable is marked with "AutoDetect", this is what hasn");
  194.     printk("  happened.n");
  195.     spin_lock_irq(&io_request_lock);
  196.     return 0;
  197. }
  198. try_again = 1;
  199. goto retry_entry;
  200.     } else {
  201. spin_lock_irq(&io_request_lock);
  202. return 1; /* return number of hosts detected */
  203.     }
  204. }
  205. /* This is to give the ppa driver a way to modify the timings (and other
  206.  * parameters) by writing to the /proc/scsi/ppa/0 file.
  207.  * Very simple method really... (To simple, no error checking :( )
  208.  * Reason: Kernel hackers HATE having to unload and reload modules for
  209.  * testing...
  210.  * Also gives a method to use a script to obtain optimum timings (TODO)
  211.  */
  212. static inline int ppa_proc_write(int hostno, char *buffer, int length)
  213. {
  214.     unsigned long x;
  215.     if ((length > 5) && (strncmp(buffer, "mode=", 5) == 0)) {
  216. x = simple_strtoul(buffer + 5, NULL, 0);
  217. ppa_hosts[hostno].mode = x;
  218. return length;
  219.     }
  220.     if ((length > 10) && (strncmp(buffer, "recon_tmo=", 10) == 0)) {
  221. x = simple_strtoul(buffer + 10, NULL, 0);
  222. ppa_hosts[hostno].recon_tmo = x;
  223.         printk("ppa: recon_tmo set to %ldn", x);
  224. return length;
  225.     }
  226.     printk("ppa /proc: invalid variablen");
  227.     return (-EINVAL);
  228. }
  229. int ppa_proc_info(char *buffer, char **start, off_t offset,
  230.   int length, int hostno, int inout)
  231. {
  232.     int i;
  233.     int len = 0;
  234.     for (i = 0; i < 4; i++)
  235. if (ppa_hosts[i].host == hostno)
  236.     break;
  237.     if (inout)
  238. return ppa_proc_write(i, buffer, length);
  239.     len += sprintf(buffer + len, "Version : %sn", PPA_VERSION);
  240.     len += sprintf(buffer + len, "Parport : %sn", ppa_hosts[i].dev->port->name);
  241.     len += sprintf(buffer + len, "Mode    : %sn", PPA_MODE_STRING[ppa_hosts[i].mode]);
  242. #if PPA_DEBUG > 0
  243.     len += sprintf(buffer + len, "recon_tmo : %lun", ppa_hosts[i].recon_tmo);
  244. #endif
  245.     /* Request for beyond end of buffer */
  246.     if (offset > length)
  247. return 0;
  248.     *start = buffer + offset;
  249.     len -= offset;
  250.     if (len > length)
  251. len = length;
  252.     return len;
  253. }
  254. static int device_check(int host_no);
  255. #if PPA_DEBUG > 0
  256. #define ppa_fail(x,y) printk("ppa: ppa_fail(%i) from %s at line %dn",
  257.    y, __FUNCTION__, __LINE__); ppa_fail_func(x,y);
  258. static inline void ppa_fail_func(int host_no, int error_code)
  259. #else
  260. static inline void ppa_fail(int host_no, int error_code)
  261. #endif
  262. {
  263.     /* If we fail a device then we trash status / message bytes */
  264.     if (ppa_hosts[host_no].cur_cmd) {
  265. ppa_hosts[host_no].cur_cmd->result = error_code << 16;
  266. ppa_hosts[host_no].failed = 1;
  267.     }
  268. }
  269. /*
  270.  * Wait for the high bit to be set.
  271.  * 
  272.  * In principle, this could be tied to an interrupt, but the adapter
  273.  * doesn't appear to be designed to support interrupts.  We spin on
  274.  * the 0x80 ready bit. 
  275.  */
  276. static unsigned char ppa_wait(int host_no)
  277. {
  278.     int k;
  279.     unsigned short ppb = PPA_BASE(host_no);
  280.     unsigned char r;
  281.     k = PPA_SPIN_TMO;
  282.     /* Wait for bit 6 and 7 - PJC */
  283.     for (r = r_str (ppb); ((r & 0xc0)!=0xc0) && (k); k--) {
  284.     udelay (1);
  285.     r = r_str (ppb);
  286.     }
  287.     /*
  288.      * return some status information.
  289.      * Semantics: 0xc0 = ZIP wants more data
  290.      *            0xd0 = ZIP wants to send more data
  291.      *            0xe0 = ZIP is expecting SCSI command data
  292.      *            0xf0 = end of transfer, ZIP is sending status
  293.      */
  294.     if (k)
  295. return (r & 0xf0);
  296.     /* Counter expired - Time out occurred */
  297.     ppa_fail(host_no, DID_TIME_OUT);
  298.     printk("ppa timeout in ppa_waitn");
  299.     return 0; /* command timed out */
  300. }
  301. /*
  302.  * Clear EPP Timeout Bit 
  303.  */
  304. static inline void epp_reset(unsigned short ppb)
  305. {
  306.     int i;
  307.     i = r_str(ppb);
  308.     w_str(ppb, i);
  309.     w_str(ppb, i & 0xfe);
  310. }
  311. /* 
  312.  * Wait for empty ECP fifo (if we are in ECP fifo mode only)
  313.  */
  314. static inline void ecp_sync(unsigned short hostno)
  315. {
  316.     int i, ppb_hi=ppa_hosts[hostno].dev->port->base_hi;
  317.     if (ppb_hi == 0) return;
  318.     if ((r_ecr(ppb_hi) & 0xe0) == 0x60) { /* mode 011 == ECP fifo mode */
  319.         for (i = 0; i < 100; i++) {
  320.             if (r_ecr(ppb_hi) & 0x01)
  321.                 return;
  322.             udelay(5);
  323.         }
  324.         printk("ppa: ECP sync failed as data still present in FIFO.n");
  325.     }
  326. }
  327. static int ppa_byte_out(unsigned short base, const char *buffer, int len)
  328. {
  329.     int i;
  330.     for (i = len; i; i--) {
  331. w_dtr(base, *buffer++);
  332. w_ctr(base, 0xe);
  333. w_ctr(base, 0xc);
  334.     }
  335.     return 1; /* All went well - we hope! */
  336. }
  337. static int ppa_byte_in(unsigned short base, char *buffer, int len)
  338. {
  339.     int i;
  340.     for (i = len; i; i--) {
  341. *buffer++ = r_dtr(base);
  342. w_ctr(base, 0x27);
  343. w_ctr(base, 0x25);
  344.     }
  345.     return 1; /* All went well - we hope! */
  346. }
  347. static int ppa_nibble_in(unsigned short base, char *buffer, int len)
  348. {
  349.     for (; len; len--) {
  350. unsigned char h;
  351. w_ctr(base, 0x4);
  352. h = r_str(base) & 0xf0;
  353. w_ctr(base, 0x6);
  354. *buffer++ = h | ((r_str(base) & 0xf0) >> 4);
  355.     }
  356.     return 1; /* All went well - we hope! */
  357. }
  358. static int ppa_out(int host_no, char *buffer, int len)
  359. {
  360.     int r;
  361.     unsigned short ppb = PPA_BASE(host_no);
  362.     r = ppa_wait(host_no);
  363.     if ((r & 0x50) != 0x40) {
  364. ppa_fail(host_no, DID_ERROR);
  365. return 0;
  366.     }
  367.     switch (ppa_hosts[host_no].mode) {
  368.     case PPA_NIBBLE:
  369.     case PPA_PS2:
  370. /* 8 bit output, with a loop */
  371. r = ppa_byte_out(ppb, buffer, len);
  372. break;
  373.     case PPA_EPP_32:
  374.     case PPA_EPP_16:
  375.     case PPA_EPP_8:
  376. epp_reset(ppb);
  377. w_ctr(ppb, 0x4);
  378. #ifdef CONFIG_SCSI_IZIP_EPP16
  379. if (!(((long) buffer | len) & 0x01))
  380.     outsw(ppb + 4, buffer, len >> 1);
  381. #else
  382. if (!(((long) buffer | len) & 0x03))
  383.     outsl(ppb + 4, buffer, len >> 2);
  384. #endif
  385. else
  386.     outsb(ppb + 4, buffer, len);
  387. w_ctr(ppb, 0xc);
  388. r = !(r_str(ppb) & 0x01);
  389. w_ctr(ppb, 0xc);
  390. ecp_sync(host_no);
  391. break;
  392.     default:
  393. printk("PPA: bug in ppa_out()n");
  394. r = 0;
  395.     }
  396.     return r;
  397. }
  398. static int ppa_in(int host_no, char *buffer, int len)
  399. {
  400.     int r;
  401.     unsigned short ppb = PPA_BASE(host_no);
  402.     r = ppa_wait(host_no);
  403.     if ((r & 0x50) != 0x50) {
  404. ppa_fail(host_no, DID_ERROR);
  405. return 0;
  406.     }
  407.     switch (ppa_hosts[host_no].mode) {
  408.     case PPA_NIBBLE:
  409. /* 4 bit input, with a loop */
  410. r = ppa_nibble_in(ppb, buffer, len);
  411. w_ctr(ppb, 0xc);
  412. break;
  413.     case PPA_PS2:
  414. /* 8 bit input, with a loop */
  415. w_ctr(ppb, 0x25);
  416. r = ppa_byte_in(ppb, buffer, len);
  417. w_ctr(ppb, 0x4);
  418. w_ctr(ppb, 0xc);
  419. break;
  420.     case PPA_EPP_32:
  421.     case PPA_EPP_16:
  422.     case PPA_EPP_8:
  423. epp_reset(ppb);
  424. w_ctr(ppb, 0x24);
  425. #ifdef CONFIG_SCSI_IZIP_EPP16
  426. if (!(((long) buffer | len) & 0x01))
  427.     insw(ppb + 4, buffer, len >> 1);
  428. #else
  429. if (!(((long) buffer | len) & 0x03))
  430.     insl(ppb + 4, buffer, len >> 2);
  431. #endif
  432. else
  433.     insb(ppb + 4, buffer, len);
  434. w_ctr(ppb, 0x2c);
  435. r = !(r_str(ppb) & 0x01);
  436. w_ctr(ppb, 0x2c);
  437. ecp_sync(host_no);
  438. break;
  439.     default:
  440. printk("PPA: bug in ppa_ins()n");
  441. r = 0;
  442. break;
  443.     }
  444.     return r;
  445. }
  446. /* end of ppa_io.h */
  447. static inline void ppa_d_pulse(unsigned short ppb, unsigned char b)
  448. {
  449.     w_dtr(ppb, b);
  450.     w_ctr(ppb, 0xc);
  451.     w_ctr(ppb, 0xe);
  452.     w_ctr(ppb, 0xc);
  453.     w_ctr(ppb, 0x4);
  454.     w_ctr(ppb, 0xc);
  455. }
  456. static void ppa_disconnect(int host_no)
  457. {
  458.     unsigned short ppb = PPA_BASE(host_no);
  459.     ppa_d_pulse(ppb, 0);
  460.     ppa_d_pulse(ppb, 0x3c);
  461.     ppa_d_pulse(ppb, 0x20);
  462.     ppa_d_pulse(ppb, 0xf);
  463. }
  464. static inline void ppa_c_pulse(unsigned short ppb, unsigned char b)
  465. {
  466.     w_dtr(ppb, b);
  467.     w_ctr(ppb, 0x4);
  468.     w_ctr(ppb, 0x6);
  469.     w_ctr(ppb, 0x4);
  470.     w_ctr(ppb, 0xc);
  471. }
  472. static inline void ppa_connect(int host_no, int flag)
  473. {
  474.     unsigned short ppb = PPA_BASE(host_no);
  475.     ppa_c_pulse(ppb, 0);
  476.     ppa_c_pulse(ppb, 0x3c);
  477.     ppa_c_pulse(ppb, 0x20);
  478.     if ((flag == CONNECT_EPP_MAYBE) &&
  479. IN_EPP_MODE(ppa_hosts[host_no].mode))
  480. ppa_c_pulse(ppb, 0xcf);
  481.     else
  482. ppa_c_pulse(ppb, 0x8f);
  483. }
  484. static int ppa_select(int host_no, int target)
  485. {
  486.     int k;
  487.     unsigned short ppb = PPA_BASE(host_no);
  488.     /*
  489.      * Bit 6 (0x40) is the device selected bit.
  490.      * First we must wait till the current device goes off line...
  491.      */
  492.     k = PPA_SELECT_TMO;
  493.     do {
  494. k--;
  495. udelay(1);
  496.     } while ((r_str(ppb) & 0x40) && (k));
  497.     if (!k)
  498. return 0;
  499.     w_dtr(ppb, (1 << target));
  500.     w_ctr(ppb, 0xe);
  501.     w_ctr(ppb, 0xc);
  502.     w_dtr(ppb, 0x80); /* This is NOT the initator */
  503.     w_ctr(ppb, 0x8);
  504.     k = PPA_SELECT_TMO;
  505.     do {
  506. k--;
  507. udelay(1);
  508.     }
  509.     while (!(r_str(ppb) & 0x40) && (k));
  510.     if (!k)
  511. return 0;
  512.     return 1;
  513. }
  514. /* 
  515.  * This is based on a trace of what the Iomega DOS 'guest' driver does.
  516.  * I've tried several different kinds of parallel ports with guest and
  517.  * coded this to react in the same ways that it does.
  518.  * 
  519.  * The return value from this function is just a hint about where the
  520.  * handshaking failed.
  521.  * 
  522.  */
  523. static int ppa_init(int host_no)
  524. {
  525.     int retv;
  526.     unsigned short ppb = PPA_BASE(host_no);
  527. #if defined(CONFIG_PARPORT) || defined(CONFIG_PARPORT_MODULE)
  528.     if (ppa_pb_claim(host_no))
  529. while (ppa_hosts[host_no].p_busy)
  530.     schedule(); /* We can safe schedule here */
  531. #endif
  532.     ppa_disconnect(host_no);
  533.     ppa_connect(host_no, CONNECT_NORMAL);
  534.     retv = 2; /* Failed */
  535.     w_ctr(ppb, 0xe);
  536.     if ((r_str(ppb) & 0x08) == 0x08)
  537. retv--;
  538.     w_ctr(ppb, 0xc);
  539.     if ((r_str(ppb) & 0x08) == 0x00)
  540. retv--;
  541.     if (!retv)
  542. ppa_reset_pulse(ppb);
  543.     udelay(1000); /* Allow devices to settle down */
  544.     ppa_disconnect(host_no);
  545.     udelay(1000); /* Another delay to allow devices to settle */
  546.     if (!retv)
  547. retv = device_check(host_no);
  548.     ppa_pb_release(host_no);
  549.     return retv;
  550. }
  551. static inline int ppa_send_command(Scsi_Cmnd * cmd)
  552. {
  553.     int host_no = cmd->host->unique_id;
  554.     int k;
  555.     w_ctr(PPA_BASE(host_no), 0x0c);
  556.     for (k = 0; k < cmd->cmd_len; k++)
  557. if (!ppa_out(host_no, &cmd->cmnd[k], 1))
  558.     return 0;
  559.     return 1;
  560. }
  561. /*
  562.  * The bulk flag enables some optimisations in the data transfer loops,
  563.  * it should be true for any command that transfers data in integral
  564.  * numbers of sectors.
  565.  * 
  566.  * The driver appears to remain stable if we speed up the parallel port
  567.  * i/o in this function, but not elsewhere.
  568.  */
  569. static int ppa_completion(Scsi_Cmnd * cmd)
  570. {
  571.     /* Return codes:
  572.      * -1     Error
  573.      *  0     Told to schedule
  574.      *  1     Finished data transfer
  575.      */
  576.     int host_no = cmd->host->unique_id;
  577.     unsigned short ppb = PPA_BASE(host_no);
  578.     unsigned long start_jiffies = jiffies;
  579.     unsigned char r, v;
  580.     int fast, bulk, status;
  581.     v = cmd->cmnd[0];
  582.     bulk = ((v == READ_6) ||
  583.     (v == READ_10) ||
  584.     (v == WRITE_6) ||
  585.     (v == WRITE_10));
  586.     /*
  587.      * We only get here if the drive is ready to comunicate,
  588.      * hence no need for a full ppa_wait.
  589.      */
  590.     r = (r_str(ppb) & 0xf0);
  591.     while (r != (unsigned char) 0xf0) {
  592. /*
  593.  * If we have been running for more than a full timer tick
  594.  * then take a rest.
  595.  */
  596. if (time_after(jiffies, start_jiffies + 1))
  597.     return 0;
  598. if ((cmd->SCp.this_residual <= 0)) {
  599.     ppa_fail(host_no, DID_ERROR);
  600.     return -1; /* ERROR_RETURN */
  601. }
  602. /* On some hardware we have SCSI disconnected (6th bit low)
  603.  * for about 100usecs. It is too expensive to wait a 
  604.  * tick on every loop so we busy wait for no more than
  605.  * 500usecs to give the drive a chance first. We do not 
  606.  * change things for "normal" hardware since generally 
  607.  * the 6th bit is always high.
  608.  * This makes the CPU load higher on some hardware 
  609.  * but otherwise we can not get more then 50K/secs 
  610.  * on this problem hardware.
  611.  */
  612. if ((r & 0xc0) != 0xc0) {
  613.    /* Wait for reconnection should be no more than 
  614.     * jiffy/2 = 5ms = 5000 loops
  615.     */
  616.    unsigned long k = ppa_hosts[host_no].recon_tmo; 
  617.    for (; k && ((r = (r_str(ppb) & 0xf0)) & 0xc0) != 0xc0; k--)
  618.      udelay(1);
  619.    if(!k) 
  620.      return 0;
  621. }    
  622. /* determine if we should use burst I/O */ 
  623. fast = (bulk && (cmd->SCp.this_residual >= PPA_BURST_SIZE)) 
  624.      ? PPA_BURST_SIZE : 1;
  625. if (r == (unsigned char) 0xc0)
  626.     status = ppa_out(host_no, cmd->SCp.ptr, fast);
  627. else
  628.     status = ppa_in(host_no, cmd->SCp.ptr, fast);
  629. cmd->SCp.ptr += fast;
  630. cmd->SCp.this_residual -= fast;
  631. if (!status) {
  632.     ppa_fail(host_no, DID_BUS_BUSY);
  633.     return -1; /* ERROR_RETURN */
  634. }
  635. if (cmd->SCp.buffer && !cmd->SCp.this_residual) {
  636.     /* if scatter/gather, advance to the next segment */
  637.     if (cmd->SCp.buffers_residual--) {
  638. cmd->SCp.buffer++;
  639. cmd->SCp.this_residual = cmd->SCp.buffer->length;
  640. cmd->SCp.ptr = cmd->SCp.buffer->address;
  641.     }
  642. }
  643. /* Now check to see if the drive is ready to comunicate */
  644. r = (r_str(ppb) & 0xf0);
  645. /* If not, drop back down to the scheduler and wait a timer tick */
  646. if (!(r & 0x80))
  647.     return 0;
  648.     }
  649.     return 1; /* FINISH_RETURN */
  650. }
  651. /* deprecated synchronous interface */
  652. int ppa_command(Scsi_Cmnd * cmd)
  653. {
  654.     static int first_pass = 1;
  655.     int host_no = cmd->host->unique_id;
  656.     if (first_pass) {
  657. printk("ppa: using non-queuing interfacen");
  658. first_pass = 0;
  659.     }
  660.     if (ppa_hosts[host_no].cur_cmd) {
  661. printk("PPA: bug in ppa_commandn");
  662. return 0;
  663.     }
  664.     ppa_hosts[host_no].failed = 0;
  665.     ppa_hosts[host_no].jstart = jiffies;
  666.     ppa_hosts[host_no].cur_cmd = cmd;
  667.     cmd->result = DID_ERROR << 16; /* default return code */
  668.     cmd->SCp.phase = 0;
  669.     ppa_pb_claim(host_no);
  670.     while (ppa_engine(&ppa_hosts[host_no], cmd))
  671. schedule();
  672.     if (cmd->SCp.phase) /* Only disconnect if we have connected */
  673. ppa_disconnect(cmd->host->unique_id);
  674.     ppa_pb_release(host_no);
  675.     ppa_hosts[host_no].cur_cmd = 0;
  676.     return cmd->result;
  677. }
  678. /*
  679.  * Since the PPA itself doesn't generate interrupts, we use
  680.  * the scheduler's task queue to generate a stream of call-backs and
  681.  * complete the request when the drive is ready.
  682.  */
  683. static void ppa_interrupt(void *data)
  684. {
  685.     ppa_struct *tmp = (ppa_struct *) data;
  686.     Scsi_Cmnd *cmd = tmp->cur_cmd;
  687.     unsigned long flags;
  688.     if (!cmd) {
  689. printk("PPA: bug in ppa_interruptn");
  690. return;
  691.     }
  692.     if (ppa_engine(tmp, cmd)) {
  693. tmp->ppa_tq.data = (void *) tmp;
  694. tmp->ppa_tq.sync = 0;
  695. queue_task(&tmp->ppa_tq, &tq_timer);
  696. return;
  697.     }
  698.     /* Command must of completed hence it is safe to let go... */
  699. #if PPA_DEBUG > 0
  700.     switch ((cmd->result >> 16) & 0xff) {
  701.     case DID_OK:
  702. break;
  703.     case DID_NO_CONNECT:
  704. printk("ppa: no device at SCSI ID %in", cmd->target);
  705. break;
  706.     case DID_BUS_BUSY:
  707. printk("ppa: BUS BUSY - EPP timeout detectedn");
  708. break;
  709.     case DID_TIME_OUT:
  710. printk("ppa: unknown timeoutn");
  711. break;
  712.     case DID_ABORT:
  713. printk("ppa: told to abortn");
  714. break;
  715.     case DID_PARITY:
  716. printk("ppa: parity error (???)n");
  717. break;
  718.     case DID_ERROR:
  719. printk("ppa: internal driver errorn");
  720. break;
  721.     case DID_RESET:
  722. printk("ppa: told to reset devicen");
  723. break;
  724.     case DID_BAD_INTR:
  725. printk("ppa: bad interrupt (???)n");
  726. break;
  727.     default:
  728. printk("ppa: bad return code (%02x)n", (cmd->result >> 16) & 0xff);
  729.     }
  730. #endif
  731.     if (cmd->SCp.phase > 1)
  732. ppa_disconnect(cmd->host->unique_id);
  733.     if (cmd->SCp.phase > 0)
  734. ppa_pb_release(cmd->host->unique_id);
  735.     tmp->cur_cmd = 0;
  736.     
  737.     spin_lock_irqsave(&io_request_lock, flags);
  738.     cmd->scsi_done(cmd);
  739.     spin_unlock_irqrestore(&io_request_lock, flags);
  740.     return;
  741. }
  742. static int ppa_engine(ppa_struct * tmp, Scsi_Cmnd * cmd)
  743. {
  744.     int host_no = cmd->host->unique_id;
  745.     unsigned short ppb = PPA_BASE(host_no);
  746.     unsigned char l = 0, h = 0;
  747.     int retv;
  748.     /* First check for any errors that may of occurred
  749.      * Here we check for internal errors
  750.      */
  751.     if (tmp->failed)
  752. return 0;
  753.     switch (cmd->SCp.phase) {
  754.     case 0: /* Phase 0 - Waiting for parport */
  755. if ((jiffies - tmp->jstart) > HZ) {
  756.     /*
  757.      * We waited more than a second
  758.      * for parport to call us
  759.      */
  760.     ppa_fail(host_no, DID_BUS_BUSY);
  761.     return 0;
  762. }
  763. return 1; /* wait until ppa_wakeup claims parport */
  764.     case 1: /* Phase 1 - Connected */
  765. { /* Perform a sanity check for cable unplugged */
  766.     int retv = 2; /* Failed */
  767.     ppa_connect(host_no, CONNECT_EPP_MAYBE);
  768.     w_ctr(ppb, 0xe);
  769.     if ((r_str(ppb) & 0x08) == 0x08)
  770. retv--;
  771.     w_ctr(ppb, 0xc);
  772.     if ((r_str(ppb) & 0x08) == 0x00)
  773. retv--;
  774.     if (retv) {
  775. if ((jiffies - tmp->jstart) > (1 * HZ)) {
  776.     printk("ppa: Parallel port cable is unplugged!!n");
  777.     ppa_fail(host_no, DID_BUS_BUSY);
  778.     return 0;
  779. } else {
  780.     ppa_disconnect(host_no);
  781.     return 1; /* Try again in a jiffy */
  782. }
  783.     }
  784.     cmd->SCp.phase++;
  785. }
  786.     case 2: /* Phase 2 - We are now talking to the scsi bus */
  787. if (!ppa_select(host_no, cmd->target)) {
  788.     ppa_fail(host_no, DID_NO_CONNECT);
  789.     return 0;
  790. }
  791. cmd->SCp.phase++;
  792.     case 3: /* Phase 3 - Ready to accept a command */
  793. w_ctr(ppb, 0x0c);
  794. if (!(r_str(ppb) & 0x80))
  795.     return 1;
  796. if (!ppa_send_command(cmd))
  797.     return 0;
  798. cmd->SCp.phase++;
  799.     case 4: /* Phase 4 - Setup scatter/gather buffers */
  800. if (cmd->use_sg) {
  801.     /* if many buffers are available, start filling the first */
  802.     cmd->SCp.buffer = (struct scatterlist *) cmd->request_buffer;
  803.     cmd->SCp.this_residual = cmd->SCp.buffer->length;
  804.     cmd->SCp.ptr = cmd->SCp.buffer->address;
  805. } else {
  806.     /* else fill the only available buffer */
  807.     cmd->SCp.buffer = NULL;
  808.     cmd->SCp.this_residual = cmd->request_bufflen;
  809.     cmd->SCp.ptr = cmd->request_buffer;
  810. }
  811. cmd->SCp.buffers_residual = cmd->use_sg;
  812. cmd->SCp.phase++;
  813.     case 5: /* Phase 5 - Data transfer stage */
  814. w_ctr(ppb, 0x0c);
  815. if (!(r_str(ppb) & 0x80))
  816.     return 1;
  817. retv = ppa_completion(cmd);
  818. if (retv == -1)
  819.     return 0;
  820. if (retv == 0)
  821.     return 1;
  822. cmd->SCp.phase++;
  823.     case 6: /* Phase 6 - Read status/message */
  824. cmd->result = DID_OK << 16;
  825. /* Check for data overrun */
  826. if (ppa_wait(host_no) != (unsigned char) 0xf0) {
  827.     ppa_fail(host_no, DID_ERROR);
  828.     return 0;
  829. }
  830. if (ppa_in(host_no, &l, 1)) { /* read status byte */
  831.     /* Check for optional message byte */
  832.     if (ppa_wait(host_no) == (unsigned char) 0xf0)
  833. ppa_in(host_no, &h, 1);
  834.     cmd->result = (DID_OK << 16) + (h << 8) + (l & STATUS_MASK);
  835. }
  836. return 0; /* Finished */
  837. break;
  838.     default:
  839. printk("ppa: Invalid scsi phasen");
  840.     }
  841.     return 0;
  842. }
  843. int ppa_queuecommand(Scsi_Cmnd * cmd, void (*done) (Scsi_Cmnd *))
  844. {
  845.     int host_no = cmd->host->unique_id;
  846.     if (ppa_hosts[host_no].cur_cmd) {
  847. printk("PPA: bug in ppa_queuecommandn");
  848. return 0;
  849.     }
  850.     ppa_hosts[host_no].failed = 0;
  851.     ppa_hosts[host_no].jstart = jiffies;
  852.     ppa_hosts[host_no].cur_cmd = cmd;
  853.     cmd->scsi_done = done;
  854.     cmd->result = DID_ERROR << 16; /* default return code */
  855.     cmd->SCp.phase = 0; /* bus free */
  856.     ppa_pb_claim(host_no);
  857.     ppa_hosts[host_no].ppa_tq.data = ppa_hosts + host_no;
  858.     ppa_hosts[host_no].ppa_tq.sync = 0;
  859.     queue_task(&ppa_hosts[host_no].ppa_tq, &tq_immediate);
  860.     mark_bh(IMMEDIATE_BH);
  861.     return 0;
  862. }
  863. /*
  864.  * Apparently the the disk->capacity attribute is off by 1 sector 
  865.  * for all disk drives.  We add the one here, but it should really
  866.  * be done in sd.c.  Even if it gets fixed there, this will still
  867.  * work.
  868.  */
  869. int ppa_biosparam(Disk * disk, kdev_t dev, int ip[])
  870. {
  871.     ip[0] = 0x40;
  872.     ip[1] = 0x20;
  873.     ip[2] = (disk->capacity + 1) / (ip[0] * ip[1]);
  874.     if (ip[2] > 1024) {
  875. ip[0] = 0xff;
  876. ip[1] = 0x3f;
  877. ip[2] = (disk->capacity + 1) / (ip[0] * ip[1]);
  878. if (ip[2] > 1023)
  879.     ip[2] = 1023;
  880.     }
  881.     return 0;
  882. }
  883. int ppa_abort(Scsi_Cmnd * cmd)
  884. {
  885.     int host_no = cmd->host->unique_id;
  886.     /*
  887.      * There is no method for aborting commands since Iomega
  888.      * have tied the SCSI_MESSAGE line high in the interface
  889.      */
  890.     switch (cmd->SCp.phase) {
  891.     case 0: /* Do not have access to parport */
  892.     case 1: /* Have not connected to interface */
  893. ppa_hosts[host_no].cur_cmd = NULL; /* Forget the problem */
  894. return SUCCESS;
  895. break;
  896.     default: /* SCSI command sent, can not abort */
  897. return FAILED;
  898. break;
  899.     }
  900. }
  901. static void ppa_reset_pulse(unsigned int base)
  902. {
  903.     w_dtr(base, 0x40);
  904.     w_ctr(base, 0x8);
  905.     udelay(30);
  906.     w_ctr(base, 0xc);
  907. }
  908. int ppa_reset(Scsi_Cmnd * cmd)
  909. {
  910.     int host_no = cmd->host->unique_id;
  911.     if (cmd->SCp.phase)
  912. ppa_disconnect(host_no);
  913.     ppa_hosts[host_no].cur_cmd = NULL; /* Forget the problem */
  914.     ppa_connect(host_no, CONNECT_NORMAL);
  915.     ppa_reset_pulse(PPA_BASE(host_no));
  916.     udelay(1000); /* device settle delay */
  917.     ppa_disconnect(host_no);
  918.     udelay(1000); /* device settle delay */
  919.     return SUCCESS;
  920. }
  921. static int device_check(int host_no)
  922. {
  923.     /* This routine looks for a device and then attempts to use EPP
  924.        to send a command. If all goes as planned then EPP is available. */
  925.     static char cmd[6] =
  926.     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  927.     int loop, old_mode, status, k, ppb = PPA_BASE(host_no);
  928.     unsigned char l;
  929.     old_mode = ppa_hosts[host_no].mode;
  930.     for (loop = 0; loop < 8; loop++) {
  931. /* Attempt to use EPP for Test Unit Ready */
  932. if ((ppb & 0x0007) == 0x0000)
  933.     ppa_hosts[host_no].mode = PPA_EPP_32;
  934.       second_pass:
  935. ppa_connect(host_no, CONNECT_EPP_MAYBE);
  936. /* Select SCSI device */
  937. if (!ppa_select(host_no, loop)) {
  938.     ppa_disconnect(host_no);
  939.     continue;
  940. }
  941. printk("ppa: Found device at ID %i, Attempting to use %sn", loop,
  942.        PPA_MODE_STRING[ppa_hosts[host_no].mode]);
  943. /* Send SCSI command */
  944. status = 1;
  945. w_ctr(ppb, 0x0c);
  946. for (l = 0; (l < 6) && (status); l++)
  947.     status = ppa_out(host_no, cmd, 1);
  948. if (!status) {
  949.     ppa_disconnect(host_no);
  950.     ppa_connect(host_no, CONNECT_EPP_MAYBE);
  951.     w_dtr(ppb, 0x40);
  952.     w_ctr(ppb, 0x08);
  953.     udelay(30);
  954.     w_ctr(ppb, 0x0c);
  955.     udelay(1000);
  956.     ppa_disconnect(host_no);
  957.     udelay(1000);
  958.     if (ppa_hosts[host_no].mode == PPA_EPP_32) {
  959. ppa_hosts[host_no].mode = old_mode;
  960. goto second_pass;
  961.     }
  962.     printk("ppa: Unable to establish communication, aborting driver load.n");
  963.     return 1;
  964. }
  965. w_ctr(ppb, 0x0c);
  966. k = 1000000; /* 1 Second */
  967. do {
  968.     l = r_str(ppb);
  969.     k--;
  970.     udelay(1);
  971. } while (!(l & 0x80) && (k));
  972. l &= 0xf0;
  973. if (l != 0xf0) {
  974.     ppa_disconnect(host_no);
  975.     ppa_connect(host_no, CONNECT_EPP_MAYBE);
  976.     ppa_reset_pulse(ppb);
  977.     udelay(1000);
  978.     ppa_disconnect(host_no);
  979.     udelay(1000);
  980.     if (ppa_hosts[host_no].mode == PPA_EPP_32) {
  981. ppa_hosts[host_no].mode = old_mode;
  982. goto second_pass;
  983.     }
  984.     printk("ppa: Unable to establish communication, aborting driver load.n");
  985.     return 1;
  986. }
  987. ppa_disconnect(host_no);
  988. printk("ppa: Communication established with ID %i using %sn", loop,
  989.        PPA_MODE_STRING[ppa_hosts[host_no].mode]);
  990. ppa_connect(host_no, CONNECT_EPP_MAYBE);
  991. ppa_reset_pulse(ppb);
  992. udelay(1000);
  993. ppa_disconnect(host_no);
  994. udelay(1000);
  995. return 0;
  996.     }
  997.     printk("ppa: No devices found, aborting driver load.n");
  998.     return 1;
  999. }
  1000. MODULE_LICENSE("GPL");