quinn-os/hd.h
2016-01-25 22:37:01 +10:00

43 lines
1.1 KiB
C

#ifndef __HD_H
#define __HD_H
#include "pata.h"
#include "hashmap.h"
struct partition_table {
unsigned char boot;
unsigned char start_head;
unsigned short partition_start;
unsigned char type;
unsigned char end_head;
unsigned short partition_end;
unsigned int relative_sector;
unsigned int total_sectors;
} __attribute__((packed));
struct block_buffer {
char key[16];
unsigned long lba;
unsigned int accessed;
unsigned char dirty;
char buffer[512];
};
struct hd_dev {
struct ide_dev *ide_dev;
unsigned char drive;
unsigned char part;
unsigned int part_offset;
unsigned int part_len;
map_t block_buffers;
};
extern int init_hd(struct ide_dev *ide);
extern void hd_sync(int hd);
extern void hd_buffer_trim();
extern char *hd_read_block(int hd, unsigned int blockno, char *dest, unsigned int blocksize);
extern int hd_read_blocks(int hd, unsigned int blockstart, unsigned int blockcount, char *dest, unsigned int blocksize);
extern void hd_write_blocks(int hd, unsigned int blockstart, unsigned int blockcount, char *source, unsigned int blocksize);
extern void hd_write_block(int hd, unsigned int blockno, char *source, unsigned int blocksize);
#endif