| 1 | /* $Id: OS2KTCB.h,v 1.3 2001-07-10 05:22:57 bird Exp $ | 
|---|
| 2 | * | 
|---|
| 3 | * TCB - Thread Control Block access methods. | 
|---|
| 4 | * | 
|---|
| 5 | * Copyright (c) 2000 knut st. osmundsen (knut.stange.osmundsen@mynd.no) | 
|---|
| 6 | * | 
|---|
| 7 | * Project Odin Software License can be found in LICENSE.TXT | 
|---|
| 8 | * | 
|---|
| 9 | */ | 
|---|
| 10 | #ifndef _OS2KTCB_h_ | 
|---|
| 11 | #define _OS2KTCB_h_ | 
|---|
| 12 |  | 
|---|
| 13 | #ifdef __cplusplus | 
|---|
| 14 | extern "C" { | 
|---|
| 15 | #endif | 
|---|
| 16 |  | 
|---|
| 17 | /******************************************************************************* | 
|---|
| 18 | *   Defined Constants And Macros                                               * | 
|---|
| 19 | *******************************************************************************/ | 
|---|
| 20 | /* | 
|---|
| 21 | * sg24-4640-00:    TCBForcedActions flag definitions: | 
|---|
| 22 | */ | 
|---|
| 23 | #define TK_FF_BUF           0x00000001  /* Buffer must be released */ | 
|---|
| 24 | #define TK_FF_EXIT          0x00000002  /* Call TKExit (old FF_DES) */ | 
|---|
| 25 | #define TK_FF_CRITSEC       0x00000004  /* Enter Per-task critical section */ | 
|---|
| 26 | #define TK_FF_ICE           0x00000008  /* Freeze thread */ | 
|---|
| 27 | #define TK_FF_NPX           0x00000010  /* NPX Error */ | 
|---|
| 28 | #define TK_FF_TIB           0x00000020  /* Update the TIB */ | 
|---|
| 29 | #define TK_FF_TRC           0x00000040  /* Enter Debug */ | 
|---|
| 30 | #define TK_FF_SIG           0x00000080  /* Signal pending */ | 
|---|
| 31 | #define TK_FF_CTXH          0x00000100  /* Pending local context hooks */ | 
|---|
| 32 | #define TK_FF_STIH          0x00000200  /* Execute STI hooks */ | 
|---|
| 33 | #define TK_FF_VDMBP         0x00000400  /* Execute VDM BP hooks */ | 
|---|
| 34 | #define TK_FF_RTRY          0x00000800  /* Retry V86 system call */ | 
|---|
| 35 | #define TK_FF_PIB           0x00001000  /* Update the PIB */ | 
|---|
| 36 | #define TK_FF_SCH           0x00002000  /* Do Scheuler Processing */ | 
|---|
| 37 | #define TK_FF_TFBIT         0x00004000  /* Validate user eflags TF bit */ | 
|---|
| 38 | #define TK_FF_TIBPRI        0x00008000  /* Update only the priority fields in TIB */ | 
|---|
| 39 |  | 
|---|
| 40 |  | 
|---|
| 41 | /* | 
|---|
| 42 | * sg24-4640-00:    TCBEntryActions flag definitions: | 
|---|
| 43 | */ | 
|---|
| 44 | #define TK_EF_PFCLI             1       /* Page fault inside CLI */ | 
|---|
| 45 | #define TK_EF_TRC               2       /* DosDebug action pending */ | 
|---|
| 46 |  | 
|---|
| 47 |  | 
|---|
| 48 | /* | 
|---|
| 49 | * sg24-4640-00: TCBWakeFlags flag definitions: | 
|---|
| 50 | */ | 
|---|
| 51 | #define TK_WF_INTERRUPTED       0x01    /* Sleep was interrupted */ | 
|---|
| 52 | #define TK_WF_TIMEEXP           0x02    /* Timeout expired */ | 
|---|
| 53 | #define TK_WF_INTPENDING        0x04    /* Interrupt pending */ | 
|---|
| 54 | #define TK_WF_SINGLEWAKEUP      0x08    /* Thread wants single wakeup */ | 
|---|
| 55 | #define TK_WF_INTERRUPTIBLE     0x10    /* Thread blocked interruptibly */ | 
|---|
| 56 | #define TK_WF_TIMEOUT           0x20    /* Thread blocked with timeout */ | 
|---|
| 57 | #define TK_WF_SLEEPING          0x40    /* In TKSleep() */ | 
|---|
| 58 |  | 
|---|
| 59 |  | 
|---|
| 60 | /* | 
|---|
| 61 | * sg24-4640-00: TCBState and TCBQState definitions: | 
|---|
| 62 | */ | 
|---|
| 63 | #define STATE_VOID              0       /* Uninitialized */ | 
|---|
| 64 | #define STATE_READY             1       /* Ready to run */ | 
|---|
| 65 | #define STATE_BLOCKED           2       /* Blocked on an ID */ | 
|---|
| 66 | #define STATE_SUSPENDED         3       /* Suspended (DosSuspendThread) */ | 
|---|
| 67 | #define STATE_CRITSEC           4       /* Blocked by another CritSec thread */ | 
|---|
| 68 | #define STATE_RUNNING           5       /* Thread currently running */ | 
|---|
| 69 | #define STATE_READYBOOST        6       /* Ready, but apply an IO boost */ | 
|---|
| 70 | #define STATE_TSD               7       /* Thread waiting for TSD */ | 
|---|
| 71 | #define STATE_DELAYED           8       /* Delayed TKWakeup (Almost Ready) */ | 
|---|
| 72 | #define STATE_FROZEN            9       /* Frozen Thread (FF_ICE) */ | 
|---|
| 73 | #define STATE_GETSTACK          10      /* Incomming TSD */ | 
|---|
| 74 | #define STATE_BADSTACK          11      /* TSD failed to swap in */ | 
|---|
| 75 |  | 
|---|
| 76 |  | 
|---|
| 77 | /* | 
|---|
| 78 | * sg24-4640-00: TCBPriClassMod definitions: | 
|---|
| 79 | */ | 
|---|
| 80 | #define CLASSMOD_KEYBOARD       0x04    /* Keyboard boost */ | 
|---|
| 81 | #define CLASSMOD_STARVED        0x08    /* Starvation boost */ | 
|---|
| 82 | #define CLASSMOD_DEVICE         0x10    /* Device I/O Done Boost */ | 
|---|
| 83 | #define CLASSMOD_FOREGROUND     0x20    /* Foreground boost */ | 
|---|
| 84 | #define CLASSMOD_WINDOW         0x40    /* Window Boost */ | 
|---|
| 85 | #define CLASSMOD_VDM_INTERRUPT  0x80    /* VDM simulated interrupt boost */ | 
|---|
| 86 |  | 
|---|
| 87 |  | 
|---|
| 88 | /* | 
|---|
| 89 | * sg24-4640-00: TCBPriClass definitions: | 
|---|
| 90 | */ | 
|---|
| 91 | #define CLASS_NOCHANGE          0x00    /* No priority class change */ | 
|---|
| 92 | #define CLASS_IDLE_TIME         0x01    /* Idle - Time class */ | 
|---|
| 93 | #define CLASS_REGULAR           0x02    /* Regular class */ | 
|---|
| 94 | #define CLASS_TIME_CRITICAL     0x03    /* Time-Critical class */ | 
|---|
| 95 | #define CLASS_SERVER            0x04    /* Client-Server Server class */ | 
|---|
| 96 |  | 
|---|
| 97 |  | 
|---|
| 98 | /* | 
|---|
| 99 | * sg24-4640-00: TCBSchFlg flag definitions: | 
|---|
| 100 | */ | 
|---|
| 101 | #define SCH_PROTECTED_PRI       0x0001  /* Only Intra-process SetPri allowed */ | 
|---|
| 102 | #define SCH_WINDOWBOOST_LOCK    0x0002  /* Lock out windoboost changes */ | 
|---|
| 103 | #define SCH_MINSLICE            0x0004  /* Use minimum timeslice */ | 
|---|
| 104 | #define SCH_PAGE_FAULT          0x0008  /* Dynamic timeslicing ### */ | 
|---|
| 105 | #define SCH_PAGE_FAULT_BIT      0x03    /* Dynamic timeslicing P728371 */ | 
|---|
| 106 |  | 
|---|
| 107 |  | 
|---|
| 108 | /* | 
|---|
| 109 | * sg24-4640-00: TCBfSwapping flag definitions: | 
|---|
| 110 | */ | 
|---|
| 111 | #define SM_TCB_SWAPPING         0x01    /* swap i/o underway */ | 
|---|
| 112 | #define SM_TCB_RESIZING         0x02    /* data structures are growing */ | 
|---|
| 113 |  | 
|---|
| 114 |  | 
|---|
| 115 | /* | 
|---|
| 116 | * sg24-4640-00: TCBMiscFlags flag definitions: | 
|---|
| 117 | */ | 
|---|
| 118 | #define TMF_CMapFailed          (0x01)  /* Set if alloc/realloc failed on a cluster */ | 
|---|
| 119 | /*  map (mft_selCMap). */ | 
|---|
| 120 | #define TMF_IGNORE_HE           (0x02)  /* If set, ignore (auto fail) hard error */ | 
|---|
| 121 | #define TMF_MULT_XCPT           (0x04)  /* Set if multiple ring 0 exceptions */ | 
|---|
| 122 | #define TMF_NoFwd               (0x08)  /* Set if inhibiting forwarders */ | 
|---|
| 123 | #define TMF_EXIT_TERM           (0x10)  /* TK_FF_EXIT means TKTermThread */ | 
|---|
| 124 | #define TMF_NO_EXCEPT           (0x20)  /* Indicates TIB exception field invalid */ | 
|---|
| 125 | #define TMF_XCPT_HE             (0x40)  /* Indicates an exception harderr is */ | 
|---|
| 126 | /* pending */ | 
|---|
| 127 |  | 
|---|
| 128 |  | 
|---|
| 129 | /* | 
|---|
| 130 | * sg24-4640-00: TCBMSpareFlags flag definitions: | 
|---|
| 131 | */ | 
|---|
| 132 | #define SPFLAGS_FGND_DISKIO     0x0080  /* Foreground Disk I/O */ | 
|---|
| 133 |  | 
|---|
| 134 |  | 
|---|
| 135 | /* | 
|---|
| 136 | * sg24-4640-00: TCBReqPktFlg flag definitions: | 
|---|
| 137 | */ | 
|---|
| 138 | #define TK_RP_ALLOCATED         0x01 | 
|---|
| 139 | #define TK_RP_INUSE             0x02 | 
|---|
| 140 |  | 
|---|
| 141 |  | 
|---|
| 142 |  | 
|---|
| 143 | /******************************************************************************* | 
|---|
| 144 | *   Structures and Typedefs                                                    * | 
|---|
| 145 | *******************************************************************************/ | 
|---|
| 146 | typedef struct _TCB | 
|---|
| 147 | { | 
|---|
| 148 | char    dummy; | 
|---|
| 149 | } TCB, *PTCB, **PPTCB; | 
|---|
| 150 |  | 
|---|
| 151 | extern PPTCB    ppTCBCur; | 
|---|
| 152 |  | 
|---|
| 153 |  | 
|---|
| 154 | /******************************************************************************* | 
|---|
| 155 | *   Defined Constants And Macros                                               * | 
|---|
| 156 | *******************************************************************************/ | 
|---|
| 157 |  | 
|---|
| 158 | /** | 
|---|
| 159 | * Gets pointer to the current TCB. | 
|---|
| 160 | * @returns     Pointer to the current thread control block (TCB). | 
|---|
| 161 | *              NULL if not task-time. | 
|---|
| 162 | */ | 
|---|
| 163 | #define tcbGetCur()     *ppTCBCur | 
|---|
| 164 |  | 
|---|
| 165 |  | 
|---|
| 166 | USHORT  tcbGetTCBFailErr(PTCB pTCB); | 
|---|
| 167 | USHORT  tcbSetTCBFailErr(PTCB pTCB, USHORT TCBFailErr); | 
|---|
| 168 |  | 
|---|
| 169 |  | 
|---|
| 170 |  | 
|---|
| 171 | #ifdef __cplusplus | 
|---|
| 172 | } | 
|---|
| 173 | #endif | 
|---|
| 174 |  | 
|---|
| 175 | #endif | 
|---|