lenochka/kernel/disk.h
2019-03-29 00:27:42 +02:00

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