mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:12:45 +00:00 
			
		
		
		
	Kernel/Devices: Move ConsoleDevice into the Devices source directory
This commit is contained in:
		
							parent
							
								
									aee4786d8e
								
							
						
					
					
						commit
						5e8dcb9ca7
					
				
					 6 changed files with 5 additions and 5 deletions
				
			
		
							
								
								
									
										76
									
								
								Kernel/Devices/ConsoleDevice.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								Kernel/Devices/ConsoleDevice.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #include <AK/Singleton.h> | ||||
| #include <Kernel/Devices/ConsoleDevice.h> | ||||
| #include <Kernel/IO.h> | ||||
| #include <Kernel/Locking/Spinlock.h> | ||||
| #include <Kernel/Sections.h> | ||||
| #include <Kernel/kstdio.h> | ||||
| 
 | ||||
| // Output bytes to kernel debug port 0xE9 (Bochs console). It's very handy.
 | ||||
| #define CONSOLE_OUT_TO_BOCHS_DEBUG_PORT | ||||
| 
 | ||||
| static Singleton<ConsoleDevice> s_the; | ||||
| static Kernel::Spinlock g_console_lock; | ||||
| 
 | ||||
| UNMAP_AFTER_INIT void ConsoleDevice::initialize() | ||||
| { | ||||
|     s_the.ensure_instance(); | ||||
|     s_the->after_inserting(); | ||||
| } | ||||
| 
 | ||||
| ConsoleDevice& ConsoleDevice::the() | ||||
| { | ||||
|     return *s_the; | ||||
| } | ||||
| 
 | ||||
| bool ConsoleDevice::is_initialized() | ||||
| { | ||||
|     return s_the.is_initialized(); | ||||
| } | ||||
| 
 | ||||
| UNMAP_AFTER_INIT ConsoleDevice::ConsoleDevice() | ||||
|     : CharacterDevice(5, 1) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| UNMAP_AFTER_INIT ConsoleDevice::~ConsoleDevice() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| bool ConsoleDevice::can_read(const Kernel::OpenFileDescription&, size_t) const | ||||
| { | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| Kernel::KResultOr<size_t> ConsoleDevice::read(OpenFileDescription&, u64, Kernel::UserOrKernelBuffer&, size_t) | ||||
| { | ||||
|     // FIXME: Implement reading from the console.
 | ||||
|     //        Maybe we could use a ring buffer for this device?
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| Kernel::KResultOr<size_t> ConsoleDevice::write(OpenFileDescription&, u64, const Kernel::UserOrKernelBuffer& data, size_t size) | ||||
| { | ||||
|     if (!size) | ||||
|         return 0; | ||||
| 
 | ||||
|     return data.read_buffered<256>(size, [&](ReadonlyBytes readonly_bytes) { | ||||
|         for (const auto& byte : readonly_bytes) | ||||
|             put_char(byte); | ||||
|         return readonly_bytes.size(); | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| void ConsoleDevice::put_char(char ch) | ||||
| { | ||||
|     Kernel::SpinlockLocker lock(g_console_lock); | ||||
| #ifdef CONSOLE_OUT_TO_BOCHS_DEBUG_PORT | ||||
|     IO::out8(IO::BOCHS_DEBUG_PORT, ch); | ||||
| #endif | ||||
|     m_logbuffer.enqueue(ch); | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Liav A
						Liav A