diff options
author | Ian Moffett <ian@osmora.org> | 2025-09-15 11:03:10 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-09-15 11:03:10 -0400 |
commit | cff93b1fb12540f6945754ba75da3d4d1a891dc7 (patch) | |
tree | 3f5abadb90c652653fee1fc1a0af2df3528d4dbe /src/sys/include | |
parent | 5e3270af3c21a49fe75770d39e9dce483e759e9c (diff) |
kern/amd64: Add I/O APIC initialization code
This commit introduces the initial I/O APIC driver code that does basic
initialization i.e., grabbing base address from MADT, masking each pin,
etc.
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'src/sys/include')
-rw-r--r-- | src/sys/include/arch/amd64/ioapic.h | 51 | ||||
-rw-r--r-- | src/sys/include/arch/amd64/ioapicvar.h | 56 |
2 files changed, 107 insertions, 0 deletions
diff --git a/src/sys/include/arch/amd64/ioapic.h b/src/sys/include/arch/amd64/ioapic.h new file mode 100644 index 0000000..9cd8bd4 --- /dev/null +++ b/src/sys/include/arch/amd64/ioapic.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and L5 engineers + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _MACHINE_IOAPIC_H_ +#define _MACHINE_IOAPIC_H_ 1 + +/* Mask arguments for ioapic_gsi_mask() */ +#define IOAPIC_PIN_MASK 1 +#define IOAPIC_PIN_UNMASK 0 + +/* + * Initialize the I/O APIC into a basic state, + * all interrupts will be masked. + */ +void ioapic_init(void); + +/* + * Mask or unmask a global system interrupt by index + * + * @gsi: Global system interrupt to mask + * @mask: 1->masked,0->unmasked + */ +void ioapic_gsi_mask(uint8_t gsi, uint8_t mask); + +#endif /* !_MACHINE_IOAPIC_H_ */ diff --git a/src/sys/include/arch/amd64/ioapicvar.h b/src/sys/include/arch/amd64/ioapicvar.h new file mode 100644 index 0000000..eb4fab5 --- /dev/null +++ b/src/sys/include/arch/amd64/ioapicvar.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and L5 engineers + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _IOAPICVAR_H_ +#define _IOAPIC_VAR_H_ 1 + +/* Register offsets */ +#define IOREGSEL 0x00 +#define IOWIN 0x10 +#define IOREDTBL 0x10 +#define IOAPICID 0x00 +#define IOAPICVER 0x01 + +union ioapic_redentry { + struct { + uint8_t vector; + uint8_t delmod : 3; + uint8_t destmod : 1; + uint8_t delivs : 1; + uint8_t intpol : 1; + uint8_t remote_irr : 1; + uint8_t trigger_mode : 1; + uint8_t interrupt_mask : 1; + uint64_t reserved : 39; + uint8_t dest_field; + }; + uint64_t value; +}; + +#endif /* !_IOAPIC_VAR_H_ */ |