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

#define IDE_DATA_REGISTER 0
#define IDE_ERROR_REGISTER 1
#define IDE_SECTOR_COUNT_REGISTER 2
#define IDE_SECTOR_NUMBER_REGISTER 3
#define IDE_CYLINDER_LOW_REGISTER 4
#define IDE_CYLINDER_HIGH_REGISTER 5
// sector size, drive, head
#define IDE_SDH_REGISTER 6
#define IDE_STATUS_REGISTER 7
#define IDE_COMMAND_REGISTER 7
#define IDE_ALTERNATE_STATUS_CONTROL_REGISTER 0
#define IDE_DRIVE_ADDRESS_CONTROL_REGISTER 1

#define IDE_STATUS_BUSY 0x80
#define IDE_STATUS_READY 0x40
#define IDE_STATUS_WRITE_FAULT 0x20
#define IDE_STATUS_SEEK_COMPLETE 0x10
#define IDE_STATUS_DATA_REQUEST 0x08
#define IDE_STATUS_CORRECTED_DATA 0x04
#define IDE_STATUS_INDEX 0x02
#define IDE_STATUS_ERROR 0x01

#define IDE_IDENTIFY_COMMAND 0xEC

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

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 initializeIDEDrive(PciDevice *, ListElement **);

extern void scanHardDrives();

#endif