home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / header45.zip / driver.h < prev    next >
Text File  |  1999-05-11  |  12KB  |  296 lines

  1. /***************************************************************************/
  2. /* IBM CONFIDENTIAL                                                        */
  3. /* OCO Source Materials                                                    */
  4. /* IBM TCP/IP for OS/2                                                     */
  5. /* (c) Copyright IBM Corp 1992,1997                                        */
  6. /* The source code for this program is not published or otherwise          */
  7. /* divested of its trade secrets, irrespective of what has been            */
  8. /* deposited with the U.S. Copyright Office                                */
  9. /***************************************************************************/
  10. #ifndef DRIVER_H
  11. #define DRIVER_H
  12. #ifndef OS2_INCLUDED
  13. typedef unsigned char  BYTE;
  14. typedef unsigned long  ULONG;
  15. typedef unsigned short USHORT;
  16. typedef long           LONG;
  17. #endif
  18.  
  19. /* request packet structure */
  20. typedef struct Request_packet {
  21.    BYTE reqlength;        /* length of request packet */
  22.    BYTE devunit;          /* device unit code */
  23.    BYTE reqcommand;       /* command passed to driver */
  24.    USHORT reqstatus;      /* return status bits here */
  25.    ULONG  reqreserved;    /* reserved */
  26.    ULONG  quelink;        /* queue linkage */
  27.    BYTE   fcategory;      /* IO function category */
  28.    BYTE   fcode;          /* IO function code */
  29.    LONG  *GioParams;   /* data passed to driver */
  30.    LONG  *GioData;     /* data returned from driver */
  31.    USHORT reqfileno;      /* System File number */
  32. }  *lpRequest;
  33.  
  34. /* DD initialization time structure */
  35. typedef struct Init_packet {
  36.    BYTE reqlength;        /* length of request packet */
  37.    BYTE devunit;          /* device unit code */
  38.    BYTE reqcommand;       /* command passed to driver */
  39.    USHORT reqstatus;      /* return status bits here */
  40.    ULONG reqreserved;     /* reserved */
  41.    ULONG quelink;         /* queue linkage */
  42.    BYTE  fcategory;       /* IO function category */
  43.    ULONG lpDevHlp;        /* address of device helper routine */
  44.    ULONG InitArgs;        /* initialization args */
  45.    BYTE  drivenum;        /* drive number for 1st block device unit */
  46. }  *lpInit_Packet;
  47.  
  48. #define MAKEULONG(l, h)  ((ULONG)(((USHORT)(l)) | ((ULONG)((USHORT)(h))) << 16))
  49.  
  50. #define INIT  0
  51. #define READ  4
  52. #define OPEN  0xd
  53. #define CLOSE 0xe
  54. #define GENIO 0x10
  55. #define GENDEV 11
  56.  
  57. #define INIT_COMPLETE 0x1f
  58. #define DEINSTALL     0x14
  59.  
  60. #define DONE_BIT 0x100
  61. #define GEN_ERR  0x8000
  62. #define ERR_UNKNOWNCOMMAND 3
  63. #define ERR_GENERALFAILURE 0xc
  64.  
  65. struct WORDREGS {
  66.    unsigned short ax;
  67.    unsigned short bx;
  68.    unsigned short cx;
  69.    unsigned short dx;
  70.    unsigned short si;
  71.    unsigned short di;
  72.    unsigned short cflag;
  73.    unsigned short es;
  74. };
  75.  
  76. struct BYTEREGS {
  77.    unsigned char al, ah;
  78.    unsigned char bl, bh;
  79.    unsigned char cl, ch;
  80.    unsigned char dl, dh;
  81. };
  82.  
  83. union REGS {
  84.    struct WORDREGS x;
  85.    struct BYTEREGS h;
  86. };
  87.  
  88. #define DevHlp_Yield               2
  89. #define DevHlp_TCYield             3
  90. #define DevHlp_Block               4
  91. #define DevHlp_Run                 5
  92. #define DevHlp_SemRest             6
  93. #define DevHlp_SemClear            7
  94. #define DevHlp_SemHandle           8
  95. #define DevHlp_QueueInit          15
  96. #define DevHlp_QueueFlush         16
  97. #define DevHlp_QueueWrite         17
  98. #define DevHlp_QueueRead          18
  99. #define DevHlp_Lock               19
  100. #define DevHlp_PhysToVirt         21
  101. #define DevHlp_VirtToPhys         22
  102. #define DevHlp_PhysToUVirt        23
  103. #define DevHlp_AllocPhys          24
  104. #define DevHlp_FreePhys           25
  105. #define DevHlp_SetIRQ             27
  106. #define DevHlp_UnSetIRQ           28
  107. #define DevHlp_SetTimer           29
  108. #define DevHlp_MonitorCreate      31
  109. #define DevHlp_Register           32
  110. #define DevHlp_DeRegister         33
  111. #define DevHlp_MonWrite           34
  112. #define DevHlp_MonFlush           35
  113. #define DevHlp_GetDOSVar          36
  114. #define DevHlp_VerifyAccess       39
  115. #define DevHlp_AllocGDTSelector   45
  116. #define DevHlp_PhysToGDTSelector  46
  117. #define DevHlp_RealToProt         47
  118. #define DevHlp_ProtToReal         48
  119. #define DevHlp_EOI                49
  120. #define DevHlp_UnPhysToVirt       50
  121. #define DevHlp_TickCount          51
  122. /*
  123. //#define MAXGDTS 128
  124. //#define MAXGDTS 300
  125. //#define MAXGDTS 400
  126. //#define MAXGDTS 500
  127. extern short MAXGDTS;
  128. */
  129. /* sanjay Khanna : July 6, 1994. Increased MAx GDTs to 60 (from 40)*/
  130. /* sanjay Khanna : Sept 26, 1994. Increased MAx GDTs to 80 (from 60)*/
  131. /* added a variable called TotGDTs = 500, sk may 8 1995 */
  132. /* This var is declared in memory.c and is the total size of GDTsels[] */
  133. /* By doing this I can get variable amount of memory from the device= */
  134. /* statement at init time for offload. I do not have to recompile also */
  135.  
  136.  
  137. #define NDIS_INTERFACE_UP       1
  138. #define NDIS_INTERFACE_DOWN     2
  139. #define NDIS_ADM_INTERFACE_UP   3
  140. #define NDIS_ADM_INTERFACE_DOWN 4
  141. #define NDIS_MTU_CHANGE         5
  142. #ifdef SOCKETS
  143. //extern int _initflag; /* 0 until init is complete*/
  144. extern short _initflag; /* 0 until init is complete*/
  145. #endif
  146.  
  147.  
  148. struct GlobalDescReg {
  149.    unsigned short limit;
  150.    unsigned long  base;
  151. };
  152.  
  153. struct DescInfo {
  154.    short limit16;       /* first 16 bits of limit (total 20 bits) */
  155.    unsigned short base16; /* low 16 bits of base address */
  156.    unsigned int
  157.    base24:8, /* next 8 bits of base address */
  158.    type:4, /* segment type, data(0-7) or code(8-15) */
  159.    s:1, /* system segment if clear, else data or code seg */
  160.    dpl:2, /* descr previlige level */
  161.    p:1, /* segment preset if set */
  162.    limit20:4, /* remaining limit 4 bits  */
  163.    avl:1,  /* available for use by system software */
  164.    o:1, /* default operation size, 0=16bit, 1=32bit only for code seg*/
  165.    d:1, /* if set 32 bit operands, else 16 bit operands */
  166.    g:1, /* granularity bit, if set truns scaling on by a factor of 4096 */
  167.    base32:8;
  168. };
  169.  
  170. #ifndef _16BITCODE
  171.  
  172. /* Global Info Seg */
  173.  
  174. typedef struct _GINFOSEG {
  175.     unsigned long    time;               /* time in seconds                           */
  176.     unsigned long    msecs;              /* milliseconds                              */
  177.     unsigned char    hour;               /* hours                                     */
  178.     unsigned char    minutes;            /* minutes                                   */
  179.     unsigned char    seconds;            /* seconds                                   */
  180.     unsigned char    hundredths;         /* hundredths                                */
  181.     unsigned short  timezone;           /* minutes from UTC                          */
  182.     unsigned short  cusecTimerInterval; /* timer interval (units = 0.0001 seconds)   */
  183.     unsigned char    day;                /* day                                       */
  184.     unsigned char    month;              /* month                                     */
  185.     unsigned short  year;               /* year                                      */
  186.     unsigned char    weekday;            /* day of week                               */
  187.     unsigned char    uchMajorVersion;    /* major version number                      */
  188.     unsigned char    uchMinorVersion;    /* minor version number                      */
  189.     unsigned char    chRevisionLetter;   /* revision letter                           */
  190.     unsigned char    sgCurrent;          /* current foreground session                */
  191.     unsigned char    sgMax;              /* maximum number of sessions                */
  192.     unsigned char    cHugeShift;         /* shift count for huge elements             */
  193.     unsigned char    fProtectModeOnly;   /* protect mode only indicator               */
  194.     unsigned short  pidForeground;      /* pid of last process in forground session  */
  195.     unsigned char    fDynamicSched;      /* dynamic variation flag                    */
  196.     unsigned char    csecMaxWait;        /* max wait in seconds                       */
  197.     unsigned short  cmsecMinSlice;      /* minimum timeslice (milliseconds)          */
  198.     unsigned short  cmsecMaxSlice;      /* maximum timeslice (milliseconds)          */
  199.     unsigned short  bootdrive;          /* drive from which the system was booted    */
  200.     unsigned char    amecRAS[32];        /* system trace major code flag bits         */
  201.     unsigned char    csgWindowableVioMax;/* maximum number of VIO windowable sessions */
  202.     unsigned char    csgPMMax;           /* maximum number of pres. services sessions */
  203. } GINFOSEG;
  204.  
  205. /* Local Info Seg */
  206.  
  207. typedef struct _LINFOSEG {
  208.     unsigned short     pidCurrent;        /* current process id                     */
  209.     unsigned short     pidParent;         /* process id of parent                   */
  210.     unsigned short     prtyCurrent;       /* priority of current thread             */
  211.     unsigned short     tidCurrent;        /* thread ID of current thread            */
  212.     unsigned short     sgCurrent;         /* session                                */
  213.     unsigned char      rfProcStatus;      /* process status                         */
  214.     unsigned char      dummy1;
  215.     unsigned short     fForeground;       /* current process has keyboard focus     */
  216.     unsigned char      typeProcess;       /* process type                           */
  217.     unsigned char      dummy2;
  218.     unsigned short     selEnvironment;    /* environment selector                   */
  219.     unsigned short     offCmdLine;        /* command line offset                    */
  220.     unsigned short     cbDataSegment;     /* length of data segment                 */
  221.     unsigned short     cbStack;           /* stack size                             */
  222.     unsigned short     cbHeap;            /* heap size                              */
  223.     unsigned short     hmod;              /* module handle of the application       */
  224.     unsigned short     selDS;             /* data segment handle of the application */
  225. } LINFOSEG;
  226.  
  227. #ifdef SOCKETS
  228. struct initfs {
  229.   void  (* _Far32 _Pascal initfunction)(char *);
  230. };
  231. extern unsigned short    _GDTsels[];
  232. #define GDTsels   _GDTsels
  233.  
  234. extern short _MAXGDTS;
  235. #define MAXGDTS _MAXGDTS
  236.  
  237. extern char * _gdv_yieldflag;
  238. #define gdv_yieldflag _gdv_yieldflag
  239.  
  240.  
  241. extern unsigned long * _ptkssbase;
  242. #define ptkssbase  _ptkssbase
  243. extern char * _gdv_tcyieldflag;
  244. #define gdv_tcyieldflag _gdv_tcyieldflag
  245.  
  246. extern unsigned long * _gmilseconds;
  247. #define gmilseconds _gmilseconds
  248.  
  249. extern unsigned long * _gseconds;
  250. #define gseconds _gseconds
  251.  
  252. #define INIT_FUNCTION_BASE      0x80
  253.  
  254. extern short _familyCount;
  255. #define familyCount _familyCount
  256.  
  257. extern struct initfs _InitFunctionArray[];
  258. #define InitFunctionArray  _InitFunctionArray
  259. extern GINFOSEG *_pGInfo;
  260. extern LINFOSEG *_pLInfo;
  261. #define pGInfo _pGInfo
  262. #define pLInfo _pLInfo
  263. extern unsigned long _debug_flag;
  264. #define debug_flag  _debug_flag
  265.  
  266. #else /* sockets only please */
  267.  
  268. #define in_cksum _in_cksum
  269. extern unsigned long * hostid;
  270. #define ether_output output
  271.  
  272. #endif /* sockets only pls */
  273.  
  274. #ifndef ComPort
  275. extern short _ComPort;
  276. #define ComPort _ComPort
  277. #endif
  278.  
  279. /* Changed sstods function to macro. amol 10/10/96 */
  280. extern unsigned long * ptkssbase;   /* this will be the pointer to SS base (For sstods) */
  281. #define sstods(x)   ((void *) ((unsigned long) (x) + *ptkssbase))
  282. #ifndef SSToDS
  283. #define SSToDS(p)    sstods(p)
  284. #endif
  285.  
  286.  
  287. #endif /* ifndef _16BITCODE */
  288.  
  289. #define   FLAT2LDT(x)    ((((x&0xffff0000)<<3)+0x70000) + (x&0xffff))
  290. #define   LDT2FLAT(ldt)  ((((u_long)(ldt)>>3) & 0xffff0000) + ((u_long)(ldt)&(0x0000ffff)))
  291.  
  292. //int sleep(unsigned long,unsigned);
  293. /* int sleep(char *wait_addr, unsigned priority); */
  294.  
  295. #endif /* DRIVER_H */
  296.