mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:12:45 +00:00 
			
		
		
		
	Kernel: Move IRQController and InterruptManagement to Arch directory
These 2 classes currently contain much code that is x86(_64) specific. Move them to the architecture specific directory. This also allows for a simpler implementation for aarch64.
This commit is contained in:
		
							parent
							
								
									63ee2781fb
								
							
						
					
					
						commit
						f085903f62
					
				
					 22 changed files with 106 additions and 19 deletions
				
			
		
							
								
								
									
										17
									
								
								Kernel/Arch/IRQController.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Kernel/Arch/IRQController.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2022, Timon Kruiper <timonkruiper@gmail.com> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <AK/Platform.h> | ||||
| 
 | ||||
| #if ARCH(X86_64) || ARCH(I386) | ||||
| #    include <Kernel/Arch/x86/IRQController.h> | ||||
| #elif ARCH(AARCH64) | ||||
| #    include <Kernel/Arch/aarch64/IRQController.h> | ||||
| #else | ||||
| #    error "Unknown architecture" | ||||
| #endif | ||||
							
								
								
									
										17
									
								
								Kernel/Arch/InterruptManagement.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Kernel/Arch/InterruptManagement.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2022, Timon Kruiper <timonkruiper@gmail.com> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <AK/Platform.h> | ||||
| 
 | ||||
| #if ARCH(X86_64) || ARCH(I386) | ||||
| #    include <Kernel/Arch/x86/InterruptManagement.h> | ||||
| #elif ARCH(AARCH64) | ||||
| #    include <Kernel/Arch/aarch64/InterruptManagement.h> | ||||
| #else | ||||
| #    error "Unknown architecture" | ||||
| #endif | ||||
|  | @ -7,8 +7,8 @@ | |||
| #include <AK/Singleton.h> | ||||
| #include <AK/Types.h> | ||||
| 
 | ||||
| #include <Kernel/Arch/aarch64/InterruptManagement.h> | ||||
| #include <Kernel/FileSystem/Inode.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/KString.h> | ||||
| #include <Kernel/Locking/SpinlockProtected.h> | ||||
| #include <Kernel/Memory/SharedInodeVMObject.h> | ||||
|  |  | |||
							
								
								
									
										31
									
								
								Kernel/Arch/aarch64/IRQController.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Kernel/Arch/aarch64/IRQController.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <AK/RefCounted.h> | ||||
| #include <AK/Types.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| class GenericInterruptHandler; | ||||
| 
 | ||||
