From nobody@FreeBSD.ORG Wed Nov 17 13:07:34 1999
Return-Path: <nobody@FreeBSD.ORG>
Received: by hub.freebsd.org (Postfix, from userid 32767)
	id E5ACA14CCD; Wed, 17 Nov 1999 13:07:33 -0800 (PST)
Message-Id: <19991117210733.E5ACA14CCD@hub.freebsd.org>
Date: Wed, 17 Nov 1999 13:07:33 -0800 (PST)
From: p.kessen@lixus.com
Sender: nobody@FreeBSD.ORG
To: freebsd-gnats-submit@freebsd.org
Subject: Compaq EISA array controller not working
X-Send-Pr-Version: www-1.0

>Number:         14960
>Category:       kern
>Synopsis:       Compaq EISA array controller not working
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Nov 17 13:10:03 PST 1999
>Closed-Date:    Sun Apr 16 07:00:31 PDT 2000
>Last-Modified:  Sun Apr 16 07:01:55 PDT 2000
>Originator:     Patrick
>Release:        3.3-release
>Organization:
>Environment:
FreeBSD enterprise.startrek.home 3.3-RELEASE FreeBSD 3.3-RELEASE #0: Wed Nov 17 21:24:50 CET 1999     root@enterprise.startrek.home:/usr/src/sys/compile/CPQ  i386

>Description:
When I've compiled a kernel with the Compaq Smart array adapter support
at boot time the output is:

ida: port address (0xffffffff) out of range
ida0 not found

>How-To-Repeat:
I've compiled the kernel with the options suggested in the LINT file 
for using the controller. As far as I know this problem only exhists
on machines with the EISA version of the Smart controller.
I have the battery-backuped caching version of the EISA SMART controller.



>Fix:


>Release-Note:
>Audit-Trail:

