feat(atapi): add discover for all drives
This commit is contained in:
parent
38bb731587
commit
26bdfc63d6
24
k/atapi.c
24
k/atapi.c
@ -24,7 +24,7 @@ static void wait_device_selection(uint16_t drive)
|
||||
inb(drive);
|
||||
}
|
||||
|
||||
static uint8_t is_atapi_driver(uint16_t bus, uint8_t slave)
|
||||
static uint8_t is_atapi_drive(uint16_t bus, uint8_t slave)
|
||||
{
|
||||
static uint8_t atapi_sig[] = { ATAPI_SIG_SC, ATAPI_SIG_LBA_LO,
|
||||
ATAPI_SIG_LBA_MI, ATAPI_SIG_LBA_HI };
|
||||
@ -61,15 +61,31 @@ static uint8_t is_atapi_driver(uint16_t bus, uint8_t slave)
|
||||
|
||||
void discover_atapi_drive(void)
|
||||
{
|
||||
// primary_reg
|
||||
/* primary_reg */
|
||||
outb(PRIMARY_DCR, SRST);
|
||||
outb(PRIMARY_DCR, INTERRUPT_DISABLE);
|
||||
|
||||
// master_port
|
||||
select_drive(PRIMARY_REG, ATA_PORT_MASTER);
|
||||
wait_device_selection(PRIMARY_REG);
|
||||
is_atapi_driver(PRIMARY_REG, ATA_PORT_MASTER);
|
||||
is_atapi_drive(PRIMARY_REG, ATA_PORT_MASTER);
|
||||
|
||||
// secondary_reg
|
||||
// slave port
|
||||
select_drive(PRIMARY_REG, ATA_PORT_SLAVE);
|
||||
wait_device_selection(PRIMARY_REG);
|
||||
is_atapi_drive(PRIMARY_REG, ATA_PORT_SLAVE);
|
||||
|
||||
/* secondary_reg */
|
||||
outb(SECONDARY_DCR, SRST);
|
||||
outb(SECONDARY_DCR, INTERRUPT_DISABLE);
|
||||
|
||||
// master_port
|
||||
select_drive(SECONDARY_REG, ATA_PORT_MASTER);
|
||||
wait_device_selection(SECONDARY_REG);
|
||||
is_atapi_drive(SECONDARY_REG, ATA_PORT_MASTER);
|
||||
|
||||
// slave port
|
||||
select_drive(SECONDARY_REG, ATA_PORT_SLAVE);
|
||||
wait_device_selection(SECONDARY_REG);
|
||||
is_atapi_drive(SECONDARY_REG, ATA_PORT_SLAVE);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user