--- /dev/null
+#ifndef _GPXE_BLOCKDEV_H
+#define _GPXE_BLOCKDEV_H
+
+/**
+ * @file
+ *
+ * Block devices
+ *
+ */
+
+/** A block device */
+struct block_device {
+ /** Block size */
+ size_t blksize;
+ /** Total number of blocks */
+ uint64_t blocks;
+ /**
+ * Read block
+ *
+ * @v blockdev Block device
+ * @v block Block number
+ * @v buffer Data buffer
+ * @ret rc Return status code
+ */
+ int ( * read ) ( struct block_device *blockdev, uint64_t block,
+ void *buffer );
+ /**
+ * Write block
+ *
+ * @v blockdev Block device
+ * @v block Block number
+ * @v buffer Data buffer
+ * @ret rc Return status code
+ */
+ int ( * write ) ( struct block_device *blockdev, uint64_t block,
+ const void *buffer );
+};
+
+#endif /* _GPXE_BLOCKDEV_H */