Newer
Older
tree-os / src / include / hardDrive.h
#ifndef HARD_DRIVE_H
#define HARD_DRIVE_H

#include <list.h>
#include <pci.h>
#include <stdint.h>

#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_PACKET 0xA0
#define ATA_CMD_IDENTIFY_PACKET 0xA1
#define ATA_CMD_IDENTIFY 0xEC

typedef struct HardDrive {
    char *model;
    uint32_t size;
    void *interface;
    void (*access)(struct HardDrive *, uint32_t, void *, uint8_t, uint8_t);
    // todo: mount point
} HardDrive;

extern void initializeIdeController(PciDevice *, ListElement **);
extern void initializeSataController(PciDevice *, ListElement **);

extern void scanHardDrives();

#endif