4bb8f6eb76daadd88b9b555b828994196579ed9b
[people/xl0/gpxe.git] / src / include / disk.h
1 #ifndef DISK_H
2 #define DISK_H
3
4 #include "etherboot.h" /* for sector_t */
5 #include "dev.h"
6
7 /*
8  *      Structure returned from disk_probe and passed to other driver
9  *      functions.
10  */
11 struct disk
12 {
13         struct dev    dev;  /* This must come first */
14         int           (*read)(struct disk *, sector_t sector);
15         unsigned int  drive;
16         unsigned long hw_sector_size;   /* The hardware sector size for dealing
17                                          * with partition tables and the like.
18                                          * Must be >= 512
19                                          */
20         unsigned int  sectors_per_read; /* The number of 512 byte sectors
21                                          * returned by each read call. 
22                                          * All I/O must be aligned to this size.
23                                          */
24         unsigned int  bytes;            /* The number of bytes in the read buffer. */
25         sector_t      sectors;          /* The number of sectors on the drive.  */
26         sector_t      sector;           /* The first sector in the driver buffer  */
27         unsigned char *buffer;          /* The data read from the drive */
28         void          *priv;            /* driver can hang private data here */
29
30         unsigned long disk_offset;
31         int           direction;
32 };
33
34 struct disk_operations {
35 };
36
37 extern struct disk disk;
38 extern int url_file(const char *name,
39         int (*fnc)(unsigned char *, unsigned int, unsigned int, int));
40
41 extern int disk_probe(struct dev *dev);
42 extern int disk_load_configuration(struct dev *dev);
43 extern int disk_load(struct dev *dev);
44 extern void disk_disable(void);
45
46 extern struct type_driver disk_driver;
47
48 #ifndef DOWNLOAD_PROTO_DISK
49 #define disk_disable()  do { } while(0)
50 #endif
51
52 #define SECTOR_SIZE 512
53 #define SECTOR_SHIFT 9
54
55 /* Maximum block_size that may be set. */
56 #define DISK_BUFFER_SIZE (18 * SECTOR_SIZE)
57
58 #endif /* DISK_H */