Kernel: Rename TimerHandler to SystemTimer
I changed SystemTimer to only handle the "best" supported timer it can initialize.
This commit is contained in:
		
							parent
							
								
									ca5a097ef5
								
							
						
					
					
						commit
						c732297623
					
				|  | @ -15,11 +15,11 @@ namespace Kernel | ||||||
| 		virtual timespec time_since_boot() const = 0; | 		virtual timespec time_since_boot() const = 0; | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	class TimerHandler : public Timer | 	class SystemTimer : public Timer | ||||||
| 	{ | 	{ | ||||||
| 	public: | 	public: | ||||||
| 		static void initialize(); | 		static void initialize(); | ||||||
| 		static TimerHandler& get(); | 		static SystemTimer& get(); | ||||||
| 		static bool is_initialized(); | 		static bool is_initialized(); | ||||||
| 
 | 
 | ||||||
| 		virtual uint64_t ms_since_boot() const override; | 		virtual uint64_t ms_since_boot() const override; | ||||||
|  | @ -27,10 +27,10 @@ namespace Kernel | ||||||
| 		 | 		 | ||||||
| 		void sleep(uint64_t) const; | 		void sleep(uint64_t) const; | ||||||
| 
 | 
 | ||||||
| 		uint64_t get_unix_timestamp(); | 		uint64_t get_unix_timestamp() const; | ||||||
| 
 | 
 | ||||||
| 	private: | 	private: | ||||||
| 		TimerHandler() = default; | 		SystemTimer() = default; | ||||||
| 
 | 
 | ||||||
| 		void initialize_timers(); | 		void initialize_timers(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -58,7 +58,7 @@ namespace Debug | ||||||
| 
 | 
 | ||||||
| 	void print_prefix(const char* file, int line) | 	void print_prefix(const char* file, int line) | ||||||
| 	{ | 	{ | ||||||
| 		auto ms_since_boot = Kernel::TimerHandler::is_initialized() ? Kernel::TimerHandler::get().ms_since_boot() : 0; | 		auto ms_since_boot = Kernel::SystemTimer::is_initialized() ? Kernel::SystemTimer::get().ms_since_boot() : 0; | ||||||
| 		BAN::Formatter::print(Debug::putchar, "[{5}.{3}] {}:{}: ", ms_since_boot / 1000, ms_since_boot % 1000, file, line); | 		BAN::Formatter::print(Debug::putchar, "[{5}.{3}] {}:{}: ", ms_since_boot / 1000, ms_since_boot % 1000, file, line); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ namespace Kernel | ||||||
| 					); | 					); | ||||||
| 					s_instance->m_device_lock.unlock(); | 					s_instance->m_device_lock.unlock(); | ||||||
| 
 | 
 | ||||||
| 					Kernel::TimerHandler::get().sleep(1); | 					Kernel::SystemTimer::get().sleep(1); | ||||||
| 				} | 				} | ||||||
| 			}, nullptr | 			}, nullptr | ||||||
| 		); | 		); | ||||||
|  |  | ||||||
|  | @ -384,7 +384,7 @@ namespace Kernel | ||||||
| 		if (error_or.error().get_error_code() != ENOENT) | 		if (error_or.error().get_error_code() != ENOENT) | ||||||
| 			return error_or.error(); | 			return error_or.error(); | ||||||
| 
 | 
 | ||||||
| 		uint64_t current_time = TimerHandler::get().get_unix_timestamp(); | 		uint64_t current_time = SystemTimer::get().get_unix_timestamp(); | ||||||
| 
 | 
 | ||||||
