[6283] | 1 | /* $Id: OS2KTK.h,v 1.5 2001-07-10 05:23:21 bird Exp $
|
---|
[3829] | 2 | *
|
---|
| 3 | * OS2KTK - OS/2 Kernel Task.
|
---|
| 4 | *
|
---|
[4787] | 5 | * Copyright (c) 2000 knut st. osmundsen (knut.stange.osmundsen@mynd.no)
|
---|
[3829] | 6 | *
|
---|
| 7 | * Project Odin Software License can be found in LICENSE.TXT
|
---|
| 8 | *
|
---|
| 9 | */
|
---|
| 10 | #ifndef _OS2KTK_h_
|
---|
| 11 | #define _OS2KTK_h_
|
---|
| 12 |
|
---|
[6283] | 13 | #ifdef __cplusplus
|
---|
| 14 | extern "C" {
|
---|
| 15 | #endif
|
---|
[3829] | 16 |
|
---|
[6283] | 17 |
|
---|
[3829] | 18 | /*******************************************************************************
|
---|
| 19 | * Defined Constants And Macros *
|
---|
| 20 | *******************************************************************************/
|
---|
| 21 | #define TK_FUSU_FATAL 0x3 /* Traps the task on failure. */
|
---|
| 22 | #define TK_FUSU_NONFATAL 0x0 /* Returns error code to caller on failure. */
|
---|
[4347] | 23 | #define TK_FUSU_USER_SRC 0x10 /* Source buffer is in user memory. (TKSuFuBuff) */
|
---|
| 24 | #define TK_FUSU_USER_DST 0x20 /* Target buffer is in user memory. (TKSuFuBuff) */
|
---|
[3829] | 25 |
|
---|
| 26 |
|
---|
| 27 |
|
---|
| 28 | #define TKFuChar(pch, pchUsr) \
|
---|
[4164] | 29 | TKFuBuff((PVOID)pch, (PVOID)pchUsr, sizeof(char), TK_FUSU_FATAL)
|
---|
[3829] | 30 | #define TKSuChar(pchUsr, pch) \
|
---|
[4164] | 31 | TKSuBuff((PVOID)pchUsr, (PVOID)pch, sizeof(char), TK_FUSU_FATAL)
|
---|
[3829] | 32 |
|
---|
| 33 | #define TKFuCharNF(pch, pchUsr) \
|
---|
[4164] | 34 | TKFuBuff((PVOID)pch, (PVOID)pchUsr, sizeof(char), TK_FUSU_NONFATAL)
|
---|
[3829] | 35 | #define TKSuCharNF(pchUsr, pch) \
|
---|
[4164] | 36 | TKSuBuff((PVOID)pchUsr, (PVOID)pch, sizeof(char), TK_FUSU_NONFATAL)
|
---|
[3829] | 37 |
|
---|
| 38 |
|
---|
| 39 | #define TKFuUShort(pus, pusUsr) \
|
---|
[4164] | 40 | TKFuBuff((PVOID)pus, (PVOID)pusUsr, sizeof(USHORT), TK_FUSU_FATAL)
|
---|
[3829] | 41 | #define TKSuUShort(pusUsr, pus) \
|
---|
[4164] | 42 | TKSuBuff((PVOID)pusUsr, (PVOID)pus, sizeof(USHORT), TK_FUSU_FATAL)
|
---|
[3829] | 43 |
|
---|
| 44 | #define TKFuUShortNF(pus, pusUsr) \
|
---|
[4164] | 45 | TKFuBuff((PVOID)pus, (PVOID)pusUsr, sizeof(USHORT), TK_FUSU_NONFATAL)
|
---|
[3829] | 46 | #define TKSuUShortNF(pusUsr, pus) \
|
---|
[4164] | 47 | TKSuBuff((PVOID)pusUsr, (PVOID)pus, sizeof(USHORT), TK_FUSU_NONFATAL)
|
---|
[3829] | 48 |
|
---|
| 49 |
|
---|
| 50 | #define TKFuULong(pul, pulUsr) \
|
---|
[4164] | 51 | TKFuBuff((PVOID)pul, (PVOID)pulUsr, sizeof(ULONG), TK_FUSU_FATAL)
|
---|
[3829] | 52 | #define TKSuULong(pulUsr, pul) \
|
---|
[4164] | 53 | TKSuBuff((PVOID)pulUsr, (PVOID)pul, sizeof(ULONG), TK_FUSU_FATAL)
|
---|
[3829] | 54 |
|
---|
| 55 | #define TKFuULongNF(pul, pulUsr) \
|
---|
[4164] | 56 | TKFuBuff((PVOID)pul, (PVOID)pulUsr, sizeof(ULONG), TK_FUSU_NONFATAL)
|
---|
[3829] | 57 | #define TKSuULongNF(pulUsr, pul) \
|
---|
[4164] | 58 | TKSuBuff((PVOID)pulUsr, (PVOID)pul, sizeof(ULONG), TK_FUSU_NONFATAL)
|
---|
[3829] | 59 |
|
---|
| 60 |
|
---|
| 61 | #define TKFuStrLen(pcch, pvUsr, cchMax) \
|
---|
| 62 | TKFuBufLen(pcch, pvUsr, cchMax, TK_FUSU_FATAL, FALSE)
|
---|
| 63 | #define TKFuStrLenNZ(pcch, pvUsr, cchMax) \
|
---|
| 64 | TKFuBufLenNZ(pcch, pvUsr, cchMax, TK_FUSU_NONFATAL, FALSE)
|
---|
| 65 |
|
---|
| 66 | #define TKFuStrLenZ(pcch, pvUsr, cchMax) \
|
---|
| 67 | TKFuBufLenZ(pcch, pvUsr, cchMax, TK_FUSU_FATAL, TRUE)
|
---|
| 68 | #define TKFuStrLenZNZ(pcch, pvUsr, cchMax) \
|
---|
| 69 | TKFuBufLenZNZ(pcch, pvUsr, cchMax, TK_FUSU_NONFATAL, TRUE)
|
---|
| 70 |
|
---|
| 71 |
|
---|
| 72 |
|
---|
[6283] | 73 | /*******************************************************************************
|
---|
| 74 | * External Functions *
|
---|
| 75 | *******************************************************************************/
|
---|
[3829] | 76 |
|
---|
| 77 | /**
|
---|
| 78 | * Copy user memory into system memory.
|
---|
| 79 | * @returns OS/2 return code. (NO_ERROR is success)
|
---|
| 80 | * @param pv Pointer to target (system) data area.
|
---|
| 81 | * @param pvUsr Pointer to source (user) data area.
|
---|
| 82 | * @param cb Count of bytes to copy.
|
---|
| 83 | * @param fl Flags.
|
---|
| 84 | */
|
---|
| 85 | extern ULONG KRNLCALL TKFuBuff(PVOID pv, PVOID pvUsr, ULONG cb, ULONG fl);
|
---|
| 86 |
|
---|
| 87 |
|
---|
| 88 | /**
|
---|
| 89 | * Copy system memory to user memory.
|
---|
| 90 | * @returns OS/2 return code. (NO_ERROR is success)
|
---|
| 91 | * @param pvUsr Pointer to target (user) data area.
|
---|
| 92 | * @param pv Pointer to source (system) data area.
|
---|
| 93 | * @param cb Count of bytes to copy.
|
---|
| 94 | * @param fl Flags.
|
---|
| 95 | */
|
---|
| 96 | extern ULONG KRNLCALL TKSuBuff(PVOID pvUsr, PVOID pv, ULONG cb, ULONG fl);
|
---|
| 97 |
|
---|
| 98 |
|
---|
| 99 | /**
|
---|
| 100 | * String length.
|
---|
| 101 | * @returns OS/2 return code. (NO_ERROR is success)
|
---|
| 102 | * @param pcch Pointer to length variable.
|
---|
| 103 | * @param pvUsr Pointer to user data to preform string length on.
|
---|
| 104 | * @param cchMax Max string length.
|
---|
| 105 | * @param fl Flags.
|
---|
| 106 | * @param fDblNULL TRUE: Double '\0' (ie. '\0\0') terminated. Usefull for scanning environments.
|
---|
| 107 | * FALSE: Single string. (ie. one '\0').
|
---|
| 108 | */
|
---|
| 109 | extern ULONG KRNLCALL TKFuBufLen(PLONG pcch, PVOID pvUsr, ULONG cchMax, ULONG fl, BOOL fDblNULL);
|
---|
| 110 |
|
---|
| 111 |
|
---|
[4347] | 112 | /**
|
---|
| 113 | * Copy user memory to user memory.
|
---|
| 114 | * @returns OS/2 return code. (NO_ERROR is success)
|
---|
| 115 | * @param pvTarget Pointer to target (user) data area.
|
---|
| 116 | * @param pvSource Pointer to source (user) data area.
|
---|
| 117 | * @param cb Count of bytes to copy.
|
---|
| 118 | * @param fl Flags.
|
---|
| 119 | */
|
---|
| 120 | extern ULONG KRNLCALL TKSuFuBuff(PVOID pvTarget, PVOID pvSource, ULONG cb, ULONG fl);
|
---|
| 121 |
|
---|
| 122 |
|
---|
| 123 | #ifdef INCL_OS2KRNL_PTDA
|
---|
| 124 | /**
|
---|
| 125 | * PID to PTDA pointer.
|
---|
| 126 | * @returns OS/2 return code.
|
---|
| 127 | * @param pid Process Identifier.
|
---|
| 128 | * @param ppPTDA Pointer to the PTDA-pointer variabel which is to receive
|
---|
| 129 | * the PTDA pointer on successful return.
|
---|
| 130 | */
|
---|
| 131 | extern ULONG KRNLCALL TKPidToPTDA(PID pid, PPPTDA ppPTDA);
|
---|
[3829] | 132 | #endif
|
---|
[4347] | 133 |
|
---|
[6283] | 134 |
|
---|
| 135 | /**
|
---|
| 136 | * Post signal to one or more processes.
|
---|
| 137 | * @returns NO_ERROR on success.
|
---|
| 138 | * On error ERROR_NOT_DESCENDANT, ERROR_SIGNAL_REFUSED,
|
---|
| 139 | * ERROR_INVALID_PROCID, ERROR_ZOMBIE_PROCESS, ERROR_SIGNAL_PENDING. (it seems)
|
---|
| 140 | * @param usSignal Signal number.
|
---|
| 141 | * @param usAction Action.
|
---|
| 142 | * 0 - the process and all children.
|
---|
| 143 | * 1 - only the process
|
---|
| 144 | * 2 - the process and all it's decendants.
|
---|
| 145 | * 3 - all processes in that screen group.
|
---|
| 146 | * @param usSignalArg Signal argument.
|
---|
| 147 | * @param usPIDSGR Process Id or Screen Group Id.
|
---|
| 148 | */
|
---|
| 149 | extern ULONG _Optlink POST_SIGNAL32(USHORT usSignal, USHORT usAction, USHORT usSignalArg, USHORT usPIDSGR);
|
---|
| 150 |
|
---|
| 151 | #ifdef __cplusplus
|
---|
| 152 | }
|
---|
[4347] | 153 | #endif
|
---|
[6283] | 154 |
|
---|
| 155 |
|
---|
| 156 | #ifdef INCL_OS2KRNL_TCB
|
---|
| 157 | /**
|
---|
| 158 | * Force a thread to be made ready.
|
---|
| 159 | * @param flFlag Which flag(s?) to set.
|
---|
| 160 | * @param pTCB Pointer to the thread control block of the thread to be forced.
|
---|
| 161 | */
|
---|
| 162 | extern void KRNLCALL TKForceThread(ULONG flFlag, PTCB pTCB);
|
---|
| 163 | #endif
|
---|
| 164 |
|
---|
| 165 | #ifdef INCL_OS2KRNL_PTDA
|
---|
| 166 | /**
|
---|
| 167 | * Set force flag on a task.
|
---|
| 168 | * @param flFlag Which flag(s?) to set.
|
---|
| 169 | * @param pPTDA Pointer to the PTDA of the task to be processed.
|
---|
| 170 | * @param fForce FALSE Just set the flag on all threads.
|
---|
| 171 | * TRUE Force all threads ready by calling TKForceThread.
|
---|
| 172 | */
|
---|
| 173 | extern void KRNLCALL TKForceTask(ULONG flFlag, PPTDA pPTDA, BOOL fForce);
|
---|
| 174 | #endif
|
---|
| 175 |
|
---|
| 176 | #ifdef INCL_OS2KRNL_TCB
|
---|
| 177 | /**
|
---|
| 178 | * Get priotity of a thread.
|
---|
| 179 | * @returns Thread priority.
|
---|
| 180 | * @param pTCB pointer to the TCB of the thread in question.
|
---|
| 181 | */
|
---|
| 182 | extern ULONG KRNLCALL TKGetPriority(PTCB pTCB);
|
---|
| 183 | #endif
|
---|
| 184 |
|
---|
| 185 | /**
|
---|
| 186 | * Make current thread sleep.
|
---|
| 187 | * @returns NO_ERROR on success.
|
---|
| 188 | * ERROR_INTERRUPT if a signal is forced on the thread.
|
---|
| 189 | * ERROR_TIMEOUT if we timeout.
|
---|
| 190 | * @param ulSleepId 32-bit sleep id which TKWakeup will be called with.
|
---|
| 191 | * @param ulTimeout Number of milliseconds to sleep. (0 is not yield)
|
---|
| 192 | * -1 means forever or till wakeup.
|
---|
| 193 | * @param fUnint TRUE: may not interrupt sleep.
|
---|
| 194 | * FALSE: may interrupt sleep.
|
---|
| 195 | * @param flSleepType ???
|
---|
| 196 | */
|
---|
| 197 | extern ULONG KRNLCALL TKSleep(ULONG ulSleepId, ULONG ulTimeout, ULONG fUnInterruptable, ULONG flWakeupType);
|
---|
| 198 |
|
---|
| 199 | /**
|
---|
| 200 | * Wakeup sleeping thread(s).
|
---|
| 201 | * @returns NO_ERROR on succes.
|
---|
| 202 | * Appropriate error code on failure.
|
---|
| 203 | * @param ulSleepId 32-bit sleep id which threads are sleeping on.
|
---|
| 204 | * @param flWakeUpType How/what to wakeup.
|
---|
| 205 | * @param pcWakedUp Pointer to variable which is to hold the count of
|
---|
| 206 | * thread waked up.
|
---|
| 207 | */
|
---|
| 208 | extern ULONG KRNLCALL TKWakeup(ULONG ulSleepId, ULONG flWakeupType, PULONG cWakedUp);
|
---|
| 209 |
|
---|
| 210 | #ifdef INCL_OS2KRNL_TCB
|
---|
| 211 | /**
|
---|
| 212 | * Wake up a single thread.
|
---|
| 213 | * @returns NO_ERROR on succes.
|
---|
| 214 | * Appropriate error code on failure.
|
---|
| 215 | * @param pTCB Pointer to the TCB of the thread to be waken.
|
---|
| 216 | */
|
---|
| 217 | extern ULONG KRNLCALL TKWakeThread(PTCB pTCB);
|
---|
| 218 | #endif
|
---|
| 219 |
|
---|
| 220 | #ifdef INCL_OS2KRNL_TCB
|
---|
| 221 | /**
|
---|
| 222 | * See which thread will be Wakeup.
|
---|
| 223 | * @returns Pointer to TCB of the thread on success.
|
---|
| 224 | * NULL on failure or no threads.
|
---|
| 225 | * @param ulSleepId 32-bit sleep id which threads are sleeping on.
|
---|
| 226 | * @param flWakeUpType How/what to wakeup.
|
---|
| 227 | */
|
---|
| 228 | extern PTCB KRNLCALL TKQueryWakeup(ULONG ulSleepId, ULONG flWakeupType);
|
---|
| 229 | #endif
|
---|
| 230 |
|
---|
| 231 | #endif
|
---|