#include <stdint.h>
#include <stddef.h>
#include "assembly/io.h"
#include "cpu/timer/timer.h"
#include "harddisk_identify_device_data.h"
#include "harddisk_pio_mode_header.h"
Go to the source code of this file.
◆ HARDDISK_BSY_ERROR_DELAY_MS
#define HARDDISK_BSY_ERROR_DELAY_MS 10000 |
Delay after which we assume drive failed during BSY pooling.
◆ HARDDISK_ATA_BUS_TYPE
Enum represent bus type.
Enumerator |
---|
HARDDISK_ATA_PRIMARY_BUS | Primary bus.
|
HARDDISK_ATA_SECONDARY_BUS | Secondary bus.
|
◆ HARDDISK_ATA_MASTER_SLAVE
Enum represent hard disk type.
Enumerator |
---|
HARDDISK_ATA_MASTER | Master hard disk.
|
HARDDISK_ATA_SLAVE | Slave hard disk.
|
◆ HARDDISK_STATE
Enum represent hard disk status.
Enumerator |
---|
HARDDISK_ERROR | Error.
|
HARDDISK_NOT_PRESENT | Not present.
|
HARDDISK_ATA_PRESENT | ATA device present.
|
HARDDISK_ATAPI_PRESENT | ATAPI device present.
|
HARDDISK_SATA_PRESENT | SATA device present.
|
HARDDISK_SATAPI_PRESENT | SATAPI device present.
|
◆ __harddisk_400ns_delay()
void __harddisk_400ns_delay |
( |
uint16_t |
control_port | ) |
|
Makes 400ns delay.
Makes 400ns delay by checking drive status 15 times. User after switching type of drive in bus.
- Parameters
-
◆ __harddisk_bsy_poll()
int8_t __harddisk_bsy_poll |
( |
uint16_t |
control_port | ) |
|
Pools BSY bit until clears.
Pools BSY bit until clears, if pooling takes too long exits with error.
- Parameters
-
- Returns
- 1 if success, -1 if error
◆ __harddisk_get_pointers()
Gets pointers to hard disk data.
Sets state to proper state and data from harddisk_states structure to proper values for given harddisk and bus type.
- Parameters
-
type | Type of harddisk. |
bus | Type of bus. |
state | Pointer to state. |
bus | Pointer to data. |
◆ __harddisk_soft_reset_port()
int8_t __harddisk_soft_reset_port |
( |
uint16_t |
control_port | ) |
|
Perform soft reset for given control_port.
Soft reset should set bit SRST in Device Control Register for 5 us.
- Parameters
-
control_port | Control port to perform reset |
- Returns
- 1 if success, -1 if error