move additions in IntExecBase to the end so that the remainder is consistent across...
[AROS.git] / rom / exec / exec_intern.h
bloba8cf1b67158a65341bf409ad86e37ea84b49cd54
1 /*
2 Copyright © 1995-2017, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: Private data belonging to exec.library
6 Lang:
7 */
8 #ifndef __EXEC_INTERN_H__
9 #define __EXEC_INTERN_H__
11 /* This is a short file that contains a few things every Exec function needs */
13 #include <aros/debug.h> /* Needed for aros_print_not_implemented macro */
14 #include <aros/system.h>
15 #include <aros/libcall.h>
16 #include <exec/execbase.h>
17 #include <proto/exec.h>
19 #include <exec_platform.h>
21 #if defined(__AROSEXEC_SMP__)
22 #include <aros/types/spinlock_s.h>
23 #endif
25 #define __KERNEL_NOLIBBASE__
26 #include <proto/kernel.h>
28 #define ALERT_BUFFER_SIZE 2048
31 Internals of this structure are host-specific, we don't know them here
33 struct HostInterface;
35 struct SupervisorAlertTask
37 struct Task *sat_Task; /* Task that tries to display supervisor-level alerts */
38 BOOL sat_IsAvailable;
39 IPTR sat_Params[2];
43 AROS specific private portion of ExecBase
45 struct IntExecBase
47 struct ExecBase pub;
48 struct List ResetHandlers; /* Reset handlers list */
49 struct Interrupt ColdResetHandler; /* Reset handler that causes cold reboot */
50 struct Interrupt WarmResetHandler; /* Reset handler that causes warm reboot */
51 struct Interrupt ShutdownHandler; /* Reset handler that halts CPU */
52 struct MinList AllocMemList; /* Mungwall allocations list */
53 struct SignalSemaphore LowMemSem; /* Lock for single-threading low memory handlers */
54 APTR KernelBase; /* kernel.resource base */
55 struct Library *DebugBase; /* debug.library base */
56 ULONG PageSize; /* Memory page size */
57 ULONG IntFlags; /* Internal flags, see below */
58 struct MsgPort *ServicePort; /* Message port for service task */
59 struct MinList TaskStorageSlots; /* List of free slots, always one element with next slot */
60 struct List AllocatorCtxList; /* List of allocator contexts for system mem headers */
61 struct Exec_PlatformData PlatformData; /* Platform-specific stuff */
62 struct SupervisorAlertTask SAT;
63 char AlertBuffer[ALERT_BUFFER_SIZE]; /* Buffer for alert text */
64 #if defined(__AROSEXEC_BROKENMEMLOCK__)
65 struct SignalSemaphore MemListSem; /* Memory list protection semaphore */
66 #elif defined(__AROSEXEC_SMP__)
67 spinlock_t MemListSpinLock;
68 /* First the locks for arbitration of public resources ... */
69 spinlock_t ResourceListSpinLock;
70 spinlock_t DeviceListSpinLock;
71 spinlock_t IntrListSpinLock;
72 spinlock_t LibListSpinLock;
73 spinlock_t PortListSpinLock;
74 spinlock_t SemListSpinLock;
76 /* .. and then scheduling related locks ... */
77 spinlock_t TaskRunningSpinLock;
78 struct List TaskRunning; /* Tasks that are currently running on available CPUs */
79 spinlock_t TaskSpinningLock;
80 struct List TaskSpinning; /* Tasks that are spinning waiting for a lock */
81 spinlock_t TaskReadySpinLock;
82 spinlock_t TaskWaitSpinLock;
83 #endif
86 #define PrivExecBase(base) ((struct IntExecBase *)(base))
87 #define PD(base) PrivExecBase(base)->PlatformData
88 #ifndef __AROS_KERNEL__
89 #define KernelBase PrivExecBase(SysBase)->KernelBase
90 #else
91 #define __kernelBase PrivExecBase(SysBase)->KernelBase
92 #endif
93 #define DebugBase PrivExecBase(SysBase)->DebugBase
95 /* IntFlags */
96 #define EXECF_MungWall 0x0001 /* This flag can't be changed at runtime */
97 #define EXECF_StackSnoop 0x0002
99 /* Additional private task states */
100 #define TS_SERVICE 128
102 /* Puddle size, in slots. Must be at least 1 */
103 #define TASKSTORAGEPUDDLE 16
105 #if UseLVOs
106 extern void __AROS_InitExecBase (void);
107 #endif
109 struct ExecBase *PrepareExecBase(struct MemHeader *mh, struct TagItem *tags);
110 void InitExecBase(struct ExecBase *SysBase, ULONG negsize, struct TagItem *msg);
111 struct ExecBase *PrepareExecBaseMove(struct ExecBase *oldSysBase);
112 BOOL Exec_PreparePlatform(struct Exec_PlatformData *pdata, struct TagItem *tags);
114 void InitKickTags(struct ExecBase *SysBase);
115 UWORD GetSysBaseChkSum(struct ExecBase *sysbase);
116 void SetSysBaseChkSum(void);
117 BOOL IsSysBaseValid(struct ExecBase *sysbase);
119 IPTR cpu_SuperState();
121 void ServiceTask(struct ExecBase *SysBase);
123 #endif /* __EXEC_INTERN_H__ */