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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Low-level parallel-port routines for 8255-based PC-style hardware.
  2.  * 
  3.  * Authors: Phil Blundell <Philip.Blundell@pobox.com>
  4.  *          Tim Waugh <tim@cyberelk.demon.co.uk>
  5.  *     Jose Renau <renau@acm.org>
  6.  *          David Campbell <campbell@torque.net>
  7.  *          Andrea Arcangeli
  8.  *
  9.  * based on work by Grant Guenther <grant@torque.net> and Phil Blundell.
  10.  *
  11.  * Cleaned up include files - Russell King <linux@arm.uk.linux.org>
  12.  * DMA support - Bert De Jonghe <bert@sophis.be>
  13.  * Many ECP bugs fixed.  Fred Barnes & Jamie Lokier, 1999
  14.  * More PCI support now conditional on CONFIG_PCI, 03/2001, Paul G. 
  15.  * Various hacks, Fred Barnes, 04/2001
  16.  */
  17. /* This driver should work with any hardware that is broadly compatible
  18.  * with that in the IBM PC.  This applies to the majority of integrated
  19.  * I/O chipsets that are commonly available.  The expected register
  20.  * layout is:
  21.  *
  22.  * base+0 data
  23.  * base+1 status
  24.  * base+2 control
  25.  *
  26.  * In addition, there are some optional registers:
  27.  *
  28.  * base+3 EPP address
  29.  * base+4 EPP data
  30.  * base+0x400 ECP config A
  31.  * base+0x401 ECP config B
  32.  * base+0x402 ECP control
  33.  *
  34.  * All registers are 8 bits wide and read/write.  If your hardware differs
  35.  * only in register addresses (eg because your registers are on 32-bit
  36.  * word boundaries) then you can alter the constants in parport_pc.h to
  37.  * accomodate this.
  38.  *
  39.  * Note that the ECP registers may not start at offset 0x400 for PCI cards,
  40.  * but rather will start at port->base_hi.
  41.  */
  42. #include <linux/config.h>
  43. #include <linux/module.h>
  44. #include <linux/init.h>
  45. #include <linux/sched.h>
  46. #include <linux/delay.h>
  47. #include <linux/errno.h>
  48. #include <linux/interrupt.h>
  49. #include <linux/ioport.h>
  50. #include <linux/kernel.h>
  51. #include <linux/slab.h>
  52. #include <linux/pci.h>
  53. #include <linux/sysctl.h>
  54. #include <asm/io.h>
  55. #include <asm/dma.h>
  56. #include <asm/uaccess.h>
  57. #include <linux/parport.h>
  58. #include <linux/parport_pc.h>
  59. #include <asm/parport.h>
  60. #define PARPORT_PC_MAX_PORTS PARPORT_MAX
  61. /* ECR modes */
  62. #define ECR_SPP 00
  63. #define ECR_PS2 01
  64. #define ECR_PPF 02
  65. #define ECR_ECP 03
  66. #define ECR_EPP 04
  67. #define ECR_VND 05
  68. #define ECR_TST 06
  69. #define ECR_CNF 07
  70. #define ECR_MODE_MASK 0xe0
  71. #define ECR_WRITE(p,v) frob_econtrol((p),0xff,(v))
  72. #undef DEBUG
  73. #ifdef DEBUG
  74. #define DPRINTK  printk
  75. #else
  76. #define DPRINTK(stuff...)
  77. #endif
  78. #define NR_SUPERIOS 3
  79. static struct superio_struct { /* For Super-IO chips autodetection */
  80. int io;
  81. int irq;
  82. int dma;
  83. } superios[NR_SUPERIOS] __devinitdata = { {0,},};
  84. static int user_specified __devinitdata = 0;
  85. #if defined(CONFIG_PARPORT_PC_FIFO) || defined(CONFIG_PARPORT_PC_SUPERIO)
  86. static int verbose_probing;
  87. #endif
  88. static int registered_parport;
  89. /* frob_control, but for ECR */
  90. static void frob_econtrol (struct parport *pb, unsigned char m,
  91.    unsigned char v)
  92. {
  93. unsigned char ectr = 0;
  94. if (m != 0xff)
  95. ectr = inb (ECONTROL (pb));
  96. DPRINTK (KERN_DEBUG "frob_econtrol(%02x,%02x): %02x -> %02xn",
  97. m, v, ectr, (ectr & ~m) ^ v);
  98. outb ((ectr & ~m) ^ v, ECONTROL (pb));
  99. }
  100. static void __inline__ frob_set_mode (struct parport *p, int mode)
  101. {
  102. frob_econtrol (p, ECR_MODE_MASK, mode << 5);
  103. }
  104. #ifdef CONFIG_PARPORT_PC_FIFO
  105. /* Safely change the mode bits in the ECR 
  106.    Returns:
  107.     0    : Success
  108.    -EBUSY: Could not drain FIFO in some finite amount of time,
  109.    mode not changed!
  110.  */
  111. static int change_mode(struct parport *p, int m)
  112. {
  113. const struct parport_pc_private *priv = p->physport->private_data;
  114. unsigned char oecr;
  115. int mode;
  116. DPRINTK(KERN_INFO "parport change_mode ECP-ISA to mode 0x%02xn",m);
  117. if (!priv->ecr) {
  118. printk (KERN_DEBUG "change_mode: but there's no ECR!n");
  119. return 0;
  120. }
  121. /* Bits <7:5> contain the mode. */
  122. oecr = inb (ECONTROL (p));
  123. mode = (oecr >> 5) & 0x7;
  124. if (mode == m) return 0;
  125. if (mode >= 2 && !(priv->ctr & 0x20)) {
  126. /* This mode resets the FIFO, so we may
  127.  * have to wait for it to drain first. */
  128. long expire = jiffies + p->physport->cad->timeout;
  129. int counter;
  130. switch (mode) {
  131. case ECR_PPF: /* Parallel Port FIFO mode */
  132. case ECR_ECP: /* ECP Parallel Port mode */
  133. /* Busy wait for 200us */
  134. for (counter = 0; counter < 40; counter++) {
  135. if (inb (ECONTROL (p)) & 0x01)
  136. break;
  137. if (signal_pending (current)) break;
  138. udelay (5);
  139. }
  140. /* Poll slowly. */
  141. while (!(inb (ECONTROL (p)) & 0x01)) {
  142. if (time_after_eq (jiffies, expire))
  143. /* The FIFO is stuck. */
  144. return -EBUSY;
  145. __set_current_state (TASK_INTERRUPTIBLE);
  146. schedule_timeout ((HZ + 99) / 100);
  147. if (signal_pending (current))
  148. break;
  149. }
  150. }
  151. }
  152. if (mode >= 2 && m >= 2) {
  153. /* We have to go through mode 001 */
  154. oecr &= ~(7 << 5);
  155. oecr |= ECR_PS2 << 5;
  156. ECR_WRITE (p, oecr);
  157. }
  158. /* Set the mode. */
  159. oecr &= ~(7 << 5);
  160. oecr |= m << 5;
  161. ECR_WRITE (p, oecr);
  162. return 0;
  163. }
  164. #ifdef CONFIG_PARPORT_1284
  165. /* Find FIFO lossage; FIFO is reset */
  166. static int get_fifo_residue (struct parport *p)
  167. {
  168. int residue;
  169. int cnfga;
  170. const struct parport_pc_private *priv = p->physport->private_data;
  171. /* Adjust for the contents of the FIFO. */
  172. for (residue = priv->fifo_depth; ; residue--) {
  173. if (inb (ECONTROL (p)) & 0x2)
  174. /* Full up. */
  175. break;
  176. outb (0, FIFO (p));
  177. }
  178. printk (KERN_DEBUG "%s: %d PWords were left in FIFOn", p->name,
  179. residue);
  180. /* Reset the FIFO. */
  181. frob_set_mode (p, ECR_PS2);
  182. /* Now change to config mode and clean up. FIXME */
  183. frob_set_mode (p, ECR_CNF);
  184. cnfga = inb (CONFIGA (p));
  185. printk (KERN_DEBUG "%s: cnfgA contains 0x%02xn", p->name, cnfga);
  186. if (!(cnfga & (1<<2))) {
  187. printk (KERN_DEBUG "%s: Accounting for extra byten", p->name);
  188. residue++;
  189. }
  190. /* Don't care about partial PWords until support is added for
  191.  * PWord != 1 byte. */
  192. /* Back to PS2 mode. */
  193. frob_set_mode (p, ECR_PS2);
  194. DPRINTK (KERN_DEBUG "*** get_fifo_residue: done residue collecting (ecr = 0x%2.2x)n", inb (ECONTROL (p)));
  195. return residue;
  196. }
  197. #endif /* IEEE 1284 support */
  198. #endif /* FIFO support */
  199. /*
  200.  * Clear TIMEOUT BIT in EPP MODE
  201.  *
  202.  * This is also used in SPP detection.
  203.  */
  204. static int clear_epp_timeout(struct parport *pb)
  205. {
  206. unsigned char r;
  207. if (!(parport_pc_read_status(pb) & 0x01))
  208. return 1;
  209. /* To clear timeout some chips require double read */
  210. parport_pc_read_status(pb);
  211. r = parport_pc_read_status(pb);
  212. outb (r | 0x01, STATUS (pb)); /* Some reset by writing 1 */
  213. outb (r & 0xfe, STATUS (pb)); /* Others by writing 0 */
  214. r = parport_pc_read_status(pb);
  215. return !(r & 0x01);
  216. }
  217. /*
  218.  * Access functions.
  219.  *
  220.  * Most of these aren't static because they may be used by the
  221.  * parport_xxx_yyy macros.  extern __inline__ versions of several
  222.  * of these are in parport_pc.h.
  223.  */
  224. static void parport_pc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  225. {
  226. parport_generic_irq(irq, (struct parport *) dev_id, regs);
  227. }
  228. void parport_pc_write_data(struct parport *p, unsigned char d)
  229. {
  230. outb (d, DATA (p));
  231. }
  232. unsigned char parport_pc_read_data(struct parport *p)
  233. {
  234. return inb (DATA (p));
  235. }
  236. void parport_pc_write_control(struct parport *p, unsigned char d)
  237. {
  238. const unsigned char wm = (PARPORT_CONTROL_STROBE |
  239.   PARPORT_CONTROL_AUTOFD |
  240.   PARPORT_CONTROL_INIT |
  241.   PARPORT_CONTROL_SELECT);
  242. /* Take this out when drivers have adapted to the newer interface. */
  243. if (d & 0x20) {
  244. printk (KERN_DEBUG "%s (%s): use data_reverse for this!n",
  245. p->name, p->cad->name);
  246. parport_pc_data_reverse (p);
  247. }
  248. __parport_pc_frob_control (p, wm, d & wm);
  249. }
  250. unsigned char parport_pc_read_control(struct parport *p)
  251. {
  252. const unsigned char wm = (PARPORT_CONTROL_STROBE |
  253.   PARPORT_CONTROL_AUTOFD |
  254.   PARPORT_CONTROL_INIT |
  255.   PARPORT_CONTROL_SELECT);
  256. const struct parport_pc_private *priv = p->physport->private_data;
  257. return priv->ctr & wm; /* Use soft copy */
  258. }
  259. unsigned char parport_pc_frob_control (struct parport *p, unsigned char mask,
  260.        unsigned char val)
  261. {
  262. const unsigned char wm = (PARPORT_CONTROL_STROBE |
  263.   PARPORT_CONTROL_AUTOFD |
  264.   PARPORT_CONTROL_INIT |
  265.   PARPORT_CONTROL_SELECT);
  266. /* Take this out when drivers have adapted to the newer interface. */
  267. if (mask & 0x20) {
  268. printk (KERN_DEBUG "%s (%s): use data_%s for this!n",
  269. p->name, p->cad->name,
  270. (val & 0x20) ? "reverse" : "forward");
  271. if (val & 0x20)
  272. parport_pc_data_reverse (p);
  273. else
  274. parport_pc_data_forward (p);
  275. }
  276. /* Restrict mask and val to control lines. */
  277. mask &= wm;
  278. val &= wm;
  279. return __parport_pc_frob_control (p, mask, val);
  280. }
  281. unsigned char parport_pc_read_status(struct parport *p)
  282. {
  283. return inb (STATUS (p));
  284. }
  285. void parport_pc_disable_irq(struct parport *p)
  286. {
  287. __parport_pc_frob_control (p, 0x10, 0);
  288. }
  289. void parport_pc_enable_irq(struct parport *p)
  290. {
  291. if (p->irq != PARPORT_IRQ_NONE)
  292. __parport_pc_frob_control (p, 0x10, 0x10);
  293. }
  294. void parport_pc_data_forward (struct parport *p)
  295. {
  296. __parport_pc_frob_control (p, 0x20, 0);
  297. }
  298. void parport_pc_data_reverse (struct parport *p)
  299. {
  300. __parport_pc_frob_control (p, 0x20, 0x20);
  301. }
  302. void parport_pc_init_state(struct pardevice *dev, struct parport_state *s)
  303. {
  304. s->u.pc.ctr = 0xc;
  305. if (dev->irq_func &&
  306.     dev->port->irq != PARPORT_IRQ_NONE)
  307. /* Set ackIntEn */
  308. s->u.pc.ctr |= 0x10;
  309. s->u.pc.ecr = 0x34; /* NetMos chip can cause problems 0x24;
  310.      * D.Gruszka VScom */
  311. }
  312. void parport_pc_save_state(struct parport *p, struct parport_state *s)
  313. {
  314. const struct parport_pc_private *priv = p->physport->private_data;
  315. s->u.pc.ctr = priv->ctr;
  316. if (priv->ecr)
  317. s->u.pc.ecr = inb (ECONTROL (p));
  318. }
  319. void parport_pc_restore_state(struct parport *p, struct parport_state *s)
  320. {
  321. struct parport_pc_private *priv = p->physport->private_data;
  322. register unsigned char c = s->u.pc.ctr & priv->ctr_writable;
  323. outb (c, CONTROL (p));
  324. priv->ctr = c;
  325. if (priv->ecr)
  326. ECR_WRITE (p, s->u.pc.ecr);
  327. }
  328. #ifdef CONFIG_PARPORT_1284
  329. static size_t parport_pc_epp_read_data (struct parport *port, void *buf,
  330. size_t length, int flags)
  331. {
  332. size_t got = 0;
  333. if (flags & PARPORT_W91284PIC) {
  334. unsigned char status;
  335. size_t left = length;
  336. /* use knowledge about data lines..:
  337.  *  nFault is 0 if there is at least 1 byte in the Warp's FIFO
  338.  *  pError is 1 if there are 16 bytes in the Warp's FIFO
  339.  */
  340. status = inb (STATUS (port));
  341. while (!(status & 0x08) && (got < length)) {
  342. if ((left >= 16) && (status & 0x20) && !(status & 0x08)) {
  343. /* can grab 16 bytes from warp fifo */
  344. if (!((long)buf & 0x03)) {
  345. insl (EPPDATA (port), buf, 4);
  346. } else {
  347. insb (EPPDATA (port), buf, 16);
  348. }
  349. buf += 16;
  350. got += 16;
  351. left -= 16;
  352. } else {
  353. /* grab single byte from the warp fifo */
  354. *((char *)buf)++ = inb (EPPDATA (port));
  355. got++;
  356. left--;
  357. }
  358. status = inb (STATUS (port));
  359. if (status & 0x01) {
  360. /* EPP timeout should never occur... */
  361. printk (KERN_DEBUG "%s: EPP timeout occured while talking to "
  362. "w91284pic (should not have done)n", port->name);
  363. clear_epp_timeout (port);
  364. }
  365. }
  366. return got;
  367. }
  368. if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
  369. if (!(((long)buf | length) & 0x03)) {
  370. insl (EPPDATA (port), buf, (length >> 2));
  371. } else {
  372. insb (EPPDATA (port), buf, length);
  373. }
  374. if (inb (STATUS (port)) & 0x01) {
  375. clear_epp_timeout (port);
  376. return -EIO;
  377. }
  378. return length;
  379. }
  380. for (; got < length; got++) {
  381. *((char*)buf)++ = inb (EPPDATA(port));
  382. if (inb (STATUS (port)) & 0x01) {
  383. /* EPP timeout */
  384. clear_epp_timeout (port);
  385. break;
  386. }
  387. }
  388. return got;
  389. }
  390. static size_t parport_pc_epp_write_data (struct parport *port, const void *buf,
  391.  size_t length, int flags)
  392. {
  393. size_t written = 0;
  394. if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
  395. if (!(((long)buf | length) & 0x03)) {
  396. outsl (EPPDATA (port), buf, (length >> 2));
  397. } else {
  398. outsb (EPPDATA (port), buf, length);
  399. }
  400. if (inb (STATUS (port)) & 0x01) {
  401. clear_epp_timeout (port);
  402. return -EIO;
  403. }
  404. return length;
  405. }
  406. for (; written < length; written++) {
  407. outb (*((char*)buf)++, EPPDATA(port));
  408. if (inb (STATUS(port)) & 0x01) {
  409. clear_epp_timeout (port);
  410. break;
  411. }
  412. }
  413. return written;
  414. }
  415. static size_t parport_pc_epp_read_addr (struct parport *port, void *buf,
  416. size_t length, int flags)
  417. {
  418. size_t got = 0;
  419. if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
  420. insb (EPPADDR (port), buf, length);
  421. if (inb (STATUS (port)) & 0x01) {
  422. clear_epp_timeout (port);
  423. return -EIO;
  424. }
  425. return length;
  426. }
  427. for (; got < length; got++) {
  428. *((char*)buf)++ = inb (EPPADDR (port));
  429. if (inb (STATUS (port)) & 0x01) {
  430. clear_epp_timeout (port);
  431. break;
  432. }
  433. }
  434. return got;
  435. }
  436. static size_t parport_pc_epp_write_addr (struct parport *port,
  437.  const void *buf, size_t length,
  438.  int flags)
  439. {
  440. size_t written = 0;
  441. if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
  442. outsb (EPPADDR (port), buf, length);
  443. if (inb (STATUS (port)) & 0x01) {
  444. clear_epp_timeout (port);
  445. return -EIO;
  446. }
  447. return length;
  448. }
  449. for (; written < length; written++) {
  450. outb (*((char*)buf)++, EPPADDR (port));
  451. if (inb (STATUS (port)) & 0x01) {
  452. clear_epp_timeout (port);
  453. break;
  454. }
  455. }
  456. return written;
  457. }
  458. static size_t parport_pc_ecpepp_read_data (struct parport *port, void *buf,
  459.    size_t length, int flags)
  460. {
  461. size_t got;
  462. frob_set_mode (port, ECR_EPP);
  463. parport_pc_data_reverse (port);
  464. parport_pc_write_control (port, 0x4);
  465. got = parport_pc_epp_read_data (port, buf, length, flags);
  466. frob_set_mode (port, ECR_PS2);
  467. return got;
  468. }
  469. static size_t parport_pc_ecpepp_write_data (struct parport *port,
  470.     const void *buf, size_t length,
  471.     int flags)
  472. {
  473. size_t written;
  474. frob_set_mode (port, ECR_EPP);
  475. parport_pc_write_control (port, 0x4);
  476. parport_pc_data_forward (port);
  477. written = parport_pc_epp_write_data (port, buf, length, flags);
  478. frob_set_mode (port, ECR_PS2);
  479. return written;
  480. }
  481. static size_t parport_pc_ecpepp_read_addr (struct parport *port, void *buf,
  482.    size_t length, int flags)
  483. {
  484. size_t got;
  485. frob_set_mode (port, ECR_EPP);
  486. parport_pc_data_reverse (port);
  487. parport_pc_write_control (port, 0x4);
  488. got = parport_pc_epp_read_addr (port, buf, length, flags);
  489. frob_set_mode (port, ECR_PS2);
  490. return got;
  491. }
  492. static size_t parport_pc_ecpepp_write_addr (struct parport *port,
  493.     const void *buf, size_t length,
  494.     int flags)
  495. {
  496. size_t written;
  497. frob_set_mode (port, ECR_EPP);
  498. parport_pc_write_control (port, 0x4);
  499. parport_pc_data_forward (port);
  500. written = parport_pc_epp_write_addr (port, buf, length, flags);
  501. frob_set_mode (port, ECR_PS2);
  502. return written;
  503. }
  504. #endif /* IEEE 1284 support */
  505. #ifdef CONFIG_PARPORT_PC_FIFO
  506. static size_t parport_pc_fifo_write_block_pio (struct parport *port,
  507.        const void *buf, size_t length)
  508. {
  509. int ret = 0;
  510. const unsigned char *bufp = buf;
  511. size_t left = length;
  512. long expire = jiffies + port->physport->cad->timeout;
  513. const int fifo = FIFO (port);
  514. int poll_for = 8; /* 80 usecs */
  515. const struct parport_pc_private *priv = port->physport->private_data;
  516. const int fifo_depth = priv->fifo_depth;
  517. port = port->physport;
  518. /* We don't want to be interrupted every character. */
  519. parport_pc_disable_irq (port);
  520. /* set nErrIntrEn and serviceIntr */
  521. frob_econtrol (port, (1<<4) | (1<<2), (1<<4) | (1<<2));
  522. /* Forward mode. */
  523. parport_pc_data_forward (port); /* Must be in PS2 mode */
  524. while (left) {
  525. unsigned char byte;
  526. unsigned char ecrval = inb (ECONTROL (port));
  527. int i = 0;
  528. if (current->need_resched && time_before (jiffies, expire))
  529. /* Can't yield the port. */
  530. schedule ();
  531. /* Anyone else waiting for the port? */
  532. if (port->waithead) {
  533. printk (KERN_DEBUG "Somebody wants the portn");
  534. break;
  535. }
  536. if (ecrval & 0x02) {
  537. /* FIFO is full. Wait for interrupt. */
  538. /* Clear serviceIntr */
  539. ECR_WRITE (port, ecrval & ~(1<<2));
  540. false_alarm:
  541. ret = parport_wait_event (port, HZ);
  542. if (ret < 0) break;
  543. ret = 0;
  544. if (!time_before (jiffies, expire)) {
  545. /* Timed out. */
  546. printk (KERN_DEBUG "FIFO write timed outn");
  547. break;
  548. }
  549. ecrval = inb (ECONTROL (port));
  550. if (!(ecrval & (1<<2))) {
  551. if (current->need_resched &&
  552.     time_before (jiffies, expire))
  553. schedule ();
  554. goto false_alarm;
  555. }
  556. continue;
  557. }
  558. /* Can't fail now. */
  559. expire = jiffies + port->cad->timeout;
  560. poll:
  561. if (signal_pending (current))
  562. break;
  563. if (ecrval & 0x01) {
  564. /* FIFO is empty. Blast it full. */
  565. const int n = left < fifo_depth ? left : fifo_depth;
  566. outsb (fifo, bufp, n);
  567. bufp += n;
  568. left -= n;
  569. /* Adjust the poll time. */
  570. if (i < (poll_for - 2)) poll_for--;
  571. continue;
  572. } else if (i++ < poll_for) {
  573. udelay (10);
  574. ecrval = inb (ECONTROL (port));
  575. goto poll;
  576. }
  577. /* Half-full (call me an optimist) */
  578. byte = *bufp++;
  579. outb (byte, fifo);
  580. left--;
  581.         }
  582. dump_parport_state ("leave fifo_write_block_pio", port);
  583. return length - left;
  584. }
  585. static size_t parport_pc_fifo_write_block_dma (struct parport *port,
  586.        const void *buf, size_t length)
  587. {
  588. int ret = 0;
  589. unsigned long dmaflag;
  590. size_t left = length;
  591. const struct parport_pc_private *priv = port->physport->private_data;
  592. dma_addr_t dma_addr, dma_handle;
  593. size_t maxlen = 0x10000; /* max 64k per DMA transfer */
  594. unsigned long start = (unsigned long) buf;
  595. unsigned long end = (unsigned long) buf + length - 1;
  596. dump_parport_state ("enter fifo_write_block_dma", port);
  597. if (end < MAX_DMA_ADDRESS) {
  598. /* If it would cross a 64k boundary, cap it at the end. */
  599. if ((start ^ end) & ~0xffffUL)
  600. maxlen = 0x10000 - (start & 0xffff);
  601. dma_addr = dma_handle = pci_map_single(priv->dev, (void *)buf, length,
  602.        PCI_DMA_TODEVICE);
  603.         } else {
  604. /* above 16 MB we use a bounce buffer as ISA-DMA is not possible */
  605. maxlen   = PAGE_SIZE;          /* sizeof(priv->dma_buf) */
  606. dma_addr = priv->dma_handle;
  607. dma_handle = 0;
  608. }
  609. port = port->physport;
  610. /* We don't want to be interrupted every character. */
  611. parport_pc_disable_irq (port);
  612. /* set nErrIntrEn and serviceIntr */
  613. frob_econtrol (port, (1<<4) | (1<<2), (1<<4) | (1<<2));
  614. /* Forward mode. */
  615. parport_pc_data_forward (port); /* Must be in PS2 mode */
  616. while (left) {
  617. long expire = jiffies + port->physport->cad->timeout;
  618. size_t count = left;
  619. if (count > maxlen)
  620. count = maxlen;
  621. if (!dma_handle)   /* bounce buffer ! */
  622. memcpy(priv->dma_buf, buf, count);
  623. dmaflag = claim_dma_lock();
  624. disable_dma(port->dma);
  625. clear_dma_ff(port->dma);
  626. set_dma_mode(port->dma, DMA_MODE_WRITE);
  627. set_dma_addr(port->dma, dma_addr);
  628. set_dma_count(port->dma, count);
  629. /* Set DMA mode */
  630. frob_econtrol (port, 1<<3, 1<<3);
  631. /* Clear serviceIntr */
  632. frob_econtrol (port, 1<<2, 0);
  633. enable_dma(port->dma);
  634. release_dma_lock(dmaflag);
  635. /* assume DMA will be successful */
  636. left -= count;
  637. buf  += count;
  638. if (dma_handle) dma_addr += count;
  639. /* Wait for interrupt. */
  640. false_alarm:
  641. ret = parport_wait_event (port, HZ);
  642. if (ret < 0) break;
  643. ret = 0;
  644. if (!time_before (jiffies, expire)) {
  645. /* Timed out. */
  646. printk (KERN_DEBUG "DMA write timed outn");
  647. break;
  648. }
  649. /* Is serviceIntr set? */
  650. if (!(inb (ECONTROL (port)) & (1<<2))) {
  651. if (current->need_resched)
  652. schedule ();
  653. goto false_alarm;
  654. }
  655. dmaflag = claim_dma_lock();
  656. disable_dma(port->dma);
  657. clear_dma_ff(port->dma);
  658. count = get_dma_residue(port->dma);
  659. release_dma_lock(dmaflag);
  660. if (current->need_resched)
  661. /* Can't yield the port. */
  662. schedule ();
  663. /* Anyone else waiting for the port? */
  664. if (port->waithead) {
  665. printk (KERN_DEBUG "Somebody wants the portn");
  666. break;
  667. }
  668. /* update for possible DMA residue ! */
  669. buf  -= count;
  670. left += count;
  671. if (dma_handle) dma_addr -= count;
  672. }
  673. /* Maybe got here through break, so adjust for DMA residue! */
  674. dmaflag = claim_dma_lock();
  675. disable_dma(port->dma);
  676. clear_dma_ff(port->dma);
  677. left += get_dma_residue(port->dma);
  678. release_dma_lock(dmaflag);
  679. /* Turn off DMA mode */
  680. frob_econtrol (port, 1<<3, 0);
  681. if (dma_handle)
  682. pci_unmap_single(priv->dev, dma_handle, length, PCI_DMA_TODEVICE);
  683. dump_parport_state ("leave fifo_write_block_dma", port);
  684. return length - left;
  685. }
  686. /* Parallel Port FIFO mode (ECP chipsets) */
  687. size_t parport_pc_compat_write_block_pio (struct parport *port,
  688.   const void *buf, size_t length,
  689.   int flags)
  690. {
  691. size_t written;
  692. int r;
  693. long int expire;
  694. const struct parport_pc_private *priv = port->physport->private_data;
  695. /* Special case: a timeout of zero means we cannot call schedule(). */
  696. if (!port->physport->cad->timeout)
  697. return parport_ieee1284_write_compat (port, buf,
  698.       length, flags);
  699. /* Set up parallel port FIFO mode.*/
  700. parport_pc_data_forward (port); /* Must be in PS2 mode */
  701. parport_pc_frob_control (port, PARPORT_CONTROL_STROBE, 0);
  702. r = change_mode (port, ECR_PPF); /* Parallel port FIFO */
  703. if (r)  printk (KERN_DEBUG "%s: Warning change_mode ECR_PPF failedn", port->name);
  704. port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
  705. /* Write the data to the FIFO. */
  706. if (port->dma != PARPORT_DMA_NONE)
  707. written = parport_pc_fifo_write_block_dma (port, buf, length);
  708. else
  709. written = parport_pc_fifo_write_block_pio (port, buf, length);
  710. /* Finish up. */
  711. /* For some hardware we don't want to touch the mode until
  712.  * the FIFO is empty, so allow 4 seconds for each position
  713.  * in the fifo.
  714.  */
  715.         expire = jiffies + (priv->fifo_depth * HZ * 4);
  716. do {
  717. /* Wait for the FIFO to empty */
  718. r = change_mode (port, ECR_PS2);
  719. if (r != -EBUSY) {
  720. break;
  721. }
  722. } while (time_before (jiffies, expire));
  723. if (r == -EBUSY) {
  724. printk (KERN_DEBUG "%s: FIFO is stuckn", port->name);
  725. /* Prevent further data transfer. */
  726. frob_set_mode (port, ECR_TST);
  727. /* Adjust for the contents of the FIFO. */
  728. for (written -= priv->fifo_depth; ; written++) {
  729. if (inb (ECONTROL (port)) & 0x2) {
  730. /* Full up. */
  731. break;
  732. }
  733. outb (0, FIFO (port));
  734. }
  735. /* Reset the FIFO and return to PS2 mode. */
  736. frob_set_mode (port, ECR_PS2);
  737. }
  738. r = parport_wait_peripheral (port,
  739.      PARPORT_STATUS_BUSY,
  740.      PARPORT_STATUS_BUSY);
  741. if (r)
  742. printk (KERN_DEBUG
  743. "%s: BUSY timeout (%d) in compat_write_block_pion", 
  744. port->name, r);
  745. port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
  746. return written;
  747. }
  748. /* ECP */
  749. #ifdef CONFIG_PARPORT_1284
  750. size_t parport_pc_ecp_write_block_pio (struct parport *port,
  751.        const void *buf, size_t length,
  752.        int flags)
  753. {
  754. size_t written;
  755. int r;
  756. long int expire;
  757. const struct parport_pc_private *priv = port->physport->private_data;
  758. /* Special case: a timeout of zero means we cannot call schedule(). */
  759. if (!port->physport->cad->timeout)
  760. return parport_ieee1284_ecp_write_data (port, buf,
  761. length, flags);
  762. /* Switch to forward mode if necessary. */
  763. if (port->physport->ieee1284.phase != IEEE1284_PH_FWD_IDLE) {
  764. /* Event 47: Set nInit high. */
  765. parport_frob_control (port,
  766.       PARPORT_CONTROL_INIT
  767.       | PARPORT_CONTROL_AUTOFD,
  768.       PARPORT_CONTROL_INIT
  769.       | PARPORT_CONTROL_AUTOFD);
  770. /* Event 49: PError goes high. */
  771. r = parport_wait_peripheral (port,
  772.      PARPORT_STATUS_PAPEROUT,
  773.      PARPORT_STATUS_PAPEROUT);
  774. if (r) {
  775. printk (KERN_DEBUG "%s: PError timeout (%d) "
  776. "in ecp_write_block_pion", port->name, r);
  777. }
  778. }
  779. /* Set up ECP parallel port mode.*/
  780. parport_pc_data_forward (port); /* Must be in PS2 mode */
  781. parport_pc_frob_control (port,
  782.  PARPORT_CONTROL_STROBE |
  783.  PARPORT_CONTROL_AUTOFD,
  784.  0);
  785. r = change_mode (port, ECR_ECP); /* ECP FIFO */
  786. if (r) printk (KERN_DEBUG "%s: Warning change_mode ECR_ECP failedn", port->name);
  787. port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
  788. /* Write the data to the FIFO. */
  789. if (port->dma != PARPORT_DMA_NONE)
  790. written = parport_pc_fifo_write_block_dma (port, buf, length);
  791. else
  792. written = parport_pc_fifo_write_block_pio (port, buf, length);
  793. /* Finish up. */
  794. /* For some hardware we don't want to touch the mode until
  795.  * the FIFO is empty, so allow 4 seconds for each position
  796.  * in the fifo.
  797.  */
  798. expire = jiffies + (priv->fifo_depth * (HZ * 4));
  799. do {
  800. /* Wait for the FIFO to empty */
  801. r = change_mode (port, ECR_PS2);
  802. if (r != -EBUSY) {
  803. break;
  804. }
  805. } while (time_before (jiffies, expire));
  806. if (r == -EBUSY) {
  807. printk (KERN_DEBUG "%s: FIFO is stuckn", port->name);
  808. /* Prevent further data transfer. */
  809. frob_set_mode (port, ECR_TST);
  810. /* Adjust for the contents of the FIFO. */
  811. for (written -= priv->fifo_depth; ; written++) {
  812. if (inb (ECONTROL (port)) & 0x2) {
  813. /* Full up. */
  814. break;
  815. }
  816. outb (0, FIFO (port));
  817. }
  818. /* Reset the FIFO and return to PS2 mode. */
  819. frob_set_mode (port, ECR_PS2);
  820. /* Host transfer recovery. */
  821. parport_pc_data_reverse (port); /* Must be in PS2 mode */
  822. udelay (5);
  823. parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
  824. r = parport_wait_peripheral (port, PARPORT_STATUS_PAPEROUT, 0);
  825. if (r)
  826. printk (KERN_DEBUG "%s: PE,1 timeout (%d) "
  827. "in ecp_write_block_pion", port->name, r);
  828. parport_frob_control (port,
  829.       PARPORT_CONTROL_INIT,
  830.       PARPORT_CONTROL_INIT);
  831. r = parport_wait_peripheral (port,
  832.      PARPORT_STATUS_PAPEROUT,
  833.      PARPORT_STATUS_PAPEROUT);
  834.                 if (r)
  835.                         printk (KERN_DEBUG "%s: PE,2 timeout (%d) "
  836. "in ecp_write_block_pion", port->name, r);
  837. }
  838. r = parport_wait_peripheral (port,
  839.      PARPORT_STATUS_BUSY, 
  840.      PARPORT_STATUS_BUSY);
  841. if(r)
  842. printk (KERN_DEBUG
  843. "%s: BUSY timeout (%d) in ecp_write_block_pion",
  844. port->name, r);
  845. port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
  846. return written;
  847. }
  848. size_t parport_pc_ecp_read_block_pio (struct parport *port,
  849.       void *buf, size_t length, int flags)
  850. {
  851. size_t left = length;
  852. size_t fifofull;
  853. int r;
  854. const int fifo = FIFO(port);
  855. const struct parport_pc_private *priv = port->physport->private_data;
  856. const int fifo_depth = priv->fifo_depth;
  857. char *bufp = buf;
  858. port = port->physport;
  859. DPRINTK (KERN_DEBUG "parport_pc: parport_pc_ecp_read_block_pion");
  860. dump_parport_state ("enter fcn", port);
  861. /* Special case: a timeout of zero means we cannot call schedule(). */
  862. if (!port->cad->timeout)
  863. return parport_ieee1284_ecp_read_data (port, buf,
  864.        length, flags);
  865. if (port->ieee1284.mode == IEEE1284_MODE_ECPRLE) {
  866. /* If the peripheral is allowed to send RLE compressed
  867.  * data, it is possible for a byte to expand to 128
  868.  * bytes in the FIFO. */
  869. fifofull = 128;
  870. } else {
  871. fifofull = fifo_depth;
  872. }
  873. /* If the caller wants less than a full FIFO's worth of data,
  874.  * go through software emulation.  Otherwise we may have to throw
  875.  * away data. */
  876. if (length < fifofull)
  877. return parport_ieee1284_ecp_read_data (port, buf,
  878.        length, flags);
  879. if (port->ieee1284.phase != IEEE1284_PH_REV_IDLE) {
  880. /* change to reverse-idle phase (must be in forward-idle) */
  881. /* Event 38: Set nAutoFd low (also make sure nStrobe is high) */
  882. parport_frob_control (port,
  883.       PARPORT_CONTROL_AUTOFD
  884.       | PARPORT_CONTROL_STROBE,
  885.       PARPORT_CONTROL_AUTOFD);
  886. parport_pc_data_reverse (port); /* Must be in PS2 mode */
  887. udelay (5);
  888. /* Event 39: Set nInit low to initiate bus reversal */
  889. parport_frob_control (port,
  890.       PARPORT_CONTROL_INIT,
  891.       0);
  892. /* Event 40: Wait for  nAckReverse (PError) to go low */
  893. r = parport_wait_peripheral (port, PARPORT_STATUS_PAPEROUT, 0);
  894.                 if (r) {
  895.                         printk (KERN_DEBUG "%s: PE timeout Event 40 (%d) "
  896. "in ecp_read_block_pion", port->name, r);
  897. return 0;
  898. }
  899. }
  900. /* Set up ECP FIFO mode.*/
  901. /* parport_pc_frob_control (port,
  902.  PARPORT_CONTROL_STROBE |
  903.  PARPORT_CONTROL_AUTOFD,
  904.  PARPORT_CONTROL_AUTOFD); */
  905. r = change_mode (port, ECR_ECP); /* ECP FIFO */
  906. if (r) printk (KERN_DEBUG "%s: Warning change_mode ECR_ECP failedn", port->name);
  907. port->ieee1284.phase = IEEE1284_PH_REV_DATA;
  908. /* the first byte must be collected manually */
  909. dump_parport_state ("pre 43", port);
  910. /* Event 43: Wait for nAck to go low */
  911. r = parport_wait_peripheral (port, PARPORT_STATUS_ACK, 0);
  912. if (r) {
  913. /* timed out while reading -- no data */
  914. printk (KERN_DEBUG "PIO read timed out (initial byte)n");
  915. goto out_no_data;
  916. }
  917. /* read byte */
  918. *bufp++ = inb (DATA (port));
  919. left--;
  920. dump_parport_state ("43-44", port);
  921. /* Event 44: nAutoFd (HostAck) goes high to acknowledge */
  922. parport_pc_frob_control (port,
  923.  PARPORT_CONTROL_AUTOFD,
  924.  0);
  925. dump_parport_state ("pre 45", port);
  926. /* Event 45: Wait for nAck to go high */
  927. /* r = parport_wait_peripheral (port, PARPORT_STATUS_ACK, PARPORT_STATUS_ACK); */
  928. dump_parport_state ("post 45", port);
  929. r = 0;
  930. if (r) {
  931. /* timed out while waiting for peripheral to respond to ack */
  932. printk (KERN_DEBUG "ECP PIO read timed out (waiting for nAck)n");
  933. /* keep hold of the byte we've got already */
  934. goto out_no_data;
  935. }
  936. /* Event 46: nAutoFd (HostAck) goes low to accept more data */
  937. parport_pc_frob_control (port,
  938.  PARPORT_CONTROL_AUTOFD,
  939.  PARPORT_CONTROL_AUTOFD);
  940. dump_parport_state ("rev idle", port);
  941. /* Do the transfer. */
  942. while (left > fifofull) {
  943. int ret;
  944. long int expire = jiffies + port->cad->timeout;
  945. unsigned char ecrval = inb (ECONTROL (port));
  946. if (current->need_resched && time_before (jiffies, expire))
  947. /* Can't yield the port. */
  948. schedule ();
  949. /* At this point, the FIFO may already be full. In
  950.                  * that case ECP is already holding back the
  951.                  * peripheral (assuming proper design) with a delayed
  952.                  * handshake.  Work fast to avoid a peripheral
  953.                  * timeout.  */
  954. if (ecrval & 0x01) {
  955. /* FIFO is empty. Wait for interrupt. */
  956. dump_parport_state ("FIFO empty", port);
  957. /* Anyone else waiting for the port? */
  958. if (port->waithead) {
  959. printk (KERN_DEBUG "Somebody wants the portn");
  960. break;
  961. }
  962. /* Clear serviceIntr */
  963. ECR_WRITE (port, ecrval & ~(1<<2));
  964. false_alarm:
  965. dump_parport_state ("waiting", port);
  966. ret = parport_wait_event (port, HZ);
  967. DPRINTK (KERN_DEBUG "parport_wait_event returned %dn", ret);
  968. if (ret < 0)
  969. break;
  970. ret = 0;
  971. if (!time_before (jiffies, expire)) {
  972. /* Timed out. */
  973. dump_parport_state ("timeout", port);
  974. printk (KERN_DEBUG "PIO read timed outn");
  975. break;
  976. }
  977. ecrval = inb (ECONTROL (port));
  978. if (!(ecrval & (1<<2))) {
  979. if (current->need_resched &&
  980.     time_before (jiffies, expire)) {
  981. schedule ();
  982. }
  983. goto false_alarm;
  984. }
  985. /* Depending on how the FIFO threshold was
  986.                          * set, how long interrupt service took, and
  987.                          * how fast the peripheral is, we might be
  988.                          * lucky and have a just filled FIFO. */
  989. continue;
  990. }
  991. if (ecrval & 0x02) {
  992. /* FIFO is full. */
  993. dump_parport_state ("FIFO full", port);
  994. insb (fifo, bufp, fifo_depth);
  995. bufp += fifo_depth;
  996. left -= fifo_depth;
  997. continue;
  998. }
  999. DPRINTK (KERN_DEBUG "*** ecp_read_block_pio: reading one byte from the FIFOn");
  1000. /* FIFO not filled.  We will cycle this loop for a while
  1001.                  * and either the peripheral will fill it faster,
  1002.                  * tripping a fast empty with insb, or we empty it. */
  1003. *bufp++ = inb (fifo);
  1004. left--;
  1005. }
  1006. /* scoop up anything left in the FIFO */
  1007. while (left && !(inb (ECONTROL (port) & 0x01))) {
  1008. *bufp++ = inb (fifo);
  1009. left--;
  1010. }
  1011. port->ieee1284.phase = IEEE1284_PH_REV_IDLE;
  1012. dump_parport_state ("rev idle2", port);
  1013. out_no_data:
  1014. /* Go to forward idle mode to shut the peripheral up (event 47). */
  1015. parport_frob_control (port, PARPORT_CONTROL_INIT, PARPORT_CONTROL_INIT);
  1016. /* event 49: PError goes high */
  1017. r = parport_wait_peripheral (port,
  1018.      PARPORT_STATUS_PAPEROUT,
  1019.      PARPORT_STATUS_PAPEROUT);
  1020. if (r) {
  1021. printk (KERN_DEBUG
  1022. "%s: PE timeout FWDIDLE (%d) in ecp_read_block_pion",
  1023. port->name, r);
  1024. }
  1025. port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
  1026. /* Finish up. */
  1027. {
  1028. int lost = get_fifo_residue (port);
  1029. if (lost)
  1030. /* Shouldn't happen with compliant peripherals. */
  1031. printk (KERN_DEBUG "%s: DATA LOSS (%d bytes)!n",
  1032. port->name, lost);
  1033. }
  1034. dump_parport_state ("fwd idle", port);
  1035. return length - left;
  1036. }
  1037. #endif /* IEEE 1284 support */
  1038. #endif /* Allowed to use FIFO/DMA */
  1039. /*
  1040.  * ******************************************
  1041.  * INITIALISATION AND MODULE STUFF BELOW HERE
  1042.  * ******************************************
  1043.  */
  1044. void parport_pc_inc_use_count(void)
  1045. {
  1046. #ifdef MODULE
  1047. MOD_INC_USE_COUNT;
  1048. #endif
  1049. }
  1050. void parport_pc_dec_use_count(void)
  1051. {
  1052. #ifdef MODULE
  1053. MOD_DEC_USE_COUNT;
  1054. #endif
  1055. }
  1056. struct parport_operations parport_pc_ops = 
  1057. {
  1058. parport_pc_write_data,
  1059. parport_pc_read_data,
  1060. parport_pc_write_control,
  1061. parport_pc_read_control,
  1062. parport_pc_frob_control,
  1063. parport_pc_read_status,
  1064. parport_pc_enable_irq,
  1065. parport_pc_disable_irq,
  1066. parport_pc_data_forward,
  1067. parport_pc_data_reverse,
  1068. parport_pc_init_state,
  1069. parport_pc_save_state,
  1070. parport_pc_restore_state,
  1071. parport_pc_inc_use_count,
  1072. parport_pc_dec_use_count,
  1073. parport_ieee1284_epp_write_data,
  1074. parport_ieee1284_epp_read_data,
  1075. parport_ieee1284_epp_write_addr,
  1076. parport_ieee1284_epp_read_addr,
  1077. parport_ieee1284_ecp_write_data,
  1078. parport_ieee1284_ecp_read_data,
  1079. parport_ieee1284_ecp_write_addr,
  1080. parport_ieee1284_write_compat,
  1081. parport_ieee1284_read_nibble,
  1082. parport_ieee1284_read_byte,
  1083. };
  1084. #ifdef CONFIG_PARPORT_PC_SUPERIO
  1085. /* Super-IO chipset detection, Winbond, SMSC */
  1086. static void __devinit show_parconfig_smsc37c669(int io, int key)
  1087. {
  1088. int cr1,cr4,cra,cr23,cr26,cr27,i=0;
  1089. static const char *modes[]={ "SPP and Bidirectional (PS/2)",
  1090.      "EPP and SPP",
  1091.      "ECP",
  1092.      "ECP and EPP" };
  1093. outb(key,io);
  1094. outb(key,io);
  1095. outb(1,io);
  1096. cr1=inb(io+1);
  1097. outb(4,io);
  1098. cr4=inb(io+1);
  1099. outb(0x0a,io);
  1100. cra=inb(io+1);
  1101. outb(0x23,io);
  1102. cr23=inb(io+1);
  1103. outb(0x26,io);
  1104. cr26=inb(io+1);
  1105. outb(0x27,io);
  1106. cr27=inb(io+1);
  1107. outb(0xaa,io);
  1108. if (verbose_probing) {
  1109. printk (KERN_INFO "SMSC 37c669 LPT Config: cr_1=0x%02x, 4=0x%02x, "
  1110. "A=0x%2x, 23=0x%02x, 26=0x%02x, 27=0x%02xn",
  1111. cr1,cr4,cra,cr23,cr26,cr27);
  1112. /* The documentation calls DMA and IRQ-Lines by letters, so
  1113.    the board maker can/will wire them
  1114.    appropriately/randomly...  G=reserved H=IDE-irq, */
  1115. printk (KERN_INFO "SMSC LPT Config: io=0x%04x, irq=%c, dma=%c, "
  1116. "fifo threshold=%dn", cr23*4,
  1117. (cr27 &0x0f) ? 'A'-1+(cr27 &0x0f): '-',
  1118. (cr26 &0x0f) ? 'A'-1+(cr26 &0x0f): '-', cra & 0x0f);
  1119. printk(KERN_INFO "SMSC LPT Config: enabled=%s power=%sn",
  1120.        (cr23*4 >=0x100) ?"yes":"no", (cr1 & 4) ? "yes" : "no");
  1121. printk(KERN_INFO "SMSC LPT Config: Port mode=%s, EPP version =%sn",
  1122.        (cr1 & 0x08 ) ? "Standard mode only (SPP)" : modes[cr4 & 0x03], 
  1123.        (cr4 & 0x40) ? "1.7" : "1.9");
  1124. }
  1125. /* Heuristics !  BIOS setup for this mainboard device limits
  1126.    the choices to standard settings, i.e. io-address and IRQ
  1127.    are related, however DMA can be 1 or 3, assume DMA_A=DMA1,
  1128.    DMA_C=DMA3 (this is true e.g. for TYAN 1564D Tomcat IV) */
  1129. if(cr23*4 >=0x100) { /* if active */
  1130. while((superios[i].io!= 0) && (i<NR_SUPERIOS))
  1131. i++;
  1132. if(i==NR_SUPERIOS)
  1133. printk(KERN_INFO "Super-IO: too many chips!n");
  1134. else {
  1135. int d;
  1136. switch (cr23*4) {
  1137. case 0x3bc:
  1138. superios[i].io = 0x3bc;
  1139. superios[i].irq = 7;
  1140. break;
  1141. case 0x378:
  1142. superios[i].io = 0x378;
  1143. superios[i].irq = 7;
  1144. break;
  1145. case 0x278:
  1146. superios[i].io = 0x278;
  1147. superios[i].irq = 5;
  1148. }
  1149. d=(cr26 &0x0f);
  1150. if((d==1) || (d==3)) 
  1151. superios[i].dma= d;
  1152. else
  1153. superios[i].dma= PARPORT_DMA_NONE;
  1154. }
  1155.   }
  1156. }
  1157. static void __devinit show_parconfig_winbond(int io, int key)
  1158. {
  1159. int cr30,cr60,cr61,cr70,cr74,crf0,i=0;
  1160. static const char *modes[] = {
  1161. "Standard (SPP) and Bidirectional(PS/2)", /* 0 */
  1162. "EPP-1.9 and SPP",
  1163. "ECP",
  1164. "ECP and EPP-1.9",
  1165. "Standard (SPP)",
  1166. "EPP-1.7 and SPP", /* 5 */
  1167. "undefined!",
  1168. "ECP and EPP-1.7" };
  1169. static char *irqtypes[] = { "pulsed low, high-Z", "follows nACK" };
  1170. /* The registers are called compatible-PnP because the
  1171.            register layout is modelled after ISA-PnP, the access
  1172.            method is just another ... */
  1173. outb(key,io);
  1174. outb(key,io);
  1175. outb(0x07,io);   /* Register 7: Select Logical Device */
  1176. outb(0x01,io+1); /* LD1 is Parallel Port */
  1177. outb(0x30,io);
  1178. cr30=inb(io+1);
  1179. outb(0x60,io);
  1180. cr60=inb(io+1);
  1181. outb(0x61,io);
  1182. cr61=inb(io+1);
  1183. outb(0x70,io);
  1184. cr70=inb(io+1);
  1185. outb(0x74,io);
  1186. cr74=inb(io+1);
  1187. outb(0xf0,io);
  1188. crf0=inb(io+1);
  1189. outb(0xaa,io);
  1190. if (verbose_probing) {
  1191. printk(KERN_INFO "Winbond LPT Config: cr_30=%02x 60,61=%02x%02x "
  1192.        "70=%02x 74=%02x, f0=%02xn", cr30,cr60,cr61,cr70,cr74,crf0);
  1193. printk(KERN_INFO "Winbond LPT Config: active=%s, io=0x%02x%02x irq=%d, ", 
  1194.        (cr30 & 0x01) ? "yes":"no", cr60,cr61,cr70&0x0f );
  1195. if ((cr74 & 0x07) > 3)
  1196. printk("dma=nonen");
  1197. else
  1198. printk("dma=%dn",cr74 & 0x07);
  1199. printk(KERN_INFO "Winbond LPT Config: irqtype=%s, ECP fifo threshold=%dn",
  1200.        irqtypes[crf0>>7], (crf0>>3)&0x0f);
  1201. printk(KERN_INFO "Winbond LPT Config: Port mode=%sn", modes[crf0 & 0x07]);
  1202. }
  1203. if(cr30 & 0x01) { /* the settings can be interrogated later ... */
  1204. while((superios[i].io!= 0) && (i<NR_SUPERIOS))
  1205. i++;
  1206. if(i==NR_SUPERIOS) 
  1207. printk(KERN_INFO "Super-IO: too many chips!n");
  1208. else {
  1209. superios[i].io = (cr60<<8)|cr61;
  1210. superios[i].irq = cr70&0x0f;
  1211. superios[i].dma = (((cr74 & 0x07) > 3) ?
  1212.    PARPORT_DMA_NONE : (cr74 & 0x07));
  1213. }
  1214. }
  1215. }
  1216. static void __devinit decode_winbond(int efer, int key, int devid, int devrev, int oldid)
  1217. {
  1218. const char *type = "unknown";
  1219. int id,progif=2;
  1220. if (devid == devrev)
  1221. /* simple heuristics, we happened to read some
  1222.                    non-winbond register */
  1223. return;
  1224. id=(devid<<8) | devrev;
  1225. /* Values are from public data sheets pdf files, I can just
  1226.            confirm 83977TF is correct :-) */
  1227. if      (id == 0x9771) type="83977F/AF";
  1228. else if (id == 0x9773) type="83977TF / SMSC 97w33x/97w34x";
  1229. else if (id == 0x9774) type="83977ATF";
  1230. else if ((id & ~0x0f) == 0x5270) type="83977CTF / SMSC 97w36x";
  1231. else if ((id & ~0x0f) == 0x52f0) type="83977EF / SMSC 97w35x";
  1232. else if ((id & ~0x0f) == 0x5210) type="83627";
  1233. else if ((id & ~0x0f) == 0x6010) type="83697HF";
  1234. else if ((oldid &0x0f ) == 0x0a) { type="83877F"; progif=1;}
  1235. else if ((oldid &0x0f ) == 0x0b) { type="83877AF"; progif=1;}
  1236. else if ((oldid &0x0f ) == 0x0c) { type="83877TF"; progif=1;}
  1237. else if ((oldid &0x0f ) == 0x0d) { type="83877ATF"; progif=1;}
  1238. else progif=0;
  1239. if (verbose_probing)
  1240. printk(KERN_INFO "Winbond chip at EFER=0x%x key=0x%02x "
  1241.        "devid=%02x devrev=%02x oldid=%02x type=%sn", 
  1242.        efer, key, devid, devrev, oldid, type);
  1243. if (progif == 2)
  1244. show_parconfig_winbond(efer,key);
  1245. }
  1246. static void __devinit decode_smsc(int efer, int key, int devid, int devrev)
  1247. {
  1248.         const char *type = "unknown";
  1249. void (*func)(int io, int key);
  1250.         int id;
  1251.         if (devid == devrev)
  1252. /* simple heuristics, we happened to read some
  1253.                    non-smsc register */
  1254. return;
  1255. func=NULL;
  1256.         id=(devid<<8) | devrev;
  1257. if (id==0x0302) {type="37c669"; func=show_parconfig_smsc37c669;}
  1258. else if (id==0x6582) type="37c665IR";
  1259. else if (devid==0x65) type="37c665GT";
  1260. else if (devid==0x66) type="37c666GT";
  1261. if (verbose_probing)
  1262. printk(KERN_INFO "SMSC chip at EFER=0x%x "
  1263.        "key=0x%02x devid=%02x devrev=%02x type=%sn",
  1264.        efer, key, devid, devrev, type);
  1265. if (func)
  1266. func(efer,key);
  1267. }
  1268. static void __devinit winbond_check(int io, int key)
  1269. {
  1270. int devid,devrev,oldid,x_devid,x_devrev,x_oldid;
  1271. /* First probe without key */
  1272. outb(0x20,io);
  1273. x_devid=inb(io+1);
  1274. outb(0x21,io);
  1275. x_devrev=inb(io+1);
  1276. outb(0x09,io);
  1277. x_oldid=inb(io+1);
  1278. outb(key,io);
  1279. outb(key,io);     /* Write Magic Sequence to EFER, extended
  1280.                              funtion enable register */
  1281. outb(0x20,io);    /* Write EFIR, extended function index register */
  1282. devid=inb(io+1);  /* Read EFDR, extended function data register */
  1283. outb(0x21,io);
  1284. devrev=inb(io+1);
  1285. outb(0x09,io);
  1286. oldid=inb(io+1);
  1287. outb(0xaa,io);    /* Magic Seal */
  1288. if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
  1289. return; /* protection against false positives */
  1290. decode_winbond(io,key,devid,devrev,oldid);
  1291. }
  1292. static void __devinit winbond_check2(int io,int key)
  1293. {
  1294.         int devid,devrev,oldid,x_devid,x_devrev,x_oldid;
  1295. /* First probe without the key */
  1296. outb(0x20,io+2);
  1297. x_devid=inb(io+2);
  1298. outb(0x21,io+1);
  1299. x_devrev=inb(io+2);
  1300. outb(0x09,io+1);
  1301. x_oldid=inb(io+2);
  1302.         outb(key,io);     /* Write Magic Byte to EFER, extended
  1303.                              funtion enable register */
  1304.         outb(0x20,io+2);  /* Write EFIR, extended function index register */
  1305.         devid=inb(io+2);  /* Read EFDR, extended function data register */
  1306.         outb(0x21,io+1);
  1307.         devrev=inb(io+2);
  1308.         outb(0x09,io+1);
  1309.         oldid=inb(io+2);
  1310.         outb(0xaa,io);    /* Magic Seal */
  1311. if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
  1312. return; /* protection against false positives */
  1313.         decode_winbond(io,key,devid,devrev,oldid);
  1314. }
  1315. static void __devinit smsc_check(int io, int key)
  1316. {
  1317.         int id,rev,oldid,oldrev,x_id,x_rev,x_oldid,x_oldrev;
  1318. /* First probe without the key */
  1319. outb(0x0d,io);
  1320. x_oldid=inb(io+1);
  1321. outb(0x0e,io);
  1322. x_oldrev=inb(io+1);
  1323. outb(0x20,io);
  1324. x_id=inb(io+1);
  1325. outb(0x21,io);
  1326. x_rev=inb(io+1);
  1327.         outb(key,io);
  1328.         outb(key,io);     /* Write Magic Sequence to EFER, extended
  1329.                              funtion enable register */
  1330.         outb(0x0d,io);    /* Write EFIR, extended function index register */
  1331.         oldid=inb(io+1);  /* Read EFDR, extended function data register */
  1332.         outb(0x0e,io);
  1333.         oldrev=inb(io+1);
  1334. outb(0x20,io);
  1335. id=inb(io+1);
  1336. outb(0x21,io);
  1337. rev=inb(io+1);
  1338.         outb(0xaa,io);    /* Magic Seal */
  1339. if ((x_id == id) && (x_oldrev == oldrev) &&
  1340.     (x_oldid == oldid) && (x_rev == rev))
  1341. return; /* protection against false positives */
  1342.         decode_smsc(io,key,oldid,oldrev);
  1343. }
  1344. static void __devinit detect_and_report_winbond (void)
  1345. if (verbose_probing)
  1346. printk(KERN_DEBUG "Winbond Super-IO detection, now testing ports 3F0,370,250,4E,2E ...n");
  1347. winbond_check(0x3f0,0x87);
  1348. winbond_check(0x370,0x87);
  1349. winbond_check(0x2e ,0x87);
  1350. winbond_check(0x4e ,0x87);
  1351. winbond_check(0x3f0,0x86);
  1352. winbond_check2(0x250,0x88); 
  1353. winbond_check2(0x250,0x89);
  1354. }
  1355. static void __devinit detect_and_report_smsc (void)
  1356. {
  1357. if (verbose_probing)
  1358. printk(KERN_DEBUG "SMSC Super-IO detection, now testing Ports 2F0, 370 ...n");
  1359. smsc_check(0x3f0,0x55);
  1360. smsc_check(0x370,0x55);
  1361. smsc_check(0x3f0,0x44);
  1362. smsc_check(0x370,0x44);
  1363. }
  1364. #endif /* CONFIG_PARPORT_PC_SUPERIO */
  1365. static int __devinit get_superio_dma (struct parport *p)
  1366. {
  1367. int i=0;
  1368. while( (superios[i].io != p->base) && (i<NR_SUPERIOS))
  1369. i++;
  1370. if (i!=NR_SUPERIOS)
  1371. return superios[i].dma;
  1372. return PARPORT_DMA_NONE;
  1373. }
  1374. static int __devinit get_superio_irq (struct parport *p)
  1375. {
  1376. int i=0;
  1377.         while( (superios[i].io != p->base) && (i<NR_SUPERIOS))
  1378.                 i++;
  1379.         if (i!=NR_SUPERIOS)
  1380.                 return superios[i].irq;
  1381.         return PARPORT_IRQ_NONE;
  1382. }
  1383. /* --- Mode detection ------------------------------------- */
  1384. /*
  1385.  * Checks for port existence, all ports support SPP MODE
  1386.  * Returns: 
  1387.  *         0           :  No parallel port at this adress
  1388.  *  PARPORT_MODE_PCSPP :  SPP port detected 
  1389.  *                        (if the user specified an ioport himself,
  1390.  *                         this shall always be the case!)
  1391.  *
  1392.  */
  1393. static int __devinit parport_SPP_supported(struct parport *pb)
  1394. {
  1395. unsigned char r, w;
  1396. /*
  1397.  * first clear an eventually pending EPP timeout 
  1398.  * I (sailer@ife.ee.ethz.ch) have an SMSC chipset
  1399.  * that does not even respond to SPP cycles if an EPP
  1400.  * timeout is pending
  1401.  */
  1402. clear_epp_timeout(pb);
  1403. /* Do a simple read-write test to make sure the port exists. */
  1404. w = 0xc;
  1405. outb (w, CONTROL (pb));
  1406. /* Is there a control register that we can read from?  Some
  1407.  * ports don't allow reads, so read_control just returns a
  1408.  * software copy. Some ports _do_ allow reads, so bypass the
  1409.  * software copy here.  In addition, some bits aren't
  1410.  * writable. */
  1411. r = inb (CONTROL (pb));
  1412. if ((r & 0xf) == w) {
  1413. w = 0xe;
  1414. outb (w, CONTROL (pb));
  1415. r = inb (CONTROL (pb));
  1416. outb (0xc, CONTROL (pb));
  1417. if ((r & 0xf) == w)
  1418. return PARPORT_MODE_PCSPP;
  1419. }
  1420. if (user_specified)
  1421. /* That didn't work, but the user thinks there's a
  1422.  * port here. */
  1423. printk (KERN_INFO "parport 0x%lx (WARNING): CTR: "
  1424. "wrote 0x%02x, read 0x%02xn", pb->base, w, r);
  1425. /* Try the data register.  The data lines aren't tri-stated at
  1426.  * this stage, so we expect back what we wrote. */
  1427. w = 0xaa;
  1428. parport_pc_write_data (pb, w);
  1429. r = parport_pc_read_data (pb);
  1430. if (r == w) {
  1431. w = 0x55;
  1432. parport_pc_write_data (pb, w);
  1433. r = parport_pc_read_data (pb);
  1434. if (r == w)
  1435. return PARPORT_MODE_PCSPP;
  1436. }
  1437. if (user_specified) {
  1438. /* Didn't work, but the user is convinced this is the
  1439.  * place. */
  1440. printk (KERN_INFO "parport 0x%lx (WARNING): DATA: "
  1441. "wrote 0x%02x, read 0x%02xn", pb->base, w, r);
  1442. printk (KERN_INFO "parport 0x%lx: You gave this address, "
  1443. "but there is probably no parallel port there!n",
  1444. pb->base);
  1445. }
  1446. /* It's possible that we can't read the control register or
  1447.  * the data register.  In that case just believe the user. */
  1448. if (user_specified)
  1449. return PARPORT_MODE_PCSPP;
  1450. return 0;
  1451. }
  1452. /* Check for ECR
  1453.  *
  1454.  * Old style XT ports alias io ports every 0x400, hence accessing ECR
  1455.  * on these cards actually accesses the CTR.
  1456.  *
  1457.  * Modern cards don't do this but reading from ECR will return 0xff
  1458.  * regardless of what is written here if the card does NOT support
  1459.  * ECP.
  1460.  *
  1461.  * We first check to see if ECR is the same as CTR.  If not, the low
  1462.  * two bits of ECR aren't writable, so we check by writing ECR and
  1463.  * reading it back to see if it's what we expect.
  1464.  */
  1465. static int __devinit parport_ECR_present(struct parport *pb)
  1466. {
  1467. struct parport_pc_private *priv = pb->private_data;
  1468. unsigned char r = 0xc;
  1469. outb (r, CONTROL (pb));
  1470. if ((inb (ECONTROL (pb)) & 0x3) == (r & 0x3)) {
  1471. outb (r ^ 0x2, CONTROL (pb)); /* Toggle bit 1 */
  1472. r = inb (CONTROL (pb));
  1473. if ((inb (ECONTROL (pb)) & 0x2) == (r & 0x2))
  1474. goto no_reg; /* Sure that no ECR register exists */
  1475. }
  1476. if ((inb (ECONTROL (pb)) & 0x3 ) != 0x1)
  1477. goto no_reg;
  1478. ECR_WRITE (pb, 0x34);
  1479. if (inb (ECONTROL (pb)) != 0x35)
  1480. goto no_reg;
  1481. priv->ecr = 1;
  1482. outb (0xc, CONTROL (pb));
  1483. /* Go to mode 000 */
  1484. frob_set_mode (pb, ECR_SPP);
  1485. return 1;
  1486.  no_reg:
  1487. outb (0xc, CONTROL (pb));
  1488. return 0; 
  1489. }
  1490. #ifdef CONFIG_PARPORT_1284
  1491. /* Detect PS/2 support.
  1492.  *
  1493.  * Bit 5 (0x20) sets the PS/2 data direction; setting this high
  1494.  * allows us to read data from the data lines.  In theory we would get back
  1495.  * 0xff but any peripheral attached to the port may drag some or all of the
  1496.  * lines down to zero.  So if we get back anything that isn't the contents
  1497.  * of the data register we deem PS/2 support to be present. 
  1498.  *
  1499.  * Some SPP ports have "half PS/2" ability - you can't turn off the line
  1500.  * drivers, but an external peripheral with sufficiently beefy drivers of
  1501.  * its own can overpower them and assert its own levels onto the bus, from
  1502.  * where they can then be read back as normal.  Ports with this property
  1503.  * and the right type of device attached are likely to fail the SPP test,
  1504.  * (as they will appear to have stuck bits) and so the fact that they might
  1505.  * be misdetected here is rather academic. 
  1506.  */
  1507. static int __devinit parport_PS2_supported(struct parport *pb)
  1508. {
  1509. int ok = 0;
  1510.   
  1511. clear_epp_timeout(pb);
  1512. /* try to tri-state the buffer */
  1513. parport_pc_data_reverse (pb);
  1514. parport_pc_write_data(pb, 0x55);
  1515. if (parport_pc_read_data(pb) != 0x55) ok++;
  1516. parport_pc_write_data(pb, 0xaa);
  1517. if (parport_pc_read_data(pb) != 0xaa) ok++;
  1518. /* cancel input mode */
  1519. parport_pc_data_forward (pb);
  1520. if (ok) {
  1521. pb->modes |= PARPORT_MODE_TRISTATE;
  1522. } else {
  1523. struct parport_pc_private *priv = pb->private_data;
  1524. priv->ctr_writable &= ~0x20;
  1525. }
  1526. return ok;
  1527. }
  1528. #ifdef CONFIG_PARPORT_PC_FIFO
  1529. static int __devinit parport_ECP_supported(struct parport *pb)
  1530. {
  1531. int i;
  1532. int config, configb;
  1533. int pword;
  1534. struct parport_pc_private *priv = pb->private_data;
  1535. /* Translate ECP intrLine to ISA irq value */
  1536. static const int intrline[]= { 0, 7, 9, 10, 11, 14, 15, 5 }; 
  1537. /* If there is no ECR, we have no hope of supporting ECP. */
  1538. if (!priv->ecr)
  1539. return 0;
  1540. /* Find out FIFO depth */
  1541. ECR_WRITE (pb, ECR_SPP << 5); /* Reset FIFO */
  1542. ECR_WRITE (pb, ECR_TST << 5); /* TEST FIFO */
  1543. for (i=0; i < 1024 && !(inb (ECONTROL (pb)) & 0x02); i++)
  1544. outb (0xaa, FIFO (pb));
  1545. /*
  1546.  * Using LGS chipset it uses ECR register, but
  1547.  * it doesn't support ECP or FIFO MODE
  1548.  */
  1549. if (i == 1024) {
  1550. ECR_WRITE (pb, ECR_SPP << 5);
  1551. return 0;
  1552. }
  1553. priv->fifo_depth = i;
  1554. if (verbose_probing)
  1555. printk (KERN_DEBUG "0x%lx: FIFO is %d bytesn", pb->base, i);
  1556. /* Find out writeIntrThreshold */
  1557. frob_econtrol (pb, 1<<2, 1<<2);
  1558. frob_econtrol (pb, 1<<2, 0);
  1559. for (i = 1; i <= priv->fifo_depth; i++) {
  1560. inb (FIFO (pb));
  1561. udelay (50);
  1562. if (inb (ECONTROL (pb)) & (1<<2))
  1563. break;
  1564. }
  1565. if (i <= priv->fifo_depth) {
  1566. if (verbose_probing)
  1567. printk (KERN_DEBUG "0x%lx: writeIntrThreshold is %dn",
  1568. pb->base, i);
  1569. } else
  1570. /* Number of bytes we know we can write if we get an
  1571.                    interrupt. */
  1572. i = 0;
  1573. priv->writeIntrThreshold = i;
  1574. /* Find out readIntrThreshold */
  1575. frob_set_mode (pb, ECR_PS2); /* Reset FIFO and enable PS2 */
  1576. parport_pc_data_reverse (pb); /* Must be in PS2 mode */
  1577. frob_set_mode (pb, ECR_TST); /* Test FIFO */
  1578. frob_econtrol (pb, 1<<2, 1<<2);
  1579. frob_econtrol (pb, 1<<2, 0);
  1580. for (i = 1; i <= priv->fifo_depth; i++) {
  1581. outb (0xaa, FIFO (pb));
  1582. if (inb (ECONTROL (pb)) & (1<<2))
  1583. break;
  1584. }
  1585. if (i <= priv->fifo_depth) {
  1586. if (verbose_probing)
  1587. printk (KERN_INFO "0x%lx: readIntrThreshold is %dn",
  1588. pb->base, i);
  1589. } else
  1590. /* Number of bytes we can read if we get an interrupt. */
  1591. i = 0;
  1592. priv->readIntrThreshold = i;
  1593. ECR_WRITE (pb, ECR_SPP << 5); /* Reset FIFO */
  1594. ECR_WRITE (pb, 0xf4); /* Configuration mode */
  1595. config = inb (CONFIGA (pb));
  1596. pword = (config >> 4) & 0x7;
  1597. switch (pword) {
  1598. case 0:
  1599. pword = 2;
  1600. printk (KERN_WARNING "0x%lx: Unsupported pword size!n",
  1601. pb->base);
  1602. break;
  1603. case 2:
  1604. pword = 4;
  1605. printk (KERN_WARNING "0x%lx: Unsupported pword size!n",
  1606. pb->base);
  1607. break;
  1608. default:
  1609. printk (KERN_WARNING "0x%lx: Unknown implementation IDn",
  1610. pb->base);
  1611. /* Assume 1 */
  1612. case 1:
  1613. pword = 1;
  1614. }
  1615. priv->pword = pword;
  1616. if (verbose_probing) {
  1617. printk (KERN_DEBUG "0x%lx: PWord is %d bitsn", pb->base, 8 * pword);
  1618. printk (KERN_DEBUG "0x%lx: Interrupts are ISA-%sn", pb->base,
  1619. config & 0x80 ? "Level" : "Pulses");
  1620. configb = inb (CONFIGB (pb));
  1621. printk (KERN_DEBUG "0x%lx: ECP port cfgA=0x%02x cfgB=0x%02xn",
  1622. pb->base, config, configb);
  1623. printk (KERN_DEBUG "0x%lx: ECP settings irq=", pb->base);
  1624. if ((configb >>3) & 0x07)
  1625. printk("%d",intrline[(configb >>3) & 0x07]);
  1626. else
  1627. printk("<none or set by other means>");
  1628. printk (" dma=");
  1629. if( (configb & 0x03 ) == 0x00)
  1630. printk("<none or set by other means>n");
  1631. else
  1632. printk("%dn",configb & 0x07);
  1633. }
  1634. /* Go back to mode 000 */
  1635. frob_set_mode (pb, ECR_SPP);
  1636. return 1;
  1637. }
  1638. #endif
  1639. static int __devinit parport_ECPPS2_supported(struct parport *pb)
  1640. {
  1641. const struct parport_pc_private *priv = pb->private_data;
  1642. int result;
  1643. unsigned char oecr;
  1644. if (!priv->ecr)
  1645. return 0;
  1646. oecr = inb (ECONTROL (pb));
  1647. ECR_WRITE (pb, ECR_PS2 << 5);
  1648. result = parport_PS2_supported(pb);
  1649. ECR_WRITE (pb, oecr);
  1650. return result;
  1651. }
  1652. /* EPP mode detection  */
  1653. static int __devinit parport_EPP_supported(struct parport *pb)
  1654. {
  1655. const struct parport_pc_private *priv = pb->private_data;
  1656. /*
  1657.  * Theory:
  1658.  * Bit 0 of STR is the EPP timeout bit, this bit is 0
  1659.  * when EPP is possible and is set high when an EPP timeout
  1660.  * occurs (EPP uses the HALT line to stop the CPU while it does
  1661.  * the byte transfer, an EPP timeout occurs if the attached
  1662.  * device fails to respond after 10 micro seconds).
  1663.  *
  1664.  * This bit is cleared by either reading it (National Semi)
  1665.  * or writing a 1 to the bit (SMC, UMC, WinBond), others ???
  1666.  * This bit is always high in non EPP modes.
  1667.  */
  1668. /* If EPP timeout bit clear then EPP available */
  1669. if (!clear_epp_timeout(pb)) {
  1670. return 0;  /* No way to clear timeout */
  1671. }
  1672. /* Check for Intel bug. */
  1673. if (priv->ecr) {
  1674. unsigned char i;
  1675. for (i = 0x00; i < 0x80; i += 0x20) {
  1676. ECR_WRITE (pb, i);
  1677. if (clear_epp_timeout (pb)) {
  1678. /* Phony EPP in ECP. */
  1679. return 0;
  1680. }
  1681. }
  1682. }
  1683. pb->modes |= PARPORT_MODE_EPP;
  1684. /* Set up access functions to use EPP hardware. */
  1685. pb->ops->epp_read_data = parport_pc_epp_read_data;
  1686. pb->ops->epp_write_data = parport_pc_epp_write_data;
  1687. pb->ops->epp_read_addr = parport_pc_epp_read_addr;
  1688. pb->ops->epp_write_addr = parport_pc_epp_write_addr;
  1689. return 1;
  1690. }
  1691. static int __devinit parport_ECPEPP_supported(struct parport *pb)
  1692. {
  1693. struct parport_pc_private *priv = pb->private_data;
  1694. int result;
  1695. unsigned char oecr;
  1696. if (!priv->ecr) {
  1697. return 0;
  1698. }
  1699. oecr = inb (ECONTROL (pb));
  1700. /* Search for SMC style EPP+ECP mode */
  1701. ECR_WRITE (pb, 0x80);
  1702. outb (0x04, CONTROL (pb));
  1703. result = parport_EPP_supported(pb);
  1704. ECR_WRITE (pb, oecr);
  1705. if (result) {
  1706. /* Set up access functions to use ECP+EPP hardware. */
  1707. pb->ops->epp_read_data = parport_pc_ecpepp_read_data;
  1708. pb->ops->epp_write_data = parport_pc_ecpepp_write_data;
  1709. pb->ops->epp_read_addr = parport_pc_ecpepp_read_addr;
  1710. pb->ops->epp_write_addr = parport_pc_ecpepp_write_addr;
  1711. }
  1712. return result;
  1713. }
  1714. #else /* No IEEE 1284 support */
  1715. /* Don't bother probing for modes we know we won't use. */
  1716. static int __devinit parport_PS2_supported(struct parport *pb) { return 0; }
  1717. #ifdef CONFIG_PARPORT_PC_FIFO
  1718. static int __devinit parport_ECP_supported(struct parport *pb) { return 0; }
  1719. #endif
  1720. static int __devinit parport_EPP_supported(struct parport *pb) { return 0; }
  1721. static int __devinit parport_ECPEPP_supported(struct parport *pb){return 0;}
  1722. static int __devinit parport_ECPPS2_supported(struct parport *pb){return 0;}
  1723. #endif /* No IEEE 1284 support */
  1724. /* --- IRQ detection -------------------------------------- */
  1725. /* Only if supports ECP mode */
  1726. static int __devinit programmable_irq_support(struct parport *pb)
  1727. {
  1728. int irq, intrLine;
  1729. unsigned char oecr = inb (ECONTROL (pb));
  1730. static const int lookup[8] = {
  1731. PARPORT_IRQ_NONE, 7, 9, 10, 11, 14, 15, 5
  1732. };
  1733. ECR_WRITE (pb, ECR_CNF << 5); /* Configuration MODE */
  1734. intrLine = (inb (CONFIGB (pb)) >> 3) & 0x07;
  1735. irq = lookup[intrLine];
  1736. ECR_WRITE (pb, oecr);
  1737. return irq;
  1738. }
  1739. static int __devinit irq_probe_ECP(struct parport *pb)
  1740. {
  1741. int i;
  1742. unsigned long irqs;
  1743. sti();
  1744. irqs = probe_irq_on();
  1745. ECR_WRITE (pb, ECR_SPP << 5); /* Reset FIFO */
  1746. ECR_WRITE (pb, (ECR_TST << 5) | 0x04);
  1747. ECR_WRITE (pb, ECR_TST << 5);
  1748. /* If Full FIFO sure that writeIntrThreshold is generated */
  1749. for (i=0; i < 1024 && !(inb (ECONTROL (pb)) & 0x02) ; i++) 
  1750. outb (0xaa, FIFO (pb));
  1751. pb->irq = probe_irq_off(irqs);
  1752. ECR_WRITE (pb, ECR_SPP << 5);
  1753. if (pb->irq <= 0)
  1754. pb->irq = PARPORT_IRQ_NONE;
  1755. return pb->irq;
  1756. }
  1757. /*
  1758.  * This detection seems that only works in National Semiconductors
  1759.  * This doesn't work in SMC, LGS, and Winbond 
  1760.  */
  1761. static int __devinit irq_probe_EPP(struct parport *pb)
  1762. {
  1763. #ifndef ADVANCED_DETECT
  1764. return PARPORT_IRQ_NONE;
  1765. #else
  1766. int irqs;
  1767. unsigned char oecr;
  1768. if (pb->modes & PARPORT_MODE_PCECR)
  1769. oecr = inb (ECONTROL (pb));
  1770. sti();
  1771. irqs = probe_irq_on();
  1772. if (pb->modes & PARPORT_MODE_PCECR)
  1773. frob_econtrol (pb, 0x10, 0x10);
  1774. clear_epp_timeout(pb);
  1775. parport_pc_frob_control (pb, 0x20, 0x20);
  1776. parport_pc_frob_control (pb, 0x10, 0x10);
  1777. clear_epp_timeout(pb);
  1778. /* Device isn't expecting an EPP read
  1779.  * and generates an IRQ.
  1780.  */
  1781. parport_pc_read_epp(pb);
  1782. udelay(20);
  1783. pb->irq = probe_irq_off (irqs);
  1784. if (pb->modes & PARPORT_MODE_PCECR)
  1785. ECR_WRITE (pb, oecr);
  1786. parport_pc_write_control(pb, 0xc);
  1787. if (pb->irq <= 0)
  1788. pb->irq = PARPORT_IRQ_NONE;
  1789. return pb->irq;
  1790. #endif /* Advanced detection */
  1791. }
  1792. static int __devinit irq_probe_SPP(struct parport *pb)
  1793. {
  1794. /* Don't even try to do this. */
  1795. return PARPORT_IRQ_NONE;
  1796. }
  1797. /* We will attempt to share interrupt requests since other devices
  1798.  * such as sound cards and network cards seem to like using the
  1799.  * printer IRQs.
  1800.  *
  1801.  * When ECP is available we can autoprobe for IRQs.
  1802.  * NOTE: If we can autoprobe it, we can register the IRQ.
  1803.  */
  1804. static int __devinit parport_irq_probe(struct parport *pb)
  1805. {
  1806. struct parport_pc_private *priv = pb->private_data;
  1807. priv->ctr_writable |= 0x10;
  1808. if (priv->ecr) {
  1809. pb->irq = programmable_irq_support(pb);
  1810. if (pb->irq == PARPORT_IRQ_NONE)
  1811. pb->irq = irq_probe_ECP(pb);
  1812. }
  1813. if ((pb->irq == PARPORT_IRQ_NONE) && priv->ecr &&
  1814.     (pb->modes & PARPORT_MODE_EPP))
  1815. pb->irq = irq_probe_EPP(pb);
  1816. clear_epp_timeout(pb);
  1817. if (pb->irq == PARPORT_IRQ_NONE && (pb->modes & PARPORT_MODE_EPP))
  1818. pb->irq = irq_probe_EPP(pb);
  1819. clear_epp_timeout(pb);
  1820. if (pb->irq == PARPORT_IRQ_NONE)
  1821. pb->irq = irq_probe_SPP(pb);
  1822. if (pb->irq == PARPORT_IRQ_NONE)
  1823. pb->irq = get_superio_irq(pb);
  1824. if (pb->irq == PARPORT_IRQ_NONE)
  1825. priv->ctr_writable &= ~0x10;
  1826. return pb->irq;
  1827. }
  1828. /* --- DMA detection -------------------------------------- */
  1829. /* Only if chipset conforms to ECP ISA Interface Standard */
  1830. static int __devinit programmable_dma_support (struct parport *p)
  1831. {
  1832. unsigned char oecr = inb (ECONTROL (p));
  1833. int dma;
  1834. frob_set_mode (p, ECR_CNF);
  1835. dma = inb (CONFIGB(p)) & 0x07;
  1836. /* 000: Indicates jumpered 8-bit DMA if read-only.
  1837.    100: Indicates jumpered 16-bit DMA if read-only. */
  1838. if ((dma & 0x03) == 0)
  1839. dma = PARPORT_DMA_NONE;
  1840. ECR_WRITE (p, oecr);
  1841. return dma;
  1842. }
  1843. static int __devinit parport_dma_probe (struct parport *p)
  1844. {
  1845. const struct parport_pc_private *priv = p->private_data;
  1846. if (priv->ecr)
  1847. p->dma = programmable_dma_support(p); /* ask ECP chipset first */
  1848. if (p->dma == PARPORT_DMA_NONE) {
  1849. /* ask known Super-IO chips proper, although these
  1850.    claim ECP compatible, some don't report their DMA
  1851.    conforming to ECP standards */
  1852. p->dma = get_superio_dma(p);
  1853. }
  1854. return p->dma;
  1855. }
  1856. /* --- Initialisation code -------------------------------- */
  1857. struct parport *parport_pc_probe_port (unsigned long int base,
  1858.        unsigned long int base_hi,
  1859.        int irq, int dma,
  1860.        struct pci_dev *dev)
  1861. {
  1862. struct parport_pc_private *priv;
  1863. struct parport_operations *ops;
  1864. struct parport tmp;
  1865. struct parport *p = &tmp;
  1866. int probedirq = PARPORT_IRQ_NONE;
  1867. if (check_region(base, 3)) return NULL;
  1868. priv = kmalloc (sizeof (struct parport_pc_private), GFP_KERNEL);
  1869. if (!priv) {
  1870. printk (KERN_DEBUG "parport (0x%lx): no memory!n", base);
  1871. return NULL;
  1872. }
  1873. ops = kmalloc (sizeof (struct parport_operations), GFP_KERNEL);
  1874. if (!ops) {
  1875. printk (KERN_DEBUG "parport (0x%lx): no memory for ops!n",
  1876. base);
  1877. kfree (priv);
  1878. return NULL;
  1879. }
  1880. memcpy (ops, &parport_pc_ops, sizeof (struct parport_operations));
  1881. priv->ctr = 0xc;
  1882. priv->ctr_writable = ~0x10;
  1883. priv->ecr = 0;
  1884. priv->fifo_depth = 0;
  1885. priv->dma_buf = 0;
  1886. priv->dma_handle = 0;
  1887. priv->dev = dev;
  1888. p->base = base;
  1889. p->base_hi = base_hi;
  1890. p->irq = irq;
  1891. p->dma = dma;
  1892. p->modes = PARPORT_MODE_PCSPP | PARPORT_MODE_SAFEININT;
  1893. p->ops = ops;
  1894. p->private_data = priv;
  1895. p->physport = p;
  1896. if (base_hi && !check_region(base_hi,3))
  1897. parport_ECR_present(p);
  1898. if (base != 0x3bc) {
  1899. if (!check_region(base+0x3, 5)) {
  1900. if (!parport_EPP_supported(p))
  1901. parport_ECPEPP_supported(p);
  1902. }
  1903. }
  1904. if (!parport_SPP_supported (p)) {
  1905. /* No port. */
  1906. kfree (priv);
  1907. kfree (ops);
  1908. return NULL;
  1909. }
  1910. if (priv->ecr)
  1911. parport_ECPPS2_supported(p);
  1912. else
  1913. parport_PS2_supported (p);
  1914. if (!(p = parport_register_port(base, PARPORT_IRQ_NONE,
  1915. PARPORT_DMA_NONE, ops))) {
  1916. kfree (priv);
  1917. kfree (ops);
  1918. return NULL;
  1919. }
  1920. p->base_hi = base_hi;
  1921. p->modes = tmp.modes;
  1922. p->size = (p->modes & PARPORT_MODE_EPP)?8:3;
  1923. p->private_data = priv;
  1924. printk(KERN_INFO "%s: PC-style at 0x%lx", p->name, p->base);
  1925. if (p->base_hi && priv->ecr)
  1926. printk(" (0x%lx)", p->base_hi);
  1927. p->irq = irq;
  1928. p->dma = dma;
  1929. if (p->irq == PARPORT_IRQ_AUTO) {
  1930. p->irq = PARPORT_IRQ_NONE;
  1931. parport_irq_probe(p);
  1932. } else if (p->irq == PARPORT_IRQ_PROBEONLY) {
  1933. p->irq = PARPORT_IRQ_NONE;
  1934. parport_irq_probe(p);
  1935. probedirq = p->irq;
  1936. p->irq = PARPORT_IRQ_NONE;
  1937. }
  1938. if (p->irq != PARPORT_IRQ_NONE) {
  1939. printk(", irq %d", p->irq);
  1940. if (p->dma == PARPORT_DMA_AUTO) {
  1941. p->dma = PARPORT_DMA_NONE;
  1942. parport_dma_probe(p);
  1943. }
  1944. }
  1945. if (p->dma == PARPORT_DMA_AUTO) /* To use DMA, giving the irq
  1946.                                            is mandatory (see above) */
  1947. p->dma = PARPORT_DMA_NONE;
  1948. #ifdef CONFIG_PARPORT_PC_FIFO
  1949. if (parport_ECP_supported(p) &&
  1950.     p->dma != PARPORT_DMA_NOFIFO &&
  1951.     priv->fifo_depth > 0 && p->irq != PARPORT_IRQ_NONE) {
  1952. p->modes |= PARPORT_MODE_ECP | PARPORT_MODE_COMPAT;
  1953. p->ops->compat_write_data = parport_pc_compat_write_block_pio;
  1954. #ifdef CONFIG_PARPORT_1284
  1955. p->ops->ecp_write_data = parport_pc_ecp_write_block_pio;
  1956. /* currently broken, but working on it.. (FB) */
  1957. /* p->ops->ecp_read_data = parport_pc_ecp_read_block_pio; */
  1958. #endif /* IEEE 1284 support */
  1959. if (p->dma != PARPORT_DMA_NONE) {
  1960. printk(", dma %d", p->dma);
  1961. p->modes |= PARPORT_MODE_DMA;
  1962. }
  1963. else printk(", using FIFO");
  1964. }
  1965. else
  1966. /* We can't use the DMA channel after all. */
  1967. p->dma = PARPORT_DMA_NONE;
  1968. #endif /* Allowed to use FIFO/DMA */
  1969. printk(" [");
  1970. #define printmode(x) {if(p->modes&PARPORT_MODE_##x){printk("%s%s",f?",":"",#x);f++;}}
  1971. {
  1972. int f = 0;
  1973. printmode(PCSPP);
  1974. printmode(TRISTATE);
  1975. printmode(COMPAT)
  1976. printmode(EPP);
  1977. printmode(ECP);
  1978. printmode(DMA);
  1979. }
  1980. #undef printmode
  1981. #ifndef CONFIG_PARPORT_1284
  1982. printk ("(,...)");
  1983. #endif /* CONFIG_PARPORT_1284 */
  1984. printk("]n");
  1985. if (probedirq != PARPORT_IRQ_NONE) 
  1986. printk(KERN_INFO "%s: irq %d detectedn", p->name, probedirq);
  1987. parport_proc_register(p);
  1988. request_region (p->base, 3, p->name);
  1989. if (p->size > 3)
  1990. request_region (p->base + 3, p->size - 3, p->name);
  1991. if (p->modes & PARPORT_MODE_ECP)
  1992. request_region (p->base_hi, 3, p->name);
  1993. if (p->irq != PARPORT_IRQ_NONE) {
  1994. if (request_irq (p->irq, parport_pc_interrupt,
  1995.  0, p->name, p)) {
  1996. printk (KERN_WARNING "%s: irq %d in use, "
  1997. "resorting to polled operationn",
  1998. p->name, p->irq);
  1999. p->irq = PARPORT_IRQ_NONE;
  2000. p->dma = PARPORT_DMA_NONE;
  2001. }
  2002. #ifdef CONFIG_PARPORT_PC_FIFO
  2003. if (p->dma != PARPORT_DMA_NONE) {
  2004. if (request_dma (p->dma, p->name)) {
  2005. printk (KERN_WARNING "%s: dma %d in use, "
  2006. "resorting to PIO operationn",
  2007. p->name, p->dma);
  2008. p->dma = PARPORT_DMA_NONE;
  2009. } else {
  2010. priv->dma_buf =
  2011.   pci_alloc_consistent(priv->dev,
  2012.        PAGE_SIZE,
  2013.        &priv->dma_handle);
  2014. if (! priv->dma_buf) {
  2015. printk (KERN_WARNING "%s: "
  2016. "cannot get buffer for DMA, "
  2017. "resorting to PIO operationn",
  2018. p->name);
  2019. free_dma(p->dma);
  2020. p->dma = PARPORT_DMA_NONE;
  2021. }
  2022. }
  2023. }
  2024. #endif /* CONFIG_PARPORT_PC_FIFO */
  2025. }
  2026. /* Done probing.  Now put the port into a sensible start-up state. */
  2027. if (priv->ecr)
  2028. /*
  2029.  * Put the ECP detected port in PS2 mode.
  2030.  * Do this also for ports that have ECR but don't do ECP.
  2031.  */
  2032. ECR_WRITE (p, 0x34);
  2033. parport_pc_write_data(p, 0);
  2034. parport_pc_data_forward (p);
  2035. /* Now that we've told the sharing engine about the port, and
  2036.    found out its characteristics, let the high-level drivers
  2037.    know about it. */
  2038. parport_announce_port (p);
  2039. return p;
  2040. }
  2041. void parport_pc_unregister_port (struct parport *p)
  2042. {
  2043. struct parport_pc_private *priv = p->private_data;
  2044. struct parport_operations *ops = p->ops;
  2045. if (p->dma != PARPORT_DMA_NONE)
  2046. free_dma(p->dma);
  2047. if (p->irq != PARPORT_IRQ_NONE)
  2048. free_irq(p->irq, p);
  2049. release_region(p->base, 3);
  2050. if (p->size > 3)
  2051. release_region(p->base + 3, p->size - 3);
  2052. if (p->modes & PARPORT_MODE_ECP)
  2053. release_region(p->base_hi, 3);
  2054. parport_proc_unregister(p);
  2055. if (priv->dma_buf)
  2056. pci_free_consistent(priv->dev, PAGE_SIZE,
  2057.     priv->dma_buf,
  2058.     priv->dma_handle);
  2059. kfree (p->private_data);
  2060. parport_unregister_port(p);
  2061. kfree (ops); /* hope no-one cached it */
  2062. }
  2063. #ifdef CONFIG_PCI
  2064. /* ITE support maintained by Rich Liu <richliu@poorman.org> */
  2065. static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
  2066.  int autodma)
  2067. {
  2068. short inta_addr[6] = { 0x2A0, 0x2C0, 0x220, 0x240, 0x1E0 };
  2069. u32 ite8872set;
  2070. u32 ite8872_lpt, ite8872_lpthi;
  2071. u8 ite8872_irq, type;
  2072. int irq;
  2073. int i;
  2074. DPRINTK (KERN_DEBUG "sio_ite_8872_probe()n");
  2075. // make sure which one chip
  2076. for(i = 0; i < 5; i++) {
  2077. if (check_region (inta_addr[i], 0x8) >= 0) {
  2078. int test;
  2079. pci_write_config_dword (pdev, 0x60,
  2080. 0xe7000000 | inta_addr[i]);
  2081. pci_write_config_dword (pdev, 0x78,
  2082. 0x00000000 | inta_addr[i]);
  2083. test = inb (inta_addr[i]);
  2084. if (test != 0xff) break;
  2085. }
  2086. }
  2087. if(i >= 5) {
  2088. printk (KERN_INFO "parport_pc: cannot find ITE8872 INTAn");
  2089. return 0;
  2090. }
  2091. type = inb (inta_addr[i] + 0x18);
  2092. type &= 0x0f;
  2093. switch (type) {
  2094. case 0x2:
  2095. printk (KERN_INFO "parport_pc: ITE8871 found (1P)n");
  2096. ite8872set = 0x64200000;
  2097. break;
  2098. case 0xa:
  2099. printk (KERN_INFO "parport_pc: ITE8875 found (1P)n");
  2100. ite8872set = 0x64200000;
  2101. break;
  2102. case 0xe:
  2103. printk (KERN_INFO "parport_pc: ITE8872 found (2S1P)n");
  2104. ite8872set = 0x64e00000;
  2105. break;
  2106. case 0x6:
  2107. printk (KERN_INFO "parport_pc: ITE8873 found (1S)n");
  2108. return 0;
  2109. case 0x8:
  2110. DPRINTK (KERN_DEBUG "parport_pc: ITE8874 found (2S)n");
  2111. return 0;
  2112. default:
  2113. printk (KERN_INFO "parport_pc: unknown ITE887xn");
  2114. printk (KERN_INFO "parport_pc: please mail 'lspci -nvv' "
  2115. "output to Rich.Liu@ite.com.twn");
  2116. return 0;
  2117. }
  2118. pci_read_config_byte (pdev, 0x3c, &ite8872_irq);
  2119. pci_read_config_dword (pdev, 0x1c, &ite8872_lpt);
  2120. ite8872_lpt &= 0x0000ff00;
  2121. pci_read_config_dword (pdev, 0x20, &ite8872_lpthi);
  2122. ite8872_lpthi &= 0x0000ff00;
  2123. pci_write_config_dword (pdev, 0x6c, 0xe3000000 | ite8872_lpt);
  2124. pci_write_config_dword (pdev, 0x70, 0xe3000000 | ite8872_lpthi);
  2125. pci_write_config_dword (pdev, 0x80, (ite8872_lpthi<<16) | ite8872_lpt);
  2126. // SET SPP&EPP , Parallel Port NO DMA , Enable All Function
  2127. // SET Parallel IRQ
  2128. pci_write_config_dword (pdev, 0x9c,
  2129. ite8872set | (ite8872_irq * 0x11111));
  2130. DPRINTK (KERN_DEBUG "ITE887x: The IRQ is %d.n", ite8872_irq);
  2131. DPRINTK (KERN_DEBUG "ITE887x: The PARALLEL I/O port is 0x%x.n",
  2132.  ite8872_lpt);
  2133. DPRINTK (KERN_DEBUG "ITE887x: The PARALLEL I/O porthi is 0x%x.n",
  2134.  ite8872_lpthi);
  2135. /* Let the user (or defaults) steer us away from interrupts */
  2136. irq = ite8872_irq;
  2137. if (autoirq != PARPORT_IRQ_AUTO)
  2138. irq = PARPORT_IRQ_NONE;
  2139. if (parport_pc_probe_port (ite8872_lpt, ite8872_lpthi,
  2140.    irq, PARPORT_DMA_NONE, NULL)) {
  2141. printk (KERN_INFO
  2142. "parport_pc: ITE 8872 parallel port: io=0x%X",
  2143. ite8872_lpt);
  2144. if (irq != PARPORT_IRQ_NONE)
  2145. printk (", irq=%d", irq);
  2146. printk ("n");
  2147. return 1;
  2148. }
  2149. return 0;
  2150. }
  2151. /* Via support maintained by Jeff Garzik <jgarzik@mandrakesoft.com> */
  2152. static int __devinit sio_via_686a_probe (struct pci_dev *pdev, int autoirq,
  2153.  int autodma)
  2154. {
  2155. u8 tmp;
  2156. int dma, irq;
  2157. unsigned port1, port2, have_eppecp;
  2158. /*
  2159.  * unlock super i/o configuration, set 0x85_1
  2160.  */
  2161. pci_read_config_byte (pdev, 0x85, &tmp);
  2162. tmp |= (1 << 1);
  2163. pci_write_config_byte (pdev, 0x85, tmp);
  2164. /* 
  2165.  * Super I/O configuration, index port == 3f0h, data port == 3f1h
  2166.  */
  2167. /* 0xE2_1-0: Parallel Port Mode / Enable */
  2168. outb (0xE2, 0x3F0);
  2169. tmp = inb (0x3F1);
  2170. if ((tmp & 0x03) == 0x03) {
  2171. printk (KERN_INFO "parport_pc: Via 686A parallel port disabled in BIOSn");
  2172. return 0;
  2173. }
  2174. /* 0xE6: Parallel Port I/O Base Address, bits 9-2 */
  2175. outb (0xE6, 0x3F0);
  2176. port1 = inb (0x3F1) << 2;
  2177. switch (port1) {
  2178. case 0x3bc: port2 = 0x7bc; break;
  2179. case 0x378: port2 = 0x778; break;
  2180. case 0x278: port2 = 0x678; break;
  2181. default:
  2182. printk (KERN_INFO "parport_pc: Weird Via 686A parport base 0x%X, ignoringn",
  2183. port1);
  2184. return 0;
  2185. }
  2186. /* 0xF0_5: EPP+ECP enable */
  2187. outb (0xF0, 0x3F0);
  2188. have_eppecp = (inb (0x3F1) & (1 << 5));
  2189. /*
  2190.  * lock super i/o configuration, clear 0x85_1
  2191.  */
  2192. pci_read_config_byte (pdev, 0x85, &tmp);
  2193. tmp &= ~(1 << 1);
  2194. pci_write_config_byte (pdev, 0x85, tmp);
  2195. /*
  2196.  * Get DMA and IRQ from PCI->ISA bridge PCI config registers
  2197.  */
  2198. /* 0x50_3-2: PnP Routing for Parallel Port DRQ */
  2199. pci_read_config_byte (pdev, 0x50, &tmp);
  2200. dma = ((tmp >> 2) & 0x03);
  2201. /* 0x51_7-4: PnP Routing for Parallel Port IRQ */
  2202. pci_read_config_byte (pdev, 0x51, &tmp);
  2203. irq = ((tmp >> 4) & 0x0F);
  2204. /* filter bogus IRQs */
  2205. switch (irq) {
  2206. case 0:
  2207. case 2:
  2208. case 8:
  2209. case 13:
  2210. irq = PARPORT_IRQ_NONE;
  2211. break;
  2212. default: /* do nothing */
  2213. break;
  2214. }
  2215. /* if ECP not enabled, DMA is not enabled, assumed bogus 'dma' value */
  2216. if (!have_eppecp)
  2217. dma = PARPORT_DMA_NONE;
  2218. /* Let the user (or defaults) steer us away from interrupts and DMA */
  2219. if (autoirq != PARPORT_IRQ_AUTO) {
  2220. irq = PARPORT_IRQ_NONE;
  2221. dma = PARPORT_DMA_NONE;
  2222. }
  2223. if (autodma != PARPORT_DMA_AUTO)
  2224. dma = PARPORT_DMA_NONE;
  2225. /* finally, do the probe with values obtained */
  2226. if (parport_pc_probe_port (port1, port2, irq, dma, NULL)) {
  2227. printk (KERN_INFO
  2228. "parport_pc: Via 686A parallel port: io=0x%X", port1);
  2229. if (irq != PARPORT_IRQ_NONE)
  2230. printk (", irq=%d", irq);
  2231. if (dma != PARPORT_DMA_NONE)
  2232. printk (", dma=%d", dma);
  2233. printk ("n");
  2234. return 1;
  2235. }
  2236. printk (KERN_WARNING "parport_pc: Strange, can't probe Via 686A parallel port: io=0x%X, irq=%d, dma=%dn",
  2237. port1, irq, dma);
  2238. return 0;
  2239. }
  2240. enum parport_pc_sio_types {
  2241. sio_via_686a = 0, /* Via VT82C686A motherboard Super I/O */
  2242. sio_ite_8872,
  2243. last_sio
  2244. };
  2245. /* each element directly indexed from enum list, above */
  2246. static struct parport_pc_superio {
  2247. int (*probe) (struct pci_dev *pdev, int autoirq, int autodma);
  2248. } parport_pc_superio_info[] __devinitdata = {
  2249. { sio_via_686a_probe, },
  2250. { sio_ite_8872_probe, },
  2251. };
  2252. enum parport_pc_pci_cards {
  2253. siig_1s1p_10x_550 = last_sio,
  2254. siig_1s1p_10x_650,
  2255. siig_1s1p_10x_850,
  2256. siig_1p_10x,
  2257. siig_2p_10x,
  2258. siig_2s1p_10x_550,
  2259. siig_2s1p_10x_650,
  2260. siig_2s1p_10x_850,
  2261. siig_1p_20x,
  2262. siig_2p_20x,
  2263. siig_2p1s_20x_550,
  2264. siig_2p1s_20x_650,
  2265. siig_2p1s_20x_850,
  2266. siig_1s1p_20x_550,
  2267. siig_1s1p_20x_650,
  2268. siig_1s1p_20x_850,
  2269. siig_2s1p_20x_550,
  2270. siig_2s1p_20x_650,
  2271. siig_2s1p_20x_850,
  2272. lava_parallel,
  2273. lava_parallel_dual_a,
  2274. lava_parallel_dual_b,
  2275. boca_ioppar,
  2276. plx_9050,
  2277. timedia_4078a,
  2278. timedia_4079h,
  2279. timedia_4085h,
  2280. timedia_4088a,
  2281. timedia_4089a,
  2282. timedia_4095a,
  2283. timedia_4096a,
  2284. timedia_4078u,
  2285. timedia_4079a,
  2286. timedia_4085u,
  2287. timedia_4079r,
  2288. timedia_4079s,
  2289. timedia_4079d,
  2290. timedia_4079e,
  2291. timedia_4079f,
  2292. timedia_9079a,
  2293. timedia_9079b,
  2294. timedia_9079c,
  2295. timedia_4006a,
  2296. timedia_4014,
  2297. timedia_4008a,
  2298. timedia_4018,
  2299. timedia_9018a,
  2300. syba_2p_epp,
  2301. syba_1p_ecp,
  2302. titan_010l,
  2303. titan_1284p2,
  2304. avlab_1p,
  2305. avlab_2p,
  2306. oxsemi_954,
  2307. oxsemi_840,
  2308. aks_0100,
  2309. };
  2310. /* each element directly indexed from enum list, above 
  2311.  * (but offset by last_sio) */
  2312. static struct parport_pc_pci {
  2313. int numports;
  2314. struct { /* BAR (base address registers) numbers in the config
  2315.                     space header */
  2316. int lo;
  2317. int hi; /* -1 if not there, >6 for offset-method (max
  2318.                            BAR is 6) */
  2319. } addr[4];
  2320. } cards[] __devinitdata = {
  2321. /* siig_1s1p_10x_550 */ { 1, { { 3, 4 }, } },
  2322. /* siig_1s1p_10x_650 */ { 1, { { 3, 4 }, } },
  2323. /* siig_1s1p_10x_850 */ { 1, { { 3, 4 }, } },
  2324. /* siig_1p_10x */ { 1, { { 2, 3 }, } },
  2325. /* siig_2p_10x */ { 2, { { 2, 3 }, { 4, 5 }, } },
  2326. /* siig_2s1p_10x_550 */ { 1, { { 4, 5 }, } },
  2327. /* siig_2s1p_10x_650 */ { 1, { { 4, 5 }, } },
  2328. /* siig_2s1p_10x_850 */ { 1, { { 4, 5 }, } },
  2329. /* siig_1p_20x */ { 1, { { 0, 1 }, } },
  2330. /* siig_2p_20x */ { 2, { { 0, 1 }, { 2, 3 }, } },
  2331. /* siig_2p1s_20x_550 */ { 2, { { 1, 2 }, { 3, 4 }, } },
  2332. /* siig_2p1s_20x_650 */ { 2, { { 1, 2 }, { 3, 4 }, } },
  2333. /* siig_2p1s_20x_850 */ { 2, { { 1, 2 }, { 3, 4 }, } },
  2334. /* siig_1s1p_20x_550 */ { 1, { { 1, 2 }, } },
  2335. /* siig_1s1p_20x_650 */ { 1, { { 1, 2 }, } },
  2336. /* siig_1s1p_20x_850 */ { 1, { { 1, 2 }, } },
  2337. /* siig_2s1p_20x_550 */ { 1, { { 2, 3 }, } },
  2338. /* siig_2s1p_20x_650 */ { 1, { { 2, 3 }, } },
  2339. /* siig_2s1p_20x_850 */ { 1, { { 2, 3 }, } },
  2340. /* lava_parallel */ { 1, { { 0, -1 }, } },
  2341. /* lava_parallel_dual_a */ { 1, { { 0, -1 }, } },
  2342. /* lava_parallel_dual_b */ { 1, { { 0, -1 }, } },
  2343. /* boca_ioppar */ { 1, { { 0, -1 }, } },
  2344. /* plx_9050 */ { 2, { { 4, -1 }, { 5, -1 }, } },
  2345. /* timedia_4078a */ { 1, { { 2, -1 }, } },
  2346. /* timedia_4079h */             { 1, { { 2, 3 }, } },
  2347. /* timedia_4085h */             { 2, { { 2, -1 }, { 4, -1 }, } },
  2348. /* timedia_4088a */             { 2, { { 2, 3 }, { 4, 5 }, } },
  2349. /* timedia_4089a */             { 2, { { 2, 3 }, { 4, 5 }, } },
  2350. /* timedia_4095a */             { 2, { { 2, 3 }, { 4, 5 }, } },
  2351. /* timedia_4096a */             { 2, { { 2, 3 }, { 4, 5 }, } },
  2352. /* timedia_4078u */             { 1, { { 2, -1 }, } },
  2353. /* timedia_4079a */             { 1, { { 2, 3 }, } },
  2354. /* timedia_4085u */             { 2, { { 2, -1 }, { 4, -1 }, } },
  2355. /* timedia_4079r */             { 1, { { 2, 3 }, } },
  2356. /* timedia_4079s */             { 1, { { 2, 3 }, } },
  2357. /* timedia_4079d */             { 1, { { 2, 3 }, } },
  2358. /* timedia_4079e */             { 1, { { 2, 3 }, } },
  2359. /* timedia_4079f */             { 1, { { 2, 3 }, } },
  2360. /* timedia_9079a */             { 1, { { 2, 3 }, } },
  2361. /* timedia_9079b */             { 1, { { 2, 3 }, } },
  2362. /* timedia_9079c */             { 1, { { 2, 3 }, } },
  2363. /* timedia_4006a */             { 1, { { 0, -1 }, } },
  2364. /* timedia_4014  */             { 2, { { 0, -1 }, { 2, -1 }, } },
  2365. /* timedia_4008a */             { 1, { { 0, 1 }, } },
  2366. /* timedia_4018  */             { 2, { { 0, 1 }, { 2, 3 }, } },
  2367. /* timedia_9018a */             { 2, { { 0, 1 }, { 2, 3 }, } },
  2368. /* SYBA uses fixed offsets in
  2369.                                            a 1K io window */
  2370. /* syba_2p_epp AP138B */ { 2, { { 0, 0x078 }, { 0, 0x178 }, } },
  2371. /* syba_1p_ecp W83787 */ { 1, { { 0, 0x078 }, } },
  2372. /* titan_010l */ { 1, { { 3, -1 }, } },
  2373. /* titan_1284p2 */ { 2, { { 0, 1 }, { 2, 3 }, } },
  2374. /* avlab_1p */ { 1, { { 0, 1}, } },
  2375. /* avlab_2p */ { 2, { { 0, 1}, { 2, 3 },} },
  2376. /* The Oxford Semi cards are unusual: 954 doesn't support ECP,
  2377.  * and 840 locks up if you write 1 to bit 2! */
  2378. /* oxsemi_954 */ { 1, { { 0, -1 }, } },
  2379. /* oxsemi_840 */ { 1, { { 0, -1 }, } },
  2380. /* aks_0100 */ { 1, { { 0, 1 }, } },
  2381. };
  2382. static struct pci_device_id parport_pc_pci_tbl[] __devinitdata = {
  2383. /* Super-IO onboard chips */
  2384. { 0x1106, 0x0686, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_686a },
  2385. { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
  2386.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_ite_8872 },
  2387. /* PCI cards */
  2388. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_550,
  2389.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_10x_550 },
  2390. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_650,
  2391.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_10x_650 },
  2392. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_850,
  2393.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_10x_850 },
  2394. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_10x,
  2395.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_10x },
  2396. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_10x,
  2397.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_10x },
  2398. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_550,
  2399.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_10x_550 },
  2400. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_650,
  2401.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_10x_650 },
  2402. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_850,
  2403.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_10x_850 },
  2404. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_20x,
  2405.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_20x },
  2406. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_20x,
  2407.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_20x },
  2408. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_550,
  2409.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p1s_20x_550 },
  2410. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_650,
  2411.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p1s_20x_650 },
  2412. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_850,
  2413.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p1s_20x_850 },
  2414. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_550,
  2415.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_550 },
  2416. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_650,
  2417.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_20x_650 },
  2418. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_850,
  2419.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1s1p_20x_850 },
  2420. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_550,
  2421.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_550 },
  2422. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_650,
  2423.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_650 },
  2424. { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850,
  2425.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x_850 },
  2426. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PARALLEL,
  2427.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel },
  2428. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_A,
  2429.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_a },
  2430. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_B,
  2431.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_b },
  2432. { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_BOCA_IOPPAR,
  2433.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, boca_ioppar },
  2434. { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
  2435.   PCI_SUBVENDOR_ID_EXSYS, PCI_SUBDEVICE_ID_EXSYS_4014, 0,0, plx_9050 },
  2436. /* PCI_VENDOR_ID_TIMEDIA/SUNIX has many differing cards ...*/
  2437. { 0x1409, 0x7168, 0x1409, 0x4078, 0, 0, timedia_4078a },
  2438. { 0x1409, 0x7168, 0x1409, 0x4079, 0, 0, timedia_4079h },
  2439. { 0x1409, 0x7168, 0x1409, 0x4085, 0, 0, timedia_4085h },
  2440. { 0x1409, 0x7168, 0x1409, 0x4088, 0, 0, timedia_4088a },
  2441. { 0x1409, 0x7168, 0x1409, 0x4089, 0, 0, timedia_4089a },
  2442. { 0x1409, 0x7168, 0x1409, 0x4095, 0, 0, timedia_4095a },
  2443. { 0x1409, 0x7168, 0x1409, 0x4096, 0, 0, timedia_4096a },
  2444. { 0x1409, 0x7168, 0x1409, 0x5078, 0, 0, timedia_4078u },
  2445. { 0x1409, 0x7168, 0x1409, 0x5079, 0, 0, timedia_4079a },
  2446. { 0x1409, 0x7168, 0x1409, 0x5085, 0, 0, timedia_4085u },
  2447. { 0x1409, 0x7168, 0x1409, 0x6079, 0, 0, timedia_4079r },
  2448. { 0x1409, 0x7168, 0x1409, 0x7079, 0, 0, timedia_4079s },
  2449. { 0x1409, 0x7168, 0x1409, 0x8079, 0, 0, timedia_4079d },
  2450. { 0x1409, 0x7168, 0x1409, 0x9079, 0, 0, timedia_4079e },
  2451. { 0x1409, 0x7168, 0x1409, 0xa079, 0, 0, timedia_4079f },
  2452. { 0x1409, 0x7168, 0x1409, 0xb079, 0, 0, timedia_9079a },
  2453. { 0x1409, 0x7168, 0x1409, 0xc079, 0, 0, timedia_9079b },
  2454. { 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },
  2455. { 0x1409, 0x7268, 0x1409, 0x0101, 0, 0, timedia_4006a },
  2456. { 0x1409, 0x7268, 0x1409, 0x0102, 0, 0, timedia_4014 },
  2457. { 0x1409, 0x7268, 0x1409, 0x0103, 0, 0, timedia_4008a },
  2458. { 0x1409, 0x7268, 0x1409, 0x0104, 0, 0, timedia_4018 },
  2459. { 0x1409, 0x7268, 0x1409, 0x9018, 0, 0, timedia_9018a },
  2460. { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_2P_EPP,
  2461.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_2p_epp },
  2462. { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_1P_ECP,
  2463.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp },
  2464. { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L,
  2465.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l },
  2466. { 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 },
  2467. /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
  2468. { 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p}, /* AFAVLAB_TK9902 */
  2469. { 0x14db, 0x2121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2p},
  2470. { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954PP,
  2471.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_954 },
  2472. { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_12PCI840,
  2473.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_840 },
  2474. { PCI_VENDOR_ID_AKS, PCI_DEVICE_ID_AKS_ALADDINCARD,
  2475.   PCI_ANY_ID, PCI_ANY_ID, 0, 0, aks_0100 },
  2476. { 0, } /* terminate list */
  2477. };
  2478. MODULE_DEVICE_TABLE(pci,parport_pc_pci_tbl);
  2479. static int __devinit parport_pc_pci_probe (struct pci_dev *dev,
  2480.    const struct pci_device_id *id)
  2481. {
  2482. int err, count, n, i = id->driver_data;
  2483. if (i < last_sio)
  2484. /* This is an onboard Super-IO and has already been probed */
  2485. return 0;
  2486. /* This is a PCI card */
  2487. i -= last_sio;
  2488. count = 0;
  2489. if ((err = pci_enable_device (dev)) != 0)
  2490. return err;
  2491. for (n = 0; n < cards[i].numports; n++) {
  2492. int lo = cards[i].addr[n].lo;
  2493. int hi = cards[i].addr[n].hi;
  2494. unsigned long io_lo, io_hi;
  2495. io_lo = pci_resource_start (dev, lo);
  2496. io_hi = 0;
  2497. if ((hi >= 0) && (hi <= 6))
  2498. io_hi = pci_resource_start (dev, hi);
  2499. else if (hi > 6)
  2500. io_lo += hi; /* Reinterpret the meaning of
  2501.                                         "hi" as an offset (see SYBA
  2502.                                         def.) */
  2503. /* TODO: test if sharing interrupts works */
  2504. printk (KERN_DEBUG "PCI parallel port detected: %04x:%04x, "
  2505. "I/O at %#lx(%#lx)n",
  2506. parport_pc_pci_tbl[i + last_sio].vendor,
  2507. parport_pc_pci_tbl[i + last_sio].device, io_lo, io_hi);
  2508. if (parport_pc_probe_port (io_lo, io_hi, PARPORT_IRQ_NONE,
  2509.    PARPORT_DMA_NONE, dev))
  2510. count++;
  2511. }
  2512. return count == 0 ? -ENODEV : 0;
  2513. }
  2514. static struct pci_driver parport_pc_pci_driver = {
  2515. name: "parport_pc",
  2516. id_table: parport_pc_pci_tbl,
  2517. probe: parport_pc_pci_probe,
  2518. };
  2519. static int __init parport_pc_init_superio (int autoirq, int autodma)
  2520. {
  2521. const struct pci_device_id *id;
  2522. struct pci_dev *pdev;
  2523. int ret = 0;
  2524. pci_for_each_dev(pdev) {
  2525. id = pci_match_device (parport_pc_pci_tbl, pdev);
  2526. if (id == NULL || id->driver_data >= last_sio)
  2527. continue;
  2528. if (parport_pc_superio_info[id->driver_data].probe
  2529. (pdev, autoirq, autodma)) {
  2530. ret++;
  2531. }
  2532. }
  2533. return ret; /* number of devices found */
  2534. }
  2535. #else
  2536. static struct pci_driver parport_pc_pci_driver;
  2537. static int __init parport_pc_init_superio(int autoirq, int autodma) {return 0;}
  2538. #endif /* CONFIG_PCI */
  2539. /* This is called by parport_pc_find_nonpci_ports (in asm/parport.h) */
  2540. static int __init __attribute__((unused))
  2541. parport_pc_find_isa_ports (int autoirq, int autodma)
  2542. {
  2543. int count = 0;
  2544. if (parport_pc_probe_port(0x3bc, 0x7bc, autoirq, autodma, NULL))
  2545. count++;
  2546. if (parport_pc_probe_port(0x378, 0x778, autoirq, autodma, NULL))
  2547. count++;
  2548. if (parport_pc_probe_port(0x278, 0x678, autoirq, autodma, NULL))
  2549. count++;
  2550. return count;
  2551. }
  2552. /* This function is called by parport_pc_init if the user didn't
  2553.  * specify any ports to probe.  Its job is to find some ports.  Order
  2554.  * is important here -- we want ISA ports to be registered first,
  2555.  * followed by PCI cards (for least surprise), but before that we want
  2556.  * to do chipset-specific tests for some onboard ports that we know
  2557.  * about.
  2558.  *
  2559.  * autoirq is PARPORT_IRQ_NONE, PARPORT_IRQ_AUTO, or PARPORT_IRQ_PROBEONLY
  2560.  * autodma is PARPORT_DMA_NONE or PARPORT_DMA_AUTO
  2561.  */
  2562. static int __init parport_pc_find_ports (int autoirq, int autodma)
  2563. {
  2564. int count = 0, r;
  2565. #ifdef CONFIG_PARPORT_PC_SUPERIO
  2566. detect_and_report_winbond ();
  2567. detect_and_report_smsc ();
  2568. #endif
  2569. /* Onboard SuperIO chipsets that show themselves on the PCI bus. */
  2570. count += parport_pc_init_superio (autoirq, autodma);
  2571. /* ISA ports and whatever (see asm/parport.h). */
  2572. count += parport_pc_find_nonpci_ports (autoirq, autodma);
  2573. r = pci_register_driver (&parport_pc_pci_driver);
  2574. if (r >= 0) {
  2575. registered_parport = 1;
  2576. count += r;
  2577. }
  2578. return count;
  2579. }
  2580. int __init parport_pc_init (int *io, int *io_hi, int *irq, int *dma)
  2581. {
  2582. int count = 0, i = 0;
  2583. if (io && *io) {
  2584. /* Only probe the ports we were given. */
  2585. user_specified = 1;
  2586. do {
  2587. if ((*io_hi) == PARPORT_IOHI_AUTO)
  2588.        *io_hi = 0x400 + *io;
  2589. if (parport_pc_probe_port(*(io++), *(io_hi++),
  2590.   *(irq++), *(dma++), NULL))
  2591. count++;
  2592. } while (*io && (++i < PARPORT_PC_MAX_PORTS));
  2593. } else {
  2594. count += parport_pc_find_ports (irq[0], dma[0]);
  2595. }
  2596. return count;
  2597. }
  2598. /* Exported symbols. */
  2599. EXPORT_SYMBOL (parport_pc_probe_port);
  2600. EXPORT_SYMBOL (parport_pc_unregister_port);
  2601. #ifdef MODULE
  2602. static int io[PARPORT_PC_MAX_PORTS+1] = { [0 ... PARPORT_PC_MAX_PORTS] = 0 };
  2603. static int io_hi[PARPORT_PC_MAX_PORTS+1] =
  2604. { [0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO };
  2605. static int dmaval[PARPORT_PC_MAX_PORTS] = { [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_NONE };
  2606. static int irqval[PARPORT_PC_MAX_PORTS] = { [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY };
  2607. static const char *irq[PARPORT_PC_MAX_PORTS] = { NULL, };
  2608. static const char *dma[PARPORT_PC_MAX_PORTS] = { NULL, };
  2609. MODULE_AUTHOR("Phil Blundell, Tim Waugh, others");
  2610. MODULE_DESCRIPTION("PC-style parallel port driver");
  2611. MODULE_LICENSE("GPL");
  2612. MODULE_PARM_DESC(io, "Base I/O address (SPP regs)");
  2613. MODULE_PARM(io, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "i");
  2614. MODULE_PARM_DESC(io_hi, "Base I/O address (ECR)");
  2615. MODULE_PARM(io_hi, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "i");
  2616. MODULE_PARM_DESC(irq, "IRQ line");
  2617. MODULE_PARM(irq, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "s");
  2618. MODULE_PARM_DESC(dma, "DMA channel");
  2619. MODULE_PARM(dma, "1-" __MODULE_STRING(PARPORT_PC_MAX_PORTS) "s");
  2620. #if defined(CONFIG_PARPORT_PC_FIFO) || defined(CONFIG_PARPORT_PC_SUPERIO)
  2621. MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation");
  2622. MODULE_PARM(verbose_probing, "i");
  2623. #endif
  2624. int init_module(void)
  2625. {
  2626. /* Work out how many ports we have, then get parport_share to parse
  2627.    the irq values. */
  2628. unsigned int i;
  2629. int ret;
  2630. for (i = 0; i < PARPORT_PC_MAX_PORTS && io[i]; i++);
  2631. if (i) {
  2632. if (parport_parse_irqs(i, irq, irqval)) return 1;
  2633. if (parport_parse_dmas(i, dma, dmaval)) return 1;
  2634. }
  2635. else {
  2636. /* The user can make us use any IRQs or DMAs we find. */
  2637. int val;
  2638. if (irq[0] && !parport_parse_irqs (1, irq, &val))
  2639. switch (val) {
  2640. case PARPORT_IRQ_NONE:
  2641. case PARPORT_IRQ_AUTO:
  2642. irqval[0] = val;
  2643. break;
  2644. default:
  2645. printk (KERN_WARNING
  2646. "parport_pc: irq specified "
  2647. "without base address.  Use 'io=' "
  2648. "to specify onen");
  2649. }
  2650. if (dma[0] && !parport_parse_dmas (1, dma, &val))
  2651. switch (val) {
  2652. case PARPORT_DMA_NONE:
  2653. case PARPORT_DMA_AUTO:
  2654. dmaval[0] = val;
  2655. break;
  2656. default:
  2657. printk (KERN_WARNING
  2658. "parport_pc: dma specified "
  2659. "without base address.  Use 'io=' "
  2660. "to specify onen");
  2661. }
  2662. }
  2663. ret = !parport_pc_init (io, io_hi, irqval, dmaval);
  2664. if (ret && registered_parport)
  2665. pci_unregister_driver (&parport_pc_pci_driver);
  2666. return ret;
  2667. }
  2668. void cleanup_module(void)
  2669. {
  2670. /* We ought to keep track of which ports are actually ours. */
  2671. struct parport *p = parport_enumerate(), *tmp;
  2672. if (!user_specified)
  2673. pci_unregister_driver (&parport_pc_pci_driver);
  2674. while (p) {
  2675. tmp = p->next;
  2676. if (p->modes & PARPORT_MODE_PCSPP)
  2677. parport_pc_unregister_port (p);
  2678. p = tmp;
  2679. }
  2680. }
  2681. #endif