cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

parport_pc.c (86984B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/* Low-level parallel-port routines for 8255-based PC-style hardware.
      3 *
      4 * Authors: Phil Blundell <philb@gnu.org>
      5 *          Tim Waugh <tim@cyberelk.demon.co.uk>
      6 *	    Jose Renau <renau@acm.org>
      7 *          David Campbell
      8 *          Andrea Arcangeli
      9 *
     10 * based on work by Grant Guenther <grant@torque.net> and Phil Blundell.
     11 *
     12 * Cleaned up include files - Russell King <linux@arm.uk.linux.org>
     13 * DMA support - Bert De Jonghe <bert@sophis.be>
     14 * Many ECP bugs fixed.  Fred Barnes & Jamie Lokier, 1999
     15 * More PCI support now conditional on CONFIG_PCI, 03/2001, Paul G.
     16 * Various hacks, Fred Barnes, 04/2001
     17 * Updated probing logic - Adam Belay <ambx1@neo.rr.com>
     18 */
     19
     20/* This driver should work with any hardware that is broadly compatible
     21 * with that in the IBM PC.  This applies to the majority of integrated
     22 * I/O chipsets that are commonly available.  The expected register
     23 * layout is:
     24 *
     25 *	base+0		data
     26 *	base+1		status
     27 *	base+2		control
     28 *
     29 * In addition, there are some optional registers:
     30 *
     31 *	base+3		EPP address
     32 *	base+4		EPP data
     33 *	base+0x400	ECP config A
     34 *	base+0x401	ECP config B
     35 *	base+0x402	ECP control
     36 *
     37 * All registers are 8 bits wide and read/write.  If your hardware differs
     38 * only in register addresses (eg because your registers are on 32-bit
     39 * word boundaries) then you can alter the constants in parport_pc.h to
     40 * accommodate this.
     41 *
     42 * Note that the ECP registers may not start at offset 0x400 for PCI cards,
     43 * but rather will start at port->base_hi.
     44 */
     45
     46#include <linux/module.h>
     47#include <linux/init.h>
     48#include <linux/sched/signal.h>
     49#include <linux/delay.h>
     50#include <linux/errno.h>
     51#include <linux/interrupt.h>
     52#include <linux/ioport.h>
     53#include <linux/kernel.h>
     54#include <linux/slab.h>
     55#include <linux/dma-mapping.h>
     56#include <linux/pci.h>
     57#include <linux/pnp.h>
     58#include <linux/platform_device.h>
     59#include <linux/sysctl.h>
     60#include <linux/io.h>
     61#include <linux/uaccess.h>
     62
     63#include <asm/dma.h>
     64
     65#include <linux/parport.h>
     66#include <linux/parport_pc.h>
     67#include <linux/via.h>
     68#include <asm/parport.h>
     69
     70#define PARPORT_PC_MAX_PORTS PARPORT_MAX
     71
     72#ifdef CONFIG_ISA_DMA_API
     73#define HAS_DMA
     74#endif
     75
     76/* ECR modes */
     77#define ECR_SPP 00
     78#define ECR_PS2 01
     79#define ECR_PPF 02
     80#define ECR_ECP 03
     81#define ECR_EPP 04
     82#define ECR_VND 05
     83#define ECR_TST 06
     84#define ECR_CNF 07
     85#define ECR_MODE_MASK 0xe0
     86#define ECR_WRITE(p, v) frob_econtrol((p), 0xff, (v))
     87
     88#undef DEBUG
     89
     90#define NR_SUPERIOS 3
     91static struct superio_struct {	/* For Super-IO chips autodetection */
     92	int io;
     93	int irq;
     94	int dma;
     95} superios[NR_SUPERIOS] = { {0,},};
     96
     97static int user_specified;
     98#if defined(CONFIG_PARPORT_PC_SUPERIO) || \
     99       (defined(CONFIG_PARPORT_1284) && defined(CONFIG_PARPORT_PC_FIFO))
    100static int verbose_probing;
    101#endif
    102static int pci_registered_parport;
    103static int pnp_registered_parport;
    104
    105/* frob_control, but for ECR */
    106static void frob_econtrol(struct parport *pb, unsigned char m,
    107			   unsigned char v)
    108{
    109	unsigned char ectr = 0;
    110
    111	if (m != 0xff)
    112		ectr = inb(ECONTROL(pb));
    113
    114	pr_debug("frob_econtrol(%02x,%02x): %02x -> %02x\n",
    115		 m, v, ectr, (ectr & ~m) ^ v);
    116
    117	outb((ectr & ~m) ^ v, ECONTROL(pb));
    118}
    119
    120static inline void frob_set_mode(struct parport *p, int mode)
    121{
    122	frob_econtrol(p, ECR_MODE_MASK, mode << 5);
    123}
    124
    125#ifdef CONFIG_PARPORT_PC_FIFO
    126/* Safely change the mode bits in the ECR
    127   Returns:
    128	    0    : Success
    129	   -EBUSY: Could not drain FIFO in some finite amount of time,
    130		   mode not changed!
    131 */
    132static int change_mode(struct parport *p, int m)
    133{
    134	const struct parport_pc_private *priv = p->physport->private_data;
    135	unsigned char oecr;
    136	int mode;
    137
    138	pr_debug("parport change_mode ECP-ISA to mode 0x%02x\n", m);
    139
    140	if (!priv->ecr) {
    141		printk(KERN_DEBUG "change_mode: but there's no ECR!\n");
    142		return 0;
    143	}
    144
    145	/* Bits <7:5> contain the mode. */
    146	oecr = inb(ECONTROL(p));
    147	mode = (oecr >> 5) & 0x7;
    148	if (mode == m)
    149		return 0;
    150
    151	if (mode >= 2 && !(priv->ctr & 0x20)) {
    152		/* This mode resets the FIFO, so we may
    153		 * have to wait for it to drain first. */
    154		unsigned long expire = jiffies + p->physport->cad->timeout;
    155		int counter;
    156		switch (mode) {
    157		case ECR_PPF: /* Parallel Port FIFO mode */
    158		case ECR_ECP: /* ECP Parallel Port mode */
    159			/* Busy wait for 200us */
    160			for (counter = 0; counter < 40; counter++) {
    161				if (inb(ECONTROL(p)) & 0x01)
    162					break;
    163				if (signal_pending(current))
    164					break;
    165				udelay(5);
    166			}
    167
    168			/* Poll slowly. */
    169			while (!(inb(ECONTROL(p)) & 0x01)) {
    170				if (time_after_eq(jiffies, expire))
    171					/* The FIFO is stuck. */
    172					return -EBUSY;
    173				schedule_timeout_interruptible(
    174							msecs_to_jiffies(10));
    175				if (signal_pending(current))
    176					break;
    177			}
    178		}
    179	}
    180
    181	if (mode >= 2 && m >= 2) {
    182		/* We have to go through mode 001 */
    183		oecr &= ~(7 << 5);
    184		oecr |= ECR_PS2 << 5;
    185		ECR_WRITE(p, oecr);
    186	}
    187
    188	/* Set the mode. */
    189	oecr &= ~(7 << 5);
    190	oecr |= m << 5;
    191	ECR_WRITE(p, oecr);
    192	return 0;
    193}
    194#endif /* FIFO support */
    195
    196/*
    197 * Clear TIMEOUT BIT in EPP MODE
    198 *
    199 * This is also used in SPP detection.
    200 */
    201static int clear_epp_timeout(struct parport *pb)
    202{
    203	unsigned char r;
    204
    205	if (!(parport_pc_read_status(pb) & 0x01))
    206		return 1;
    207
    208	/* To clear timeout some chips require double read */
    209	parport_pc_read_status(pb);
    210	r = parport_pc_read_status(pb);
    211	outb(r | 0x01, STATUS(pb)); /* Some reset by writing 1 */
    212	outb(r & 0xfe, STATUS(pb)); /* Others by writing 0 */
    213	r = parport_pc_read_status(pb);
    214
    215	return !(r & 0x01);
    216}
    217
    218/*
    219 * Access functions.
    220 *
    221 * Most of these aren't static because they may be used by the
    222 * parport_xxx_yyy macros.  extern __inline__ versions of several
    223 * of these are in parport_pc.h.
    224 */
    225
    226static void parport_pc_init_state(struct pardevice *dev,
    227						struct parport_state *s)
    228{
    229	s->u.pc.ctr = 0xc;
    230	if (dev->irq_func &&
    231	    dev->port->irq != PARPORT_IRQ_NONE)
    232		/* Set ackIntEn */
    233		s->u.pc.ctr |= 0x10;
    234
    235	s->u.pc.ecr = 0x34; /* NetMos chip can cause problems 0x24;
    236			     * D.Gruszka VScom */
    237}
    238
    239static void parport_pc_save_state(struct parport *p, struct parport_state *s)
    240{
    241	const struct parport_pc_private *priv = p->physport->private_data;
    242	s->u.pc.ctr = priv->ctr;
    243	if (priv->ecr)
    244		s->u.pc.ecr = inb(ECONTROL(p));
    245}
    246
    247static void parport_pc_restore_state(struct parport *p,
    248						struct parport_state *s)
    249{
    250	struct parport_pc_private *priv = p->physport->private_data;
    251	register unsigned char c = s->u.pc.ctr & priv->ctr_writable;
    252	outb(c, CONTROL(p));
    253	priv->ctr = c;
    254	if (priv->ecr)
    255		ECR_WRITE(p, s->u.pc.ecr);
    256}
    257
    258#ifdef CONFIG_PARPORT_1284
    259static size_t parport_pc_epp_read_data(struct parport *port, void *buf,
    260				       size_t length, int flags)
    261{
    262	size_t got = 0;
    263
    264	if (flags & PARPORT_W91284PIC) {
    265		unsigned char status;
    266		size_t left = length;
    267
    268		/* use knowledge about data lines..:
    269		 *  nFault is 0 if there is at least 1 byte in the Warp's FIFO
    270		 *  pError is 1 if there are 16 bytes in the Warp's FIFO
    271		 */
    272		status = inb(STATUS(port));
    273
    274		while (!(status & 0x08) && got < length) {
    275			if (left >= 16 && (status & 0x20) && !(status & 0x08)) {
    276				/* can grab 16 bytes from warp fifo */
    277				if (!((long)buf & 0x03))
    278					insl(EPPDATA(port), buf, 4);
    279				else
    280					insb(EPPDATA(port), buf, 16);
    281				buf += 16;
    282				got += 16;
    283				left -= 16;
    284			} else {
    285				/* grab single byte from the warp fifo */
    286				*((char *)buf) = inb(EPPDATA(port));
    287				buf++;
    288				got++;
    289				left--;
    290			}
    291			status = inb(STATUS(port));
    292			if (status & 0x01) {
    293				/* EPP timeout should never occur... */
    294				printk(KERN_DEBUG "%s: EPP timeout occurred while talking to w91284pic (should not have done)\n",
    295				       port->name);
    296				clear_epp_timeout(port);
    297			}
    298		}
    299		return got;
    300	}
    301	if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
    302		if (!(((long)buf | length) & 0x03))
    303			insl(EPPDATA(port), buf, (length >> 2));
    304		else
    305			insb(EPPDATA(port), buf, length);
    306		if (inb(STATUS(port)) & 0x01) {
    307			clear_epp_timeout(port);
    308			return -EIO;
    309		}
    310		return length;
    311	}
    312	for (; got < length; got++) {
    313		*((char *)buf) = inb(EPPDATA(port));
    314		buf++;
    315		if (inb(STATUS(port)) & 0x01) {
    316			/* EPP timeout */
    317			clear_epp_timeout(port);
    318			break;
    319		}
    320	}
    321
    322	return got;
    323}
    324
    325static size_t parport_pc_epp_write_data(struct parport *port, const void *buf,
    326					size_t length, int flags)
    327{
    328	size_t written = 0;
    329
    330	if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
    331		if (!(((long)buf | length) & 0x03))
    332			outsl(EPPDATA(port), buf, (length >> 2));
    333		else
    334			outsb(EPPDATA(port), buf, length);
    335		if (inb(STATUS(port)) & 0x01) {
    336			clear_epp_timeout(port);
    337			return -EIO;
    338		}
    339		return length;
    340	}
    341	for (; written < length; written++) {
    342		outb(*((char *)buf), EPPDATA(port));
    343		buf++;
    344		if (inb(STATUS(port)) & 0x01) {
    345			clear_epp_timeout(port);
    346			break;
    347		}
    348	}
    349
    350	return written;
    351}
    352
    353static size_t parport_pc_epp_read_addr(struct parport *port, void *buf,
    354					size_t length, int flags)
    355{
    356	size_t got = 0;
    357
    358	if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
    359		insb(EPPADDR(port), buf, length);
    360		if (inb(STATUS(port)) & 0x01) {
    361			clear_epp_timeout(port);
    362			return -EIO;
    363		}
    364		return length;
    365	}
    366	for (; got < length; got++) {
    367		*((char *)buf) = inb(EPPADDR(port));
    368		buf++;
    369		if (inb(STATUS(port)) & 0x01) {
    370			clear_epp_timeout(port);
    371			break;
    372		}
    373	}
    374
    375	return got;
    376}
    377
    378static size_t parport_pc_epp_write_addr(struct parport *port,
    379					 const void *buf, size_t length,
    380					 int flags)
    381{
    382	size_t written = 0;
    383
    384	if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
    385		outsb(EPPADDR(port), buf, length);
    386		if (inb(STATUS(port)) & 0x01) {
    387			clear_epp_timeout(port);
    388			return -EIO;
    389		}
    390		return length;
    391	}
    392	for (; written < length; written++) {
    393		outb(*((char *)buf), EPPADDR(port));
    394		buf++;
    395		if (inb(STATUS(port)) & 0x01) {
    396			clear_epp_timeout(port);
    397			break;
    398		}
    399	}
    400
    401	return written;
    402}
    403
    404static size_t parport_pc_ecpepp_read_data(struct parport *port, void *buf,
    405					  size_t length, int flags)
    406{
    407	size_t got;
    408
    409	frob_set_mode(port, ECR_EPP);
    410	parport_pc_data_reverse(port);
    411	parport_pc_write_control(port, 0x4);
    412	got = parport_pc_epp_read_data(port, buf, length, flags);
    413	frob_set_mode(port, ECR_PS2);
    414
    415	return got;
    416}
    417
    418static size_t parport_pc_ecpepp_write_data(struct parport *port,
    419					   const void *buf, size_t length,
    420					   int flags)
    421{
    422	size_t written;
    423
    424	frob_set_mode(port, ECR_EPP);
    425	parport_pc_write_control(port, 0x4);
    426	parport_pc_data_forward(port);
    427	written = parport_pc_epp_write_data(port, buf, length, flags);
    428	frob_set_mode(port, ECR_PS2);
    429
    430	return written;
    431}
    432
    433static size_t parport_pc_ecpepp_read_addr(struct parport *port, void *buf,
    434					  size_t length, int flags)
    435{
    436	size_t got;
    437
    438	frob_set_mode(port, ECR_EPP);
    439	parport_pc_data_reverse(port);
    440	parport_pc_write_control(port, 0x4);
    441	got = parport_pc_epp_read_addr(port, buf, length, flags);
    442	frob_set_mode(port, ECR_PS2);
    443
    444	return got;
    445}
    446
    447static size_t parport_pc_ecpepp_write_addr(struct parport *port,
    448					    const void *buf, size_t length,
    449					    int flags)
    450{
    451	size_t written;
    452
    453	frob_set_mode(port, ECR_EPP);
    454	parport_pc_write_control(port, 0x4);
    455	parport_pc_data_forward(port);
    456	written = parport_pc_epp_write_addr(port, buf, length, flags);
    457	frob_set_mode(port, ECR_PS2);
    458
    459	return written;
    460}
    461#endif /* IEEE 1284 support */
    462
    463#ifdef CONFIG_PARPORT_PC_FIFO
    464static size_t parport_pc_fifo_write_block_pio(struct parport *port,
    465					       const void *buf, size_t length)
    466{
    467	int ret = 0;
    468	const unsigned char *bufp = buf;
    469	size_t left = length;
    470	unsigned long expire = jiffies + port->physport->cad->timeout;
    471	const int fifo = FIFO(port);
    472	int poll_for = 8; /* 80 usecs */
    473	const struct parport_pc_private *priv = port->physport->private_data;
    474	const int fifo_depth = priv->fifo_depth;
    475
    476	port = port->physport;
    477
    478	/* We don't want to be interrupted every character. */
    479	parport_pc_disable_irq(port);
    480	/* set nErrIntrEn and serviceIntr */
    481	frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2));
    482
    483	/* Forward mode. */
    484	parport_pc_data_forward(port); /* Must be in PS2 mode */
    485
    486	while (left) {
    487		unsigned char byte;
    488		unsigned char ecrval = inb(ECONTROL(port));
    489		int i = 0;
    490
    491		if (need_resched() && time_before(jiffies, expire))
    492			/* Can't yield the port. */
    493			schedule();
    494
    495		/* Anyone else waiting for the port? */
    496		if (port->waithead) {
    497			printk(KERN_DEBUG "Somebody wants the port\n");
    498			break;
    499		}
    500
    501		if (ecrval & 0x02) {
    502			/* FIFO is full. Wait for interrupt. */
    503
    504			/* Clear serviceIntr */
    505			ECR_WRITE(port, ecrval & ~(1<<2));
    506false_alarm:
    507			ret = parport_wait_event(port, HZ);
    508			if (ret < 0)
    509				break;
    510			ret = 0;
    511			if (!time_before(jiffies, expire)) {
    512				/* Timed out. */
    513				printk(KERN_DEBUG "FIFO write timed out\n");
    514				break;
    515			}
    516			ecrval = inb(ECONTROL(port));
    517			if (!(ecrval & (1<<2))) {
    518				if (need_resched() &&
    519				    time_before(jiffies, expire))
    520					schedule();
    521
    522				goto false_alarm;
    523			}
    524
    525			continue;
    526		}
    527
    528		/* Can't fail now. */
    529		expire = jiffies + port->cad->timeout;
    530
    531poll:
    532		if (signal_pending(current))
    533			break;
    534
    535		if (ecrval & 0x01) {
    536			/* FIFO is empty. Blast it full. */
    537			const int n = left < fifo_depth ? left : fifo_depth;
    538			outsb(fifo, bufp, n);
    539			bufp += n;
    540			left -= n;
    541
    542			/* Adjust the poll time. */
    543			if (i < (poll_for - 2))
    544				poll_for--;
    545			continue;
    546		} else if (i++ < poll_for) {
    547			udelay(10);
    548			ecrval = inb(ECONTROL(port));
    549			goto poll;
    550		}
    551
    552		/* Half-full(call me an optimist) */
    553		byte = *bufp++;
    554		outb(byte, fifo);
    555		left--;
    556	}
    557	dump_parport_state("leave fifo_write_block_pio", port);
    558	return length - left;
    559}
    560
    561#ifdef HAS_DMA
    562static size_t parport_pc_fifo_write_block_dma(struct parport *port,
    563					       const void *buf, size_t length)
    564{
    565	int ret = 0;
    566	unsigned long dmaflag;
    567	size_t left = length;
    568	const struct parport_pc_private *priv = port->physport->private_data;
    569	struct device *dev = port->physport->dev;
    570	dma_addr_t dma_addr, dma_handle;
    571	size_t maxlen = 0x10000; /* max 64k per DMA transfer */
    572	unsigned long start = (unsigned long) buf;
    573	unsigned long end = (unsigned long) buf + length - 1;
    574
    575	dump_parport_state("enter fifo_write_block_dma", port);
    576	if (end < MAX_DMA_ADDRESS) {
    577		/* If it would cross a 64k boundary, cap it at the end. */
    578		if ((start ^ end) & ~0xffffUL)
    579			maxlen = 0x10000 - (start & 0xffff);
    580
    581		dma_addr = dma_handle = dma_map_single(dev, (void *)buf, length,
    582						       DMA_TO_DEVICE);
    583	} else {
    584		/* above 16 MB we use a bounce buffer as ISA-DMA
    585		   is not possible */
    586		maxlen   = PAGE_SIZE;          /* sizeof(priv->dma_buf) */
    587		dma_addr = priv->dma_handle;
    588		dma_handle = 0;
    589	}
    590
    591	port = port->physport;
    592
    593	/* We don't want to be interrupted every character. */
    594	parport_pc_disable_irq(port);
    595	/* set nErrIntrEn and serviceIntr */
    596	frob_econtrol(port, (1<<4) | (1<<2), (1<<4) | (1<<2));
    597
    598	/* Forward mode. */
    599	parport_pc_data_forward(port); /* Must be in PS2 mode */
    600
    601	while (left) {
    602		unsigned long expire = jiffies + port->physport->cad->timeout;
    603
    604		size_t count = left;
    605
    606		if (count > maxlen)
    607			count = maxlen;
    608
    609		if (!dma_handle)   /* bounce buffer ! */
    610			memcpy(priv->dma_buf, buf, count);
    611
    612		dmaflag = claim_dma_lock();
    613		disable_dma(port->dma);
    614		clear_dma_ff(port->dma);
    615		set_dma_mode(port->dma, DMA_MODE_WRITE);
    616		set_dma_addr(port->dma, dma_addr);
    617		set_dma_count(port->dma, count);
    618
    619		/* Set DMA mode */
    620		frob_econtrol(port, 1<<3, 1<<3);
    621
    622		/* Clear serviceIntr */
    623		frob_econtrol(port, 1<<2, 0);
    624
    625		enable_dma(port->dma);
    626		release_dma_lock(dmaflag);
    627
    628		/* assume DMA will be successful */
    629		left -= count;
    630		buf  += count;
    631		if (dma_handle)
    632			dma_addr += count;
    633
    634		/* Wait for interrupt. */
    635false_alarm:
    636		ret = parport_wait_event(port, HZ);
    637		if (ret < 0)
    638			break;
    639		ret = 0;
    640		if (!time_before(jiffies, expire)) {
    641			/* Timed out. */
    642			printk(KERN_DEBUG "DMA write timed out\n");
    643			break;
    644		}
    645		/* Is serviceIntr set? */
    646		if (!(inb(ECONTROL(port)) & (1<<2))) {
    647			cond_resched();
    648
    649			goto false_alarm;
    650		}
    651
    652		dmaflag = claim_dma_lock();
    653		disable_dma(port->dma);
    654		clear_dma_ff(port->dma);
    655		count = get_dma_residue(port->dma);
    656		release_dma_lock(dmaflag);
    657
    658		cond_resched(); /* Can't yield the port. */
    659
    660		/* Anyone else waiting for the port? */
    661		if (port->waithead) {
    662			printk(KERN_DEBUG "Somebody wants the port\n");
    663			break;
    664		}
    665
    666		/* update for possible DMA residue ! */
    667		buf  -= count;
    668		left += count;
    669		if (dma_handle)
    670			dma_addr -= count;
    671	}
    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
    680	/* Turn off DMA mode */
    681	frob_econtrol(port, 1<<3, 0);
    682
    683	if (dma_handle)
    684		dma_unmap_single(dev, dma_handle, length, DMA_TO_DEVICE);
    685
    686	dump_parport_state("leave fifo_write_block_dma", port);
    687	return length - left;
    688}
    689#endif
    690
    691static inline size_t parport_pc_fifo_write_block(struct parport *port,
    692					       const void *buf, size_t length)
    693{
    694#ifdef HAS_DMA
    695	if (port->dma != PARPORT_DMA_NONE)
    696		return parport_pc_fifo_write_block_dma(port, buf, length);
    697#endif
    698	return parport_pc_fifo_write_block_pio(port, buf, length);
    699}
    700
    701/* Parallel Port FIFO mode (ECP chipsets) */
    702static size_t parport_pc_compat_write_block_pio(struct parport *port,
    703						 const void *buf, size_t length,
    704						 int flags)
    705{
    706	size_t written;
    707	int r;
    708	unsigned long expire;
    709	const struct parport_pc_private *priv = port->physport->private_data;
    710
    711	/* Special case: a timeout of zero means we cannot call schedule().
    712	 * Also if O_NONBLOCK is set then use the default implementation. */
    713	if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK)
    714		return parport_ieee1284_write_compat(port, buf,
    715						      length, flags);
    716
    717	/* Set up parallel port FIFO mode.*/
    718	parport_pc_data_forward(port); /* Must be in PS2 mode */
    719	parport_pc_frob_control(port, PARPORT_CONTROL_STROBE, 0);
    720	r = change_mode(port, ECR_PPF); /* Parallel port FIFO */
    721	if (r)
    722		printk(KERN_DEBUG "%s: Warning change_mode ECR_PPF failed\n",
    723		       port->name);
    724
    725	port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
    726
    727	/* Write the data to the FIFO. */
    728	written = parport_pc_fifo_write_block(port, buf, length);
    729
    730	/* Finish up. */
    731	/* For some hardware we don't want to touch the mode until
    732	 * the FIFO is empty, so allow 4 seconds for each position
    733	 * in the fifo.
    734	 */
    735	expire = jiffies + (priv->fifo_depth * HZ * 4);
    736	do {
    737		/* Wait for the FIFO to empty */
    738		r = change_mode(port, ECR_PS2);
    739		if (r != -EBUSY)
    740			break;
    741	} while (time_before(jiffies, expire));
    742	if (r == -EBUSY) {
    743
    744		printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name);
    745
    746		/* Prevent further data transfer. */
    747		frob_set_mode(port, ECR_TST);
    748
    749		/* Adjust for the contents of the FIFO. */
    750		for (written -= priv->fifo_depth; ; written++) {
    751			if (inb(ECONTROL(port)) & 0x2) {
    752				/* Full up. */
    753				break;
    754			}
    755			outb(0, FIFO(port));
    756		}
    757
    758		/* Reset the FIFO and return to PS2 mode. */
    759		frob_set_mode(port, ECR_PS2);
    760	}
    761
    762	r = parport_wait_peripheral(port,
    763				     PARPORT_STATUS_BUSY,
    764				     PARPORT_STATUS_BUSY);
    765	if (r)
    766		printk(KERN_DEBUG "%s: BUSY timeout (%d) in compat_write_block_pio\n",
    767		       port->name, r);
    768
    769	port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
    770
    771	return written;
    772}
    773
    774/* ECP */
    775#ifdef CONFIG_PARPORT_1284
    776static size_t parport_pc_ecp_write_block_pio(struct parport *port,
    777					      const void *buf, size_t length,
    778					      int flags)
    779{
    780	size_t written;
    781	int r;
    782	unsigned long expire;
    783	const struct parport_pc_private *priv = port->physport->private_data;
    784
    785	/* Special case: a timeout of zero means we cannot call schedule().
    786	 * Also if O_NONBLOCK is set then use the default implementation. */
    787	if (port->physport->cad->timeout <= PARPORT_INACTIVITY_O_NONBLOCK)
    788		return parport_ieee1284_ecp_write_data(port, buf,
    789							length, flags);
    790
    791	/* Switch to forward mode if necessary. */
    792	if (port->physport->ieee1284.phase != IEEE1284_PH_FWD_IDLE) {
    793		/* Event 47: Set nInit high. */
    794		parport_frob_control(port,
    795				      PARPORT_CONTROL_INIT
    796				      | PARPORT_CONTROL_AUTOFD,
    797				      PARPORT_CONTROL_INIT
    798				      | PARPORT_CONTROL_AUTOFD);
    799
    800		/* Event 49: PError goes high. */
    801		r = parport_wait_peripheral(port,
    802					     PARPORT_STATUS_PAPEROUT,
    803					     PARPORT_STATUS_PAPEROUT);
    804		if (r) {
    805			printk(KERN_DEBUG "%s: PError timeout (%d) in ecp_write_block_pio\n",
    806			       port->name, r);
    807		}
    808	}
    809
    810	/* Set up ECP parallel port mode.*/
    811	parport_pc_data_forward(port); /* Must be in PS2 mode */
    812	parport_pc_frob_control(port,
    813				 PARPORT_CONTROL_STROBE |
    814				 PARPORT_CONTROL_AUTOFD,
    815				 0);
    816	r = change_mode(port, ECR_ECP); /* ECP FIFO */
    817	if (r)
    818		printk(KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n",
    819		       port->name);
    820	port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
    821
    822	/* Write the data to the FIFO. */
    823	written = parport_pc_fifo_write_block(port, buf, length);
    824
    825	/* Finish up. */
    826	/* For some hardware we don't want to touch the mode until
    827	 * the FIFO is empty, so allow 4 seconds for each position
    828	 * in the fifo.
    829	 */
    830	expire = jiffies + (priv->fifo_depth * (HZ * 4));
    831	do {
    832		/* Wait for the FIFO to empty */
    833		r = change_mode(port, ECR_PS2);
    834		if (r != -EBUSY)
    835			break;
    836	} while (time_before(jiffies, expire));
    837	if (r == -EBUSY) {
    838
    839		printk(KERN_DEBUG "%s: FIFO is stuck\n", port->name);
    840
    841		/* Prevent further data transfer. */
    842		frob_set_mode(port, ECR_TST);
    843
    844		/* Adjust for the contents of the FIFO. */
    845		for (written -= priv->fifo_depth; ; written++) {
    846			if (inb(ECONTROL(port)) & 0x2) {
    847				/* Full up. */
    848				break;
    849			}
    850			outb(0, FIFO(port));
    851		}
    852
    853		/* Reset the FIFO and return to PS2 mode. */
    854		frob_set_mode(port, ECR_PS2);
    855
    856		/* Host transfer recovery. */
    857		parport_pc_data_reverse(port); /* Must be in PS2 mode */
    858		udelay(5);
    859		parport_frob_control(port, PARPORT_CONTROL_INIT, 0);
    860		r = parport_wait_peripheral(port, PARPORT_STATUS_PAPEROUT, 0);
    861		if (r)
    862			printk(KERN_DEBUG "%s: PE,1 timeout (%d) in ecp_write_block_pio\n",
    863			       port->name, r);
    864
    865		parport_frob_control(port,
    866				      PARPORT_CONTROL_INIT,
    867				      PARPORT_CONTROL_INIT);
    868		r = parport_wait_peripheral(port,
    869					     PARPORT_STATUS_PAPEROUT,
    870					     PARPORT_STATUS_PAPEROUT);
    871		if (r)
    872			printk(KERN_DEBUG "%s: PE,2 timeout (%d) in ecp_write_block_pio\n",
    873			       port->name, r);
    874	}
    875
    876	r = parport_wait_peripheral(port,
    877				     PARPORT_STATUS_BUSY,
    878				     PARPORT_STATUS_BUSY);
    879	if (r)
    880		printk(KERN_DEBUG "%s: BUSY timeout (%d) in ecp_write_block_pio\n",
    881		       port->name, r);
    882
    883	port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
    884
    885	return written;
    886}
    887#endif /* IEEE 1284 support */
    888#endif /* Allowed to use FIFO/DMA */
    889
    890
    891/*
    892 *	******************************************
    893 *	INITIALISATION AND MODULE STUFF BELOW HERE
    894 *	******************************************
    895 */
    896
    897/* GCC is not inlining extern inline function later overwritten to non-inline,
    898   so we use outlined_ variants here.  */
    899static const struct parport_operations parport_pc_ops = {
    900	.write_data	= parport_pc_write_data,
    901	.read_data	= parport_pc_read_data,
    902
    903	.write_control	= parport_pc_write_control,
    904	.read_control	= parport_pc_read_control,
    905	.frob_control	= parport_pc_frob_control,
    906
    907	.read_status	= parport_pc_read_status,
    908
    909	.enable_irq	= parport_pc_enable_irq,
    910	.disable_irq	= parport_pc_disable_irq,
    911
    912	.data_forward	= parport_pc_data_forward,
    913	.data_reverse	= parport_pc_data_reverse,
    914
    915	.init_state	= parport_pc_init_state,
    916	.save_state	= parport_pc_save_state,
    917	.restore_state	= parport_pc_restore_state,
    918
    919	.epp_write_data	= parport_ieee1284_epp_write_data,
    920	.epp_read_data	= parport_ieee1284_epp_read_data,
    921	.epp_write_addr	= parport_ieee1284_epp_write_addr,
    922	.epp_read_addr	= parport_ieee1284_epp_read_addr,
    923
    924	.ecp_write_data	= parport_ieee1284_ecp_write_data,
    925	.ecp_read_data	= parport_ieee1284_ecp_read_data,
    926	.ecp_write_addr	= parport_ieee1284_ecp_write_addr,
    927
    928	.compat_write_data	= parport_ieee1284_write_compat,
    929	.nibble_read_data	= parport_ieee1284_read_nibble,
    930	.byte_read_data		= parport_ieee1284_read_byte,
    931
    932	.owner		= THIS_MODULE,
    933};
    934
    935#ifdef CONFIG_PARPORT_PC_SUPERIO
    936
    937static struct superio_struct *find_free_superio(void)
    938{
    939	int i;
    940	for (i = 0; i < NR_SUPERIOS; i++)
    941		if (superios[i].io == 0)
    942			return &superios[i];
    943	return NULL;
    944}
    945
    946
    947/* Super-IO chipset detection, Winbond, SMSC */
    948static void show_parconfig_smsc37c669(int io, int key)
    949{
    950	int cr1, cr4, cra, cr23, cr26, cr27;
    951	struct superio_struct *s;
    952
    953	static const char *const modes[] = {
    954		"SPP and Bidirectional (PS/2)",
    955		"EPP and SPP",
    956		"ECP",
    957		"ECP and EPP" };
    958
    959	outb(key, io);
    960	outb(key, io);
    961	outb(1, io);
    962	cr1 = inb(io + 1);
    963	outb(4, io);
    964	cr4 = inb(io + 1);
    965	outb(0x0a, io);
    966	cra = inb(io + 1);
    967	outb(0x23, io);
    968	cr23 = inb(io + 1);
    969	outb(0x26, io);
    970	cr26 = inb(io + 1);
    971	outb(0x27, io);
    972	cr27 = inb(io + 1);
    973	outb(0xaa, io);
    974
    975	if (verbose_probing) {
    976		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",
    977			cr1, cr4, cra, cr23, cr26, cr27);
    978
    979		/* The documentation calls DMA and IRQ-Lines by letters, so
    980		   the board maker can/will wire them
    981		   appropriately/randomly...  G=reserved H=IDE-irq, */
    982		pr_info("SMSC LPT Config: io=0x%04x, irq=%c, dma=%c, fifo threshold=%d\n",
    983			cr23 * 4,
    984			(cr27 & 0x0f) ? 'A' - 1 + (cr27 & 0x0f) : '-',
    985			(cr26 & 0x0f) ? 'A' - 1 + (cr26 & 0x0f) : '-',
    986			cra & 0x0f);
    987		pr_info("SMSC LPT Config: enabled=%s power=%s\n",
    988			(cr23 * 4 >= 0x100) ? "yes" : "no",
    989			(cr1 & 4) ? "yes" : "no");
    990		pr_info("SMSC LPT Config: Port mode=%s, EPP version =%s\n",
    991			(cr1 & 0x08) ? "Standard mode only (SPP)"
    992			: modes[cr4 & 0x03],
    993			(cr4 & 0x40) ? "1.7" : "1.9");
    994	}
    995
    996	/* Heuristics !  BIOS setup for this mainboard device limits
    997	   the choices to standard settings, i.e. io-address and IRQ
    998	   are related, however DMA can be 1 or 3, assume DMA_A=DMA1,
    999	   DMA_C=DMA3 (this is true e.g. for TYAN 1564D Tomcat IV) */
   1000	if (cr23 * 4 >= 0x100) { /* if active */
   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
   1029static 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)", /* 0 */
   1035		"EPP-1.9 and SPP",
   1036		"ECP",
   1037		"ECP and EPP-1.9",
   1038		"Standard (SPP)",
   1039		"EPP-1.7 and SPP",		/* 5 */
   1040		"undefined!",
   1041		"ECP and EPP-1.7" };
   1042	static char *const irqtypes[] = {
   1043		"pulsed low, high-Z",
   1044		"follows nACK" };
   1045
   1046	/* The registers are called compatible-PnP because the
   1047	   register layout is modelled after ISA-PnP, the access
   1048	   method is just another ... */
   1049	outb(key, io);
   1050	outb(key, io);
   1051	outb(0x07, io);   /* Register 7: Select Logical Device */
   1052	outb(0x01, io + 1); /* LD1 is Parallel Port */
   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) { /* the settings can be interrogated later ... */
   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
   1095static 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		/* simple heuristics, we happened to read some
   1102		   non-winbond register */
   1103		return;
   1104
   1105	id = (devid << 8) | devrev;
   1106
   1107	/* Values are from public data sheets pdf files, I can just
   1108	   confirm 83977TF is correct :-) */
   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
   1146static 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		/* simple heuristics, we happened to read some
   1154		   non-smsc register */
   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
   1179static 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); /* Save original value */
   1187
   1188	/* First probe without key */
   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);     /* Write Magic Sequence to EFER, extended
   1198			      function enable register */
   1199	outb(0x20, io);    /* Write EFIR, extended function index register */
   1200	devid = inb(io + 1);  /* Read EFDR, extended function data register */
   1201	outb(0x21, io);
   1202	devrev = inb(io + 1);
   1203	outb(0x09, io);
   1204	oldid = inb(io + 1);
   1205	outb(0xaa, io);    /* Magic Seal */
   1206
   1207	outb(origval, io); /* in case we poked some entirely different hardware */
   1208
   1209	if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
   1210		goto out; /* protection against false positives */
   1211
   1212	decode_winbond(io, key, devid, devrev, oldid);
   1213out:
   1214	release_region(io, 3);
   1215}
   1216
   1217static 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); /* Save original values */
   1225	origval[1] = inb(io + 1);
   1226	origval[2] = inb(io + 2);
   1227
   1228	/* First probe without the key */
   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);     /* Write Magic Byte to EFER, extended
   1237			      function enable register */
   1238	outb(0x20, io + 2);  /* Write EFIR, extended function index register */
   1239	devid = inb(io + 2);  /* Read EFDR, extended function data register */
   1240	outb(0x21, io + 1);
   1241	devrev = inb(io + 2);
   1242	outb(0x09, io + 1);
   1243	oldid = inb(io + 2);
   1244	outb(0xaa, io);    /* Magic Seal */
   1245
   1246	outb(origval[0], io); /* in case we poked some entirely different hardware */
   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; /* protection against false positives */
   1252
   1253	decode_winbond(io, key, devid, devrev, oldid);
   1254out:
   1255	release_region(io, 3);
   1256}
   1257
   1258static 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); /* Save original value */
   1266
   1267	/* First probe without the key */
   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);     /* Write Magic Sequence to EFER, extended
   1279			      function enable register */
   1280	outb(0x0d, io);    /* Write EFIR, extended function index register */
   1281	oldid = inb(io + 1);  /* Read EFDR, extended function data register */
   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);    /* Magic Seal */
   1289
   1290	outb(origval, io); /* in case we poked some entirely different hardware */
   1291
   1292	if (x_id == id && x_oldrev == oldrev &&
   1293	    x_oldid == oldid && x_rev == rev)
   1294		goto out; /* protection against false positives */
   1295
   1296	decode_smsc(io, key, oldid, oldrev);
   1297out:
   1298	release_region(io, 3);
   1299}
   1300
   1301
   1302static 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
   1315static 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
   1325static 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);		/* Save original value */
   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);	/* Parallel Port */
   1346		outb(0x03, 0x2F);
   1347		outb(0xF0, 0x2E);	/* BOOT 0x80 off */
   1348		r = inb(0x2f);
   1349		outb(0xF0, 0x2E);
   1350		outb(r | 8, 0x2F);
   1351		outb(0x02, 0x2E);	/* Lock */
   1352		outb(0x02, 0x2F);
   1353	} else {
   1354		outb(origval, 0x2e);	/* Oops, sorry to disturb */
   1355	}
   1356	release_region(0x2e, 2);
   1357}
   1358#endif /* CONFIG_PARPORT_PC_SUPERIO */
   1359
   1360static 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
   1369static 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
   1377static 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/* --- Mode detection ------------------------------------- */
   1387
   1388/*
   1389 * Checks for port existence, all ports support SPP MODE
   1390 * Returns:
   1391 *         0           :  No parallel port at this address
   1392 *  PARPORT_MODE_PCSPP :  SPP port detected
   1393 *                        (if the user specified an ioport himself,
   1394 *                         this shall always be the case!)
   1395 *
   1396 */
   1397static int parport_SPP_supported(struct parport *pb)
   1398{
   1399	unsigned char r, w;
   1400
   1401	/*
   1402	 * first clear an eventually pending EPP timeout
   1403	 * I (sailer@ife.ee.ethz.ch) have an SMSC chipset
   1404	 * that does not even respond to SPP cycles if an EPP
   1405	 * timeout is pending
   1406	 */
   1407	clear_epp_timeout(pb);
   1408
   1409	/* Do a simple read-write test to make sure the port exists. */
   1410	w = 0xc;
   1411	outb(w, CONTROL(pb));
   1412
   1413	/* Is there a control register that we can read from?  Some
   1414	 * ports don't allow reads, so read_control just returns a
   1415	 * software copy. Some ports _do_ allow reads, so bypass the
   1416	 * software copy here.  In addition, some bits aren't
   1417	 * writable. */
   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		/* That didn't work, but the user thinks there's a
   1430		 * port here. */
   1431		pr_info("parport 0x%lx (WARNING): CTR: wrote 0x%02x, read 0x%02x\n",
   1432			pb->base, w, r);
   1433
   1434	/* Try the data register.  The data lines aren't tri-stated at
   1435	 * this stage, so we expect back what we wrote. */
   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		/* Didn't work, but the user is convinced this is the
   1449		 * place. */
   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	/* It's possible that we can't read the control register or
   1457	 * the data register.  In that case just believe the user. */
   1458	if (user_specified)
   1459		return PARPORT_MODE_PCSPP;
   1460
   1461	return 0;
   1462}
   1463
   1464/* Check for ECR
   1465 *
   1466 * Old style XT ports alias io ports every 0x400, hence accessing ECR
   1467 * on these cards actually accesses the CTR.
   1468 *
   1469 * Modern cards don't do this but reading from ECR will return 0xff
   1470 * regardless of what is written here if the card does NOT support
   1471 * ECP.
   1472 *
   1473 * We first check to see if ECR is the same as CTR.  If not, the low
   1474 * two bits of ECR aren't writable, so we check by writing ECR and
   1475 * reading it back to see if it's what we expect.
   1476 */
   1477static 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)); /* Toggle bit 1 */
   1485
   1486		r = inb(CONTROL(pb));
   1487		if ((inb(ECONTROL(pb)) & 0x2) == (r & 0x2))
   1488			goto no_reg; /* Sure that no ECR register exists */
   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	/* Go to mode 000 */
   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/* Detect PS/2 support.
   1513 *
   1514 * Bit 5 (0x20) sets the PS/2 data direction; setting this high
   1515 * allows us to read data from the data lines.  In theory we would get back
   1516 * 0xff but any peripheral attached to the port may drag some or all of the
   1517 * lines down to zero.  So if we get back anything that isn't the contents
   1518 * of the data register we deem PS/2 support to be present.
   1519 *
   1520 * Some SPP ports have "half PS/2" ability - you can't turn off the line
   1521 * drivers, but an external peripheral with sufficiently beefy drivers of
   1522 * its own can overpower them and assert its own levels onto the bus, from
   1523 * where they can then be read back as normal.  Ports with this property
   1524 * and the right type of device attached are likely to fail the SPP test,
   1525 * (as they will appear to have stuck bits) and so the fact that they might
   1526 * be misdetected here is rather academic.
   1527 */
   1528
   1529static int parport_PS2_supported(struct parport *pb)
   1530{
   1531	int ok = 0;
   1532
   1533	clear_epp_timeout(pb);
   1534
   1535	/* try to tri-state the buffer */
   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	/* cancel input mode */
   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
   1560static 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	/* Translate ECP intrLine to ISA irq value */
   1567	static const int intrline[] = { 0, 7, 9, 10, 11, 14, 15, 5 };
   1568
   1569	/* If there is no ECR, we have no hope of supporting ECP. */
   1570	if (!priv->ecr)
   1571		return 0;
   1572
   1573	/* Find out FIFO depth */
   1574	ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */
   1575	ECR_WRITE(pb, ECR_TST << 5); /* TEST FIFO */
   1576	for (i = 0; i < 1024 && !(inb(ECONTROL(pb)) & 0x02); i++)
   1577		outb(0xaa, FIFO(pb));
   1578
   1579	/*
   1580	 * Using LGS chipset it uses ECR register, but
   1581	 * it doesn't support ECP or FIFO MODE
   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	/* Find out writeIntrThreshold */
   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		/* Number of bytes we know we can write if we get an
   1608		   interrupt. */
   1609		i = 0;
   1610
   1611	priv->writeIntrThreshold = i;
   1612
   1613	/* Find out readIntrThreshold */
   1614	frob_set_mode(pb, ECR_PS2); /* Reset FIFO and enable PS2 */
   1615	parport_pc_data_reverse(pb); /* Must be in PS2 mode */
   1616	frob_set_mode(pb, ECR_TST); /* Test FIFO */
   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		/* Number of bytes we can read if we get an interrupt. */
   1631		i = 0;
   1632
   1633	priv->readIntrThreshold = i;
   1634
   1635	ECR_WRITE(pb, ECR_SPP << 5); /* Reset FIFO */
   1636	ECR_WRITE(pb, 0xf4); /* Configuration mode */
   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;	/* Assume 1 */
   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	/* Go back to mode 000 */
   1679	frob_set_mode(pb, ECR_SPP);
   1680
   1681	return 1;
   1682}
   1683#endif
   1684
   1685#ifdef CONFIG_X86_32
   1686static 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		/* store value of ECR */
   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				/* Phony EPP in ECP. */
   1699				bug_present = 1;
   1700				break;
   1701			}
   1702		}
   1703		/* return ECR into the inital state */
   1704		ECR_WRITE(pb, ecr);
   1705	}
   1706
   1707	return bug_present;
   1708}
   1709static int intel_bug_present(struct parport *pb)
   1710{
   1711/* Check whether the device is legacy, not PCI or PCMCIA. Only legacy is known to be affected. */
   1712	if (pb->dev != NULL) {
   1713		return 0;
   1714	}
   1715
   1716	return intel_bug_present_check_epp(pb);
   1717}
   1718#else
   1719static int intel_bug_present(struct parport *pb)
   1720{
   1721	return 0;
   1722}
   1723#endif /* CONFIG_X86_32 */
   1724
   1725static 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/* EPP mode detection  */
   1742
   1743static int parport_EPP_supported(struct parport *pb)
   1744{
   1745	/*
   1746	 * Theory:
   1747	 *	Bit 0 of STR is the EPP timeout bit, this bit is 0
   1748	 *	when EPP is possible and is set high when an EPP timeout
   1749	 *	occurs (EPP uses the HALT line to stop the CPU while it does
   1750	 *	the byte transfer, an EPP timeout occurs if the attached
   1751	 *	device fails to respond after 10 micro seconds).
   1752	 *
   1753	 *	This bit is cleared by either reading it (National Semi)
   1754	 *	or writing a 1 to the bit (SMC, UMC, WinBond), others ???
   1755	 *	This bit is always high in non EPP modes.
   1756	 */
   1757
   1758	/* If EPP timeout bit clear then EPP available */
   1759	if (!clear_epp_timeout(pb))
   1760		return 0;  /* No way to clear timeout */
   1761
   1762	/* Check for Intel bug. */
   1763	if (intel_bug_present(pb))
   1764		return 0;
   1765
   1766	pb->modes |= PARPORT_MODE_EPP;
   1767
   1768	/* Set up access functions to use EPP hardware. */
   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
   1777static 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	/* Search for SMC style EPP+ECP mode */
   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		/* Set up access functions to use ECP+EPP hardware. */
   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 /* No IEEE 1284 support */
   1806
   1807/* Don't bother probing for modes we know we won't use. */
   1808static int parport_PS2_supported(struct parport *pb) { return 0; }
   1809#ifdef CONFIG_PARPORT_PC_FIFO
   1810static int parport_ECP_supported(struct parport *pb)
   1811{
   1812	return 0;
   1813}
   1814#endif
   1815static int parport_EPP_supported(struct parport *pb)
   1816{
   1817	return 0;
   1818}
   1819
   1820static int parport_ECPEPP_supported(struct parport *pb)
   1821{
   1822	return 0;
   1823}
   1824
   1825static int parport_ECPPS2_supported(struct parport *pb)
   1826{
   1827	return 0;
   1828}
   1829
   1830#endif /* No IEEE 1284 support */
   1831
   1832/* --- IRQ detection -------------------------------------- */
   1833
   1834/* Only if supports ECP mode */
   1835static 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); /* Configuration MODE */
   1844
   1845	intrLine = (inb(CONFIGB(pb)) >> 3) & 0x07;
   1846	irq = lookup[intrLine];
   1847
   1848	ECR_WRITE(pb, oecr);
   1849	return irq;
   1850}
   1851
   1852static 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); /* Reset FIFO */
   1860	ECR_WRITE(pb, (ECR_TST << 5) | 0x04);
   1861	ECR_WRITE(pb, ECR_TST << 5);
   1862
   1863	/* If Full FIFO sure that writeIntrThreshold is generated */
   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 * This detection seems that only works in National Semiconductors
   1878 * This doesn't work in SMC, LGS, and Winbond
   1879 */
   1880static 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	/* Device isn't expecting an EPP read
   1902	 * and generates an IRQ.
   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 /* Advanced detection */
   1917}
   1918
   1919static int irq_probe_SPP(struct parport *pb)
   1920{
   1921	/* Don't even try to do this. */
   1922	return PARPORT_IRQ_NONE;
   1923}
   1924
   1925/* We will attempt to share interrupt requests since other devices
   1926 * such as sound cards and network cards seem to like using the
   1927 * printer IRQs.
   1928 *
   1929 * When ECP is available we can autoprobe for IRQs.
   1930 * NOTE: If we can autoprobe it, we can register the IRQ.
   1931 */
   1932static 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/* --- DMA detection -------------------------------------- */
   1964
   1965/* Only if chipset conforms to ECP ISA Interface Standard */
   1966static 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	/* 000: Indicates jumpered 8-bit DMA if read-only.
   1975	   100: Indicates jumpered 16-bit DMA if read-only. */
   1976	if ((dma & 0x03) == 0)
   1977		dma = PARPORT_DMA_NONE;
   1978
   1979	ECR_WRITE(p, oecr);
   1980	return dma;
   1981}
   1982
   1983static int parport_dma_probe(struct parport *p)
   1984{
   1985	const struct parport_pc_private *priv = p->private_data;
   1986	if (priv->ecr)		/* ask ECP chipset first */
   1987		p->dma = programmable_dma_support(p);
   1988	if (p->dma == PARPORT_DMA_NONE) {
   1989		/* ask known Super-IO chips proper, although these
   1990		   claim ECP compatible, some don't report their DMA
   1991		   conforming to ECP standards */
   1992		p->dma = get_superio_dma(p);
   1993	}
   1994
   1995	return p->dma;
   1996}
   1997
   1998/* --- Initialisation code -------------------------------- */
   1999
   2000static LIST_HEAD(ports_list);
   2001static DEFINE_SPINLOCK(ports_lock);
   2002
   2003struct 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		/* We need a physical device to attach to, but none was
   2021		 * provided. Create our own. */
   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	/* a misnomer, actually - it's allocate and reserve parport number */
   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		/* No port. */
   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) /* To use DMA, giving the irq
   2111					   is mandatory (see above) */
   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		/* currently broken, but working on it.. (FB) */
   2123		/* p->ops->ecp_read_data = parport_pc_ecp_read_block_pio; */
   2124#endif /* IEEE 1284 support */
   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		/* We can't use the DMA channel after all. */
   2132		p->dma = PARPORT_DMA_NONE;
   2133#endif /* Allowed to use FIFO/DMA */
   2134
   2135	pr_cont(" [");
   2136
   2137#define printmode(x)							\
   2138do {									\
   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 /* CONFIG_PARPORT_1284 */
   2156	pr_cont("]\n");
   2157	if (probedirq != PARPORT_IRQ_NONE)
   2158		pr_info("%s: irq %d detected\n", p->name, probedirq);
   2159
   2160	/* If No ECP release the ports grabbed above. */
   2161	if (ECR_res && (p->modes & PARPORT_MODE_ECP) == 0) {
   2162		release_region(base_hi, 3);
   2163		ECR_res = NULL;
   2164	}
   2165	/* Likewise for EEP ports */
   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	/* Done probing.  Now put the port into a sensible start-up state. */
   2205	if (priv->ecr)
   2206		/*
   2207		 * Put the ECP detected port in PS2 mode.
   2208		 * Do this also for ports that have ECR but don't do ECP.
   2209		 */
   2210		ECR_WRITE(p, 0x34);
   2211
   2212	parport_pc_write_data(p, 0);
   2213	parport_pc_data_forward(p);
   2214
   2215	/* Now that we've told the sharing engine about the port, and
   2216	   found out its characteristics, let the high-level drivers
   2217	   know about it. */
   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
   2225out5:
   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);
   2231out4:
   2232	parport_del_port(p);
   2233out3:
   2234	kfree(priv);
   2235out2:
   2236	kfree(ops);
   2237out1:
   2238	if (pdev)
   2239		platform_device_unregister(pdev);
   2240	return NULL;
   2241}
   2242EXPORT_SYMBOL(parport_pc_probe_port);
   2243
   2244void 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); /* hope no-one cached it */
   2273}
   2274EXPORT_SYMBOL(parport_pc_unregister_port);
   2275
   2276#ifdef CONFIG_PCI
   2277
   2278/* ITE support maintained by Rich Liu <richliu@poorman.org> */
   2279static 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	/* make sure which one chip */
   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	/* SET SPP&EPP , Parallel Port NO DMA , Enable All Function */
   2350	/* SET Parallel IRQ */
   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	/* Let the user (or defaults) steer us away from interrupts */
   2359	irq = ite8872_irq;
   2360	if (autoirq != PARPORT_IRQ_AUTO)
   2361		irq = PARPORT_IRQ_NONE;
   2362
   2363	/*
   2364	 * Release the resource so that parport_pc_probe_port can get it.
   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/* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru>
   2381   based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */
   2382static int parport_init_mode;
   2383
   2384/* Data for two known VIA chips */
   2385static struct parport_pc_via_data via_686a_data = {
   2386	0x51,
   2387	0x50,
   2388	0x85,
   2389	0x02,
   2390	0xE2,
   2391	0xF0,
   2392	0xE6
   2393};
   2394static struct parport_pc_via_data via_8231_data = {
   2395	0x45,
   2396	0x44,
   2397	0x50,
   2398	0x04,
   2399	0xF2,
   2400	0xFA,
   2401	0xF6
   2402};
   2403
   2404static 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	 * unlock super i/o configuration
   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	/* Bits 1-0: Parallel Port Mode / Enable */
   2455	outb(via->viacfg_function, VIA_CONFIG_INDEX);
   2456	tmp = inb(VIA_CONFIG_DATA);
   2457	/* Bit 5: EPP+ECP enable; bit 7: PS/2 bidirectional port enable */
   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	/* Parallel Port I/O Base Address, bits 9-2 */
   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	 * lock super i/o configuration
   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	/* Bits 7-4: PnP Routing for Parallel Port IRQ */
   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		/* Bits 3-2: PnP Routing for Parallel Port DMA */
   2505		pci_read_config_byte(pdev, via->via_pci_parport_dma_reg, &tmp);
   2506		dma = ((tmp & VIA_DMACONTROL_PARALLEL) >> 2);
   2507	} else
   2508		/* if ECP not enabled, DMA is not enabled, assumed
   2509		   bogus 'dma' value */
   2510		dma = PARPORT_DMA_NONE;
   2511
   2512	/* Let the user (or defaults) steer us away from interrupts and DMA */
   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	/* filter bogus IRQs */
   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: /* do nothing */
   2543		break;
   2544	}
   2545
   2546	/* finally, do the probe with values obtained */
   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
   2563enum parport_pc_sio_types {
   2564	sio_via_686a = 0,   /* Via VT82C686A motherboard Super I/O */
   2565	sio_via_8231,	    /* Via VT8231 south bridge integrated Super IO */
   2566	sio_ite_8872,
   2567	last_sio
   2568};
   2569
   2570/* each element directly indexed from enum list, above */
   2571static 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
   2581enum 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/* each element directly indexed from enum list, above
   2620 * (but offset by last_sio) */
   2621static struct parport_pc_pci {
   2622	int numports;
   2623	struct { /* BAR (base address registers) numbers in the config
   2624		    space header */
   2625		int lo;
   2626		int hi;
   2627		/* -1 if not there, >6 for offset-method (max BAR is 6) */
   2628	} addr[4];
   2629
   2630	/* If set, this is called immediately after pci_enable_device.
   2631	 * If it returns non-zero, no probing will take place and the
   2632	 * ports will not be used. */
   2633	int (*preinit_hook) (struct pci_dev *pdev, int autoirq, int autodma);
   2634
   2635	/* If set, this is called after probing for ports.  If 'failed'
   2636	 * is non-zero we couldn't use any of the ports. */
   2637	void (*postinit_hook) (struct pci_dev *pdev, int failed);
   2638} cards[] = {
   2639	/* siig_1p_10x */		{ 1, { { 2, 3 }, } },
   2640	/* siig_2p_10x */		{ 2, { { 2, 3 }, { 4, 5 }, } },
   2641	/* siig_1p_20x */		{ 1, { { 0, 1 }, } },
   2642	/* siig_2p_20x */		{ 2, { { 0, 1 }, { 2, 3 }, } },
   2643	/* lava_parallel */		{ 1, { { 0, -1 }, } },
   2644	/* lava_parallel_dual_a */	{ 1, { { 0, -1 }, } },
   2645	/* lava_parallel_dual_b */	{ 1, { { 0, -1 }, } },
   2646	/* boca_ioppar */		{ 1, { { 0, -1 }, } },
   2647	/* plx_9050 */			{ 2, { { 4, -1 }, { 5, -1 }, } },
   2648	/* timedia_4006a */             { 1, { { 0, -1 }, } },
   2649	/* timedia_4014  */             { 2, { { 0, -1 }, { 2, -1 }, } },
   2650	/* timedia_4008a */             { 1, { { 0, 1 }, } },
   2651	/* timedia_4018  */             { 2, { { 0, 1 }, { 2, 3 }, } },
   2652	/* timedia_9018a */             { 2, { { 0, 1 }, { 2, 3 }, } },
   2653					/* SYBA uses fixed offsets in
   2654					   a 1K io window */
   2655	/* syba_2p_epp AP138B */	{ 2, { { 0, 0x078 }, { 0, 0x178 }, } },
   2656	/* syba_1p_ecp W83787 */	{ 1, { { 0, 0x078 }, } },
   2657	/* titan_010l */		{ 1, { { 3, -1 }, } },
   2658	/* avlab_1p		*/	{ 1, { { 0, 1}, } },
   2659	/* avlab_2p		*/	{ 2, { { 0, 1}, { 2, 3 },} },
   2660	/* The Oxford Semi cards are unusual: 954 doesn't support ECP,
   2661	 * and 840 locks up if you write 1 to bit 2! */
   2662	/* oxsemi_952 */		{ 1, { { 0, 1 }, } },
   2663	/* oxsemi_954 */		{ 1, { { 0, -1 }, } },
   2664	/* oxsemi_840 */		{ 1, { { 0, 1 }, } },
   2665	/* oxsemi_pcie_pport */		{ 1, { { 0, 1 }, } },
   2666	/* aks_0100 */                  { 1, { { 0, -1 }, } },
   2667	/* mobility_pp */		{ 1, { { 0, 1 }, } },
   2668
   2669	/* The netmos entries below are untested */
   2670	/* netmos_9705 */               { 1, { { 0, -1 }, } },
   2671	/* netmos_9715 */               { 2, { { 0, 1 }, { 2, 3 },} },
   2672	/* netmos_9755 */               { 2, { { 0, 1 }, { 2, 3 },} },
   2673	/* netmos_9805 */		{ 1, { { 0, 1 }, } },
   2674	/* netmos_9815 */		{ 2, { { 0, 1 }, { 2, 3 }, } },
   2675	/* netmos_9901 */               { 1, { { 0, -1 }, } },
   2676	/* netmos_9865 */               { 1, { { 0, -1 }, } },
   2677	/* quatech_sppxp100 */		{ 1, { { 0, 1 }, } },
   2678	/* wch_ch382l */		{ 1, { { 2, -1 }, } },
   2679};
   2680
   2681static const struct pci_device_id parport_pc_pci_tbl[] = {
   2682	/* Super-IO onboard chips */
   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	/* PCI cards */
   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	/* PCI_VENDOR_ID_TIMEDIA/SUNIX has many differing cards ...*/
   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	/* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
   2720	/* AFAVLAB_TK9902 */
   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	/* NetMos communication controllers */
   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	/* Quatech SPPXP-100 Parallel port PCI ExpressCard */
   2766	{ PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_SPPXP_100,
   2767	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, quatech_sppxp100 },
   2768	/* WCH CH382L PCI-E single parallel port card */
   2769	{ 0x1c00, 0x3050, 0x1c00, 0x3050, 0, 0, wch_ch382l },
   2770	{ 0, } /* terminate list */
   2771};
   2772MODULE_DEVICE_TABLE(pci, parport_pc_pci_tbl);
   2773
   2774struct pci_parport_data {
   2775	int num;
   2776	struct parport *ports[2];
   2777};
   2778
   2779static 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		/* This is an onboard Super-IO and has already been probed */
   2787		return 0;
   2788
   2789	/* This is a PCI card */
   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; /* Reinterpret the meaning of
   2817					"hi" as an offset (see SYBA
   2818					def.) */
   2819		/* TODO: test if sharing interrupts works */
   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
   2852static 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
   2865static 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
   2872static 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; /* number of devices found */
   2891}
   2892#else
   2893static struct pci_driver parport_pc_pci_driver;
   2894static int __init parport_pc_init_superio(int autoirq, int autodma)
   2895{
   2896	return 0;
   2897}
   2898#endif /* CONFIG_PCI */
   2899
   2900#ifdef CONFIG_PNP
   2901
   2902static const struct pnp_device_id parport_pc_pnp_tbl[] = {
   2903	/* Standard LPT Printer Port */
   2904	{.id = "PNP0400", .driver_data = 0},
   2905	/* ECP Printer Port */
   2906	{.id = "PNP0401", .driver_data = 0},
   2907	{ }
   2908};
   2909
   2910MODULE_DEVICE_TABLE(pnp, parport_pc_pnp_tbl);
   2911
   2912static 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
   2952static 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/* we only need the pnp layer to activate the device, at least for now */
   2962static 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
   2970static struct pnp_driver parport_pc_pnp_driver;
   2971#endif /* CONFIG_PNP */
   2972
   2973static int parport_pc_platform_probe(struct platform_device *pdev)
   2974{
   2975	/* Always succeed, the actual probing is done in
   2976	 * parport_pc_probe_port(). */
   2977	return 0;
   2978}
   2979
   2980static struct platform_driver parport_pc_platform_driver = {
   2981	.driver = {
   2982		.name	= "parport_pc",
   2983	},
   2984	.probe		= parport_pc_platform_probe,
   2985};
   2986
   2987/* This is called by parport_pc_find_nonpci_ports (in asm/parport.h) */
   2988static int __attribute__((unused))
   2989parport_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/* This function is called by parport_pc_init if the user didn't
   3004 * specify any ports to probe.  Its job is to find some ports.  Order
   3005 * is important here -- we want ISA ports to be registered first,
   3006 * followed by PCI cards (for least surprise), but before that we want
   3007 * to do chipset-specific tests for some onboard ports that we know
   3008 * about.
   3009 *
   3010 * autoirq is PARPORT_IRQ_NONE, PARPORT_IRQ_AUTO, or PARPORT_IRQ_PROBEONLY
   3011 * autodma is PARPORT_DMA_NONE or PARPORT_DMA_AUTO
   3012 */
   3013static 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	/* Onboard SuperIO chipsets that show themselves on the PCI bus. */
   3024	count += parport_pc_init_superio(autoirq, autodma);
   3025
   3026	/* PnP ports, skip detection if SuperIO already found them */
   3027	if (!count) {
   3028		err = pnp_register_driver(&parport_pc_pnp_driver);
   3029		if (!err)
   3030			pnp_registered_parport = 1;
   3031	}
   3032
   3033	/* ISA ports and whatever (see asm/parport.h). */
   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 *	Piles of crap below pretend to be a parser for module and kernel
   3043 *	parameters.  Say "thank you" to whoever had come up with that
   3044 *	syntax and keep in mind that code below is a cleaned up version.
   3045 */
   3046
   3047static int __initdata io[PARPORT_PC_MAX_PORTS+1] = {
   3048	[0 ... PARPORT_PC_MAX_PORTS] = 0
   3049};
   3050static int __initdata io_hi[PARPORT_PC_MAX_PORTS+1] = {
   3051	[0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO
   3052};
   3053static int __initdata dmaval[PARPORT_PC_MAX_PORTS] = {
   3054	[0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_NONE
   3055};
   3056static int __initdata irqval[PARPORT_PC_MAX_PORTS] = {
   3057	[0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY
   3058};
   3059
   3060static 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
   3084static 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
   3090static 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
   3097static 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
   3117static char *irq[PARPORT_PC_MAX_PORTS];
   3118static char *dma[PARPORT_PC_MAX_PORTS];
   3119
   3120MODULE_PARM_DESC(io, "Base I/O address (SPP regs)");
   3121module_param_hw_array(io, int, ioport, NULL, 0);
   3122MODULE_PARM_DESC(io_hi, "Base I/O address (ECR)");
   3123module_param_hw_array(io_hi, int, ioport, NULL, 0);
   3124MODULE_PARM_DESC(irq, "IRQ line");
   3125module_param_hw_array(irq, charp, irq, NULL, 0);
   3126MODULE_PARM_DESC(dma, "DMA channel");
   3127module_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))
   3130MODULE_PARM_DESC(verbose_probing, "Log chit-chat during initialisation");
   3131module_param(verbose_probing, int, 0644);
   3132#endif
   3133#ifdef CONFIG_PCI
   3134static char *init_mode;
   3135MODULE_PARM_DESC(init_mode,
   3136	"Initialise mode for VIA VT8231 port (spp, ps2, epp, ecp or ecpepp)");
   3137module_param(init_mode, charp, 0);
   3138#endif
   3139
   3140static 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		/* The user can make us use any IRQs or DMAs we find. */
   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
   3185static int parport_setup_ptr __initdata;
   3186
   3187/*
   3188 * Acceptable parameters:
   3189 *
   3190 * parport=0
   3191 * parport=auto
   3192 * parport=0xBASE[,IRQ[,DMA]]
   3193 *
   3194 * IRQ/DMA may be numeric or 'auto' or 'none'
   3195 */
   3196static 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		/* Disable parport if "parport=0" in cmdline */
   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
   3245static int __init parse_parport_params(void)
   3246{
   3247	return io[0] == PARPORT_DISABLE;
   3248}
   3249
   3250__setup("parport=", parport_setup);
   3251
   3252/*
   3253 * Acceptable parameters:
   3254 *
   3255 * parport_init_mode=[spp|ps2|epp|ecp|ecpepp]
   3256 */
   3257#ifdef CONFIG_PCI
   3258__setup("parport_init_mode=", parport_init_mode_setup);
   3259#endif
   3260#endif
   3261
   3262/* "Parser" ends here */
   3263
   3264static 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		/* Only probe the ports we were given. */
   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
   3293static 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
   3315MODULE_AUTHOR("Phil Blundell, Tim Waugh, others");
   3316MODULE_DESCRIPTION("PC-style parallel port driver");
   3317MODULE_LICENSE("GPL");
   3318module_init(parport_pc_init)
   3319module_exit(parport_pc_exit)