BlockFront.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /** @file
  2. BlockFront functions and types declarations.
  3. Copyright (C) 2014, Citrix Ltd.
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "XenPvBlkDxe.h"
  7. #include <IndustryStandard/Xen/event_channel.h>
  8. #include <IndustryStandard/Xen/io/blkif.h>
  9. typedef struct _XEN_BLOCK_FRONT_DEVICE XEN_BLOCK_FRONT_DEVICE;
  10. typedef struct _XEN_BLOCK_FRONT_IO XEN_BLOCK_FRONT_IO;
  11. struct _XEN_BLOCK_FRONT_IO {
  12. XEN_BLOCK_FRONT_DEVICE *Dev;
  13. UINT8 *Buffer;
  14. UINTN Size;
  15. UINTN Sector; ///< 512 bytes sector.
  16. grant_ref_t GrantRef[BLKIF_MAX_SEGMENTS_PER_REQUEST];
  17. INT32 NumRef;
  18. EFI_STATUS Status;
  19. };
  20. typedef struct {
  21. UINT64 Sectors;
  22. UINT32 SectorSize;
  23. UINT32 VDiskInfo;
  24. BOOLEAN ReadWrite;
  25. BOOLEAN CdRom;
  26. BOOLEAN FeatureBarrier;
  27. BOOLEAN FeatureFlushCache;
  28. } XEN_BLOCK_FRONT_MEDIA_INFO;
  29. #define XEN_BLOCK_FRONT_SIGNATURE SIGNATURE_32 ('X', 'p', 'v', 'B')
  30. struct _XEN_BLOCK_FRONT_DEVICE {
  31. UINT32 Signature;
  32. EFI_BLOCK_IO_PROTOCOL BlockIo;
  33. domid_t DomainId;
  34. blkif_front_ring_t Ring;
  35. grant_ref_t RingRef;
  36. evtchn_port_t EventChannel;
  37. blkif_vdev_t DeviceId;
  38. CONST CHAR8 *NodeName;
  39. XEN_BLOCK_FRONT_MEDIA_INFO MediaInfo;
  40. VOID *StateWatchToken;
  41. XENBUS_PROTOCOL *XenBusIo;
  42. };
  43. #define XEN_BLOCK_FRONT_FROM_BLOCK_IO(b) \
  44. CR (b, XEN_BLOCK_FRONT_DEVICE, BlockIo, XEN_BLOCK_FRONT_SIGNATURE)
  45. EFI_STATUS
  46. XenPvBlockFrontInitialization (
  47. IN XENBUS_PROTOCOL *XenBusIo,
  48. IN CONST CHAR8 *NodeName,
  49. OUT XEN_BLOCK_FRONT_DEVICE **DevPtr
  50. );
  51. VOID
  52. XenPvBlockFrontShutdown (
  53. IN XEN_BLOCK_FRONT_DEVICE *Dev
  54. );
  55. VOID
  56. XenPvBlockAsyncIo (
  57. IN OUT XEN_BLOCK_FRONT_IO *IoData,
  58. IN BOOLEAN IsWrite
  59. );
  60. EFI_STATUS
  61. XenPvBlockIo (
  62. IN OUT XEN_BLOCK_FRONT_IO *IoData,
  63. IN BOOLEAN IsWrite
  64. );
  65. VOID
  66. XenPvBlockAsyncIoPoll (
  67. IN XEN_BLOCK_FRONT_DEVICE *Dev
  68. );
  69. VOID
  70. XenPvBlockSync (
  71. IN XEN_BLOCK_FRONT_DEVICE *Dev
  72. );