home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / sys / hp / 8793 < prev    next >
Encoding:
Internet Message Format  |  1992-07-31  |  2.9 KB

  1. From: rdg@hpfcso.FC.HP.COM (Rob Gardner)
  2. Date: Fri, 31 Jul 1992 20:01:50 GMT
  3. Subject: Re: device driver for 720
  4. Message-ID: <7371202@hpfcso.FC.HP.COM>
  5. Organization: Hewlett-Packard, Fort Collins, CO, USA
  6. Path: sparky!uunet!elroy.jpl.nasa.gov!sdd.hp.com!hpscdc!cupnews0.cup.hp.com!hppad.waterloo.hp.com!hppad!hpfcso!rdg
  7. Newsgroups: comp.sys.hp
  8. References: <60041@hpfcse.HP.COM>
  9. Lines: 79
  10.  
  11. > > 2) A "id" is required. There is no specification of what the id looks like,
  12. > > how to create it, set it. Again please direct me to info on how to create
  13. > > the device driver id.
  14. > The id is read from the eisa card (at offset 0xC80 in its I/O space)
  15. > and passed into your attach routine (first argument). Is this what
  16. > you're talking about? Or are you asking how to create the id to be
  17. > programmed into the card? There might be some algorithm, but I think
  18. > it's also OK to choose a random 32-bit integer, since the chances
  19. > of collision with another vendor's id are small.
  20.  
  21.  
  22. Ah, I found the correct answer in the EISA specification. There is an
  23. algorithm for constructing ID's, so I wrote the attached summary. DON'T
  24. use a random ID as I suggested before.
  25.  
  26. Rob
  27.  
  28.  
  29. Explanation of EISA ID's.
  30. -------------------------
  31.  
  32. Construct a 7 character ID as follows: MMMPPPR
  33.  
  34. MMM is a 3 character manufacturer code, consisting of only [A-Z]
  35. PPP is a 3 digit hex product identifier
  36. R is a 1 digit hex revision number.
  37.  
  38. For example, HWP123A might be an ID. This is the ID that you specify
  39. in your EISA config file in the ID statement. For example:
  40.  
  41.     BOARD
  42.       ID = "HWP123A"
  43.       NAME = "Example"
  44.     etc.
  45.  
  46. This 7 character ID is "compressed" into a 32-bit integer which is
  47. found at offset 0xC80 in the I/O space of the EISA card. The
  48. compression happens like this:
  49.  
  50. Take the least significant 5 bits of the ASCII value of each character
  51. in the manufacturer code, and form a 16 bit number by concatenating them
  52. and putting a 0 bit in the high bit:
  53.     0[5-bits-from-1st-char][5-bits-from-2nd-char][5-bits-from-3rd-char]
  54.  
  55. Now put the high byte of this 16-bit number into 0xC80, and put the
  56. low byte into 0xC81.
  57.  
  58. Put the high two bytes of the product identifier into 0xC82. Put
  59. the low byte of the product and the revision digit into 0xC83.
  60.  
  61. For example, using the  ID "HWP123A" we would get:
  62.     H = ascii 0x48 = 0100 1000
  63.     W = ascii 0x57 = 0101 0111
  64.     P = ascii 0x50 = 0101 0000
  65.  
  66. Taking the 5 bit chunks, we get:
  67.     0 01000 10111 10000 ===> 0x22f0
  68. So 0xC80 would get 0x22, and 0xC81 would get 0xf0.
  69.  
  70. Handling the product id and rev code, 0xC82 would get 0x12, and 0xC83
  71. would get 0x3A.
  72.  
  73. The entire 32 bit ID, after appropriate byte swapping would be
  74. 0x22f0123A. This is the value you should define in your driver to
  75. compare with the ID read from the card. For instance:
  76.  
  77. #define MY_ID 0x22f0123A
  78.  
  79. my_attach(id, isc)
  80. int id;
  81. struct isc_table_type *isc;
  82. {
  83.     if (id == MY_ID) {
  84.         /* it's my card */
  85.         ...
  86.     }
  87.     return((*my_saved_attach)(id, isc));
  88. }
  89.