mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:32:45 +00:00 
			
		
		
		
	Kernel/Graphics: Use DisplayConnector design with generic framebuffers
This commit is contained in:
		
							parent
							
								
									c27c414ed1
								
							
						
					
					
						commit
						f15b93c9a1
					
				
					 13 changed files with 203 additions and 139 deletions
				
			
		|  | @ -12,61 +12,22 @@ | |||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| UNMAP_AFTER_INIT NonnullRefPtr<PCIVGACompatibleAdapter> PCIVGACompatibleAdapter::initialize_with_preset_resolution(PCI::DeviceIdentifier const& pci_device_identifier, PhysicalAddress m_framebuffer_address, size_t framebuffer_width, size_t framebuffer_height, size_t framebuffer_pitch) | ||||
| UNMAP_AFTER_INIT NonnullRefPtr<PCIVGACompatibleAdapter> PCIVGACompatibleAdapter::initialize_with_preset_resolution(PCI::DeviceIdentifier const& pci_device_identifier, PhysicalAddress framebuffer_address, size_t framebuffer_width, size_t framebuffer_height, size_t framebuffer_pitch) | ||||
| { | ||||
|     return adopt_ref(*new PCIVGACompatibleAdapter(pci_device_identifier.address(), m_framebuffer_address, framebuffer_width, framebuffer_height, framebuffer_pitch)); | ||||
|     auto adapter = adopt_ref(*new PCIVGACompatibleAdapter(pci_device_identifier.address())); | ||||
|     adapter->initialize_display_connector_with_preset_resolution(framebuffer_address, framebuffer_width, framebuffer_height, framebuffer_pitch); | ||||
|     return adapter; | ||||
| } | ||||
| 
 | ||||
| UNMAP_AFTER_INIT NonnullRefPtr<PCIVGACompatibleAdapter> PCIVGACompatibleAdapter::initialize(PCI::DeviceIdentifier const& pci_device_identifier) | ||||
| { | ||||
|     return adopt_ref(*new PCIVGACompatibleAdapter(pci_device_identifier.address())); | ||||
| } | ||||
| 
 | ||||
| UNMAP_AFTER_INIT void PCIVGACompatibleAdapter::initialize_framebuffer_devices() | ||||
| { | ||||
|     // We might not have any pre-set framebuffer, so if that's the case - don't try to initialize one.
 | ||||
|     if (m_framebuffer_address.is_null()) | ||||
|         return; | ||||
|     VERIFY(m_framebuffer_width); | ||||
|     VERIFY(m_framebuffer_width != 0); | ||||
|     VERIFY(m_framebuffer_height != 0); | ||||
|     VERIFY(m_framebuffer_pitch != 0); | ||||
|     m_framebuffer_device = FramebufferDevice::create(*this, m_framebuffer_address, m_framebuffer_width, m_framebuffer_height, m_framebuffer_pitch); | ||||
|     // FIXME: Would be nice to be able to return ErrorOr<void> here.
 | ||||
|     VERIFY(!m_framebuffer_device->try_to_initialize().is_error()); | ||||
|     auto adapter = adopt_ref(*new PCIVGACompatibleAdapter(pci_device_identifier.address())); | ||||
|     return adapter; | ||||
| } | ||||
| 
 | ||||
| UNMAP_AFTER_INIT PCIVGACompatibleAdapter::PCIVGACompatibleAdapter(PCI::Address address) | ||||
|     : PCI::Device(address) | ||||
| { | ||||
|     m_framebuffer_console = Graphics::TextModeConsole::initialize(); | ||||
|     GraphicsManagement::the().set_console(*m_framebuffer_console); | ||||
| } | ||||
| 
 | ||||
| UNMAP_AFTER_INIT PCIVGACompatibleAdapter::PCIVGACompatibleAdapter(PCI::Address address, PhysicalAddress framebuffer_address, size_t framebuffer_width, size_t framebuffer_height, size_t framebuffer_pitch) | ||||
|     : PCI::Device(address) | ||||
|     , m_framebuffer_address(framebuffer_address) | ||||
|     , m_framebuffer_width(framebuffer_width) | ||||
|     , m_framebuffer_height(framebuffer_height) | ||||
|     , m_framebuffer_pitch(framebuffer_pitch) | ||||
| { | ||||
|     m_framebuffer_console = Graphics::ContiguousFramebufferConsole::initialize(framebuffer_address, framebuffer_width, framebuffer_height, framebuffer_pitch); | ||||
|     GraphicsManagement::the().set_console(*m_framebuffer_console); | ||||
| } | ||||
| 
 | ||||
| void PCIVGACompatibleAdapter::enable_consoles() | ||||
| { | ||||
|     VERIFY(m_framebuffer_console); | ||||
|     if (m_framebuffer_device) | ||||
|         m_framebuffer_device->deactivate_writes(); | ||||
|     m_framebuffer_console->enable(); | ||||
| } | ||||
| void PCIVGACompatibleAdapter::disable_consoles() | ||||
| { | ||||
|     VERIFY(m_framebuffer_device); | ||||
|     VERIFY(m_framebuffer_console); | ||||
|     m_framebuffer_console->disable(); | ||||
|     m_framebuffer_device->activate_writes(); | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Liav A
						Liav A