1 #ifndef CLIB_EXEC_PROTOS_H 2 #define CLIB_EXEC_PROTOS_H 3 4 /* 5 exec C prototypes 6 7 Copyright © 2002-2020 The MorphOS Development Team, All Rights Reserved. 8 */ 9 10 #if defined(__ixemul__) && !defined(__IXEMUL_EXEC_MIXING_ALLOWED) 11 # error "Mixing ixemul and native library calls is not supported. Native application should be built with -noixemul" 12 #endif 13 14 #ifndef EXEC_TYPES_H 15 # include <exec/types.h> 16 #endif 17 18 #ifndef EXEC_MEMORY_H 19 # include <exec/memory.h> 20 #endif 21 22 #ifndef EXEC_TASKS_H 23 # include <exec/tasks.h> 24 #endif 25 26 #ifndef EXEC_SEMAPHORES_H 27 # include <exec/semaphores.h> 28 #endif 29 30 #ifndef EXEC_PORTS_H 31 # include <exec/ports.h> 32 #endif 33 34 #ifndef EXEC_DEVICES_H 35 # include <exec/devices.h> 36 #endif 37 38 #ifndef EXEC_IO_H 39 # include <exec/io.h> 40 #endif 41 42 #ifndef UTILITY_TAGITEM_H 43 # include <utility/tagitem.h> 44 #endif 45 46 #ifndef UTILITY_HOOKS_H 47 # include <utility/hooks.h> 48 #endif 49 50 #include <stdarg.h> 51 52 53 #ifdef __cplusplus 54 extern "C" { 55 #endif /* __cplusplus */ 56 57 ULONG Supervisor( ULONG (*CONST userFunction)(VOID) ); 58 59 VOID InitCode( ULONG startClass, ULONG version ); 60 VOID InitStruct( CONST APTR initTable, APTR memory, ULONG size ); 61 struct Library *MakeLibrary( CONST APTR funcInit, CONST APTR structInit, ULONG (*CONST libInit)(VOID), ULONG dataSize, ULONG segList ); 62 VOID MakeFunctions( APTR target, CONST APTR functionArray, CONST APTR funcDispBase ); 63 struct Resident *FindResident( CONST_STRPTR name ); 64 APTR InitResident( CONST struct Resident *resident, ULONG segList ); 65 66 VOID Alert( ULONG alertNum ); 67 VOID Debug( ULONG flags ); 68 69 VOID Disable( VOID ); 70 VOID Enable( VOID ); 71 VOID Forbid( VOID ); 72 VOID Permit( VOID ); 73 ULONG SetSR( ULONG newSR, ULONG mask ); 74 APTR SuperState( VOID ); 75 VOID UserState( APTR sysStack ); 76 struct Interrupt *SetIntVector( LONG intNumber, CONST struct Interrupt *interrupt ); 77 VOID AddIntServer( LONG intNumber, struct Interrupt *interrupt ); 78 VOID RemIntServer( LONG intNumber, struct Interrupt *interrupt ); 79 VOID Cause( struct Interrupt *interrupt ); 80 81 APTR Allocate( struct MemHeader *freeList, ULONG byteSize ); 82 VOID Deallocate( struct MemHeader *freeList, APTR memoryBlock, ULONG byteSize ); 83 APTR AllocMem( ULONG byteSize, ULONG requirements ); 84 APTR AllocAbs( ULONG byteSize, APTR location ); 85 VOID FreeMem( APTR memoryBlock, ULONG byteSize ); 86 ULONG AvailMem( ULONG requirements ); 87 struct MemList *AllocEntry( struct MemList *entry ); 88 VOID FreeEntry( struct MemList *entry ); 89 90 VOID Insert( struct List *list, struct Node *node, struct Node *pred ); 91 VOID AddHead( struct List *list, struct Node *node ); 92 VOID AddTail( struct List *list, struct Node *node ); 93 VOID Remove( struct Node *node ); 94 struct Node *RemHead( struct List *list ); 95 struct Node *RemTail( struct List *list ); 96 VOID Enqueue( struct List *list, struct Node *node ); 97 struct Node *FindName( struct List *list, CONST_STRPTR name ); 98 99 APTR AddTask( struct Task *task, CONST APTR initPC, CONST APTR finalPC ); 100 VOID RemTask( struct Task *task ); 101 struct Task *FindTask( CONST_STRPTR name ); 102 BYTE SetTaskPri( struct Task *task, LONG priority ); 103 ULONG SetSignal( ULONG newSignals, ULONG signalSet ); 104 ULONG SetExcept( ULONG newSignals, ULONG signalSet ); 105 ULONG Wait( ULONG signalSet ); 106 VOID Signal( struct Task *task, ULONG signalSet ); 107 BYTE AllocSignal( LONG signalNum ); 108 VOID FreeSignal( LONG signalNum ); 109 LONG AllocTrap( LONG trapNum ); 110 VOID FreeTrap( LONG trapNum ); 111 112 VOID AddPort( struct MsgPort *port ); 113 VOID RemPort( struct MsgPort *port ); 114 VOID PutMsg( struct MsgPort *port, struct Message *message ); 115 struct Message *GetMsg( struct MsgPort *port ); 116 VOID ReplyMsg( struct Message *message ); 117 struct Message *WaitPort( struct MsgPort *port ); 118 struct MsgPort *FindPort( CONST_STRPTR name ); 119 120 VOID AddLibrary( struct Library *library ); 121 VOID RemLibrary( struct Library *library ); 122 struct Library *OldOpenLibrary( CONST_STRPTR libName ); 123 VOID CloseLibrary( struct Library *library ); 124 APTR SetFunction( struct Library *library, LONG funcOffset, ULONG (*CONST newFunction)(VOID) ); 125 VOID SumLibrary( struct Library *library ); 126 127 VOID AddDevice( struct Device *device ); 128 VOID RemDevice( struct Device *device ); 129 BYTE OpenDevice( CONST_STRPTR devName, ULONG unit, struct IORequest *ioRequest, ULONG flags ); 130 VOID CloseDevice( struct IORequest *ioRequest ); 131 BYTE DoIO( struct IORequest *ioRequest ); 132 VOID SendIO( struct IORequest *ioRequest ); 133 struct IORequest *CheckIO( struct IORequest *ioRequest ); 134 BYTE WaitIO( struct IORequest *ioRequest ); 135 VOID AbortIO( struct IORequest *ioRequest ); 136 137 VOID AddResource( APTR resource ); 138 VOID RemResource( APTR resource ); 139 APTR OpenResource( CONST_STRPTR resName ); 140 141 APTR RawDoFmt( CONST_STRPTR formatString, CONST APTR dataStream, VOID (*CONST putChProc)(VOID), APTR putChData ); 142 ULONG GetCC( VOID ); 143 ULONG TypeOfMem( CONST APTR address ); 144 ULONG Procure( struct SignalSemaphore *sigSem, struct SemaphoreMessage *bidMsg ); 145 VOID Vacate( struct SignalSemaphore *sigSem, struct SemaphoreMessage *bidMsg ); 146 struct Library *OpenLibrary( CONST_STRPTR libName, ULONG version ); 147 148 VOID InitSemaphore( struct SignalSemaphore *sigSem ); 149 VOID ObtainSemaphore( struct SignalSemaphore *sigSem ); 150 VOID ReleaseSemaphore( struct SignalSemaphore *sigSem ); 151 ULONG AttemptSemaphore( struct SignalSemaphore *sigSem ); 152 VOID ObtainSemaphoreList( struct List *sigSem ); 153 VOID ReleaseSemaphoreList( struct List *sigSem ); 154 struct SignalSemaphore *FindSemaphore( STRPTR name ); 155 VOID AddSemaphore( struct SignalSemaphore *sigSem ); 156 VOID RemSemaphore( struct SignalSemaphore *sigSem ); 157 VOID ObtainSemaphoreShared( struct SignalSemaphore *sigSem ); 158 ULONG AttemptSemaphoreShared( struct SignalSemaphore *sigSem ); 159 160 ULONG SumKickData( VOID ); 161 162 VOID AddMemList( ULONG size, ULONG attributes, LONG pri, APTR base, CONST_STRPTR name ); 163 VOID CopyMem( CONST APTR source, APTR dest, ULONG size ); 164 VOID CopyMemQuick( CONST APTR source, APTR dest, ULONG size ); 165 166 VOID CacheClearU( VOID ); 167 VOID CacheClearE( APTR address, ULONG length, ULONG caches ); 168 ULONG CacheControl( ULONG cacheBits, ULONG cacheMask ); 169 170 APTR CreateIORequest( CONST struct MsgPort *port, ULONG size ); 171 VOID DeleteIORequest( APTR iorequest ); 172 struct MsgPort *CreateMsgPort( VOID ); 173 VOID DeleteMsgPort( struct MsgPort *port ); 174 175 APTR AllocVec( ULONG byteSize, ULONG requirements ); 176 VOID FreeVec( APTR memoryBlock ); 177 178 APTR CreatePool( ULONG requirements, ULONG puddleSize, ULONG threshSize ); 179 VOID DeletePool( APTR poolHeader ); 180 APTR AllocPooled( APTR poolHeader, ULONG memSize ); 181 VOID FreePooled( APTR poolHeader, APTR memory, ULONG memSize ); 182 183 VOID ColdReboot( VOID ); 184 VOID StackSwap( struct StackSwapStruct *newStack ); 185 186 APTR CachePreDMA( CONST APTR address, ULONG *length, ULONG flags ); 187 VOID CachePostDMA( CONST APTR address, ULONG *length, ULONG flags ); 188 189 VOID AddMemHandler( struct Interrupt *memhand ); 190 VOID RemMemHandler( struct Interrupt *memhand ); 191 192 ULONG ObtainQuickVector( APTR interruptCode ); 193 194 195 /*** Undocumented functions ***/ 196 197 VOID RawIOInit( VOID ); 198 UBYTE RawMayGetChar( VOID ); 199 VOID RawPutChar( UBYTE MyChar ); 200 201 APTR TaggedOpenLibrary( LONG LibTag ); 202 203 ULONG ReadGayle( VOID ); 204 205 206 /*** V50 ***/ 207 208 ULONG NewGetTaskAttrsA( struct Task *task, APTR data, ULONG dataSize, ULONG type, struct TagItem *tags ); 209 #if !defined(USE_INLINE_STDARG) 210 ULONG NewGetTaskAttrs( struct Task *task, APTR data, ULONG dataSize, ULONG type, ... ); 211 #endif 212 213 ULONG NewSetTaskAttrsA( struct Task *task, APTR data, ULONG dataSize, ULONG type, struct TagItem *tags ); 214 #if !defined(USE_INLINE_STDARG) 215 ULONG NewSetTaskAttrs( struct Task *task, APTR data, ULONG dataSize, ULONG type, ... ); 216 #endif 217 218 struct Library *NewCreateLibrary( struct TagItem *Tags ); 219 #if !defined(USE_INLINE_STDARG) 220 struct Library *NewCreateLibraryTags( ULONG tag1, ...); 221 #endif 222 223 APTR NewSetFunction( struct Library *MyLibrary, APTR MyFunction, LONG Offset, struct TagItem *Tags ); 224 225 ULONG NewPPCStackSwap( struct StackSwapStruct *newStack, APTR MyFunction, struct PPCStackSwapArgs *Args ); 226 227 STRPTR VNewRawDoFmt( CONST_STRPTR FmtString, APTR (*PutChProc)(APTR, UBYTE), STRPTR PutChData, va_list args ); 228 STRPTR NewRawDoFmt( CONST_STRPTR FmtString, APTR (*PutChProc)(APTR, UBYTE), STRPTR PutChData, ... ); 229 230 VOID CacheFlushDataArea( APTR Address, ULONG Size ); 231 VOID CacheInvalidInstArea( APTR Address, ULONG Size ); 232 VOID CacheInvalidDataArea( APTR Address, ULONG Size ); 233 VOID CacheFlushDataInstArea( APTR Address, ULONG Size ); 234 VOID CacheTrashCacheArea( APTR Address, ULONG Size ); 235 236 APTR AllocTaskPooled( ULONG Size ); 237 VOID FreeTaskPooled( APTR Address, ULONG Size ); 238 239 APTR AllocVecTaskPooled( ULONG Size ); 240 VOID FreeVecTaskPooled( APTR Address ); 241 242 VOID FlushPool( APTR poolHeader ); 243 VOID FlushTaskPool( VOID ); 244 245 APTR AllocVecPooled( APTR poolHeader, ULONG memSize ); 246 VOID FreeVecPooled( APTR poolHeader, APTR memory ); 247 248 ULONG NewGetSystemAttrsA( APTR MyData, ULONG MySize, ULONG MyType, struct TagItem *MyTags ); 249 #if !defined(USE_INLINE_STDARG) 250 ULONG NewGetSystemAttrs( APTR MyData, ULONG MySize, ULONG MyType, ... ); 251 #endif 252 253 ULONG NewSetSystemAttrsA( APTR MyData, ULONG MySize, ULONG MyType, struct TagItem *MyTags ); 254 #if !defined(USE_INLINE_STDARG) 255 ULONG NewSetSystemAttrs( APTR MyData, ULONG MySize, ULONG MyType, ... ); 256 #endif 257 258 struct Task *NewCreateTaskA( struct TagItem *MyTags ); 259 #if !defined(USE_INLINE_STDARG) 260 struct Task *NewCreateTask( Tag tag1, ... ); 261 #endif 262 263 APTR AllocateAligned( struct MemHeader *memHeader, ULONG byteSize, ULONG alignSize, ULONG alignOffset ); 264 APTR AllocMemAligned( ULONG byteSize, ULONG attributes, ULONG alignSize, ULONG alignOffset ); 265 APTR AllocVecAligned( ULONG byteSize, ULONG attributes, ULONG alignSize, ULONG alignOffset ); 266 267 VOID AddExecNotify( struct Hook *hook ); 268 VOID RemExecNotify( struct Hook *hook ); 269 struct Node *FindExecNode( ULONG type, CONST_STRPTR name ); 270 APTR AddExecNodeA( APTR innode, struct TagItem *Tags ); 271 #if !defined(USE_INLINE_STDARG) 272 APTR AddExecNode( APTR innode, ... ); 273 #endif 274 275 APTR AllocVecDMA( ULONG byteSize, ULONG requirements ); 276 VOID FreeVecDMA( APTR memoryBlock ); 277 278 APTR AllocPooledAligned( APTR poolHeader, ULONG byteSize, ULONG alignSize, ULONG alignOffset ); 279 280 LONG AddResident( struct Resident *resident ); 281 282 struct Task *FindTaskByPID( ULONG processID ); 283 284 285 void DumpTaskState( struct Task *task ); 286 287 void AddExecNotifyType( struct Hook *hook, LONG Type ); 288 289 ULONG ShutdownA( struct TagItem *MyTags ); 290 291 292 ULONG AvailPool( APTR poolHeader, ULONG flags ); 293 294 295 void PutMsgHead( struct MsgPort *port, struct Message *message ); 296 297 ULONG NewGetTaskPIDAttrsA( ULONG pid, APTR data, ULONG dataSize, ULONG type, struct TagItem *tags ); 298 #if !defined(USE_INLINE_STDARG) 299 ULONG NewGetTaskPIDAttrs( ULONG pid, APTR data, ULONG dataSize, ULONG type, ... ); 300 #endif 301 302 ULONG NewSetTaskPIDAttrsA( ULONG pid, APTR data, ULONG dataSize, ULONG type, struct TagItem *tags ); 303 #if !defined(USE_INLINE_STDARG) 304 ULONG NewSetTaskPIDAttrs( ULONG pid, APTR data, ULONG dataSize, ULONG type, ... ); 305 #endif 306 307 308 /* TLS support functions (added in V51.46) */ 309 ULONG TLSAllocA( struct TagItem *tags ); 310 #if !defined(USE_INLINE_STDARG) 311 ULONG TLSAlloc( ULONG tag1, ... ); 312 #endif 313 LONG TLSFree( ULONG idx ); 314 APTR TLSGetValue( ULONG idx ); 315 LONG TLSSetValue( ULONG idx, APTR value ); 316 VOID TLSCallDestructors( struct Task *task ); 317 318 #ifdef __cplusplus 319 } 320 #endif /* __cplusplus */ 321 322 #ifndef NewMinList 323 #define NewMinList(minlist) NewList((struct List *)(minlist)) 324 #endif 325 326 327 #endif /* CLIB_EXEC_PROTOS_H */