pfn = virt_to_phys(Kbuffer) >> PAGE_SHIFT;
/* do we need a gpadl body msg */
- pfnSize = MAX_SIZE_CHANNEL_MESSAGE - sizeof(struct vmbus_channel_gpadl_header) - sizeof(GPA_RANGE);
+ pfnSize = MAX_SIZE_CHANNEL_MESSAGE - sizeof(struct vmbus_channel_gpadl_header) - sizeof(struct gpa_range);
pfnCount = pfnSize / sizeof(u64);
if (pageCount > pfnCount) /* we need a gpadl body */
{
/* fill in the header */
- msgSize = sizeof(struct vmbus_channel_msginfo) + sizeof(struct vmbus_channel_gpadl_header) + sizeof(GPA_RANGE) + pfnCount*sizeof(u64);
+ msgSize = sizeof(struct vmbus_channel_msginfo) + sizeof(struct vmbus_channel_gpadl_header) + sizeof(struct gpa_range) + pfnCount*sizeof(u64);
msgHeader = kzalloc(msgSize, GFP_KERNEL);
INITIALIZE_LIST_HEAD(&msgHeader->SubMsgList);
gpaHeader = (struct vmbus_channel_gpadl_header *)msgHeader->Msg;
gpaHeader->RangeCount = 1;
- gpaHeader->RangeBufLen = sizeof(GPA_RANGE) + pageCount*sizeof(u64);
+ gpaHeader->RangeBufLen = sizeof(struct gpa_range) + pageCount*sizeof(u64);
gpaHeader->Range[0].ByteOffset = 0;
gpaHeader->Range[0].ByteCount = Size;
for (i=0; i<pfnCount; i++)
else
{
/* everything fits in a header */
- msgSize = sizeof(struct vmbus_channel_msginfo) + sizeof(struct vmbus_channel_gpadl_header) + sizeof(GPA_RANGE) + pageCount*sizeof(u64);
+ msgSize = sizeof(struct vmbus_channel_msginfo) + sizeof(struct vmbus_channel_gpadl_header) + sizeof(struct gpa_range) + pageCount*sizeof(u64);
msgHeader = kzalloc(msgSize, GFP_KERNEL);
msgHeader->MessageSize=msgSize;
gpaHeader = (struct vmbus_channel_gpadl_header *)msgHeader->Msg;
gpaHeader->RangeCount = 1;
- gpaHeader->RangeBufLen = sizeof(GPA_RANGE) + pageCount*sizeof(u64);
+ gpaHeader->RangeBufLen = sizeof(struct gpa_range) + pageCount*sizeof(u64);
gpaHeader->Range[0].ByteOffset = 0;
gpaHeader->Range[0].ByteCount = Size;
for (i=0; i<pageCount; i++)
const void * Buffer,
u32 BufferLen,
u64 RequestId,
- VMBUS_PACKET_TYPE Type,
+ enum vmbus_packet_type Type,
u32 Flags
)
{
int ret=0;
- VMPACKET_DESCRIPTOR desc;
- u32 packetLen = sizeof(VMPACKET_DESCRIPTOR) + BufferLen;
+ struct vmpacket_descriptor desc;
+ u32 packetLen = sizeof(struct vmpacket_descriptor) + BufferLen;
u32 packetLenAligned = ALIGN_UP(packetLen, sizeof(u64));
struct scatterlist bufferList[3];
u64 alignedData=0;
/* Setup the descriptor */
desc.Type = Type; /* VmbusPacketTypeDataInBand; */
desc.Flags = Flags; /* VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED; */
- desc.DataOffset8 = sizeof(VMPACKET_DESCRIPTOR) >> 3; /* in 8-bytes granularity */
+ desc.DataOffset8 = sizeof(struct vmpacket_descriptor) >> 3; /* in 8-bytes granularity */
desc.Length8 = (u16)(packetLenAligned >> 3);
desc.TransactionId = RequestId;
sg_init_table(bufferList,3);
- sg_set_buf(&bufferList[0], &desc, sizeof(VMPACKET_DESCRIPTOR));
+ sg_set_buf(&bufferList[0], &desc, sizeof(struct vmpacket_descriptor));
sg_set_buf(&bufferList[1], Buffer, BufferLen);
sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen);
u32 *BufferActualLen,
u64 *RequestId)
{
- VMPACKET_DESCRIPTOR desc;
+ struct vmpacket_descriptor desc;
u32 packetLen;
u32 userLen;
int ret;
spin_lock_irqsave(&Channel->inbound_lock, flags);
- ret = RingBufferPeek(&Channel->Inbound, &desc, sizeof(VMPACKET_DESCRIPTOR));
+ ret = RingBufferPeek(&Channel->Inbound, &desc, sizeof(struct vmpacket_descriptor));
if (ret != 0)
{
spin_unlock_irqrestore(&Channel->inbound_lock, flags);
u64* RequestId
)
{
- VMPACKET_DESCRIPTOR desc;
+ struct vmpacket_descriptor desc;
u32 packetLen;
u32 userLen;
int ret;
spin_lock_irqsave(&Channel->inbound_lock, flags);
- ret = RingBufferPeek(&Channel->Inbound, &desc, sizeof(VMPACKET_DESCRIPTOR));
+ ret = RingBufferPeek(&Channel->Inbound, &desc, sizeof(struct vmpacket_descriptor));
if (ret != 0)
{
spin_unlock_irqrestore(&Channel->inbound_lock, flags);
#include "ChannelMgmt.h"
-/* The format must be the same as VMDATA_GPA_DIRECT */
+/* The format must be the same as struct vmdata_gpa_direct */
struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER {
u16 Type;
u16 DataOffset8;
struct hv_page_buffer Range[MAX_PAGE_BUFFER_COUNT];
} __attribute__((packed));
-/* The format must be the same as VMDATA_GPA_DIRECT */
+/* The format must be the same as struct vmdata_gpa_direct */
struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER {
u16 Type;
u16 DataOffset8;
const void *Buffer,
u32 BufferLen,
u64 RequestId,
- VMBUS_PACKET_TYPE Type,
+ enum vmbus_packet_type Type,
u32 Flags);
extern int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *channel,
static void
NetVscOnSendCompletion(
struct hv_device *Device,
- VMPACKET_DESCRIPTOR *Packet
+ struct vmpacket_descriptor *Packet
);
static int
static void
NetVscOnReceive(
struct hv_device *Device,
- VMPACKET_DESCRIPTOR *Packet
+ struct vmpacket_descriptor *Packet
);
static void
DPRINT_ENTER(NETVSC);
- DPRINT_DBG(NETVSC, "sizeof(struct hv_netvsc_packet)=%zd, sizeof(NVSP_MESSAGE)=%zd, sizeof(VMTRANSFER_PAGE_PACKET_HEADER)=%zd",
- sizeof(struct hv_netvsc_packet), sizeof(NVSP_MESSAGE), sizeof(VMTRANSFER_PAGE_PACKET_HEADER));
+ DPRINT_DBG(NETVSC, "sizeof(struct hv_netvsc_packet)=%zd, sizeof(NVSP_MESSAGE)=%zd, sizeof(struct vmtransfer_page_packet_header)=%zd",
+ sizeof(struct hv_netvsc_packet), sizeof(NVSP_MESSAGE), sizeof(struct vmtransfer_page_packet_header));
/* Make sure we are at least 2 pages since 1 page is used for control */
ASSERT(driver->RingBufferSize >= (PAGE_SIZE << 1));
static void
NetVscOnSendCompletion(
struct hv_device *Device,
- VMPACKET_DESCRIPTOR *Packet
+ struct vmpacket_descriptor *Packet
)
{
struct NETVSC_DEVICE *netDevice;
static void
NetVscOnReceive(
struct hv_device *Device,
- VMPACKET_DESCRIPTOR *Packet
+ struct vmpacket_descriptor *Packet
)
{
struct NETVSC_DEVICE *netDevice;
- VMTRANSFER_PAGE_PACKET_HEADER *vmxferpagePacket;
+ struct vmtransfer_page_packet_header *vmxferpagePacket;
NVSP_MESSAGE *nvspPacket;
struct hv_netvsc_packet *netvscPacket=NULL;
LIST_ENTRY* entry;
DPRINT_DBG(NETVSC, "NVSP packet received - type %d", nvspPacket->Header.MessageType);
- vmxferpagePacket = (VMTRANSFER_PAGE_PACKET_HEADER*)Packet;
+ vmxferpagePacket = (struct vmtransfer_page_packet_header *)Packet;
if (vmxferpagePacket->TransferPageSetId != NETVSC_RECEIVE_BUFFER_ID)
{
u32 bytesRecvd;
u64 requestId;
unsigned char packet[netPacketSize];
- VMPACKET_DESCRIPTOR *desc;
+ struct vmpacket_descriptor *desc;
unsigned char *buffer=packet;
int bufferlen=netPacketSize;
{
DPRINT_DBG(NETVSC, "receive %d bytes, tid %llx", bytesRecvd, requestId);
- desc = (VMPACKET_DESCRIPTOR*)buffer;
+ desc = (struct vmpacket_descriptor*)buffer;
switch (desc->Type)
{
case VmbusPacketTypeCompletion:
u32 Gpadl;
u16 RangeBufLen;
u16 RangeCount;
- GPA_RANGE Range[0];
+ struct gpa_range Range[0];
} __attribute__((packed));
/* This is the followup packet that contains more PFNs. */
#ifndef _VMBUSPACKETFORMAT_H_
-typedef struct {
+struct vmpacket_descriptor {
u16 Type;
u16 DataOffset8;
u16 Length8;
u16 Flags;
u64 TransactionId;
-} __attribute__((packed)) VMPACKET_DESCRIPTOR, *PVMPACKET_DESCRIPTOR;
+} __attribute__((packed));
-typedef u32 PREVIOUS_PACKET_OFFSET, *PPREVIOUS_PACKET_OFFSET;
+struct vmpacket_header {
+ u32 PreviousPacketStartOffset;
+ struct vmpacket_descriptor Descriptor;
+} __attribute__((packed));
-typedef struct {
- PREVIOUS_PACKET_OFFSET PreviousPacketStartOffset;
- VMPACKET_DESCRIPTOR Descriptor;
-} __attribute__((packed)) VMPACKET_HEADER, *PVMPACKET_HEADER;
-
-typedef struct {
+struct vmtransfer_page_range {
u32 ByteCount;
u32 ByteOffset;
-} __attribute__((packed)) VMTRANSFER_PAGE_RANGE, *PVMTRANSFER_PAGE_RANGE;
+} __attribute__((packed));
-typedef struct VMTRANSFER_PAGE_PACKET_HEADER {
- VMPACKET_DESCRIPTOR d;
+struct vmtransfer_page_packet_header {
+ struct vmpacket_descriptor d;
u16 TransferPageSetId;
bool SenderOwnsSet;
u8 Reserved;
u32 RangeCount;
- VMTRANSFER_PAGE_RANGE Ranges[1];
-} __attribute__((packed)) VMTRANSFER_PAGE_PACKET_HEADER, *PVMTRANSFER_PAGE_PACKET_HEADER;
+ struct vmtransfer_page_range Ranges[1];
+} __attribute__((packed));
-typedef struct _VMGPADL_PACKET_HEADER {
- VMPACKET_DESCRIPTOR d;
+struct vmgpadl_packet_header {
+ struct vmpacket_descriptor d;
u32 Gpadl;
u32 Reserved;
-} __attribute__((packed)) VMGPADL_PACKET_HEADER, *PVMGPADL_PACKET_HEADER;
+} __attribute__((packed));
-typedef struct _VMADD_REMOVE_TRANSFER_PAGE_SET {
- VMPACKET_DESCRIPTOR d;
+struct vmadd_remove_transfer_page_set {
+ struct vmpacket_descriptor d;
u32 Gpadl;
u16 TransferPageSetId;
u16 Reserved;
-} __attribute__((packed)) VMADD_REMOVE_TRANSFER_PAGE_SET, *PVMADD_REMOVE_TRANSFER_PAGE_SET;
+} __attribute__((packed));
/*
* This structure defines a range in guest physical space that can be made to
* look virtually contiguous.
*/
-typedef struct _GPA_RANGE {
+struct gpa_range {
u32 ByteCount;
u32 ByteOffset;
u64 PfnArray[0];
-} GPA_RANGE, *PGPA_RANGE;
+};
/*
* This is the format for an Establish Gpadl packet, which contains a handle by
* ranges, then the resulting MDL will be "chained," representing multiple VA
* ranges.
*/
-typedef struct _VMESTABLISH_GPADL {
- VMPACKET_DESCRIPTOR d;
+struct vmestablish_gpadl {
+ struct vmpacket_descriptor d;
u32 Gpadl;
u32 RangeCount;
- GPA_RANGE Range[1];
-} __attribute__((packed)) VMESTABLISH_GPADL, *PVMESTABLISH_GPADL;
+ struct gpa_range Range[1];
+} __attribute__((packed));
/*
* This is the format for a Teardown Gpadl packet, which indicates that the
* GPADL handle in the Establish Gpadl packet will never be referenced again.
*/
-typedef struct _VMTEARDOWN_GPADL {
- VMPACKET_DESCRIPTOR d;
+struct vmteardown_gpadl {
+ struct vmpacket_descriptor d;
u32 Gpadl;
u32 Reserved; /* for alignment to a 8-byte boundary */
-} __attribute__((packed)) VMTEARDOWN_GPADL, *PVMTEARDOWN_GPADL;
+} __attribute__((packed));
/*
* This is the format for a GPA-Direct packet, which contains a set of GPA
* ranges, in addition to commands and/or data.
*/
-typedef struct _VMDATA_GPA_DIRECT {
- VMPACKET_DESCRIPTOR d;
+struct vmdata_gpa_direct {
+ struct vmpacket_descriptor d;
u32 Reserved;
u32 RangeCount;
- GPA_RANGE Range[1];
-} __attribute__((packed)) VMDATA_GPA_DIRECT, *PVMDATA_GPA_DIRECT;
+ struct gpa_range Range[1];
+} __attribute__((packed));
/* This is the format for a Additional Data Packet. */
-typedef struct _VMADDITIONAL_DATA {
- VMPACKET_DESCRIPTOR d;
+struct vmadditional_data {
+ struct vmpacket_descriptor d;
u64 TotalBytes;
u32 ByteOffset;
u32 ByteCount;
unsigned char Data[1];
-} __attribute__((packed)) VMADDITIONAL_DATA, *PVMADDITIONAL_DATA;
-
-typedef union {
- VMPACKET_DESCRIPTOR SimpleHeader;
- VMTRANSFER_PAGE_PACKET_HEADER TransferPageHeader;
- VMGPADL_PACKET_HEADER GpadlHeader;
- VMADD_REMOVE_TRANSFER_PAGE_SET AddRemoveTransferPageHeader;
- VMESTABLISH_GPADL EstablishGpadlHeader;
- VMTEARDOWN_GPADL TeardownGpadlHeader;
- VMDATA_GPA_DIRECT DataGpaDirectHeader;
-} VMPACKET_LARGEST_POSSIBLE_HEADER, *PVMPACKET_LARGEST_POSSIBLE_HEADER;
+} __attribute__((packed));
+
+union vmpacket_largest_possible_header {
+ struct vmpacket_descriptor SimpleHeader;
+ struct vmtransfer_page_packet_header TransferPageHeader;
+ struct vmgpadl_packet_header GpadlHeader;
+ struct vmadd_remove_transfer_page_set AddRemoveTransferPageHeader;
+ struct vmestablish_gpadl EstablishGpadlHeader;
+ struct vmteardown_gpadl TeardownGpadlHeader;
+ struct vmdata_gpa_direct DataGpaDirectHeader;
+};
#define VMPACKET_DATA_START_ADDRESS(__packet) \
(void *)(((unsigned char *)__packet) + \
- ((PVMPACKET_DESCRIPTOR)__packet)->DataOffset8 * 8)
+ ((struct vmpacket_descriptor)__packet)->DataOffset8 * 8)
#define VMPACKET_DATA_LENGTH(__packet) \
- ((((PVMPACKET_DESCRIPTOR)__packet)->Length8 - \
- ((PVMPACKET_DESCRIPTOR)__packet)->DataOffset8) * 8)
+ ((((struct vmpacket_descriptor)__packet)->Length8 - \
+ ((struct vmpacket_descriptor)__packet)->DataOffset8) * 8)
#define VMPACKET_TRANSFER_MODE(__packet) \
- (((PVMPACKET_DESCRIPTOR)__packet)->Type)
-
-typedef enum {
- VmbusServerEndpoint = 0,
- VmbusClientEndpoint,
- VmbusEndpointMaximum
-} ENDPOINT_TYPE, *PENDPOINT_TYPE;
+ (((struct IMPACT)__packet)->Type)
-typedef enum {
+enum vmbus_packet_type {
VmbusPacketTypeInvalid = 0x0,
VmbusPacketTypeSynch = 0x1,
VmbusPacketTypeAddTransferPageSet = 0x2,
VmbusPacketTypeCompletion = 0xb,
VmbusPacketTypeDataUsingAdditionalPackets = 0xc,
VmbusPacketTypeAdditionalData = 0xd
-} VMBUS_PACKET_TYPE, *PVMBUS_PACKET_TYPE;
+};
#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED 1
/* the host adapter. */
/* The max transfer length will be published when we offer a vmbus channel. */
#define MAX_TRANSFER_LENGTH 0x40000
-#define DEFAULT_PACKET_SIZE (sizeof(VMDATA_GPA_DIRECT) + \
+#define DEFAULT_PACKET_SIZE (sizeof(struct vmdata_gpa_direct) + \
sizeof(struct vstor_packet) + \
sizesizeof(u64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE)))