| #ifndef DISK_H |
| #define DISK_H |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| #include <stdbool.h> |
| #include <core.h> |
| |
| typedef uint64_t sector_t; |
| typedef uint64_t block_t; |
| |
| struct bios_disk_private { |
| com32sys_t *regs; |
| }; |
| |
| /* |
| * struct disk: contains the information about a specific disk and also |
| * contains the I/O function. |
| */ |
| struct disk { |
| void *private; /* Firmware-private disk info */ |
| unsigned int disk_number; /* in BIOS style */ |
| unsigned int sector_size; /* gener512B or 2048B */ |
| unsigned int sector_shift; |
| unsigned int maxtransfer; /* Max sectors per transfer */ |
| |
| unsigned int h, s; /* CHS geometry */ |
| unsigned int secpercyl; /* h*s */ |
| unsigned int _pad; |
| |
| sector_t part_start; /* the start address of this partition(in sectors) */ |
| |
| int (*rdwr_sectors)(struct disk *, void *, sector_t, size_t, bool); |
| }; |
| |
| extern void read_sectors(char *, sector_t, int); |
| extern void getoneblk(struct disk *, char *, block_t, int); |
| |
| /* diskio.c */ |
| struct disk *bios_disk_init(void *); |
| struct device *device_init(void *); |
| |
| #endif /* DISK_H */ |