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 */