Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Jan 2000 11:17:46 +0900 (JST)
From:      Atsushi Onoe <onoe@sm.sony.co.jp>
To:        mobile@freebsd.org
Subject:   Re: pccardd patch [Auto select config index]
Message-ID:  <200001270217.LAA02198@duplo.sm.sony.co.jp>
In-Reply-To: Your message of "Tue, 25 Jan 2000 05:42:29 %2B0900" <200001242042.FAA02072@tasogare.imasy.or.jp>
References:  <200001242042.FAA02072@tasogare.imasy.or.jp>

index | next in thread | previous in thread | raw e-mail

[-- Attachment #1 --]
I've tested the pccardd patch with several cards, and found no
problems by chainging config index to "auto" for most of all cards.
Only for ata flash (not supported in -current yet), I must specify
appropriate index.

> Attached patch allow you to specify config index something like
> 	config auto "sio3" ?
> or 
> 	config default "ed0" ?
> in your pccard.conf like PAO configuration.
> 
> There are a lot of sio (sio1, 2, 3, 4 are mixed) entries in
> pccard.conf.sample, but it seems we don't have guidelines for new
> entry registration.  Once we get guideline, we just rewrite
> pccard.conf.sample. But it is not easy to survey again to get suitable
> config index for many cards...
> 
> Then I made following patch, we don't need to survey again, just put 
> `auto' as config index and "sio3" (or sio4) as driver name in usual cases.
> 
> Specifying `auto', pccardd try to find cis_config entry which have
> available i/o port dynamically.
> 
> Would this be one of the 4.0-RELEASE candidates?

Summary:

test environment
	FreeBSD-current as of Jan 26 0800 JST
		GENERIC kernel (with awi driver, ata-flash patch)
	VAIO PCG-N505
		only sio0 is visible as serial
			(infrared, modem are disabled)
	pccard.conf
		add "irq 10"
		"io" description is left unmodified

* works fine with "config auto"
	card "NCR" "WaveLAN/IEEE"
	card "ACCTON" "EN2216-PCMCIA-ETHERNET"
	card "3Com Corporation" "3C589D"
	card "AD PC_CARD" "RC288ACL" 
	card "3Com" "Megahertz 589E"

* works fine with "config auto", though it has no entry in -current
	card "NTT DoCoMo" "PCMCIA DATA/FAX ADAPTER 9600 Mark2"
	card "MEGAHERTZ" "CC/XJEM3336"

* works fine with "config auto", though it has no driver in current:-)
	card "Bay Networks" "BayStack 650 Wireless LAN"
	card "Icom" "SL-200"

	- awi driver will be found in ftp://onoe2.sm.sony.co.jp/pub/awi/

* only works with "config 0x01", failed with "config auto"
	card "SONY" "MEMORYSTICK(  4M)"
	card "SONY" "MEMORYSTICK( 32M)"
	card "SONY" "MEMORYSTICK( 64M)"

	auto chooses io port from config index 3 (0x170 == ata1)
	since GENERIC kernel has static configuration for ata1,
	alloc_unit slides it to ata2.
	io port 0x170 is already used for ata1, and fails to probe.

	- attached patch (originally posted to -mobile by Warner)
	  enables to attach ATA flash only once during boot...

Atsushi Onoe

