mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:32:44 +00:00 
			
		
		
		
	Kernel: Clarify IDEChannel function that switches current channel
Rename wait_until_not_busy() => select_device_and_wait_until_not_busy() to make it more obvious what this thing is doing.
This commit is contained in:
		
							parent
							
								
									1ca8bc81a5
								
							
						
					
					
						commit
						8177e7eb22
					
				
					 2 changed files with 11 additions and 5 deletions
				
			
		|  | @ -62,12 +62,12 @@ UNMAP_AFTER_INIT void IDEChannel::initialize() | |||
|     IO::delay(30000); | ||||
|     m_io_group.control_base().out<u8>(device_control); | ||||
|     // Wait up to 30 seconds before failing
 | ||||
|     if (!wait_until_not_busy(false, 30000)) { | ||||
|     if (!select_device_and_wait_until_not_busy(DeviceType::Master, 30000)) { | ||||
|         dbgln("IDEChannel: reset failed, busy flag on master stuck"); | ||||
|         return; | ||||
|     } | ||||
|     // Wait up to 30 seconds before failing
 | ||||
|     if (!wait_until_not_busy(true, 30000)) { | ||||
|     if (!select_device_and_wait_until_not_busy(DeviceType::Slave, 30000)) { | ||||
|         dbgln("IDEChannel: reset failed, busy flag on slave stuck"); | ||||
|         return; | ||||
|     } | ||||
|  | @ -261,10 +261,11 @@ static void io_delay() | |||
|         IO::in8(0x3f6); | ||||
| } | ||||
| 
 | ||||
| bool IDEChannel::wait_until_not_busy(bool slave, size_t milliseconds_timeout) | ||||
| bool IDEChannel::select_device_and_wait_until_not_busy(DeviceType device_type, size_t milliseconds_timeout) | ||||
| { | ||||
|     IO::delay(20); | ||||
|     m_io_group.io_base().offset(ATA_REG_HDDEVSEL).out<u8>(0xA0 | (slave << 4)); // First, we need to select the drive itself
 | ||||
|     u8 slave = device_type == DeviceType::Slave; | ||||
|     m_io_group.io_base().offset(ATA_REG_HDDEVSEL).out<u8>(0xA0 | (slave << 4)); | ||||
|     IO::delay(20); | ||||
|     size_t time_elapsed = 0; | ||||
|     while (m_io_group.control_base().in<u8>() & ATA_SR_BSY && time_elapsed <= milliseconds_timeout) { | ||||
|  |  | |||
|  | @ -44,6 +44,11 @@ public: | |||
|         Secondary | ||||
|     }; | ||||
| 
 | ||||
|     enum class DeviceType : u8 { | ||||
|         Master, | ||||
|         Slave, | ||||
|     }; | ||||
| 
 | ||||
|     struct IOAddressGroup { | ||||
|         IOAddressGroup(IOAddress io_base, IOAddress control_base, IOAddress bus_master_base) | ||||
|             : m_io_base(io_base) | ||||
|  | @ -127,7 +132,7 @@ protected: | |||
|     StringView channel_type_string() const; | ||||
| 
 | ||||
|     void try_disambiguate_error(); | ||||
|     bool wait_until_not_busy(bool slave, size_t milliseconds_timeout); | ||||
|     bool select_device_and_wait_until_not_busy(DeviceType, size_t milliseconds_timeout); | ||||
|     bool wait_until_not_busy(size_t milliseconds_timeout); | ||||
| 
 | ||||
|     void start_request(AsyncBlockDeviceRequest&, bool, u16); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling