You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

blockdev.h 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #ifndef _GPXE_BLOCKDEV_H
  2. #define _GPXE_BLOCKDEV_H
  3. /**
  4. * @file
  5. *
  6. * Block devices
  7. *
  8. */
  9. FILE_LICENCE ( GPL2_OR_LATER );
  10. #include <gpxe/uaccess.h>
  11. struct block_device;
  12. /** Block device operations */
  13. struct block_device_operations {
  14. /**
  15. * Read block
  16. *
  17. * @v blockdev Block device
  18. * @v block Block number
  19. * @v count Block count
  20. * @v buffer Data buffer
  21. * @ret rc Return status code
  22. */
  23. int ( * read ) ( struct block_device *blockdev, uint64_t block,
  24. unsigned long count, userptr_t buffer );
  25. /**
  26. * Write block
  27. *
  28. * @v blockdev Block device
  29. * @v block Block number
  30. * @v count Block count
  31. * @v buffer Data buffer
  32. * @ret rc Return status code
  33. */
  34. int ( * write ) ( struct block_device *blockdev, uint64_t block,
  35. unsigned long count, userptr_t buffer );
  36. };
  37. /** A block device */
  38. struct block_device {
  39. /** Block device operations */
  40. struct block_device_operations *op;
  41. /** Block size */
  42. size_t blksize;
  43. /** Total number of blocks */
  44. uint64_t blocks;
  45. };
  46. #endif /* _GPXE_BLOCKDEV_H */