Kintsugi OS 0.4.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 * Author: alexeev-prog
6 * License: MIT License
7 * ------------------------------------------------------------------------------
8 * Description: Драйвер для работы с жесткими дисками через PIO mode.
9 * ---------------------------------------------------------------------------*/
10
11#ifndef ATA_PIO_H
12#define ATA_PIO_H
13
14#include "../kklibc/ctypes.h"
15
16// Порт Primary ATA канала
17#define ATA_PRIMARY_DATA 0x1F0
18#define ATA_PRIMARY_ERROR 0x1F1
19#define ATA_PRIMARY_SECTOR_CNT 0x1F2
20#define ATA_PRIMARY_LBA_LOW 0x1F3
21#define ATA_PRIMARY_LBA_MID 0x1F4
22#define ATA_PRIMARY_LBA_HIGH 0x1F5
23#define ATA_PRIMARY_DRIVE_SEL 0x1F6
24#define ATA_PRIMARY_STATUS 0x1F7
25#define ATA_PRIMARY_CMD 0x1F7
26
27// Статусные биты регистра STATUS
28#define ATA_SR_BSY 0x80 // Drive busy
29#define ATA_SR_DRDY 0x40 // Drive ready
30#define ATA_SR_DF 0x20 // Drive write fault
31#define ATA_SR_DSC 0x10 // Drive seek complete
32#define ATA_SR_DRQ 0x08 // Data request ready
33#define ATA_SR_CORR 0x04 // Corrected data
34#define ATA_SR_IDX 0x02 // Index
35#define ATA_SR_ERR 0x01 // Error
36
37// Типы устройств
38#define ATA_MASTER 0xA0
39#define ATA_SLAVE 0xB0
40
41// Команды
42#define ATA_CMD_READ_PIO 0x20
43#define ATA_CMD_READ_PIO_EXT 0x24
44#define ATA_CMD_READ_DMA 0xC8
45#define ATA_CMD_READ_DMA_EXT 0x25
46#define ATA_CMD_WRITE_PIO 0x30
47#define ATA_CMD_WRITE_PIO_EXT 0x34
48#define ATA_CMD_WRITE_DMA 0xCA
49#define ATA_CMD_WRITE_DMA_EXT 0x35
50#define ATA_CMD_CACHE_FLUSH 0xE7
51#define ATA_CMD_CACHE_FLUSH_EXT 0xEA
52#define ATA_CMD_IDENTIFY 0xEC
53
54// Типы дисков
55#define ATA_DISK_UNKNOWN 0
56#define ATA_DISK_PATA 1
57#define ATA_DISK_SATA 2
58#define ATA_DISK_PATAPI 3
59#define ATA_DISK_SATAPI 4
60
61/* Структура для информации о диске */
62typedef struct {
67 u32 size; // в секторах
68 char model[41];
70
74void ata_pio_init();
75
82int ata_pio_identify(u8 drive, ata_disk_info_t* info);
83
92int ata_pio_read_sectors(u8 drive, u32 lba, u8 num, u16* buffer);
93
102int ata_pio_write_sectors(u8 drive, u32 lba, u8 num, u16* buffer);
103
108int ata_pio_wait();
109
110#endif // ATA_PIO_H
int ata_pio_read_sectors(u8 drive, u32 lba, u8 num, u16 *buffer)
Чтение секторов с диска
Definition ata_pio.c:159
void ata_pio_init()
Инициализация драйвера ATA PIO.
Definition ata_pio.c:41
int ata_pio_write_sectors(u8 drive, u32 lba, u8 num, u16 *buffer)
Запись секторов на диск
Definition ata_pio.c:196
int ata_pio_identify(u8 drive, ata_disk_info_t *info)
Определение типа и параметров диска
Definition ata_pio.c:103
int ata_pio_wait()
Ожидание готовности диска
Definition ata_pio.c:82
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:62
u16 capabilities
Definition ata_pio.h:65
u32 size
Definition ata_pio.h:67
u16 signature
Definition ata_pio.h:64
u32 command_sets
Definition ata_pio.h:66
u16 type
Definition ata_pio.h:63