Kintsugi OS 0.2.0
x86 Monolithic OS
Loading...
Searching...
No Matches
ata_pio.h File Reference
#include "../kklibc/ctypes.h"

Go to the source code of this file.

Classes

struct  ata_disk_info_t
 

Macros

#define ATA_PRIMARY_DATA   0x1F0
 
#define ATA_PRIMARY_ERROR   0x1F1
 
#define ATA_PRIMARY_SECTOR_CNT   0x1F2
 
#define ATA_PRIMARY_LBA_LOW   0x1F3
 
#define ATA_PRIMARY_LBA_MID   0x1F4
 
#define ATA_PRIMARY_LBA_HIGH   0x1F5
 
#define ATA_PRIMARY_DRIVE_SEL   0x1F6
 
#define ATA_PRIMARY_STATUS   0x1F7
 
#define ATA_PRIMARY_CMD   0x1F7
 
#define ATA_SR_BSY   0x80
 
#define ATA_SR_DRDY   0x40
 
#define ATA_SR_DF   0x20
 
#define ATA_SR_DSC   0x10
 
#define ATA_SR_DRQ   0x08
 
#define ATA_SR_CORR   0x04
 
#define ATA_SR_IDX   0x02
 
#define ATA_SR_ERR   0x01
 
#define ATA_MASTER   0xA0
 
#define ATA_SLAVE   0xB0
 
#define ATA_CMD_READ_PIO   0x20
 
#define ATA_CMD_READ_PIO_EXT   0x24
 
#define ATA_CMD_READ_DMA   0xC8
 
#define ATA_CMD_READ_DMA_EXT   0x25
 
#define ATA_CMD_WRITE_PIO   0x30
 
#define ATA_CMD_WRITE_PIO_EXT   0x34
 
#define ATA_CMD_WRITE_DMA   0xCA
 
#define ATA_CMD_WRITE_DMA_EXT   0x35
 
#define ATA_CMD_CACHE_FLUSH   0xE7
 
#define ATA_CMD_CACHE_FLUSH_EXT   0xEA
 
#define ATA_CMD_IDENTIFY   0xEC
 
#define ATA_DISK_UNKNOWN   0
 
#define ATA_DISK_PATA   1
 
#define ATA_DISK_SATA   2
 
#define ATA_DISK_PATAPI   3
 
#define ATA_DISK_SATAPI   4
 

Functions

void ata_pio_init ()
 Инициализация драйвера ATA PIO.
 
int ata_pio_identify (u8 drive, ata_disk_info_t *info)
 Определение типа и параметров диска
 
int ata_pio_read_sectors (u8 drive, u32 lba, u8 num, u16 *buffer)
 Чтение секторов с диска
 
int ata_pio_write_sectors (u8 drive, u32 lba, u8 num, u16 *buffer)
 Запись секторов на диск
 
int ata_pio_wait ()
 Ожидание готовности диска
 

Macro Definition Documentation

◆ ATA_CMD_CACHE_FLUSH

#define ATA_CMD_CACHE_FLUSH   0xE7

◆ ATA_CMD_CACHE_FLUSH_EXT

#define ATA_CMD_CACHE_FLUSH_EXT   0xEA

◆ ATA_CMD_IDENTIFY

#define ATA_CMD_IDENTIFY   0xEC

◆ ATA_CMD_READ_DMA

#define ATA_CMD_READ_DMA   0xC8

◆ ATA_CMD_READ_DMA_EXT

#define ATA_CMD_READ_DMA_EXT   0x25

◆ ATA_CMD_READ_PIO

#define ATA_CMD_READ_PIO   0x20

◆ ATA_CMD_READ_PIO_EXT

#define ATA_CMD_READ_PIO_EXT   0x24

◆ ATA_CMD_WRITE_DMA

#define ATA_CMD_WRITE_DMA   0xCA

◆ ATA_CMD_WRITE_DMA_EXT

#define ATA_CMD_WRITE_DMA_EXT   0x35

