Jungo WinDriver  
Official Documentation
windrvr.h
Go to the documentation of this file.
1/* @JUNGO_COPYRIGHT@ */
2
3/*
4 * W i n D r i v e r
5 * =================
6 *
7 * FOR DETAILS ON THE WinDriver FUNCTIONS, PLEASE SEE THE WinDriver MANUAL
8 * OR INCLUDED HELP FILES.
9 *
10 * This file may not be distributed, it may only be used for development
11 * or evaluation purposes. The only exception is distribution to Linux.
12 * For details refer to \WinDriver\docs\license.txt.
13 *
14 * Web site: https://www.jungo.com
15 * Email: [email protected]
16 */
17#ifndef _WINDRVR_H_
18#define _WINDRVR_H_
19
20#if defined(__cplusplus)
21 extern "C" {
22#endif
23
24#include "wd_ver.h"
25
26#if defined(WIN32) && !defined(__MINGW32__)
27 #define DLLCALLCONV __stdcall
28 #if !defined(_SAL_VERSION)
29 #include <sal.h>
30 #endif
31#else
32 #define DLLCALLCONV
33
34 /* the following macros are part of SAL annotations macros in Windows and
35 are used in prototype of API functions, therefore, must be defined in
36 Unix as well */
37 #define _In_
38 #define _Inout_
39 #define _Out_
40 #define _Outptr_
41#endif
42
43#if defined(WIN32)
44 #define WD_DRIVER_NAME_PREFIX "\\\\.\\"
45#elif defined(LINUX)
46 #define WD_DRIVER_NAME_PREFIX "/dev/"
47#else
48 #define WD_DRIVER_NAME_PREFIX ""
49#endif
50
51#if !defined(WIN32)
52 #define __FUNCTION__ __func__
53#endif
54
55#define WD_DEFAULT_DRIVER_NAME_BASE "windrvr" WD_VER_ITOA
56#define WD_DEFAULT_DRIVER_NAME \
57 WD_DRIVER_NAME_PREFIX WD_DEFAULT_DRIVER_NAME_BASE
58
59#define WD_MAX_DRIVER_NAME_LENGTH 128
60#define WD_MAX_KP_NAME_LENGTH 128
61#define WD_VERSION_STR_LENGTH 128
62
63#if defined(WD_DRIVER_NAME_CHANGE)
103 const char* DLLCALLCONV WD_DriverName(const char *sName);
105 #define WD_DRIVER_NAME WD_DriverName(NULL)
106#else
107 #define WD_DRIVER_NAME WD_DEFAULT_DRIVER_NAME
108#endif
109
110#if defined (LOCAL_DEMO)
111#define WD_PROD_NAME "WinDriver (Local Demo)"
112#else
113#define WD_PROD_NAME "WinDriver"
114#endif
115
116#if defined(x86_64)
117#define KERNEL_64BIT
118#elif defined(ARM64)
119#define KERNEL_64BIT
120#elif defined(ARM)
121#elif defined(x86)
122#else
123#error No platform is defined. Please define either x86, x86_64, ARM or ARM64.
124#endif
125#if (defined(x86_64) && defined (ARM64)) || \
126 (defined(x86_64) && defined (ARM)) || \
127 (defined(x86_64) && defined (x86)) || \
128 (defined(ARM64) && defined (x86)) || \
129 (defined(ARM64) && defined (ARM)) || \
130 (defined(x86) && defined(ARM))
131#error Cannot have more than one platform defined in a WinDriver compilation.
132#endif
133
134
135#if defined(x86_64)
136 #define WD_CPU_SPEC " x86_64"
137#elif defined(ARM)
138 #define WD_CPU_SPEC " ARM"
139#elif defined(ARM64)
140 #define WD_CPU_SPEC " ARM64"
141#else
142 #define WD_CPU_SPEC " X86"
143#endif
144
145#if defined(WINNT)
146 #define WD_FILE_FORMAT " sys"
147#elif defined (APPLE)
148 #define WD_FILE_FORMAT " kext"
149#elif defined (LINUX)
150 #define WD_FILE_FORMAT " ko"
151#endif
152
153#if defined(KERNEL_64BIT)
154 #define WD_DATA_MODEL " 64bit"
155#else
156 #define WD_DATA_MODEL " 32bit"
157#endif
158
159#if defined(__KERNEL__) && defined(WINNT)
160 #if (NTDDI_VERSION >= NTDDI_WIN10_VB)
161 #define WD_VER_STR_SUFFIX ""
162 #else
163 #define WD_VER_STR_SUFFIX " for Windows 10 (Build 18632 and Lower)"
164 #endif
165#else
166 #define WD_VER_STR_SUFFIX ""
167#endif
168
169#define WD_VER_STR WD_PROD_NAME " v" WD_VERSION_STR \
170 " Jungo Connectivity (c) 1997 - " COPYRIGHTS_YEAR_STR \
171 " Build Date: " __DATE__ \
172 WD_CPU_SPEC WD_DATA_MODEL WD_FILE_FORMAT WD_VER_STR_SUFFIX
173
174#if !defined(POSIX) && defined(LINUX)
175 #define POSIX
176#endif
177
178#if !defined(UNIX) && defined(POSIX)
179 #define UNIX
180#endif
181
182#if !defined(WIN32) && defined(WINNT)
183 #define WIN32
184#endif
185
186#if !defined(WIN32) && !defined(UNIX) && !defined(APPLE)
187 #define WIN32
188#endif
189
190#if defined(_KERNEL_MODE) && !defined(KERNEL)
191 #define KERNEL
192#endif
193
194#if defined(KERNEL) && !defined(__KERNEL__)
195 #define __KERNEL__
196#endif
197
198#if defined(_KERNEL) && !defined(__KERNEL__)
199 #define __KERNEL__
200#endif
201
202#if defined( __KERNEL__) && !defined(_KERNEL)
203 #define _KERNEL
204#endif
205
206#if defined(LINUX) && defined(__x86_64__) && !defined(__KERNEL__)
207 /* This fixes binary compatibility with older version of GLIBC
208 * (64bit only) */
209 __asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
210#endif
211
212#if defined(UNIX)
213
214
215 #if !defined(__P_TYPES__)
216 #define __P_TYPES__
217 #include <wd_types.h>
218
219 typedef void VOID;
220 typedef unsigned char UCHAR;
221 typedef unsigned short USHORT;
222 typedef unsigned int UINT;
223 #if !defined (APPLE_USB)
224 typedef unsigned long ULONG;
225 #endif
226 typedef u32 BOOL;
227 typedef void *PVOID;
228 typedef unsigned char *PBYTE;
229 typedef char CHAR;
230 typedef char *PCHAR;
231 typedef unsigned short *PWORD;
232 typedef u32 DWORD, *PDWORD;
233 typedef PVOID HANDLE;
234 #endif
235 #if !defined(__KERNEL__)
236 #include <string.h>
237 #include <ctype.h>
238 #include <stdlib.h>
239 #endif
240 #ifndef TRUE
241 #define TRUE 1
242 #endif
243 #ifndef FALSE
244 #define FALSE 0
245 #endif
246 #define __cdecl
247 #define WINAPI
248
249 #if defined(__KERNEL__)
250 #if defined(LINUX)
251 /* For _IO macros and for mapping Linux status codes
252 * to WD status codes */
253 #include <asm-generic/ioctl.h>
254 #include <asm-generic/errno.h>
255 #endif
256 #else
257 #include <unistd.h>
258 #if defined(LINUX)
259 #include <sys/ioctl.h> /* for BSD ioctl() */
260 #include <sys/mman.h>
261 #endif
262 #include <sys/types.h>
263 #include <sys/stat.h>
264 #include <fcntl.h>
265 #endif
266 typedef unsigned long long UINT64;
267 #if defined(APPLE)
268 #include <libkern/OSTypes.h>
269 #include <libkern/OSAtomic.h>
270 typedef UInt16 UINT16;
271 typedef UInt8 UINT8;
272 typedef UInt8 u8;
273 typedef UInt16 u16;
274 typedef UInt32 u32;
275 #include <IOKit/IOTypes.h>
276 #if defined(__KERNEL__)
277 typedef struct OSObject* FILEHANDLE;
278 typedef UInt32 PRCHANDLE;
279 #else
280 #include <IOKit/IOKitLib.h>
281 #endif
282 enum {
283 kWinDriverMethodSyncIoctl = 0,
284 kWinDriverNumOfMethods,
285 };
286 #if !defined(__KERNEL__)
287 #include <string.h>
288 #include <ctype.h>
289 #endif
290 #ifndef TRUE
291 #define TRUE true
292 #endif
293 #ifndef FALSE
294 #define FALSE false
295 #endif
296 #define __cdecl
297 #define WINAPI
298 #ifdef __LP64__
299 #define PTR2INT(value) ((UInt64)(value))
300 #else
301 #define PTR2INT(value) ((UInt32)(value))
302 #endif
303 #define MAC_UC_MAGIC_MASK 0xFF0000FF
304 #define MAC_UC_MAGIC_NUM 0x7E000041
305 #define MAC_UC_64BIT_APP 0x100
306#endif
307
308#elif defined(WIN32)
309 #if defined(__KERNEL__)
310 #if !defined (CMAKE_WD_BUILD)
311 int sprintf(char *buffer, const char *format, ...);
312 #endif
313 #else
314 #include <windows.h>
315 #include <winioctl.h>
316 #endif
317 #define stricmp _stricmp
318 typedef unsigned __int64 UINT64;
319#endif
320
321#if !defined(__KERNEL__)
322 #include <stdarg.h>
323 #if !defined(va_copy) && !defined(__va_copy)
324 #define va_copy(ap2,ap1) (ap2)=(ap1)
325 #endif
326 #if !defined(va_copy) && defined(__va_copy)
327 #define va_copy __va_copy
328 #endif
329#endif
330
331#ifndef WINAPI
332 #define WINAPI
333#endif
334
335#if !defined(_WINDEF_)
336 typedef unsigned char BYTE;
337 typedef unsigned short int WORD;
338#endif
339
340#if !defined(_BASETSD_H_)
341 typedef unsigned int UINT32;
342#endif
343
344#ifndef __KERNEL__
345/* Include inttypes.h for portable printf format specifiers
346 * (PRId64, PRIx32, etc.). It does not define a macro named PRI64 */
347#include <inttypes.h>
348#endif
349
351#if defined(UNIX)
352 #define PRI64 "ll"
353#elif defined(WIN32)
354 #define PRI64 "I64"
355#endif
356
358#if defined(KERNEL_64BIT)
359 #define KPRI PRI64
360 #if defined(WIN32)
361 #if defined(i386)
362 #define UPRI "z"
363 #else
364 #define UPRI KPRI
365 #endif
366 #else
367 #define UPRI "l"
368 #endif
369#else
370 #define KPRI ""
371 #define UPRI "l"
372#endif
373
374/*
375 * The KPTR is guaranteed to be the same size as a kernel-mode pointer
376 * The UPTR is guaranteed to be the same size as a user-mode pointer
377 */
378#if defined(KERNEL_64BIT)
379 typedef UINT64 KPTR;
380#else
381 typedef UINT32 KPTR;
382#endif
383
384#if defined(UNIX)
385 typedef unsigned long UPTR;
386#else
387 typedef size_t UPTR;
388#endif
389
392
393#include "windrvr_usb.h"
394
397typedef enum
398{
403 RP_BYTE = 10,
404 RP_WORD = 11,
405 RP_DWORD = 12,
406 WP_BYTE = 13,
407 WP_WORD = 14,
408 WP_DWORD = 15,
409 RP_QWORD = 16,
410 WP_QWORD = 17,
412 RP_SBYTE = 20,
413 RP_SWORD = 21,
415 WP_SBYTE = 23,
416 WP_SWORD = 24,
421 RM_BYTE = 30,
422 RM_WORD = 31,
423 RM_DWORD = 32,
424 WM_BYTE = 33,
425 WM_WORD = 34,
426 WM_DWORD = 35,
427 RM_QWORD = 36,
428 WM_QWORD = 37,
430 RM_SBYTE = 40,
431 RM_SWORD = 41,
433 WM_SBYTE = 43,
434 WM_SWORD = 44,
437 WM_SQWORD = 47
439
440enum { WD_DMA_PAGES = 256 };
441
442#ifndef DMA_BIT_MASK
443 #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
444#endif
445
446typedef enum {
450 DMA_KBUF_BELOW_16M = 0x2,
453 DMA_LARGE_BUFFER = 0x4,
461 DMA_KERNEL_ONLY_MAP = 0x10,
464 DMA_FROM_DEVICE = 0x20,
480
491 DMA_TRANSACTION = 0x2000,
494 DMA_GPUDIRECT = 0x4000,
505 DMA_P2PDMA = 0x20000,
507
508#define DMA_ADDRESS_WIDTH_MASK 0x7f000000
509
510#define DMA_OPTIONS_ALL \
511 (DMA_KERNEL_BUFFER_ALLOC | DMA_KBUF_BELOW_16M | DMA_LARGE_BUFFER \
512 | DMA_ALLOW_CACHE | DMA_KERNEL_ONLY_MAP | DMA_FROM_DEVICE | DMA_TO_DEVICE \
513 | DMA_ALLOW_64BIT_ADDRESS | DMA_ALLOW_NO_HCARD | DMA_GET_EXISTING_BUF \
514 | DMA_RESERVED_MEM | DMA_KBUF_ALLOC_SPECIFY_ADDRESS_WIDTH \
515 | DMA_ADDRESS_WIDTH_MASK)
516
517#define DMA_DIRECTION_MASK DMA_TO_FROM_DEVICE
518
520#define DMA_READ_FROM_DEVICE DMA_FROM_DEVICE
521#define DMA_WRITE_TO_DEVICE DMA_TO_DEVICE
522
525#define DMA_OPTIONS_ADDRESS_WIDTH_SHIFT 24
526
527enum {
528 WD_MATCH_EXCLUDE = 0x1
530
531#ifndef PAD_TO_64
532/* Use it to pad struct size to 64 bit, when using 32 on 64 bit applications */
533#if defined (i386) && defined(KERNEL_64BIT)
534 #define PAD_TO_64(pName) DWORD dwPad_##pName;
535#else
536 #define PAD_TO_64(pName)
537#endif
538#endif
539
540typedef struct
541{
543 DWORD dwBytes;
544 PAD_TO_64(dwBytes)
546
547typedef void (DLLCALLCONV * DMA_TRANSACTION_CALLBACK)(PVOID pData);
548
549typedef struct
550{
551 DWORD hDma;
552 PAD_TO_64(hDma)
553
554 PVOID pUserAddr;
555 PAD_TO_64(pUserAddr)
556
557 KPTR pKernelAddr;
558 DWORD dwBytes;
559 DWORD dwOptions;
562 DWORD dwPages;
563 DWORD hCard;
565#if defined(LINUX)
566 union {
567 struct {
568#endif /* defined(LINUX) */
569 /* Windows: The following 6 parameters are used for DMA transaction only */
571 PAD_TO_64(DMATransactionCallback)
572
573 PVOID DMATransactionCallbackCtx;
574 PAD_TO_64(DMATransactionCallbackCtx)
575
576 DWORD dwAlignment;
577 DWORD dwMaxTransferSize;
578 DWORD dwTransferElementSize;
579 DWORD dwBytesTransferred;
580#if defined(LINUX)
581 };
582
583 struct {
584 DWORD hP2pProviderCard;
585 PAD_TO_64(hP2pProviderCard)
586 };
587 };
588#endif /* defined(LINUX) */
591
592typedef enum {
593 /* KER_BUF_ALLOC_NON_CONTIG and KER_BUF_GET_EXISTING_BUF options are valid
594 * only as part of "WinDriver for Server" API and require
595 * "WinDriver for Server" license.
596 * @note "WinDriver for Server" APIs are included in WinDriver evaluation
597 * version. */
603
604typedef struct
605{
606 DWORD hKerBuf;
607 DWORD dwOptions;
611 PAD_TO_64(pUserAddr)
613
614enum { MAX_TRANSFER_COMMANDS = 1024 };
615
616typedef struct
617{
619 DWORD cmdTrans;
620 PAD_TO_64(cmdTrans)
621
622 /* Parameters used for string transfers: */
623 UINT64 u64Bytes;
624 DWORD fAutoinc;
626 DWORD dwOptions;
627 union
628 {
633 PVOID pBuffer;
634 } Data;
636
637enum {
641 INTERRUPT_CMD_COPY = 0x02,
651 INTERRUPT_MESSAGE_X = 0x20,
656
657typedef struct
658{
661 PVOID pData;
662 PAD_TO_64(pData)
663 DWORD dwResult;
664 PAD_TO_64(dwResult)
666
667typedef enum {
673
674typedef struct
675{
677 DWORD dwOptions;
680 PAD_TO_64(Cmd)
681 DWORD dwCmds;
682 PAD_TO_64(dwCmds)
683
684 /* For WD_IntEnable(): */
686 DWORD fEnableOk;
689 /* For WD_IntWait() and WD_IntCount(): */
690 DWORD dwCounter;
691 DWORD dwLost;
692 DWORD fStopped;
693 DWORD dwLastMessage;
694 DWORD dwEnabledIntType;
704
705#define WD_ENABLED_INT_TYPE_MASK 0x3f
706#define WD_ENABLED_INT_TYPE_GET_ENABLED_INT_TYPE_BITS(dwEnabledIntType) \
707 (dwEnabledIntType & WD_ENABLED_INT_TYPE_MASK)
708#define WD_ENABLED_INT_TYPE_NUM_VECTORS_POSITION_BITS 20
709
710typedef struct
711{
712 DWORD dwVer;
715
716#define WD_LICENSE_LENGTH 3072
717typedef struct
718{
719 CHAR cLicense[WD_LICENSE_LENGTH];
721
722enum
723{
724 WD_BUS_USB = (int)0xfffffffe,
730};
731typedef DWORD WD_BUS_TYPE;
732
733typedef struct
734{
738 DWORD dwBusNum;
742
743typedef enum
744{
749 ITEM_BUS = 5
751
752typedef enum
753{
761 WD_ITEM_MEM_P2P_MAP = 0x8,
764
765#define WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_MASK 0xFFFFFF00
766#define WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_SHIFT 8
767#define WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_GET_SIZE(dwOptions) \
768 (((dwOptions) & WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_MASK) >> \
769 WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_SHIFT)
770#define WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_SET_SIZE(dwOptions, size) \
771 ((dwOptions) = ((dwOptions) & ~WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_MASK) | \
772 (((size) << WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_SHIFT)))
773
787#define WD_ITEM_MEM_P2P_ENABLE(memItem, size, offset) \
788 do { \
789 (memItem).dwOptions |= WD_ITEM_MEM_P2P_MAP; \
790 WD_ITEM_MEM_P2P_2MB_BLOCKS_COUNT_SET_SIZE((memItem).dwOptions, size); \
791 (memItem).pReserved = (KPTR)offset; \
792 } while (0)
793
794typedef struct
795{
796 DWORD item;
798 union I
799 {
801 struct Mem
802 {
813 PAD_TO_64(pUserDirectAddr)
814 DWORD dwBar;
815 DWORD dwOptions;
817 KPTR pReserved;
819
821 struct IO
822 {
824 DWORD dwBytes;
825 DWORD dwBar;
826 } IO;
827
829 struct Int
830 {
832 DWORD dwOptions;
841 } Int;
843 } I;
845
846enum { WD_CARD_ITEMS = 128 };
847
848typedef struct
849{
850 DWORD dwItems;
851 PAD_TO_64(dwItems)
854
855typedef struct
856{
860 DWORD hCard;
861 DWORD dwOptions;
862 CHAR cName[32];
863 CHAR cDescription[100];
865
866#define WD_PROCESS_NAME_LENGTH 128
867typedef struct
868{
869 CHAR cProcessName[WD_PROCESS_NAME_LENGTH];
871 DWORD dwGroupID;
875 DWORD hIpc;
877
878typedef struct
879{
881 DWORD dwOptions;
883
884enum { WD_IPC_MAX_PROCS = 0x40 };
885
886typedef struct
887{
888 DWORD hIpc;
894
895enum
896{
900};
901
902typedef struct
903{
904 DWORD hIpc;
905 DWORD dwOptions;
909 DWORD dwMsgID;
912
913typedef struct
914{
915 DWORD hCard;
916 PAD_TO_64(hCard)
918 PAD_TO_64(Cmd)
919 DWORD dwCmds;
920 DWORD dwOptions;
922
923enum { WD_FORCE_CLEANUP = 0x1 };
924
925enum { WD_PCI_CARDS = 256 };
927typedef struct
928{
929 DWORD dwDomain;
931 DWORD dwBus;
932 DWORD dwSlot;
935
936typedef struct
937{
940} WD_PCI_ID;
941
942typedef struct
943{
948 DWORD dwCards;
955 DWORD dwOptions;
957
960
961typedef struct
962{
963 CHAR pcSearchName[WD_DEVICE_NAME_LENGTH];
968 DWORD dwCards;
974
975typedef enum {
981
982enum { WD_PCI_MAX_CAPS = 50 };
983
984enum { WD_PCI_CAP_ID_ALL = 0x0 };
985
986typedef struct
987{
988 DWORD dwCapId;
990} WD_PCI_CAP;
991
992typedef enum {
997
998typedef struct
999{
1002 DWORD dwCapId;
1012
1013typedef struct
1014{
1016 DWORD dwNumVFs;
1018
1019typedef struct
1020{
1024
1025typedef struct
1026{
1031 CHAR pcDeviceName[WD_DEVICE_NAME_LENGTH];
1034
1035typedef enum
1036{
1040 PCI_BAD_SLOT = 3
1042
1043typedef struct
1044{
1046 PVOID pBuffer;
1047 PAD_TO_64(pBuffer)
1048
1049 DWORD dwOffset;
1050 DWORD dwBytes;
1052 DWORD fIsRead;
1053 DWORD dwResult;
1055
1056enum { SLEEP_BUSY = 0, SLEEP_NON_BUSY = 1 };
1057typedef struct
1058{
1063
1064typedef enum
1065{
1070 D_TRACE = 4
1072
1073typedef enum
1074{
1075 S_ALL = (int)0xffffffff,
1076 S_IO = 0x00000008,
1077 S_MEM = 0x00000010,
1078 S_INT = 0x00000020,
1079 S_PCI = 0x00000040,
1080 S_DMA = 0x00000080,
1081 S_MISC = 0x00000100,
1082 S_LICENSE = 0x00000200,
1083 S_PNP = 0x00001000,
1084 S_CARD_REG = 0x00002000,
1085 S_KER_DRV = 0x00004000,
1086 S_USB = 0x00008000,
1087 S_KER_PLUG = 0x00010000,
1088 S_EVENT = 0x00020000,
1089 S_IPC = 0x00040000,
1090 S_KER_BUF = 0x00080000,
1091 S_PLATFORM = 0x00100000,
1092 S_P2PDMA = 0x00200000,
1094
1095typedef enum
1096{
1109
1110typedef struct
1111{
1112 DWORD dwCmd;
1114 /* used for DEBUG_SET_FILTER */
1115 DWORD dwLevel;
1120 /* used for DEBUG_SET_BUFFER */
1123
1124#define DEBUG_USER_BUF_LEN 2048
1125typedef struct
1126{
1127 CHAR cBuffer[DEBUG_USER_BUF_LEN];
1129
1130typedef struct
1131{
1132 CHAR pcBuffer[256];
1133 DWORD dwLevel;
1136
1137typedef struct
1138{
1140 CHAR cDriverName[WD_MAX_KP_NAME_LENGTH];
1141 CHAR cDriverPath[WD_MAX_KP_NAME_LENGTH];
1145 PAD_TO_64(hKernelPlugIn) /* 64 bit app has a 4 byte hole here */
1146 PVOID pOpenData;
1147 PAD_TO_64(pOpenData)
1149
1151typedef enum
1152{
1154 WD_DEVICE_USB = 0x2
1156
1157typedef struct
1158{
1159 union
1160 {
1161 HANDLE hDevice;
1163 } h;
1164 PAD_TO_64(hDevice)
1165 PVOID pBuf;
1166 PAD_TO_64(pBuf)
1167 DWORD dwBytes;
1168 DWORD dwProperty;
1169 DWORD dwOptions;
1170 PAD_TO_64(dwOptions)
1172
1173typedef enum {
1179 WD_INVALID_HANDLE = 0x20000001L,
1188 WD_INVALID_PIPE_NUMBER = 0x20000002L,
1192 WD_READ_WRITE_CONFLICT = 0x20000003L,
1195 WD_ZERO_PACKET_SIZE = 0x20000004L,
1197 WD_INSUFFICIENT_RESOURCES = 0x20000005L,
1202 WD_UNKNOWN_PIPE_TYPE = 0x20000006L,
1203 WD_SYSTEM_INTERNAL_ERROR = 0x20000007L,
1205 WD_DATA_MISMATCH = 0x20000008L,
1209 WD_NO_LICENSE = 0x20000009L,
1215 WD_NOT_IMPLEMENTED = 0x2000000aL,
1220 WD_KERPLUG_FAILURE = 0x2000000bL,
1224 WD_FAILED_ENABLING_INTERRUPT = 0x2000000cL,
1235 WD_INTERRUPT_NOT_ENABLED = 0x2000000dL,
1242 WD_RESOURCE_OVERLAP = 0x2000000eL,
1248 WD_DEVICE_NOT_FOUND = 0x2000000fL,
1251 WD_WRONG_UNIQUE_ID = 0x20000010L,
1254 WD_OPERATION_ALREADY_DONE = 0x20000011L,
1260 WD_USB_DESCRIPTOR_ERROR = 0x20000012L,
1268 WD_SET_CONFIGURATION_FAILED = 0x20000013L,
1273 WD_CANT_OBTAIN_PDO = 0x20000014L,
1274 WD_TIME_OUT_EXPIRED = 0x20000015L,
1278 WD_IRP_CANCELED = 0x20000016L,
1281 WD_FAILED_USER_MAPPING = 0x20000017L,
1290 WD_FAILED_KERNEL_MAPPING = 0x20000018L,
1300 WD_NO_RESOURCES_ON_DEVICE = 0x20000019L,
1310 WD_NO_EVENTS = 0x2000001aL,
1314 WD_INVALID_PARAMETER = 0x2000001bL,
1318 WD_INCORRECT_VERSION = 0x2000001cL,
1324 WD_TRY_AGAIN = 0x2000001dL,
1329 WD_INVALID_IOCTL = 0x2000001fL,
1334 WD_OPERATION_FAILED = 0x20000020L,
1338 WD_INVALID_32BIT_APP = 0x20000021L,
1344 WD_TOO_MANY_HANDLES = 0x20000022L,
1350 WD_NO_DEVICE_OBJECT = 0x20000023L,
1363 WD_MORE_PROCESSING_REQUIRED = (int)0xC0000016L,
1371 /* The following status codes are returned by USBD:
1372 USBD status types: */
1374 WD_USBD_STATUS_PENDING = 0x40000000L,
1376 WD_USBD_STATUS_ERROR = (int)0x80000000L,
1377 WD_USBD_STATUS_HALTED = (int)0xC0000000L,
1379 /* USBD status codes: */
1380 /* @note The following status codes are comprised of one of the status
1381 * types above and an error code [i.e. 0xXYYYYYYYL - where: X = status type;
1382 * YYYYYYY = error code].
1383 * The same error codes may also appear with one of the other status types
1384 * as well. */
1385
1386 /* HC (Host Controller) status codes.
1387 @note These status codes use the WD_USBD_STATUS_HALTED status type]: */
1388 WD_USBD_STATUS_CRC = (int)0xC0000001L,
1390 WD_USBD_STATUS_BTSTUFF = (int)0xC0000002L,
1392 WD_USBD_STATUS_DATA_TOGGLE_MISMATCH = (int)0xC0000003L,
1396 WD_USBD_STATUS_STALL_PID = (int)0xC0000004L,
1398 WD_USBD_STATUS_DEV_NOT_RESPONDING = (int)0xC0000005L,
1401 WD_USBD_STATUS_PID_CHECK_FAILURE = (int)0xC0000006L,
1404 WD_USBD_STATUS_UNEXPECTED_PID = (int)0xC0000007L,
1407 WD_USBD_STATUS_DATA_OVERRUN = (int)0xC0000008L,
1410 WD_USBD_STATUS_DATA_UNDERRUN = (int)0xC0000009L,
1413 WD_USBD_STATUS_RESERVED1 = (int)0xC000000AL,
1415 WD_USBD_STATUS_RESERVED2 = (int)0xC000000BL,
1417 WD_USBD_STATUS_BUFFER_OVERRUN = (int)0xC000000CL,
1420 WD_USBD_STATUS_BUFFER_UNDERRUN = (int)0xC000000DL,
1423 WD_USBD_STATUS_NOT_ACCESSED = (int)0xC000000FL,
1425 WD_USBD_STATUS_FIFO = (int)0xC0000010L,
1428#if defined(WIN32)
1429 WD_USBD_STATUS_XACT_ERROR = (int)0xC0000011L,
1435 WD_USBD_STATUS_BABBLE_DETECTED = (int)0xC0000012L,
1438 WD_USBD_STATUS_DATA_BUFFER_ERROR = (int)0xC0000013L,
1441#endif
1442
1443 WD_USBD_STATUS_CANCELED = (int)0xC0010000L,
1450
1451 /* Software status codes
1452 @note The following status codes have only the error bit set: */
1453 WD_USBD_STATUS_NO_MEMORY = (int)0x80000100L,
1456 WD_USBD_STATUS_INVALID_URB_FUNCTION = (int)0x80000200L,
1459 WD_USBD_STATUS_INVALID_PARAMETER = (int)0x80000300L,
1465 WD_USBD_STATUS_ERROR_BUSY = (int)0x80000400L,
1466
1474
1478
1481
1485
1490
1494
1498
1502
1503#if defined(WIN32)
1505 /* Additional USB 2.0 software error codes added for USB 2.0: */
1506 WD_USBD_STATUS_NOT_SUPPORTED = (int)0xC0000E00L,
1515 WD_USBD_STATUS_INSUFFICIENT_RESOURCES = (int)0xC0001000L,
1519 WD_USBD_STATUS_SET_CONFIG_FAILED = (int)0xC0002000L,
1524 WD_USBD_STATUS_BUFFER_TOO_SMALL = (int)0xC0003000L,
1528 WD_USBD_STATUS_INTERFACE_NOT_FOUND = (int)0xC0004000L,
1532 WD_USBD_STATUS_INAVLID_PIPE_FLAGS = (int)0xC0005000L,
1536 WD_USBD_STATUS_TIMEOUT = (int)0xC0006000L,
1539 WD_USBD_STATUS_DEVICE_GONE = (int)0xC0007000L,
1542 WD_USBD_STATUS_STATUS_NOT_MAPPED = (int)0xC0008000L,
1563 WD_USBD_STATUS_ISO_NOT_ACCESSED_LATE = (int)0xC0050000L
1564#endif
1566
1567typedef enum
1568{
1572 WD_POWER_CHANGED_D0 = 0x10,
1586
1587#define WD_IPC_ALL_MSG (WD_IPC_UNICAST_MSG | WD_IPC_MULTICAST_MSG)
1588
1589typedef enum
1590{
1592 WD_ACCEPT_CONTROL = 0x2
1594
1595#define WDU_USE_SHARED_OBJECT_HANDLE 0x1000000
1596#define WDU_DONT_INSERT_LICENSE 0x2000000
1597
1598#define WD_ACTIONS_POWER (WD_POWER_CHANGED_D0 | WD_POWER_CHANGED_D1 | \
1599 WD_POWER_CHANGED_D2 | WD_POWER_CHANGED_D3 | WD_POWER_SYSTEM_WORKING | \
1600 WD_POWER_SYSTEM_SLEEPING1 | WD_POWER_SYSTEM_SLEEPING3 | \
1601 WD_POWER_SYSTEM_HIBERNATE | WD_POWER_SYSTEM_SHUTDOWN)
1602#define WD_ACTIONS_ALL (WD_ACTIONS_POWER | WD_INSERT | WD_REMOVE)
1603
1604enum
1605{
1610};
1611typedef DWORD WD_EVENT_TYPE;
1612
1613typedef struct
1614{
1615 DWORD hEvent;
1618 DWORD dwAction;
1622 union u
1623 {
1624 struct Pci
1625 {
1628 } Pci;
1629 struct Usb
1630 {
1632 } Usb;
1633 struct Ipc
1634 {
1635 DWORD hIpc;
1639
1641 DWORD dwMsgID;
1642 PAD_TO_64(dwMsgID)
1643 UINT64 qwMsgData;
1645 } u;
1646
1647 DWORD dwNumMatchTables;
1648 WDU_MATCH_TABLE matchTables[1];
1650
1651typedef struct
1652{
1655} WD_USAGE;
1656
1657enum
1658{
1662
1663#ifndef BZERO
1664 #define BZERO(buf) memset(&(buf), 0, sizeof(buf))
1665#endif
1666
1667#ifndef INVALID_HANDLE_VALUE
1668 #define INVALID_HANDLE_VALUE ((HANDLE)(-1))
1669#endif
1670
1671#ifndef CTL_CODE
1672 #define CTL_CODE(DeviceType, Function, Method, Access) ( \
1673 ((DeviceType)<<16) | ((Access)<<14) | ((Function)<<2) | (Method) \
1674 )
1675
1676 #define METHOD_BUFFERED 0
1677 #define METHOD_IN_DIRECT 1
1678 #define METHOD_OUT_DIRECT 2
1679 #define METHOD_NEITHER 3
1680 #define FILE_ANY_ACCESS 0
1681 #define FILE_READ_ACCESS 1
1682 #define FILE_WRITE_ACCESS 2
1683#endif
1684
1685#if defined(LINUX) && defined(KERNEL_64BIT)
1686 #define WD_TYPE 0
1687 #define WD_CTL_CODE(wFuncNum) \
1688 _IOC(_IOC_READ|_IOC_WRITE, WD_TYPE, wFuncNum, 0)
1689 #define WD_CTL_DECODE_FUNC(IoControlCode) _IOC_NR(IoControlCode)
1690 #define WD_CTL_DECODE_TYPE(IoControlCode) _IOC_TYPE(IoControlCode)
1691#elif defined(UNIX)
1692 #define WD_TYPE 0
1693 #define WD_CTL_CODE(wFuncNum) (wFuncNum)
1694 #define WD_CTL_DECODE_FUNC(IoControlCode) (IoControlCode)
1695 #define WD_CTL_DECODE_TYPE(IoControlCode) (WD_TYPE)
1696#else
1698 #define WD_TYPE 38200
1699 #if defined(KERNEL_64BIT)
1700 #define FUNC_MASK 0x400
1701 #else
1702 #define FUNC_MASK 0x0
1703 #endif
1704 #define WD_CTL_CODE(wFuncNum) CTL_CODE(WD_TYPE, (wFuncNum | FUNC_MASK), \
1705 METHOD_NEITHER, FILE_ANY_ACCESS)
1706 #define WD_CTL_DECODE_FUNC(IoControlCode) ((IoControlCode >> 2) & 0xfff)
1707 #define WD_CTL_DECODE_TYPE(IoControlCode) \
1708 DEVICE_TYPE_FROM_CTL_CODE(IoControlCode)
1709#endif
1710
1711#if defined(LINUX)
1712 #define WD_CTL_IS_64BIT_AWARE(IoControlCode) \
1713 (_IOC_DIR(IoControlCode) & (_IOC_READ|_IOC_WRITE))
1714#elif defined(UNIX)
1715 #define WD_CTL_IS_64BIT_AWARE(IoControlCode) TRUE
1716#else
1717 #define WD_CTL_IS_64BIT_AWARE(IoControlCode) \
1718 (WD_CTL_DECODE_FUNC(IoControlCode) & FUNC_MASK)
1719#endif
1720
1721/* WinDriver function IOCTL calls. For details on the WinDriver functions, */
1722/* see the WinDriver manual or included help files. */
1723
1724#define IOCTL_WD_KERNEL_BUF_LOCK WD_CTL_CODE(0x901)
1725#define IOCTL_WD_KERNEL_BUF_UNLOCK WD_CTL_CODE(0x902)
1726#define IOCTL_WD_DMA_LOCK WD_CTL_CODE(0x903)
1727#define IOCTL_WD_DMA_UNLOCK WD_CTL_CODE(0x904)
1728#define IOCTL_WD_DMA_SYNC_CPU WD_CTL_CODE(0x905)
1729#define IOCTL_WD_DMA_SYNC_IO WD_CTL_CODE(0x906)
1730#define IOCTL_WD_DMA_TRANSACTION_INIT WD_CTL_CODE(0x907)
1731#define IOCTL_WD_DMA_TRANSACTION_EXECUTE WD_CTL_CODE(0x908)
1732#define IOCTL_WD_DMA_TRANSFER_COMPLETED_AND_CHECK WD_CTL_CODE(0x909)
1733#define IOCTL_WD_DMA_TRANSACTION_RELEASE WD_CTL_CODE(0x90a)
1734#define IOCTL_WD_TRANSFER WD_CTL_CODE(0x90b)
1735#define IOCTL_WD_MULTI_TRANSFER WD_CTL_CODE(0x90c)
1736#define IOCTL_WD_PCI_SCAN_CARDS WD_CTL_CODE(0x90d)
1737#define IOCTL_WD_PCI_GET_CARD_INFO WD_CTL_CODE(0x90e)
1738#define IOCTL_WD_PCI_SCAN_CAPS WD_CTL_CODE(0x90f)
1739#define IOCTL_WD_PCI_CONFIG_DUMP WD_CTL_CODE(0x910)
1740#define IOCTL_WD_VERSION WD_CTL_CODE(0x911)
1741#define IOCTL_WD_KERNEL_PLUGIN_OPEN WD_CTL_CODE(0x912)
1742#define IOCTL_WD_KERNEL_PLUGIN_CLOSE WD_CTL_CODE(0x913)
1743#define IOCTL_WD_KERNEL_PLUGIN_CALL WD_CTL_CODE(0x914)
1744#define IOCTL_WD_INT_ENABLE WD_CTL_CODE(0x915)
1745#define IOCTL_WD_INT_DISABLE WD_CTL_CODE(0x916)
1746#define IOCTL_WD_INT_COUNT WD_CTL_CODE(0x917)
1747#define IOCTL_WD_INT_WAIT WD_CTL_CODE(0x918)
1748#define IOCTL_WD_SLEEP WD_CTL_CODE(0x919)
1749#define IOCTL_WD_DEBUG WD_CTL_CODE(0x91a)
1750#define IOCTL_WD_DEBUG_DUMP WD_CTL_CODE(0x91b)
1751#define IOCTL_WD_DEBUG_ADD WD_CTL_CODE(0x91c)
1752#define IOCTL_WD_CARD_REGISTER WD_CTL_CODE(0x91d)
1753#define IOCTL_WD_CARD_UNREGISTER WD_CTL_CODE(0x91e)
1754#define IOCTL_WD_CARD_CLEANUP_SETUP WD_CTL_CODE(0x91f)
1755#define IOCTL_WD_GET_DEVICE_PROPERTY WD_CTL_CODE(0x920)
1756#define IOCTL_WD_EVENT_REGISTER WD_CTL_CODE(0x921)
1757#define IOCTL_WD_EVENT_UNREGISTER WD_CTL_CODE(0x922)
1758#define IOCTL_WD_EVENT_PULL WD_CTL_CODE(0x923)
1759#define IOCTL_WD_EVENT_SEND WD_CTL_CODE(0x924)
1760#define IOCTL_WDU_GET_DEVICE_DATA WD_CTL_CODE(0x925)
1761#define IOCTL_WDU_WAKEUP WD_CTL_CODE(0x926)
1762#define IOCTL_WDU_SET_INTERFACE WD_CTL_CODE(0x927)
1763#define IOCTL_WDU_RESET_PIPE WD_CTL_CODE(0x928)
1764#define IOCTL_WDU_TRANSFER WD_CTL_CODE(0x929)
1765#define IOCTL_WDU_HALT_TRANSFER WD_CTL_CODE(0x92a)
1766#define IOCTL_WDU_RESET_DEVICE WD_CTL_CODE(0x92b)
1767#define IOCTL_WDU_STREAM_OPEN WD_CTL_CODE(0x92c)
1768#define IOCTL_WDU_STREAM_CLOSE WD_CTL_CODE(0x92d)
1769#define IOCTL_WDU_STREAM_START WD_CTL_CODE(0x92e)
1770#define IOCTL_WDU_STREAM_STOP WD_CTL_CODE(0x92f)
1771#define IOCTL_WDU_STREAM_FLUSH WD_CTL_CODE(0x930)
1772#define IOCTL_WDU_STREAM_GET_STATUS WD_CTL_CODE(0x931)
1773#define IOCTL_WDU_SELECTIVE_SUSPEND WD_CTL_CODE(0x932)
1774#define IOCTL_WD_IPC_REGISTER WD_CTL_CODE(0x933)
1775#define IOCTL_WD_IPC_UNREGISTER WD_CTL_CODE(0x934)
1776#define IOCTL_WD_IPC_SCAN_PROCS WD_CTL_CODE(0x935)
1777#define IOCTL_WD_IPC_SEND WD_CTL_CODE(0x936)
1778#define IOCTL_WD_PCI_SRIOV_ENABLE WD_CTL_CODE(0x937)
1779#define IOCTL_WD_PCI_SRIOV_DISABLE WD_CTL_CODE(0x938)
1780#define IOCTL_WD_PCI_SRIOV_GET_NUMVFS WD_CTL_CODE(0x939)
1781#define IOCTL_WD_IPC_SHARED_INT_ENABLE WD_CTL_CODE(0x93a)
1782#define IOCTL_WD_IPC_SHARED_INT_DISABLE WD_CTL_CODE(0x93b)
1783#define IOCTL_WD_USAGE WD_CTL_CODE(0x93c)
1784#define IOCTL_WD_LICENSE WD_CTL_CODE(0x93d)
1785#define IOCTL_WD_PCI_RESET_CARD WD_CTL_CODE(0x945)
1786#define IOCTL_WD_PLATFORM_GET_DEVICE_INFO WD_CTL_CODE(0x946)
1787#define IOCTL_WD_PLATFORM_SCAN_DEVICES WD_CTL_CODE(0x947)
1788
1789#if defined(UNIX)
1790 typedef struct
1791 {
1792 DWORD dwHeader;
1793 DWORD dwSize;
1794 PVOID pData;
1795 PAD_TO_64(pData)
1796 } WD_IOCTL_HEADER;
1797
1798 #define WD_IOCTL_HEADER_CODE 0xa410b413UL
1799#endif
1800
1801#if defined(__KERNEL__)
1802 HANDLE __cdecl WD_Open(void);
1803 void __cdecl WD_Close(HANDLE hWD);
1804 DWORD __cdecl KP_DeviceIoControl(DWORD dwFuncNum, HANDLE h, PVOID pParam,
1805 DWORD dwSize);
1806 #define WD_FUNCTION(wFuncNum, h, pParam, dwSize, fWait) \
1807 KP_DeviceIoControl((DWORD)wFuncNum, h, (PVOID)pParam, (DWORD)dwSize)
1808#else
1809 #define REGKEY_BUFSIZE 256
1810 #define OS_CAN_NOT_DETECT_TEXT "OS CAN NOT DETECT"
1811 #define INSTALLATION_TYPE_NOT_DETECT_TEXT "unknown"
1812 typedef struct
1813 {
1814 CHAR cProdName[REGKEY_BUFSIZE];
1815 CHAR cInstallationType[REGKEY_BUFSIZE];
1816 #ifdef WIN32
1817 CHAR cCurrentVersion[REGKEY_BUFSIZE];
1818 CHAR cBuild[REGKEY_BUFSIZE];
1819 CHAR cCsdVersion[REGKEY_BUFSIZE];
1822 #else
1823 CHAR cRelease[REGKEY_BUFSIZE];
1824 CHAR cReleaseVersion[REGKEY_BUFSIZE];
1825 #endif
1826 } WD_OS_INFO;
1827
1837
1849 #if defined(APPLE)
1850 DWORD WD_FUNCTION_LOCAL(int wFuncNum, HANDLE h,
1851 PVOID pParam, DWORD dwSize, BOOL fWait);
1852
1853 HANDLE WD_OpenLocal(void);
1854
1855 void WD_CloseLocal(HANDLE h);
1856
1857 #define WD_OpenStreamLocal(read,sync) INVALID_HANDLE_VALUE
1858
1859 #define WD_UStreamRead(hFile, pBuffer, dwNumberOfBytesToRead, \
1860 dwNumberOfBytesRead)\
1861 WD_NOT_IMPLEMENTED
1862
1863 #define WD_UStreamWrite(hFile, pBuffer, dwNumberOfBytesToWrite, \
1864 dwNumberOfBytesWritten)\
1865 WD_NOT_IMPLEMENTED
1866
1867 #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 120000
1868 #define IO_MASTER_PORT IOMainPort
1869 #else
1870 #define IO_MASTER_PORT IOMasterPort
1871 #endif
1872
1873 #elif defined(UNIX)
1874 static inline ULONG WD_FUNCTION_LOCAL(int wFuncNum, HANDLE h,
1875 PVOID pParam, DWORD dwSize, BOOL fWait)
1876 {
1877 WD_IOCTL_HEADER ioctl_hdr;
1878
1879 BZERO(ioctl_hdr);
1880 ioctl_hdr.dwHeader = WD_IOCTL_HEADER_CODE;
1881 ioctl_hdr.dwSize = dwSize;
1882 ioctl_hdr.pData = pParam;
1883 (void)fWait;
1884 #if defined(LINUX)
1885 return (ULONG)ioctl((int)(long)h, wFuncNum, &ioctl_hdr);
1886 #endif
1887 }
1888
1889 #define WD_OpenLocal()\
1890 ((HANDLE)(long)open(WD_DRIVER_NAME, O_RDWR | O_SYNC))
1891 #define WD_OpenStreamLocal(read,sync) \
1892 ((HANDLE)(long)open(WD_DRIVER_NAME, \
1893 ((read) ? O_RDONLY : O_WRONLY) | \
1894 ((sync) ? O_SYNC : O_NONBLOCK)))
1895
1896 #define WD_CloseLocal(h) close((int)(long)(h))
1897
1898 #define WD_UStreamRead(hFile, pBuffer, dwNumberOfBytesToRead, \
1899 dwNumberOfBytesRead)\
1900 WD_NOT_IMPLEMENTED
1901
1902 #define WD_UStreamWrite(hFile, pBuffer, dwNumberOfBytesToWrite, \
1903 dwNumberOfBytesWritten)\
1904 WD_NOT_IMPLEMENTED
1905
1906 #elif defined(WIN32)
1907 #define WD_CloseLocal(h) CloseHandle(h)
1908
1909 #define WD_UStreamRead(hFile, pBuffer, dwNumberOfBytesToRead, \
1910 dwNumberOfBytesRead)\
1911 ReadFile(hFile, pBuffer, dwNumberOfBytesToRead, \
1912 dwNumberOfBytesRead, NULL) ? WD_STATUS_SUCCESS : \
1913 WD_OPERATION_FAILED
1914
1915 #define WD_UStreamWrite(hFile, pBuffer, dwNumberOfBytesToWrite, \
1916 dwNumberOfBytesWritten)\
1917 WriteFile(hFile, pBuffer, dwNumberOfBytesToWrite, \
1918 dwNumberOfBytesWritten, NULL) ? WD_STATUS_SUCCESS : \
1919 WD_OPERATION_FAILED
1920
1921 #if defined(WIN32)
1922 #define WD_OpenLocal()\
1923 CreateFileA(\
1924 WD_DRIVER_NAME,\
1925 GENERIC_READ,\
1926 FILE_SHARE_READ | FILE_SHARE_WRITE,\
1927 NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL)
1928
1929 #define WD_OpenStreamLocal(read,sync) \
1930 CreateFileA(\
1931 WD_DRIVER_NAME,\
1932 (read) ? GENERIC_READ : GENERIC_WRITE,\
1933 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, \
1934 (sync) ? 0 : FILE_FLAG_OVERLAPPED, NULL)
1935
1936 static DWORD WD_FUNCTION_LOCAL(int wFuncNum, HANDLE h, PVOID pParam,
1937 DWORD dwSize, BOOL fWait)
1938 {
1939 DWORD dwTmp;
1940 HANDLE hWD = fWait ? WD_OpenLocal() : h;
1941 DWORD rc = WD_WINDRIVER_STATUS_ERROR;
1942
1943 if (hWD == INVALID_HANDLE_VALUE)
1944 return (DWORD)WD_STATUS_INVALID_WD_HANDLE;
1945
1946 DeviceIoControl(hWD, (DWORD)wFuncNum, pParam, dwSize, &rc,
1947 sizeof(DWORD), &dwTmp, NULL);
1948
1949 if (fWait)
1950 WD_CloseLocal(hWD);
1951
1952 return rc;
1953 }
1954 #endif
1955 #endif
1956
1957 #define WD_FUNCTION WD_FUNCTION_LOCAL
1958 #define WD_Close WD_CloseLocal
1959 #define WD_Open WD_OpenLocal
1960 #define WD_StreamOpen WD_OpenStreamLocal
1961 #define WD_StreamClose WD_CloseLocal
1962#endif
1963
1964#define SIZE_OF_WD_DMA(pDma) \
1965 ((DWORD)(sizeof(WD_DMA) + ((pDma)->dwPages <= WD_DMA_PAGES ? \
1966 0 : ((pDma)->dwPages - WD_DMA_PAGES) * sizeof(WD_DMA_PAGE))))
1967#define SIZE_OF_WD_EVENT(pEvent) \
1968 ((DWORD)(sizeof(WD_EVENT) + ((pEvent)->dwNumMatchTables > 0 ? \
1969 sizeof(WDU_MATCH_TABLE) * ((pEvent)->dwNumMatchTables - 1) : 0)))
1970
1982#define WD_Debug(h,pDebug)\
1983 WD_FUNCTION(IOCTL_WD_DEBUG, h, pDebug, sizeof(WD_DEBUG), FALSE)
1984
1996#define WD_DebugDump(h,pDebugDump)\
1997 WD_FUNCTION(IOCTL_WD_DEBUG_DUMP, h, pDebugDump, sizeof(WD_DEBUG_DUMP), \
1998 FALSE)
1999
2011#define WD_DebugAdd(h, pDebugAdd)\
2012 WD_FUNCTION(IOCTL_WD_DEBUG_ADD, h, pDebugAdd, sizeof(WD_DEBUG_ADD), FALSE)
2013
2026#define WD_Transfer(h,pTransfer)\
2027 WD_FUNCTION(IOCTL_WD_TRANSFER, h, pTransfer, sizeof(WD_TRANSFER), FALSE)
2028
2045#define WD_MultiTransfer(h, pTransferArray, dwNumTransfers) \
2046 WD_FUNCTION(IOCTL_WD_MULTI_TRANSFER, h, pTransferArray, \
2047 sizeof(WD_TRANSFER) * (dwNumTransfers), FALSE)
2048
2062#define WD_KernelBufLock(h, pKerBuf)\
2063 WD_FUNCTION(IOCTL_WD_KERNEL_BUF_LOCK, h, pKerBuf, \
2064 sizeof(WD_KERNEL_BUFFER), FALSE)
2065
2077#define WD_KernelBufUnlock(h, pKerBuf)\
2078 WD_FUNCTION(IOCTL_WD_KERNEL_BUF_UNLOCK, h, pKerBuf, \
2079 sizeof(WD_KERNEL_BUFFER), FALSE)
2080
2143#define WD_DMALock(h,pDma)\
2144 WD_FUNCTION(IOCTL_WD_DMA_LOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2145
2158#define WD_DMAUnlock(h,pDma)\
2159 WD_FUNCTION(IOCTL_WD_DMA_UNLOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2160
2174#define WD_DMATransactionInit(h,pDma)\
2175 WD_FUNCTION(IOCTL_WD_DMA_TRANSACTION_INIT, h, pDma, SIZE_OF_WD_DMA(pDma), \
2176 FALSE)
2177
2188#define WD_DMATransactionExecute(h,pDma)\
2189 WD_FUNCTION(IOCTL_WD_DMA_TRANSACTION_EXECUTE, h, pDma, \
2190 SIZE_OF_WD_DMA(pDma), FALSE)
2191
2202#define WD_DMATransferCompletedAndCheck(h,pDma)\
2203 WD_FUNCTION(IOCTL_WD_DMA_TRANSFER_COMPLETED_AND_CHECK, h, pDma, \
2204 SIZE_OF_WD_DMA(pDma), FALSE)
2205
2217#define WD_DMATransactionRelease(h,pDma)\
2218 WD_FUNCTION(IOCTL_WD_DMA_TRANSACTION_RELEASE, h, pDma, \
2219 SIZE_OF_WD_DMA(pDma), FALSE)
2220
2232#define WD_DMATransactionUninit(h,pDma)\
2233 WD_FUNCTION(IOCTL_WD_DMA_UNLOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2234
2258#define WD_DMASyncCpu(h,pDma)\
2259 WD_FUNCTION(IOCTL_WD_DMA_SYNC_CPU, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2260
2285#define WD_DMASyncIo(h,pDma)\
2286 WD_FUNCTION(IOCTL_WD_DMA_SYNC_IO, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2287
2339#define WD_CardRegister(h,pCard)\
2340 WD_FUNCTION(IOCTL_WD_CARD_REGISTER, h, pCard, sizeof(WD_CARD_REGISTER),\
2341 FALSE)
2342
2355#define WD_CardUnregister(h,pCard)\
2356 WD_FUNCTION(IOCTL_WD_CARD_UNREGISTER, h, pCard, sizeof(WD_CARD_REGISTER),\
2357 FALSE)
2358
2380#define WD_IpcRegister(h, pIpcRegister) \
2381 WD_FUNCTION(IOCTL_WD_IPC_REGISTER, h, pIpcRegister, \
2382 sizeof(WD_IPC_REGISTER), FALSE)
2383
2396#define WD_IpcUnRegister(h, pProcInfo) \
2397 WD_FUNCTION(IOCTL_WD_IPC_UNREGISTER, h, pProcInfo, sizeof(WD_IPC_PROCESS), \
2398 FALSE)
2399
2413#define WD_IpcScanProcs(h, pIpcScanProcs) \
2414 WD_FUNCTION(IOCTL_WD_IPC_SCAN_PROCS, h, pIpcScanProcs, \
2415 sizeof(WD_IPC_SCAN_PROCS), FALSE)
2416
2430#define WD_IpcSend(h, pIpcSend) \
2431 WD_FUNCTION(IOCTL_WD_IPC_SEND, h, pIpcSend, sizeof(WD_IPC_SEND), FALSE)
2432
2450#define WD_SharedIntEnable(h, pIpcRegister) \
2451 WD_FUNCTION(IOCTL_WD_IPC_SHARED_INT_ENABLE, h, pIpcRegister, \
2452 sizeof(WD_IPC_REGISTER), FALSE)
2453
2465#define WD_SharedIntDisable(h) \
2466 WD_FUNCTION(IOCTL_WD_IPC_SHARED_INT_DISABLE, h, 0, 0, FALSE)
2467
2481#define WD_PciSriovEnable(h,pPciSRIOV) \
2482 WD_FUNCTION(IOCTL_WD_PCI_SRIOV_ENABLE, h, pPciSRIOV, \
2483 sizeof(WD_PCI_SRIOV), FALSE)
2484
2498#define WD_PciSriovDisable(h,pPciSRIOV) \
2499 WD_FUNCTION(IOCTL_WD_PCI_SRIOV_DISABLE, h, pPciSRIOV, \
2500 sizeof(WD_PCI_SRIOV), FALSE)
2501
2517#define WD_PciSriovGetNumVFs(h,pPciSRIOV) \
2518 WD_FUNCTION(IOCTL_WD_PCI_SRIOV_GET_NUMVFS, h, pPciSRIOV, \
2519 sizeof(WD_PCI_SRIOV), FALSE)
2520
2543#define WD_CardCleanupSetup(h,pCardCleanup)\
2544 WD_FUNCTION(IOCTL_WD_CARD_CLEANUP_SETUP, h, pCardCleanup, \
2545 sizeof(WD_CARD_CLEANUP), FALSE)
2546
2561#define WD_PciScanCards(h,pPciScan)\
2562 WD_FUNCTION(IOCTL_WD_PCI_SCAN_CARDS, h, pPciScan,\
2563 sizeof(WD_PCI_SCAN_CARDS), FALSE)
2564
2578#define WD_PciScanCaps(h,pPciScanCaps) \
2579 WD_FUNCTION(IOCTL_WD_PCI_SCAN_CAPS, h, pPciScanCaps, \
2580 sizeof(WD_PCI_SCAN_CAPS), FALSE)
2581
2595#define WD_PciGetCardInfo(h,pPciCard)\
2596 WD_FUNCTION(IOCTL_WD_PCI_GET_CARD_INFO, h, pPciCard, \
2597 sizeof(WD_PCI_CARD_INFO), FALSE)
2598
2613#define WD_PciConfigDump(h,pPciConfigDump)\
2614 WD_FUNCTION(IOCTL_WD_PCI_CONFIG_DUMP, h, pPciConfigDump, \
2615 sizeof(WD_PCI_CONFIG_DUMP), FALSE)
2616
2633#define WD_PciResetCard(h,pPciSlot)\
2634 WD_FUNCTION(IOCTL_WD_PCI_RESET_CARD, h, pPciSlot, sizeof(WD_PCI_SLOT), \
2635 FALSE)
2636
2637#if defined(LINUX)
2648#define WD_PlatformGetCardInfo(h,pCard)\
2649 WD_FUNCTION(IOCTL_WD_PLATFORM_GET_DEVICE_INFO, h, pCard, \
2650 sizeof(WD_PLATFORM_CARD_INFO), FALSE)
2651
2665#define WD_PlatformScanDevices(h,pPlatformScan)\
2666 WD_FUNCTION(IOCTL_WD_PLATFORM_SCAN_DEVICES, h, pPlatformScan, \
2667 sizeof(WD_PLATFORM_SCAN_DEVICES), FALSE)
2668#endif /* defined(LINUX) */
2669
2682#define WD_Version(h,pVerInfo)\
2683 WD_FUNCTION(IOCTL_WD_VERSION, h, pVerInfo, sizeof(WD_VERSION), FALSE)
2684
2708#define WD_License(h,pLicense)\
2709 WD_FUNCTION(IOCTL_WD_LICENSE, h, pLicense, sizeof(WD_LICENSE), FALSE)
2710
2724#define WD_KernelPlugInOpen(h,pKernelPlugIn)\
2725 WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_OPEN, h, pKernelPlugIn, \
2726 sizeof(WD_KERNEL_PLUGIN), FALSE)
2727
2740#define WD_KernelPlugInClose(h,pKernelPlugIn)\
2741 WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_CLOSE, h, pKernelPlugIn, \
2742 sizeof(WD_KERNEL_PLUGIN), FALSE)
2743
2763#define WD_KernelPlugInCall(h,pKernelPlugInCall)\
2764 WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_CALL, h, pKernelPlugInCall, \
2765 sizeof(WD_KERNEL_PLUGIN_CALL), FALSE)
2766
2790#define WD_IntEnable(h,pInterrupt)\
2791 WD_FUNCTION(IOCTL_WD_INT_ENABLE, h, pInterrupt, sizeof(WD_INTERRUPT), FALSE)
2792
2804#define WD_IntDisable(h,pInterrupt)\
2805 WD_FUNCTION(IOCTL_WD_INT_DISABLE, h, pInterrupt, sizeof(WD_INTERRUPT), \
2806 FALSE)
2807
2819#define WD_IntCount(h,pInterrupt)\
2820 WD_FUNCTION(IOCTL_WD_INT_COUNT, h, pInterrupt, sizeof(WD_INTERRUPT), FALSE)
2821
2838#define WD_IntWait(h,pInterrupt)\
2839 WD_FUNCTION(IOCTL_WD_INT_WAIT, h, pInterrupt, sizeof(WD_INTERRUPT), TRUE)
2840
2855#define WD_Sleep(h,pSleep)\
2856 WD_FUNCTION(IOCTL_WD_SLEEP, h, pSleep, sizeof(WD_SLEEP), FALSE)
2857
2858
2859#define WD_EventRegister(h, pEvent) \
2860 WD_FUNCTION(IOCTL_WD_EVENT_REGISTER, h, pEvent, SIZE_OF_WD_EVENT(pEvent), \
2861 FALSE)
2862#define WD_EventUnregister(h, pEvent) \
2863 WD_FUNCTION(IOCTL_WD_EVENT_UNREGISTER, h, pEvent, \
2864 SIZE_OF_WD_EVENT(pEvent), FALSE)
2865#define WD_EventPull(h,pEvent) \
2866 WD_FUNCTION(IOCTL_WD_EVENT_PULL, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
2867#define WD_EventSend(h,pEvent) \
2868 WD_FUNCTION(IOCTL_WD_EVENT_SEND, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
2869#define WD_Usage(h, pStop) \
2870 WD_FUNCTION(IOCTL_WD_USAGE, h, pStop, sizeof(WD_USAGE), FALSE)
2871
2872#define WD_UGetDeviceData(h, pGetDevData) \
2873 WD_FUNCTION(IOCTL_WDU_GET_DEVICE_DATA, h, pGetDevData, \
2874 sizeof(WDU_GET_DEVICE_DATA), FALSE);
2875#define WD_GetDeviceProperty(h, pGetDevProperty) \
2876 WD_FUNCTION(IOCTL_WD_GET_DEVICE_PROPERTY, h, pGetDevProperty, \
2877 sizeof(WD_GET_DEVICE_PROPERTY), FALSE);
2878#define WD_USetInterface(h, pSetIfc) \
2879 WD_FUNCTION(IOCTL_WDU_SET_INTERFACE, h, pSetIfc, \
2880 sizeof(WDU_SET_INTERFACE), FALSE);
2881#define WD_UResetPipe(h, pResetPipe) \
2882 WD_FUNCTION(IOCTL_WDU_RESET_PIPE, h, pResetPipe, sizeof(WDU_RESET_PIPE), \
2883 FALSE);
2884#define WD_UTransfer(h, pTrans) \
2885 WD_FUNCTION(IOCTL_WDU_TRANSFER, h, pTrans, sizeof(WDU_TRANSFER), TRUE);
2886#define WD_UHaltTransfer(h, pHaltTrans) \
2887 WD_FUNCTION(IOCTL_WDU_HALT_TRANSFER, h, pHaltTrans, \
2888 sizeof(WDU_HALT_TRANSFER), FALSE);
2889#define WD_UWakeup(h, pWakeup) \
2890 WD_FUNCTION(IOCTL_WDU_WAKEUP, h, pWakeup, sizeof(WDU_WAKEUP), FALSE);
2891#define WD_USelectiveSuspend(h, pSelectiveSuspend) \
2892 WD_FUNCTION(IOCTL_WDU_SELECTIVE_SUSPEND, h, pSelectiveSuspend, \
2893 sizeof(WDU_SELECTIVE_SUSPEND), FALSE);
2894#define WD_UResetDevice(h, pResetDevice) \
2895 WD_FUNCTION(IOCTL_WDU_RESET_DEVICE, h, pResetDevice, \
2896 sizeof(WDU_RESET_DEVICE), FALSE);
2897#define WD_UStreamOpen(h, pStream) \
2898 WD_FUNCTION(IOCTL_WDU_STREAM_OPEN, h, pStream, sizeof(WDU_STREAM), FALSE);
2899#define WD_UStreamClose(h, pStream) \
2900 WD_FUNCTION(IOCTL_WDU_STREAM_CLOSE, h, pStream, sizeof(WDU_STREAM), FALSE);
2901#define WD_UStreamStart(h, pStream) \
2902 WD_FUNCTION(IOCTL_WDU_STREAM_START, h, pStream, sizeof(WDU_STREAM), FALSE);
2903#define WD_UStreamStop(h, pStream) \
2904 WD_FUNCTION(IOCTL_WDU_STREAM_STOP, h, pStream, sizeof(WDU_STREAM), FALSE);
2905#define WD_UStreamFlush(h, pStream) \
2906 WD_FUNCTION(IOCTL_WDU_STREAM_FLUSH, h, pStream, sizeof(WDU_STREAM), FALSE);
2907#define WD_UStreamGetStatus(h, pStreamStatus) \
2908 WD_FUNCTION(IOCTL_WDU_STREAM_GET_STATUS, h, pStreamStatus, \
2909 sizeof(WDU_STREAM_STATUS), FALSE);
2910
2911#define __ALIGN_DOWN(val,alignment) ( (val) & ~((alignment) - 1) )
2912#define __ALIGN_UP(val,alignment) \
2913 ( ((val) + (alignment) - 1) & ~((alignment) - 1) )
2914
2915#ifdef WDLOG
2916 #include "wd_log.h"
2917#endif
2918
2919#ifndef MIN
2920 #define MIN(a,b) ((a) > (b) ? (b) : (a))
2921#endif
2922#ifndef MAX
2923 #define MAX(a,b) ((a) > (b) ? (a) : (b))
2924#endif
2925#define SAFE_STRING(s) ((s) ? (s) : "")
2926
2927#define UNUSED_VAR(x) (void)x
2928
2929#ifdef __cplusplus
2930}
2931#endif
2932
2933#endif /* _WINDRVR_H_ */
2934
#define NULL
Definition: kpstdlib.h:269
DWORD dwDomainNum
Domain number - not used for platform devices.
Definition: windrvr.h:736
DWORD dwSlotFunc
Slot number on the bus - not used for platform devices.
Definition: windrvr.h:739
WD_BUS_TYPE dwBusType
Bus Type: WD_BUS_PCI/ISA/EISA/PLATFORM.
Definition: windrvr.h:735
DWORD dwBusNum
Bus number - not used for platform devices.
Definition: windrvr.h:738
DWORD hCard
Handle of card.
Definition: windrvr.h:915
DWORD dwOptions
Should be zero.
Definition: windrvr.h:861
DWORD hCard
Handle of card.
Definition: windrvr.h:860
WD_CARD Card
Card to register.
Definition: windrvr.h:857
DWORD fCheckLockOnly
Only check if card is lockable, return hCard=1 if OK.
Definition: windrvr.h:858
DWORD dwItems
Definition: windrvr.h:850
DWORD dwSection
Definition: windrvr.h:1134
DWORD dwLevel
Definition: windrvr.h:1133
DWORD dwCmd
DEBUG_COMMAND: DEBUG_STATUS, DEBUG_SET_FILTER, DEBUG_SET_BUFFER, DEBUG_CLEAR_BUFFER.
Definition: windrvr.h:1112
DWORD dwLevel
DEBUG_LEVEL: D_ERROR, D_WARN..., or D_OFF to turn debugging off.
Definition: windrvr.h:1115
DWORD dwSection
DEBUG_SECTION: for all sections in driver: S_ALL for partial sections: S_IO, S_MEM....
Definition: windrvr.h:1117
DWORD dwLevelMessageBox
DEBUG_LEVEL to print in a message box.
Definition: windrvr.h:1119
DWORD dwBufferSize
size of buffer in kernel
Definition: windrvr.h:1121
DMA_ADDR pPhysicalAddr
Physical address of page.
Definition: windrvr.h:542
DWORD dwBytes
Size of page.
Definition: windrvr.h:543
DWORD hDma
Handle of DMA buffer.
Definition: windrvr.h:551
DMA_TRANSACTION_CALLBACK DMATransactionCallback
Definition: windrvr.h:570
DWORD dwSubGroupID
Might be identical to same process running twice (User implementation dependant)
Definition: windrvr.h:1636
DWORD hIpc
Acts as a unique identifier.
Definition: windrvr.h:1635
DWORD dwSenderUID
Definition: windrvr.h:1640
WD_PCI_ID cardId
Definition: windrvr.h:1626
WD_PCI_SLOT pciSlot
Definition: windrvr.h:1627
DWORD dwUniqueID
Definition: windrvr.h:1631
DWORD dwEventType
WD_EVENT_TYPE.
Definition: windrvr.h:1616
DWORD dwEventId
Definition: windrvr.h:1619
DWORD hKernelPlugIn
Definition: windrvr.h:1620
DWORD dwOptions
WD_EVENT_OPTION.
Definition: windrvr.h:1621
DWORD hEvent
Definition: windrvr.h:1615
DWORD dwAction
WD_EVENT_ACTION.
Definition: windrvr.h:1618
DWORD hInterrupt
Handle of interrupt.
Definition: windrvr.h:676
DWORD dwOptions
Interrupt options: can be INTERRUPT_CMD_COPY.
Definition: windrvr.h:677
WD_TRANSFER * Cmd
Commands to do on interrupt.
Definition: windrvr.h:679
DWORD hIpc
Returned from WD_IpcRegister()
Definition: windrvr.h:875
DWORD dwSubGroupID
Identifier of the processes type.
Definition: windrvr.h:870
DWORD dwGroupID
Unique identifier of the processes group for discarding unrelated process.
Definition: windrvr.h:871
DWORD dwOptions
Reserved for future use; set to 0.
Definition: windrvr.h:881
WD_IPC_PROCESS procInfo
Definition: windrvr.h:880
DWORD dwNumProcs
Result processes.
Definition: windrvr.h:891
DWORD hIpc
Returned from WD_IpcRegister()
Definition: windrvr.h:888
DWORD dwOptions
WD_IPC_SUBGROUP_MULTICAST, WD_IPC_UID_UNICAST, WD_IPC_MULTICAST.
Definition: windrvr.h:905
DWORD dwMsgID
Definition: windrvr.h:909
DWORD dwRecipientID
used only on WD_IPC_UNICAST
Definition: windrvr.h:908
UINT64 qwMsgData
Definition: windrvr.h:910
DWORD hIpc
Returned from WD_IpcRegister()
Definition: windrvr.h:904
DWORD dwBar
PCI Base Address Register number.
Definition: windrvr.h:825
KPTR pAddr
Beginning of I/O address.
Definition: windrvr.h:823
DWORD dwBytes
I/O range.
Definition: windrvr.h:824
ITEM_IO.
Definition: windrvr.h:822
DWORD hInterrupt
Handle of the installed interrupt; returned by WD_CardRegister()
Definition: windrvr.h:837
DWORD dwOptions
Interrupt options: INTERRUPT_LATCHED – latched INTERRUPT_LEVEL_SENSITIVE – level sensitive INTERRUPT_...
Definition: windrvr.h:832
DWORD dwInterrupt
Number of interrupt to install.
Definition: windrvr.h:831
DWORD dwReserved1
For internal use.
Definition: windrvr.h:839
KPTR pReserved2
For internal use.
Definition: windrvr.h:840
ITEM_INTERRUPT.
Definition: windrvr.h:830
UPTR pUserDirectAddr
User-mode mapping of the physical base address, for direct user read/write transfers; returned by WD_...
Definition: windrvr.h:809
PHYS_ADDR pPhysicalAddr
Physical address on card.
Definition: windrvr.h:803
KPTR pTransAddr
Kernel-mode mapping of the physical base address, to be used for transfer commands; returned by WD_Ca...
Definition: windrvr.h:805
UINT64 qwBytes
Address range.
Definition: windrvr.h:804
ITEM_MEMORY.
Definition: windrvr.h:802
DWORD fNotSharable
Definition: windrvr.h:797
DWORD item
ITEM_TYPE.
Definition: windrvr.h:796
DWORD hKerBuf
Handle of Kernel Buffer.
Definition: windrvr.h:606
KPTR pKernelAddr
Kernel address.
Definition: windrvr.h:609
DWORD dwOptions
Refer to WD_KER_BUF_OPTION.
Definition: windrvr.h:607
UINT64 qwBytes
Size of buffer.
Definition: windrvr.h:608
UPTR pUserAddr
User address.
Definition: windrvr.h:610
DWORD hKernelPlugIn
Definition: windrvr.h:1139
DWORD dwMinorVersion
Definition: windrvr.h:1821
DWORD dwMajorVersion
Definition: windrvr.h:1820
DWORD dwCapId
PCI capability ID.
Definition: windrvr.h:988
DWORD dwCapOffset
PCI capability register offset.
Definition: windrvr.h:989
WD_CARD Card
Card information.
Definition: windrvr.h:1022
WD_PCI_SLOT pciSlot
PCI slot information.
Definition: windrvr.h:1021
WD_PCI_SLOT pciSlot
PCI slot information.
Definition: windrvr.h:1045
PVOID pBuffer
Pointer to a read/write data buffer.
Definition: windrvr.h:1046
DWORD dwVendorId
Definition: windrvr.h:938
DWORD dwDeviceId
Definition: windrvr.h:939
WD_PCI_SLOT pciSlot
Scan Parameters.
Definition: windrvr.h:1001
DWORD dwOptions
Scan options – WD_PCI_SCAN_CAPS_OPTIONS; default – WD_PCI_SCAN_CAPS_BASIC.
Definition: windrvr.h:1004
DWORD dwNumCaps
Scan Results.
Definition: windrvr.h:1008
DWORD dwCapId
PCI capability ID to search for, or WD_PCI_CAP_ID_ALL to scan all PCI capabilities.
Definition: windrvr.h:1002
DWORD dwCards
Number of matching PCI cards.
Definition: windrvr.h:948
WD_PCI_ID searchId
Scan Parameters.
Definition: windrvr.h:945
DWORD dwOptions
Scan Options.
Definition: windrvr.h:955
DWORD dwBus
Bus number.
Definition: windrvr.h:931
DWORD dwFunction
Function number.
Definition: windrvr.h:933
DWORD dwSlot
Slot number.
Definition: windrvr.h:932
DWORD dwDomain
Domain number.
Definition: windrvr.h:929
WD_PCI_SLOT pciSlot
PCI slot information.
Definition: windrvr.h:1015
DWORD dwNumVFs
Number of Virtual Functions.
Definition: windrvr.h:1016
WD_CARD Card
Card information.
Definition: windrvr.h:1032
PHYS_ADDR pPhysicalAddr
Physical base address of the platform device.
Definition: windrvr.h:1027
DWORD dwCards
Number of matching PCI cards.
Definition: windrvr.h:968
PHYS_ADDR pSearchAddr
Base address to search for; 0 to ignore address.
Definition: windrvr.h:966
DWORD dwMicroSeconds
Sleep time in Micro Seconds (1/1,000,000 Second)
Definition: windrvr.h:1059
DWORD dwOptions
can be: SLEEP_NON_BUSY (10000 uSec +)
Definition: windrvr.h:1061
UINT64 Qword
Use for 64 bit transfer.
Definition: windrvr.h:632
DWORD cmdTrans
Transfer command WD_TRANSFER_CMD.
Definition: windrvr.h:619
BYTE Byte
Use for 8 bit transfer.
Definition: windrvr.h:629
UINT32 Dword
Use for 32 bit transfer.
Definition: windrvr.h:631
WORD Word
Use for 16 bit transfer.
Definition: windrvr.h:630
KPTR pPort
I/O port for transfer or kernel memory address.
Definition: windrvr.h:618
PVOID pBuffer
Use for string transfer.
Definition: windrvr.h:633
DWORD devices_num
Definition: windrvr.h:1654
DWORD applications_num
Definition: windrvr.h:1653
DWORD dwVer
Definition: windrvr.h:712
WD_BUS Bus
ITEM_BUS.
Definition: windrvr.h:842
#define WD_Close
Definition: wd_log.h:64
#define WD_Open
Definition: wd_log.h:65
unsigned int u32
Definition: wd_types.h:10
unsigned short u16
Definition: wd_types.h:9
unsigned char u8
Definition: wd_types.h:8
struct WD_BUS WD_BUS_V30
ITEM_TYPE
Definition: windrvr.h:744
@ ITEM_INTERRUPT
Interrupt.
Definition: windrvr.h:746
@ ITEM_BUS
Bus.
Definition: windrvr.h:749
@ ITEM_NONE
Definition: windrvr.h:745
@ ITEM_IO
I/O.
Definition: windrvr.h:748
@ ITEM_MEMORY
Memory.
Definition: windrvr.h:747
@ WD_IPC_UID_UNICAST
Definition: windrvr.h:897
@ WD_IPC_SUBGROUP_MULTICAST
Definition: windrvr.h:898
@ WD_IPC_MULTICAST
Definition: windrvr.h:899
@ WD_PCI_CAP_ID_ALL
Definition: windrvr.h:984
@ WD_DMA_PAGES
Definition: windrvr.h:440
struct WD_PCI_CARD_INFO WD_PCI_CARD_INFO_V118
PCI_ACCESS_RESULT
Definition: windrvr.h:1036
@ PCI_ACCESS_OK
Definition: windrvr.h:1037
@ PCI_ACCESS_ERROR
Definition: windrvr.h:1038
@ PCI_BAD_SLOT
Definition: windrvr.h:1040
@ PCI_BAD_BUS
Definition: windrvr.h:1039
WD_ITEM_MEM_OPTIONS
Definition: windrvr.h:753
@ WD_ITEM_MEM_DO_NOT_MAP_KERNEL
Skip the mapping of physical memory to the kernel address space.
Definition: windrvr.h:754
@ WD_ITEM_MEM_ALLOW_CACHE
Map physical memory as cached; applicable only to host RAM, not to local memory on the card.
Definition: windrvr.h:756
@ WD_ITEM_MEM_USER_MAP
Map physical memory from user mode, Linux only.
Definition: windrvr.h:759
@ WD_ITEM_MEM_P2P_MAP
Enable peer-to-peer memory mapping for a memory item.
Definition: windrvr.h:761
WD_GET_DEVICE_PROPERTY_OPTION
IOCTL Structures.
Definition: windrvr.h:1152
@ WD_DEVICE_USB
Definition: windrvr.h:1154
@ WD_DEVICE_PCI
Definition: windrvr.h:1153
struct WD_ITEMS WD_ITEMS_V118
struct WD_DEBUG_ADD WD_DEBUG_ADD_V503
@ SLEEP_BUSY
Definition: windrvr.h:1056
@ SLEEP_NON_BUSY
Definition: windrvr.h:1056
size_t UPTR
Definition: windrvr.h:387
#define WD_VERSION_STR_LENGTH
Definition: windrvr.h:61
struct WD_IPC_SCAN_PROCS WD_IPC_SCAN_PROCS_V121
DEBUG_LEVEL
Definition: windrvr.h:1065
@ D_ERROR
Definition: windrvr.h:1067
@ D_TRACE
Definition: windrvr.h:1070
@ D_WARN
Definition: windrvr.h:1068
@ D_INFO
Definition: windrvr.h:1069
@ D_OFF
Definition: windrvr.h:1066
struct WD_TRANSFER WD_TRANSFER_V61
unsigned short int WORD
Definition: windrvr.h:337
struct WD_KERNEL_BUFFER WD_KERNEL_BUFFER_V121
WD_KER_BUF_OPTION
Definition: windrvr.h:592
@ KER_BUF_ALLOC_NON_CONTIG
Definition: windrvr.h:598
@ KER_BUF_GET_EXISTING_BUF
Definition: windrvr.h:601
@ KER_BUF_ALLOC_CONTIG
Definition: windrvr.h:599
@ KER_BUF_ALLOC_CACHED
Definition: windrvr.h:600
@ WD_PLATFORM_CARDS
Definition: windrvr.h:958
#define WD_OpenLocal()
Definition: windrvr.h:1922
DEBUG_COMMAND
Definition: windrvr.h:1096
@ DEBUG_DUMP_SEC_ON
Definition: windrvr.h:1101
@ KERNEL_DEBUGGER_OFF
Definition: windrvr.h:1104
@ DEBUG_CLEAR_BUFFER
Definition: windrvr.h:1100
@ DEBUG_DUMP_CLOCK_OFF
Definition: windrvr.h:1106
@ DEBUG_DUMP_CLOCK_ON
Definition: windrvr.h:1105
@ KERNEL_DEBUGGER_ON
Definition: windrvr.h:1103
@ DEBUG_SET_FILTER
Definition: windrvr.h:1098
@ DEBUG_SET_BUFFER
Definition: windrvr.h:1099
@ DEBUG_CLOCK_RESET
Definition: windrvr.h:1107
@ DEBUG_STATUS
Definition: windrvr.h:1097
@ DEBUG_DUMP_SEC_OFF
Definition: windrvr.h:1102
struct WD_SLEEP WD_SLEEP_V40
#define WD_LICENSE_LENGTH
Definition: windrvr.h:716
unsigned char BYTE
Definition: windrvr.h:336
WD_ERROR_CODES
Definition: windrvr.h:1173
@ WD_INVALID_32BIT_APP
[0x20000021] Invalid 32 Bit User Application.
Definition: windrvr.h:1338
@ WD_TRY_AGAIN
[0x2000001d] Try Again.
Definition: windrvr.h:1324
@ WD_USBD_STATUS_DATA_TOGGLE_MISMATCH
[0xC0000003] HC status: Data toggle mismatch
Definition: windrvr.h:1392
@ WD_RESOURCE_OVERLAP
[0x2000000e] Resource Overlap.
Definition: windrvr.h:1242
@ WD_FAILED_KERNEL_MAPPING
[0x20000018] Failed to map memory to Kernel Space.
Definition: windrvr.h:1290
@ WD_WINDRIVER_STATUS_ERROR
[0x20000000]
Definition: windrvr.h:1177
@ WD_USBD_STATUS_UNEXPECTED_PID
[0xC0000007] HC status: Unexpected PID
Definition: windrvr.h:1404
@ WD_USBD_STATUS_REQUEST_FAILED
[0x80000500] Returned by USBD if it cannot complete a URB request.
Definition: windrvr.h:1471
@ WD_USBD_STATUS_INTERFACE_NOT_FOUND
[0xC0004000] USBD: Interface not found
Definition: windrvr.h:1528
@ WD_USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR
[0xC0000F00] USBD: Invalid configuration descriptor
Definition: windrvr.h:1509
@ WD_TOO_MANY_HANDLES
[0x20000022] Too Many Handles.
Definition: windrvr.h:1344
@ WD_USBD_STATUS_ISO_NOT_ACCESSED_LATE
[0xC0050000] The packet was not sent because the client submitted it too late to transmit:
Definition: windrvr.h:1563
@ WD_USBD_STATUS_INVALID_URB_FUNCTION
[0x80000200] USBD: Invalid URB function
Definition: windrvr.h:1456
@ WD_USBD_STATUS_NOT_ACCESSED
[0xC000000F] HC status: Not accessed
Definition: windrvr.h:1423
@ WD_INTERRUPT_NOT_ENABLED
[0x2000000d] Interrupt not enabled.
Definition: windrvr.h:1235
@ WD_USBD_STATUS_ERROR_BUSY
[0x80000400] Returned if client driver attempts to close an endpoint/interface or configuration with ...
Definition: windrvr.h:1465
@ WD_USBD_STATUS_XACT_ERROR
[0xC0000011] HC status: The host controller has set the Transaction Error (XactErr) bit in the transf...
Definition: windrvr.h:1429
@ WD_MORE_PROCESSING_REQUIRED
[0xC0000016] More Processing Required.
Definition: windrvr.h:1363
@ WD_UNKNOWN_PIPE_TYPE
[0x20000006] Obsolete.
Definition: windrvr.h:1202
@ WD_INVALID_HANDLE
[0x20000001] Invalid WinDriver handle.
Definition: windrvr.h:1179
@ WD_USBD_STATUS_DATA_UNDERRUN
[0xC0000009] HC status: Data underrrun
Definition: windrvr.h:1410
@ WD_OPERATION_FAILED
[0x20000020] Operation Failed.
Definition: windrvr.h:1334
@ WD_USB_DESCRIPTOR_ERROR
[0x20000012] USB Descriptor Error.
Definition: windrvr.h:1260
@ WD_USBD_STATUS_RESERVED1
[0xC000000A] HC status: Reserved1
Definition: windrvr.h:1413
@ WD_USBD_STATUS_RESERVED2
[0xC000000B] HC status: Reserved1
Definition: windrvr.h:1415
@ WD_USBD_STATUS_NOT_SUPPORTED
[0xC0000E00] Returned for APIS not supported/implemented
Definition: windrvr.h:1506
@ WD_USBD_STATUS_DEVICE_GONE
[0xC0007000] USBD: Device Gone
Definition: windrvr.h:1539
@ WD_USBD_STATUS_ISO_NOT_ACCESSED_BY_HW
Extended isochronous error codes returned by USBD.
Definition: windrvr.h:1553
@ WD_USBD_STATUS_DATA_BUFFER_ERROR
[0xC0000013] HC status: Data buffer error
Definition: windrvr.h:1438
@ WD_USBD_STATUS_ISO_TD_ERROR
[0xC0030000] Controller reported an error in the TD.
Definition: windrvr.h:1557
@ WD_USBD_STATUS_DEV_NOT_RESPONDING
[0xC0000005] HC status: Device not responding
Definition: windrvr.h:1398
@ WD_USBD_STATUS_FIFO
[0xC0000010] HC status: FIFO
Definition: windrvr.h:1425
@ WD_NO_LICENSE
0x[20000009] No License.
Definition: windrvr.h:1209
@ WD_INVALID_PARAMETER
[0x2000001b] Invalid Parameter.
Definition: windrvr.h:1314
@ WD_WRONG_UNIQUE_ID
[0x20000010] Wrong unique ID (USB).
Definition: windrvr.h:1251
@ WD_USBD_STATUS_INVALID_PARAMETER
[0x80000300] USBD: Invalid parameter
Definition: windrvr.h:1459
@ WD_USBD_STATUS_BAD_START_FRAME
[0x80000A00] Returned if the requested start frame is not within
Definition: windrvr.h:1489
@ WD_USBD_STATUS_SUCCESS
[0x00000000] Success
Definition: windrvr.h:1373
@ WD_USBD_STATUS_ERROR
[0x80000000] Error
Definition: windrvr.h:1376
@ WD_DATA_MISMATCH
[0x20000008] Data Mismatch.
Definition: windrvr.h:1205
@ WD_NO_RESOURCES_ON_DEVICE
[0x20000019] No Resources On Device.
Definition: windrvr.h:1300
@ WD_NO_EVENTS
[0x2000001a] No Events.
Definition: windrvr.h:1310
@ WD_USBD_STATUS_NO_BANDWIDTH
[0x80000700] Returned when there is not enough bandwidth available
Definition: windrvr.h:1477
@ WD_USBD_STATUS_BUFFER_UNDERRUN
[0xC000000D] HC status: Buffer underrun
Definition: windrvr.h:1420
@ WD_NOT_IMPLEMENTED
[0x2000000a] Function not implemented.
Definition: windrvr.h:1215
@ WD_READ_WRITE_CONFLICT
[0x20000003] Request to read from an OUT (write) pipe or request to write to an IN (read) pipe
Definition: windrvr.h:1192
@ WD_USBD_STATUS_FRAME_CONTROL_NOT_OWNED
[0xC0000D00] Returned by USBD if the caller does not own frame length control and attempts to release...
Definition: windrvr.h:1501
@ WD_DEVICE_NOT_FOUND
[0x2000000f] Device not found.
Definition: windrvr.h:1248
@ WD_NO_DEVICE_OBJECT
[0x20000023] No Device Object.
Definition: windrvr.h:1350
@ WD_USBD_STATUS_CANCELED
[0xC0010000] USBD: Transfer canceled
Definition: windrvr.h:1443
@ WD_INCORRECT_VERSION
[0x2000001c] Incorrect version.
Definition: windrvr.h:1318
@ WD_USBD_STATUS_PENDING
[0x40000000] Operation pending
Definition: windrvr.h:1374
@ WD_USBD_STATUS_TIMEOUT
[0xC0006000] USBD: Timeout
Definition: windrvr.h:1536
@ WD_USBD_STATUS_ISOCH_REQUEST_FAILED
[0xC0000B00] Returned by HCD (Host Controller Driver) if all packets in an isochronous transfer compl...
Definition: windrvr.h:1493
@ WD_FAILED_ENABLING_INTERRUPT
[0x2000000c] Failed Enabling Interrupts.
Definition: windrvr.h:1224
@ WD_KERPLUG_FAILURE
[0x2000000b] Kernel PlugIn failure.
Definition: windrvr.h:1220
@ WD_WINDRIVER_NOT_FOUND
[0x2000001e] Obsolete
Definition: windrvr.h:1328
@ WD_SET_CONFIGURATION_FAILED
[0x20000013] Set Configuration Failed (USB).
Definition: windrvr.h:1268
@ WD_USBD_STATUS_CRC
[0xC0000001] HC status: CRC
Definition: windrvr.h:1388
@ WD_USBD_STATUS_ENDPOINT_HALTED
Returned by HCD (Host Controller Driver) if a transfer is submitted to an endpoint that is stalled:
Definition: windrvr.h:1449
@ WD_USBD_STATUS_INTERNAL_HC_ERROR
[0x80000800] Generic HC (Host Controller) error:
Definition: windrvr.h:1480
@ WD_FAILED_USER_MAPPING
[0x20000017] Failed to map memory to User Space.
Definition: windrvr.h:1281
@ WD_USBD_STATUS_INVALID_PIPE_HANDLE
[80000600] USBD: Invalid pipe handle
Definition: windrvr.h:1473
@ WD_STATUS_SUCCESS
[0] Operation completed successfully
Definition: windrvr.h:1174
@ WD_USBD_STATUS_INAVLID_PIPE_FLAGS
[0xC0005000] USBD: Invalid pipe flags
Definition: windrvr.h:1532
@ WD_INVALID_IOCTL
[0x2000001f] Invalid IOCTL.
Definition: windrvr.h:1329
@ WD_TIME_OUT_EXPIRED
[0x20000015] Time Out Expired.
Definition: windrvr.h:1274
@ WD_SYSTEM_INTERNAL_ERROR
[0x20000007] Internal System Error
Definition: windrvr.h:1203
@ WD_USBD_STATUS_BUFFER_TOO_SMALL
[0xC0003000] USBD: Buffer too small
Definition: windrvr.h:1524
@ WD_USBD_STATUS_INSUFFICIENT_RESOURCES
[0xC0001000] USBD: Insufficient resources
Definition: windrvr.h:1515
@ WD_USBD_STATUS_DATA_OVERRUN
[0xC0000008] HC status: Data overrun
Definition: windrvr.h:1407
@ WD_ZERO_PACKET_SIZE
[0x20000004] Maximum packet size is zero
Definition: windrvr.h:1195
@ WD_USBD_STATUS_ERROR_SHORT_TRANSFER
[0x80000900] Returned when a short packet terminates the transfer
Definition: windrvr.h:1484
@ WD_USBD_STATUS_STALL_PID
[0xC0000004] HC status: PID stall
Definition: windrvr.h:1396
@ WD_USBD_STATUS_PID_CHECK_FAILURE
[0xC0000006] HC status: PID check failed
Definition: windrvr.h:1401
@ WD_USBD_STATUS_ISO_NA_LATE_USBPORT
[0xC0040000] The packet was submitted in time by the client but
Definition: windrvr.h:1560
@ WD_CANT_OBTAIN_PDO
[0x20000014] Obsolete
Definition: windrvr.h:1273
@ WD_USBD_STATUS_BABBLE_DETECTED
[0xC0000012] HC status: Babble detected
Definition: windrvr.h:1435
@ WD_USBD_STATUS_HALTED
[0xC0000000] Halted
Definition: windrvr.h:1377
@ WD_INSUFFICIENT_RESOURCES
[0x20000005] Insufficient resources.
Definition: windrvr.h:1197
@ WD_USBD_STATUS_FRAME_CONTROL_OWNED
[0xC0000C00] Returned by USBD if the frame length control for a given
Definition: windrvr.h:1497
@ WD_USBD_STATUS_BTSTUFF
[0xC0000002] HC status: Bit stuffing
Definition: windrvr.h:1390
@ WD_USBD_STATUS_BUFFER_OVERRUN
[0xC000000C] HC status: Buffer overrun
Definition: windrvr.h:1417
@ WD_USBD_STATUS_SET_CONFIG_FAILED
[0xC0002000] USBD: Set configuration failed
Definition: windrvr.h:1519
@ WD_IRP_CANCELED
[0x20000016] IRP Cancelled.
Definition: windrvr.h:1278
@ WD_INVALID_PIPE_NUMBER
[0x20000002] USB: Invalid Pipe Number.
Definition: windrvr.h:1188
@ WD_OPERATION_ALREADY_DONE
[0x20000011] Operation Already Done.
Definition: windrvr.h:1254
@ WD_USBD_STATUS_STATUS_NOT_MAPPED
[0xC0008000] USBD: Status not mapped
Definition: windrvr.h:1542
@ WD_STATUS_INVALID_WD_HANDLE
[0xffffffff]
Definition: windrvr.h:1175
@ WD_USBD_STATUS_NO_MEMORY
[0x80000100] USBD: Out of memory
Definition: windrvr.h:1453
DEBUG_SECTION
Definition: windrvr.h:1074
@ S_P2PDMA
Definition: windrvr.h:1092
@ S_MISC
Definition: windrvr.h:1081
@ S_IO
Definition: windrvr.h:1076
@ S_PLATFORM
Definition: windrvr.h:1091
@ S_DMA
Definition: windrvr.h:1080
@ S_LICENSE
Definition: windrvr.h:1082
@ S_EVENT
Definition: windrvr.h:1088
@ S_INT
Definition: windrvr.h:1078
@ S_USB
Definition: windrvr.h:1086
@ S_ALL
Definition: windrvr.h:1075
@ S_KER_PLUG
Definition: windrvr.h:1087
@ S_MEM
Definition: windrvr.h:1077
@ S_KER_BUF
Definition: windrvr.h:1090
@ S_KER_DRV
Definition: windrvr.h:1085
@ S_PCI
Definition: windrvr.h:1079
@ S_PNP
Definition: windrvr.h:1083
@ S_IPC
Definition: windrvr.h:1089
@ S_CARD_REG
Definition: windrvr.h:1084
struct WD_VERSION WD_VERSION_V30
struct WD_LICENSE WD_LICENSE_V122
WD_PCI_SCAN_OPTIONS
Definition: windrvr.h:975
@ WD_PCI_SCAN_BY_TOPOLOGY
Definition: windrvr.h:977
@ WD_PCI_SCAN_DEFAULT
Definition: windrvr.h:976
@ WD_PCI_SCAN_INCLUDE_DOMAINS
Definition: windrvr.h:979
@ WD_PCI_SCAN_REGISTERED
Definition: windrvr.h:978
WD_TRANSFER_CMD
IN WD_TRANSFER_CMD and WD_Transfer() DWORD stands for 32 bits and QWORD is 64 bit.
Definition: windrvr.h:398
@ WM_SWORD
Write memory string word.
Definition: windrvr.h:434
@ WM_SBYTE
Write memory string byte.
Definition: windrvr.h:433
@ RP_SDWORD
Read port string dword.
Definition: windrvr.h:414
@ WM_BYTE
Write memory byte.
Definition: windrvr.h:424
@ WM_SQWORD
Write memory string quad word.
Definition: windrvr.h:437
@ RM_DWORD
Read memory dword.
Definition: windrvr.h:423
@ WP_DWORD
Write port dword.
Definition: windrvr.h:408
@ RP_BYTE
Read port byte.
Definition: windrvr.h:403
@ WM_SDWORD
Write memory string dword.
Definition: windrvr.h:435
@ RM_WORD
Read memory word.
Definition: windrvr.h:422
@ RM_SBYTE
Read memory string byte.
Definition: windrvr.h:430
@ WP_SQWORD
Write port string qword.
Definition: windrvr.h:419
@ RM_BYTE
Read memory byte.
Definition: windrvr.h:421
@ WP_SBYTE
Write port string byte.
Definition: windrvr.h:415
@ WP_SWORD
Write port string word.
Definition: windrvr.h:416
@ RM_SWORD
Read memory string word.
Definition: windrvr.h:431
@ CMD_MASK
Interrupt Mask.
Definition: windrvr.h:401
@ WM_DWORD
Write memory dword.
Definition: windrvr.h:426
@ CMD_NONE
No command.
Definition: windrvr.h:399
@ RP_DWORD
Read port dword.
Definition: windrvr.h:405
@ CMD_END
End command.
Definition: windrvr.h:400
@ WP_BYTE
Write port byte.
Definition: windrvr.h:406
@ RP_QWORD
Read port qword.
Definition: windrvr.h:409
@ WM_QWORD
Write memory qword.
Definition: windrvr.h:428
@ RM_SDWORD
Read memory string dword.
Definition: windrvr.h:432
@ RM_QWORD
Read memory qword.
Definition: windrvr.h:427
@ WP_WORD
Write port word.
Definition: windrvr.h:407
@ WP_SDWORD
Write port string dword.
Definition: windrvr.h:417
@ RM_SQWORD
Read memory string quad word.
Definition: windrvr.h:436
@ RP_SWORD
Read port string word.
Definition: windrvr.h:413
@ WM_WORD
Write memory word.
Definition: windrvr.h:425
@ RP_SBYTE
Read port string byte.
Definition: windrvr.h:412
@ WP_QWORD
Write port qword.
Definition: windrvr.h:410
@ RP_WORD
Read port word.
Definition: windrvr.h:404
@ RP_SQWORD
Read port string qword.
Definition: windrvr.h:418
#define INVALID_HANDLE_VALUE
Definition: windrvr.h:1668
@ WD_CARD_ITEMS
Definition: windrvr.h:846
#define WD_MAX_KP_NAME_LENGTH
Definition: windrvr.h:60
#define WIN32
Definition: windrvr.h:187
#define WD_CloseLocal(h)
Definition: windrvr.h:1907
@ WD_IPC_MAX_PROCS
Definition: windrvr.h:884
WD_EVENT_OPTION
Definition: windrvr.h:1590
@ WD_ACCEPT_CONTROL
used in WD_EVENT_SEND (acknowledge)
Definition: windrvr.h:1592
@ WD_ACKNOWLEDGE
Definition: windrvr.h:1591
#define BZERO(buf)
Definition: windrvr.h:1664
WD_PCI_SCAN_CAPS_OPTIONS
Definition: windrvr.h:992
@ WD_PCI_SCAN_CAPS_BASIC
Scan basic PCI capabilities.
Definition: windrvr.h:993
@ WD_PCI_SCAN_CAPS_EXTENDED
Scan extended (PCIe) PCI capabilities.
Definition: windrvr.h:994
struct WD_DEBUG WD_DEBUG_V40
DWORD WD_BUS_TYPE
Definition: windrvr.h:731
UINT64 PHYS_ADDR
Definition: windrvr.h:391
struct WD_DEBUG_DUMP WD_DEBUG_DUMP_V40
@ MAX_TRANSFER_COMMANDS
Definition: windrvr.h:614
struct WD_PCI_SCAN_CAPS WD_PCI_SCAN_CAPS_V118
struct WD_DMA_PAGE WD_DMA_PAGE_V80
struct WD_IPC_REGISTER WD_IPC_REGISTER_V121
DWORD DLLCALLCONV check_secureBoot_enabled(void)
Checks whether the Secure Boot feature is enabled on the system.
void(DLLCALLCONV * DMA_TRANSACTION_CALLBACK)(PVOID pData)
Definition: windrvr.h:547
struct WD_PCI_SRIOV WD_PCI_SRIOV_V122
const char *DLLCALLCONV WD_DriverName(const char *sName)
Sets the name of the WinDriver kernel module, which will be used by the calling application.
unsigned __int64 UINT64
Definition: windrvr.h:318
#define REGKEY_BUFSIZE
Definition: windrvr.h:1809
@ WD_USB_HARD_RESET
Definition: windrvr.h:1659
@ WD_USB_CYCLE_PORT
Definition: windrvr.h:1660
struct WD_IPC_SEND WD_IPC_SEND_V121
@ WD_PCI_CARDS
Definition: windrvr.h:925
#define WD_PROCESS_NAME_LENGTH
Definition: windrvr.h:866
@ WD_EVENT_TYPE_IPC
Definition: windrvr.h:1609
@ WD_EVENT_TYPE_UNKNOWN
Definition: windrvr.h:1606
@ WD_EVENT_TYPE_USB
Definition: windrvr.h:1608
@ WD_EVENT_TYPE_PCI
Definition: windrvr.h:1607
@ WD_DEVICE_NAME_LENGTH
Definition: windrvr.h:959
@ INTERRUPT_MESSAGE
Message-Signaled Interrupts (MSI).
Definition: windrvr.h:650
@ INTERRUPT_CMD_RETURN_VALUE
Obsolete.
Definition: windrvr.h:649
@ INTERRUPT_LATCHED
Legacy Latched Interrupts .
Definition: windrvr.h:638
@ INTERRUPT_MESSAGE_X
Extended Message-Signaled Interrupts (MSI-X).
Definition: windrvr.h:651
@ INTERRUPT_CMD_COPY
Copy any data read in the kernel as a result of a read transfer command, and return it to the user wi...
Definition: windrvr.h:641
@ INTERRUPT_LEVEL_SENSITIVE
Legacy Level Sensitive Interrupts.
Definition: windrvr.h:639
@ INTERRUPT_EDGE_SENSITIVE
Legacy Edge Sensitive Interrupts.
Definition: windrvr.h:646
@ INTERRUPT_DONT_GET_MSI_MESSAGE
Linux Only.
Definition: windrvr.h:653
#define DLLCALLCONV
Definition: windrvr.h:32
WD_EVENT_ACTION
Definition: windrvr.h:1568
@ WD_POWER_SYSTEM_WORKING
Definition: windrvr.h:1577
@ WD_POWER_SYSTEM_SLEEPING3
Definition: windrvr.h:1580
@ WD_POWER_SYSTEM_HIBERNATE
Definition: windrvr.h:1581
@ WD_POWER_CHANGED_D0
Power states for the power management.
Definition: windrvr.h:1572
@ WD_OBSOLETE
Obsolete.
Definition: windrvr.h:1571
@ WD_POWER_SYSTEM_SLEEPING2
Definition: windrvr.h:1579
@ WD_POWER_CHANGED_D3
Definition: windrvr.h:1576
@ WD_POWER_SYSTEM_SHUTDOWN
Definition: windrvr.h:1582
@ WD_POWER_CHANGED_D2
Definition: windrvr.h:1575
@ WD_INSERT
Definition: windrvr.h:1569
@ WD_POWER_CHANGED_D1
Definition: windrvr.h:1574
@ WD_POWER_SYSTEM_SLEEPING1
Definition: windrvr.h:1578
@ WD_REMOVE
Definition: windrvr.h:1570
@ WD_IPC_UNICAST_MSG
Definition: windrvr.h:1583
@ WD_IPC_MULTICAST_MSG
Definition: windrvr.h:1584
@ WD_FORCE_CLEANUP
Definition: windrvr.h:923
@ WD_PCI_MAX_CAPS
Definition: windrvr.h:982
UINT64 DMA_ADDR
Definition: windrvr.h:390
struct WD_DMA WD_DMA_V80
DWORD WD_EVENT_TYPE
Definition: windrvr.h:1611
struct WD_PCI_SCAN_CARDS WD_PCI_SCAN_CARDS_V124
WD_DMA_OPTIONS
Definition: windrvr.h:446
@ DMA_KERNEL_BUFFER_ALLOC
The system allocates a contiguous buffer.
Definition: windrvr.h:447
@ DMA_DISABLE_MERGE_ADJACENT_PAGES
Disable merge adjacent pages.
Definition: windrvr.h:496
@ DMA_TRANSACTION
Use this flag to use the DMA transaction mechanism.
Definition: windrvr.h:491
@ DMA_TO_DEVICE
memory pages are locked to be read by device
Definition: windrvr.h:467
@ DMA_KBUF_BELOW_16M
If DMA_KERNEL_BUFFER_ALLOC is used, this will make sure it is under 16M.
Definition: windrvr.h:450
@ DMA_ALLOW_NO_HCARD
Allow memory lock without hCard.
Definition: windrvr.h:475
@ DMA_FROM_DEVICE
memory pages are locked to be written by device
Definition: windrvr.h:464
@ DMA_GET_PREALLOCATED_BUFFERS_ONLY
Windows: Try to allocate buffers from preallocated buffers pool ONLY (if none of them are available,...
Definition: windrvr.h:487
@ DMA_GET_EXISTING_BUF
Get existing buffer by hDma handle.
Definition: windrvr.h:477
@ DMA_ALLOW_64BIT_ADDRESS
Use this value for devices that support 64-bit DMA addressing.
Definition: windrvr.h:472
@ DMA_OVERRIDE_CMA_VALIDATION
Linux: Override CMA validation checks for contiguous buffer locking.
Definition: windrvr.h:500
@ DMA_P2PDMA
Enable P2P DMA.
Definition: windrvr.h:505
@ DMA_TO_FROM_DEVICE
memory pages are locked for both read and write
Definition: windrvr.h:469
@ DMA_LARGE_BUFFER
If DMA_LARGE_BUFFER is used, the maximum number of pages are dwPages, and not WD_DMA_PAGES.
Definition: windrvr.h:453
@ DMA_GPUDIRECT
Linux only.
Definition: windrvr.h:494
@ DMA_ALLOW_CACHE
Allow caching of contiguous memory.
Definition: windrvr.h:459
@ DMA_KERNEL_ONLY_MAP
Only map to kernel, dont map to user-mode.
Definition: windrvr.h:461
@ DMA_KBUF_ALLOC_SPECIFY_ADDRESS_WIDTH
When using this flag, the width of the address must be entered in the fourth byte of dwOptions and th...
Definition: windrvr.h:481
@ DMA_RESERVED_MEM
Definition: windrvr.h:479
@ WD_BUS_EISA
EISA, including ISA PnP.
Definition: windrvr.h:727
@ WD_BUS_ISA
ISA.
Definition: windrvr.h:726
@ WD_BUS_PLATFORM
Platform Device.
Definition: windrvr.h:729
@ WD_BUS_UNKNOWN
Unknown bus type.
Definition: windrvr.h:725
@ WD_BUS_PCI
PCI.
Definition: windrvr.h:728
@ WD_BUS_USB
USB.
Definition: windrvr.h:724
@ WD_MATCH_EXCLUDE
Exclude if there is a match.
Definition: windrvr.h:528
unsigned int UINT32
Definition: windrvr.h:341
#define DEBUG_USER_BUF_LEN
Definition: windrvr.h:1124
struct WD_CARD_REGISTER WD_CARD_REGISTER_V118
WD_INTERRUPT_WAIT_RESULT
Definition: windrvr.h:667
@ INTERRUPT_INTERRUPTED
Wait was interrupted before an actual hardware interrupt was received.
Definition: windrvr.h:670
@ INTERRUPT_RECEIVED
Interrupt was received.
Definition: windrvr.h:668
@ INTERRUPT_STOPPED
Interrupt was disabled during wait.
Definition: windrvr.h:669
UINT32 KPTR
Definition: windrvr.h:381
struct WD_IPC_PROCESS WD_IPC_PROCESS_V121
WD_OS_INFO DLLCALLCONV get_os_type(void)
Retrieves the type of the operating system in section.
#define PAD_TO_64(pName)
Definition: windrvr_usb.h:15