From: Patrick Kessen <p.kessen@lixus.com>
To: freebsd-gnats-submit@freebsd.org
Cc: p.kessen@lixus.com
Subject: RE: kern/14960: Compaq EISA array controller not working
Date: Fri, 19 Nov 1999 03:21:15 +0100

 The status now is that the controller is detected:
 
 in ida.c I changed
 ________________this:_____________________
 
   if (dev->id_iobase) {
     /* check out the configured iobase if given one */
     slot = dev->id_iobase / 0x1000;
     if (slot == 0 || slot > MAX_EISA_SLOT) {
 
 ______________into this:____________________________________________
 
   if (dev->id_iobase) {
     /* check out the configured iobase if given one */
     slot = 6;
 /* dev->id_iobase / 0x1000; */
     if (slot == 0 || slot > MAX_EISA_SLOT) {
 
 
 _____________meaning:______________________________________________
 My eisa smart array adapter is in eisa slot 6, look no further.
 as far as I see the code then has no problem determining the portaddress
 and irq.
 
 _________this is the boot output:___________________________________
 /kernel: eisa0: <CPQ811 (System Board)>
 /kernel: Probing for devices on the EISA bus
 /kernel: ep0: <3Com 3C579-TP EISA Network Adapter> at 0x1000-0x100f,
 0x1c80-0x1c89 irq 5
 /kernel: ep0: on eisa0 slot 1
 /kernel: ep0: aui/utp[*UTP*] address 00:20:af:1d:1b:e3
 /kernel: eisa0:6 <CPQ4020=0xe114020> unknown device
 /kernel: Probing for devices on PCI bus 0:
 /kernel: ncr0: <ncr 53c825 fast10 wide scsi> rev 0x02 int a irq 10 on
 pci0.10.0
 /kernel: vga0: <S3 ViRGE DX/GX graphics accelerator> rev 0x01 int a irq 14
 on pci0.12.0 
 /kernel: chip0: <Intel 82375EB PCI-EISA bridge> rev 0x04 on pci0.15.0
 /kernel: Probing for devices on the ISA bus:
 /kernel: sc0 on isa
 /kernel: sc0: VGA color <16 virtual consoles, flags=0x0>
 /kernel: atkbdc0 at 0x60-0x6f on motherboard
 /kernel: atkbd0 irq 1 on isa
 /kernel: psm0 irq 12 on isa
 /kernel: psm0: model Generic PS/2 mouse, device ID 0
 /kernel: sio0 at 0x3f8-0x3ff irq 4 flags 0x10 on isa
 /kernel: sio0: type 16550A
 /kernel: sio1 at 0x2f8-0x2ff irq 3 flags 0x10 on isa
 /kernel: sio1: type 16550A
 /kernel: ppc0 at 0x3bc irq 7 on isa
 /kernel: ppc0: Generic chipset (NIBBLE-only) in COMPATIBLE mode
 /kernel: lpt0: <generic printer> on ppbus 0
 /kernel: lpt0: Interrupt-driven port
 /kernel: ida0: drvs=1 firm_rev=2.26
 /kernel: ida0 at 0x6000-0x6fff irq 15 on eisa slot 6
 /kernel: ida0: unit 0 (id0): <Compaq Logical Drive>
 /kernel: id0: 10028MB (20538720 total sec), 2517 cyl, 255 head, 32 sec, 
 bytes/sec 512
 /kernel: ida: wdc vector stealing off (mode = never, boot major = 4)
 /kernel: ida0: irq with no handler
 
 
 ____ ida0: irq with no handler__________________
 this one is a mystery to me, in the visual kernel config under the
 miscelanious section there are 2 ida0 entries so the 2nd one must be the
 one this warning is about.
 
 ______more info_______________________________
 I essentially defined the following as well
 
 options         IDA_CUCKOO_MODE=0
 
 this I had to do because if I didn't my machine would do a trap12
 right after detecting the array adapter.
 
 
 By essentially I mean that when I added it to my kernel config file (CPQ)
 the make depend action came with the following error:
 
 controller      ida0    at isa? bio irq ? vector idaintr
 disk            id0     at ida0 drive 0 
 disk            id1     at ida0 drive 1
 disk            id2     at ida0 drive 2 
 disk            id3     at ida0 drive 3
 options         IDA_CUCKOO_MODE=0
 controller      fdc0    at isa? port "IO_FD1" bio irq 6 drq 2
 disk            fd0     at fdc0 drive 0
 disk            fd1     at fdc0 drive 1
 device          sio0    at isa? port "IO_COM1" tty flags 0x10 irq 4
 device          sio1    at isa? port "IO_COM2" tty flags 0x10 irq 3
 options         CONSPEED=9600           #default speed for serial console
 (default 9600)
 controller      eisa0
 device          ep0     at eisa?
 device          ep0     at eisa?
 controller      pci0
 controller      ncr0
 controller      ppbus0 
 device          lpt0    at ppbus?
 device          ppc0    at isa? port? tty irq 7
 
 File CPQ saved.
 root@enterprise# /usr/sbin/config -r CPQ
 Removing old directory ../../compile/CPQ:  Done.
 CPQ:96: unknown option "IDA_CUCKOO_MODE"
 Don't forget to do a ``make depend''
 Kernel build directory is ../../compile/CPQ
 
 ___________how I solved this problem_______________
 I changed another bit of code in ida.c
 
 ________________this:____________________________
 /* IDA wdc vector stealing (cuckoo) control */
 #define IDA_CUCKOO_NEVER 0              /* never steal wdc vectors */
 #define IDA_CUCKOO_ROOTWD 1             /* steal iff rootdev is wd device */ 
 #define IDA_CUCKOO_ROOTNOTIDA 2         /* steal if rootdev not ida device
 */
 #define IDA_CUCKOO_ALWAYS 3             /* always steal wdc vectors */
 
 #ifndef IDA_CUCKOO_MODE
 #define IDA_CUCKOO_MODE IDA_CUCKOO_ALWAYS
 #endif
 
 
 ________________into this:_____________________ 
 /* IDA wdc vector stealing (cuckoo) control */
 #define IDA_CUCKOO_NEVER 0              /* never steal wdc vectors */
 #define IDA_CUCKOO_ROOTWD 1             /* steal iff rootdev is wd device */
 #define IDA_CUCKOO_ROOTNOTIDA 2         /* steal if rootdev not ida device */
 #define IDA_CUCKOO_ALWAYS 3             /* always steal wdc vectors */
 
 #ifndef IDA_CUCKOO_MODE
 #define IDA_CUCKOO_MODE IDA_CUCKOO_NEVER
 /* IDA_CUCKOO_ALWAYS */
 #endif
 
 ________________now there's more___________________________________
 no ida or id devices are in /dev
 
 I can't make them with MAKEDEV
 
 How do I make them. Now my controller is found I'd like to use the storage
 space;)
 
 
State-Changed-From-To: open->closed 
State-Changed-By: mdodd 
State-Changed-When: Sun Apr 16 07:00:31 PDT 2000 
State-Changed-Why:  
IDA driver in CURRENT will work with EISA controllers now. 
>Unformatted:
