All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, devel@driverdev.osuosl.org,
	virtualization@lists.osdl.org
Cc: Sam Ramji <sramji@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Hank Janssen <hjanssen@microsoft.com>,
	shemminger@linux-foundation.org
Subject: [patch 02/54] Staging: hv: add the Hyper-V driver header files
Date: Fri, 17 Jul 2009 11:08:52 -0700	[thread overview]
Message-ID: <20090717180916.148235010@mini.kroah.org> (raw)
In-Reply-To: <20090720160025.GA20249@kroah.com>

[-- Attachment #1: staging-hv-add-the-hyper-v-driver-header-files.patch --]
[-- Type: text/plain, Size: 30311 bytes --]

From: Hank Janssen <hjanssen@microsoft.com>

These are the header files for the different Linux Hyper-V drivers to
use.

Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
 drivers/staging/hv/include/NetVscApi.h  |  145 +++++++++++++++++
 drivers/staging/hv/include/StorVscApi.h |  137 ++++++++++++++++
 drivers/staging/hv/include/VmbusApi.h   |  262 +++++++++++++++++++++++++++++++
 drivers/staging/hv/include/logging.h    |  134 ++++++++++++++++
 drivers/staging/hv/include/osd.h        |  263 ++++++++++++++++++++++++++++++++
 drivers/staging/hv/include/vmbus.h      |  111 +++++++++++++
 6 files changed, 1052 insertions(+)
 create mode 100644 drivers/staging/hv/include/NetVscApi.h
 create mode 100644 drivers/staging/hv/include/StorVscApi.h
 create mode 100644 drivers/staging/hv/include/VmbusApi.h
 create mode 100644 drivers/staging/hv/include/logging.h
 create mode 100644 drivers/staging/hv/include/osd.h
 create mode 100644 drivers/staging/hv/include/vmbus.h

--- /dev/null
+++ b/drivers/staging/hv/include/logging.h
@@ -0,0 +1,134 @@
+/*
+ *
+ * Copyright (c) 2009, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *
+ */
+
+
+#ifndef _LOGGING_H_
+#define _LOGGING_H_
+
+//#include <linux/init.h>
+//#include <linux/module.h>
+
+#include "osd.h"
+
+#define VMBUS				0x0001
+#define STORVSC				0x0002
+#define NETVSC				0x0004
+#define INPUTVSC			0x0008
+#define BLKVSC				0x0010
+#define VMBUS_DRV			0x0100
+#define STORVSC_DRV			0x0200
+#define NETVSC_DRV			0x0400
+#define INPUTVSC_DRV		0x0800
+#define BLKVSC_DRV			0x1000
+
+#define ALL_MODULES			(VMBUS		|\
+							STORVSC		|\
+							NETVSC		|\
+							INPUTVSC	|\
+							BLKVSC		|\
+							VMBUS_DRV	|\
+							STORVSC_DRV	|\
+							NETVSC_DRV	|\
+							INPUTVSC_DRV|\
+							BLKVSC_DRV)
+
+// Logging Level
+#define CRITICAL_LVL				2
+#define ERROR_LVL					3
+#define WARNING_LVL					4
+#define INFO_LVL					6
+#define DEBUG_LVL					7
+#define DEBUG_LVL_ENTEREXIT			8
+#define DEBUG_RING_LVL				9
+
+extern unsigned int vmbus_loglevel;
+
+#define ASSERT(expr)	\
+        if (!(expr)) {	\
+		LogMsg("<%d>Assertion failed! %s,%s,%s,line=%d\n", CRITICAL_LVL, #expr,__FILE__,__FUNCTION__,__LINE__);	\
+		__asm__ __volatile__("int3");	\
+        }
+
+#define DPRINT(mod, lvl, fmt, args...) do {\
+	if (mod & (HIWORD(vmbus_loglevel))) \
+		(lvl <= LOWORD(vmbus_loglevel))?(LogMsg("<%d>" #mod": %s() " fmt "\n", DEBUG_LVL, __FUNCTION__, ## args)):(0);\
+	} while (0)
+
+#define DPRINT_DBG(mod, fmt, args...) do {\
+	if (mod & (HIWORD(vmbus_loglevel))) \
+		(DEBUG_LVL <= LOWORD(vmbus_loglevel))?(LogMsg("<%d>" #mod": %s() " fmt "\n", DEBUG_LVL, __FUNCTION__, ## args)):(0);\
+	} while (0)
+
+#define DPRINT_INFO(mod, fmt, args...) do {\
+	if (mod & (HIWORD(vmbus_loglevel))) \
+		(INFO_LVL <= LOWORD(vmbus_loglevel))?(LogMsg("<%d>" #mod": " fmt "\n", INFO_LVL, ## args)):(0);\
+	} while (0)
+
+#define DPRINT_WARN(mod, fmt, args...) do {\
+	if (mod & (HIWORD(vmbus_loglevel))) \
+		(WARNING_LVL <= LOWORD(vmbus_loglevel))?(LogMsg("<%d>" #mod": WARNING! " fmt "\n", WARNING_LVL, ## args)):(0);\
+	} while (0)
+
+#define DPRINT_ERR(mod, fmt, args...) do {\
+	if (mod & (HIWORD(vmbus_loglevel))) \
+		(ERROR_LVL <= LOWORD(vmbus_loglevel))?(LogMsg("<%d>" #mod": %s() ERROR!! " fmt "\n", ERROR_LVL, __FUNCTION__, ## args)):(0);\
+	} while (0)
+
+#ifdef DEBUG
+#define DPRINT_ENTER(mod) do {\
+	if (mod & (HIWORD(vmbus_loglevel))) \
+		(DEBUG_LVL_ENTEREXIT <= LOWORD(vmbus_loglevel))?(LogMsg("<%d>" "["#mod"]: %s() enter\n", DEBUG_LVL, __FUNCTION__)):(0);\
+	} while (0)
+
+#define DPRINT_EXIT(mod) do {\
+	if (mod & (HIWORD(vmbus_loglevel))) \
+		(DEBUG_LVL_ENTEREXIT <= LOWORD(vmbus_loglevel))?(LogMsg("<%d>" "["#mod"]: %s() exit\n", DEBUG_LVL, __FUNCTION__)):(0);\
+	} while (0)
+#else
+#define DPRINT_ENTER(mod)
+#define DPRINT_EXIT(mod)
+#endif
+
+static inline void PrintBytes(const unsigned char* bytes, int len)
+{
+	int i=0;
+
+	LogMsg("\n<< ");
+	for (i=0; i< len; i++)
+	{
+		LogMsg("0x%x ", bytes[i]);
+	}
+	LogMsg(">>\n");
+}
+
+//
+// Inline
+//
+//static inline void GuidToStr(const GUID g, char *str)
+//{
+//	sprintf(str, "{%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x%02x%02x}",
+//	g[3], g[2], g[1], g[0], g[5], g[4], g[7], g[6], g[8], g[9], g[10], g[11], g[12], g[13], g[14], g[15]);
+//
+//}
+
+#endif //_LOGGING_H_
--- /dev/null
+++ b/drivers/staging/hv/include/NetVscApi.h
@@ -0,0 +1,145 @@
+/*
+ *
+ * Copyright (c) 2009, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *
+ */
+
+
+#ifndef _NETVSC_API_H_
+#define _NETVSC_API_H_
+
+#include "VmbusApi.h"
+
+//
+// Defines
+//
+#define NETVSC_DEVICE_RING_BUFFER_SIZE			64*PAGE_SIZE
+
+#define HW_MACADDR_LEN		6
+
+//
+// Fwd declaration
+//
+typedef struct _NETVSC_PACKET	*PNETVSC_PACKET;
+
+
+//
+// Data types
+//
+
+typedef int (*PFN_ON_OPEN)(DEVICE_OBJECT *Device);
+typedef int (*PFN_ON_CLOSE)(DEVICE_OBJECT *Device);
+
+typedef void (*PFN_QUERY_LINKSTATUS)(DEVICE_OBJECT *Device);
+typedef int (*PFN_ON_SEND)(DEVICE_OBJECT *dev, PNETVSC_PACKET packet);
+typedef void (*PFN_ON_SENDRECVCOMPLETION)(PVOID Context);
+
+typedef int (*PFN_ON_RECVCALLBACK)(DEVICE_OBJECT *dev, PNETVSC_PACKET packet);
+typedef void (*PFN_ON_LINKSTATUS_CHANGED)(DEVICE_OBJECT *dev, UINT32 Status);
+
+// Represent the xfer page packet which contains 1 or more netvsc packet
+typedef struct _XFERPAGE_PACKET {
+	DLIST_ENTRY			ListEntry;
+
+	// # of netvsc packets this xfer packet contains
+	UINT32				Count;
+} XFERPAGE_PACKET;
+
+
+// The number of pages which are enough to cover jumbo frame buffer.
+#define NETVSC_PACKET_MAXPAGE  4
+
+// Represent netvsc packet which contains 1 RNDIS and 1 ethernet frame within the RNDIS
+typedef struct _NETVSC_PACKET {
+	// Bookkeeping stuff
+	DLIST_ENTRY				ListEntry;
+
+	DEVICE_OBJECT			*Device;
+	BOOL					IsDataPacket;
+
+	// Valid only for receives when we break a xfer page packet into multiple netvsc packets
+	XFERPAGE_PACKET		*XferPagePacket;
+
+	union {
+		struct{
+			UINT64						ReceiveCompletionTid;
+			PVOID						ReceiveCompletionContext;
+			PFN_ON_SENDRECVCOMPLETION	OnReceiveCompletion;
+		} Recv;
+		struct{
+			UINT64						SendCompletionTid;
+			PVOID						SendCompletionContext;
+			PFN_ON_SENDRECVCOMPLETION	OnSendCompletion;
+		} Send;
+	} Completion;
+
+	// This points to the memory after PageBuffers
+	PVOID					Extension;
+
+	UINT32					TotalDataBufferLength;
+	// Points to the send/receive buffer where the ethernet frame is
+	UINT32					PageBufferCount;
+	PAGE_BUFFER				PageBuffers[NETVSC_PACKET_MAXPAGE];
+
+} NETVSC_PACKET;
+
+
+// Represents the net vsc driver
+typedef struct _NETVSC_DRIVER_OBJECT {
+	DRIVER_OBJECT				Base; // Must be the first field
+
+	UINT32						RingBufferSize;
+	UINT32						RequestExtSize;
+
+	// Additional num  of page buffers to allocate
+	UINT32						AdditionalRequestPageBufferCount;
+
+	// This is set by the caller to allow us to callback when we receive a packet
+	// from the "wire"
+	PFN_ON_RECVCALLBACK			OnReceiveCallback;
+
+	PFN_ON_LINKSTATUS_CHANGED	OnLinkStatusChanged;
+
+	// Specific to this driver
+	PFN_ON_OPEN					OnOpen;
+	PFN_ON_CLOSE				OnClose;
+	PFN_ON_SEND					OnSend;
+	//PFN_ON_RECVCOMPLETION	OnReceiveCompletion;
+
+	//PFN_QUERY_LINKSTATUS		QueryLinkStatus;
+
+	void*						Context;
+} NETVSC_DRIVER_OBJECT;
+
+
+typedef struct _NETVSC_DEVICE_INFO {
+    UCHAR	MacAddr[6];
+    BOOL	LinkState;	// 0 - link up, 1 - link down
+} NETVSC_DEVICE_INFO;
+
+//
+// Interface
+//
+int
+NetVscInitialize(
+	DRIVER_OBJECT* drv
+	);
+
+#endif // _NETVSC_API_H_
--- /dev/null
+++ b/drivers/staging/hv/include/osd.h
@@ -0,0 +1,263 @@
+/*
+ *
+ * Copyright (c) 2009, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *
+ */
+
+
+#ifndef _OSD_H_
+#define _OSD_H_
+
+//
+// Defines
+//
+
+#ifndef PAGE_SIZE
+#define PAGE_SIZE 0x1000
+#endif
+
+#ifndef PAGE_SHIFT
+#define PAGE_SHIFT 12
+#endif
+
+#ifndef memcpy
+#define memcpy		__builtin_memcpy
+#endif
+
+#ifndef memset
+#define memset		__builtin_memset
+#endif
+
+#ifndef memcmp
+#define memcmp		__builtin_memcmp
+#endif
+
+#ifndef strcpy
+#define strcpy		__builtin_strcpy
+#endif
+
+//
+//#ifndef sprintf
+//#define sprintf				__builtin_sprintf
+//#endif
+
+#define STRUCT_PACKED		__attribute__((__packed__))
+#define STRUCT_ALIGNED(x)	__attribute__((__aligned__(x)))
+
+#define UNUSED_VAR(v)		v  __attribute__((__unused__))
+
+#define ALIGN_UP(value, align)			( ((value) & (align-1))? ( ((value) + (align-1)) & ~(align-1) ): (value) )
+#define ALIGN_DOWN(value, align)		( (value) & ~(align-1) )
+#define NUM_PAGES_SPANNED(addr, len)	( (ALIGN_UP(addr+len, PAGE_SIZE) - ALIGN_DOWN(addr, PAGE_SIZE)) >> PAGE_SHIFT )
+
+#define MIN(a, b)       ((a) < (b)? (a): (b))
+#define MAX(a, b)       ((a) > (b)? (a): (b))
+
+#define LOWORD(dw)		((unsigned short) (dw))
+#define HIWORD(dw)		((unsigned short) (((unsigned int) (dw) >> 16) & 0xFFFF))
+
+#define FIELD_OFFSET(t, f)    ((unsigned int)(unsigned long)&(((t *)0)->f))
+
+#ifdef FALSE
+#undef FALSE
+#endif
+#define FALSE 0
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#define TRUE  1
+
+#ifndef NULL
+#define NULL  (void *)0
+#endif
+
+typedef struct _DLIST_ENTRY {
+   struct _DLIST_ENTRY *Flink;
+   struct _DLIST_ENTRY *Blink;
+} DLIST_ENTRY;
+
+//
+// unsigned types
+//
+typedef unsigned char		UINT8;
+typedef unsigned short		UINT16;
+typedef unsigned int		UINT32;
+#ifdef __x86_64__
+typedef unsigned long		UINT64;
+#else
+typedef unsigned long long	UINT64;
+#endif
+
+typedef unsigned long long	ULONGLONG;
+typedef unsigned int		ULONG;
+typedef unsigned short		USHORT;
+typedef unsigned char		UCHAR;
+
+//
+// signed types
+//
+typedef char				INT8;
+typedef short				INT16;
+typedef int					INT32;
+#ifdef __x86_64__
+typedef long				INT64;
+#else
+typedef long long		INT64;
+#endif
+
+typedef int					LONG;
+typedef char				CHAR;
+typedef long long			LONGLONG;
+
+//
+// Other types
+//
+typedef unsigned long		SIZE_T;
+typedef void				VOID;
+//typedef unsigned char		GUID[16];
+typedef void*				PVOID;
+typedef unsigned char		BOOL;
+typedef unsigned char		BOOLEAN;
+typedef void*				HANDLE;
+typedef UINT32				DWORD;
+typedef char*				PCHAR;
+typedef unsigned char		BYTE;
+
+typedef unsigned long		ULONG_PTR;
+
+typedef struct {
+	unsigned char	Data[16];
+} GUID;
+
+typedef void (*PFN_WORKITEM_CALLBACK)(void* context);
+typedef void (*PFN_TIMER_CALLBACK)(void* context);
+
+
+#ifdef __x86_64__
+
+#define RDMSR(reg, v) {                                                        \
+    UINT32 h, l;                                                                 \
+     __asm__ __volatile__("rdmsr"                                                               \
+    : "=a" (l), "=d" (h)                                                       \
+    : "c" (reg));                                                              \
+    v = (((UINT64)h) << 32) | l;                                                         \
+}
+
+#define WRMSR(reg, v) {                                                        \
+    UINT32 h, l;                                                               \
+    l = (UINT32)(((UINT64)(v)) & 0xFFFFFFFF);                                  \
+    h = (UINT32)((((UINT64)(v)) >> 32) & 0xFFFFFFFF);                          \
+     __asm__ __volatile__("wrmsr"                                              \
+    : /* no outputs */                                                         \
+    : "c" (reg), "a" (l), "d" (h));                                            \
+}
+
+#else
+
+#define RDMSR(reg, v) 			                                               \
+     __asm__ __volatile__("rdmsr" 	                                           \
+    : "=A" (v) 			                                                       \
+    : "c" (reg))
+
+#define WRMSR(reg, v) 			                                               \
+     __asm__ __volatile__("wrmsr" 	                                           \
+    : /* no outputs */ 				                                           \
+    : "c" (reg), "A" ((UINT64)v))
+
+#endif
+
+
+static inline void do_cpuid(unsigned int op, unsigned int *eax, unsigned int *ebx, unsigned int *ecx, unsigned int *edx)
+{
+	__asm__ __volatile__("cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "0" (op), "c" (ecx));
+}
+
+//
+// Osd routines
+//
+extern void LogMsg(const char *fmt, ...);
+
+extern void BitSet(unsigned int* addr, int value);
+extern void BitClear(unsigned int* addr, int value);
+extern int BitTest(unsigned int* addr, int value);
+extern int BitTestAndClear(unsigned int* addr, int value);
+extern int BitTestAndSet(unsigned int* addr, int value);
+
+extern int InterlockedIncrement(int *val);
+extern int InterlockedDecrement(int *val);
+extern int InterlockedCompareExchange(int *val, int new, int curr);
+
+extern void Sleep(unsigned long usecs);
+
+extern void* VirtualAllocExec(unsigned int size);
+extern void VirtualFree(void* VirtAddr);
+
+extern void* PageAlloc(unsigned int count);
+extern void PageFree(void* page, unsigned int count);
+
+extern void* MemMapIO(unsigned long phys, unsigned long size);
+extern void MemUnmapIO(void* virt);
+
+extern void* MemAlloc(unsigned int size);
+extern void* MemAllocZeroed(unsigned int size);
+extern void* MemAllocAtomic(unsigned int size);
+extern void MemFree(void* buf);
+extern void MemoryFence(VOID);
+
+extern HANDLE TimerCreate(PFN_TIMER_CALLBACK pfnTimerCB, void* context);
+extern void TimerClose(HANDLE hTimer);
+extern int TimerStop(HANDLE hTimer);
+extern void TimerStart(HANDLE hTimer, UINT32 expirationInUs);
+extern SIZE_T GetTickCount(void);
+
+extern HANDLE WaitEventCreate(void);
+extern void WaitEventClose(HANDLE hWait);
+extern void WaitEventSet(HANDLE hWait);
+extern int	WaitEventWait(HANDLE hWait);
+
+// If >0, hWait got signaled. If ==0, timeout. If < 0, error
+extern int	WaitEventWaitEx(HANDLE hWait, UINT32 TimeoutInMs);
+
+extern HANDLE SpinlockCreate(void);
+extern void SpinlockClose(HANDLE hSpin);
+extern void SpinlockAcquire(HANDLE hSpin);
+extern void	SpinlockRelease(HANDLE hSpin);
+
+
+#define GetVirtualAddress Physical2LogicalAddr
+void* Physical2LogicalAddr(ULONG_PTR PhysAddr);
+
+#define GetPhysicalAddress Logical2PhysicalAddr
+ULONG_PTR Logical2PhysicalAddr(PVOID LogicalAddr);
+
+ULONG_PTR Virtual2Physical(PVOID VirtAddr);
+
+void* PageMapVirtualAddress(unsigned long Pfn);
+void PageUnmapVirtualAddress(void* VirtAddr);
+
+
+extern HANDLE WorkQueueCreate(char* name);
+extern void WorkQueueClose(HANDLE hWorkQueue);
+extern int WorkQueueQueueWorkItem(HANDLE hWorkQueue, PFN_WORKITEM_CALLBACK workItem, void* context);
+
+extern void QueueWorkItem(PFN_WORKITEM_CALLBACK workItem, void* context);
+
+#endif // _OSD_H_
--- /dev/null
+++ b/drivers/staging/hv/include/StorVscApi.h
@@ -0,0 +1,137 @@
+/*
+ *
+ * Copyright (c) 2009, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *
+ */
+
+
+#ifndef _STORVSC_API_H_
+#define _STORVSC_API_H_
+
+#include "VmbusApi.h"
+
+//
+// Defines
+//
+
+#define STORVSC_RING_BUFFER_SIZE			10*PAGE_SIZE
+#define BLKVSC_RING_BUFFER_SIZE				20*PAGE_SIZE
+
+#define STORVSC_MAX_IO_REQUESTS				64
+
+// In Hyper-V, each port/path/target maps to 1 scsi host adapter.
+// In reality, the path/target is not used (ie always set to 0) so
+// our scsi host adapter essentially has 1 bus with 1 target that contains
+// up to 256 luns.
+
+#define STORVSC_MAX_LUNS_PER_TARGET			64
+#define STORVSC_MAX_TARGETS					1
+#define STORVSC_MAX_CHANNELS				1
+
+
+// Fwd decl
+//
+//struct VMBUS_CHANNEL;
+typedef struct _STORVSC_REQUEST* PSTORVSC_REQUEST;
+
+//
+// Data types
+//
+typedef int (*PFN_ON_IO_REQUEST)(PDEVICE_OBJECT Device, PSTORVSC_REQUEST Request);
+typedef void (*PFN_ON_IO_REQUEST_COMPLTN)(PSTORVSC_REQUEST Request);
+
+typedef int (*PFN_ON_HOST_RESET)(PDEVICE_OBJECT Device);
+typedef void (*PFN_ON_HOST_RESCAN)(PDEVICE_OBJECT Device);
+
+
+// Matches Windows-end
+typedef enum _STORVSC_REQUEST_TYPE{
+	WRITE_TYPE,
+	READ_TYPE,
+	UNKNOWN_TYPE,
+} STORVSC_REQUEST_TYPE;
+
+
+typedef struct _STORVSC_REQUEST {
+	STORVSC_REQUEST_TYPE		Type;
+	UINT32					Host;
+	UINT32					Bus;
+	UINT32					TargetId;
+	UINT32					LunId;
+	UINT8*					Cdb;
+	UINT32					CdbLen;
+	UINT32					Status;
+	UINT32					BytesXfer;
+
+	UCHAR*					SenseBuffer;
+	UINT32					SenseBufferSize;
+
+	PVOID					Context;
+
+	PFN_ON_IO_REQUEST_COMPLTN	OnIOCompletion;
+
+	// This points to the memory after DataBuffer
+	PVOID					Extension;
+
+	MULTIPAGE_BUFFER		DataBuffer;
+} STORVSC_REQUEST;
+
+
+// Represents the block vsc driver
+typedef struct _STORVSC_DRIVER_OBJECT {
+	DRIVER_OBJECT			Base; // Must be the first field
+
+	// Set by caller (in bytes)
+	UINT32					RingBufferSize;
+
+	// Allocate this much private extension for each I/O request
+	UINT32					RequestExtSize;
+
+	// Maximum # of requests in flight per channel/device
+	UINT32					MaxOutstandingRequestsPerChannel;
+
+	// Set by the caller to allow us to re-enumerate the bus on the host
+	PFN_ON_HOST_RESCAN		OnHostRescan;
+
+	// Specific to this driver
+	PFN_ON_IO_REQUEST		OnIORequest;
+	PFN_ON_HOST_RESET		OnHostReset;
+
+} STORVSC_DRIVER_OBJECT;
+
+typedef struct _STORVSC_DEVICE_INFO {
+	ULONG	PortNumber;
+    UCHAR	PathId;
+    UCHAR	TargetId;
+} STORVSC_DEVICE_INFO;
+
+//
+// Interface
+//
+int
+StorVscInitialize(
+	DRIVER_OBJECT	*Driver
+	);
+
+int
+BlkVscInitialize(
+	DRIVER_OBJECT	*Driver
+	);
+#endif // _STORVSC_API_H_
--- /dev/null
+++ b/drivers/staging/hv/include/VmbusApi.h
@@ -0,0 +1,262 @@
+/*
+ *
+ * Copyright (c) 2009, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *
+ */
+
+
+#ifndef _VMBUS_API_H_
+#define _VMBUS_API_H_
+
+#include "osd.h"
+
+//
+// Defines
+//
+
+#define MAX_PAGE_BUFFER_COUNT				16
+#define MAX_MULTIPAGE_BUFFER_COUNT			32 // 128K
+
+
+//
+// Fwd declarations
+//
+typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
+typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
+
+//
+// Data types
+//
+
+#pragma pack(push,1)
+
+// Single-page buffer
+typedef struct _PAGE_BUFFER {
+	UINT32	Length;
+	UINT32	Offset;
+	UINT64	Pfn;
+} PAGE_BUFFER;
+
+// Multiple-page buffer
+typedef struct _MULTIPAGE_BUFFER {
+	// Length and Offset determines the # of pfns in the array
+	UINT32	Length;
+	UINT32	Offset;
+	UINT64	PfnArray[MAX_MULTIPAGE_BUFFER_COUNT];
+}MULTIPAGE_BUFFER;
+
+//0x18 includes the proprietary packet header
+#define MAX_PAGE_BUFFER_PACKET			(0x18 + (sizeof(PAGE_BUFFER) * MAX_PAGE_BUFFER_COUNT))
+#define MAX_MULTIPAGE_BUFFER_PACKET		(0x18 + sizeof(MULTIPAGE_BUFFER))
+
+
+#pragma pack(pop)
+
+// All drivers
+typedef int (*PFN_ON_DEVICEADD)(PDEVICE_OBJECT Device, void* AdditionalInfo);
+typedef int (*PFN_ON_DEVICEREMOVE)(PDEVICE_OBJECT Device);
+typedef char** (*PFN_ON_GETDEVICEIDS)(void);
+typedef void (*PFN_ON_CLEANUP)(PDRIVER_OBJECT Driver);
+
+// Vmbus extensions
+//typedef int (*PFN_ON_MATCH)(PDEVICE_OBJECT dev, PDRIVER_OBJECT drv);
+//typedef int (*PFN_ON_PROBE)(PDEVICE_OBJECT dev);
+typedef int	(*PFN_ON_ISR)(PDRIVER_OBJECT drv);
+typedef void (*PFN_ON_DPC)(PDRIVER_OBJECT drv);
+typedef void (*PFN_GET_CHANNEL_OFFERS)(void);
+
+typedef PDEVICE_OBJECT (*PFN_ON_CHILDDEVICE_CREATE)(GUID DeviceType, GUID DeviceInstance, void *Context);
+typedef void (*PFN_ON_CHILDDEVICE_DESTROY)(PDEVICE_OBJECT Device);
+typedef int (*PFN_ON_CHILDDEVICE_ADD)(PDEVICE_OBJECT RootDevice, PDEVICE_OBJECT ChildDevice);
+typedef void (*PFN_ON_CHILDDEVICE_REMOVE)(PDEVICE_OBJECT Device);
+
+// Vmbus channel interface
+typedef void (*VMBUS_CHANNEL_CALLBACK)(PVOID context);
+
+typedef int	(*VMBUS_CHANNEL_OPEN)(
+	PDEVICE_OBJECT		Device,
+	UINT32				SendBufferSize,
+	UINT32				RecvRingBufferSize,
+	PVOID				UserData,
+	UINT32				UserDataLen,
+	VMBUS_CHANNEL_CALLBACK ChannelCallback,
+	PVOID				Context
+	);
+
+typedef void (*VMBUS_CHANNEL_CLOSE)(
+	PDEVICE_OBJECT		Device
+	);
+
+typedef int	(*VMBUS_CHANNEL_SEND_PACKET)(
+	PDEVICE_OBJECT		Device,
+	const PVOID			Buffer,
+	UINT32				BufferLen,
+	UINT64				RequestId,
+	UINT32				Type,
+	UINT32				Flags
+);
+
+typedef int	(*VMBUS_CHANNEL_SEND_PACKET_PAGEBUFFER)(
+	PDEVICE_OBJECT		Device,
+	PAGE_BUFFER			PageBuffers[],
+	UINT32				PageCount,
+	PVOID				Buffer,
+	UINT32				BufferLen,
+	UINT64				RequestId
+	);
+
+typedef int	(*VMBUS_CHANNEL_SEND_PACKET_MULTIPAGEBUFFER)(
+	PDEVICE_OBJECT		Device,
+	MULTIPAGE_BUFFER	*MultiPageBuffer,
+	PVOID				Buffer,
+	UINT32				BufferLen,
+	UINT64				RequestId
+);
+
+typedef int	(*VMBUS_CHANNEL_RECV_PACKET)(
+	PDEVICE_OBJECT		Device,
+	PVOID				Buffer,
+	UINT32				BufferLen,
+	UINT32*				BufferActualLen,
+	UINT64*				RequestId
+	);
+
+typedef int	(*VMBUS_CHANNEL_RECV_PACKET_PAW)(
+	PDEVICE_OBJECT		Device,
+	PVOID				Buffer,
+	UINT32				BufferLen,
+	UINT32*				BufferActualLen,
+	UINT64*				RequestId
+	);
+
+typedef int	(*VMBUS_CHANNEL_ESTABLISH_GPADL)(
+	PDEVICE_OBJECT		Device,
+	PVOID				Buffer,	// from kmalloc()
+	UINT32				BufferLen,		// page-size multiple
+	UINT32*				GpadlHandle
+	);
+
+typedef int	(*VMBUS_CHANNEL_TEARDOWN_GPADL)(
+	PDEVICE_OBJECT		Device,
+	UINT32				GpadlHandle
+	);
+
+
+typedef struct _PORT_INFO {
+	UINT32		InterruptMask;
+	UINT32		ReadIndex;
+	UINT32		WriteIndex;
+	UINT32		BytesAvailToRead;
+	UINT32		BytesAvailToWrite;
+} PORT_INFO;
+
+
+typedef struct _DEVICE_INFO {
+	UINT32		ChannelId;
+	UINT32		ChannelState;
+	GUID		ChannelType;
+	GUID		ChannelInstance;
+
+	UINT32						MonitorId;
+	UINT32						ServerMonitorPending;
+	UINT32						ServerMonitorLatency;
+	UINT32						ServerMonitorConnectionId;
+	UINT32						ClientMonitorPending;
+	UINT32						ClientMonitorLatency;
+	UINT32						ClientMonitorConnectionId;
+
+	PORT_INFO	Inbound;
+	PORT_INFO	Outbound;
+} DEVICE_INFO;
+
+typedef void (*VMBUS_GET_CHANNEL_INFO)(PDEVICE_OBJECT Device, DEVICE_INFO* DeviceInfo);
+
+typedef struct _VMBUS_CHANNEL_INTERFACE {
+	VMBUS_CHANNEL_OPEN							Open;
+	VMBUS_CHANNEL_CLOSE							Close;
+	VMBUS_CHANNEL_SEND_PACKET					SendPacket;
+	VMBUS_CHANNEL_SEND_PACKET_PAGEBUFFER		SendPacketPageBuffer;
+	VMBUS_CHANNEL_SEND_PACKET_MULTIPAGEBUFFER	SendPacketMultiPageBuffer;
+	VMBUS_CHANNEL_RECV_PACKET					RecvPacket;
+	VMBUS_CHANNEL_RECV_PACKET_PAW				RecvPacketRaw;
+	VMBUS_CHANNEL_ESTABLISH_GPADL				EstablishGpadl;
+	VMBUS_CHANNEL_TEARDOWN_GPADL				TeardownGpadl;
+	VMBUS_GET_CHANNEL_INFO						GetInfo;
+} VMBUS_CHANNEL_INTERFACE;
+
+typedef void (*VMBUS_GET_CHANNEL_INTERFACE)(VMBUS_CHANNEL_INTERFACE *Interface);
+
+// Base driver object
+typedef struct _DRIVER_OBJECT {
+	const char*				name;
+	GUID					deviceType; // the device type supported by this driver
+
+	PFN_ON_DEVICEADD		OnDeviceAdd;
+	PFN_ON_DEVICEREMOVE		OnDeviceRemove;
+	PFN_ON_GETDEVICEIDS		OnGetDeviceIds; // device ids supported by this driver
+	PFN_ON_CLEANUP			OnCleanup;
+
+	VMBUS_CHANNEL_INTERFACE VmbusChannelInterface;
+} DRIVER_OBJECT;
+
+
+// Base device object
+typedef struct _DEVICE_OBJECT {
+	DRIVER_OBJECT*		Driver;		// the driver for this device
+	char				name[64];
+	GUID				deviceType; // the device type id of this device
+	GUID				deviceInstance; // the device instance id of this device
+	void*				context;
+	void*				Extension;		// Device extension;
+} DEVICE_OBJECT;
+
+
+// Vmbus driver object
+typedef struct _VMBUS_DRIVER_OBJECT {
+	DRIVER_OBJECT		Base; // !! Must be the 1st field !!
+
+	// Set by the caller
+	PFN_ON_CHILDDEVICE_CREATE	OnChildDeviceCreate;
+	PFN_ON_CHILDDEVICE_DESTROY	OnChildDeviceDestroy;
+	PFN_ON_CHILDDEVICE_ADD		OnChildDeviceAdd;
+	PFN_ON_CHILDDEVICE_REMOVE	OnChildDeviceRemove;
+
+	// Set by the callee
+	//PFN_ON_MATCH		OnMatch;
+	//PFN_ON_PROBE		OnProbe;
+	PFN_ON_ISR				OnIsr;
+	PFN_ON_DPC				OnMsgDpc;
+	PFN_ON_DPC				OnEventDpc;
+	PFN_GET_CHANNEL_OFFERS	GetChannelOffers;
+
+	VMBUS_GET_CHANNEL_INTERFACE GetChannelInterface;
+	VMBUS_GET_CHANNEL_INFO		GetChannelInfo;
+} VMBUS_DRIVER_OBJECT;
+
+
+//
+// Interface
+//
+int
+VmbusInitialize(
+	DRIVER_OBJECT* drv
+	);
+
+#endif // _VMBUS_API_H_
--- /dev/null
+++ b/drivers/staging/hv/include/vmbus.h
@@ -0,0 +1,111 @@
+/*
+ *
+ * Copyright (c) 2009, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ *   Haiyang Zhang <haiyangz@microsoft.com>
+ *   Hank Janssen  <hjanssen@microsoft.com>
+ *
+ */
+
+
+#ifndef _VMBUS_H_
+#define _VMBUS_H_
+
+#include <linux/device.h>
+
+#include "VmbusApi.h"
+
+//
+// Data types
+//
+
+typedef int (*PFN_DRIVERINITIALIZE)(DRIVER_OBJECT *drv);
+typedef int (*PFN_DRIVEREXIT)(DRIVER_OBJECT *drv);
+
+struct driver_context {
+	GUID					class_id;
+
+	struct device_driver	driver;
+
+	// Use these methods instead of the struct device_driver so 2.6 kernel stops complaining
+	int (*probe)(struct device *);
+	int (*remove)(struct device *);
+	void (*shutdown)(struct device *);
+};
+
+struct device_context {
+	struct work_struct              probe_failed_work_item;
+	GUID					class_id;
+	GUID					device_id;
+	int						probe_error;
+	struct device			device;
+	DEVICE_OBJECT			device_obj;
+};
+
+
+//
+// Global
+//
+
+//
+// Inlines
+//
+static inline struct device_context *to_device_context(DEVICE_OBJECT *device_obj)
+{
+	return container_of(device_obj, struct device_context, device_obj);
+}
+
+static inline struct device_context *device_to_device_context(struct device *device)
+{
+	return container_of(device, struct device_context, device);
+}
+
+static inline struct driver_context *driver_to_driver_context(struct device_driver *driver)
+{
+	return container_of(driver, struct driver_context, driver);
+}
+
+#if defined(KERNEL_2_6_5)
+static inline void* kzalloc(int size, int flags)
+{
+	void *p;
+	p = kmalloc(size, flags);
+	if (p) memset(p, 0, size);
+
+	return p;
+}
+#endif // KERNEL_2_6_5
+
+//
+// Vmbus interface
+//
+void
+vmbus_child_driver_register(
+	struct driver_context* driver_ctx
+	);
+
+void
+vmbus_child_driver_unregister(
+	struct driver_context *driver_ctx
+	);
+
+void
+vmbus_get_interface(
+	VMBUS_CHANNEL_INTERFACE *interface
+	);
+
+#endif // _VMBUS_H_

  parent reply	other threads:[~2009-07-17 18:08 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20090717180850.873962925@mini.kroah.org>
2009-07-20 16:00 ` [patch 00/54] [Announce] Microsoft Hyper-V drivers for Linux Greg Kroah-Hartman
2009-07-20 16:00   ` Greg Kroah-Hartman
2009-07-17 18:08   ` [patch 01/54] Staging: hv: add the Hyper-V api header files Greg Kroah-Hartman
2009-07-17 18:08   ` Greg Kroah-Hartman [this message]
2009-07-17 18:08   ` [patch 03/54] Staging: hv: add the Hyper-V virtual bus Greg Kroah-Hartman
2009-07-17 18:08   ` [patch 04/54] Staging: hv: add the Hyper-V virtual block driver Greg Kroah-Hartman
2009-07-17 18:08   ` [patch 05/54] Staging: hv: add the Hyper-V virtual network driver Greg Kroah-Hartman
2009-07-17 18:08   ` [patch 06/54] Staging: hv: add the Hyper-V virtual storage driver Greg Kroah-Hartman
2009-07-17 18:08   ` [patch 07/54] Staging: hv: add a TODO file Greg Kroah-Hartman
2009-07-17 18:08   ` [patch 08/54] Staging: hv: make the Hyper-V virtual bus code build Greg Kroah-Hartman
2009-07-17 18:08   ` [patch 09/54] Staging: hv: use the correct #ifdef for x86-64 Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 10/54] Staging: hv: add the Hyper-V virtual bus to the build Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 11/54] Staging: hv: make the Hyper-V virtual storage driver build Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 12/54] Staging: hv: add the Hyper-V virtual scsi driver to the build Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 13/54] Staging: hv: make the Hyper-V virtual block driver build Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 14/54] Staging: hv: add the Hyper-V virtual block driver to the build Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 15/54] Staging: hv: make the Hyper-V virtual network driver build Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 16/54] Staging: hv: add the Hyper-V virtual network driver to the build Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 17/54] Staging: hv: remove INTERNAL typedef Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 18/54] Staging: hv: remove PVOID typedef Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 19/54] Staging: hv: remove VOID typedef Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 20/54] Staging: hv: remove UINT8 and INT8 typedefs Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 21/54] Staging: hv: remove UINT16 and INT16 typedefs Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 22/54] Staging: hv: remove UINT32 and INT32 typedefs Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 23/54] Staging: hv: remove UINT64 and INT64 and UCHAR typedefs Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 24/54] Staging: hv: remove USHORT typedef Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 25/54] Staging: hv: remove ULONGLONG and LONGLONG typedefs Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 26/54] Staging: hv: remove ULONG_PTR typedef Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 27/54] Staging: hv: remove ULONG and LONG typedefs Greg Kroah-Hartman
2009-07-21  0:00     ` Arnd Bergmann
2009-07-21  0:44       ` Hank Janssen
2009-07-21  0:44         ` Hank Janssen
2009-07-21  2:38       ` Greg KH
2009-07-21  2:45         ` Greg KH
2009-07-21  8:26       ` Bernd Petrovitsch
2009-07-17 18:09   ` [patch 28/54] Staging: hv: remove SIZE_T typedef Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 29/54] Staging: hv: remove DWORD and BYTE typedefs Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 30/54] Staging: hv: remove BOOL and BOOLEAN typedefs Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 31/54] Staging: hv: remove #defines from osd.c Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 32/54] Staging: hv: remove MIN and MAX usages Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 33/54] Staging: hv: remove PAGE_SIZE and PAGE_SHIFT and __builtin functions Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 34/54] Staging: hv: remove STRUCT_PACKED and STRUCT_ALIGNED defines Greg Kroah-Hartman
2009-07-20 23:46     ` Arnd Bergmann
2009-07-24 21:32       ` Jörn Engel
2009-07-24 21:50         ` Stephen Hemminger
2009-07-24 23:06           ` Jörn Engel
2009-07-17 18:09   ` [patch 35/54] Staging: hv: remove UNUSED_VAR usage Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 36/54] Staging: hv: remove FIELD_OFFSET usage Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 37/54] Staging: hv: remove TRUE, FALSE, and NULL usage Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 38/54] Staging: hv: osd: remove MemAlloc wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 39/54] Staging: hv: osd: remove MemAllocZeroed wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 40/54] Staging: hv: osd: remove MemAllocAtomic wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 41/54] Staging: hv: osd: remove MemFree wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 42/54] Staging: hv: make Channel->InboundLock a real spinlock Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 43/54] Staging: hv: make RingInfo->RingLock " Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 44/54] Staging: hv: make Device->RequestLock " Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 45/54] Staging: hv: make netDevice->ReceivePacketListLock " Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 46/54] Staging: hv: make gVmbusConnection.ChannelMsgLock " Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 47/54] Staging: hv: make gVmbusConnection.ChannelLock " Greg Kroah-Hartman
2009-07-20 23:39     ` Arnd Bergmann
2009-07-21  2:11       ` Greg KH
2009-07-17 18:09   ` [patch 48/54] Staging: hv: osd: remove spinlock wrapper functions Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 49/54] Staging: hv: osd: remove Sleep wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 50/54] Staging: hv: osd: remove MemoryFence wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 51/54] Staging: hv: osd: remove LogMsg wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 52/54] Staging: hv: osd: remove PrintBytes wrapper Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 53/54] Staging: hv: fix up printk warnings Greg Kroah-Hartman
2009-07-17 18:09   ` [patch 54/54] Staging: hv: osd: remove GetTickCount and GetTimestamp wrappers Greg Kroah-Hartman
2009-07-20 16:28   ` [patch 00/54] [Announce] Microsoft Hyper-V drivers for Linux Greg KH
2009-07-20 16:28     ` Greg KH
2009-07-20 16:59     ` Dave Jones
2009-07-20 17:03       ` Greg KH
2009-07-20 17:03         ` Greg KH
2009-07-20 17:22         ` Dave Jones
2009-07-20 19:37         ` Andi Kleen
2009-07-20 19:57           ` Greg KH
2009-07-20 19:57             ` Greg KH
2009-07-21 12:07             ` Arnd Bergmann
2009-07-21 13:38               ` Belisko Marek
2009-07-21 16:51               ` Greg KH
2009-07-20 17:09       ` Matthias Urlichs
2009-07-20 17:09         ` Matthias Urlichs
2009-07-20 17:15         ` Dave Jones
2009-07-20 17:36           ` Greg KH
2009-07-20 17:36             ` Greg KH
2009-07-20 21:24   ` Jan Engelhardt
2009-07-20 21:24     ` Jan Engelhardt
2009-07-20 21:33     ` Greg KH
2009-07-20 21:33       ` Greg KH
2009-07-21 11:06   ` Balbir Singh
2009-07-21 11:06     ` Balbir Singh
2009-07-21 16:51     ` Greg KH
2009-07-21 16:51       ` Greg KH
2009-07-21 18:00     ` Hank Janssen
2009-07-21 18:00       ` Hank Janssen
2009-07-21 18:22       ` Balbir Singh
2009-07-21 18:22         ` Balbir Singh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090717180916.148235010@mini.kroah.org \
    --to=gregkh@suse.de \
    --cc=devel@driverdev.osuosl.org \
    --cc=haiyangz@microsoft.com \
    --cc=hjanssen@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=shemminger@linux-foundation.org \
    --cc=sramji@microsoft.com \
    --cc=virtualization@lists.osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.