00001 #ifndef _GPXE_BLOCKDEV_H 00002 #define _GPXE_BLOCKDEV_H 00003 00004 /** 00005 * @file 00006 * 00007 * Block devices 00008 * 00009 */ 00010 00011 FILE_LICENCE ( GPL2_OR_LATER ); 00012 00013 #include <gpxe/uaccess.h> 00014 00015 struct block_device; 00016 00017 /** Block device operations */ 00018 struct block_device_operations { 00019 /** 00020 * Read block 00021 * 00022 * @v blockdev Block device 00023 * @v block Block number 00024 * @v count Block count 00025 * @v buffer Data buffer 00026 * @ret rc Return status code 00027 */ 00028 int ( * read ) ( struct block_device *blockdev, uint64_t block, 00029 unsigned long count, userptr_t buffer ); 00030 /** 00031 * Write block 00032 * 00033 * @v blockdev Block device 00034 * @v block Block number 00035 * @v count Block count 00036 * @v buffer Data buffer 00037 * @ret rc Return status code 00038 */ 00039 int ( * write ) ( struct block_device *blockdev, uint64_t block, 00040 unsigned long count, userptr_t buffer ); 00041 }; 00042 00043 /** A block device */ 00044 struct block_device { 00045 /** Block device operations */ 00046 struct block_device_operations *op; 00047 /** Block size */ 00048 size_t blksize; 00049 /** Total number of blocks */ 00050 uint64_t blocks; 00051 }; 00052 00053 #endif /* _GPXE_BLOCKDEV_H */
1.5.7.1