Kintsugi OS 0.2.0
x86 Monolithic OS
Loading...
Searching...
No Matches
ata_pio.h
Go to the documentation of this file.
1/*------------------------------------------------------------------------------
2 * Kintsugi OS Drivers source code
3 * File: kernel/drivers/ata_pio.h
4 * Title: Заголовочный файл драйвера ATA PIO
5 * Description: Драйвер для работы с жесткими дисками через PIO mode.
6 * ---------------------------------------------------------------------------*/
7
8#ifndef ATA_PIO_H
9#define ATA_PIO_H
10
11#include "../kklibc/ctypes.h"
12
13// Порт Primary ATA канала
14#define ATA_PRIMARY_DATA 0x1F0
15#define ATA_PRIMARY_ERROR 0x1F1
16#define ATA_PRIMARY_SECTOR_CNT 0x1F2
17#define ATA_PRIMARY_LBA_LOW 0x1F3
18#define ATA_PRIMARY_LBA_MID 0x1F4
19#define ATA_PRIMARY_LBA_HIGH 0x1F5
20#define ATA_PRIMARY_DRIVE_SEL 0x1F6
21#define ATA_PRIMARY_STATUS 0x1F7
22#define ATA_PRIMARY_CMD 0x1F7
23
24// Статусные биты регистра STATUS
25#define ATA_SR_BSY 0x80 // Drive busy
26#define ATA_SR_DRDY 0x40 // Drive ready
27#define ATA_SR_DF 0x20 // Drive write fault
28#define ATA_SR_DSC 0x10 // Drive seek complete
29#define ATA_SR_DRQ 0x08 // Data request ready
30#define ATA_SR_CORR 0x04 // Corrected data
31#define ATA_SR_IDX 0x02 // Index
32#define ATA_SR_ERR 0x01 // Error
33
34// Типы устройств
35#define ATA_MASTER 0xA0
36#define ATA_SLAVE 0xB0
37
38// Команды
39#define ATA_CMD_READ_PIO 0x20
40#define ATA_CMD_READ_PIO_EXT 0x24
41#define ATA_CMD_READ_DMA 0xC8
42#define ATA_CMD_READ_DMA_EXT 0x25
43#define ATA_CMD_WRITE_PIO 0x30
44#define ATA_CMD_WRITE_PIO_EXT 0x34
45#define ATA_CMD_WRITE_DMA 0xCA
46#define ATA_CMD_WRITE_DMA_EXT 0x35
47#define ATA_CMD_CACHE_FLUSH 0xE7
48#define ATA_CMD_CACHE_FLUSH_EXT 0xEA
49#define ATA_CMD_IDENTIFY 0xEC
50
51// Типы дисков
52#define ATA_DISK_UNKNOWN 0
53#define ATA_DISK_PATA 1
54#define ATA_DISK_SATA 2
55#define ATA_DISK_PATAPI 3
56#define ATA_DISK_SATAPI 4
57
58/* Структура для информации о диске */
59typedef struct {
64 u32 size; // в секторах
65 char model[41];
67
71void ata_pio_init();
72
79int ata_pio_identify(u8 drive, ata_disk_info_t* info);
80
89int ata_pio_read_sectors(u8 drive, u32 lba, u8 num, u16* buffer);
90
99int ata_pio_write_sectors(u8 drive, u32 lba, u8 num, u16* buffer);
100
105int ata_pio_wait();
106
107#endif // ATA_PIO_H
int ata_pio_read_sectors(u8 drive, u32 lba, u8 num, u16 *buffer)
Чтение секторов с диска
Definition ata_pio.c:161
void ata_pio_init()
Инициализация драйвера ATA PIO.
Definition ata_pio.c:38
int ata_pio_write_sectors(u8 drive, u32 lba, u8 num, u16 *buffer)
Запись секторов на диск
Definition ata_pio.c:199
int ata_pio_identify(u8 drive, ata_disk_info_t *info)
Определение типа и параметров диска
Definition ata_pio.c:102
int ata_pio_wait()
Ожидание готовности диска
Definition ata_pio.c:81
unsigned int u32
Definition ctypes.h:11
unsigned short u16
Definition ctypes.h:13
unsigned char u8
Definition ctypes.h:15
Definition ata_pio.h:59
u16 capabilities
Definition ata_pio.h:62
u32 size
Definition ata_pio.h:64
u16 signature
Definition ata_pio.h:61
u32 command_sets
Definition ata_pio.h:63
u16 type
Definition ata_pio.h:60