| class IRQController : public RefCounted<IRQController> { | ||||
| public: | ||||
|     virtual ~IRQController() = default; | ||||
| 
 | ||||
|     virtual void enable(GenericInterruptHandler const&) = 0; | ||||
|     virtual void disable(GenericInterruptHandler const&) = 0; | ||||
| 
 | ||||
|     virtual void eoi(GenericInterruptHandler const&) const = 0; | ||||
| 
 | ||||
|     virtual StringView model() const = 0; | ||||
| 
 | ||||
| protected: | ||||
|     IRQController() = default; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										22
									
								
								Kernel/Arch/aarch64/InterruptManagement.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Kernel/Arch/aarch64/InterruptManagement.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <Kernel/Arch/aarch64/IRQController.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| class InterruptManagement { | ||||
| public: | ||||
|     static InterruptManagement& the(); | ||||
| 
 | ||||
|     static u8 acquire_mapped_interrupt_number(u8 original_irq); | ||||
| 
 | ||||
|     RefPtr<IRQController> get_responsible_irq_controller(u8 interrupt_vector); | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  | @ -11,6 +11,8 @@ | |||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| class GenericInterruptHandler; | ||||
| 
 | ||||
| enum class IRQControllerType { | ||||
|     i8259 = 1,   /* Intel 8259 Dual PIC */ | ||||
|     i82093AA = 2 /* Intel 82093AA I/O ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (IOAPIC) */ | ||||
|  | @ -12,10 +12,10 @@ | |||
| #include <AK/RefCounted.h> | ||||
| #include <AK/RefPtr.h> | ||||
| #include <AK/Types.h> | ||||
| #include <Kernel/Arch/x86/IRQController.h> | ||||
| #include <Kernel/Firmware/ACPI/Definitions.h> | ||||
| #include <Kernel/Interrupts/GenericInterruptHandler.h> | ||||
| #include <Kernel/Interrupts/IOAPIC.h> | ||||
| #include <Kernel/Interrupts/IRQController.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
|  | @ -8,11 +8,11 @@ | |||
| #include <Kernel/API/Syscall.h> | ||||
| #include <Kernel/Arch/InterruptDisabler.h> | ||||
| #include <Kernel/Arch/Interrupts.h> | ||||
| #include <Kernel/Arch/x86/InterruptManagement.h> | ||||
| #include <Kernel/CommandLine.h> | ||||
| #include <Kernel/Firmware/MultiProcessor/Parser.h> | ||||
| #include <Kernel/Interrupts/APIC.h> | ||||
| #include <Kernel/Interrupts/IOAPIC.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/Interrupts/PIC.h> | ||||
| #include <Kernel/Interrupts/SharedIRQHandler.h> | ||||
| #include <Kernel/Interrupts/SpuriousInterruptHandler.h> | ||||
|  | @ -159,7 +159,6 @@ set(KERNEL_SOURCES | |||
|     Interrupts/GenericInterruptHandler.cpp | ||||
|     Interrupts/IOAPIC.cpp | ||||
|     Interrupts/IRQHandler.cpp | ||||
|     Interrupts/InterruptManagement.cpp | ||||
|     Interrupts/PIC.cpp | ||||
|     Interrupts/SharedIRQHandler.cpp | ||||
|     Interrupts/SpuriousInterruptHandler.cpp | ||||
|  | @ -331,9 +330,10 @@ if ("${SERENITY_ARCH}" STREQUAL "i686" OR "${SERENITY_ARCH}" STREQUAL "x86_64") | |||
|         ${KERNEL_SOURCES} | ||||
|          | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/ASM_wrapper.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/CrashHandler.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/CPU.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/CPUID.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/CrashHandler.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/InterruptManagement.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/Interrupts.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/PageDirectory.cpp | ||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/Arch/x86/common/Processor.cpp | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ | |||
| #include <AK/Try.h> | ||||
| #include <AK/UBSanitizer.h> | ||||
| #include <Kernel/Arch/InterruptDisabler.h> | ||||
| #include <Kernel/Arch/InterruptManagement.h> | ||||
| #include <Kernel/Arch/x86/ProcessorInfo.h> | ||||
| #include <Kernel/Bus/PCI/API.h> | ||||
| #include <Kernel/Bus/PCI/Access.h> | ||||
|  | @ -20,7 +21,6 @@ | |||
| #include <Kernel/FileSystem/OpenFileDescription.h> | ||||
| #include <Kernel/Heap/kmalloc.h> | ||||
| #include <Kernel/Interrupts/GenericInterruptHandler.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/KBufferBuilder.h> | ||||
| #include <Kernel/Net/LocalSocket.h> | ||||
| #include <Kernel/Net/NetworkingManagement.h> | ||||
|  |  | |||
|  | @ -4,10 +4,10 @@ | |||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #include <Kernel/Arch/InterruptManagement.h> | ||||
| #include <Kernel/Arch/Interrupts.h> | ||||
| #include <Kernel/Assertions.h> | ||||
| #include <Kernel/Interrupts/GenericInterruptHandler.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| GenericInterruptHandler& GenericInterruptHandler::from(u8 interrupt_number) | ||||
|  |  | |||
|  | @ -6,10 +6,10 @@ | |||
| 
 | ||||
| #include <AK/Optional.h> | ||||
| #include <Kernel/Arch/InterruptDisabler.h> | ||||
| #include <Kernel/Arch/x86/InterruptManagement.h> | ||||
| #include <Kernel/Debug.h> | ||||
| #include <Kernel/Interrupts/APIC.h> | ||||
| #include <Kernel/Interrupts/IOAPIC.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/Sections.h> | ||||
| 
 | ||||
| #define IOAPIC_REDIRECTION_ENTRY_OFFSET 0x10 | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <Kernel/Interrupts/IRQController.h> | ||||
| #include <Kernel/Arch/x86/IRQController.h> | ||||
| #include <Kernel/Memory/TypedMapping.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
|  |  | |||
|  | @ -5,9 +5,9 @@ | |||
|  */ | ||||
| 
 | ||||
| #include <Kernel/Arch/InterruptDisabler.h> | ||||
| #include <Kernel/Arch/InterruptManagement.h> | ||||
| #include <Kernel/Debug.h> | ||||
| #include <Kernel/Interrupts/IRQHandler.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ | |||
| 
 | ||||
| #include <AK/RefPtr.h> | ||||
| #include <AK/Types.h> | ||||
| #include <Kernel/Arch/IRQController.h> | ||||
| #include <Kernel/Interrupts/GenericInterruptHandler.h> | ||||
| #include <Kernel/Interrupts/IRQController.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <AK/Types.h> | ||||
| #include <Kernel/Interrupts/IRQController.h> | ||||
| #include <Kernel/Arch/x86/IRQController.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,11 +4,10 @@ | |||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #include <Kernel/Arch/InterruptManagement.h> | ||||
| #include <Kernel/Assertions.h> | ||||
| #include <Kernel/Debug.h> | ||||
| #include <Kernel/Interrupts/IRQHandler.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/Interrupts/PIC.h> | ||||
| #include <Kernel/Interrupts/SharedIRQHandler.h> | ||||
| #include <Kernel/Sections.h> | ||||
| 
 | ||||
|  |  | |||
|  | @ -9,8 +9,8 @@ | |||
| #include <AK/NonnullOwnPtr.h> | ||||
| #include <AK/RefPtr.h> | ||||
| #include <AK/Types.h> | ||||
| #include <Kernel/Arch/IRQController.h> | ||||
| #include <Kernel/Interrupts/GenericInterruptHandler.h> | ||||
| #include <Kernel/Interrupts/IRQController.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| class IRQHandler; | ||||
|  |  | |||
|  | @ -4,8 +4,8 @@ | |||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #include <Kernel/Arch/InterruptManagement.h> | ||||
| #include <Kernel/Arch/x86/Interrupts.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/Interrupts/PIC.h> | ||||
| #include <Kernel/Interrupts/SpuriousInterruptHandler.h> | ||||
| #include <Kernel/Sections.h> | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ | |||
| 
 | ||||
| #include <AK/OwnPtr.h> | ||||
| #include <AK/Types.h> | ||||
| #include <Kernel/Arch/IRQController.h> | ||||
| #include <Kernel/Interrupts/GenericInterruptHandler.h> | ||||
| #include <Kernel/Interrupts/IRQController.h> | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,7 +7,6 @@ | |||
| #include <AK/StringView.h> | ||||
| #include <Kernel/Debug.h> | ||||
| #include <Kernel/Firmware/ACPI/Parser.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/Memory/MemoryManager.h> | ||||
| #include <Kernel/Memory/TypedMapping.h> | ||||
| #include <Kernel/Sections.h> | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
|  */ | ||||
| 
 | ||||
| #include <AK/Types.h> | ||||
| #include <Kernel/Arch/InterruptManagement.h> | ||||
| #include <Kernel/Arch/Processor.h> | ||||
| #include <Kernel/BootInfo.h> | ||||
| #include <Kernel/Bus/PCI/Access.h> | ||||
|  | @ -38,7 +39,6 @@ | |||
| #include <Kernel/Graphics/GraphicsManagement.h> | ||||
| #include <Kernel/Heap/kmalloc.h> | ||||
| #include <Kernel/Interrupts/APIC.h> | ||||
| #include <Kernel/Interrupts/InterruptManagement.h> | ||||
| #include <Kernel/Interrupts/PIC.h> | ||||
| #include <Kernel/KSyms.h> | ||||
| #include <Kernel/Memory/MemoryManager.h> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Timon Kruiper
						Timon Kruiper