The type of the member id_port in isa_device structure is signed short
and a value is converted int unsigned long to allocate I/O port
resource via bus_alloc_resources. If an I/O port >= 0x8000,
conversion from signed short to unsigned long causes unexpected result
and nexus_alloc_resouce cannot allocate resouce.
Fix is:
---------- BEGIN ----------
*** isa.c.orig Sat Apr 24 20:55:32 1999
--- isa.c Sat Apr 24 20:55:24 1999
***************
*** 75,81 ****
* The structure used to attach devices to the isa bus.
*/
struct isa_device {
! short id_port[ISA_NPORT_IVARS];
u_short id_portsize[ISA_NPORT_IVARS];
vm_offset_t id_maddr[ISA_NMEM_IVARS];
vm_size_t id_msize[ISA_NMEM_IVARS];
--- 75,81 ----
* The structure used to attach devices to the isa bus.
*/
struct isa_device {
! u_short id_port[ISA_NPORT_IVARS];
u_short id_portsize[ISA_NPORT_IVARS];
vm_offset_t id_maddr[ISA_NMEM_IVARS];
vm_size_t id_msize[ISA_NMEM_IVARS];
---------- END ----------
If this should not be in sys/i386/isa, I will copy this file into
sys/pc98/pc98. Comment please.
-----------------------------------------------+--------------------------+
KATO Takenori <[email protected]> | FreeBSD |
Dept. Earth Planet. Sci, Nagoya Univ. | The power to serve! |
Nagoya, 464-8602, Japan | http://www.FreeBSD.org/ |
++++ FreeBSD(98) 3.1: Rev. 01 available! |http://www.jp.FreeBSD.org/|
++++ FreeBSD(98) 2.2.8: Rev. 01 available! +==========================+
To Unsubscribe: send mail to [email protected]
with "unsubscribe freebsd-current" in the body of the message