#ifndef _GPXE_BLOCKDEV_H #define _GPXE_BLOCKDEV_H /** * @file * * Block devices * */ FILE_LICENCE ( GPL2_OR_LATER ); #include struct block_device; /** Block device operations */ struct block_device_operations { /** * Read block * * @v blockdev Block device * @v block Block number * @v count Block count * @v buffer Data buffer * @ret rc Return status code */ int ( * read ) ( struct block_device *blockdev, uint64_t block, unsigned long count, userptr_t buffer ); /** * Write block * * @v blockdev Block device * @v block Block number * @v count Block count * @v buffer Data buffer * @ret rc Return status code */ int ( * write ) ( struct block_device *blockdev, uint64_t block, unsigned long count, userptr_t buffer ); }; /** A block device */ struct block_device { /** Block device operations */ struct block_device_operations *op; /** Block size */ size_t blksize; /** Total number of blocks */ uint64_t blocks; }; #endif /* _GPXE_BLOCKDEV_H */