50 lines
929 B
C
50 lines
929 B
C
#ifndef __DISK_H
|
|
#define __DISK_H
|
|
|
|
#include "os.h"
|
|
#include "ahci.h"
|
|
|
|
typedef enum {
|
|
DISK_INVALID = 0,
|
|
DISK_AHCI = 1,
|
|
} disk_type_t;
|
|
|
|
struct disk_phys_t {
|
|
disk_type_t type;
|
|
union {
|
|
hba_port_t* hba_port;
|
|
};
|
|
};
|
|
|
|
typedef struct {
|
|
u8 attributes;
|
|
u8 chs_start[3];
|
|
|
|
u8 type;
|
|
u8 chs_last[3];
|
|
|
|
u32 lba_start;
|
|
u32 lba_num;
|
|
} __packed partition_t;
|
|
|
|
typedef struct {
|
|
struct disk_phys_t phys;
|
|
char disk_name; //ASCII char A-Z
|
|
u64 phys_totalsectors;
|
|
u8 uid[10];
|
|
partition_t parts[4];
|
|
u64 cur_part;
|
|
} disk_t;
|
|
|
|
disk_t* disk_get(char name);
|
|
u32 disk_available(); //return bitmap A-Z (26 bits)
|
|
u64 disk_read_ex(disk_t* disk,u64 lba,u64 sectors,void* __virt buf);
|
|
u64 disk_write_ex(disk_t* disk,u64 lba,u64 sectors,void* __virt buf);
|
|
|
|
u64 disk_read(disk_t* disk,u64 lba,u64 sectors,void* __virt buf);
|
|
u64 disk_write(disk_t* disk,u64 lba,u64 sectors,void* __virt buf);
|
|
|
|
void disk_setup(disk_t* disk);
|
|
void disk_init();
|
|
|
|
#endif
|