aboutsummaryrefslogtreecommitdiff
path: root/src/include/disk.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/disk.h')
-rw-r--r--src/include/disk.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/include/disk.h b/src/include/disk.h
new file mode 100644
index 0000000..739902f
--- /dev/null
+++ b/src/include/disk.h
@@ -0,0 +1,53 @@
+#ifndef DISK_H
+#define DISK_H
+
+#include "dev.h"
+
+/*
+ * Structure returned from disk_probe and passed to other driver
+ * functions.
+ */
+struct disk
+{
+ struct dev dev; /* This must come first */
+ int (*read)(struct disk *, sector_t sector);
+ unsigned int drive;
+ unsigned long hw_sector_size; /* The hardware sector size for dealing
+ * with partition tables and the like.
+ * Must be >= 512
+ */
+ unsigned int sectors_per_read; /* The number of 512 byte sectors
+ * returned by each read call.
+ * All I/O must be aligned to this size.
+ */
+ unsigned int bytes; /* The number of bytes in the read buffer. */
+ sector_t sectors; /* The number of sectors on the drive. */
+ sector_t sector; /* The first sector in the driver buffer */
+ unsigned char *buffer; /* The data read from the drive */
+ void *priv; /* driver can hang private data here */
+
+ unsigned long disk_offset;
+ int direction;
+};
+
+extern struct disk disk;
+extern int url_file(const char *name,
+ int (*fnc)(unsigned char *, unsigned int, unsigned int, int));
+
+extern int disk_probe(struct dev *dev);
+extern int disk_load_configuration(struct dev *dev);
+extern int disk_load(struct dev *dev);
+extern void disk_disable(void);
+
+
+#ifndef DOWNLOAD_PROTO_DISK
+#define disk_disable() do { } while(0)
+#endif
+
+#define SECTOR_SIZE 512
+#define SECTOR_SHIFT 9
+
+/* Maximum block_size that may be set. */
+#define DISK_BUFFER_SIZE (18 * SECTOR_SIZE)
+
+#endif /* DISK_H */