Small additions to template (new command build_module_skeleton) to allow the generati...
[cake.git] / arch / x86_64-pc / kernel / kernel_intern.h
blob593f156589bec2948ad58826bcb1539cb8f4aed1
1 #ifndef KERNEL_INTERN_H_
2 #define KERNEL_INTERN_H_
4 #include <inttypes.h>
5 #include <exec/nodes.h>
6 #include <exec/lists.h>
7 #include <aros/kernel.h>
8 #include <utility/tagitem.h>
9 #include <asm/cpu.h>
11 #include <stdio.h>
13 #include "acpi.h"
14 #include "apic.h"
16 struct KernBootPrivate
18 IPTR kbp_PrivateNext;
19 IPTR kbp_InitFlags;
20 IPTR kbp_ACPIRSDP;
21 IPTR kbp_APIC_TrampolineBase;
22 const struct GenericAPIC **kbp_APIC_Drivers;
23 IPTR kbp_APIC_DriverID;
24 UWORD kbp_APIC_BSPID;
25 int kbp_APIC_IRQ_Model;
26 char kbp_BOOTCmdLine[200];
29 #define KERNBOOTFLAG_SERDEBUGCONFIGURED (1 << 0)
30 #define KERNBOOTFLAG_DEBUG (1 << 1)
31 #define KERNBOOTFLAG_BOOTCPUSET (1 << 2)
33 struct KernelBase {
34 struct Node kb_Node;
35 void * kb_MemPool;
36 struct List kb_Intr[256];
38 IPTR kb_ACPIRSDP;
40 IPTR kb_APIC_TrampolineBase;
41 const struct GenericAPIC **kb_APIC_Drivers;
42 IPTR kb_APIC_DriverID;
43 uint16_t kb_XTPIC_Mask;
44 UBYTE kb_APIC_Count;
45 UWORD *kb_APIC_IDMap; /* ACPI_ID << 8 | LOGICAL_ID */
46 IPTR *kb_APIC_BaseMap;
47 int kb_APIC_IRQ_Model;
50 #define KBL_INTERNAL 0
51 #define KBL_XTPIC 1
52 #define KBL_APIC 2
54 struct IntrNode {
55 struct MinNode in_Node;
56 void (*in_Handler)(void *, void *);
57 void *in_HandlerData;
58 void *in_HandlerData2;
61 #define SC_CAUSE 0
62 #define SC_DISPATCH 1
63 #define SC_SWITCH 2
64 #define SC_SCHEDULE 3
66 int exec_main(struct TagItem *msg, void *entry);
67 void core_LeaveInterrupt(regs_t *regs) __attribute__((noreturn));
68 void core_Switch(regs_t *regs) __attribute__((noreturn));
69 void core_Schedule(regs_t *regs) __attribute__((noreturn));
70 void core_Dispatch(regs_t *regs) __attribute__((noreturn));
71 void core_ExitInterrupt(regs_t *regs) __attribute__((noreturn));
72 void core_IRQHandle(regs_t regs);
73 void core_Cause(struct ExecBase *SysBase);
74 /** ACPI Functions **/
75 IPTR core_ACPIProbe(struct TagItem *, struct KernBootPrivate *);
76 ULONG core_ACPIInitialise(struct KernelBase *);
77 int core_ACPIIsBlacklisted();
78 IPTR core_ACPIRootSystemDescriptionPointerLocate();
79 IPTR core_ACPIRootSystemDescriptionPointerScan(IPTR, IPTR);
80 int core_ACPITableChecksum(void *, unsigned long);
81 IPTR core_ACPITableSDTGet(struct acpi_table_rsdp *);
82 int core_ACPITableParse(int, struct acpi_table_hook *);
83 int core_ACPITableMADTParse(int, struct acpi_madt_entry_hook *);
84 int core_ACPITableMADTFamParse(int, unsigned long, int, struct acpi_madt_entry_hook *);
85 int core_ACPITableHeaderEarly(int, struct acpi_table_header **);
86 /** CPU Functions **/
87 IPTR core_APICProbe(struct KernBootPrivate *);
88 UBYTE core_APICGetTotal();
89 UBYTE core_APICGetNumber();
90 void core_SetupIDT(struct KernBootPrivate *);
91 void core_SetupGDT(struct KernBootPrivate *);
92 void core_SetupMMU(struct KernBootPrivate *);
93 void core_CPUSetup(IPTR);
94 void core_ProtKernelArea(intptr_t addr, intptr_t length, char p, char rw, char us);
95 void core_DefaultIRETQ();
96 /** Kernel Attribute Functions **/
97 struct TagItem *krnNextTagItem(const struct TagItem **tagListPtr);
98 struct TagItem *krnFindTagItem(Tag tagValue, const struct TagItem *tagList);
99 IPTR krnGetTagData(Tag tagValue, intptr_t defaultVal, const struct TagItem *tagList);
100 void krnSetTagData(Tag tagValue, intptr_t newtagValue, const struct TagItem *tagList);
102 /* Debug support .. */
103 extern void Exec_SerialRawIOInit();
104 extern void scr_RawPutChars(char *, int);
105 extern ULONG __serial_rawio_speed;
106 extern UBYTE __serial_rawio_databits;
107 extern UBYTE __serial_rawio_parity;
108 extern UBYTE __serial_rawio_stopbits;
109 extern UWORD __serial_rawio_port;
110 extern unsigned char __serial_rawio_debug;
112 void clr();
113 static char tab[512];
114 #ifdef rkprintf
115 #undef rkprintf
116 #endif
117 #define rkprintf(x...) scr_RawPutChars(tab, snprintf(tab, 510, x))
119 #endif /*KERNEL_INTERN_H_*/