| 		Ext2::Inode ext2_inode; | 		Ext2::Inode ext2_inode; | ||||||
| 		ext2_inode.mode			= mode; | 		ext2_inode.mode			= mode; | ||||||
|  |  | ||||||
|  | @ -17,7 +17,7 @@ namespace Kernel | ||||||
| 		: m_uid(credentials.euid()) | 		: m_uid(credentials.euid()) | ||||||
| 		, m_gid(credentials.egid()) | 		, m_gid(credentials.egid()) | ||||||
| 	{ | 	{ | ||||||
| 		uint64_t current_time = TimerHandler::get().get_unix_timestamp(); | 		uint64_t current_time = SystemTimer::get().get_unix_timestamp(); | ||||||
| 		m_atime = { .tv_sec = current_time, .tv_nsec = 0 }; | 		m_atime = { .tv_sec = current_time, .tv_nsec = 0 }; | ||||||
| 		m_mtime = { .tv_sec = current_time, .tv_nsec = 0 }; | 		m_mtime = { .tv_sec = current_time, .tv_nsec = 0 }; | ||||||
| 		m_ctime = { .tv_sec = current_time, .tv_nsec = 0 }; | 		m_ctime = { .tv_sec = current_time, .tv_nsec = 0 }; | ||||||
|  | @ -57,7 +57,7 @@ namespace Kernel | ||||||
| 		memmove(m_buffer.data(), m_buffer.data() + to_copy, m_buffer.size() - to_copy); | 		memmove(m_buffer.data(), m_buffer.data() + to_copy, m_buffer.size() - to_copy); | ||||||
| 		MUST(m_buffer.resize(m_buffer.size() - to_copy)); | 		MUST(m_buffer.resize(m_buffer.size() - to_copy)); | ||||||
| 
 | 
 | ||||||
| 		uint64_t current_time = TimerHandler::get().get_unix_timestamp(); | 		uint64_t current_time = SystemTimer::get().get_unix_timestamp(); | ||||||
| 		m_atime = { .tv_sec = current_time, .tv_nsec = 0 }; | 		m_atime = { .tv_sec = current_time, .tv_nsec = 0 }; | ||||||
| 
 | 
 | ||||||
| 		m_semaphore.unblock(); | 		m_semaphore.unblock(); | ||||||
|  | @ -76,7 +76,7 @@ namespace Kernel | ||||||
| 		TRY(m_buffer.resize(old_size + count)); | 		TRY(m_buffer.resize(old_size + count)); | ||||||
| 		memcpy(m_buffer.data() + old_size, buffer, count); | 		memcpy(m_buffer.data() + old_size, buffer, count); | ||||||
| 
 | 
 | ||||||
| 		uint64_t current_time = TimerHandler::get().get_unix_timestamp(); | 		uint64_t current_time = SystemTimer::get().get_unix_timestamp(); | ||||||
| 		m_mtime = { .tv_sec = current_time, .tv_nsec = 0 }; | 		m_mtime = { .tv_sec = current_time, .tv_nsec = 0 }; | ||||||
| 		m_ctime = { .tv_sec = current_time, .tv_nsec = 0 }; | 		m_ctime = { .tv_sec = current_time, .tv_nsec = 0 }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ namespace Kernel | ||||||
| 	RamInode::RamInode(RamFileSystem& fs, mode_t mode, uid_t uid, gid_t gid) | 	RamInode::RamInode(RamFileSystem& fs, mode_t mode, uid_t uid, gid_t gid) | ||||||
| 			: m_fs(fs) | 			: m_fs(fs) | ||||||
| 	{ | 	{ | ||||||
| 		uint64_t current_unix_time = TimerHandler::get().get_unix_timestamp(); | 		uint64_t current_unix_time = SystemTimer::get().get_unix_timestamp(); | ||||||
| 		timespec current_timespec; | 		timespec current_timespec; | ||||||
| 		current_timespec.tv_sec = current_unix_time; | 		current_timespec.tv_sec = current_unix_time; | ||||||
| 		current_timespec.tv_nsec = 0; | 		current_timespec.tv_nsec = 0; | ||||||
|  |  | ||||||
|  | @ -108,8 +108,8 @@ namespace Kernel::Input | ||||||
| 	{ | 	{ | ||||||
| 		if (device == 1) | 		if (device == 1) | ||||||
| 			IO::outb(PS2::IOPort::COMMAND, PS2::Command::WRITE_TO_SECOND_PORT); | 			IO::outb(PS2::IOPort::COMMAND, PS2::Command::WRITE_TO_SECOND_PORT); | ||||||
| 		uint64_t timeout = TimerHandler::get().ms_since_boot() + s_device_timeout_ms; | 		uint64_t timeout = SystemTimer::get().ms_since_boot() + s_device_timeout_ms; | ||||||
| 		while (TimerHandler::get().ms_since_boot() < timeout) | 		while (SystemTimer::get().ms_since_boot() < timeout) | ||||||
| 		{ | 		{ | ||||||
| 			if (!(IO::inb(PS2::IOPort::STATUS) & PS2::Status::INPUT_FULL)) | 			if (!(IO::inb(PS2::IOPort::STATUS) & PS2::Status::INPUT_FULL)) | ||||||
| 			{ | 			{ | ||||||
|  | @ -122,8 +122,8 @@ namespace Kernel::Input | ||||||
| 
 | 
 | ||||||
| 	static BAN::ErrorOr<uint8_t> device_read_byte() | 	static BAN::ErrorOr<uint8_t> device_read_byte() | ||||||
| 	{ | 	{ | ||||||
| 		uint64_t timeout = TimerHandler::get().ms_since_boot() + s_device_timeout_ms; | 		uint64_t timeout = SystemTimer::get().ms_since_boot() + s_device_timeout_ms; | ||||||
| 		while (TimerHandler::get().ms_since_boot() < timeout) | 		while (SystemTimer::get().ms_since_boot() < timeout) | ||||||
| 			if (IO::inb(PS2::IOPort::STATUS) & PS2::Status::OUTPUT_FULL) | 			if (IO::inb(PS2::IOPort::STATUS) & PS2::Status::OUTPUT_FULL) | ||||||
| 				return IO::inb(PS2::IOPort::DATA); | 				return IO::inb(PS2::IOPort::DATA); | ||||||
| 		return BAN::Error::from_error_code(ErrorCode::PS2_Timeout); | 		return BAN::Error::from_error_code(ErrorCode::PS2_Timeout); | ||||||
|  |  | ||||||
|  | @ -216,7 +216,7 @@ namespace Kernel::Input | ||||||
| 
 | 
 | ||||||
| 		if (event.pressed() && event.key == Input::Key::F11) | 		if (event.pressed() && event.key == Input::Key::F11) | ||||||
| 		{ | 		{ | ||||||
| 			auto time = TimerHandler::get().time_since_boot(); | 			auto time = SystemTimer::get().time_since_boot(); | ||||||
| 			dprintln("{}.{9} s", time.tv_sec, time.tv_nsec); | 			dprintln("{}.{9} s", time.tv_sec, time.tv_nsec); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -473,7 +473,7 @@ namespace Kernel | ||||||
| 
 | 
 | ||||||
| 	BAN::ErrorOr<long> Process::sys_sleep(int seconds) | 	BAN::ErrorOr<long> Process::sys_sleep(int seconds) | ||||||
| 	{ | 	{ | ||||||
| 		TimerHandler::get().sleep(seconds * 1000); | 		SystemTimer::get().sleep(seconds * 1000); | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -811,7 +811,7 @@ namespace Kernel | ||||||
| 		{ | 		{ | ||||||
| 			case CLOCK_MONOTONIC: | 			case CLOCK_MONOTONIC: | ||||||
| 			{ | 			{ | ||||||
| 				uint64_t time_ms = TimerHandler::get().ms_since_boot(); | 				uint64_t time_ms = SystemTimer::get().ms_since_boot(); | ||||||
| 				tp->tv_sec  =  time_ms / 1000; | 				tp->tv_sec  =  time_ms / 1000; | ||||||
| 				tp->tv_nsec = (time_ms % 1000) * 1000000; | 				tp->tv_nsec = (time_ms % 1000) * 1000000; | ||||||
| 				break; | 				break; | ||||||
|  |  | ||||||
|  | @ -113,7 +113,7 @@ namespace Kernel | ||||||
| 	{ | 	{ | ||||||
| 		VERIFY_CLI(); | 		VERIFY_CLI(); | ||||||
| 
 | 
 | ||||||
| 		uint64_t current_time = TimerHandler::get().ms_since_boot(); | 		uint64_t current_time = SystemTimer::get().ms_since_boot(); | ||||||
| 		while (!m_sleeping_threads.empty() && m_sleeping_threads.front().wake_time <= current_time) | 		while (!m_sleeping_threads.empty() && m_sleeping_threads.front().wake_time <= current_time) | ||||||
| 		{ | 		{ | ||||||
| 			Thread* thread = m_sleeping_threads.front().thread; | 			Thread* thread = m_sleeping_threads.front().thread; | ||||||
|  |  | ||||||
|  | @ -100,7 +100,7 @@ namespace Kernel | ||||||
| 	{ | 	{ | ||||||
| 		uint8_t device_index = this->device_index(device); | 		uint8_t device_index = this->device_index(device); | ||||||
| 		io_write(ATA_PORT_DRIVE_SELECT, 0xA0 | (device_index << 4)); | 		io_write(ATA_PORT_DRIVE_SELECT, 0xA0 | (device_index << 4)); | ||||||
| 		TimerHandler::get().sleep(1); | 		SystemTimer::get().sleep(1); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	ATABus::DeviceType ATABus::identify(const ATADevice& device, uint16_t* buffer) | 	ATABus::DeviceType ATABus::identify(const ATADevice& device, uint16_t* buffer) | ||||||
|  | @ -111,7 +111,7 @@ namespace Kernel | ||||||
| 		io_write(ATA_PORT_CONTROL, ATA_CONTROL_nIEN); | 		io_write(ATA_PORT_CONTROL, ATA_CONTROL_nIEN); | ||||||
| 
 | 
 | ||||||
| 		io_write(ATA_PORT_COMMAND, ATA_COMMAND_IDENTIFY); | 		io_write(ATA_PORT_COMMAND, ATA_COMMAND_IDENTIFY); | ||||||
| 		TimerHandler::get().sleep(1); | 		SystemTimer::get().sleep(1); | ||||||
| 
 | 
 | ||||||
| 		// No device on port
 | 		// No device on port
 | ||||||
| 		if (io_read(ATA_PORT_STATUS) == 0) | 		if (io_read(ATA_PORT_STATUS) == 0) | ||||||
|  | @ -135,7 +135,7 @@ namespace Kernel | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			io_write(ATA_PORT_COMMAND, ATA_COMMAND_IDENTIFY_PACKET); | 			io_write(ATA_PORT_COMMAND, ATA_COMMAND_IDENTIFY_PACKET); | ||||||
| 			TimerHandler::get().sleep(1); | 			SystemTimer::get().sleep(1); | ||||||
| 
 | 
 | ||||||
| 			if (auto res = wait(true); res.is_error()) | 			if (auto res = wait(true); res.is_error()) | ||||||
| 			{ | 			{ | ||||||
|  | @ -304,7 +304,7 @@ namespace Kernel | ||||||
| 			io_write(ATA_PORT_LBA2, (uint8_t)(lba >> 16)); | 			io_write(ATA_PORT_LBA2, (uint8_t)(lba >> 16)); | ||||||
| 			io_write(ATA_PORT_COMMAND, ATA_COMMAND_WRITE_SECTORS); | 			io_write(ATA_PORT_COMMAND, ATA_COMMAND_WRITE_SECTORS); | ||||||
| 
 | 
 | ||||||
| 			TimerHandler::get().sleep(1); | 			SystemTimer::get().sleep(1); | ||||||
| 
 | 
 | ||||||
| 			for (uint32_t sector = 0; sector < sector_count; sector++) | 			for (uint32_t sector = 0; sector < sector_count; sector++) | ||||||
| 			{ | 			{ | ||||||
|  |  | ||||||
|  | @ -6,29 +6,29 @@ | ||||||
| namespace Kernel | namespace Kernel | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
| 	static TimerHandler* s_instance = nullptr; | 	static SystemTimer* s_instance = nullptr; | ||||||
| 
 | 
 | ||||||
| 	void TimerHandler::initialize() | 	void SystemTimer::initialize() | ||||||
| 	{ | 	{ | ||||||
| 		ASSERT(s_instance == nullptr); | 		ASSERT(s_instance == nullptr); | ||||||
| 		auto* temp = new TimerHandler; | 		auto* temp = new SystemTimer; | ||||||
| 		ASSERT(temp); | 		ASSERT(temp); | ||||||
| 		temp->initialize_timers(); | 		temp->initialize_timers(); | ||||||
| 		s_instance = temp; | 		s_instance = temp; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	TimerHandler& TimerHandler::get() | 	SystemTimer& SystemTimer::get() | ||||||
| 	{ | 	{ | ||||||
| 		ASSERT(s_instance); | 		ASSERT(s_instance); | ||||||
| 		return *s_instance; | 		return *s_instance; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	bool TimerHandler::is_initialized() | 	bool SystemTimer::is_initialized() | ||||||
| 	{ | 	{ | ||||||
| 		return !!s_instance; | 		return !!s_instance; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	void TimerHandler::initialize_timers() | 	void SystemTimer::initialize_timers() | ||||||
| 	{ | 	{ | ||||||
| 		m_rtc = MUST(BAN::UniqPtr<RTC>::create()); | 		m_rtc = MUST(BAN::UniqPtr<RTC>::create()); | ||||||
| 		m_boot_time = BAN::to_unix_time(m_rtc->get_current_time()); | 		m_boot_time = BAN::to_unix_time(m_rtc->get_current_time()); | ||||||
|  | @ -54,17 +54,17 @@ namespace Kernel | ||||||
| 		Kernel::panic("Could not initialize any timer"); | 		Kernel::panic("Could not initialize any timer"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	uint64_t TimerHandler::ms_since_boot() const | 	uint64_t SystemTimer::ms_since_boot() const | ||||||
| 	{ | 	{ | ||||||
| 		return m_timer->ms_since_boot(); | 		return m_timer->ms_since_boot(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	timespec TimerHandler::time_since_boot() const | 	timespec SystemTimer::time_since_boot() const | ||||||
| 	{ | 	{ | ||||||
| 		return m_timer->time_since_boot(); | 		return m_timer->time_since_boot(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	void TimerHandler::sleep(uint64_t ms) const | 	void SystemTimer::sleep(uint64_t ms) const | ||||||
| 	{ | 	{ | ||||||
| 		if (ms == 0) | 		if (ms == 0) | ||||||
| 			return; | 			return; | ||||||
|  | @ -74,7 +74,7 @@ namespace Kernel | ||||||
| 			dwarnln("sleep woke {} ms too soon", wake_time - ms_since_boot()); | 			dwarnln("sleep woke {} ms too soon", wake_time - ms_since_boot()); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	uint64_t TimerHandler::get_unix_timestamp() | 	uint64_t SystemTimer::get_unix_timestamp() const | ||||||
| 	{ | 	{ | ||||||
| 		return m_boot_time + ms_since_boot() / 1000; | 		return m_boot_time + ms_since_boot() / 1000; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -144,7 +144,7 @@ extern "C" void kernel_main() | ||||||
| 	InterruptController::initialize(cmdline.force_pic); | 	InterruptController::initialize(cmdline.force_pic); | ||||||
| 	dprintln("Interrupt controller initialized"); | 	dprintln("Interrupt controller initialized"); | ||||||
| 
 | 
 | ||||||
| 	TimerHandler::initialize(); | 	SystemTimer::initialize(); | ||||||
| 	dprintln("Timers initialized"); | 	dprintln("Timers initialized"); | ||||||
| 
 | 
 | ||||||
| 	DevFileSystem::initialize(); | 	DevFileSystem::initialize(); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue