1 #ifndef KERNEL_INTERN_H_
2 #define KERNEL_INTERN_H_
5 #include <exec/nodes.h>
6 #include <exec/lists.h>
7 #include <aros/kernel.h>
8 #include <utility/tagitem.h>
16 struct KernBootPrivate
21 IPTR kbp_APIC_TrampolineBase
;
22 const struct GenericAPIC
**kbp_APIC_Drivers
;
23 IPTR kbp_APIC_DriverID
;
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)
36 struct List kb_Intr
[256];
40 IPTR kb_APIC_TrampolineBase
;
41 const struct GenericAPIC
**kb_APIC_Drivers
;
42 IPTR kb_APIC_DriverID
;
43 uint16_t kb_XTPIC_Mask
;
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
55 struct MinNode in_Node
;
56 void (*in_Handler
)(void *, void *);
58 void *in_HandlerData2
;
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
**);
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
;
113 static char tab
[512];
117 #define rkprintf(x...) scr_RawPutChars(tab, snprintf(tab, 510, x))
119 #endif /*KERNEL_INTERN_H_*/