idevice(4) (RM400 only) idevice(4)
NAME
idevice - interrupt configuration file
DESCRIPTION
Each package that uses EISA/ISA bus interrupts must supply an idevice
file which specifies the interrupt requirements of the package.
When the package is installed (using idinstall), the idevice part of
the package is copied into the idevice.d directory of the kernel link
kit. At kernel link time, these component files are concatenated into
a single file which is then processed by idintconf. This command gen-
erates a data structure that is used at kernel boot time to allocate
the use of EISA/ISA bus interrupt resources.
The idevice file consists of one or more lines, each line describes an
interrupt resource required by the device. Each line consists of nine
white space separated fields. The first field can be quoted using dou-
ble quotes. The other fields cannot be quoted. All fields must be sup-
plied. Comment lines are lines that start with a "#" or a "*".
Where allowed a "-" character is used to specify that the field should
be undefined. The "*" character is used to specify the default value
for the field. Normally this consists of the Internal name with a
field dependent string appended to it.
In later revisions of the file, it is expected that more fields will
be added to each line. It is thus inadvisable to place comments at the
end of the line.
The current implementation contains the following fields:
Colloquial name
The first field of each line is a human readable name for the
device which is used when idintconf or the kernel must generate a
diagnostic. This field must be unique for all lines relating to
the same driver. This field can be quoted using double quotes. It
is the only field that can be quoted.
Internal name
The second field is the name to be used to generate symbols for
the kernel. It is the same as the Device name field in sdevice.
This field is used to generate other fields that have been
defaulted.
If this field is set to "-" or "*", the value of this field is
the same as the Colloquial name. This is not allowed if the Col-
loquial name contains any white space characters.
Bus type
This field specifies which type of bus interface the hardware
has. This can either be ISA or EISA. There is no default for this
field. This field can be shortened to "I" or "E" respectively.
Page 1 Reliant UNIX 5.44 Printed 11/98
idevice(4) (RM400 only) idevice(4)
Interrupt type
If the hardware has an ISA interface, this field can be set to
EDGE or a "-" which defaults to EDGE. No other value can be used
for ISA cards. This is because of a hardware restriction in the
original design of the AT bus.
If the hardware has an EISA interface, this field is used to
specify the type of interrupt that the hardware can handle. This
can be either EDGE, for edge triggered devices, or LEVEL for
level triggered devices, or SHARED. There is no default for this
field on an EISA bus device.
The SHARED type can be used for devices which use level triggered
interrupts and which can determine at interrupt time if the
hardware has actually interrupted. This is because all interrupt
routines that share an interrupt will be called when an interrupt
is detected. The order in which these interrupt routines is
called is NOT defined.
This field can be shortened to the first letter of the value if
required.
Number of Interrupts
Most devices usually use only one interrupt for each card so this
field is normally set to 1. However some cards use more than one
interrupt per hardware card, e.g. the chase card. In this case,
this field is set to the number of interrupts that each card
uses. For example the chase would have a value of 2.
There is no default value for this field.
Possible Interrupts
This field consists of a comma separated list of possible inter-
rupts that the card can use. This list is logically grouped into
n-tuples. The size of each n-tuple is defined by the Number of
interrupts field. In the normal case the n-tuple has a length of
1 so that each value is treated separately.
For ISA bus devices, the interrupt number cannot be changed under
software control (on some cards this may be possible but in gen-
eral it is not). This means that only the first n-tuple is used.
idintconf and the kernel will give warnings if there is a clash
of interrupt numbers. In this case the following n-tuples are
used to inform the user of a possible jumpering change that would
allow the use of the card. If there is an interrupt clash between
two ISA bus devices, both devices will be disabled. This is
because of a hardware restriction in the original AT bus design.
On EISA bus devices, the interrupt number can be dynamically
assigned so as not to conflict with other devices. In this case
each n-tuple is tried in turn. If the n-tuple does not conflict
with any other interrupts, then the card is assigned that n-
Page 2 Reliant UNIX 5.44 Printed 11/98
idevice(4) (RM400 only) idevice(4)
tuple. If however all n-tuples cause a conflict, the kernel tries
to rearrange all conflicting interrupts so that they no longer
clash. If two or more devices are currently sharing an interrupt,
then they will not be rearranged. In this way, it is hoped that
all interrupt conflicts can be avoided. If the conflicting device
is an ISA device, its interrupt number cannot be changed. If all
possible arrangements of interrupts cause conflicts, then the
device will not be enabled, and no interrupt will be assigned to
the device.
The n-tuples of this field should be arranged in preferred order,
i.e. the interrupt number that is most preferred should be the
first on the list.
Interrupt routine
This field specifies the name of the interrupt handling function
to be used by this device. In the normal case, where the driver
only uses one interrupt per device, this field can be defaulted
by supplying a "*". If this is done, the function will be called
internalnameintr.
If the driver requires more than one interrupt per device, this
field will then become a comma separated list of interrupt func-
tions that are to be used. In this case there is no default
action since enough interrupt routines per device must be sup-
plied. The ordering with respect to interrupt numbers is lexical.
I.e. the first interrupt routine is called by an interrupt on the
first interrupt number, the second interrupt routine is called by
an interrupt on the second interrupt number.
If a "-" is supplied, then there is no interrupt function speci-
fied, the use of this is for future study.
Existence routine
This field is the name of a routine which is the first one of the
driver called. It is called before the drivers' init routine. The
purpose of this routine is to determine if the device actually
exists. If the device exists, then the routine should return
PROBEOK. If the device does not exist, the routine should return
PROBEFAIL. If the driver cannot determine if the device exists,
it should return PROBEOK.
To allow the driver to determine which hardware device is to be
checked, this routine is passed the address of a intrparamt
structure. The fields in this structure can be used to determine
which device is being checked.
If this field is a "-", then no existence routine is supplied, in
this case the kernel will assume that the device exists and
proceed as if the routine had returned PROBEOK.
If this field is a "*", the name of the routine will be
Page 3 Reliant UNIX 5.44 Printed 11/98
idevice(4) (RM400 only) idevice(4)
internalnameexist.
For more information see the XXexist(5) manual page.
Set interrupt routine
This field specifies the name of a function that is called after
the exist routine but before the init routine. This function is
called if the kernel has been able to allocate interrupts for the
device. If this routine is not called, the kernel was not able to
allocate interrupts for the device and so the device should not
initialize itself. A driver which returns PROBEFAIL from the
exist routine for a given device will never have its setint rou-
tine called for that device.
This routine is passed two parameters, the first is a pointer to
a list of integers which are the interrupt lines that have be
assigned to the given device. A pointer is used because some
devices require more than one interrupt. It is assumed that the
setint routine knows how many interrupts it has been assigned.
The second parameter is a pointer to a intrparamt structure,
the members of this structure can be used to determine which
device the interrupts are being assigned to.
If a "*" is given in this field, the routine will be called
internalnamesetint. If a "-" is given, then no setint function
has been supplied, the use of this value is for future study.
If neither the setint or exist routines are called, the driver
can assume that it is running on a system which does not have
dynamic interrupt assignment i.e. a pre 5.42 kernel.
Use of idevice
Each line in the idevice file describes an instance of a driver/device
pair. Each line in the idevice file must have a corresponding entry in
the sdevice file. Each line in the idevice defines the requirements of
one piece of hardware. If a driver can support multiple EISA devices
that can share resources i.e. interrupt numbers and interrupt devices,
then only one line need be supplied in idevice. In this case the sde-
vice entry will enable or disable all of the devices. And it is the
responsibility of the driver to handle the exist and setint routines
correctly.
FILES
idevice
sdevice
SEE ALSO
idintconf(1M), XXexist(5), XXsetint(5).
Page 4 Reliant UNIX 5.44 Printed 11/98