[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference turris::digital_unix

Title:DIGITAL UNIX(FORMERLY KNOWN AS DEC OSF/1)
Notice:Welcome to the Digital UNIX Conference
Moderator:SMURF::DENHAM
Created:Thu Mar 16 1995
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:10068
Total number of notes:35879

9498.0. "Writing ISA board driver" by ANNECY::BIC_V () Tue Apr 15 1997 04:32

Hi,

a partner of us is writing on our behalf a driver for an ISA board on an
AlphaServer 1000 5/300.

This partner is very familiar with SCO UNIX drivers, but it is the first time
he develops one for Digital UNIX. He has got the various related guides, but he
still have some questions. Here they are:

1- his hardware follows Microsoft Plug'n'Play rules. Most of those rules are
not usefull under UNIX. However, one of them is. He uses a fixed I/O addresses
(0x0279 and 0x0A79) for querying the hardware identifier, in addition to the
I/O range, configurable per board, used for later communication . He would like
to know if he has to declare those fixed addresses with the ECU. More
generally, except for interrupts, where the role of the PCI-EISA bridge is
clear, he would like to know if declaring I/O and mem at the ECU level is just
for the info to be passed to the driver, or also for configuring the bridge for
granting access to the specified I/O and mem ranges.

2-he has got to define an interrupt handler. According to the doc, he is
offered with two possibilities:
- statically in his config.file
- dynamically with the function handler_add

In both cases, he can't see where the ISA IRQ is to be declared, except in
!ISAxxxx.CFG.

If UNIX deals with it on its own, using the handler_addr structure, what is the
related IPL? He needs to know it if he wants to block INT (splxxx()).

3- is there any example of an ISA driver somewhere, with all the related config
files? The doc seems to focus much more on TurboChannel drivers.

Thanks for your help

Vincent
   
T.RTitleUserPersonal
Name
DateLines
9498.1NNTPD::"[email protected]"Alex MaloneTue Apr 15 1997 15:2343
What version of Digital UNIX is he developing for?
What version of the Driver docs is he referring to?

1. There is no need to declare 0x279 and its alias 0xa79 in ECU,
    since the address is read-only and intended for LPT3 status.
    (i.e. you are not going to cause adverse effects by writing to it)
    If there is a device on LPT3(rare), is the value read correct?
    You can access the addresses through io handles which you can acquire
    by calling busphys_to_iohandle with your ISA hardware's controller struct.
    
   pnp_addr_reg = busphys_to_iohandle(0x279, BUS_IO, ctlrptr);
   pnp_wrdata_reg = busphys_to_iohandle(0xA79, BUS_IO, ctlrptr);

 example of usage:  
   WRITE_BUS_D8(pnp_addr_req,0x0);
   mb();
   WRITE_BUS_D8(pnp_wrdata_reg,0x41);
   mb();
   data = READ_BUS_D8(pnp_wrdata_req);

 As far as I know, the ECU information is for the sole purpose of
   passing the data to the EISA bus code.  (Drivers can only access
   assigned resources via get_config())

2. If you are using Digital UNIX V4.0 or greater, use handler_add(), etc..
   Until we support ISA PNP devices, any io/irq resources are to
   be entered via the ECU.  The eisa bus code then knows which interrupt
   to associate with your handler when you call handler_add(). At this time,
   there is no way for you to specify which IRQ that you want to associate
   with your driver.

3. All device interrupts on PCI and EISA are assigned a IPL of 21

4. Check out http://www.zk3.dec.com/~malone/sblaster.html for an
   example ISA driver.  There is a skeleton driver generator on the 
   internal web at http://www.zk3.dec.com/uhs (a TCL/Tk version will
   be available soon)

Hope this helps,
Alex

[Posted by WWW Notes gateway]