forked from Bananymous/banan-os
				
			Kernel: Move interrupt related functions to InterruptController
This commit is contained in:
		
							parent
							
								
									b5673278c4
								
							
						
					
					
						commit
						f7ebda3bf1
					
				| 
						 | 
					@ -2,6 +2,9 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DISABLE_INTERRUPTS() asm volatile("cli")
 | 
				
			||||||
 | 
					#define ENABLE_INTERRUPTS() asm volatile("sti")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class InterruptController
 | 
					class InterruptController
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
| 
						 | 
					@ -13,4 +16,8 @@ public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static void initialize(bool force_pic);
 | 
						static void initialize(bool force_pic);
 | 
				
			||||||
	static InterruptController& get();
 | 
						static InterruptController& get();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uintptr_t disable_interrupts_and_get_flags();
 | 
				
			||||||
 | 
					void restore_flags(uintptr_t);
 | 
				
			||||||
 | 
					bool interrupts_enabled();
 | 
				
			||||||
| 
						 | 
					@ -24,4 +24,23 @@ void InterruptController::initialize(bool force_pic)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	dprintln("Using PIC instead of APIC");
 | 
						dprintln("Using PIC instead of APIC");
 | 
				
			||||||
	s_instance = PIC::create();
 | 
						s_instance = PIC::create();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uintptr_t disable_interrupts_and_get_flags()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uintptr_t flags;
 | 
				
			||||||
 | 
						asm volatile("pushf; cli; pop %0" : "=r"(flags) :: "memory");
 | 
				
			||||||
 | 
						return flags;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void restore_flags(uintptr_t flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						asm volatile("push %0; popf" :: "rm"(flags) : "memory", "cc");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool interrupts_enabled()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uintptr_t flags;
 | 
				
			||||||
 | 
						asm volatile("pushf; pop %0" : "=r"(flags) :: "memory");
 | 
				
			||||||
 | 
						return flags & (1 << 9);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -5,12 +5,11 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <kernel/PCI.h>
 | 
					#include <kernel/PCI.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DISABLE_INTERRUPTS() asm volatile("cli")
 | 
					 | 
				
			||||||
#define ENABLE_INTERRUPTS() asm volatile("sti")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if 1
 | 
					#if 1
 | 
				
			||||||
	#define VERIFY_CLI() ASSERT(interrupts_disabled())
 | 
						#define VERIFY_STI() ASSERT(interrupts_enabled())
 | 
				
			||||||
 | 
						#define VERIFY_CLI() ASSERT(!interrupts_enabled())
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
						#define VERIFY_STI()
 | 
				
			||||||
	#define VERIFY_CLI()
 | 
						#define VERIFY_CLI()
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -23,13 +22,6 @@ namespace Kernel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static Scheduler* s_instance = nullptr;
 | 
						static Scheduler* s_instance = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	static bool interrupts_disabled()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		uintptr_t flags;
 | 
					 | 
				
			||||||
		asm volatile("pushf; pop %0" : "=r"(flags));
 | 
					 | 
				
			||||||
		return !(flags & (1 << 9));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	BAN::ErrorOr<void> Scheduler::initialize()
 | 
						BAN::ErrorOr<void> Scheduler::initialize()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		ASSERT(s_instance == nullptr);
 | 
							ASSERT(s_instance == nullptr);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,9 +17,6 @@
 | 
				
			||||||
#include <kernel/TTY.h>
 | 
					#include <kernel/TTY.h>
 | 
				
			||||||
#include <kernel/VesaTerminalDriver.h>
 | 
					#include <kernel/VesaTerminalDriver.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define DISABLE_INTERRUPTS() asm volatile("cli")
 | 
					 | 
				
			||||||
#define ENABLE_INTERRUPTS() asm volatile("sti")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern "C" const char g_kernel_cmdline[];
 | 
					extern "C" const char g_kernel_cmdline[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct ParsedCommandLine
 | 
					struct ParsedCommandLine
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue