mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:52:45 +00:00 
			
		
		
		
	Kernel/PCI: Convert PCI BAR number to a strong typed enum class
This commit is contained in:
		
							parent
							
								
									f510c0ba04
								
							
						
					
					
						commit
						bb6f61ee5d
					
				
					 10 changed files with 26 additions and 17 deletions
				
			
		|  | @ -94,10 +94,10 @@ u32 get_BAR5(Address address) | |||
|     return read32(address, PCI::RegisterOffset::BAR5); | ||||
| } | ||||
| 
 | ||||
| u32 get_BAR(Address address, u8 bar) | ||||
| u32 get_BAR(Address address, HeaderType0BaseRegister pci_bar) | ||||
| { | ||||
|     VERIFY(bar <= 5); | ||||
|     switch (bar) { | ||||
|     VERIFY(to_underlying(pci_bar) <= 5); | ||||
|     switch (to_underlying(pci_bar)) { | ||||
|     case 0: | ||||
|         return get_BAR0(address); | ||||
|     case 1: | ||||
|  | @ -138,11 +138,11 @@ static u8 read8_offsetted(Address address, u32 field) { return Access::the().rea | |||
| static u16 read16_offsetted(Address address, u32 field) { return Access::the().read16_field(address, field); } | ||||
| static u32 read32_offsetted(Address address, u32 field) { return Access::the().read32_field(address, field); } | ||||
| 
 | ||||
| size_t get_BAR_space_size(Address address, u8 bar_number) | ||||
| size_t get_BAR_space_size(Address address, HeaderType0BaseRegister pci_bar) | ||||
| { | ||||
|     // See PCI Spec 2.3, Page 222
 | ||||
|     VERIFY(bar_number < 6); | ||||
|     u8 field = to_underlying(PCI::RegisterOffset::BAR0) + (bar_number << 2); | ||||
|     VERIFY(to_underlying(pci_bar) < 6); | ||||
|     u8 field = to_underlying(PCI::RegisterOffset::BAR0) + (to_underlying(pci_bar) << 2); | ||||
|     u32 bar_reserved = read32_offsetted(address, field); | ||||
|     write32_offsetted(address, field, 0xFFFFFFFF); | ||||
|     u32 space_size = read32_offsetted(address, field); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Liav A
						Liav A