0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046 #include <linux/module.h>
0047 #include <linux/init.h>
0048 #include <linux/sched/signal.h>
0049 #include <linux/delay.h>
0050 #include <linux/errno.h>
0051 #include <linux/interrupt.h>
0052 #include <linux/ioport.h>
0053 #include <linux/kernel.h>
0054 #include <linux/slab.h>
0055 #include <linux/dma-mapping.h>
0056 #include <linux/pci.h>
0057 #include <linux/pnp.h>
0058 #include <linux/platform_device.h>
0059 #include <linux/sysctl.h>
0060 #include <linux/io.h>
0061 #include <linux/uaccess.h>
0062
0063 #include <asm/dma.h>
0064
0065 #include <linux/parport.h>
0066 #include <linux/parport_pc.h>
0067 #include <linux/via.h>
0068 #include <asm/parport.h>
0069
0070 #define PARPORT_PC_MAX_PORTS PARPORT_MAX
0071
0072 #ifdef CONFIG_ISA_DMA_API
0073 #define HAS_DMA
0074 #endif
0075
0076
0077 #define ECR_SPP 00
0078 #define ECR_PS2 01
0079 #define ECR_PPF 02
0080 #define ECR_ECP 03
0081 #define ECR_EPP 04
0082 #define ECR_VND 05
0083 #define ECR_TST 06
0084 #define ECR_CNF 07
0085 #define ECR_MODE_MASK 0xe0
0086 #define ECR_WRITE(p, v) frob_econtrol((p), 0xff, (v))
0087
0088 #undef DEBUG
0089
0090 #define NR_SUPERIOS 3
0091 static struct superio_struct {
0092 int io;
0093 int irq;
0094 int dma;
0095 } superios[NR_SUPERIOS] = { {0,},};
0096
0097 static int user_specified;
0098 #if defined(CONFIG_PARPORT_PC_SUPERIO) || \
0099 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
0100 static int verbose_probing;
0101 #endif
0102 static int pci_registered_parport;
0103 static int pnp_registered_parport;
0104
0105
0106 static void frob_econtrol(struct parport *pb, unsigned char m,
0107 unsigned char v)
0108 {
0109 unsigned char ectr = 0;
0110
0111 if (m != 0xff)
0112 ectr = inb(ECONTROL(pb));
0113
0114 pr_debug("frob_econtrol(%02x,%02x): %02x -> %02x\n",
0115 m, v, ectr, (ectr & ~m) ^ v);
0116
0117 outb((ectr & ~m) ^ v, ECONTROL(pb));
0118 }
0119
0120 static inline void frob_set_mode(struct parport *p, int mode)
0121 {
0122 frob_econtrol(p, ECR_MODE_MASK, mode << 5);
0123 }
0124
0125 #ifdef CONFIG_PARPORT_PC_FIFO
0126
0127
0128
0129
0130
0131
0132 static int change_mode(struct parport *p, int m)
0133 {
0134 const struct parport_pc_private *priv = p->physport->private_data;
0135 unsigned char oecr;
0136 int mode;
0137
0138 pr_debug("parport change_mode ECP-ISA to mode 0x%02x\n", m);
0139
0140 if (!priv->ecr) {
0141 printk(KERN_DEBUG "change_mode: but there's no ECR!\n");
0142 return 0;
0143 }
0144
0145
0146 oecr = inb(ECONTROL(p));
0147 mode = (oecr >> 5) & 0x7;
0148 if (mode == m)
0149 return 0;
0150
0151 if (mode >= 2 && !(priv->ctr & 0x20)) {
0152
0153
0154 unsigned long expire = jiffies + p->physport->cad->timeout;
0155 int counter;
0156 switch (mode) {
0157 case ECR_PPF:
0158 case ECR_ECP:
0159
0160 for (counter = 0; counter < 40; counter++) {
0161 if (inb(ECONTROL(p)) & 0x01)
0162 break;
0163 if (signal_pending(current))
0164 break;
0165 udelay(5);
0166 }
0167
0168
0169 while (!(inb(ECONTROL(p)) & 0x01)) {
0170 if (time_after_eq(jiffies, expire))
0171
0172 return -EBUSY;
0173 schedule_timeout_interruptible(
0174 msecs_to_jiffies(10));
0175 if (signal_pending(current))
0176 break;
0177 }
0178 }
0179 }
0180
0181 if (mode >= 2 && m >= 2) {
0182
0183 oecr &= ~(7 << 5);
0184 oecr |= ECR_PS2 << 5;
0185 ECR_WRITE(p, oecr);
0186 }
0187
0188
0189 oecr &= ~(7 << 5);
0190 oecr |= m << 5;
0191 ECR_WRITE(p, oecr);
0192 return 0;
0193 }
0194 #endif
0195
0196
0197
0198
0199
0200
0201 static int clear_epp_timeout(struct parport *pb)
0202 {
0203 unsigned char r;
0204
0205 if (!(parport_pc_read_status(pb) & 0x01))
0206 return 1;
0207
0208
0209 parport_pc_read_status(pb);
0210 r = parport_pc_read_status(pb);
0211 outb(r | 0x01, STATUS(pb));
0212 outb(r & 0xfe, STATUS(pb));
0213 r = parport_pc_read_status(pb);
0214
0215 return !(r & 0x01);
0216 }
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226 static void parport_pc_init_state(struct pardevice *dev,
0227 struct parport_state *s)
0228 {
0229 s->u.pc.ctr = 0xc;
0230 if (dev->irq_func &&
0231 dev->port->irq != PARPORT_IRQ_NONE)
0232
0233 s->u.pc.ctr |= 0x10;
0234
0235 s->u.pc.ecr = 0x34;
0236
0237 }
0238
0239 static void parport_pc_save_state(struct parport *p, struct parport_state *s)
0240 {
0241 const struct parport_pc_private *priv = p->physport->private_data;
0242 s->u.pc.ctr = priv->ctr;
0243 if (priv->ecr)
0244 s->u.pc.ecr = inb(ECONTROL(p));
0245 }
0246
0247 static void parport_pc_restore_state(struct parport *p,
0248 struct parport_state *s)
0249 {
0250 struct parport_pc_private *priv = p->physport->private_data;
0251 register unsigned char c = s->u.pc.ctr & priv->ctr_writable;
0252 outb(c, CONTROL(p));
0253 priv->ctr = c;
0254 if (priv->ecr)
0255 ECR_WRITE(p, s->u.pc.ecr);
0256 }
0257
0258 #ifdef CONFIG_PARPORT_1284
0259 static size_t parport_pc_epp_read_data(struct parport *port, void *buf,
0260 size_t length, int flags)
0261 {
0262 size_t got = 0;
0263
0264 if (flags & PARPORT_W91284PIC) {
0265 unsigned char status;
0266 size_t left = length;
0267
0268
0269
0270
0271
0272 status = inb(STATUS(port));
0273
0274 while (!(status & 0x08) && got < length) {
0275 if (left >= 16 && (status & 0x20) && !(status & 0x08)) {
0276
0277 if (!((long)buf & 0x03))
0278 insl(EPPDATA(port), buf, 4);
0279 else
0280 insb(EPPDATA(port), buf, 16);
0281 buf += 16;
0282 got += 16;
0283 left -= 16;
0284 } else {
0285
0286 *((char *)buf) = inb(EPPDATA(port));
0287 buf++;
0288 got++;
0289 left--;
0290 }
0291 status = inb(STATUS(port));
0292 if (status & 0x01) {
0293
0294 printk(KERN_DEBUG "%s: EPP timeout occurred while talking to w91284pic (should not have done)\n",
0295 port->name);
0296 clear_epp_timeout(port);
0297 }
0298 }
0299 return got;
0300 }
0301 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
0302 if (!(((long)buf | length) & 0x03))
0303 insl(EPPDATA(port), buf, (length >> 2));
0304 else
0305 insb(EPPDATA(port), buf, length);
0306 if (inb(STATUS(port)) & 0x01) {
0307 clear_epp_timeout(port);
0308 return -EIO;
0309 }
0310 return length;
0311 }
0312 for (; got < length; got++) {
0313 *((char *)buf) = inb(EPPDATA(port));
0314 buf++;
0315 if (inb(STATUS(port)) & 0x01) {
0316
0317 clear_epp_timeout(port);
0318 break;
0319 }
0320 }
0321
0322 return got;
0323 }
0324
0325 static size_t parport_pc_epp_write_data(struct parport *port, const void *buf,
0326 size_t length, int flags)
0327 {
0328 size_t written = 0;
0329
0330 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
0331 if (!(((long)buf | length) & 0x03))
0332 outsl(EPPDATA(port), buf, (length >> 2));
0333 else
0334 outsb(EPPDATA(port), buf, length);
0335 if (inb(STATUS(port)) & 0x01) {
0336 clear_epp_timeout(port);
0337 return -EIO;
0338 }
0339 return length;
0340 }
0341 for (; written < length; written++) {
0342 outb(*((char *)buf), EPPDATA(port));
0343 buf++;
0344 if (inb(STATUS(port)) & 0x01) {
0345 clear_epp_timeout(port);
0346 break;
0347 }
0348 }
0349
0350 return written;
0351 }
0352
0353 static size_t parport_pc_epp_read_addr(struct parport *port, void *buf,
0354 size_t length, int flags)
0355 {
0356 size_t got = 0;
0357
0358 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
0359 insb(EPPADDR(port), buf, length);
0360 if (inb(STATUS(port)) & 0x01) {
0361 clear_epp_timeout(port);
0362 return -EIO;
0363 }
0364 return length;
0365 }
0366 for (; got < length; got++) {
0367 *((char *)buf) = inb(EPPADDR(port));
0368 buf++;
0369 if (inb(STATUS(port)) & 0x01) {
0370 clear_epp_timeout(port);
0371 break;
0372 }
0373 }
0374
0375 return got;
0376 }
0377
0378 static size_t parport_pc_epp_write_addr(struct parport *port,
0379 const void *buf, size_t length,
0380 int flags)
0381 {
0382 size_t written = 0;
0383
0384 if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
0385 outsb(EPPADDR(port), buf, length);
0386 if (inb(STATUS(port)) & 0x01) {
0387 clear_epp_timeout(port);
0388 return -EIO;
0389 }
0390 return length;
0391 }
0392 for (; written < length; written++) {
0393 outb(*((char *)buf), EPPADDR(port));
0394 buf++;
0395 if (inb(STATUS(port)) & 0x01) {
0396 clear_epp_timeout(port);
0397 break;
0398 }
0399 }
0400
0401 return written;
0402 }
0403
0404 static size_t parport_pc_ecpepp_read_data(struct parport *port, void *buf,
0405 size_t length, int flags)
0406 {
0407 size_t got;
0408
0409 frob_set_mode(port, ECR_EPP);
0410 parport_pc_data_reverse(port);
0411 parport_pc_write_control(port, 0x4);
0412 got = parport_pc_epp_read_data(port, buf, length, flags);
0413 frob_set_mode(port, ECR_PS2);
0414
0415 return got;
0416 }
0417
0418 static size_t parport_pc_ecpepp_write_data(struct parport *port,
0419 const void *buf, size_t length,
0420 int flags)
0421 {
0422 size_t written;
0423
0424 frob_set_mode(port, ECR_EPP);
0425 parport_pc_write_control(port, 0x4);
0426 parport_pc_data_forward(port);
0427 written = parport_pc_epp_write_data(port, buf, length, flags);
0428 frob_set_mode(port, ECR_PS2);
0429
0430 return written;
0431 }
0432
0433 static size_t parport_pc_ecpepp_read_addr(struct parport *port, void *buf,
0434 size_t length, int flags)
0435 {
0436 size_t got;
0437
0438 frob_set_mode(port, ECR_EPP);
0439 parport_pc_data_reverse(port);
0440 parport_pc_write_control(port, 0x4);
0441 got = parport_pc_epp_read_addr(port, buf, length, flags);
0442 frob_set_mode(port, ECR_PS2);
0443
0444 return got;
0445 }
0446
0447 static size_t parport_pc_ecpepp_write_addr(struct parport *port,
0448 const void *buf, size_t length,
0449 int flags)
0450 {
0451 size_t written;
0452
0453 frob_set_mode(port, ECR_EPP);
0454 parport_pc_write_control(port, 0x4);
0455 parport_pc_data_forward(port);
0456 written = parport_pc_epp_write_addr(port, buf, length, flags);
0457 frob_set_mode(port, ECR_PS2);
0458
0459 return written;
0460 }
0461 #endif
0462
0463 #ifdef CONFIG_PARPORT_PC_FIFO
0464 static size_t parport_pc_fifo_write_block_pio(struct parport *port,
0465 const void *buf, size_t length)
0466 {
0467 int ret = 0;
0468 const unsigned char *bufp = buf;
0469 size_t left = length;
0470 unsigned long expire = jiffies + port->physport->cad->timeout;
0471 const int fifo = FIFO(port);
0472 int poll_for = 8;
0473 const struct parport_pc_private *priv = port->physport->private_data;
0474 const int fifo_depth = priv->fifo_depth;
0475
0476 port = port->physport;
0477
0478
0479 parport_pc_disable_irq(port);
0480
0481 frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2));
0482
0483
0484 parport_pc_data_forward(port);
0485
0486 while (left) {
0487 unsigned char byte;
0488 unsigned char ecrval = inb(ECONTROL(port));
0489 int i = 0;
0490
0491 if (need_resched() && time_before(jiffies, expire))
0492
0493 schedule();
0494
0495
0496 if (port->waithead) {
0497 printk(KERN_DEBUG "Somebody wants the port\n");
0498 break;
0499 }
0500
0501 if (ecrval & 0x02) {
0502
0503
0504
0505 ECR_WRITE(port, ecrval & ~(1<<2));
0506 false_alarm:
0507 ret = parport_wait_event(port, HZ);
0508 if (ret < 0)
0509 break;
0510 ret = 0;
0511 if (!time_before(jiffies, expire)) {
0512
0513 printk(KERN_DEBUG "FIFO write timed out\n");
0514 break;
0515 }
0516 ecrval = inb(ECONTROL(port));
0517 if (!(ecrval & (1<<2))) {
0518 if (need_resched() &&
0519 time_before(jiffies, expire))
0520 schedule();
0521
0522 goto false_alarm;
0523 }
0524
0525 continue;
0526 }
0527
0528
0529 expire = jiffies + port->cad->timeout;
0530
0531 poll:
0532 if (signal_pending(current))
0533 break;
0534
0535 if (ecrval & 0x01) {
0536
0537 const int n = left < fifo_depth ? left : fifo_depth;
0538 outsb(fifo, bufp, n);
0539 bufp += n;
0540 left -= n;
0541
0542
0543 if (i < (poll_for - 2))
0544 poll_for--;
0545 continue;
0546 } else if (i++ < poll_for) {
0547 udelay(10);
0548 ecrval = inb(ECONTROL(port));
0549 goto poll;
0550 }
0551
0552
0553 byte = *bufp++;
0554 outb(byte, fifo);
0555 left--;
0556 }
0557 dump_parport_state("leave fifo_write_block_pio", port);
0558 return length - left;
0559 }
0560
0561 #ifdef HAS_DMA
0562 static size_t parport_pc_fifo_write_block_dma(struct parport *port,
0563 const void *buf, size_t length)
0564 {
0565 int ret = 0;
0566 unsigned long dmaflag;
0567 size_t left = length;
0568 const struct parport_pc_private *priv = port->physport->private_data;
0569 struct device *dev = port->physport->dev;
0570 dma_addr_t dma_addr, dma_handle;
0571 size_t maxlen = 0x10000;
0572 unsigned long start = (unsigned long) buf;
0573 unsigned long end = (unsigned long) buf + length - 1;
0574
0575 dump_parport_state("enter fifo_write_block_dma", port);
0576 if (end < MAX_DMA_ADDRESS) {
0577
0578 if ((start ^ end) & ~0xffffUL)
0579 maxlen = 0x10000 - (start & 0xffff);
0580
0581 dma_addr = dma_handle = dma_map_single(dev, (void *)buf, length,
0582 DMA_TO_DEVICE);
0583 } else {
0584
0585
0586 maxlen = PAGE_SIZE;
0587 dma_addr = priv->dma_handle;
0588 dma_handle = 0;
0589 }
0590
0591 port = port->physport;
0592
0593
0594 parport_pc_disable_irq(port);
0595
0596 frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2));
0597
0598
0599 parport_pc_data_forward(port);
0600
0601 while (left) {
0602 unsigned long expire = jiffies + port->physport->cad->timeout;
0603
0604 size_t count = left;
0605
0606 if (count > maxlen)
0607 count = maxlen;
0608
0609 if (!dma_handle)
0610 memcpy(priv->dma_buf, buf, count);
0611
0612 dmaflag = claim_dma_lock();
0613 disable_dma(port->dma);
0614 clear_dma_ff(port->dma);
0615 set_dma_mode(port->dma, DMA_MODE_WRITE);
0616 set_dma_addr(port->dma, dma_addr);
0617 set_dma_count(port->dma, count);
0618
0619
0620 frob_econtrol(port, 1<<3, 1<<3);
0621
0622
0623 frob_econtrol(port, 1<<2, 0);
0624
0625 enable_dma(port->dma);
0626 release_dma_lock(dmaflag);
0627
0628
0629 left -= count;
0630 buf += count;
0631 if (dma_handle)
0632 dma_addr += count;
0633
0634
0635 false_alarm:
0636 ret = parport_wait_event(port, HZ);
0637 if (ret < 0)
0638 break;
0639 ret = 0;
0640 if (!time_before(jiffies, expire)) {
0641
0642 printk(KERN_DEBUG "DMA write timed out\n");
0643 break;
0644 }
0645
0646 if (!(inb(ECONTROL(port)) & (1<<2))) {
0647 cond_resched();
0648
0649 goto false_alarm;
0650 }
0651
0652 dmaflag = claim_dma_lock();
0653 disable_dma(port->dma);
0654 clear_dma_ff(port->dma);
0655 count = get_dma_residue(port->dma);
0656 release_dma_lock(dmaflag);
0657
0658 cond_resched();
0659
0660
0661 if (port->waithead) {
0662 printk(KERN_DEBUG "Somebody wants the port\n");
0663 break;
0664 }
0665
0666
0667 buf -= count;
0668 left += count;
0669 if (dma_handle)
0670 dma_addr -= count;
0671 }
0672
0673
0674 dmaflag = claim_dma_lock();
0675 disable_dma(port->dma);
0676 clear_dma_ff(port->dma);
0677 left += get_dma_residue(port->dma);
0678 release_dma_lock(dmaflag);
0679
0680
0681 frob_econtrol(port, 1<<3, 0);
0682
0683 if (dma_handle)
0684 dma_unmap_single(dev, dma_handle, length, DMA_TO_DEVICE);
0685
0686 dump_parport_state("leave fifo_write_block_dma", port);
0687 return length - left;
0688 }
0689 #endif
0690
0691 static inline size_t parport_pc_fifo_write_block(struct parport *port,
0692 const void *buf, size_t length)
0693 {
0694 #ifdef HAS_DMA
0695 if (port->dma != PARPORT_DMA_NONE)
0696 return parport_pc_fifo_write_block_dma(port, buf, length);
0697 #endif
0698 return parport_pc_fifo_write_block_pio(port, buf, length);
0699 }
0700
0701
0702 static size_t parport_pc_compat_write_block_pio(struct parport *port,
0703 const void *buf, size_t length,
0704 int flags)
0705 {
0706 size_t written;
0707 int r;
0708 unsigned long expire;
0709 const struct parport_pc_private *priv = port->physport->private_data;
0710
0711
0712
0713 if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK)
0714 return parport_ieee1284_write_compat(port, buf,
0715 length, flags);
0716
0717
0718 parport_pc_data_forward(port);
0719 parport_pc_frob_control(port, PARPORT_CONTROL_STROBE, 0);
0720 r = change_mode(port, ECR_PPF);
0721 if (r)
0722 printk(KERN_DEBUG "%s: Warning change_mode ECR_PPF failed\n",
0723 port->name);
0724
0725 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
0726
0727
0728 written = parport_pc_fifo_write_block(port, buf, length);
0729
0730
0731
0732
0733
0734
0735 expire = jiffies + (priv->fifo_depth * HZ * 4);
0736 do {
0737
0738 r = change_mode(port, ECR_PS2);
0739 if (r != -EBUSY)
0740 break;
0741 } while (time_before(jiffies, expire));
0742 if (r == -EBUSY) {
0743
0744 printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name);
0745
0746
0747 frob_set_mode(port, ECR_TST);
0748
0749
0750 for (written -= priv->fifo_depth; ; written++) {
0751 if (inb(ECONTROL(port)) & 0x2) {
0752
0753 break;
0754 }
0755 outb(0, FIFO(port));
0756 }
0757
0758
0759 frob_set_mode(port, ECR_PS2);
0760 }
0761
0762 r = parport_wait_peripheral(port,
0763 PARPORT_STATUS_BUSY,
0764 PARPORT_STATUS_BUSY);
0765 if (r)
0766 printk(KERN_DEBUG "%s: BUSY timeout (%d) in compat_write_block_pio\n",
0767 port->name, r);
0768
0769 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
0770
0771 return written;
0772 }
0773
0774
0775 #ifdef CONFIG_PARPORT_1284
0776 static size_t parport_pc_ecp_write_block_pio(struct parport *port,
0777 const void *buf, size_t length,
0778 int flags)
0779 {
0780 size_t written;
0781 int r;
0782 unsigned long expire;
0783 const struct parport_pc_private *priv = port->physport->private_data;
0784
0785
0786
0787 if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK)
0788 return parport_ieee1284_ecp_write_data(port, buf,
0789 length, flags);
0790
0791
0792 if (port->physport->ieee1284.phase != IEEE1284_PH_FWD_IDLE) {
0793
0794 parport_frob_control(port,
0795 PARPORT_CONTROL_INIT
0796 | PARPORT_CONTROL_AUTOFD,
0797 PARPORT_CONTROL_INIT
0798 | PARPORT_CONTROL_AUTOFD);
0799
0800
0801 r = parport_wait_peripheral(port,
0802 PARPORT_STATUS_PAPEROUT,
0803 PARPORT_STATUS_PAPEROUT);
0804 if (r) {
0805 printk(KERN_DEBUG "%s: PError timeout (%d) in ecp_write_block_pio\n",
0806 port->name, r);
0807 }
0808 }
0809
0810
0811 parport_pc_data_forward(port);
0812 parport_pc_frob_control(port,
0813 PARPORT_CONTROL_STROBE |
0814 PARPORT_CONTROL_AUTOFD,
0815 0);
0816 r = change_mode(port, ECR_ECP);
0817 if (r)
0818 printk(KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n",
0819 port->name);
0820 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
0821
0822
0823 written = parport_pc_fifo_write_block(port, buf, length);
0824
0825
0826
0827
0828
0829
0830 expire = jiffies + (priv->fifo_depth * (HZ * 4));
0831 do {
0832
0833 r = change_mode(port, ECR_PS2);
0834 if (r != -EBUSY)
0835 break;
0836 } while (time_before(jiffies, expire));
0837 if (r == -EBUSY) {
0838
0839 printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name);
0840
0841
0842 frob_set_mode(port, ECR_TST);
0843
0844
0845 for (written -= priv->fifo_depth; ; written++) {
0846 if (inb(ECONTROL(port)) & 0x2) {
0847
0848 break;
0849 }
0850 outb(0, FIFO(port));
0851 }
0852
0853
0854 frob_set_mode(port, ECR_PS2);
0855
0856
0857 parport_pc_data_reverse(port);
0858 udelay(5);
0859 parport_frob_control(port, PARPORT_CONTROL_INIT, 0);
0860 r = parport_wait_peripheral(port, PARPORT_STATUS_PAPEROUT, 0);
0861 if (r)
0862 printk(KERN_DEBUG "%s: PE,1 timeout (%d) in ecp_write_block_pio\n",
0863 port->name, r);
0864
0865 parport_frob_control(port,
0866 PARPORT_CONTROL_INIT,
0867 PARPORT_CONTROL_INIT);
0868 r = parport_wait_peripheral(port,
0869 PARPORT_STATUS_PAPEROUT,
0870 PARPORT_STATUS_PAPEROUT);
0871 if (r)
0872 printk(KERN_DEBUG "%s: PE,2 timeout (%d) in ecp_write_block_pio\n",
0873 port->name, r);
0874 }
0875
0876 r = parport_wait_peripheral(port,
0877 PARPORT_STATUS_BUSY,
0878 PARPORT_STATUS_BUSY);
0879 if (r)
0880 printk(KERN_DEBUG "%s: BUSY timeout (%d) in ecp_write_block_pio\n",
0881 port->name, r);
0882
0883 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
0884
0885 return written;
0886 }
0887 #endif
0888 #endif
0889
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899 static const struct parport_operations parport_pc_ops = {
0900 .write_data = parport_pc_write_data,
0901 .read_data = parport_pc_read_data,
0902
0903 .write_control = parport_pc_write_control,
0904 .read_control = parport_pc_read_control,
0905 .frob_control = parport_pc_frob_control,
0906
0907 .read_status = parport_pc_read_status,
0908
0909 .enable_irq = parport_pc_enable_irq,
0910 .disable_irq = parport_pc_disable_irq,
0911
0912 .data_forward = parport_pc_data_forward,
0913 .data_reverse = parport_pc_data_reverse,
0914
0915 .init_state = parport_pc_init_state,
0916 .save_state = parport_pc_save_state,
0917 .restore_state = parport_pc_restore_state,
0918
0919 .epp_write_data = parport_ieee1284_epp_write_data,
0920 .epp_read_data = parport_ieee1284_epp_read_data,
0921 .epp_write_addr = parport_ieee1284_epp_write_addr,
0922 .epp_read_addr = parport_ieee1284_epp_read_addr,
0923
0924 .ecp_write_data = parport_ieee1284_ecp_write_data,
0925 .ecp_read_data = parport_ieee1284_ecp_read_data,
0926 .ecp_write_addr = parport_ieee1284_ecp_write_addr,
0927
0928 .compat_write_data = parport_ieee1284_write_compat,
0929 .nibble_read_data = parport_ieee1284_read_nibble,
0930 .byte_read_data = parport_ieee1284_read_byte,
0931
0932 .owner = THIS_MODULE,
0933 };
0934
0935 #ifdef CONFIG_PARPORT_PC_SUPERIO
0936
0937 static struct superio_struct *find_free_superio(void)
0938 {
0939 int i;
0940 for (i = 0; i < NR_SUPERIOS; i++)
0941 if (superios[i].io == 0)
0942 return &superios[i];
0943 return NULL;
0944 }
0945
0946
0947
0948 static void show_parconfig_smsc37c669(int io, int key)
0949 {
0950 int cr1, cr4, cra, cr23, cr26, cr27;
0951 struct superio_struct *s;
0952
0953 static const char *const modes[] = {
0954 "SPP and Bidirectional (PS/2)",
0955 "EPP and SPP",
0956 "ECP",
0957 "ECP and EPP" };
0958
0959 outb(key, io);
0960 outb(key, io);
0961 outb(1, io);
0962 cr1 = inb(io + 1);
0963 outb(4, io);
0964 cr4 = inb(io + 1);
0965 outb(0x0a, io);
0966 cra = inb(io + 1);
0967 outb(0x23, io);
0968 cr23 = inb(io + 1);
0969 outb(0x26, io);
0970 cr26 = inb(io + 1);
0971 outb(0x27, io);
0972 cr27 = inb(io + 1);
0973 outb(0xaa, io);
0974
0975 if (verbose_probing) {
0976 pr_info("SMSC 37c669 LPT Config: cr_1=0x%02x, 4=0x%02x, A=0x%2x, 23=0x%02x, 26=0x%02x, 27=0x%02x\n",
0977 cr1, cr4, cra, cr23, cr26, cr27);
0978
0979
0980
0981
0982 pr_info("SMSC LPT Config: io=0x%04x, irq=%c, dma=%c, fifo threshold=%d\n",
0983 cr23 * 4,
0984 (cr27 & 0x0f) ? 'A' - 1 + (cr27 & 0x0f) : '-',
0985 (cr26 & 0x0f) ? 'A' - 1 + (cr26 & 0x0f) : '-',
0986 cra & 0x0f);
0987 pr_info("SMSC LPT Config: enabled=%s power=%s\n",
0988 (cr23 * 4 >= 0x100) ? "yes" : "no",
0989 (cr1 & 4) ? "yes" : "no");
0990 pr_info("SMSC LPT Config: Port mode=%s, EPP version =%s\n",
0991 (cr1 & 0x08) ? "Standard mode only (SPP)"
0992 : modes[cr4 & 0x03],
0993 (cr4 & 0x40) ? "1.7" : "1.9");
0994 }
0995
0996
0997
0998
0999
1000 if (cr23 * 4 >= 0x100) {
1001 s = find_free_superio();
1002 if (s == NULL)
1003 pr_info("Super-IO: too many chips!\n");
1004 else {
1005 int d;
1006 switch (cr23 * 4) {
1007 case 0x3bc:
1008 s->io = 0x3bc;
1009 s->irq = 7;
1010 break;
1011 case 0x378:
1012 s->io = 0x378;
1013 s->irq = 7;
1014 break;
1015 case 0x278:
1016 s->io = 0x278;
1017 s->irq = 5;
1018 }
1019 d = (cr26 & 0x0f);
1020 if (d == 1 || d == 3)
1021 s->dma = d;
1022 else
1023 s->dma = PARPORT_DMA_NONE;
1024 }
1025 }
1026 }
1027
1028
1029 static void show_parconfig_winbond(int io, int key)
1030 {
1031 int cr30, cr60, cr61, cr70, cr74, crf0;
1032 struct superio_struct *s;
1033 static const char *const modes[] = {
1034 "Standard (SPP) and Bidirectional(PS/2)",
1035 "EPP-1.9 and SPP",
1036 "ECP",
1037 "ECP and EPP-1.9",
1038 "Standard (SPP)",
1039 "EPP-1.7 and SPP",
1040 "undefined!",
1041 "ECP and EPP-1.7" };
1042 static char *const irqtypes[] = {
1043 "pulsed low, high-Z",
1044 "follows nACK" };
1045
1046
1047
1048
1049 outb(key, io);
1050 outb(key, io);
1051 outb(0x07, io);
1052 outb(0x01, io + 1);
1053 outb(0x30, io);
1054 cr30 = inb(io + 1);
1055 outb(0x60, io);
1056 cr60 = inb(io + 1);
1057 outb(0x61, io);
1058 cr61 = inb(io + 1);
1059 outb(0x70, io);
1060 cr70 = inb(io + 1);
1061 outb(0x74, io);
1062 cr74 = inb(io + 1);
1063 outb(0xf0, io);
1064 crf0 = inb(io + 1);
1065 outb(0xaa, io);
1066
1067 if (verbose_probing) {
1068 pr_info("Winbond LPT Config: cr_30=%02x 60,61=%02x%02x 70=%02x 74=%02x, f0=%02x\n",
1069 cr30, cr60, cr61, cr70, cr74, crf0);
1070 pr_info("Winbond LPT Config: active=%s, io=0x%02x%02x irq=%d, ",
1071 (cr30 & 0x01) ? "yes" : "no", cr60, cr61, cr70 & 0x0f);
1072 if ((cr74 & 0x07) > 3)
1073 pr_cont("dma=none\n");
1074 else
1075 pr_cont("dma=%d\n", cr74 & 0x07);
1076 pr_info("Winbond LPT Config: irqtype=%s, ECP fifo threshold=%d\n",
1077 irqtypes[crf0 >> 7], (crf0 >> 3) & 0x0f);
1078 pr_info("Winbond LPT Config: Port mode=%s\n",
1079 modes[crf0 & 0x07]);
1080 }
1081
1082 if (cr30 & 0x01) {
1083 s = find_free_superio();
1084 if (s == NULL)
1085 pr_info("Super-IO: too many chips!\n");
1086 else {
1087 s->io = (cr60 << 8) | cr61;
1088 s->irq = cr70 & 0x0f;
1089 s->dma = (((cr74 & 0x07) > 3) ?
1090 PARPORT_DMA_NONE : (cr74 & 0x07));
1091 }
1092 }
1093 }
1094
1095 static void decode_winbond(int efer, int key, int devid, int devrev, int oldid)
1096 {
1097 const char *type = "unknown";
1098 int id, progif = 2;
1099
1100 if (devid == devrev)
1101
1102
1103 return;
1104
1105 id = (devid << 8) | devrev;
1106
1107
1108
1109 if (id == 0x9771)
1110 type = "83977F/AF";
1111 else if (id == 0x9773)
1112 type = "83977TF / SMSC 97w33x/97w34x";
1113 else if (id == 0x9774)
1114 type = "83977ATF";
1115 else if ((id & ~0x0f) == 0x5270)
1116 type = "83977CTF / SMSC 97w36x";
1117 else if ((id & ~0x0f) == 0x52f0)
1118 type = "83977EF / SMSC 97w35x";
1119 else if ((id & ~0x0f) == 0x5210)
1120 type = "83627";
1121 else if ((id & ~0x0f) == 0x6010)
1122 type = "83697HF";
1123 else if ((oldid & 0x0f) == 0x0a) {
1124 type = "83877F";
1125 progif = 1;
1126 } else if ((oldid & 0x0f) == 0x0b) {
1127 type = "83877AF";
1128 progif = 1;
1129 } else if ((oldid & 0x0f) == 0x0c) {
1130 type = "83877TF";
1131 progif = 1;
1132 } else if ((oldid & 0x0f) == 0x0d) {
1133 type = "83877ATF";
1134 progif = 1;
1135 } else
1136 progif = 0;
1137
1138 if (verbose_probing)
1139 pr_info("Winbond chip at EFER=0x%x key=0x%02x devid=%02x devrev=%02x oldid=%02x type=%s\n",
1140 efer, key, devid, devrev, oldid, type);
1141
1142 if (progif == 2)
1143 show_parconfig_winbond(efer, key);
1144 }
1145
1146 static void decode_smsc(int efer, int key, int devid, int devrev)
1147 {
1148 const char *type = "unknown";
1149 void (*func)(int io, int key);
1150 int id;
1151
1152 if (devid == devrev)
1153
1154
1155 return;
1156
1157 func = NULL;
1158 id = (devid << 8) | devrev;
1159
1160 if (id == 0x0302) {
1161 type = "37c669";
1162 func = show_parconfig_smsc37c669;
1163 } else if (id == 0x6582)
1164 type = "37c665IR";
1165 else if (devid == 0x65)
1166 type = "37c665GT";
1167 else if (devid == 0x66)
1168 type = "37c666GT";
1169
1170 if (verbose_probing)
1171 pr_info("SMSC chip at EFER=0x%x key=0x%02x devid=%02x devrev=%02x type=%s\n",
1172 efer, key, devid, devrev, type);
1173
1174 if (func)
1175 func(efer, key);
1176 }
1177
1178
1179 static void winbond_check(int io, int key)
1180 {
1181 int origval, devid, devrev, oldid, x_devid, x_devrev, x_oldid;
1182
1183 if (!request_region(io, 3, __func__))
1184 return;
1185
1186 origval = inb(io);
1187
1188
1189 outb(0x20, io);
1190 x_devid = inb(io + 1);
1191 outb(0x21, io);
1192 x_devrev = inb(io + 1);
1193 outb(0x09, io);
1194 x_oldid = inb(io + 1);
1195
1196 outb(key, io);
1197 outb(key, io);
1198
1199 outb(0x20, io);
1200 devid = inb(io + 1);
1201 outb(0x21, io);
1202 devrev = inb(io + 1);
1203 outb(0x09, io);
1204 oldid = inb(io + 1);
1205 outb(0xaa, io);
1206
1207 outb(origval, io);
1208
1209 if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
1210 goto out;
1211
1212 decode_winbond(io, key, devid, devrev, oldid);
1213 out:
1214 release_region(io, 3);
1215 }
1216
1217 static void winbond_check2(int io, int key)
1218 {
1219 int origval[3], devid, devrev, oldid, x_devid, x_devrev, x_oldid;
1220
1221 if (!request_region(io, 3, __func__))
1222 return;
1223
1224 origval[0] = inb(io);
1225 origval[1] = inb(io + 1);
1226 origval[2] = inb(io + 2);
1227
1228
1229 outb(0x20, io + 2);
1230 x_devid = inb(io + 2);
1231 outb(0x21, io + 1);
1232 x_devrev = inb(io + 2);
1233 outb(0x09, io + 1);
1234 x_oldid = inb(io + 2);
1235
1236 outb(key, io);
1237
1238 outb(0x20, io + 2);
1239 devid = inb(io + 2);
1240 outb(0x21, io + 1);
1241 devrev = inb(io + 2);
1242 outb(0x09, io + 1);
1243 oldid = inb(io + 2);
1244 outb(0xaa, io);
1245
1246 outb(origval[0], io);
1247 outb(origval[1], io + 1);
1248 outb(origval[2], io + 2);
1249
1250 if (x_devid == devid && x_devrev == devrev && x_oldid == oldid)
1251 goto out;
1252
1253 decode_winbond(io, key, devid, devrev, oldid);
1254 out:
1255 release_region(io, 3);
1256 }
1257
1258 static void smsc_check(int io, int key)
1259 {
1260 int origval, id, rev, oldid, oldrev, x_id, x_rev, x_oldid, x_oldrev;
1261
1262 if (!request_region(io, 3, __func__))
1263 return;
1264
1265 origval = inb(io);
1266
1267
1268 outb(0x0d, io);
1269 x_oldid = inb(io + 1);
1270 outb(0x0e, io);
1271 x_oldrev = inb(io + 1);
1272 outb(0x20, io);
1273 x_id = inb(io + 1);
1274 outb(0x21, io);
1275 x_rev = inb(io + 1);
1276
1277 outb(key, io);
1278 outb(key, io);
1279
1280 outb(0x0d, io);
1281 oldid = inb(io + 1);
1282 outb(0x0e, io);
1283 oldrev = inb(io + 1);
1284 outb(0x20, io);
1285 id = inb(io + 1);
1286 outb(0x21, io);
1287 rev = inb(io + 1);
1288 outb(0xaa, io);
1289
1290 outb(origval, io);
1291
1292 if (x_id == id && x_oldrev == oldrev &&
1293 x_oldid == oldid && x_rev == rev)
1294 goto out;
1295
1296 decode_smsc(io, key, oldid, oldrev);
1297 out:
1298 release_region(io, 3);
1299 }
1300
1301
1302 static void detect_and_report_winbond(void)
1303 {
1304 if (verbose_probing)
1305 printk(KERN_DEBUG "Winbond Super-IO detection, now testing ports 3F0,370,250,4E,2E ...\n");
1306 winbond_check(0x3f0, 0x87);
1307 winbond_check(0x370, 0x87);
1308 winbond_check(0x2e , 0x87);
1309 winbond_check(0x4e , 0x87);
1310 winbond_check(0x3f0, 0x86);
1311 winbond_check2(0x250, 0x88);
1312 winbond_check2(0x250, 0x89);
1313 }
1314
1315 static void detect_and_report_smsc(void)
1316 {
1317 if (verbose_probing)
1318 printk(KERN_DEBUG "SMSC Super-IO detection, now testing Ports 2F0, 370 ...\n");
1319 smsc_check(0x3f0, 0x55);
1320 smsc_check(0x370, 0x55);
1321 smsc_check(0x3f0, 0x44);
1322 smsc_check(0x370, 0x44);
1323 }
1324
1325 static void detect_and_report_it87(void)
1326 {
1327 u16 dev;
1328 u8 origval, r;
1329 if (verbose_probing)
1330 printk(KERN_DEBUG "IT8705 Super-IO detection, now testing port 2E ...\n");
1331 if (!request_muxed_region(0x2e, 2, __func__))
1332 return;
1333 origval = inb(0x2e);
1334 outb(0x87, 0x2e);
1335 outb(0x01, 0x2e);
1336 outb(0x55, 0x2e);
1337 outb(0x55, 0x2e);
1338 outb(0x20, 0x2e);
1339 dev = inb(0x2f) << 8;
1340 outb(0x21, 0x2e);
1341 dev |= inb(0x2f);
1342 if (dev == 0x8712 || dev == 0x8705 || dev == 0x8715 ||
1343 dev == 0x8716 || dev == 0x8718 || dev == 0x8726) {
1344 pr_info("IT%04X SuperIO detected\n", dev);
1345 outb(0x07, 0x2E);
1346 outb(0x03, 0x2F);
1347 outb(0xF0, 0x2E);
1348 r = inb(0x2f);
1349 outb(0xF0, 0x2E);
1350 outb(r | 8, 0x2F);
1351 outb(0x02, 0x2E);
1352 outb(0x02, 0x2F);
1353 } else {
1354 outb(origval, 0x2e);
1355 }
1356 release_region(0x2e, 2);
1357 }
1358 #endif
1359
1360 static struct superio_struct *find_superio(struct parport *p)
1361 {
1362 int i;
1363 for (i = 0; i < NR_SUPERIOS; i++)
1364 if (superios[i].io == p->base)
1365 return &superios[i];
1366 return NULL;
1367 }
1368
1369 static int get_superio_dma(struct parport *p)
1370 {
1371 struct superio_struct *s = find_superio(p);
1372 if (s)
1373 return s->dma;
1374 return PARPORT_DMA_NONE;
1375 }
1376
1377 static int get_superio_irq(struct parport *p)
1378 {
1379 struct superio_struct *s = find_superio(p);
1380 if (s)
1381 return s->irq;
1382 return PARPORT_IRQ_NONE;
1383 }
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397 static int parport_SPP_supported(struct parport *pb)
1398 {
1399 unsigned char r, w;
1400
1401
1402
1403
1404
1405
1406
1407 clear_epp_timeout(pb);
1408
1409
1410 w = 0xc;
1411 outb(w, CONTROL(pb));
1412
1413
1414
1415
1416
1417
1418 r = inb(CONTROL(pb));
1419 if ((r & 0xf) == w) {
1420 w = 0xe;
1421 outb(w, CONTROL(pb));
1422 r = inb(CONTROL(pb));
1423 outb(0xc, CONTROL(pb));
1424 if ((r & 0xf) == w)
1425 return PARPORT_MODE_PCSPP;
1426 }
1427
1428 if (user_specified)
1429
1430
1431 pr_info("parport 0x%lx (WARNING): CTR: wrote 0x%02x, read 0x%02x\n",
1432 pb->base, w, r);
1433
1434
1435
1436 w = 0xaa;
1437 parport_pc_write_data(pb, w);
1438 r = parport_pc_read_data(pb);
1439 if (r == w) {
1440 w = 0x55;
1441 parport_pc_write_data(pb, w);
1442 r = parport_pc_read_data(pb);
1443 if (r == w)
1444 return PARPORT_MODE_PCSPP;
1445 }
1446
1447 if (user_specified) {
1448
1449
1450 pr_info("parport 0x%lx (WARNING): DATA: wrote 0x%02x, read 0x%02x\n",
1451 pb->base, w, r);
1452 pr_info("parport 0x%lx: You gave this address, but there is probably no parallel port there!\n",
1453 pb->base);
1454 }
1455
1456
1457
1458 if (user_specified)
1459 return PARPORT_MODE_PCSPP;
1460
1461 return 0;
1462 }
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477 static int parport_ECR_present(struct parport *pb)
1478 {
1479 struct parport_pc_private *priv = pb->private_data;
1480 unsigned char r = 0xc;
1481
1482 outb(r, CONTROL(pb));
1483 if ((inb(ECONTROL(pb)) & 0x3) == (r & 0x3)) {
1484 outb(r ^ 0x2, CONTROL(pb));
1485
1486 r = inb(CONTROL(pb));
1487 if ((inb(ECONTROL(pb)) & 0x2) == (r & 0x2))
1488 goto no_reg;
1489 }
1490
1491 if ((inb(ECONTROL(pb)) & 0x3) != 0x1)
1492 goto no_reg;
1493
1494 ECR_WRITE(pb, 0x34);
1495 if (inb(ECONTROL(pb)) != 0x35)
1496 goto no_reg;
1497
1498 priv->ecr = 1;
1499 outb(0xc, CONTROL(pb));
1500
1501
1502 frob_set_mode(pb, ECR_SPP);
1503
1504 return 1;
1505
1506 no_reg:
1507 outb(0xc, CONTROL(pb));
1508 return 0;
1509 }
1510
1511 #ifdef CONFIG_PARPORT_1284
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529 static int parport_PS2_supported(struct parport *pb)
1530 {
1531 int ok = 0;
1532
1533 clear_epp_timeout(pb);
1534
1535
1536 parport_pc_data_reverse(pb);
1537
1538 parport_pc_write_data(pb, 0x55);
1539 if (parport_pc_read_data(pb) != 0x55)
1540 ok++;
1541
1542 parport_pc_write_data(pb, 0xaa);
1543 if (parport_pc_read_data(pb) != 0xaa)
1544 ok++;
1545
1546
1547 parport_pc_data_forward(pb);
1548
1549 if (ok) {
1550 pb->modes |= PARPORT_MODE_TRISTATE;
1551 } else {
1552 struct parport_pc_private *priv = pb->private_data;
1553 priv->ctr_writable &= ~0x20;
1554 }
1555
1556 return ok;
1557 }
1558
1559 #ifdef CONFIG_PARPORT_PC_FIFO
1560 static int parport_ECP_supported(struct parport *pb)
1561 {
1562 int i;
1563 int config, configb;
1564 int pword;
1565 struct parport_pc_private *priv = pb->private_data;
1566
1567 static const int intrline[] = { 0, 7, 9, 10, 11, 14, 15, 5 };
1568
1569
1570 if (!priv->ecr)
1571 return 0;
1572
1573
1574 ECR_WRITE(pb, ECR_SPP << 5);
1575 ECR_WRITE(pb, ECR_TST << 5);
1576 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02); i++)
1577 outb(0xaa, FIFO(pb));
1578
1579
1580
1581
1582
1583 if (i == 1024) {
1584 ECR_WRITE(pb, ECR_SPP << 5);
1585 return 0;
1586 }
1587
1588 priv->fifo_depth = i;
1589 if (verbose_probing)
1590 printk(KERN_DEBUG "0x%lx: FIFO is %d bytes\n", pb->base, i);
1591
1592
1593 frob_econtrol(pb, 1<<2, 1<<2);
1594 frob_econtrol(pb, 1<<2, 0);
1595 for (i = 1; i <= priv->fifo_depth; i++) {
1596 inb(FIFO(pb));
1597 udelay(50);
1598 if (inb(ECONTROL(pb)) & (1<<2))
1599 break;
1600 }
1601
1602 if (i <= priv->fifo_depth) {
1603 if (verbose_probing)
1604 printk(KERN_DEBUG "0x%lx: writeIntrThreshold is %d\n",
1605 pb->base, i);
1606 } else
1607
1608
1609 i = 0;
1610
1611 priv->writeIntrThreshold = i;
1612
1613
1614 frob_set_mode(pb, ECR_PS2);
1615 parport_pc_data_reverse(pb);
1616 frob_set_mode(pb, ECR_TST);
1617 frob_econtrol(pb, 1<<2, 1<<2);
1618 frob_econtrol(pb, 1<<2, 0);
1619 for (i = 1; i <= priv->fifo_depth; i++) {
1620 outb(0xaa, FIFO(pb));
1621 if (inb(ECONTROL(pb)) & (1<<2))
1622 break;
1623 }
1624
1625 if (i <= priv->fifo_depth) {
1626 if (verbose_probing)
1627 pr_info("0x%lx: readIntrThreshold is %d\n",
1628 pb->base, i);
1629 } else
1630
1631 i = 0;
1632
1633 priv->readIntrThreshold = i;
1634
1635 ECR_WRITE(pb, ECR_SPP << 5);
1636 ECR_WRITE(pb, 0xf4);
1637 config = inb(CONFIGA(pb));
1638 pword = (config >> 4) & 0x7;
1639 switch (pword) {
1640 case 0:
1641 pword = 2;
1642 pr_warn("0x%lx: Unsupported pword size!\n", pb->base);
1643 break;
1644 case 2:
1645 pword = 4;
1646 pr_warn("0x%lx: Unsupported pword size!\n", pb->base);
1647 break;
1648 default:
1649 pr_warn("0x%lx: Unknown implementation ID\n", pb->base);
1650 fallthrough;
1651 case 1:
1652 pword = 1;
1653 }
1654 priv->pword = pword;
1655
1656 if (verbose_probing) {
1657 printk(KERN_DEBUG "0x%lx: PWord is %d bits\n",
1658 pb->base, 8 * pword);
1659
1660 printk(KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n",
1661 pb->base, config & 0x80 ? "Level" : "Pulses");
1662
1663 configb = inb(CONFIGB(pb));
1664 printk(KERN_DEBUG "0x%lx: ECP port cfgA=0x%02x cfgB=0x%02x\n",
1665 pb->base, config, configb);
1666 printk(KERN_DEBUG "0x%lx: ECP settings irq=", pb->base);
1667 if ((configb >> 3) & 0x07)
1668 pr_cont("%d", intrline[(configb >> 3) & 0x07]);
1669 else
1670 pr_cont("<none or set by other means>");
1671 pr_cont(" dma=");
1672 if ((configb & 0x03) == 0x00)
1673 pr_cont("<none or set by other means>\n");
1674 else
1675 pr_cont("%d\n", configb & 0x07);
1676 }
1677
1678
1679 frob_set_mode(pb, ECR_SPP);
1680
1681 return 1;
1682 }
1683 #endif
1684
1685 #ifdef CONFIG_X86_32
1686 static int intel_bug_present_check_epp(struct parport *pb)
1687 {
1688 const struct parport_pc_private *priv = pb->private_data;
1689 int bug_present = 0;
1690
1691 if (priv->ecr) {
1692
1693 unsigned char ecr = inb(ECONTROL(pb));
1694 unsigned char i;
1695 for (i = 0x00; i < 0x80; i += 0x20) {
1696 ECR_WRITE(pb, i);
1697 if (clear_epp_timeout(pb)) {
1698
1699 bug_present = 1;
1700 break;
1701 }
1702 }
1703
1704 ECR_WRITE(pb, ecr);
1705 }
1706
1707 return bug_present;
1708 }
1709 static int intel_bug_present(struct parport *pb)
1710 {
1711
1712 if (pb->dev != NULL) {
1713 return 0;
1714 }
1715
1716 return intel_bug_present_check_epp(pb);
1717 }
1718 #else
1719 static int intel_bug_present(struct parport *pb)
1720 {
1721 return 0;
1722 }
1723 #endif
1724
1725 static int parport_ECPPS2_supported(struct parport *pb)
1726 {
1727 const struct parport_pc_private *priv = pb->private_data;
1728 int result;
1729 unsigned char oecr;
1730
1731 if (!priv->ecr)
1732 return 0;
1733
1734 oecr = inb(ECONTROL(pb));
1735 ECR_WRITE(pb, ECR_PS2 << 5);
1736 result = parport_PS2_supported(pb);
1737 ECR_WRITE(pb, oecr);
1738 return result;
1739 }
1740
1741
1742
1743 static int parport_EPP_supported(struct parport *pb)
1744 {
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759 if (!clear_epp_timeout(pb))
1760 return 0;
1761
1762
1763 if (intel_bug_present(pb))
1764 return 0;
1765
1766 pb->modes |= PARPORT_MODE_EPP;
1767
1768
1769 pb->ops->epp_read_data = parport_pc_epp_read_data;
1770 pb->ops->epp_write_data = parport_pc_epp_write_data;
1771 pb->ops->epp_read_addr = parport_pc_epp_read_addr;
1772 pb->ops->epp_write_addr = parport_pc_epp_write_addr;
1773
1774 return 1;
1775 }
1776
1777 static int parport_ECPEPP_supported(struct parport *pb)
1778 {
1779 struct parport_pc_private *priv = pb->private_data;
1780 int result;
1781 unsigned char oecr;
1782
1783 if (!priv->ecr)
1784 return 0;
1785
1786 oecr = inb(ECONTROL(pb));
1787
1788 ECR_WRITE(pb, 0x80);
1789 outb(0x04, CONTROL(pb));
1790 result = parport_EPP_supported(pb);
1791
1792 ECR_WRITE(pb, oecr);
1793
1794 if (result) {
1795
1796 pb->ops->epp_read_data = parport_pc_ecpepp_read_data;
1797 pb->ops->epp_write_data = parport_pc_ecpepp_write_data;
1798 pb->ops->epp_read_addr = parport_pc_ecpepp_read_addr;
1799 pb->ops->epp_write_addr = parport_pc_ecpepp_write_addr;
1800 }
1801
1802 return result;
1803 }
1804
1805 #else
1806
1807
1808 static int parport_PS2_supported(struct parport *pb) { return 0; }
1809 #ifdef CONFIG_PARPORT_PC_FIFO
1810 static int parport_ECP_supported(struct parport *pb)
1811 {
1812 return 0;
1813 }
1814 #endif
1815 static int parport_EPP_supported(struct parport *pb)
1816 {
1817 return 0;
1818 }
1819
1820 static int parport_ECPEPP_supported(struct parport *pb)
1821 {
1822 return 0;
1823 }
1824
1825 static int parport_ECPPS2_supported(struct parport *pb)
1826 {
1827 return 0;
1828 }
1829
1830 #endif
1831
1832
1833
1834
1835 static int programmable_irq_support(struct parport *pb)
1836 {
1837 int irq, intrLine;
1838 unsigned char oecr = inb(ECONTROL(pb));
1839 static const int lookup[8] = {
1840 PARPORT_IRQ_NONE, 7, 9, 10, 11, 14, 15, 5
1841 };
1842
1843 ECR_WRITE(pb, ECR_CNF << 5);
1844
1845 intrLine = (inb(CONFIGB(pb)) >> 3) & 0x07;
1846 irq = lookup[intrLine];
1847
1848 ECR_WRITE(pb, oecr);
1849 return irq;
1850 }
1851
1852 static int irq_probe_ECP(struct parport *pb)
1853 {
1854 int i;
1855 unsigned long irqs;
1856
1857 irqs = probe_irq_on();
1858
1859 ECR_WRITE(pb, ECR_SPP << 5);
1860 ECR_WRITE(pb, (ECR_TST << 5) | 0x04);
1861 ECR_WRITE(pb, ECR_TST << 5);
1862
1863
1864 for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02) ; i++)
1865 outb(0xaa, FIFO(pb));
1866
1867 pb->irq = probe_irq_off(irqs);
1868 ECR_WRITE(pb, ECR_SPP << 5);
1869
1870 if (pb->irq <= 0)
1871 pb->irq = PARPORT_IRQ_NONE;
1872
1873 return pb->irq;
1874 }
1875
1876
1877
1878
1879
1880 static int irq_probe_EPP(struct parport *pb)
1881 {
1882 #ifndef ADVANCED_DETECT
1883 return PARPORT_IRQ_NONE;
1884 #else
1885 int irqs;
1886 unsigned char oecr;
1887
1888 if (pb->modes & PARPORT_MODE_PCECR)
1889 oecr = inb(ECONTROL(pb));
1890
1891 irqs = probe_irq_on();
1892
1893 if (pb->modes & PARPORT_MODE_PCECR)
1894 frob_econtrol(pb, 0x10, 0x10);
1895
1896 clear_epp_timeout(pb);
1897 parport_pc_frob_control(pb, 0x20, 0x20);
1898 parport_pc_frob_control(pb, 0x10, 0x10);
1899 clear_epp_timeout(pb);
1900
1901
1902
1903
1904 parport_pc_read_epp(pb);
1905 udelay(20);
1906
1907 pb->irq = probe_irq_off(irqs);
1908 if (pb->modes & PARPORT_MODE_PCECR)
1909 ECR_WRITE(pb, oecr);
1910 parport_pc_write_control(pb, 0xc);
1911
1912 if (pb->irq <= 0)
1913 pb->irq = PARPORT_IRQ_NONE;
1914
1915 return pb->irq;
1916 #endif
1917 }
1918
1919 static int irq_probe_SPP(struct parport *pb)
1920 {
1921
1922 return PARPORT_IRQ_NONE;
1923 }
1924
1925
1926
1927
1928
1929
1930
1931
1932 static int parport_irq_probe(struct parport *pb)
1933 {
1934 struct parport_pc_private *priv = pb->private_data;
1935
1936 if (priv->ecr) {
1937 pb->irq = programmable_irq_support(pb);
1938
1939 if (pb->irq == PARPORT_IRQ_NONE)
1940 pb->irq = irq_probe_ECP(pb);
1941 }
1942
1943 if ((pb->irq == PARPORT_IRQ_NONE) && priv->ecr &&
1944 (pb->modes & PARPORT_MODE_EPP))
1945 pb->irq = irq_probe_EPP(pb);
1946
1947 clear_epp_timeout(pb);
1948
1949 if (pb->irq == PARPORT_IRQ_NONE && (pb->modes & PARPORT_MODE_EPP))
1950 pb->irq = irq_probe_EPP(pb);
1951
1952 clear_epp_timeout(pb);
1953
1954 if (pb->irq == PARPORT_IRQ_NONE)
1955 pb->irq = irq_probe_SPP(pb);
1956
1957 if (pb->irq == PARPORT_IRQ_NONE)
1958 pb->irq = get_superio_irq(pb);
1959
1960 return pb->irq;
1961 }
1962
1963
1964
1965
1966 static int programmable_dma_support(struct parport *p)
1967 {
1968 unsigned char oecr = inb(ECONTROL(p));
1969 int dma;
1970
1971 frob_set_mode(p, ECR_CNF);
1972
1973 dma = inb(CONFIGB(p)) & 0x07;
1974
1975
1976 if ((dma & 0x03) == 0)
1977 dma = PARPORT_DMA_NONE;
1978
1979 ECR_WRITE(p, oecr);
1980 return dma;
1981 }
1982
1983 static int parport_dma_probe(struct parport *p)
1984 {
1985 const struct parport_pc_private *priv = p->private_data;
1986 if (priv->ecr)
1987 p->dma = programmable_dma_support(p);
1988 if (p->dma == PARPORT_DMA_NONE) {
1989
1990
1991
1992 p->dma = get_superio_dma(p);
1993 }
1994
1995 return p->dma;
1996 }
1997
1998
1999
2000 static LIST_HEAD(ports_list);
2001 static DEFINE_SPINLOCK(ports_lock);
2002
2003 struct parport *parport_pc_probe_port(unsigned long int base,
2004 unsigned long int base_hi,
2005 int irq, int dma,
2006 struct device *dev,
2007 int irqflags)
2008 {
2009 struct parport_pc_private *priv;
2010 struct parport_operations *ops;
2011 struct parport *p;
2012 int probedirq = PARPORT_IRQ_NONE;
2013 struct resource *base_res;
2014 struct resource *ECR_res = NULL;
2015 struct resource *EPP_res = NULL;
2016 struct platform_device *pdev = NULL;
2017 int ret;
2018
2019 if (!dev) {
2020
2021
2022 pdev = platform_device_register_simple("parport_pc",
2023 base, NULL, 0);
2024 if (IS_ERR(pdev))
2025 return NULL;
2026 dev = &pdev->dev;
2027
2028 ret = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(24));
2029 if (ret) {
2030 dev_err(dev, "Unable to set coherent dma mask: disabling DMA\n");
2031 dma = PARPORT_DMA_NONE;
2032 }
2033 }
2034
2035 ops = kmalloc(sizeof(struct parport_operations), GFP_KERNEL);
2036 if (!ops)
2037 goto out1;
2038
2039 priv = kmalloc(sizeof(struct parport_pc_private), GFP_KERNEL);
2040 if (!priv)
2041 goto out2;
2042
2043
2044 p = parport_register_port(base, irq, dma, ops);
2045 if (!p)
2046 goto out3;
2047
2048 base_res = request_region(base, 3, p->name);
2049 if (!base_res)
2050 goto out4;
2051
2052 memcpy(ops, &parport_pc_ops, sizeof(struct parport_operations));
2053 priv->ctr = 0xc;
2054 priv->ctr_writable = ~0x10;
2055 priv->ecr = 0;
2056 priv->fifo_depth = 0;
2057 priv->dma_buf = NULL;
2058 priv->dma_handle = 0;
2059 INIT_LIST_HEAD(&priv->list);
2060 priv->port = p;
2061
2062 p->dev = dev;
2063 p->base_hi = base_hi;
2064 p->modes = PARPORT_MODE_PCSPP | PARPORT_MODE_SAFEININT;
2065 p->private_data = priv;
2066
2067 if (base_hi) {
2068 ECR_res = request_region(base_hi, 3, p->name);
2069 if (ECR_res)
2070 parport_ECR_present(p);
2071 }
2072
2073 if (base != 0x3bc) {
2074 EPP_res = request_region(base+0x3, 5, p->name);
2075 if (EPP_res)
2076 if (!parport_EPP_supported(p))
2077 parport_ECPEPP_supported(p);
2078 }
2079 if (!parport_SPP_supported(p))
2080
2081 goto out5;
2082 if (priv->ecr)
2083 parport_ECPPS2_supported(p);
2084 else
2085 parport_PS2_supported(p);
2086
2087 p->size = (p->modes & PARPORT_MODE_EPP) ? 8 : 3;
2088
2089 pr_info("%s: PC-style at 0x%lx", p->name, p->base);
2090 if (p->base_hi && priv->ecr)
2091 pr_cont(" (0x%lx)", p->base_hi);
2092 if (p->irq == PARPORT_IRQ_AUTO) {
2093 p->irq = PARPORT_IRQ_NONE;
2094 parport_irq_probe(p);
2095 } else if (p->irq == PARPORT_IRQ_PROBEONLY) {
2096 p->irq = PARPORT_IRQ_NONE;
2097 parport_irq_probe(p);
2098 probedirq = p->irq;
2099 p->irq = PARPORT_IRQ_NONE;
2100 }
2101 if (p->irq != PARPORT_IRQ_NONE) {
2102 pr_cont(", irq %d", p->irq);
2103 priv->ctr_writable |= 0x10;
2104
2105 if (p->dma == PARPORT_DMA_AUTO) {
2106 p->dma = PARPORT_DMA_NONE;
2107 parport_dma_probe(p);
2108 }
2109 }
2110 if (p->dma == PARPORT_DMA_AUTO)
2111
2112 p->dma = PARPORT_DMA_NONE;
2113
2114 #ifdef CONFIG_PARPORT_PC_FIFO
2115 if (parport_ECP_supported(p) &&
2116 p->dma != PARPORT_DMA_NOFIFO &&
2117 priv->fifo_depth > 0 && p->irq != PARPORT_IRQ_NONE) {
2118 p->modes |= PARPORT_MODE_ECP | PARPORT_MODE_COMPAT;
2119 p->ops->compat_write_data = parport_pc_compat_write_block_pio;
2120 #ifdef CONFIG_PARPORT_1284
2121 p->ops->ecp_write_data = parport_pc_ecp_write_block_pio;
2122
2123
2124 #endif
2125 if (p->dma != PARPORT_DMA_NONE) {
2126 pr_cont(", dma %d", p->dma);
2127 p->modes |= PARPORT_MODE_DMA;
2128 } else
2129 pr_cont(", using FIFO");
2130 } else
2131
2132 p->dma = PARPORT_DMA_NONE;
2133 #endif
2134
2135 pr_cont(" [");
2136
2137 #define printmode(x) \
2138 do { \
2139 if (p->modes & PARPORT_MODE_##x) \
2140 pr_cont("%s%s", f++ ? "," : "", #x); \
2141 } while (0)
2142
2143 {
2144 int f = 0;
2145 printmode(PCSPP);
2146 printmode(TRISTATE);
2147 printmode(COMPAT);
2148 printmode(EPP);
2149 printmode(ECP);
2150 printmode(DMA);
2151 }
2152 #undef printmode
2153 #ifndef CONFIG_PARPORT_1284
2154 pr_cont("(,...)");
2155 #endif
2156 pr_cont("]\n");
2157 if (probedirq != PARPORT_IRQ_NONE)
2158 pr_info("%s: irq %d detected\n", p->name, probedirq);
2159
2160
2161 if (ECR_res && (p->modes & PARPORT_MODE_ECP) == 0) {
2162 release_region(base_hi, 3);
2163 ECR_res = NULL;
2164 }
2165
2166 if (EPP_res && (p->modes & PARPORT_MODE_EPP) == 0) {
2167 release_region(base+3, 5);
2168 EPP_res = NULL;
2169 }
2170 if (p->irq != PARPORT_IRQ_NONE) {
2171 if (request_irq(p->irq, parport_irq_handler,
2172 irqflags, p->name, p)) {
2173 pr_warn("%s: irq %d in use, resorting to polled operation\n",
2174 p->name, p->irq);
2175 p->irq = PARPORT_IRQ_NONE;
2176 p->dma = PARPORT_DMA_NONE;
2177 }
2178
2179 #ifdef CONFIG_PARPORT_PC_FIFO
2180 #ifdef HAS_DMA
2181 if (p->dma != PARPORT_DMA_NONE) {
2182 if (request_dma(p->dma, p->name)) {
2183 pr_warn("%s: dma %d in use, resorting to PIO operation\n",
2184 p->name, p->dma);
2185 p->dma = PARPORT_DMA_NONE;
2186 } else {
2187 priv->dma_buf =
2188 dma_alloc_coherent(dev,
2189 PAGE_SIZE,
2190 &priv->dma_handle,
2191 GFP_KERNEL);
2192 if (!priv->dma_buf) {
2193 pr_warn("%s: cannot get buffer for DMA, resorting to PIO operation\n",
2194 p->name);
2195 free_dma(p->dma);
2196 p->dma = PARPORT_DMA_NONE;
2197 }
2198 }
2199 }
2200 #endif
2201 #endif
2202 }
2203
2204
2205 if (priv->ecr)
2206
2207
2208
2209
2210 ECR_WRITE(p, 0x34);
2211
2212 parport_pc_write_data(p, 0);
2213 parport_pc_data_forward(p);
2214
2215
2216
2217
2218 spin_lock(&ports_lock);
2219 list_add(&priv->list, &ports_list);
2220 spin_unlock(&ports_lock);
2221 parport_announce_port(p);
2222
2223 return p;
2224
2225 out5:
2226 if (ECR_res)
2227 release_region(base_hi, 3);
2228 if (EPP_res)
2229 release_region(base+0x3, 5);
2230 release_region(base, 3);
2231 out4:
2232 parport_del_port(p);
2233 out3:
2234 kfree(priv);
2235 out2:
2236 kfree(ops);
2237 out1:
2238 if (pdev)
2239 platform_device_unregister(pdev);
2240 return NULL;
2241 }
2242 EXPORT_SYMBOL(parport_pc_probe_port);
2243
2244 void parport_pc_unregister_port(struct parport *p)
2245 {
2246 struct parport_pc_private *priv = p->private_data;
2247 struct parport_operations *ops = p->ops;
2248
2249 parport_remove_port(p);
2250 spin_lock(&ports_lock);
2251 list_del_init(&priv->list);
2252 spin_unlock(&ports_lock);
2253 #if defined(CONFIG_PARPORT_PC_FIFO) && defined(HAS_DMA)
2254 if (p->dma != PARPORT_DMA_NONE)
2255 free_dma(p->dma);
2256 #endif
2257 if (p->irq != PARPORT_IRQ_NONE)
2258 free_irq(p->irq, p);
2259 release_region(p->base, 3);
2260 if (p->size > 3)
2261 release_region(p->base + 3, p->size - 3);
2262 if (p->modes & PARPORT_MODE_ECP)
2263 release_region(p->base_hi, 3);
2264 #if defined(CONFIG_PARPORT_PC_FIFO) && defined(HAS_DMA)
2265 if (priv->dma_buf)
2266 dma_free_coherent(p->physport->dev, PAGE_SIZE,
2267 priv->dma_buf,
2268 priv->dma_handle);
2269 #endif
2270 kfree(p->private_data);
2271 parport_del_port(p);
2272 kfree(ops);
2273 }
2274 EXPORT_SYMBOL(parport_pc_unregister_port);
2275
2276 #ifdef CONFIG_PCI
2277
2278
2279 static int sio_ite_8872_probe(struct pci_dev *pdev, int autoirq, int autodma,
2280 const struct parport_pc_via_data *via)
2281 {
2282 short inta_addr[6] = { 0x2A0, 0x2C0, 0x220, 0x240, 0x1E0 };
2283 u32 ite8872set;
2284 u32 ite8872_lpt, ite8872_lpthi;
2285 u8 ite8872_irq, type;
2286 int irq;
2287 int i;
2288
2289 pr_debug("sio_ite_8872_probe()\n");
2290
2291
2292 for (i = 0; i < 5; i++) {
2293 if (request_region(inta_addr[i], 32, "it887x")) {
2294 int test;
2295 pci_write_config_dword(pdev, 0x60,
2296 0xe5000000 | inta_addr[i]);
2297 pci_write_config_dword(pdev, 0x78,
2298 0x00000000 | inta_addr[i]);
2299 test = inb(inta_addr[i]);
2300 if (test != 0xff)
2301 break;
2302 release_region(inta_addr[i], 32);
2303 }
2304 }
2305 if (i >= 5) {
2306 pr_info("parport_pc: cannot find ITE8872 INTA\n");
2307 return 0;
2308 }
2309
2310 type = inb(inta_addr[i] + 0x18);
2311 type &= 0x0f;
2312
2313 switch (type) {
2314 case 0x2:
2315 pr_info("parport_pc: ITE8871 found (1P)\n");
2316 ite8872set = 0x64200000;
2317 break;
2318 case 0xa:
2319 pr_info("parport_pc: ITE8875 found (1P)\n");
2320 ite8872set = 0x64200000;
2321 break;
2322 case 0xe:
2323 pr_info("parport_pc: ITE8872 found (2S1P)\n");
2324 ite8872set = 0x64e00000;
2325 break;
2326 case 0x6:
2327 pr_info("parport_pc: ITE8873 found (1S)\n");
2328 release_region(inta_addr[i], 32);
2329 return 0;
2330 case 0x8:
2331 pr_info("parport_pc: ITE8874 found (2S)\n");
2332 release_region(inta_addr[i], 32);
2333 return 0;
2334 default:
2335 pr_info("parport_pc: unknown ITE887x\n");
2336 pr_info("parport_pc: please mail 'lspci -nvv' output to Rich.Liu@ite.com.tw\n");
2337 release_region(inta_addr[i], 32);
2338 return 0;
2339 }
2340
2341 pci_read_config_byte(pdev, 0x3c, &ite8872_irq);
2342 pci_read_config_dword(pdev, 0x1c, &ite8872_lpt);
2343 ite8872_lpt &= 0x0000ff00;
2344 pci_read_config_dword(pdev, 0x20, &ite8872_lpthi);
2345 ite8872_lpthi &= 0x0000ff00;
2346 pci_write_config_dword(pdev, 0x6c, 0xe3000000 | ite8872_lpt);
2347 pci_write_config_dword(pdev, 0x70, 0xe3000000 | ite8872_lpthi);
2348 pci_write_config_dword(pdev, 0x80, (ite8872_lpthi<<16) | ite8872_lpt);
2349
2350
2351 pci_write_config_dword(pdev, 0x9c,
2352 ite8872set | (ite8872_irq * 0x11111));
2353
2354 pr_debug("ITE887x: The IRQ is %d\n", ite8872_irq);
2355 pr_debug("ITE887x: The PARALLEL I/O port is 0x%x\n", ite8872_lpt);
2356 pr_debug("ITE887x: The PARALLEL I/O porthi is 0x%x\n", ite8872_lpthi);
2357
2358
2359 irq = ite8872_irq;
2360 if (autoirq != PARPORT_IRQ_AUTO)
2361 irq = PARPORT_IRQ_NONE;
2362
2363
2364
2365
2366 release_region(inta_addr[i], 32);
2367 if (parport_pc_probe_port(ite8872_lpt, ite8872_lpthi,
2368 irq, PARPORT_DMA_NONE, &pdev->dev, 0)) {
2369 pr_info("parport_pc: ITE 8872 parallel port: io=0x%X",
2370 ite8872_lpt);
2371 if (irq != PARPORT_IRQ_NONE)
2372 pr_cont(", irq=%d", irq);
2373 pr_cont("\n");
2374 return 1;
2375 }
2376
2377 return 0;
2378 }
2379
2380
2381
2382 static int parport_init_mode;
2383
2384
2385 static struct parport_pc_via_data via_686a_data = {
2386 0x51,
2387 0x50,
2388 0x85,
2389 0x02,
2390 0xE2,
2391 0xF0,
2392 0xE6
2393 };
2394 static struct parport_pc_via_data via_8231_data = {
2395 0x45,
2396 0x44,
2397 0x50,
2398 0x04,
2399 0xF2,
2400 0xFA,
2401 0xF6
2402 };
2403
2404 static int sio_via_probe(struct pci_dev *pdev, int autoirq, int autodma,
2405 const struct parport_pc_via_data *via)
2406 {
2407 u8 tmp, tmp2, siofunc;
2408 u8 ppcontrol = 0;
2409 int dma, irq;
2410 unsigned port1, port2;
2411 unsigned have_epp = 0;
2412
2413 printk(KERN_DEBUG "parport_pc: VIA 686A/8231 detected\n");
2414
2415 switch (parport_init_mode) {
2416 case 1:
2417 printk(KERN_DEBUG "parport_pc: setting SPP mode\n");
2418 siofunc = VIA_FUNCTION_PARPORT_SPP;
2419 break;
2420 case 2:
2421 printk(KERN_DEBUG "parport_pc: setting PS/2 mode\n");
2422 siofunc = VIA_FUNCTION_PARPORT_SPP;
2423 ppcontrol = VIA_PARPORT_BIDIR;
2424 break;
2425 case 3:
2426 printk(KERN_DEBUG "parport_pc: setting EPP mode\n");
2427 siofunc = VIA_FUNCTION_PARPORT_EPP;
2428 ppcontrol = VIA_PARPORT_BIDIR;
2429 have_epp = 1;
2430 break;
2431 case 4:
2432 printk(KERN_DEBUG "parport_pc: setting ECP mode\n");
2433 siofunc = VIA_FUNCTION_PARPORT_ECP;
2434 ppcontrol = VIA_PARPORT_BIDIR;
2435 break;
2436 case 5:
2437 printk(KERN_DEBUG "parport_pc: setting EPP+ECP mode\n");
2438 siofunc = VIA_FUNCTION_PARPORT_ECP;
2439 ppcontrol = VIA_PARPORT_BIDIR|VIA_PARPORT_ECPEPP;
2440 have_epp = 1;
2441 break;
2442 default:
2443 printk(KERN_DEBUG "parport_pc: probing current configuration\n");
2444 siofunc = VIA_FUNCTION_PROBE;
2445 break;
2446 }
2447
2448
2449
2450 pci_read_config_byte(pdev, via->via_pci_superio_config_reg, &tmp);
2451 tmp |= via->via_pci_superio_config_data;
2452 pci_write_config_byte(pdev, via->via_pci_superio_config_reg, tmp);
2453
2454
2455 outb(via->viacfg_function, VIA_CONFIG_INDEX);
2456 tmp = inb(VIA_CONFIG_DATA);
2457
2458 outb(via->viacfg_parport_control, VIA_CONFIG_INDEX);
2459 tmp2 = inb(VIA_CONFIG_DATA);
2460 if (siofunc == VIA_FUNCTION_PROBE) {
2461 siofunc = tmp & VIA_FUNCTION_PARPORT_DISABLE;
2462 ppcontrol = tmp2;
2463 } else {
2464 tmp &= ~VIA_FUNCTION_PARPORT_DISABLE;
2465 tmp |= siofunc;
2466 outb(via->viacfg_function, VIA_CONFIG_INDEX);
2467 outb(tmp, VIA_CONFIG_DATA);
2468 tmp2 &= ~(VIA_PARPORT_BIDIR|VIA_PARPORT_ECPEPP);
2469 tmp2 |= ppcontrol;
2470 outb(via->viacfg_parport_control, VIA_CONFIG_INDEX);
2471 outb(tmp2, VIA_CONFIG_DATA);
2472 }
2473
2474
2475 outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
2476 port1 = inb(VIA_CONFIG_DATA) << 2;
2477
2478 printk(KERN_DEBUG "parport_pc: Current parallel port base: 0x%X\n",
2479 port1);
2480 if (port1 == 0x3BC && have_epp) {
2481 outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
2482 outb((0x378 >> 2), VIA_CONFIG_DATA);
2483 printk(KERN_DEBUG "parport_pc: Parallel port base changed to 0x378\n");
2484 port1 = 0x378;
2485 }
2486
2487
2488
2489
2490 pci_read_config_byte(pdev, via->via_pci_superio_config_reg, &tmp);
2491 tmp &= ~via->via_pci_superio_config_data;
2492 pci_write_config_byte(pdev, via->via_pci_superio_config_reg, tmp);
2493
2494 if (siofunc == VIA_FUNCTION_PARPORT_DISABLE) {
2495 pr_info("parport_pc: VIA parallel port disabled in BIOS\n");
2496 return 0;
2497 }
2498
2499
2500 pci_read_config_byte(pdev, via->via_pci_parport_irq_reg, &tmp);
2501 irq = ((tmp & VIA_IRQCONTROL_PARALLEL) >> 4);
2502
2503 if (siofunc == VIA_FUNCTION_PARPORT_ECP) {
2504
2505 pci_read_config_byte(pdev, via->via_pci_parport_dma_reg, &tmp);
2506 dma = ((tmp & VIA_DMACONTROL_PARALLEL) >> 2);
2507 } else
2508
2509
2510 dma = PARPORT_DMA_NONE;
2511
2512
2513 if (autoirq == PARPORT_IRQ_NONE) {
2514 irq = PARPORT_IRQ_NONE;
2515 dma = PARPORT_DMA_NONE;
2516 }
2517 if (autodma == PARPORT_DMA_NONE)
2518 dma = PARPORT_DMA_NONE;
2519
2520 switch (port1) {
2521 case 0x3bc:
2522 port2 = 0x7bc; break;
2523 case 0x378:
2524 port2 = 0x778; break;
2525 case 0x278:
2526 port2 = 0x678; break;
2527 default:
2528 pr_info("parport_pc: Weird VIA parport base 0x%X, ignoring\n",
2529 port1);
2530 return 0;
2531 }
2532
2533
2534 switch (irq) {
2535 case 0:
2536 case 2:
2537 case 8:
2538 case 13:
2539 irq = PARPORT_IRQ_NONE;
2540 break;
2541
2542 default:
2543 break;
2544 }
2545
2546
2547 if (parport_pc_probe_port(port1, port2, irq, dma, &pdev->dev, 0)) {
2548 pr_info("parport_pc: VIA parallel port: io=0x%X", port1);
2549 if (irq != PARPORT_IRQ_NONE)
2550 pr_cont(", irq=%d", irq);
2551 if (dma != PARPORT_DMA_NONE)
2552 pr_cont(", dma=%d", dma);
2553 pr_cont("\n");
2554 return 1;
2555 }
2556
2557 pr_warn("parport_pc: Strange, can't probe VIA parallel port: io=0x%X, irq=%d, dma=%d\n",
2558 port1, irq, dma);
2559 return 0;
2560 }
2561
2562
2563 enum parport_pc_sio_types {
2564 sio_via_686a = 0,
2565 sio_via_8231,
2566 sio_ite_8872,
2567 last_sio
2568 };
2569
2570
2571 static struct parport_pc_superio {
2572 int (*probe) (struct pci_dev *pdev, int autoirq, int autodma,
2573 const struct parport_pc_via_data *via);
2574 const struct parport_pc_via_data *via;
2575 } parport_pc_superio_info[] = {
2576 { sio_via_probe, &via_686a_data, },
2577 { sio_via_probe, &via_8231_data, },
2578 { sio_ite_8872_probe, NULL, },
2579 };
2580
2581 enum parport_pc_pci_cards {
2582 siig_1p_10x = last_sio,
2583 siig_2p_10x,
2584 siig_1p_20x,
2585 siig_2p_20x,
2586 lava_parallel,
2587 lava_parallel_dual_a,
2588 lava_parallel_dual_b,
2589 boca_ioppar,
2590 plx_9050,
2591 timedia_4006a,
2592 timedia_4014,
2593 timedia_4008a,
2594 timedia_4018,
2595 timedia_9018a,
2596 syba_2p_epp,
2597 syba_1p_ecp,
2598 titan_010l,
2599 avlab_1p,
2600 avlab_2p,
2601 oxsemi_952,
2602 oxsemi_954,
2603 oxsemi_840,
2604 oxsemi_pcie_pport,
2605 aks_0100,
2606 mobility_pp,
2607 netmos_9705,
2608 netmos_9715,
2609 netmos_9755,
2610 netmos_9805,
2611 netmos_9815,
2612 netmos_9901,
2613 netmos_9865,
2614 quatech_sppxp100,
2615 wch_ch382l,
2616 };
2617
2618
2619
2620
2621 static struct parport_pc_pci {
2622 int numports;
2623 struct {
2624
2625 int lo;
2626 int hi;
2627
2628 } addr[4];
2629
2630
2631
2632
2633 int (*preinit_hook) (struct pci_dev *pdev, int autoirq, int autodma);
2634
2635
2636
2637 void (*postinit_hook) (struct pci_dev *pdev, int failed);
2638 } cards[] = {
2639 { 1, { { 2, 3 }, } },
2640 { 2, { { 2, 3 }, { 4, 5 }, } },
2641 { 1, { { 0, 1 }, } },
2642 { 2, { { 0, 1 }, { 2, 3 }, } },
2643 { 1, { { 0, -1 }, } },
2644 { 1, { { 0, -1 }, } },
2645 { 1, { { 0, -1 }, } },
2646 { 1, { { 0, -1 }, } },
2647 { 2, { { 4, -1 }, { 5, -1 }, } },
2648 { 1, { { 0, -1 }, } },
2649 { 2, { { 0, -1 }, { 2, -1 }, } },
2650 { 1, { { 0, 1 }, } },
2651 { 2, { { 0, 1 }, { 2, 3 }, } },
2652 { 2, { { 0, 1 }, { 2, 3 }, } },
2653
2654
2655 { 2, { { 0, 0x078 }, { 0, 0x178 }, } },
2656 { 1, { { 0, 0x078 }, } },
2657 { 1, { { 3, -1 }, } },
2658 { 1, { { 0, 1}, } },
2659 { 2, { { 0, 1}, { 2, 3 },} },
2660
2661
2662 { 1, { { 0, 1 }, } },
2663 { 1, { { 0, -1 }, } },
2664 { 1, { { 0, 1 }, } },
2665 { 1, { { 0, 1 }, } },
2666 { 1, { { 0, -1 }, } },
2667 { 1, { { 0, 1 }, } },
2668
2669
2670 { 1, { { 0, -1 }, } },
2671 { 2, { { 0, 1 }, { 2, 3 },} },
2672 { 2, { { 0, 1 }, { 2, 3 },} },
2673 { 1, { { 0, 1 }, } },
2674 { 2, { { 0, 1 }, { 2, 3 }, } },
2675 { 1, { { 0, -1 }, } },
2676 { 1, { { 0, -1 }, } },
2677 { 1, { { 0, 1 }, } },
2678 { 1, { { 2, -1 }, } },
2679 };
2680
2681 static const struct pci_device_id parport_pc_pci_tbl[] = {
2682
2683 { 0x1106, 0x0686, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_686a },
2684 { 0x1106, 0x8231, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_via_8231 },
2685 { PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_8872,
2686 PCI_ANY_ID, PCI_ANY_ID, 0, 0, sio_ite_8872 },
2687
2688
2689 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_10x,
2690 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_10x },
2691 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_10x,
2692 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_10x },
2693 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_20x,
2694 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_1p_20x },
2695 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_20x,
2696 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2p_20x },
2697 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PARALLEL,
2698 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel },
2699 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_A,
2700 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_a },
2701 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_B,
2702 PCI_ANY_ID, PCI_ANY_ID, 0, 0, lava_parallel_dual_b },
2703 { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_BOCA_IOPPAR,
2704 PCI_ANY_ID, PCI_ANY_ID, 0, 0, boca_ioppar },
2705 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
2706 PCI_SUBVENDOR_ID_EXSYS, PCI_SUBDEVICE_ID_EXSYS_4014, 0, 0, plx_9050 },
2707
2708 { 0x1409, 0x7268, 0x1409, 0x0101, 0, 0, timedia_4006a },
2709 { 0x1409, 0x7268, 0x1409, 0x0102, 0, 0, timedia_4014 },
2710 { 0x1409, 0x7268, 0x1409, 0x0103, 0, 0, timedia_4008a },
2711 { 0x1409, 0x7268, 0x1409, 0x0104, 0, 0, timedia_4018 },
2712 { 0x1409, 0x7268, 0x1409, 0x9018, 0, 0, timedia_9018a },
2713 { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_2P_EPP,
2714 PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_2p_epp },
2715 { PCI_VENDOR_ID_SYBA, PCI_DEVICE_ID_SYBA_1P_ECP,
2716 PCI_ANY_ID, PCI_ANY_ID, 0, 0, syba_1p_ecp },
2717 { PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_010L,
2718 PCI_ANY_ID, PCI_ANY_ID, 0, 0, titan_010l },
2719
2720
2721 { 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p},
2722 { 0x14db, 0x2121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2p},
2723 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952PP,
2724 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_952 },
2725 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954PP,
2726 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_954 },
2727 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_12PCI840,
2728 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_840 },
2729 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe840,
2730 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2731 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe840_G,
2732 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2733 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_0,
2734 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2735 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_0_G,
2736 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2737 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1,
2738 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2739 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_G,
2740 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2741 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_U,
2742 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2743 { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_PCIe952_1_GU,
2744 PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_pcie_pport },
2745 { PCI_VENDOR_ID_AKS, PCI_DEVICE_ID_AKS_ALADDINCARD,
2746 PCI_ANY_ID, PCI_ANY_ID, 0, 0, aks_0100 },
2747 { 0x14f2, 0x0121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, mobility_pp },
2748
2749 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9705,
2750 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9705 },
2751 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9715,
2752 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9715 },
2753 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9755,
2754 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9755 },
2755 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9805,
2756 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9805 },
2757 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9815,
2758 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 },
2759 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9901,
2760 0xA000, 0x2000, 0, 0, netmos_9901 },
2761 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
2762 0xA000, 0x1000, 0, 0, netmos_9865 },
2763 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9865,
2764 0xA000, 0x2000, 0, 0, netmos_9865 },
2765
2766 { PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100,
2767 PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 },
2768
2769 { 0x1c00, 0x3050, 0x1c00, 0x3050, 0, 0, wch_ch382l },
2770 { 0, }
2771 };
2772 MODULE_DEVICE_TABLE(pci, parport_pc_pci_tbl);
2773
2774 struct pci_parport_data {
2775 int num;
2776 struct parport *ports[2];
2777 };
2778
2779 static int parport_pc_pci_probe(struct pci_dev *dev,
2780 const struct pci_device_id *id)
2781 {
2782 int err, count, n, i = id->driver_data;
2783 struct pci_parport_data *data;
2784
2785 if (i < last_sio)
2786
2787 return 0;
2788
2789
2790 i -= last_sio;
2791 count = 0;
2792 err = pci_enable_device(dev);
2793 if (err)
2794 return err;
2795
2796 data = kmalloc(sizeof(struct pci_parport_data), GFP_KERNEL);
2797 if (!data)
2798 return -ENOMEM;
2799
2800 if (cards[i].preinit_hook &&
2801 cards[i].preinit_hook(dev, PARPORT_IRQ_NONE, PARPORT_DMA_NONE)) {
2802 kfree(data);
2803 return -ENODEV;
2804 }
2805
2806 for (n = 0; n < cards[i].numports; n++) {
2807 int lo = cards[i].addr[n].lo;
2808 int hi = cards[i].addr[n].hi;
2809 int irq;
2810 unsigned long io_lo, io_hi;
2811 io_lo = pci_resource_start(dev, lo);
2812 io_hi = 0;
2813 if ((hi >= 0) && (hi <= 6))
2814 io_hi = pci_resource_start(dev, hi);
2815 else if (hi > 6)
2816 io_lo += hi;
2817
2818
2819
2820 irq = dev->irq;
2821 if (irq == IRQ_NONE) {
2822 printk(KERN_DEBUG "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx)\n",
2823 id->vendor, id->device, io_lo, io_hi);
2824 irq = PARPORT_IRQ_NONE;
2825 } else {
2826 printk(KERN_DEBUG "PCI parallel port detected: %04x:%04x, I/O at %#lx(%#lx), IRQ %d\n",
2827 id->vendor, id->device, io_lo, io_hi, irq);
2828 }
2829 data->ports[count] =
2830 parport_pc_probe_port(io_lo, io_hi, irq,
2831 PARPORT_DMA_NONE, &dev->dev,
2832 IRQF_SHARED);
2833 if (data->ports[count])
2834 count++;
2835 }
2836
2837 data->num = count;
2838
2839 if (cards[i].postinit_hook)
2840 cards[i].postinit_hook(dev, count == 0);
2841
2842 if (count) {
2843 pci_set_drvdata(dev, data);
2844 return 0;
2845 }
2846
2847 kfree(data);
2848
2849 return -ENODEV;
2850 }
2851
2852 static void parport_pc_pci_remove(struct pci_dev *dev)
2853 {
2854 struct pci_parport_data *data = pci_get_drvdata(dev);
2855 int i;
2856
2857 if (data) {
2858 for (i = data->num - 1; i >= 0; i--)
2859 parport_pc_unregister_port(data->ports[i]);
2860
2861 kfree(data);
2862 }
2863 }
2864
2865 static struct pci_driver parport_pc_pci_driver = {
2866 .name = "parport_pc",
2867 .id_table = parport_pc_pci_tbl,
2868 .probe = parport_pc_pci_probe,
2869 .remove = parport_pc_pci_remove,
2870 };
2871
2872 static int __init parport_pc_init_superio(int autoirq, int autodma)
2873 {
2874 const struct pci_device_id *id;
2875 struct pci_dev *pdev = NULL;
2876 int ret = 0;
2877
2878 for_each_pci_dev(pdev) {
2879 id = pci_match_id(parport_pc_pci_tbl, pdev);
2880 if (id == NULL || id->driver_data >= last_sio)
2881 continue;
2882
2883 if (parport_pc_superio_info[id->driver_data].probe(
2884 pdev, autoirq, autodma,
2885 parport_pc_superio_info[id->driver_data].via)) {
2886 ret++;
2887 }
2888 }
2889
2890 return ret;
2891 }
2892 #else
2893 static struct pci_driver parport_pc_pci_driver;
2894 static int __init parport_pc_init_superio(int autoirq, int autodma)
2895 {
2896 return 0;
2897 }
2898 #endif
2899
2900 #ifdef CONFIG_PNP
2901
2902 static const struct pnp_device_id parport_pc_pnp_tbl[] = {
2903
2904 {.id = "PNP0400", .driver_data = 0},
2905
2906 {.id = "PNP0401", .driver_data = 0},
2907 { }
2908 };
2909
2910 MODULE_DEVICE_TABLE(pnp, parport_pc_pnp_tbl);
2911
2912 static int parport_pc_pnp_probe(struct pnp_dev *dev,
2913 const struct pnp_device_id *id)
2914 {
2915 struct parport *pdata;
2916 unsigned long io_lo, io_hi;
2917 int dma, irq;
2918
2919 if (pnp_port_valid(dev, 0) &&
2920 !(pnp_port_flags(dev, 0) & IORESOURCE_DISABLED)) {
2921 io_lo = pnp_port_start(dev, 0);
2922 } else
2923 return -EINVAL;
2924
2925 if (pnp_port_valid(dev, 1) &&
2926 !(pnp_port_flags(dev, 1) & IORESOURCE_DISABLED)) {
2927 io_hi = pnp_port_start(dev, 1);
2928 } else
2929 io_hi = 0;
2930
2931 if (pnp_irq_valid(dev, 0) &&
2932 !(pnp_irq_flags(dev, 0) & IORESOURCE_DISABLED)) {
2933 irq = pnp_irq(dev, 0);
2934 } else
2935 irq = PARPORT_IRQ_NONE;
2936
2937 if (pnp_dma_valid(dev, 0) &&
2938 !(pnp_dma_flags(dev, 0) & IORESOURCE_DISABLED)) {
2939 dma = pnp_dma(dev, 0);
2940 } else
2941 dma = PARPORT_DMA_NONE;
2942
2943 dev_info(&dev->dev, "reported by %s\n", dev->protocol->name);
2944 pdata = parport_pc_probe_port(io_lo, io_hi, irq, dma, &dev->dev, 0);
2945 if (pdata == NULL)
2946 return -ENODEV;
2947
2948 pnp_set_drvdata(dev, pdata);
2949 return 0;
2950 }
2951
2952 static void parport_pc_pnp_remove(struct pnp_dev *dev)
2953 {
2954 struct parport *pdata = (struct parport *)pnp_get_drvdata(dev);
2955 if (!pdata)
2956 return;
2957
2958 parport_pc_unregister_port(pdata);
2959 }
2960
2961
2962 static struct pnp_driver parport_pc_pnp_driver = {
2963 .name = "parport_pc",
2964 .id_table = parport_pc_pnp_tbl,
2965 .probe = parport_pc_pnp_probe,
2966 .remove = parport_pc_pnp_remove,
2967 };
2968
2969 #else
2970 static struct pnp_driver parport_pc_pnp_driver;
2971 #endif
2972
2973 static int parport_pc_platform_probe(struct platform_device *pdev)
2974 {
2975
2976
2977 return 0;
2978 }
2979
2980 static struct platform_driver parport_pc_platform_driver = {
2981 .driver = {
2982 .name = "parport_pc",
2983 },
2984 .probe = parport_pc_platform_probe,
2985 };
2986
2987
2988 static int __attribute__((unused))
2989 parport_pc_find_isa_ports(int autoirq, int autodma)
2990 {
2991 int count = 0;
2992
2993 if (parport_pc_probe_port(0x3bc, 0x7bc, autoirq, autodma, NULL, 0))
2994 count++;
2995 if (parport_pc_probe_port(0x378, 0x778, autoirq, autodma, NULL, 0))
2996 count++;
2997 if (parport_pc_probe_port(0x278, 0x678, autoirq, autodma, NULL, 0))
2998 count++;
2999
3000 return count;
3001 }
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013 static void __init parport_pc_find_ports(int autoirq, int autodma)
3014 {
3015 int count = 0, err;
3016
3017 #ifdef CONFIG_PARPORT_PC_SUPERIO
3018 detect_and_report_it87();
3019 detect_and_report_winbond();
3020 detect_and_report_smsc();
3021 #endif
3022
3023
3024 count += parport_pc_init_superio(autoirq, autodma);
3025
3026
3027 if (!count) {
3028 err = pnp_register_driver(&parport_pc_pnp_driver);
3029 if (!err)
3030 pnp_registered_parport = 1;
3031 }
3032
3033
3034 parport_pc_find_nonpci_ports(autoirq, autodma);
3035
3036 err = pci_register_driver(&parport_pc_pci_driver);
3037 if (!err)
3038 pci_registered_parport = 1;
3039 }
3040
3041
3042
3043
3044
3045
3046
3047 static int __initdata io[PARPORT_PC_MAX_PORTS+1] = {
3048 [0 ... PARPORT_PC_MAX_PORTS] = 0
3049 };
3050 static int __initdata io_hi[PARPORT_PC_MAX_PORTS+1] = {
3051 [0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO
3052 };
3053 static int __initdata dmaval[PARPORT_PC_MAX_PORTS] = {
3054 [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_NONE
3055 };
3056 static int __initdata irqval[PARPORT_PC_MAX_PORTS] = {
3057 [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY
3058 };
3059
3060 static int __init parport_parse_param(const char *s, int *val,
3061 int automatic, int none, int nofifo)
3062 {
3063 if (!s)
3064 return 0;
3065 if (!strncmp(s, "auto", 4))
3066 *val = automatic;
3067 else if (!strncmp(s, "none", 4))
3068 *val = none;
3069 else if (nofifo && !strncmp(s, "nofifo", 6))
3070 *val = nofifo;
3071 else {
3072 char *ep;
3073 unsigned long r = simple_strtoul(s, &ep, 0);
3074 if (ep != s)
3075 *val = r;
3076 else {
3077 pr_err("parport: bad specifier `%s'\n", s);
3078 return -1;
3079 }
3080 }
3081 return 0;
3082 }
3083
3084 static int __init parport_parse_irq(const char *irqstr, int *val)
3085 {
3086 return parport_parse_param(irqstr, val, PARPORT_IRQ_AUTO,
3087 PARPORT_IRQ_NONE, 0);
3088 }
3089
3090 static int __init parport_parse_dma(const char *dmastr, int *val)
3091 {
3092 return parport_parse_param(dmastr, val, PARPORT_DMA_AUTO,
3093 PARPORT_DMA_NONE, PARPORT_DMA_NOFIFO);
3094 }
3095
3096 #ifdef CONFIG_PCI
3097 static int __init parport_init_mode_setup(char *str)
3098 {
3099 printk(KERN_DEBUG "parport_pc.c: Specified parameter parport_init_mode=%s\n",
3100 str);
3101
3102 if (!strcmp(str, "spp"))
3103 parport_init_mode = 1;
3104 if (!strcmp(str, "ps2"))
3105 parport_init_mode = 2;
3106 if (!strcmp(str, "epp"))
3107 parport_init_mode = 3;
3108 if (!strcmp(str, "ecp"))
3109 parport_init_mode = 4;
3110 if (!strcmp(str, "ecpepp"))
3111 parport_init_mode = 5;
3112 return 1;
3113 }
3114 #endif
3115
3116 #ifdef MODULE
3117 static char *irq[PARPORT_PC_MAX_PORTS];
3118 static char *dma[PARPORT_PC_MAX_PORTS];
3119
3120 MODULE_PARM_DESC(io, "Base I/O address (SPP regs)");
3121 module_param_hw_array(io, int, ioport, NULL, 0);
3122 MODULE_PARM_DESC(io_hi, "Base I/O address (ECR)");
3123 module_param_hw_array(io_hi, int, ioport, NULL, 0);
3124 MODULE_PARM_DESC(irq, "IRQ line");
3125 module_param_hw_array(irq, charp, irq, NULL, 0);
3126 MODULE_PARM_DESC(dma, "DMA channel");
3127 module_param_hw_array(dma, charp, dma, NULL, 0);
3128 #if defined(CONFIG_PARPORT_PC_SUPERIO) || \
3129 (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
3130 MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation");
3131 module_param(verbose_probing, int, 0644);
3132 #endif
3133 #ifdef CONFIG_PCI
3134 static char *init_mode;
3135 MODULE_PARM_DESC(init_mode,
3136 "Initialise mode for VIA VT8231 port (spp, ps2, epp, ecp or ecpepp)");
3137 module_param(init_mode, charp, 0);
3138 #endif
3139
3140 static int __init parse_parport_params(void)
3141 {
3142 unsigned int i;
3143 int val;
3144
3145 #ifdef CONFIG_PCI
3146 if (init_mode)
3147 parport_init_mode_setup(init_mode);
3148 #endif
3149
3150 for (i = 0; i < PARPORT_PC_MAX_PORTS && io[i]; i++) {
3151 if (parport_parse_irq(irq[i], &val))
3152 return 1;
3153 irqval[i] = val;
3154 if (parport_parse_dma(dma[i], &val))
3155 return 1;
3156 dmaval[i] = val;
3157 }
3158 if (!io[0]) {
3159
3160 if (irq[0] && !parport_parse_irq(irq[0], &val))
3161 switch (val) {
3162 case PARPORT_IRQ_NONE:
3163 case PARPORT_IRQ_AUTO:
3164 irqval[0] = val;
3165 break;
3166 default:
3167 pr_warn("parport_pc: irq specified without base address. Use 'io=' to specify one\n");
3168 }
3169
3170 if (dma[0] && !parport_parse_dma(dma[0], &val))
3171 switch (val) {
3172 case PARPORT_DMA_NONE:
3173 case PARPORT_DMA_AUTO:
3174 dmaval[0] = val;
3175 break;
3176 default:
3177 pr_warn("parport_pc: dma specified without base address. Use 'io=' to specify one\n");
3178 }
3179 }
3180 return 0;
3181 }
3182
3183 #else
3184
3185 static int parport_setup_ptr __initdata;
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196 static int __init parport_setup(char *str)
3197 {
3198 char *endptr;
3199 char *sep;
3200 int val;
3201
3202 if (!str || !*str || (*str == '0' && !*(str+1))) {
3203
3204 io[0] = PARPORT_DISABLE;
3205 return 1;
3206 }
3207
3208 if (!strncmp(str, "auto", 4)) {
3209 irqval[0] = PARPORT_IRQ_AUTO;
3210 dmaval[0] = PARPORT_DMA_AUTO;
3211 return 1;
3212 }
3213
3214 val = simple_strtoul(str, &endptr, 0);
3215 if (endptr == str) {
3216 pr_warn("parport=%s not understood\n", str);
3217 return 1;
3218 }
3219
3220 if (parport_setup_ptr == PARPORT_PC_MAX_PORTS) {
3221 pr_err("parport=%s ignored, too many ports\n", str);
3222 return 1;
3223 }
3224
3225 io[parport_setup_ptr] = val;
3226 irqval[parport_setup_ptr] = PARPORT_IRQ_NONE;
3227 dmaval[parport_setup_ptr] = PARPORT_DMA_NONE;
3228
3229 sep = strchr(str, ',');
3230 if (sep++) {
3231 if (parport_parse_irq(sep, &val))
3232 return 1;
3233 irqval[parport_setup_ptr] = val;
3234 sep = strchr(sep, ',');
3235 if (sep++) {
3236 if (parport_parse_dma(sep, &val))
3237 return 1;
3238 dmaval[parport_setup_ptr] = val;
3239 }
3240 }
3241 parport_setup_ptr++;
3242 return 1;
3243 }
3244
3245 static int __init parse_parport_params(void)
3246 {
3247 return io[0] == PARPORT_DISABLE;
3248 }
3249
3250 __setup("parport=", parport_setup);
3251
3252
3253
3254
3255
3256
3257 #ifdef CONFIG_PCI
3258 __setup("parport_init_mode=", parport_init_mode_setup);
3259 #endif
3260 #endif
3261
3262
3263
3264 static int __init parport_pc_init(void)
3265 {
3266 int err;
3267
3268 if (parse_parport_params())
3269 return -EINVAL;
3270
3271 err = platform_driver_register(&parport_pc_platform_driver);
3272 if (err)
3273 return err;
3274
3275 if (io[0]) {
3276 int i;
3277
3278 user_specified = 1;
3279 for (i = 0; i < PARPORT_PC_MAX_PORTS; i++) {
3280 if (!io[i])
3281 break;
3282 if (io_hi[i] == PARPORT_IOHI_AUTO)
3283 io_hi[i] = 0x400 + io[i];
3284 parport_pc_probe_port(io[i], io_hi[i],
3285 irqval[i], dmaval[i], NULL, 0);
3286 }
3287 } else
3288 parport_pc_find_ports(irqval[0], dmaval[0]);
3289
3290 return 0;
3291 }
3292
3293 static void __exit parport_pc_exit(void)
3294 {
3295 if (pci_registered_parport)
3296 pci_unregister_driver(&parport_pc_pci_driver);
3297 if (pnp_registered_parport)
3298 pnp_unregister_driver(&parport_pc_pnp_driver);
3299 platform_driver_unregister(&parport_pc_platform_driver);
3300
3301 while (!list_empty(&ports_list)) {
3302 struct parport_pc_private *priv;
3303 struct parport *port;
3304 struct device *dev;
3305 priv = list_entry(ports_list.next,
3306 struct parport_pc_private, list);
3307 port = priv->port;
3308 dev = port->dev;
3309 parport_pc_unregister_port(port);
3310 if (dev && dev->bus == &platform_bus_type)
3311 platform_device_unregister(to_platform_device(dev));
3312 }
3313 }
3314
3315 MODULE_AUTHOR("Phil Blundell, Tim Waugh, others");
3316 MODULE_DESCRIPTION("PC-style parallel port driver");
3317 MODULE_LICENSE("GPL");
3318 module_init(parport_pc_init)
3319 module_exit(parport_pc_exit)