1 #ifndef DISK_H
2 #define DISK_H
3 
4 #include <stddef.h>
5 #include <stdint.h>
6 #include <stdbool.h>
7 #include <core.h>
8 
9 typedef uint64_t sector_t;
10 typedef uint64_t block_t;
11 
12 struct bios_disk_private {
13 	com32sys_t *regs;
14 };
15 
16 /*
17  * struct disk: contains the information about a specific disk and also
18  * contains the I/O function.
19  */
20 struct disk {
21     void *private;	/* Firmware-private disk info */
22     unsigned int disk_number;	/* in BIOS style */
23     unsigned int sector_size;	/* gener512B or 2048B */
24     unsigned int sector_shift;
25     unsigned int maxtransfer;	/* Max sectors per transfer */
26 
27     unsigned int h, s;		/* CHS geometry */
28     unsigned int secpercyl;	/* h*s */
29     unsigned int _pad;
30 
31     sector_t part_start;   /* the start address of this partition(in sectors) */
32 
33     int (*rdwr_sectors)(struct disk *, void *, sector_t, size_t, bool);
34 };
35 
36 extern void read_sectors(char *, sector_t, int);
37 extern void getoneblk(struct disk *, char *, block_t, int);
38 
39 /* diskio.c */
40 struct disk *bios_disk_init(void *);
41 struct device *device_init(void *);
42 
43 #endif /* DISK_H */
44