Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 May 1995 07:12:33 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        esser@ZPR.Uni-Koeln.DE, rgrimes@gndrsh.aac.dev.com
Cc:        current@FreeBSD.org
Subject:   Re: Enthusiasm boost: make world works on 386SX16 4Mb
Message-ID:  <199505172112.HAA29877@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>The problem is, that the current interrupt statistics scheme is 
>tightly bound to ISA.

>The register_intr() function gets a device_id, which is used to 
>initialise the intr_countp[] and intrnames[] arrays.

Urk.  You currently use device_id 0, so all pci interrupts get
counted as clock interrupts.

>Since device_id is an index into an ISA specific data structure
>(which doesn't make much sense for a PCI device), there is no
>valid device_id for any PCI device.

It's actually only an index into intr_countp[] and intrnames[].
Config is supposed to fill in all device tables with suitable
indexes and build a string table to match.  You can fake this
now using dummy isa devices:

	device	PCI0	at isa?
	...
	device	PCI15	at isa?

Use a trivial failing probe routine to copy the ids to a pci-specific
place.

>The easy solution to this problem would be to make register_intr()
>less specific to ISA by passing an &intrcnt and an intrname 
>parameter instead of the ISA device id.

>This would require (very simple) changes to:

>/sys/i386/isa/isa_device.h	(prototype)
>/sys/i386/isa/isa.c		(definition + a few calls)
>/sys/i386/isa/clock.c		(2 calls)
>/sys/i386/isa/pcibus.c		(1 call)
>/sys/i386/eisa/eisaconf.c	(1 call)

It would also require changing intrnames[] from a string table to an
array and changing systat etc. to expect an array.  This should be
done someday.

Bruce



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