home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v5.zip / DDKX86 / SRC / DOS / DOSINC / ABIOS.INC next >
Encoding:
Text File  |  1995-04-14  |  8.7 KB  |  268 lines

  1. ;*DDK*************************************************************************/
  2. ;
  3. ; COPYRIGHT (C) Microsoft Corporation, 1989
  4. ; COPYRIGHT    Copyright (C) 1995 IBM Corporation
  5. ;
  6. ;    The following IBM OS/2 WARP source code is provided to you solely for
  7. ;    the purpose of assisting you in your development of OS/2 WARP device
  8. ;    drivers. You may use this code in accordance with the IBM License
  9. ;    Agreement provided in the IBM Device Driver Source Kit for OS/2. This
  10. ;    Copyright statement may not be removed.;
  11. ;*****************************************************************************/
  12. ;       SCCSID = @(#)abios.inc  6.4 92/02/26
  13. ;      SCCSID = @(#)abios.inc   6.4 92/02/26
  14. ;   ABIOS.INC
  15. ;
  16. ;   Definitions for ABIOS
  17. ;
  18. ; ****************************************************************************
  19. ; *                                                                          *
  20. ; *                                                                          *
  21. ; *                                                                          *
  22. ; ****************************************************************************
  23.  
  24. ;
  25. ;   Initialization INT Definitions
  26. ;
  27.  
  28. ABIOS_Build_SPT equ     4h              ; Build System Parameter Table
  29. ABIOS_Build_IT  equ     5h              ; Build Initialization Table
  30.  
  31.  
  32. ;
  33. ;   RAM Patch Header Structure
  34. ;
  35.  
  36. RamPatch        struc
  37. RamPatchSig         dw    ?             ; Signature (0aa55h)
  38. RamPatchSize        db    ?             ; Ram Patch Size in 512 byte blocks
  39. RamPatchModel       db    ?             ; Model
  40. RamPatchSubModel    db    ?             ; Sub-Model
  41. RamPatchRevision    db    ?             ; Revision
  42. RamPatchDevID       dw    ?             ; Device ID
  43. RamPatchNumInit     db    ?             ; Number of Initialization Entries
  44. RamPatchInitEntry   dw    ?             ; Initialization Table Entry Point
  45.                     db    ?             ; Initialization Table Entry Point
  46. RamPatchSecDevID    db    ?             ; Secondary Device ID
  47. RamPatchRev         db    ?             ; Revision
  48. RamPatchExtLength   dw    ?             ; Extended Header Length
  49. RamPatchWildCard    dw    ?             ; Wild Card Install Routine
  50. RamPatchSizeNoFill  dw    ?             ; Size - not rounded to 512 bytes
  51. RamPatchInitRoutine dw    ?             ; Initialization Routine offset
  52. RamPatch        ends
  53.  
  54. RamPatchSTDLen  EQU     16              ; Length of Standard ABIOS Patch Header
  55.  
  56. ;
  57. ;   ABIOS System Parameter Table Format
  58. ;
  59.  
  60. SPTbl           struc
  61.                 dd      ?               ; Common Start Entry Point
  62.                 dd      ?               ; Common Interrupt Entry Point
  63.                 dd      ?               ; Common Timeout Entry Point
  64.                 dw      ?               ; Stack Required for ABIOS
  65.                 db      16 dup (?)      ; Reserved
  66. NumEntries      dw      ?               ; Number of Init_Table Entries
  67. SPTbl           ends
  68.  
  69.  
  70. ;
  71. ;   ABIOS Initialization Table Entry Format
  72. ;
  73.  
  74. IT_Entry        struc
  75. DeviceID        dw      ?               ; Device ID
  76. DeviceCount     dw      ?               ; Number of LIDs for this Device
  77. DBLength        dw      ?               ; Device Block Length
  78. InitDB_XferPtr  dd      ?               ; Init Device Block Routine Pointer
  79.                 dw      ?               ; Request Block Length
  80. FTTLength       dw      ?               ; Function Transfer Table Length
  81. DPLength        dw      ?               ; Data Pointers Length
  82.                 dw      4 dup (?)       ; Reserved
  83. IT_Entry        ends
  84.  
  85.  
  86. ;
  87. ;   Common Data Area Structure for Status fields in LID 0
  88. ;
  89.  
  90. CDAType         struc
  91. CDADPOffset     dw      0               ; Offset to Data Pointers
  92. CDALids         dw      0               ; # of LIDs
  93. CDAType         ends
  94.  
  95.  
  96. ;
  97. ;   Structure for one LID in CDA:
  98. ;       Device Block Pointer
  99. ;       Function Transfer Table Pointer
  100. ;
  101.  
  102. LIDEntry        struc
  103. DBOffset        dw      ?               ; Devie Block Offset
  104. DBSegment       dw      ?               ; Device Block Segment
  105. FTTOffset       dw      ?               ; Function Transfer Table Offset
  106. FTTSegment      dw      ?               ; Function Transfer Table Segment
  107. LIDEntry        ends
  108.  
  109.  
  110.  
  111. ;
  112. ;   Definitions for ABIOS Device Types
  113. ;
  114.  
  115. ABIOS_Internal  equ     00h             ; ABIOS Internal Calls
  116. Diskette        equ     01h
  117. Disk            equ     02h
  118. Video           equ     03h
  119. Keyboard        equ     04h
  120. Printer         equ     05h
  121. Asynch          equ     06h
  122. SysTimer        equ     07h
  123. RTCTimer        equ     08h
  124. SysService      equ     09h
  125. NMInterrupt     equ     0ah
  126. PointDevice     equ     0bh
  127. LightPen        equ     0ch
  128. JoyStick        equ     0dh
  129. CMOSRam         equ     0eh
  130. DMA             equ     0fh
  131. POS             equ     10h             ; Programmable Option Select
  132. ErrorLog        equ     11h             ; Error Logging
  133. SAD             equ     12h             ; Stand Alone Dump
  134. IOPortAlloc     equ     13h             ; I/O Port Allocation
  135. AudioTone       equ     14h
  136. IntController   equ     15h             ; Interrupt Controller
  137. Security        equ     16h
  138.  
  139.  
  140. ;
  141. ;   Structure of a Device Block
  142. ;
  143. ;   Note that the Device Block is a variable size, but these
  144. ;   fields are always present.
  145. ;
  146.  
  147. DeviceBlock     struc
  148. DevBLength      dw      ?       ; Device Block Length
  149. Revision        db      ?       ; Revision
  150.                 db      ?       ; Reserved
  151.                 dw      ?       ; Logical ID
  152. DevID           dw      ?       ; Device ID
  153. DeviceBlock     ends
  154.  
  155. ;
  156. ;   Structure of a Function Transfer Table
  157. ;
  158. ;   Note that the Function Transfer Table is a variable size, but these
  159. ;   fields are always present.
  160. ;
  161.  
  162. FTTable         struc
  163. FStart          dd      ?       ; Start Routine Entry Point
  164. FInt            dd      ?       ; Interrupt Routine Entry Point
  165. FTimeO          dd      ?       ; Start Routine Entry Point
  166. FuncCount       dw      ?       ; Count of FUnctions for this Logical ID
  167.                 dw      ?       ; Reserved
  168. FTTable         ends
  169.  
  170.  
  171. ;
  172. ;   Format of a Data Pointer in CDA
  173. ;
  174.  
  175. DataPtr         struc
  176. DLimit          dw      ?       ; Limit Field
  177. DOffset         dw      ?       ; Offset Field
  178. DSegment        dw      ?       ; Segment Field
  179. DataPtr         ends
  180.  
  181. ;
  182. ;   Format of a Physical Data Pointer (INTEL FORMAT) in CDA
  183. ;
  184.  
  185. PhysPtr         struc
  186.                 dw      ?       ; Limit Field
  187. PhysLSW         dw      ?       ; Lo Order 16 Bits
  188. PhysMSW         dw      ?       ; Hi Order 16 Bits
  189. PhysPtr         ends
  190.  
  191.  
  192.  
  193. ;
  194. ;   Structure for dh_ABIOSGetParms Area in a Device Driver's Data Segment
  195. ;
  196. ;   Note that this is a black box area to device drivers. They should not
  197. ;   attepmt to interpret the contents of ABIOS_Parms, and should also use
  198. ;   the CallABIOS macro.
  199. ;
  200.  
  201. ABIOS_Parms     struc
  202. RealCDA         dw      ?       ; Real Mode CDA Anchor
  203. ProtCDA         dw      ?       ; Protect Mode CDA Anchor
  204. RealFTT         dd      ?       ; Real Mode FTT Ptr
  205. ProtFTT         dd      ?       ; Protect Mode FTT Ptr
  206. RealDB          dd      ?       ; Real Mode DB Ptr
  207. ProtDB          dd      ?       ; Protect Mode DB Ptr
  208. ABIOS_Parms     ends
  209.  
  210. ;
  211. ;   Macro for device drivers to use to invoke ABIOS from a device driver.
  212. ;   Preserves DevHlp(ABIOSCall) Interface.
  213. ;
  214. ;   Entry:
  215. ;       DS = Device Driver Data Segment
  216. ;       SI = Offset to Request Block
  217. ;       DI = Offset to ABIOS_Parms Structure
  218. ;       DH = # Funtion to call
  219. ;
  220. ;   Exit:
  221. ;       'C' is Clear
  222. ;       Destroys no registers, ABIOS Retcode is in Request Block
  223. ;
  224.  
  225. CallABIOS   macro
  226. local   aprot, acont
  227.  
  228.     SaveReg     <es,bx,dx>
  229.  
  230.     .386p
  231.     smsw    bx
  232.     test    bl,1
  233.     jnz     short aprot
  234.                                         ; Real Mode Case
  235.         push    [di].RealCDA            ; Anchor
  236.         push    ds
  237.         push    si                      ; Request Block
  238.         les     bx,[di].RealFTT         ; ES:BX -> Function Transfer Table
  239.         push    es
  240.         push    bx                      ; Function Transfer Table
  241.         push    [di].RealDB             ; Device Block
  242.         jmp     short acont
  243.  
  244.         align   4
  245. aprot:                                  ; Protect Mode Case
  246.         push    [di].ProtCDA            ; Anchor
  247.         push    ds
  248.         push    si                      ; Request Block
  249.         les     bx,[di].ProtFTT         ; ES:BX -> Function Transfer Table
  250.         push    es
  251.         push    bx                      ; Function Transfer Table
  252.         push    [di].ProtDB             ; Device Block
  253.  
  254. acont:
  255.  
  256.     xor     dl,dl
  257.     shr     dx,6
  258.     add     bx,dx
  259.     call    dword ptr es:[bx]
  260.     add     sp,14
  261.     CPUMode reset
  262.  
  263.     RestoreReg  <dx,bx,es>
  264.     clc
  265.  
  266.     endm
  267.  
  268.