PatchworkOS  dbbdc99
A non-POSIX operating system.
Loading...
Searching...
No Matches
apic.c
Go to the documentation of this file.
4
5#include <kernel/cpu/cpu.h>
6#include <kernel/init/init.h>
7#include <kernel/log/log.h>
9
10#include <sys/defs.h>
11
12/**
13 * @brief Advanced Programmable Interrupt Controller.
14 * @defgroup kernel_drivers_apic APIC
15 * @ingroup kernel_drivers
16 *
17 * This module implements the Advanced Programmable Interrupt Controller (APIC) driver, which includes the per-CPU
18 * local APICs, the IO APICs and the APIC timer.
19 *
20 * @see [ACPI Specification Version 6.6](https://uefi.org/sites/default/files/resources/ACPI_Spec_6.6.pdf)
21 */
22
24{
25 switch (event->type)
26 {
28 if (lapic_global_init() == ERR)
29 {
30 LOG_ERR("failed to initialize local APICs\n");
31 return ERR;
32 }
33 if (apic_timer_init() == ERR)
34 {
35 LOG_ERR("failed to initialize APIC timer\n");
36 return ERR;
37 }
38 if (ioapic_all_init() == ERR)
39 {
40 LOG_ERR("failed to initialize IO APICs\n");
41 return ERR;
42 }
44 break;
47 break;
48 default:
49 break;
50 }
51
52 return 0;
53}
54
55MODULE_INFO("APIC Driver", "Kai Norberg", "A driver for the APIC, local APIC and IOAPIC", OS_VERSION, "MIT", "PNP0003");
uint64_t _module_procedure(const module_event_t *event)
Definition apic.c:23
#define PERCPU_INIT()
Initialize all percpu variables within the current modules .percpu section.
Definition percpu.h:194
#define PERCPU_DEINIT()
Deinitialize all percpu variables within the current modules .percpu section.
Definition percpu.h:205
uint64_t ioapic_all_init(void)
Initialize all IO APICs found in the system.
Definition ioapic.c:92
uint64_t lapic_global_init(void)
Global initialization for the local APICs.
Definition lapic.c:80
uint64_t apic_timer_init(void)
Initialize the APIC timer.
Definition apic_timer.c:84
#define LOG_ERR(format,...)
Definition log.h:93
#define MODULE_INFO(_name, _author, _description, _version, _licence, _deviceTypes)
Macro to define module information.
Definition module.h:200
@ MODULE_EVENT_DEVICE_ATTACH
Definition module.h:251
@ MODULE_EVENT_DEVICE_DETACH
Definition module.h:257
#define ERR
Integer error value.
Definition ERR.h:17
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
module_event_type_t type
Definition module.h:268