◆ ATA_CMD_WRITE_PIO

#define ATA_CMD_WRITE_PIO   0x30

◆ ATA_CMD_WRITE_PIO_EXT

#define ATA_CMD_WRITE_PIO_EXT   0x34

◆ ATA_DISK_PATA

#define ATA_DISK_PATA   1

◆ ATA_DISK_PATAPI

#define ATA_DISK_PATAPI   3

◆ ATA_DISK_SATA

#define ATA_DISK_SATA   2

◆ ATA_DISK_SATAPI

#define ATA_DISK_SATAPI   4

◆ ATA_DISK_UNKNOWN

#define ATA_DISK_UNKNOWN   0

◆ ATA_MASTER

#define ATA_MASTER   0xA0

◆ ATA_PRIMARY_CMD

#define ATA_PRIMARY_CMD   0x1F7

◆ ATA_PRIMARY_DATA

#define ATA_PRIMARY_DATA   0x1F0

◆ ATA_PRIMARY_DRIVE_SEL

#define ATA_PRIMARY_DRIVE_SEL   0x1F6

◆ ATA_PRIMARY_ERROR

#define ATA_PRIMARY_ERROR   0x1F1

◆ ATA_PRIMARY_LBA_HIGH

#define ATA_PRIMARY_LBA_HIGH   0x1F5

◆ ATA_PRIMARY_LBA_LOW

#define ATA_PRIMARY_LBA_LOW   0x1F3

◆ ATA_PRIMARY_LBA_MID

#define ATA_PRIMARY_LBA_MID   0x1F4

◆ ATA_PRIMARY_SECTOR_CNT

#define ATA_PRIMARY_SECTOR_CNT   0x1F2

◆ ATA_PRIMARY_STATUS

#define ATA_PRIMARY_STATUS   0x1F7

◆ ATA_SLAVE

#define ATA_SLAVE   0xB0

◆ ATA_SR_BSY

#define ATA_SR_BSY   0x80

◆ ATA_SR_CORR

#define ATA_SR_CORR   0x04

◆ ATA_SR_DF

#define ATA_SR_DF   0x20

◆ ATA_SR_DRDY

#define ATA_SR_DRDY   0x40

◆ ATA_SR_DRQ

#define ATA_SR_DRQ   0x08

◆ ATA_SR_DSC

#define ATA_SR_DSC   0x10

◆ ATA_SR_ERR

#define ATA_SR_ERR   0x01

◆ ATA_SR_IDX

#define ATA_SR_IDX   0x02

Function Documentation

◆ ata_pio_identify()

int ata_pio_identify ( u8  drive,
ata_disk_info_t info 
)

Определение типа и параметров диска

Parameters
driveТип диска (ATA_MASTER/ATA_SLAVE)
infoУказатель на структуру для информации
Returns
0 в случае успеха, код ошибки в противном случае

◆ ata_pio_init()

void ata_pio_init ( )

Инициализация драйвера ATA PIO.

◆ ata_pio_read_sectors()

int ata_pio_read_sectors ( u8  drive,
u32  lba,
u8  num,
u16 buffer 
)

Чтение секторов с диска

Parameters
driveТип диска (ATA_MASTER/ATA_SLAVE)
lbaНачальный LBA адрес
numКоличество секторов для чтения
bufferБуфер для данных
Returns
0 в случае успеха, код ошибки в противном случае

◆ ata_pio_wait()

int ata_pio_wait ( )

Ожидание готовности диска

Returns
0 если диск готов, код ошибки в противном случае

◆ ata_pio_write_sectors()

int ata_pio_write_sectors ( u8  drive,
u32  lba,
u8  num,
u16 buffer 
)

Запись секторов на диск

Parameters
driveТип диска (ATA_MASTER/ATA_SLAVE)
lbaНачальный LBA адрес
numКоличество секторов для записи
bufferБуфер с данными
Returns
0 в случае успеха, код ошибки в противном случае