Subject: kern/4883: cy_isa never probes.
To: None <gnats-bugs@gnats.netbsd.org>
From: Andreas Wrede <andreas@planix.com>
List: netbsd-bugs
Date: 01/24/1998 10:25:21
>Number:         4883
>Category:       kern
>Synopsis:       cy_isa.c checks for wildcarded i/o address, but the board does not use i/o ports.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people (Kernel Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jan 24 07:35:01 1998
>Last-Modified:
>Originator:     Andreas Wrede
>Organization:
Planix, Inc.
>Release:        <NetBSD-current source date> NetBSD 1.3 release
>Environment:
	
System: NetBSD darkstar 1.3 NetBSD 1.3 (DARKSTAR) #6: Fri Jan 23 18:15:22 EST 1998  root@darkstar:/var/local/src/netbsd/src/sys/arch/i386/compile/DARKSTAR i386

>Description:
	
The cyclades ISA front cy_isa.c checks if the i/o port parameter in 
the kernel config file was a wildcard and exits if it is. To my 
knowledge, cyclades boards do not use i/o ports, so the test always 
succeeds and the board is never probed.

>How-To-Repeat:
	
Install a properly configured cylcom-y ISA card and boot a kernel with 
a cy driver configured for the isa bus. Observe that the driver does 
not receognize the card.

>Fix:
	
Apply the following fix:

*** src/sys/dev/isa/cy_isa.c.orig	Tue Oct 21 04:19:24 1997
--- src/sys/dev/isa/cy_isa.c	Fri Jan 23 18:14:54 1998
***************
*** 45,53 ****
  	sc.sc_memt = ia->ia_memt;
  	sc.sc_bustype = CY_BUSTYPE_ISA;
  
! 	/* Disallow wildcarded i/o address. */
! 	if (ia->ia_iobase == ISACF_PORT_DEFAULT)
  		return (0);
  
  	if (ia->ia_irq == IRQUNK) {
  		printf("%s: interrupt not defined\n", sc.sc_dev.dv_xname);
--- 45,55 ----
  	sc.sc_memt = ia->ia_memt;
  	sc.sc_bustype = CY_BUSTYPE_ISA;
  
! 	/* Disallow wildcarded memory address. */
! 	if (ia->ia_maddr == ISACF_IOMEM_DEFAULT) {
! 		printf("%s: memory addr not defined\n", sc.sc_dev.dv_xname);
  		return (0);
+ 	}
  
  	if (ia->ia_irq == IRQUNK) {
  		printf("%s: interrupt not defined\n", sc.sc_dev.dv_xname);
>Audit-Trail:
>Unformatted: