MicrOS
harddisk_pio_mode_header.h File Reference
#include <stdint.h>

Go to the source code of this file.

Classes

struct  harddisk_io_error_register_fields
 Hard disk I/O based Error Register. More...
 
union  harddisk_io_error_register
 Hard disk I/O based Error Register. More...
 
struct  harddisk_io_drive_head_register_fields
 Hard disk I/O based Drive / Head Register. More...
 
union  harddisk_io_drive_head_register
 Hard disk I/O based Drive / Head Register. More...
 
struct  harddisk_io_control_status_register_fields
 Hard disk I/O or Control based Status Register. More...
 
union  harddisk_io_control_status_register
 Hard disk I/O or Control based Status Register. More...
 
struct  harddisk_control_device_control_register_fields
 Hard disk Control based Device Control Register. More...
 
union  harddisk_control_device_control_register
 Hard disk Control based Device Control Register. More...
 
struct  harddisk_control_drive_address_register_fields
 Hard disk Control based Drive Address Register. More...
 
union  harddisk_control_drive_address_register
 Hard disk Control based Drive Address Register. More...
 

Macros

#define HARDDISK_ATA_PRIMARY_BUS_IO_PORT   0x1F0
 Primary bus I/O port. More...
 
#define HARDDISK_ATA_PRIMARY_BUS_CONTROL_PORT   0x3F6
 Primary bus control port. More...
 
#define HARDDISK_ATA_SECONDARY_BUS_IO_PORT   0x170
 Secondary bus I/O port. More...
 
#define HARDDISK_ATA_SECONDARY_BUS_CONTROL_PORT   0x376
 Secondary bus control port. More...
 
#define HARDDISK_IO_DATA_REGISTER_OFFSET   0
 Offset of I/O based Data Register. More...
 
#define HARDDISK_IO_ERROR_REGISTER_OFFSET   1
 Offset of I/O based Error Register. More...
 
#define HARDDISK_FEATURES_REGISTER_OFFSET   1
 Offset of I/O based Features Register. More...
 
#define HARDDISK_IO_SECTOR_COUNT_REGISTER_OFFSET   2
 Offset of I/O based Sector Count Register. More...
 
#define HARDDISK_IO_SECTOR_NUMBER_REGISTER_OFFSET   3
 Offset of I/O based Sector Number Register (LBAlo). More...
 
#define HARDDISK_IO_CYLINDER_LOW_REGISTER_OFFSET   4
 Offset of I/O based Cylinder Low Register / (LBAmid). More...
 
#define HARDDISK_IO_CYLINDER_HIGH_REGISTER_OFFSET   5
 Offset of I/O based Cylinder High Register / (LBAhi). More...
 
#define HARDDISK_IO_DRIVE_HEAD_REGISTER_OFFSET   6
 Offset of I/O based Drive / Head Register. More...
 
#define HARDDISK_IO_STATUS_REGISTER_OFFSET   7
 Offset of I/O based Status Register. More...
 
#define HARDDISK_IO_COMMAND_REGISTER_OFFSET   7
 Offset of I/O based Command Register. More...
 
#define HARDDISK_CONTROL_ALTERNATE_STATUS_REGISTER_OFFSET   0
 Offset of Control based Alternate Status Register. More...
 
#define HARDDISK_CONTROL_DEVICE_CONTROL_REGISTER_OFFSET   0
 Offset of Control based Device Control Register. More...
 
#define HARDDISK_CONTROL_DEVICE_ADDRESS_REGISTER_OFFSET   1
 Offset of Control based Drive Address Register. More...
 

Macro Definition Documentation

◆ HARDDISK_ATA_PRIMARY_BUS_CONTROL_PORT

#define HARDDISK_ATA_PRIMARY_BUS_CONTROL_PORT   0x3F6

Primary bus control port.

Used to transfer control informations with drives on primary bus

◆ HARDDISK_ATA_PRIMARY_BUS_IO_PORT

#define HARDDISK_ATA_PRIMARY_BUS_IO_PORT   0x1F0

Primary bus I/O port.

Used to transfer data with drives on primary bus

◆ HARDDISK_ATA_SECONDARY_BUS_CONTROL_PORT

#define HARDDISK_ATA_SECONDARY_BUS_CONTROL_PORT   0x376

Secondary bus control port.

Used to transfer control informations with drives on secondary bus

◆ HARDDISK_ATA_SECONDARY_BUS_IO_PORT

#define HARDDISK_ATA_SECONDARY_BUS_IO_PORT   0x170

Secondary bus I/O port.

Used to transfer data with drives on secondary bus

◆ HARDDISK_CONTROL_ALTERNATE_STATUS_REGISTER_OFFSET

#define HARDDISK_CONTROL_ALTERNATE_STATUS_REGISTER_OFFSET   0

Offset of Control based Alternate Status Register.

A duplicate of the Status Register from I/O port, which does not affect interrupts. Offset for Control base port.
Direction: read
Param. size for LBA48: 8 bit

◆ HARDDISK_CONTROL_DEVICE_ADDRESS_REGISTER_OFFSET

#define HARDDISK_CONTROL_DEVICE_ADDRESS_REGISTER_OFFSET   1

Offset of Control based Drive Address Register.

Provides drive select and head select information. Offset for Control base port.
Direction: read
x Param. size for LBA48: 8 bit

◆ HARDDISK_CONTROL_DEVICE_CONTROL_REGISTER_OFFSET

#define HARDDISK_CONTROL_DEVICE_CONTROL_REGISTER_OFFSET   0

Offset of Control based Device Control Register.

Used to reset the bus or enable/disable interrupts. Offset for Control base port.
Direction: write
Param. size for LBA48: 8 bit

◆ HARDDISK_FEATURES_REGISTER_OFFSET

#define HARDDISK_FEATURES_REGISTER_OFFSET   1

Offset of I/O based Features Register.

Used to control command specific interface features. Offset for I/O base port.
Direction: write
Param. size for LBA48: 16 bit

◆ HARDDISK_IO_COMMAND_REGISTER_OFFSET

#define HARDDISK_IO_COMMAND_REGISTER_OFFSET   7

Offset of I/O based Command Register.

Used to send ATA commands to the device. Offset for I/O base port.
Direction: write
Param. size for LBA48: 8 bit

◆ HARDDISK_IO_CYLINDER_HIGH_REGISTER_OFFSET

#define HARDDISK_IO_CYLINDER_HIGH_REGISTER_OFFSET   5

Offset of I/O based Cylinder High Register / (LBAhi).

Partial Disk Sector address. Offset for I/O base port.
Direction: read/write
Param. size for LBA48: 16 bit

◆ HARDDISK_IO_CYLINDER_LOW_REGISTER_OFFSET

#define HARDDISK_IO_CYLINDER_LOW_REGISTER_OFFSET   4

Offset of I/O based Cylinder Low Register / (LBAmid).

Partial Disk Sector address. Offset for I/O base port.
Direction: read/write
Param. size for LBA48: 16 bit

◆ HARDDISK_IO_DATA_REGISTER_OFFSET

#define HARDDISK_IO_DATA_REGISTER_OFFSET   0

Offset of I/O based Data Register.

Read/Write PIO data bytes. Offset for I/O base port.
Direction: read/write
Param. size for LBA48: 16 bit

◆ HARDDISK_IO_DRIVE_HEAD_REGISTER_OFFSET

#define HARDDISK_IO_DRIVE_HEAD_REGISTER_OFFSET   6

Offset of I/O based Drive / Head Register.

Used to select a drive and/or head. Supports extra address/flag bits. Offset for I/O base port.
Direction: read/write
Param. size for LBA48: 8 bit

◆ HARDDISK_IO_ERROR_REGISTER_OFFSET

#define HARDDISK_IO_ERROR_REGISTER_OFFSET   1

Offset of I/O based Error Register.

Used to retrieve any error generated by the last ATA command executed. Offset for I/O base port.
Direction: read
Param. size for LBA48: 16 bit

◆ HARDDISK_IO_SECTOR_COUNT_REGISTER_OFFSET

#define HARDDISK_IO_SECTOR_COUNT_REGISTER_OFFSET   2

Offset of I/O based Sector Count Register.

Number of sectors to read/write (0 is a special value). Offset for I/O base port.
Direction: read/write
Param. size for LBA48: 16 bit

◆ HARDDISK_IO_SECTOR_NUMBER_REGISTER_OFFSET

#define HARDDISK_IO_SECTOR_NUMBER_REGISTER_OFFSET   3

Offset of I/O based Sector Number Register (LBAlo).

This is CHS / LBA28 / LBA48 specific. Offset for I/O base port.
Direction: read/write
Param. size for LBA48: 16 bit

◆ HARDDISK_IO_STATUS_REGISTER_OFFSET

#define HARDDISK_IO_STATUS_REGISTER_OFFSET   7

Offset of I/O based Status Register.

Used to read the current status. Offset for I/O base port.
Direction: read
Param. size for LBA48: 8 bit