[-- Attachment #2 --]
#### Listed in pccard.conf.sample, works fine with "auto"

# NCR WaveLAN/IEEE
card "NCR" "WaveLAN/IEEE"
	config	auto "wi0" ?
	insert	logger -t pccard:$device -s WaveLAN/IEEE inserted
	insert	/etc/pccard_ether $device
	remove	logger -t pccard:$device -s WaveLAN/IEEE removed
	remove	/sbin/ifconfig $device delete
pccardd: Using I/O addr 0x240, size 64 
pccardd: Setting config reg at offs 0x3e0 to 0x41, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x240, size 0x40 flags 0x5 
pccardd: Assign wi0, io 0x240-0x27f, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: wi0: <WaveLAN/IEEE 802.11> at port 0x240-0x27f irq 10 slot 0 on pccard0
/kernel: wi0: Ethernet address: 00:60:1d:04:e1:64
pccard:wi0: WaveLAN/IEEE inserted

#Accton 2216
card "ACCTON" "EN2216-PCMCIA-ETHERNET"
	config	auto "ed0" ?
	insert	logger -t pccard:$device -s Accton 2216 inserted
	insert	/etc/pccard_ether $device
	remove	logger -t pccard:$device -s Accton 2216 removed
	remove	/sbin/ifconfig $device delete
pccardd: Using I/O addr 0x240, size 32 
pccardd: Setting config reg at offs 0x3f8 to 0x60, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x240, size 0x20 flags 0x7 
pccardd: Assign ed0, io 0x240-0x25f, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: devclass_alloc_unit: ed0 already exists, using next available unit number
/kernel: ed1 at port 0x240-0x25f irq 10 slot 0 on pccard0
/kernel: ed1: address 00:00:e8:3a:4d:aa, type NE2000 (16 bit) 
pccard:ed1: Accton 2216 inserted

# 3Com Etherlink III 3C589D
card "3Com Corporation" "3C589D"
	config	auto "ep0" ?
	insert	logger -t pccard:$device -s 3Com Etherlink III inserted
	insert	/etc/pccard_ether $device
	remove	logger -t pccard:$device -s 3Com Etherlink III removed
	remove	/sbin/ifconfig $device delete
pccardd: Using I/O addr 0x240, size 16 
pccardd: Setting config reg at offs 0x10000 to 0x41, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x240, size 0x10 flags 0x7 
pccardd: Assign ep0, io 0x240-0x24f, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: ep0: <3Com Etherlink III 3C589> at port 0x240-0x24f irq 10 slot 0 on pccard0
/kernel: ep0: Ethernet address 00:60:08:b2:56:4f
pccard:ep0: 3Com Etherlink III inserted

# Apex Data 28.8 PC Card "MOBILE PLUS Cellular" modem. 
card "AD PC_CARD" "RC288ACL" 
	config	auto "sio2" ? 
	insert	logger -t pccard:$device -s Apex Data Mobile Plus 28.8 Modem inserted 
	remove	logger -t pccard:$device -s Apex Data Mobile Plus 28.8 Modem removed 
pccardd: Using I/O addr 0x2f8, size 8 
pccardd: Setting config reg at offs 0x200 to 0x61, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x2f8, size 0x8 flags 0x1 
pccardd: Assign sio2, io 0x2f8-0x2ff, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: devclass_alloc_unit: sio2 already exists, using next available unit number
/kernel: sio4 at port 0x2f8-0x2ff irq 10 slot 0 on pccard0
/kernel: sio4: type 16550A
pccard:sio4: Apex Data Mobile Plus 28.8 Modem inserted

# 3Com Megahertz 3CCE589E* 10 Mbps LAN PC Card
card "3Com" "Megahertz 589E"
	config	auto "ep0" ?
	insert	logger -t pccard:$device -s 3Com Megahertz Ethernet card inserted
	insert	/etc/pccard_ether $device
	remove	logger -t pccard:$device -s 3Com Megahertz Ethernet card removed
	remove	/sbin/ifconfig $device delete
pccardd: Using I/O addr 0x240, size 16 
pccardd: Setting config reg at offs 0x10000 to 0x41, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x240, size 0x10 flags 0x7 
pccardd: Assign ep0, io 0x240-0x24f, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: ep0: <3Com Etherlink III 3C589> at port 0x240-0x24f irq 10 slot 0 on pccard0
/kernel: ep0: Ethernet address 00:00:86:31:c4:85
pccard:ep0: 3Com Megahertz Ethernet card inserted

#### Not Listed in pccard.conf.sample, works fine with "auto"

# NTT DoCoMo DATA/FAX Adapter
card "NTT DoCoMo" "PCMCIA DATA/FAX ADAPTER 9600 Mark2"
	config	auto "sio3" ?
	insert	logger -t pccard:$device -s NTT DoCoMo DATA/FAX Adapter inserted
	remove	logger -t pccard:$device -s NTT DoCoMo DATA/FAX Adapter removed
pccardd: Using I/O addr 0x2f8, size 8 
pccardd: Setting config reg at offs 0x300 to 0x61, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x2f8, size 0x8 flags 0x1 
pccardd: Assign sio3, io 0x2f8-0x2ff, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: devclass_alloc_unit: sio3 already exists, using next available unit number
/kernel: sio4 at port 0x2f8-0x2ff irq 10 slot 0 on pccard0
/kernel: sio4: type 16550A
pccard:sio4: NTT DoCoMo DATA/FAX Adapter inserted

# Megahertz XJEM1336 (as modem)
card "MEGAHERTZ" "CC/XJEM3336"
	config	auto "sio2" ?
	insert	logger -t pccard:$device -s Megahertz CC/XJEM3336 inserted
	remove	logger -t pccard:$device -s Megahertz CC/XJEM3336 removed
pccardd: Using I/O addr 0x2f8, size 8 
pccardd: Setting config reg at offs 0x100 to 0x61, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x2f8, size 0x8 flags 0x1 
pccardd: Assign sio2, io 0x2f8-0x2ff, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: devclass_alloc_unit: sio2 already exists, using next available unit number
/kernel: sio4 at port 0x2f8-0x2ff irq 10 slot 0 on pccard0
/kernel: sio4: type 16550A
pccard:sio4: Megahertz CC/XJEM3336 inserted

#### No drivers in -current yet, works fine with "auto"

card "Bay Networks" "BayStack 650 Wireless LAN"
	config	auto "awi0" ?
	insert	logger -t pccard:$device -s Bay Networks BayStack 650 inserted
	remove	logger -t pccard:$device -s Bay Networks BayStack 650 removed
pccardd: Using I/O addr 0x300, size 16 
pccardd: Setting config reg at offs 0x800 to 0x43, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x300, size 0x10 flags 0x1 
pccardd: Assign awi0, io 0x300-0x30f, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: awi0: <PCnetMobile:v2.00 033098 API004> at port 0x300-0x30f irq 10 slot 0 on pccard0
pccard:awi0: Bay Networks BayStack 650 inserted
/kernel: awi0: IEEE802.11 (FH 1Mbps) address 00:20:d8:01:07:23

card "Icom" "SL-200"
	config	auto "awi0" ?
	insert	logger -t pccard:$device -s Icom SL-200 inserted
	remove	logger -t pccard:$device -s Icom SL-200 removed
pccardd: Using I/O addr 0x240, size 16 
pccardd: Setting config reg at offs 0x800 to 0x42, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x240, size 0x10 flags 0x1 
pccardd: Assign awi0, io 0x240-0x24f, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: awi0: <PCnetMobile:v2.01 101498 API005> at port 0x240-0x24f irq 10 slot 0 on pccard0
pccard:awi0: Icom SL-200 inserted
/kernel: awi0: IEEE802.11 (DS 2Mbps) address 00:90:c7:07:04:ef

#### No drivers in -current yet, do not works with "auto"
card "SONY" "MEMORYSTICK( 64M)"
	config	0x01 "ata1" ?
	insert	logger -t pccard:$device -s Sony Memorystick inserted
	remove	logger -t pccard:$device -s Sony Memorystick removed
pccardd: Using I/O addr 0x240, size 16 
pccardd: Setting config reg at offs 0x200 to 0x41, Reset time = 50 ms 
pccardd: Assigning I/O window 0, start 0x240, size 0x10 flags 0x7 
pccardd: Assign ata1, io 0x240-0x24f, mem 0x0, 0 bytes, irq 10, flags 0 
/kernel: devclass_alloc_unit: ata1 already exists, using next available unit number
/kernel: ata2 at port 0x240-0x24f irq 10 slot 0 on pccard0
/kernel: ad4: 61MB <MEMORYSTICK 64M 16K> [990/8/16] at ata2-master using PIO1
pccard:ata2: Sony Memorystick inserted

[-- Attachment #3 --]
Index: ata-all.c
===================================================================
RCS file: /export/FBSDC/src/sys/dev/ata/ata-all.c,v
retrieving revision 1.44
diff -c -r1.44 ata-all.c
*** ata-all.c	2000/01/25 20:14:48	1.44
--- ata-all.c	2000/01/26 14:40:52
***************
*** 30,35 ****
--- 30,36 ----
  
  #include "ata.h"
  #include "apm.h"
+ #include "card.h"
  #include "isa.h"
  #include "pci.h"
  #include "atadisk.h"
***************
*** 87,92 ****
--- 88,99 ----
  static void btrim(int8_t *, int32_t);
  static void bpack(int8_t *, int8_t *, int32_t);
  
+ #if NCARD > 0
+ static	int	ata_pccard_attach __P((device_t dev));
+ static	int	ata_pccard_detach __P((device_t dev));
+ static	int	ata_pccard_probe __P((device_t dev));
+ #endif /* NCARD > 0 */
+ 
  /* local vars */
  static int32_t atanlun = 2;
  static struct intr_config_hook *ata_attach_hook = NULL;
***************
*** 135,141 ****
      res = ata_probe(rman_get_start(port), rman_get_start(port) + ATA_ALTPORT,
  		    0, dev, &lun);
  
!     bus_release_resource(dev, SYS_RES_IOPORT, 0, port);
  
      if (res) {
  	isa_set_portsize(dev, res);
--- 142,148 ----
      res = ata_probe(rman_get_start(port), rman_get_start(port) + ATA_ALTPORT,
  		    0, dev, &lun);
  
!     bus_release_resource(dev, SYS_RES_IOPORT, rid, port);
  
      if (res) {
  	isa_set_portsize(dev, res);
***************
*** 152,169 ****
      struct resource *port;
      struct resource *irq;
      void *ih;
!     int rid;
  
      /* Allocate the port range and interrupt */
!     rid = 0;
!     port = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, 1, RF_ACTIVE);
      if (!port)
  	return (ENOMEM);
  
!     rid = 0;
!     irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1, RF_ACTIVE);
      if (!irq) {
! 	bus_release_resource(dev, SYS_RES_IOPORT, 0, port);
  	return (ENOMEM);
      }
      return bus_setup_intr(dev, irq, INTR_TYPE_BIO, ataintr, 
--- 159,176 ----
      struct resource *port;
      struct resource *irq;
      void *ih;
!     int prid, irqrid;
  
      /* Allocate the port range and interrupt */
!     prid = 0;
!     port = bus_alloc_resource(dev, SYS_RES_IOPORT, &prid, 0, ~0, 1, RF_ACTIVE);
      if (!port)
  	return (ENOMEM);
  
!     irqrid = 0;
!     irq = bus_alloc_resource(dev, SYS_RES_IRQ, &irqrid, 0, ~0, 1, RF_ACTIVE);
      if (!irq) {
! 	bus_release_resource(dev, SYS_RES_IOPORT, prid, port);
  	return (ENOMEM);
      }
      return bus_setup_intr(dev, irq, INTR_TYPE_BIO, ataintr, 
***************
*** 186,191 ****
--- 193,330 ----
  DRIVER_MODULE(ata, isa, ata_isa_driver, ata_devclass, 0, 0);
  #endif
  
+ #if NCARD > 0
+ static int
+ ata_pccard_probe(dev)
+ 	device_t	dev;
+ {
+     struct resource *port;
+     int rid;
+     int32_t res;
+     int32_t lun;
+     struct intr_config_hook *ata_attach_hook_save;
+ 
+     /* Allocate the port range */
+     rid = 0;
+     port = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0, ~0, 16, RF_ACTIVE);
+     /* XXX 16 shouldn't be hard coded */
+ 
+     if (!port)
+ 	return (ENOMEM);
+     
+     /* don't worry about conflict since PCCard code should have checked 
+        already */
+     /*
+      * XXX ALTPORT not used in pccard XXX
+      * Here's the i/o map for isa vs pccard
+      * Offset		isa	pccard
+      * DATA		0	0
+      * ERROR		1	1	R
+      * FEATURE		1	1	W
+      * COUNT		2	2	W
+      * IREASON		2	2	R
+      * SECTOR		3	3
+      * CYL_LSB		4	4
+      * CYL_MSB		5	5
+      * DRIVE		6	6
+      * CMD		7	7
+      * STATUS		7	7
+      * ALTSTATUS	206	8	R
+      * CTLR		206	8	W
+      * wd_digin		207	9
+      */
+     lun = 0;
+     /* do not callback intrhook */
+     ata_attach_hook_save = ata_attach_hook;
+     ata_attach_hook = (struct intr_config_hook *)-1;
+     res = ata_probe(rman_get_start(port), 
+ 	rman_get_start(port) + ATA_ALTPORT_ONE_WINDOW, 0, dev, &lun);
+     ata_attach_hook = ata_attach_hook_save;
+ 
+     bus_release_resource(dev, SYS_RES_IOPORT, rid, port);
+ 
+     if (res) {
+ 	*(int *)device_get_softc(dev) = lun;
+ 	return 0;
+     }
+     return ENXIO;
+ }
+ 
+ static int
+ ata_pccard_attach(dev)
+ 	device_t	dev;
+ {
+     struct ata_softc *scp;
+     int lun;
+     int status;
+     
+     lun = *(int *)device_get_softc(dev);
+     scp = atadevices[lun];
+     scp->flags |= ATA_USE_16BIT;
+     /* Allocate the port range and interrupt */
+     scp->port_rid = 0;
+     scp->port = bus_alloc_resource(dev, SYS_RES_IOPORT, &scp->port_rid, 0, ~0,
+ 	1, RF_ACTIVE);
+     if (!scp->port) {
+ 	/* XXX Need to free things ? */
+ 	return (ENOMEM);
+     }
+ 
+     scp->irq_rid = 0;
+     scp->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &scp->irq_rid, 0, ~0, 1,
+ 	RF_ACTIVE);
+     if (!scp->irq) {
+ 	/* XXX Need to free things ? */
+ 	bus_release_resource(dev, SYS_RES_IOPORT, scp->port_rid, scp->port);
+ 	return (ENOMEM);
+     }
+     status = bus_setup_intr(dev, scp->irq, INTR_TYPE_BIO, ataintr, scp,
+ 	&scp->ih);
+     /* XXX The following really should just scan *THIS* device XXX */
+     if (status != 0) {
+ 	bus_release_resource(dev, SYS_RES_IRQ, scp->irq_rid, scp->irq);
+ 	bus_release_resource(dev, SYS_RES_IOPORT, scp->port_rid, scp->port);
+ 	return ENXIO;
+     }
+     ata_attach(NULL);
+     return 0;
+ }
+ 
+ static int
+ ata_pccard_detach(dev)
+ 	device_t	dev;
+ {
+     struct ata_softc *scp;
+     int lun;
+     
+     lun = *(int *)device_get_softc(dev);
+     scp = atadevices[lun];
+     bus_teardown_intr(dev, scp->irq, scp->ih);
+     bus_release_resource(dev, SYS_RES_IRQ, scp->irq_rid, scp->irq);
+     bus_release_resource(dev, SYS_RES_IOPORT, scp->port_rid, scp->port);
+     printf("ata%d: I can't be dettached ata\n", lun);
+     return EIO;
+ }
+ 
+ 
+ static device_method_t ata_pccard_methods[] = {
+ 	/* Device interface */
+ 	DEVMETHOD(device_probe,		ata_pccard_probe),
+ 	DEVMETHOD(device_attach,	ata_pccard_attach),
+ 	DEVMETHOD(device_detach,	ata_pccard_detach),
+ 
+ 	{ 0, 0 }
+ };
+ 
+ static driver_t ata_pccard_driver = {
+ 	"ata",
+ 	ata_pccard_methods,
+ 	sizeof(int),
+ };
+ 
+ DRIVER_MODULE(ata, pccard, ata_pccard_driver, ata_devclass, 0, 0);
+ #endif (NCARD > 0)
+ 
  #if NPCI > 0
  static const char *
  ata_pcimatch(device_t dev)
***************
*** 526,531 ****
--- 665,671 ----
      scp->lun = lun;
      scp->unit = *unit;
      scp->active = ATA_IDLE;
+     scp->probed = 0;
  
      if (bootverbose)
  	ata_printf(scp, -1, "iobase=0x%04x altiobase=0x%04x bmaddr=0x%04x\n", 
***************
*** 641,646 ****
--- 781,787 ----
       */
      for (ctlr=0; ctlr<MAXATA; ctlr++) {
  	if (!atadevices[ctlr]) continue;
+ 	if (atadevices[ctlr]->probed & (ATA_PROBE|ATAPI_PROBE)) continue;
  	if (atadevices[ctlr]->devices & ATA_ATA_SLAVE)
  	    if (ata_getparam(atadevices[ctlr], ATA_SLAVE, ATA_C_ATA_IDENTIFY))
  		atadevices[ctlr]->devices &= ~ATA_ATA_SLAVE;
***************
*** 659,664 ****
--- 800,807 ----
      /* now we know whats there, do the real attach, first the ATA disks */
      for (ctlr=0; ctlr<MAXATA; ctlr++) {
  	if (!atadevices[ctlr]) continue;
+ 	if (atadevices[ctlr]->probed & ATA_PROBE) continue;
+ 	atadevices[ctlr]->probed |= ATA_PROBE;
  	if (atadevices[ctlr]->devices & ATA_ATA_MASTER)
  	    ad_attach(atadevices[ctlr], ATA_MASTER);
  	if (atadevices[ctlr]->devices & ATA_ATA_SLAVE)
***************
*** 669,674 ****
--- 812,819 ----
      /* then the atapi devices */
      for (ctlr=0; ctlr<MAXATA; ctlr++) {
  	if (!atadevices[ctlr]) continue;
+ 	if (atadevices[ctlr]->probed & ATAPI_PROBE) continue;
+ 	atadevices[ctlr]->probed |= ATAPI_PROBE;
  	if (atadevices[ctlr]->devices & ATA_ATAPI_MASTER)
  	    atapi_attach(atadevices[ctlr], ATA_MASTER);
  	if (atadevices[ctlr]->devices & ATA_ATAPI_SLAVE)
***************
*** 795,801 ****
--- 940,948 ----
  ata_start(struct ata_softc *scp)
  {
      struct ad_request *ad_request; 
+ #if NATAPICD > 0 || NATAPIFD > 0 || NATAPIST > 0
      struct atapi_request *atapi_request;
+ #endif
  
      if (scp->active != ATA_IDLE)
  	return;
Index: ata-all.h
===================================================================
RCS file: /export/FBSDC/src/sys/dev/ata/ata-all.h,v
retrieving revision 1.21
diff -c -r1.21 ata-all.h
***************
*** 87,92 ****
--- 87,93 ----
  #define		ATA_S_BUSY		0x80	/* busy */
  
  #define ATA_ALTPORT			0x206	/* alternate Status register */
+ #define ATA_ALTPORT_ONE_WINDOW		0x08	/* Alternate port for pccard */
  #define		ATA_A_IDS		0x02	/* disable interrupts */
  #define		ATA_A_RESET		0x04	/* RESET controller */
  #define		ATA_A_4BIT		0x08	/* 4 head bits */
***************
*** 291,296 ****
--- 292,305 ----
  #define		ATA_ACTIVE_ATA		0x4
  #define		ATA_ACTIVE_ATAPI	0x5
  #define		ATA_REINITING		0x6
+     int32_t                     probed;         /* already probed */
+ #define         ATA_PROBE               0x1
+ #define         ATAPI_PROBE             0x2
+     struct resource *		port;
+     struct resource *		irq;
+     int				port_rid;
+     int				irq_rid;
+     void			*ih;
  
      TAILQ_HEAD(, ad_request)	ata_queue;	/* head of ATA queue */
      TAILQ_HEAD(, atapi_request) atapi_queue;	/* head of ATAPI queue */
Index: ata-dma.c
===================================================================
RCS file: /export/FBSDC/src/sys/dev/ata/ata-dma.c,v
retrieving revision 1.27
diff -c -r1.27 ata-dma.c
*** ata-dma.c	2000/01/24 20:45:24	1.27
--- ata-dma.c	2000/01/26 14:40:53
***************
*** 67,72 ****
--- 67,73 ----
      int32_t devno = (scp->unit << 1) + ATA_DEV(device);
      int32_t error;
  
+     scp->mode[ATA_DEV(device)] = ata_pio2mode(apiomode);
      if (!scp->bmaddr)
  	return -1;
  
***************
*** 657,662 ****
--- 658,664 ----
  ata_dmainit(struct ata_softc *scp, int32_t device,
  	    int32_t piomode, int32_t wdmamode, int32_t udmamode)
  {
+     scp->mode[ATA_DEV(device)] = ata_pio2mode(apiomode);
      return -1;
  }
  
home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001270217.LAA02198>