audk/OvmfPkg/XenPvBlkDxe/BlockFront.h

102 lines
2.6 KiB
C

/** @file
BlockFront functions and types declarations.
Copyright (C) 2014, Citrix Ltd.
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include "XenPvBlkDxe.h"
#include <IndustryStandard/Xen/event_channel.h>
#include <IndustryStandard/Xen/io/blkif.h>
typedef struct _XEN_BLOCK_FRONT_DEVICE XEN_BLOCK_FRONT_DEVICE;
typedef struct _XEN_BLOCK_FRONT_IO XEN_BLOCK_FRONT_IO;
struct _XEN_BLOCK_FRONT_IO
{
XEN_BLOCK_FRONT_DEVICE *Dev;
UINT8 *Buffer;
UINTN Size;
UINTN Sector; ///< 512 bytes sector.
grant_ref_t GrantRef[BLKIF_MAX_SEGMENTS_PER_REQUEST];
INT32 NumRef;
EFI_STATUS Status;
};
typedef struct
{
UINT64 Sectors;
UINT32 SectorSize;
UINT32 VDiskInfo;
BOOLEAN ReadWrite;
BOOLEAN CdRom;
BOOLEAN FeatureBarrier;
BOOLEAN FeatureFlushCache;
} XEN_BLOCK_FRONT_MEDIA_INFO;
#define XEN_BLOCK_FRONT_SIGNATURE SIGNATURE_32 ('X', 'p', 'v', 'B')
struct _XEN_BLOCK_FRONT_DEVICE {
UINT32 Signature;
EFI_BLOCK_IO_PROTOCOL BlockIo;
domid_t DomainId;
blkif_front_ring_t Ring;
grant_ref_t RingRef;
evtchn_port_t EventChannel;
blkif_vdev_t DeviceId;
CONST CHAR8 *NodeName;
XEN_BLOCK_FRONT_MEDIA_INFO MediaInfo;
VOID *StateWatchToken;
XENBUS_PROTOCOL *XenBusIo;
};
#define XEN_BLOCK_FRONT_FROM_BLOCK_IO(b) \
CR (b, XEN_BLOCK_FRONT_DEVICE, BlockIo, XEN_BLOCK_FRONT_SIGNATURE)
EFI_STATUS
XenPvBlockFrontInitialization (
IN XENBUS_PROTOCOL *XenBusIo,
IN CONST CHAR8 *NodeName,
OUT XEN_BLOCK_FRONT_DEVICE **DevPtr
);
VOID
XenPvBlockFrontShutdown (
IN XEN_BLOCK_FRONT_DEVICE *Dev
);
VOID
XenPvBlockAsyncIo (
IN OUT XEN_BLOCK_FRONT_IO *IoData,
IN BOOLEAN IsWrite
);
EFI_STATUS
XenPvBlockIo (
IN OUT XEN_BLOCK_FRONT_IO *IoData,
IN BOOLEAN IsWrite
);
VOID
XenPvBlockAsyncIoPoll (
IN XEN_BLOCK_FRONT_DEVICE *Dev
);
VOID
XenPvBlockSync (
IN XEN_BLOCK_FRONT_DEVICE *Dev
);