home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / g / gtak212.zip / OS2-DD / dd.h < prev    next >
C/C++ Source or Header  |  1993-01-16  |  10KB  |  362 lines

  1. /*****************************************************************************
  2.  * $Id: dd.h,v 1.4 1992/07/24 11:34:00 ak Exp $
  3.  *****************************************************************************
  4.  * $Log: dd.h,v $
  5.  * Revision 1.4  1992/07/24  11:34:00  ak
  6.  * OS/2 2.0
  7.  * BASEDEV drivers
  8.  * VGA debugging
  9.  *
  10.  * Revision 1.3  1992/01/07  07:50:22  ak
  11.  * DevHlp function which return error state only
  12.  * now return byte instead of word. Corresponds
  13.  * to SETxx.
  14.  *
  15.  * Revision 1.2  1992/01/06  22:48:44  ak
  16.  * int_on/off() for != ZTC.
  17.  *
  18.  * Revision 1.1.1.1  1992/01/06  19:54:02  ak
  19.  * Alpha version.
  20.  *
  21.  * Revision 1.1  1992/01/06  19:54:00  ak
  22.  * Initial revision
  23.  *
  24.  *****************************************************************************
  25.  * -DBASEDEV    for BASEDEV drivers
  26.  *****************************************************************************/
  27.  
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. /****************************************************************************/
  34.  
  35. typedef unsigned char    byte;
  36. typedef unsigned short    word;
  37. typedef unsigned long    dword;
  38.  
  39. typedef dword        paddr;
  40. typedef dword        handle;
  41.  
  42. typedef void        _near *    nearptr;
  43. typedef void        _far * farptr;
  44.  
  45. typedef void        (_far * farfcn) (void);
  46. typedef void        (_far * farptrfcn) (farptr);
  47.  
  48. #define Segment(p)    (word)((dword)(farptr)(p) >> 16)
  49. #define Offset(p)    (word)((dword)(farptr)(p))
  50. #define Pointer(s,o)    (farptr)((dword)(s) << 16 | (dword)(o))
  51.  
  52. /************************************************************************/
  53. /*        Device driver interface definitions.            */
  54. /************************************************************************/
  55.  
  56. typedef struct ReqPkt ReqPkt;
  57. struct ReqPkt {
  58.     byte        len;                /* 00 */
  59.     byte        unit;                /* 01 */
  60.     byte        cmd;                /* 02 */
  61.     word        status;                /* 03 */
  62.     dword        reserved;            /* 05 */
  63.     ReqPkt _far *    link;                /* 09 */
  64.     union {
  65.         struct {            /* INIT in */
  66.             byte    _1_;            /* 0D */
  67.             farptr    devhlp;            /* 0E */
  68.             farptr    cmdline;        /* 12 */
  69.             byte    firstUnit;        /* 16 */
  70.         } ini;
  71.         struct {            /* INIT out */
  72.             byte    nunits;            /* 0D */
  73.             word    endCode;        /* 0E */
  74.             word    endData;        /* 10 */
  75.             farptr    bpb;            /* 12 */
  76.         } ino;
  77.         struct {            /* READ/WRITE/VERIFY */
  78.             byte    media;            /* 0D */
  79.             paddr    addr;            /* 0E */
  80.             word    count;            /* 12 */
  81.             dword    sector;            /* 14 */
  82.             word    fileno;            /* 18 */
  83.         } rw;
  84.         struct {
  85.             byte    ch;        /* PEEK    */
  86.         } pk;
  87.         struct {            /* OPEN/CLOSE */
  88.             word    fileno;            /* 0D */
  89.         } oc;
  90.         struct {            /* IOCTL */
  91.             byte    cat;            /* 0D */
  92.             byte    fcn;            /* 0E */
  93.             farptr    parm;            /* 0F */
  94.             farptr    data;            /* 13 */
  95.             word    fileno;            /* 17 */
  96.             word    plen;            /* 19 */
  97.             word    dlen;            /* 1B */
  98.         } ioc;
  99.     } u;
  100. };
  101.  
  102. typedef ReqPkt _far * ReqPtr;
  103.  
  104. /* Status codes */
  105. #define DONE    0x0100
  106. #define BUSY    0x0200
  107. #define DEVERR    0x4000
  108. #define ERROR    0x8000
  109.  
  110. /* Error codes */
  111. #define WriteProtect    0x00
  112. #define UnknownUnit    0x01
  113. #define DeviceNotReady    0x02
  114. #define InvalidCommand    0x03
  115. #define CRCError    0x04
  116. #define BadReqStruct    0x05
  117. #define SeekError    0x06
  118. #define UnknownMedia    0x07
  119. #define SectorNotFound    0x08
  120. #define NoPaper        0x09
  121. #define WriteFault    0x0A
  122. #define ReadFault    0x0B
  123. #define GeneralFailure    0x0C
  124. #define ChangeDisk    0x0D
  125. #define UncertainMedia    0x10
  126. #define Interrupted    0x11
  127. #define NoMonitors    0x12
  128. #define InvalidParam    0x13
  129.  
  130. /* Char-device command codes */
  131. #define DevInit        0x00    /* DEVICE init, ring 3 */
  132. #define DevRead        0x04
  133. #define DevPeek        0x05
  134. #define DevInputStatus    0x06
  135. #define DevInputFlush    0x07
  136. #define DevWrite    0x08
  137. #define DevWriteVerify    0x09
  138. #define DevOutputStatus    0x0A
  139. #define DevOutputFlush    0x0B
  140. #define DevOpen        0x0D
  141. #define DevClose    0x0E
  142. #define DevIOCtl    0x10
  143. #define DevDeinstall    0x14
  144. #define DevPortaccess    0x15
  145. #define DevBaseInit    0x1B    /* 2.0 BASEDEV init, ring 0 */
  146. #define DevShutdown    0x1C    /* 2.0 */
  147.  
  148. /* IOCtl categories */
  149. #define IOCtlAsync    1
  150. #define IOCtlPointer    2
  151. #define IOCtlVideo    3
  152. #define IOCtlScreen    4
  153. #define IOCtlKeyboard    5
  154. #define IOCtlPrinter    6
  155. #define IOCtlMouse    7
  156. #define IOCtlLogDisk    8
  157. #define IOCtlPhysDisk    9    
  158. #define IOCtlMonitor    10
  159. #define IOCtlGeneral    11
  160.  
  161. /* IOCtlGeneral function codes */
  162. #define GenFlushInput     0x01
  163. #define GenFlushOutput     0x02
  164. #define GenSessionSwitch 0x41
  165. #define GenQueryMonitor     0x60
  166.  
  167. typedef struct DevHeader {
  168.     dword        link;
  169.     word        attr;
  170.     word        entries [2];
  171.     byte        name [8];
  172.     word        protCS, protDS;
  173.     word        realCS, realDS;
  174. } DevHeader;
  175.  
  176. extern DevHeader    header;        /* caution: near address is NULL */
  177.  
  178. /************************************************************************/
  179. /*        Device helper functions.                */
  180. /************************************************************************/
  181.  
  182. #define Infinite    0xFFFFFFFFL
  183.  
  184. extern word    AllocGDTSelector (farptr sels, word nsels);
  185. extern paddr    AllocPhys     (dword size);
  186. extern ReqPtr    AllocReqPkt     (word waitflag);
  187. extern byte    AttachDD     (nearptr name, nearptr area);
  188. extern int    Block         (dword id, dword time, word interruptible);
  189. extern void    DevDone         (ReqPtr reqpkt);
  190. extern void    DispMsg         (farptr msgtab);
  191. extern void    EOI         (word irqnum);
  192. extern byte    FreePhys     (paddr);
  193. extern void    FreeReqPacket     (ReqPtr);
  194. extern farptr    GetDOSVar     (word varnum, word cx);
  195. extern void    InternalError     (farptr msg, word len);
  196. extern handle    Lock         (word seg, word flags);
  197. extern word    PhysToGDTSelector(paddr addr, word len, word sel);
  198. extern farptr    PhysToUVirt     (paddr addr, word len, word type, word tag);
  199. extern word    ProtToReal     (void);
  200. extern byte    PullParticular     (nearptr queue, ReqPtr reqpkt);
  201. extern ReqPtr    PullReqPacket     (nearptr queue);
  202. extern word    PushReqPacket     (nearptr queue, ReqPtr reqpkt);
  203. extern void    QueueFlush     (nearptr queue);
  204. extern void    QueueInit     (nearptr queue);
  205. extern int    QueueRead     (nearptr queue);
  206. extern byte    QueueWrite     (nearptr queue, word ch);
  207. extern byte    RealToProt     (void);
  208. extern byte    RegisterStackUsage(nearptr data);
  209. extern byte    ResetTimer     (farfcn handler);
  210. extern word    Run         (dword id);
  211. extern word    SemClear     (handle);
  212. extern handle    SemHandle     (dword semid, word inuse);
  213. extern word    SemRequest     (handle h, dword timeout);
  214. extern byte    SendEvent     (word event, word arg);
  215. extern byte    SetIRQ         (farfcn handler, word irqnum, word shared);
  216. extern dword    SetROMVector     (farfcn handler, word intnum, word saveDS);
  217. extern byte    SetTimer     (farfcn handler);
  218. extern void    SortReqPacket     (nearptr queue, ReqPtr reqpkt);
  219. extern void    TCYield         (void);
  220. extern byte    TickCount     (farfcn handler, word tick_count);
  221. extern byte    Unlock         (handle);
  222. extern byte    VerifyAccess     (farptr addr, word length, word type);
  223. extern paddr    VirtToPhys     (farptr addr);
  224. extern void    Yield         (void);
  225.  
  226. /* 2.0 only: */
  227. extern farptr    PhysToVirt     (paddr addr, word len);
  228. extern void    UnPhysToVirt     (void);
  229.  
  230. /* Dos variables */
  231. #define DosVar_SysinfoSeg    1
  232. #define DosVar_LocinfoSeg    2
  233. #define DosVar_DumpVector    4
  234. #define DosVar_RebootVector    5
  235. #define DosVar_MSATSVector    6
  236. #define DosVar_Yield        7
  237. #define DosVar_TCYield        8
  238. #define DosVar_InterruptLevel    13    /* 2.0 */
  239. #define DosVar_DeviceClassTable    14    /* 2.0 */
  240.  
  241. /* Lock flags */
  242. #define LockShort    0x0000
  243. #define LockLong    0x0100
  244. #define LockLongHigh    0x0300
  245. #define LockShortVerify    0x0400
  246. /* Lock option - or-ed in */
  247. #define LockNowait    0x0001
  248.  
  249. /* Event numbers */
  250. #define EventSMMouse        0    /* Session Manager - mouse */
  251. #define EventCtrlBreak        1    /* Ctrl-Break */
  252. #define EventCtrlC        2    /* Ctrl-C */
  253. #define EventCtrlScrollLock    3    /* Ctrl-ScrollLock */
  254. #define EventCtrlPrintScreen    4    /* Ctrl-PrtSc */
  255. #define EventShftPrintScreen    5    /* Shift-PrtSc */
  256. #define EventSMKeyboard        6    /* Session Manager - keyboard */
  257.  
  258. /* VerifyAccess types */
  259. #define VerifyRead    0
  260. #define VerifyWrite    1
  261.  
  262. /* Character queue */
  263. typedef struct CharQueue {
  264.     word    size;        /* Size of queue in bytes */
  265.     word    index;        /* Index of next char out */
  266.     word    count;        /* Count of characters in the queue */
  267.     byte    base [1];    /* Queue buffer */
  268. } CharQueue;
  269.  
  270. /* AttachDD data record */
  271. typedef struct IDCEntry {
  272.     dword    real;
  273.     word    realDS;
  274.     dword    prot;
  275.     word    protDS;
  276. } IDCEntry;
  277.  
  278. /* 2.0 ADD entry point table */
  279. typedef struct DevClassTableEntry {
  280.     farptrfcn    entry;        /* ADD vector */
  281.     word        flags;    
  282.     char        name[16];
  283. } DevClassTableEntry;
  284. typedef struct DevClassTable {
  285.     word        count;        /* number of entries */
  286.     word        maxCount;    /* ??? */
  287.     DevClassTableEntry entries[1];
  288. } DevClassTable;
  289.  
  290. /************************************************************************/
  291. /*        Support functions.                    */
  292. /************************************************************************/
  293.  
  294. extern word    inProtMode (void);
  295. extern word    inInitPhase (void);
  296.  
  297. #ifdef __ZTC__
  298. # define int_on()    asm(0xFB)    /* STI    */
  299. # define int_off()    asm(0xFA)    /* CLI    */
  300. #else
  301.   extern void int_on();
  302.   extern void int_off();
  303. #endif
  304.  
  305. #ifdef BASEDEV
  306.   extern void    put2c (byte);
  307.   extern void    put2s (char _far *);
  308.   extern void    put2x (dword);
  309.   extern void    put2d (long);
  310.   #define putc    put2c
  311.   #define puts    put2s
  312.   #define putx    put2x
  313.   #define putd    put2d
  314.   #define _STI_ddebug _STI_d2debug
  315. #else
  316.   extern void    putc (byte);
  317.   extern void    puts (char _far *);
  318.   extern void    putx (dword);
  319.   extern void    putd (long);
  320. #endif
  321.  
  322. #ifdef DEBUG
  323.  extern int    trace;
  324.  #define PUTC(n,c) (trace >= n && putc(c))
  325.  #define PUTS(n,s) (trace >= n && puts(s))
  326.  #define PUTX(n,x) (trace >= n && putx(x))
  327.  #define PUTD(n,x) (trace >= n && putd(x))
  328. #else
  329.  #define PUTC(n,c)
  330.  #define PUTS(n,s)
  331.  #define PUTX(n,x)
  332.  #define PUTD(n,x)
  333. #endif
  334.  
  335. extern dword    video_address;        /* set this to B0000 or B8000 */
  336.                     /* default is B8000 */
  337.  
  338. /************************************************************************/
  339. /*        Driver specific functions.                */
  340. /************************************************************************/
  341.  
  342. /* Device driver dependant functions */
  343. extern word    DrvInit        (char _far *);
  344. extern word    DrvInitBase    (char _far *);
  345. extern word    DrvRead        (ReqPtr);
  346. extern word    DrvPeek        (ReqPtr);
  347. extern word    DrvWrite    (ReqPtr, int);    /* 1: verify */
  348. extern word    DrvInputStatus    (void);
  349. extern word    DrvInputFlush    (void);
  350. extern word    DrvOutputStatus    (void);
  351. extern word    DrvOutputFlush    (void);
  352. extern word    DrvOpen        (ReqPtr);
  353. extern word    DrvClose    (ReqPtr);
  354. extern word    DrvIOCtl    (ReqPtr);
  355.  
  356. /************************************************************************/
  357.  
  358. #ifdef __cplusplus
  359. }
  360. #endif
  361.  
  362.