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 #define WD_PROD_NAME "WinDriver"
111 
112 #if defined(x86_64)
113 #define KERNEL_64BIT
114 #elif defined(ARM64)
115 #define KERNEL_64BIT
116 #elif defined(ARM)
117 #elif defined(x86)
118 #else
119 #error No platform is defined. Please define either x86, x86_64, ARM or ARM64.
120 #endif
121 #if (defined(x86_64) && defined (ARM64)) || \
122  (defined(x86_64) && defined (ARM)) || \
123  (defined(x86_64) && defined (x86)) || \
124  (defined(ARM64) && defined (x86)) || \
125  (defined(ARM64) && defined (ARM)) || \
126  (defined(x86) && defined(ARM))
127 #error Cannot have more than one platform defined in a WinDriver compilation.
128 #endif
129 
130 
131 #if defined(x86_64)
132  #define WD_CPU_SPEC " x86_64"
133 #elif defined(ARM)
134  #define WD_CPU_SPEC " ARM"
135 #elif defined(ARM64)
136  #define WD_CPU_SPEC " ARM64"
137 #else
138  #define WD_CPU_SPEC " X86"
139 #endif
140 
141 #if defined(WINNT)
142  #define WD_FILE_FORMAT " sys"
143 #elif defined (APPLE)
144  #define WD_FILE_FORMAT " kext"
145 #elif defined (LINUX)
146  #define WD_FILE_FORMAT " ko"
147 #endif
148 
149 #if defined(KERNEL_64BIT)
150  #define WD_DATA_MODEL " 64bit"
151 #else
152  #define WD_DATA_MODEL " 32bit"
153 #endif
154 
155 #if defined(__KERNEL__) && defined(WINNT)
156  #if (NTDDI_VERSION >= NTDDI_WIN10_VB)
157  #define WD_VER_STR_SUFFIX ""
158  #else
159  #define WD_VER_STR_SUFFIX " for Windows 10 (Build 18632 and Lower)"
160  #endif
161 #else
162  #define WD_VER_STR_SUFFIX ""
163 #endif
164 
165 #define WD_VER_STR WD_PROD_NAME " v" WD_VERSION_STR \
166  " Jungo Connectivity (c) 1997 - " COPYRIGHTS_YEAR_STR \
167  " Build Date: " __DATE__ \
168  WD_CPU_SPEC WD_DATA_MODEL WD_FILE_FORMAT WD_VER_STR_SUFFIX
169 
170 #if !defined(POSIX) && defined(LINUX)
171  #define POSIX
172 #endif
173 
174 #if !defined(UNIX) && defined(POSIX)
175  #define UNIX
176 #endif
177 
178 #if !defined(WIN32) && defined(WINNT)
179  #define WIN32
180 #endif
181 
182 #if !defined(WIN32) && !defined(UNIX) && !defined(APPLE)
183  #define WIN32
184 #endif
185 
186 #if defined(_KERNEL_MODE) && !defined(KERNEL)
187  #define KERNEL
188 #endif
189 
190 #if defined(KERNEL) && !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(LINUX) && defined(__x86_64__) && !defined(__KERNEL__)
203  /* This fixes binary compatibility with older version of GLIBC
204  * (64bit only) */
205  __asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
206 #endif
207 
208 #if defined(UNIX)
209 
210 
211  #if !defined(__P_TYPES__)
212  #define __P_TYPES__
213  #include <wd_types.h>
214 
215  typedef void VOID;
216  typedef unsigned char UCHAR;
217  typedef unsigned short USHORT;
218  typedef unsigned int UINT;
219  #if !defined (APPLE_USB)
220  typedef unsigned long ULONG;
221  #endif
222  typedef u32 BOOL;
223  typedef void *PVOID;
224  typedef unsigned char *PBYTE;
225  typedef char CHAR;
226  typedef char *PCHAR;
227  typedef unsigned short *PWORD;
228  typedef u32 DWORD, *PDWORD;
229  typedef PVOID HANDLE;
230  #endif
231  #if !defined(__KERNEL__)
232  #include <string.h>
233  #include <ctype.h>
234  #include <stdlib.h>
235  #endif
236  #ifndef TRUE
237  #define TRUE 1
238  #endif
239  #ifndef FALSE
240  #define FALSE 0
241  #endif
242  #define __cdecl
243  #define WINAPI
244 
245  #if defined(__KERNEL__)
246  #if defined(LINUX)
247  /* For _IO macros and for mapping Linux status codes
248  * to WD status codes */
249  #include <asm-generic/ioctl.h>
250  #include <asm-generic/errno.h>
251  #endif
252  #else
253  #include <unistd.h>
254  #if defined(LINUX)
255  #include <sys/ioctl.h> /* for BSD ioctl() */
256  #include <sys/mman.h>
257  #endif
258  #include <sys/types.h>
259  #include <sys/stat.h>
260  #include <fcntl.h>
261  #endif
262  typedef unsigned long long UINT64;
263  #if defined(APPLE)
264  #include <libkern/OSTypes.h>
265  #include <libkern/OSAtomic.h>
266  typedef UInt16 UINT16;
267  typedef UInt8 UINT8;
268  typedef UInt8 u8;
269  typedef UInt16 u16;
270  typedef UInt32 u32;
271  #include <IOKit/IOTypes.h>
272  #if defined(__KERNEL__)
273  typedef struct OSObject* FILEHANDLE;
274  typedef UInt32 PRCHANDLE;
275  #else
276  #include <IOKit/IOKitLib.h>
277  #endif
278  enum {
279  kWinDriverMethodSyncIoctl = 0,
280  kWinDriverNumOfMethods,
281  };
282  #if !defined(__KERNEL__)
283  #include <string.h>
284  #include <ctype.h>
285  #endif
286  #ifndef TRUE
287  #define TRUE true
288  #endif
289  #ifndef FALSE
290  #define FALSE false
291  #endif
292  #define __cdecl
293  #define WINAPI
294  #ifdef __LP64__
295  #define PTR2INT(value) ((UInt64)(value))
296  #else
297  #define PTR2INT(value) ((UInt32)(value))
298  #endif
299  #define MAC_UC_MAGIC_MASK 0xFF0000FF
300  #define MAC_UC_MAGIC_NUM 0x7E000041
301  #define MAC_UC_64BIT_APP 0x100
302 #endif
303 
304 #elif defined(WIN32)
305  #if defined(__KERNEL__)
306  #if !defined (CMAKE_WD_BUILD)
307  int sprintf(char *buffer, const char *format, ...);
308  #endif
309  #else
310  #include <windows.h>
311  #include <winioctl.h>
312  #endif
313  #define stricmp _stricmp
314  typedef unsigned __int64 UINT64;
315 #endif
316 
317 #if !defined(__KERNEL__)
318  #include <stdarg.h>
319  #if !defined(va_copy) && !defined(__va_copy)
320  #define va_copy(ap2,ap1) (ap2)=(ap1)
321  #endif
322  #if !defined(va_copy) && defined(__va_copy)
323  #define va_copy __va_copy
324  #endif
325 #endif
326 
327 #ifndef WINAPI
328  #define WINAPI
329 #endif
330 
331 #if !defined(_WINDEF_)
332  typedef unsigned char BYTE;
333  typedef unsigned short int WORD;
334 #endif
335 
336 #if !defined(_BASETSD_H_)
337  typedef unsigned int UINT32;
338 #endif
339 
340 
342 #if defined(UNIX)
343  #define PRI64 "ll"
344 #elif defined(WIN32)
345  #define PRI64 "I64"
346 #endif
347 
349 #if defined(KERNEL_64BIT)
350  #define KPRI PRI64
351  #if defined(WIN32)
352  #define UPRI KPRI
353  #else
354  #define UPRI "l"
355  #endif
356 #else
357  #define KPRI ""
358  #define UPRI "l"
359 #endif
360 
361 /*
362  * The KPTR is guaranteed to be the same size as a kernel-mode pointer
363  * The UPTR is guaranteed to be the same size as a user-mode pointer
364  */
365 #if defined(KERNEL_64BIT)
366  typedef UINT64 KPTR;
367 #else
368  typedef UINT32 KPTR;
369 #endif
370 
371 #if defined(UNIX)
372  typedef unsigned long UPTR;
373 #else
374  typedef size_t UPTR;
375 #endif
376 
377 typedef UINT64 DMA_ADDR;
379 
380 #include "windrvr_usb.h"
381 
384 typedef enum
385 {
386  CMD_NONE = 0,
387  CMD_END = 1,
388  CMD_MASK = 2,
390  RP_BYTE = 10,
391  RP_WORD = 11,
392  RP_DWORD = 12,
393  WP_BYTE = 13,
394  WP_WORD = 14,
395  WP_DWORD = 15,
396  RP_QWORD = 16,
397  WP_QWORD = 17,
399  RP_SBYTE = 20,
400  RP_SWORD = 21,
401  RP_SDWORD = 22,
402  WP_SBYTE = 23,
403  WP_SWORD = 24,
404  WP_SDWORD = 25,
405  RP_SQWORD = 26,
406  WP_SQWORD = 27,
408  RM_BYTE = 30,
409  RM_WORD = 31,
410  RM_DWORD = 32,
411  WM_BYTE = 33,
412  WM_WORD = 34,
413  WM_DWORD = 35,
414  RM_QWORD = 36,
415  WM_QWORD = 37,
417  RM_SBYTE = 40,
418  RM_SWORD = 41,
419  RM_SDWORD = 42,
420  WM_SBYTE = 43,
421  WM_SWORD = 44,
422  WM_SDWORD = 45,
423  RM_SQWORD = 46,
424  WM_SQWORD = 47
426 
427 enum { WD_DMA_PAGES = 256 };
428 
429 #ifndef DMA_BIT_MASK
430  #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
431 #endif
432 
433 typedef enum {
437  DMA_KBUF_BELOW_16M = 0x2,
440  DMA_LARGE_BUFFER = 0x4,
448  DMA_KERNEL_ONLY_MAP = 0x10,
451  DMA_FROM_DEVICE = 0x20,
454  DMA_TO_DEVICE = 0x40,
459  DMA_ALLOW_64BIT_ADDRESS = 0x80,
467 
478  DMA_TRANSACTION = 0x2000,
481  DMA_GPUDIRECT = 0x4000,
488 
489 #define DMA_ADDRESS_WIDTH_MASK 0x7f000000
490 
491 #define DMA_OPTIONS_ALL \
492  (DMA_KERNEL_BUFFER_ALLOC | DMA_KBUF_BELOW_16M | DMA_LARGE_BUFFER \
493  | DMA_ALLOW_CACHE | DMA_KERNEL_ONLY_MAP | DMA_FROM_DEVICE | DMA_TO_DEVICE \
494  | DMA_ALLOW_64BIT_ADDRESS | DMA_ALLOW_NO_HCARD | DMA_GET_EXISTING_BUF \
495  | DMA_RESERVED_MEM | DMA_KBUF_ALLOC_SPECIFY_ADDRESS_WIDTH \
496  | DMA_ADDRESS_WIDTH_MASK)
497 
498 #define DMA_DIRECTION_MASK DMA_TO_FROM_DEVICE
499 
501 #define DMA_READ_FROM_DEVICE DMA_FROM_DEVICE
502 #define DMA_WRITE_TO_DEVICE DMA_TO_DEVICE
503 
504 #define DMA_OPTIONS_ADDRESS_WIDTH_SHIFT 24
509 enum {
510  WD_MATCH_EXCLUDE = 0x1
511 };
512 
513 #ifndef PAD_TO_64
514 /* Use it to pad struct size to 64 bit, when using 32 on 64 bit applications */
515 #if defined (i386) && defined(KERNEL_64BIT)
516  #define PAD_TO_64(pName) DWORD dwPad_##pName;
517 #else
518  #define PAD_TO_64(pName)
519 #endif
520 #endif
521 
522 typedef struct
523 {
524  DMA_ADDR pPhysicalAddr;
525  DWORD dwBytes;
526  PAD_TO_64(dwBytes)
528 
529 typedef void (DLLCALLCONV * DMA_TRANSACTION_CALLBACK)(PVOID pData);
530 
531 typedef struct
532 {
533  DWORD hDma;
534  PAD_TO_64(hDma)
535 
536  PVOID pUserAddr;
537  PAD_TO_64(pUserAddr)
538 
539  KPTR pKernelAddr;
540  DWORD dwBytes;
541  DWORD dwOptions;
544  DWORD dwPages;
545  DWORD hCard;
548  /* Windows: The following 6 parameters are used for DMA transaction only */
549 
550  DMA_TRANSACTION_CALLBACK DMATransactionCallback;
551  PAD_TO_64(DMATransactionCallback)
552 
553  PVOID DMATransactionCallbackCtx;
554  PAD_TO_64(DMATransactionCallbackCtx)
555 
556  DWORD dwAlignment;
557  DWORD dwMaxTransferSize;
558  DWORD dwTransferElementSize;
559  DWORD dwBytesTransferred;
562 } WD_DMA, WD_DMA_V80;
563 
564 typedef enum {
565  /* KER_BUF_ALLOC_NON_CONTIG and KER_BUF_GET_EXISTING_BUF options are valid
566  * only as part of "WinDriver for Server" API and require
567  * "WinDriver for Server" license.
568  * @note "WinDriver for Server" APIs are included in WinDriver evaluation
569  * version. */
571  KER_BUF_ALLOC_CONTIG = 0x0002,
572  KER_BUF_ALLOC_CACHED = 0x0004,
575 
576 typedef struct
577 {
578  DWORD hKerBuf;
579  DWORD dwOptions;
580  UINT64 qwBytes;
581  KPTR pKernelAddr;
582  UPTR pUserAddr;
583  PAD_TO_64(pUserAddr)
585 
586 typedef struct
587 {
588  KPTR pPort;
589  DWORD cmdTrans;
591  /* Parameters used for string transfers: */
592  DWORD dwBytes;
593  DWORD fAutoinc;
595  DWORD dwOptions;
596  union
597  {
598  BYTE Byte;
599  WORD Word;
600  UINT32 Dword;
601  UINT64 Qword;
602  PVOID pBuffer;
603  } Data;
605 
606 enum {
607  INTERRUPT_LATCHED = 0x00,
610  INTERRUPT_CMD_COPY = 0x02,
615  INTERRUPT_CE_INT_ID = 0x04,
617  INTERRUPT_MESSAGE = 0x10,
618  INTERRUPT_MESSAGE_X = 0x20,
622 };
623 
624 typedef struct
625 {
626  DWORD hKernelPlugIn;
627  DWORD dwMessage;
628  PVOID pData;
629  PAD_TO_64(pData)
630  DWORD dwResult;
631  PAD_TO_64(dwResult)
633 
634 typedef enum {
635  INTERRUPT_RECEIVED = 0,
640 
641 typedef struct
642 {
643  DWORD hInterrupt;
644  DWORD dwOptions;
646  WD_TRANSFER *Cmd;
647  PAD_TO_64(Cmd)
648  DWORD dwCmds;
649  PAD_TO_64(dwCmds)
650 
651  /* For WD_IntEnable(): */
652  WD_KERNEL_PLUGIN_CALL kpCall;
653  DWORD fEnableOk;
656  /* For WD_IntWait() and WD_IntCount(): */
657  DWORD dwCounter;
658  DWORD dwLost;
659  DWORD fStopped;
660  DWORD dwLastMessage;
661  DWORD dwEnabledIntType;
663 
664 typedef struct
665 {
666  DWORD dwVer;
669 
670 #define WD_LICENSE_LENGTH 3072
671 typedef struct
672 {
673  CHAR cLicense[WD_LICENSE_LENGTH];
675 
676 enum
677 {
678  WD_BUS_USB = (int)0xfffffffe,
680  WD_BUS_ISA = 1,
682  WD_BUS_PCI = 5,
683 };
684 typedef DWORD WD_BUS_TYPE;
685 
686 typedef struct
687 {
688  WD_BUS_TYPE dwBusType;
689  DWORD dwDomainNum;
690  DWORD dwBusNum;
691  DWORD dwSlotFunc;
692 } WD_BUS, WD_BUS_V30;
693 
694 typedef enum
695 {
697  ITEM_INTERRUPT = 1,
699  ITEM_IO = 3,
700  ITEM_BUS = 5
701 } ITEM_TYPE;
702 
703 typedef enum
704 {
710  WD_ITEM_MEM_USER_MAP = 0x4,
713 
714 typedef struct
715 {
716  DWORD item;
717  DWORD fNotSharable;
718  union I
719  {
721  struct Mem
722  {
723  PHYS_ADDR pPhysicalAddr;
724  UINT64 qwBytes;
725  KPTR pTransAddr;
729  UPTR pUserDirectAddr;
733  PAD_TO_64(pUserDirectAddr)
734  DWORD dwBar;
735  DWORD dwOptions;
737  KPTR pReserved;
738  } Mem;
739 
741  struct IO
742  {
743  KPTR pAddr;
744  DWORD dwBytes;
745  DWORD dwBar;
746  } IO;
747 
749  struct Int
750  {
751  DWORD dwInterrupt;
752  DWORD dwOptions;
757  DWORD hInterrupt;
759  DWORD dwReserved1;
760  KPTR pReserved2;
761  } Int;
762  WD_BUS Bus;
763  } I;
765 
766 enum { WD_CARD_ITEMS = 128 };
767 
768 typedef struct
769 {
770  DWORD dwItems;
771  PAD_TO_64(dwItems)
774 
775 typedef struct
776 {
777  WD_CARD Card;
778  DWORD fCheckLockOnly;
780  DWORD hCard;
781  DWORD dwOptions;
782  CHAR cName[32];
783  CHAR cDescription[100];
785 
786 #define WD_PROCESS_NAME_LENGTH 128
787 typedef struct
788 {
789  CHAR cProcessName[WD_PROCESS_NAME_LENGTH];
790  DWORD dwSubGroupID;
791  DWORD dwGroupID;
795  DWORD hIpc;
797 
798 typedef struct
799 {
800  WD_IPC_PROCESS procInfo;
801  DWORD dwOptions;
803 
804 enum { WD_IPC_MAX_PROCS = 0x40 };
805 
806 typedef struct
807 {
808  DWORD hIpc;
811  DWORD dwNumProcs;
814 
815 enum
816 {
817  WD_IPC_UID_UNICAST = 0x1,
820 };
821 
822 typedef struct
823 {
824  DWORD hIpc;
825  DWORD dwOptions;
828  DWORD dwRecipientID;
829  DWORD dwMsgID;
830  UINT64 qwMsgData;
832 
833 typedef struct
834 {
835  DWORD hCard;
836  PAD_TO_64(hCard)
837  WD_TRANSFER *Cmd;
838  PAD_TO_64(Cmd)
839  DWORD dwCmds;
840  DWORD dwOptions;
842 
843 enum { WD_FORCE_CLEANUP = 0x1 };
844 
845 enum { WD_PCI_CARDS = 256 };
847 typedef struct
848 {
849  DWORD dwDomain;
851  DWORD dwBus;
852  DWORD dwSlot;
853  DWORD dwFunction;
854 } WD_PCI_SLOT;
855 
856 typedef struct
857 {
858  DWORD dwVendorId;
859  DWORD dwDeviceId;
860 } WD_PCI_ID;
861 
862 typedef struct
863 {
865  WD_PCI_ID searchId;
868  DWORD dwCards;
871  WD_PCI_ID cardId[WD_PCI_CARDS];
875  DWORD dwOptions;
877 
878 typedef enum {
884 
885 enum { WD_PCI_MAX_CAPS = 50 };
886 
887 enum { WD_PCI_CAP_ID_ALL = 0x0 };
888 
889 typedef struct
890 {
891  DWORD dwCapId;
892  DWORD dwCapOffset;
894 
895 typedef enum {
900 
901 typedef struct
902 {
904  WD_PCI_SLOT pciSlot;
905  DWORD dwCapId;
907  DWORD dwOptions;
911  DWORD dwNumCaps;
912  WD_PCI_CAP pciCaps[WD_PCI_MAX_CAPS];
915 
916 typedef struct
917 {
918  WD_PCI_SLOT pciSlot;
919  DWORD dwNumVFs;
921 
922 typedef struct
923 {
924  WD_PCI_SLOT pciSlot;
925  WD_CARD Card;
927 
928 typedef enum
929 {
930  PCI_ACCESS_OK = 0,
932  PCI_BAD_BUS = 2,
935 
936 typedef struct
937 {
938  WD_PCI_SLOT pciSlot;
939  PVOID pBuffer;
940  PAD_TO_64(pBuffer)
941 
942  DWORD dwOffset;
943  DWORD dwBytes;
945  DWORD fIsRead;
946  DWORD dwResult;
948 
949 enum { SLEEP_BUSY = 0, SLEEP_NON_BUSY = 1 };
950 typedef struct
951 {
952  DWORD dwMicroSeconds;
954  DWORD dwOptions;
956 
957 typedef enum
958 {
959  D_OFF = 0,
960  D_ERROR = 1,
961  D_WARN = 2,
962  D_INFO = 3,
964 } DEBUG_LEVEL;
965 
966 typedef enum
967 {
968  S_ALL = (int)0xffffffff,
969  S_IO = 0x00000008,
970  S_MEM = 0x00000010,
971  S_INT = 0x00000020,
972  S_PCI = 0x00000040,
973  S_DMA = 0x00000080,
974  S_MISC = 0x00000100,
975  S_LICENSE = 0x00000200,
976  S_PNP = 0x00001000,
977  S_CARD_REG = 0x00002000,
978  S_KER_DRV = 0x00004000,
979  S_USB = 0x00008000,
980  S_KER_PLUG = 0x00010000,
981  S_EVENT = 0x00020000,
982  S_IPC = 0x00040000,
983  S_KER_BUF = 0x00080000,
984 } DEBUG_SECTION;
985 
986 typedef enum
987 {
999 } DEBUG_COMMAND;
1001 typedef struct
1002 {
1003  DWORD dwCmd;
1005  /* used for DEBUG_SET_FILTER */
1006  DWORD dwLevel;
1008  DWORD dwSection;
1010  DWORD dwLevelMessageBox;
1011  /* used for DEBUG_SET_BUFFER */
1012  DWORD dwBufferSize;
1014 
1015 #define DEBUG_USER_BUF_LEN 2048
1016 typedef struct
1017 {
1018  CHAR cBuffer[DEBUG_USER_BUF_LEN];
1021 typedef struct
1023  CHAR pcBuffer[256];
1024  DWORD dwLevel;
1025  DWORD dwSection;
1028 typedef struct
1030  DWORD hKernelPlugIn;
1031  CHAR cDriverName[WD_MAX_KP_NAME_LENGTH];
1032  CHAR cDriverPath[WD_MAX_KP_NAME_LENGTH];
1036  PAD_TO_64(hKernelPlugIn) /* 64 bit app as a 4 byte hole here */
1037  PVOID pOpenData;
1038  PAD_TO_64(pOpenData)
1040 
1042 typedef enum
1044  WD_DEVICE_PCI = 0x1,
1047 
1048 typedef struct
1050  union
1051  {
1052  HANDLE hDevice;
1053  PAD_TO_64(hDevice)
1054  DWORD dwUniqueID;
1055  } h;
1056  PVOID pBuf;
1058  DWORD dwBytes;
1059  DWORD dwProperty;
1060  DWORD dwOptions;
1063 typedef enum {
1065  WD_STATUS_INVALID_WD_HANDLE = (int)0xffffffff,
1067  WD_WINDRIVER_STATUS_ERROR = 0x20000000L,
1069  WD_INVALID_HANDLE = 0x20000001L,
1078  WD_INVALID_PIPE_NUMBER = 0x20000002L,
1082  WD_READ_WRITE_CONFLICT = 0x20000003L,
1085  WD_ZERO_PACKET_SIZE = 0x20000004L,
1087  WD_INSUFFICIENT_RESOURCES = 0x20000005L,
1092  WD_UNKNOWN_PIPE_TYPE = 0x20000006L,
1093  WD_SYSTEM_INTERNAL_ERROR = 0x20000007L,
1095  WD_DATA_MISMATCH = 0x20000008L,
1099  WD_NO_LICENSE = 0x20000009L,
1105  WD_NOT_IMPLEMENTED = 0x2000000aL,
1110  WD_KERPLUG_FAILURE = 0x2000000bL,
1114  WD_FAILED_ENABLING_INTERRUPT = 0x2000000cL,
1125  WD_INTERRUPT_NOT_ENABLED = 0x2000000dL,
1132  WD_RESOURCE_OVERLAP = 0x2000000eL,
1138  WD_DEVICE_NOT_FOUND = 0x2000000fL,
1141  WD_WRONG_UNIQUE_ID = 0x20000010L,
1144  WD_OPERATION_ALREADY_DONE = 0x20000011L,
1150  WD_USB_DESCRIPTOR_ERROR = 0x20000012L,
1158  WD_SET_CONFIGURATION_FAILED = 0x20000013L,
1163  WD_CANT_OBTAIN_PDO = 0x20000014L,
1164  WD_TIME_OUT_EXPIRED = 0x20000015L,
1168  WD_IRP_CANCELED = 0x20000016L,
1171  WD_FAILED_USER_MAPPING = 0x20000017L,
1180  WD_FAILED_KERNEL_MAPPING = 0x20000018L,
1190  WD_NO_RESOURCES_ON_DEVICE = 0x20000019L,
1200  WD_NO_EVENTS = 0x2000001aL,
1204  WD_INVALID_PARAMETER = 0x2000001bL,
1208  WD_INCORRECT_VERSION = 0x2000001cL,
1214  WD_TRY_AGAIN = 0x2000001dL,
1218  WD_WINDRIVER_NOT_FOUND = 0x2000001eL,
1219  WD_INVALID_IOCTL = 0x2000001fL,
1224  WD_OPERATION_FAILED = 0x20000020L,
1228  WD_INVALID_32BIT_APP = 0x20000021L,
1234  WD_TOO_MANY_HANDLES = 0x20000022L,
1240  WD_NO_DEVICE_OBJECT = 0x20000023L,
1253  WD_MORE_PROCESSING_REQUIRED = (int)0xC0000016L,
1261  /* The following status codes are returned by USBD:
1262  USBD status types: */
1263  WD_USBD_STATUS_SUCCESS = 0x00000000L,
1264  WD_USBD_STATUS_PENDING = 0x40000000L,
1266  WD_USBD_STATUS_ERROR = (int)0x80000000L,
1267  WD_USBD_STATUS_HALTED = (int)0xC0000000L,
1269  /* USBD status codes: */
1270  /* @note The following status codes are comprised of one of the status
1271  * types above and an error code [i.e. 0xXYYYYYYYL - where: X = status type;
1272  * YYYYYYY = error code].
1273  * The same error codes may also appear with one of the other status types
1274  * as well. */
1275 
1276  /* HC (Host Controller) status codes.
1277  @note These status codes use the WD_USBD_STATUS_HALTED status type]: */
1278  WD_USBD_STATUS_CRC = (int)0xC0000001L,
1280  WD_USBD_STATUS_BTSTUFF = (int)0xC0000002L,
1286  WD_USBD_STATUS_STALL_PID = (int)0xC0000004L,
1288  WD_USBD_STATUS_DEV_NOT_RESPONDING = (int)0xC0000005L,
1291  WD_USBD_STATUS_PID_CHECK_FAILURE = (int)0xC0000006L,
1294  WD_USBD_STATUS_UNEXPECTED_PID = (int)0xC0000007L,
1297  WD_USBD_STATUS_DATA_OVERRUN = (int)0xC0000008L,
1300  WD_USBD_STATUS_DATA_UNDERRUN = (int)0xC0000009L,
1303  WD_USBD_STATUS_RESERVED1 = (int)0xC000000AL,
1305  WD_USBD_STATUS_RESERVED2 = (int)0xC000000BL,
1307  WD_USBD_STATUS_BUFFER_OVERRUN = (int)0xC000000CL,
1310  WD_USBD_STATUS_BUFFER_UNDERRUN = (int)0xC000000DL,
1313  WD_USBD_STATUS_NOT_ACCESSED = (int)0xC000000FL,
1315  WD_USBD_STATUS_FIFO = (int)0xC0000010L,
1318 #if defined(WIN32)
1319  WD_USBD_STATUS_XACT_ERROR = (int)0xC0000011L,
1325  WD_USBD_STATUS_BABBLE_DETECTED = (int)0xC0000012L,
1328  WD_USBD_STATUS_DATA_BUFFER_ERROR = (int)0xC0000013L,
1331 #endif
1333  WD_USBD_STATUS_CANCELED = (int)0xC0010000L,
1339  WD_USBD_STATUS_ENDPOINT_HALTED = (int)0xC0000030L,
1340 
1341  /* Software status codes
1342  @note The following status codes have only the error bit set: */
1343  WD_USBD_STATUS_NO_MEMORY = (int)0x80000100L,
1346  WD_USBD_STATUS_INVALID_URB_FUNCTION = (int)0x80000200L,
1349  WD_USBD_STATUS_INVALID_PARAMETER = (int)0x80000300L,
1355  WD_USBD_STATUS_ERROR_BUSY = (int)0x80000400L,
1356 
1361  WD_USBD_STATUS_REQUEST_FAILED = (int)0x80000500L,
1363  WD_USBD_STATUS_INVALID_PIPE_HANDLE = (int)0x80000600L,
1367  WD_USBD_STATUS_NO_BANDWIDTH = (int)0x80000700L,
1368 
1370  WD_USBD_STATUS_INTERNAL_HC_ERROR = (int)0x80000800L,
1374  WD_USBD_STATUS_ERROR_SHORT_TRANSFER = (int)0x80000900L,
1375 
1379  WD_USBD_STATUS_BAD_START_FRAME = (int)0xC0000A00L,
1383  WD_USBD_STATUS_ISOCH_REQUEST_FAILED = (int)0xC0000B00L,
1387  WD_USBD_STATUS_FRAME_CONTROL_OWNED = (int)0xC0000C00L,
1388 
1392 
1393 #if defined(WIN32)
1394  ,
1395  /* Additional USB 2.0 software error codes added for USB 2.0: */
1396  WD_USBD_STATUS_NOT_SUPPORTED = (int)0xC0000E00L,
1409  WD_USBD_STATUS_SET_CONFIG_FAILED = (int)0xC0002000L,
1414  WD_USBD_STATUS_BUFFER_TOO_SMALL = (int)0xC0003000L,
1426  WD_USBD_STATUS_TIMEOUT = (int)0xC0006000L,
1429  WD_USBD_STATUS_DEVICE_GONE = (int)0xC0007000L,
1443  WD_USBD_STATUS_ISO_NOT_ACCESSED_BY_HW = (int)0xC0020000L,
1447  WD_USBD_STATUS_ISO_TD_ERROR = (int)0xC0030000L,
1450  WD_USBD_STATUS_ISO_NA_LATE_USBPORT = (int)0xC0040000L,
1453  WD_USBD_STATUS_ISO_NOT_ACCESSED_LATE = (int)0xC0050000L
1454 #endif
1455 } WD_ERROR_CODES;
1457 typedef enum
1459  WD_INSERT = 0x1,
1460  WD_REMOVE = 0x2,
1461  WD_OBSOLETE = 0x8,
1472  WD_POWER_SYSTEM_SHUTDOWN = 0x2000,
1473  WD_IPC_UNICAST_MSG = 0x4000,
1475 } WD_EVENT_ACTION;
1477 #define WD_IPC_ALL_MSG (WD_IPC_UNICAST_MSG | WD_IPC_MULTICAST_MSG)
1479 typedef enum
1481  WD_ACKNOWLEDGE = 0x1,
1483 } WD_EVENT_OPTION;
1484 
1485 #define WD_ACTIONS_POWER (WD_POWER_CHANGED_D0 | WD_POWER_CHANGED_D1 | \
1486  WD_POWER_CHANGED_D2 | WD_POWER_CHANGED_D3 | WD_POWER_SYSTEM_WORKING | \
1487  WD_POWER_SYSTEM_SLEEPING1 | WD_POWER_SYSTEM_SLEEPING3 | \
1488  WD_POWER_SYSTEM_HIBERNATE | WD_POWER_SYSTEM_SHUTDOWN)
1489 #define WD_ACTIONS_ALL (WD_ACTIONS_POWER | WD_INSERT | WD_REMOVE)
1491 enum
1494  WD_EVENT_TYPE_PCI = 1,
1496  WD_EVENT_TYPE_IPC = 4,
1497 };
1498 typedef DWORD WD_EVENT_TYPE;
1500 typedef struct
1501 {
1502  DWORD hEvent;
1503  DWORD dwEventType;
1505  DWORD dwAction;
1506  DWORD dwEventId;
1507  DWORD hKernelPlugIn;
1508  DWORD dwOptions;
1509  union u
1510  {
1511  struct Pci
1512  {
1513  WD_PCI_ID cardId;
1514  WD_PCI_SLOT pciSlot;
1515  } Pci;
1516  struct Usb
1517  {
1518  DWORD dwUniqueID;
1519  } Usb;
1520  struct Ipc
1521  {
1522  DWORD hIpc;
1523  DWORD dwSubGroupID;
1525  DWORD dwGroupID;
1526 
1527  DWORD dwSenderUID;
1528  DWORD dwMsgID;
1529  PAD_TO_64(dwMsgID)
1530  UINT64 qwMsgData;
1531  } Ipc;
1532  } u;
1534  DWORD dwNumMatchTables;
1535  WDU_MATCH_TABLE matchTables[1];
1538 typedef struct
1539 {
1540  DWORD applications_num;
1541  DWORD devices_num;
1542 } WD_USAGE;
1544 enum
1546  WD_USB_HARD_RESET = 1,
1547  WD_USB_CYCLE_PORT = 2
1548 };
1549 
1550 #ifndef BZERO
1551  #define BZERO(buf) memset(&(buf), 0, sizeof(buf))
1552 #endif
1553 
1554 #ifndef INVALID_HANDLE_VALUE
1555  #define INVALID_HANDLE_VALUE ((HANDLE)(-1))
1556 #endif
1557 
1558 #ifndef CTL_CODE
1559  #define CTL_CODE(DeviceType, Function, Method, Access) ( \
1560  ((DeviceType)<<16) | ((Access)<<14) | ((Function)<<2) | (Method) \
1561  )
1563  #define METHOD_BUFFERED 0
1564  #define METHOD_IN_DIRECT 1
1565  #define METHOD_OUT_DIRECT 2
1566  #define METHOD_NEITHER 3
1567  #define FILE_ANY_ACCESS 0
1568  #define FILE_READ_ACCESS 1
1569  #define FILE_WRITE_ACCESS 2
1570 #endif
1571 
1572 #if defined(LINUX) && defined(KERNEL_64BIT)
1573  #define WD_TYPE 0
1574  #define WD_CTL_CODE(wFuncNum) \
1575  _IOC(_IOC_READ|_IOC_WRITE, WD_TYPE, wFuncNum, 0)
1576  #define WD_CTL_DECODE_FUNC(IoControlCode) _IOC_NR(IoControlCode)
1577  #define WD_CTL_DECODE_TYPE(IoControlCode) _IOC_TYPE(IoControlCode)
1578 #elif defined(UNIX)
1579  #define WD_TYPE 0
1580  #define WD_CTL_CODE(wFuncNum) (wFuncNum)
1581  #define WD_CTL_DECODE_FUNC(IoControlCode) (IoControlCode)
1582  #define WD_CTL_DECODE_TYPE(IoControlCode) (WD_TYPE)
1583 #else
1585  #define WD_TYPE 38200
1586  #if defined(KERNEL_64BIT)
1587  #define FUNC_MASK 0x400
1588  #else
1589  #define FUNC_MASK 0x0
1590  #endif
1591  #define WD_CTL_CODE(wFuncNum) CTL_CODE(WD_TYPE, (wFuncNum | FUNC_MASK), \
1592  METHOD_NEITHER, FILE_ANY_ACCESS)
1593  #define WD_CTL_DECODE_FUNC(IoControlCode) ((IoControlCode >> 2) & 0xfff)
1594  #define WD_CTL_DECODE_TYPE(IoControlCode) \
1595  DEVICE_TYPE_FROM_CTL_CODE(IoControlCode)
1596 #endif
1597 
1598 #if defined(LINUX)
1599  #define WD_CTL_IS_64BIT_AWARE(IoControlCode) \
1600  (_IOC_DIR(IoControlCode) & (_IOC_READ|_IOC_WRITE))
1601 #elif defined(UNIX)
1602  #define WD_CTL_IS_64BIT_AWARE(IoControlCode) TRUE
1603 #else
1604  #define WD_CTL_IS_64BIT_AWARE(IoControlCode) \
1605  (WD_CTL_DECODE_FUNC(IoControlCode) & FUNC_MASK)
1606 #endif
1607 
1608 /* WinDriver function IOCTL calls. For details on the WinDriver functions, */
1609 /* see the WinDriver manual or included help files. */
1611 #define IOCTL_WD_KERNEL_BUF_LOCK WD_CTL_CODE(0x9f3)
1612 #define IOCTL_WD_KERNEL_BUF_UNLOCK WD_CTL_CODE(0x9f4)
1613 #define IOCTL_WD_DMA_LOCK WD_CTL_CODE(0x9be)
1614 #define IOCTL_WD_DMA_UNLOCK WD_CTL_CODE(0x902)
1615 #define IOCTL_WD_TRANSFER WD_CTL_CODE(0x98c)
1616 #define IOCTL_WD_MULTI_TRANSFER WD_CTL_CODE(0x98d)
1617 #define IOCTL_WD_PCI_SCAN_CARDS WD_CTL_CODE(0x9fa)
1618 #define IOCTL_WD_PCI_GET_CARD_INFO WD_CTL_CODE(0x9e8)
1619 #define IOCTL_WD_VERSION WD_CTL_CODE(0x910)
1620 #define IOCTL_WD_PCI_CONFIG_DUMP WD_CTL_CODE(0x91a)
1621 #define IOCTL_WD_KERNEL_PLUGIN_OPEN WD_CTL_CODE(0x91b)
1622 #define IOCTL_WD_KERNEL_PLUGIN_CLOSE WD_CTL_CODE(0x91c)
1623 #define IOCTL_WD_KERNEL_PLUGIN_CALL WD_CTL_CODE(0x91d)
1624 #define IOCTL_WD_INT_ENABLE WD_CTL_CODE(0x9b6)
1625 #define IOCTL_WD_INT_DISABLE WD_CTL_CODE(0x9bb)
1626 #define IOCTL_WD_INT_COUNT WD_CTL_CODE(0x9ba)
1627 #define IOCTL_WD_SLEEP WD_CTL_CODE(0x927)
1628 #define IOCTL_WD_DEBUG WD_CTL_CODE(0x928)
1629 #define IOCTL_WD_DEBUG_DUMP WD_CTL_CODE(0x929)
1630 #define IOCTL_WD_CARD_UNREGISTER WD_CTL_CODE(0x9e7)
1631 #define IOCTL_WD_CARD_REGISTER WD_CTL_CODE(0x9e6)
1632 #define IOCTL_WD_INT_WAIT WD_CTL_CODE(0x9b9)
1633 #define IOCTL_WD_LICENSE WD_CTL_CODE(0x9f9)
1634 #define IOCTL_WD_EVENT_REGISTER WD_CTL_CODE(0x9ef)
1635 #define IOCTL_WD_EVENT_UNREGISTER WD_CTL_CODE(0x9f0)
1636 #define IOCTL_WD_EVENT_PULL WD_CTL_CODE(0x9f1)
1637 #define IOCTL_WD_EVENT_SEND WD_CTL_CODE(0x9f2)
1638 #define IOCTL_WD_DEBUG_ADD WD_CTL_CODE(0x964)
1639 #define IOCTL_WD_USAGE WD_CTL_CODE(0x976)
1640 #define IOCTL_WDU_GET_DEVICE_DATA WD_CTL_CODE(0x9a7)
1641 #define IOCTL_WDU_SET_INTERFACE WD_CTL_CODE(0x981)
1642 #define IOCTL_WDU_RESET_PIPE WD_CTL_CODE(0x982)
1643 #define IOCTL_WDU_TRANSFER WD_CTL_CODE(0x983)
1644 #define IOCTL_WDU_HALT_TRANSFER WD_CTL_CODE(0x985)
1645 #define IOCTL_WDU_WAKEUP WD_CTL_CODE(0x98a)
1646 #define IOCTL_WDU_RESET_DEVICE WD_CTL_CODE(0x98b)
1647 #define IOCTL_WD_GET_DEVICE_PROPERTY WD_CTL_CODE(0x990)
1648 #define IOCTL_WD_CARD_CLEANUP_SETUP WD_CTL_CODE(0x995)
1649 #define IOCTL_WD_DMA_SYNC_CPU WD_CTL_CODE(0x99f)
1650 #define IOCTL_WD_DMA_SYNC_IO WD_CTL_CODE(0x9a0)
1651 #define IOCTL_WDU_STREAM_OPEN WD_CTL_CODE(0x9a8)
1652 #define IOCTL_WDU_STREAM_CLOSE WD_CTL_CODE(0x9a9)
1653 #define IOCTL_WDU_STREAM_START WD_CTL_CODE(0x9af)
1654 #define IOCTL_WDU_STREAM_STOP WD_CTL_CODE(0x9b0)
1655 #define IOCTL_WDU_STREAM_FLUSH WD_CTL_CODE(0x9aa)
1656 #define IOCTL_WDU_STREAM_GET_STATUS WD_CTL_CODE(0x9b5)
1657 #define IOCTL_WDU_SELECTIVE_SUSPEND WD_CTL_CODE(0x9ae)
1658 #define IOCTL_WD_PCI_SCAN_CAPS WD_CTL_CODE(0x9e5)
1659 #define IOCTL_WD_IPC_REGISTER WD_CTL_CODE(0x9eb)
1660 #define IOCTL_WD_IPC_UNREGISTER WD_CTL_CODE(0x9ec)
1661 #define IOCTL_WD_IPC_SCAN_PROCS WD_CTL_CODE(0x9ed)
1662 #define IOCTL_WD_IPC_SEND WD_CTL_CODE(0x9ee)
1663 #define IOCTL_WD_PCI_SRIOV_ENABLE WD_CTL_CODE(0x9f5)
1664 #define IOCTL_WD_PCI_SRIOV_DISABLE WD_CTL_CODE(0x9f6)
1665 #define IOCTL_WD_PCI_SRIOV_GET_NUMVFS WD_CTL_CODE(0x9f7)
1666 #define IOCTL_WD_IPC_SHARED_INT_ENABLE WD_CTL_CODE(0x9fc)
1667 #define IOCTL_WD_IPC_SHARED_INT_DISABLE WD_CTL_CODE(0x9fd)
1668 #define IOCTL_WD_DMA_TRANSACTION_INIT WD_CTL_CODE(0x9fe)
1669 #define IOCTL_WD_DMA_TRANSACTION_EXECUTE WD_CTL_CODE(0x9ff)
1670 #define IOCTL_WD_DMA_TRANSFER_COMPLETED_AND_CHECK WD_CTL_CODE(0xa00)
1671 #define IOCTL_WD_DMA_TRANSACTION_RELEASE WD_CTL_CODE(0xa01)
1672 
1673 #if defined(UNIX)
1674  typedef struct
1675  {
1676  DWORD dwHeader;
1677  DWORD dwSize;
1678  PVOID pData;
1679  PAD_TO_64(pData)
1680  } WD_IOCTL_HEADER;
1681 
1682  #define WD_IOCTL_HEADER_CODE 0xa410b413UL
1683 #endif
1684 
1685 #if defined(__KERNEL__)
1686  HANDLE __cdecl WD_Open(void);
1687  void __cdecl WD_Close(HANDLE hWD);
1688  DWORD __cdecl KP_DeviceIoControl(DWORD dwFuncNum, HANDLE h, PVOID pParam,
1689  DWORD dwSize);
1690  #define WD_FUNCTION(wFuncNum, h, pParam, dwSize, fWait) \
1691  KP_DeviceIoControl((DWORD)wFuncNum, h, (PVOID)pParam, (DWORD)dwSize)
1692 #else
1693  #define REGKEY_BUFSIZE 256
1694  #define OS_CAN_NOT_DETECT_TEXT "OS CAN NOT DETECT"
1695  #define INSTALLATION_TYPE_NOT_DETECT_TEXT "unknown"
1696  typedef struct
1697  {
1698  CHAR cProdName[REGKEY_BUFSIZE];
1699  CHAR cInstallationType[REGKEY_BUFSIZE];
1700  #ifdef WIN32
1701  CHAR cCurrentVersion[REGKEY_BUFSIZE];
1702  CHAR cBuild[REGKEY_BUFSIZE];
1703  CHAR cCsdVersion[REGKEY_BUFSIZE];
1704  DWORD dwMajorVersion;
1705  DWORD dwMinorVersion;
1706  #else
1707  CHAR cRelease[REGKEY_BUFSIZE];
1708  CHAR cReleaseVersion[REGKEY_BUFSIZE];
1709  #endif
1710  } WD_OS_INFO;
1711 
1721 
1733  #if defined(APPLE)
1734  DWORD WD_FUNCTION_LOCAL(int wFuncNum, HANDLE h,
1735  PVOID pParam, DWORD dwSize, BOOL fWait);
1736 
1737  HANDLE WD_OpenLocal(void);
1738 
1739  void WD_CloseLocal(HANDLE h);
1740 
1741  #define WD_OpenStreamLocal(read,sync) INVALID_HANDLE_VALUE
1742 
1743  #define WD_UStreamRead(hFile, pBuffer, dwNumberOfBytesToRead, \
1744  dwNumberOfBytesRead)\
1745  WD_NOT_IMPLEMENTED
1746 
1747  #define WD_UStreamWrite(hFile, pBuffer, dwNumberOfBytesToWrite, \
1748  dwNumberOfBytesWritten)\
1749  WD_NOT_IMPLEMENTED
1750 
1751  #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 120000
1752  #define IO_MASTER_PORT IOMainPort
1753  #else
1754  #define IO_MASTER_PORT IOMasterPort
1755  #endif
1756 
1757  #elif defined(UNIX)
1758  static inline ULONG WD_FUNCTION_LOCAL(int wFuncNum, HANDLE h,
1759  PVOID pParam, DWORD dwSize, BOOL fWait)
1760  {
1761  WD_IOCTL_HEADER ioctl_hdr;
1762 
1763  BZERO(ioctl_hdr);
1764  ioctl_hdr.dwHeader = WD_IOCTL_HEADER_CODE;
1765  ioctl_hdr.dwSize = dwSize;
1766  ioctl_hdr.pData = pParam;
1767  (void)fWait;
1768  #if defined(LINUX)
1769  return (ULONG)ioctl((int)(long)h, wFuncNum, &ioctl_hdr);
1770  #endif
1771  }
1772 
1773  #define WD_OpenLocal()\
1774  ((HANDLE)(long)open(WD_DRIVER_NAME, O_RDWR | O_SYNC))
1775  #define WD_OpenStreamLocal(read,sync) \
1776  ((HANDLE)(long)open(WD_DRIVER_NAME, \
1777  ((read) ? O_RDONLY : O_WRONLY) | \
1778  ((sync) ? O_SYNC : O_NONBLOCK)))
1779 
1780  #define WD_CloseLocal(h) close((int)(long)(h))
1781 
1782  #define WD_UStreamRead(hFile, pBuffer, dwNumberOfBytesToRead, \
1783  dwNumberOfBytesRead)\
1784  WD_NOT_IMPLEMENTED
1785 
1786  #define WD_UStreamWrite(hFile, pBuffer, dwNumberOfBytesToWrite, \
1787  dwNumberOfBytesWritten)\
1788  WD_NOT_IMPLEMENTED
1789 
1790  #elif defined(WIN32)
1791  #define WD_CloseLocal(h) CloseHandle(h)
1792 
1793  #define WD_UStreamRead(hFile, pBuffer, dwNumberOfBytesToRead, \
1794  dwNumberOfBytesRead)\
1795  ReadFile(hFile, pBuffer, dwNumberOfBytesToRead, \
1796  dwNumberOfBytesRead, NULL) ? WD_STATUS_SUCCESS : \
1797  WD_OPERATION_FAILED
1798 
1799  #define WD_UStreamWrite(hFile, pBuffer, dwNumberOfBytesToWrite, \
1800  dwNumberOfBytesWritten)\
1801  WriteFile(hFile, pBuffer, dwNumberOfBytesToWrite, \
1802  dwNumberOfBytesWritten, NULL) ? WD_STATUS_SUCCESS : \
1803  WD_OPERATION_FAILED
1804 
1805  #if defined(WIN32)
1806  #define WD_OpenLocal()\
1807  CreateFileA(\
1808  WD_DRIVER_NAME,\
1809  GENERIC_READ,\
1810  FILE_SHARE_READ | FILE_SHARE_WRITE,\
1811  NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL)
1812 
1813  #define WD_OpenStreamLocal(read,sync) \
1814  CreateFileA(\
1815  WD_DRIVER_NAME,\
1816  (read) ? GENERIC_READ : GENERIC_WRITE,\
1817  FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, \
1818  (sync) ? 0 : FILE_FLAG_OVERLAPPED, NULL)
1819 
1820  static DWORD WD_FUNCTION_LOCAL(int wFuncNum, HANDLE h, PVOID pParam,
1821  DWORD dwSize, BOOL fWait)
1822  {
1823  DWORD dwTmp;
1824  HANDLE hWD = fWait ? WD_OpenLocal() : h;
1825  DWORD rc = WD_WINDRIVER_STATUS_ERROR;
1826 
1827  if (hWD == INVALID_HANDLE_VALUE)
1828  return (DWORD)WD_STATUS_INVALID_WD_HANDLE;
1829 
1830  DeviceIoControl(hWD, (DWORD)wFuncNum, pParam, dwSize, &rc,
1831  sizeof(DWORD), &dwTmp, NULL);
1832 
1833  if (fWait)
1834  WD_CloseLocal(hWD);
1835 
1836  return rc;
1837  }
1838  #endif
1839  #endif
1841  #define WD_FUNCTION WD_FUNCTION_LOCAL
1842  #define WD_Close WD_CloseLocal
1843  #define WD_Open WD_OpenLocal
1844  #define WD_StreamOpen WD_OpenStreamLocal
1845  #define WD_StreamClose WD_CloseLocal
1846 #endif
1847 
1848 #define SIZE_OF_WD_DMA(pDma) \
1849  ((DWORD)(sizeof(WD_DMA) + ((pDma)->dwPages <= WD_DMA_PAGES ? \
1850  0 : ((pDma)->dwPages - WD_DMA_PAGES) * sizeof(WD_DMA_PAGE))))
1851 #define SIZE_OF_WD_EVENT(pEvent) \
1852  ((DWORD)(sizeof(WD_EVENT) + ((pEvent)->dwNumMatchTables > 0 ? \
1853  sizeof(WDU_MATCH_TABLE) * ((pEvent)->dwNumMatchTables - 1) : 0)))
1854 
1866 #define WD_Debug(h,pDebug)\
1867  WD_FUNCTION(IOCTL_WD_DEBUG, h, pDebug, sizeof(WD_DEBUG), FALSE)
1868 
1880 #define WD_DebugDump(h,pDebugDump)\
1881  WD_FUNCTION(IOCTL_WD_DEBUG_DUMP, h, pDebugDump, sizeof(WD_DEBUG_DUMP), \
1882  FALSE)
1883 
1895 #define WD_DebugAdd(h, pDebugAdd)\
1896  WD_FUNCTION(IOCTL_WD_DEBUG_ADD, h, pDebugAdd, sizeof(WD_DEBUG_ADD), FALSE)
1897 
1910 #define WD_Transfer(h,pTransfer)\
1911  WD_FUNCTION(IOCTL_WD_TRANSFER, h, pTransfer, sizeof(WD_TRANSFER), FALSE)
1912 
1929 #define WD_MultiTransfer(h, pTransferArray, dwNumTransfers) \
1930  WD_FUNCTION(IOCTL_WD_MULTI_TRANSFER, h, pTransferArray, \
1931  sizeof(WD_TRANSFER) * (dwNumTransfers), FALSE)
1932 
1946 #define WD_KernelBufLock(h, pKerBuf)\
1947  WD_FUNCTION(IOCTL_WD_KERNEL_BUF_LOCK, h, pKerBuf, \
1948  sizeof(WD_KERNEL_BUFFER), FALSE)
1949 
1961 #define WD_KernelBufUnlock(h, pKerBuf)\
1962  WD_FUNCTION(IOCTL_WD_KERNEL_BUF_UNLOCK, h, pKerBuf, \
1963  sizeof(WD_KERNEL_BUFFER), FALSE)
1964 
2027 #define WD_DMALock(h,pDma)\
2028  WD_FUNCTION(IOCTL_WD_DMA_LOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2029 
2042 #define WD_DMAUnlock(h,pDma)\
2043  WD_FUNCTION(IOCTL_WD_DMA_UNLOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2044 
2058 #define WD_DMATransactionInit(h,pDma)\
2059  WD_FUNCTION(IOCTL_WD_DMA_TRANSACTION_INIT, h, pDma, SIZE_OF_WD_DMA(pDma), \
2060  FALSE)
2061 
2072 #define WD_DMATransactionExecute(h,pDma)\
2073  WD_FUNCTION(IOCTL_WD_DMA_TRANSACTION_EXECUTE, h, pDma, \
2074  SIZE_OF_WD_DMA(pDma), FALSE)
2075 
2086 #define WD_DMATransferCompletedAndCheck(h,pDma)\
2087  WD_FUNCTION(IOCTL_WD_DMA_TRANSFER_COMPLETED_AND_CHECK, h, pDma, \
2088  SIZE_OF_WD_DMA(pDma), FALSE)
2089 
2101 #define WD_DMATransactionRelease(h,pDma)\
2102  WD_FUNCTION(IOCTL_WD_DMA_TRANSACTION_RELEASE, h, pDma, \
2103  SIZE_OF_WD_DMA(pDma), FALSE)
2104 
2116 #define WD_DMATransactionUninit(h,pDma)\
2117  WD_FUNCTION(IOCTL_WD_DMA_UNLOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2118 
2142 #define WD_DMASyncCpu(h,pDma)\
2143  WD_FUNCTION(IOCTL_WD_DMA_SYNC_CPU, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2144 
2169 #define WD_DMASyncIo(h,pDma)\
2170  WD_FUNCTION(IOCTL_WD_DMA_SYNC_IO, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
2171 
2223 #define WD_CardRegister(h,pCard)\
2224  WD_FUNCTION(IOCTL_WD_CARD_REGISTER, h, pCard, sizeof(WD_CARD_REGISTER),\
2225  FALSE)
2226 
2239 #define WD_CardUnregister(h,pCard)\
2240  WD_FUNCTION(IOCTL_WD_CARD_UNREGISTER, h, pCard, sizeof(WD_CARD_REGISTER),\
2241  FALSE)
2242 
2264 #define WD_IpcRegister(h, pIpcRegister) \
2265  WD_FUNCTION(IOCTL_WD_IPC_REGISTER, h, pIpcRegister, \
2266  sizeof(WD_IPC_REGISTER), FALSE)
2267 
2280 #define WD_IpcUnRegister(h, pProcInfo) \
2281  WD_FUNCTION(IOCTL_WD_IPC_UNREGISTER, h, pProcInfo, sizeof(WD_IPC_PROCESS), \
2282  FALSE)
2283 
2297 #define WD_IpcScanProcs(h, pIpcScanProcs) \
2298  WD_FUNCTION(IOCTL_WD_IPC_SCAN_PROCS, h, pIpcScanProcs, \
2299  sizeof(WD_IPC_SCAN_PROCS), FALSE)
2300 
2314 #define WD_IpcSend(h, pIpcSend) \
2315  WD_FUNCTION(IOCTL_WD_IPC_SEND, h, pIpcSend, sizeof(WD_IPC_SEND), FALSE)
2316 
2334 #define WD_SharedIntEnable(h, pIpcRegister) \
2335  WD_FUNCTION(IOCTL_WD_IPC_SHARED_INT_ENABLE, h, pIpcRegister, \
2336  sizeof(WD_IPC_REGISTER), FALSE)
2337 
2349 #define WD_SharedIntDisable(h) \
2350  WD_FUNCTION(IOCTL_WD_IPC_SHARED_INT_DISABLE, h, 0, 0, FALSE)
2351 
2365 #define WD_PciSriovEnable(h,pPciSRIOV) \
2366  WD_FUNCTION(IOCTL_WD_PCI_SRIOV_ENABLE, h, pPciSRIOV, \
2367  sizeof(WD_PCI_SRIOV), FALSE)
2368 
2382 #define WD_PciSriovDisable(h,pPciSRIOV) \
2383  WD_FUNCTION(IOCTL_WD_PCI_SRIOV_DISABLE, h, pPciSRIOV, \
2384  sizeof(WD_PCI_SRIOV), FALSE)
2385 
2401 #define WD_PciSriovGetNumVFs(h,pPciSRIOV) \
2402  WD_FUNCTION(IOCTL_WD_PCI_SRIOV_GET_NUMVFS, h, pPciSRIOV, \
2403  sizeof(WD_PCI_SRIOV), FALSE)
2404 
2427 #define WD_CardCleanupSetup(h,pCardCleanup)\
2428  WD_FUNCTION(IOCTL_WD_CARD_CLEANUP_SETUP, h, pCardCleanup, \
2429  sizeof(WD_CARD_CLEANUP), FALSE)
2430 
2445 #define WD_PciScanCards(h,pPciScan)\
2446  WD_FUNCTION(IOCTL_WD_PCI_SCAN_CARDS, h, pPciScan,\
2447  sizeof(WD_PCI_SCAN_CARDS), FALSE)
2448 
2462 #define WD_PciScanCaps(h,pPciScanCaps) \
2463  WD_FUNCTION(IOCTL_WD_PCI_SCAN_CAPS, h, pPciScanCaps, \
2464  sizeof(WD_PCI_SCAN_CAPS), FALSE)
2465 
2479 #define WD_PciGetCardInfo(h,pPciCard)\
2480  WD_FUNCTION(IOCTL_WD_PCI_GET_CARD_INFO, h, pPciCard, \
2481  sizeof(WD_PCI_CARD_INFO), FALSE)
2482 
2497 #define WD_PciConfigDump(h,pPciConfigDump)\
2498  WD_FUNCTION(IOCTL_WD_PCI_CONFIG_DUMP, h, pPciConfigDump, \
2499  sizeof(WD_PCI_CONFIG_DUMP), FALSE)
2500 
2513 #define WD_Version(h,pVerInfo)\
2514  WD_FUNCTION(IOCTL_WD_VERSION, h, pVerInfo, sizeof(WD_VERSION), FALSE)
2515 
2536 #define WD_License(h,pLicense)\
2537  WD_FUNCTION(IOCTL_WD_LICENSE, h, pLicense, sizeof(WD_LICENSE), FALSE)
2538 
2552 #define WD_KernelPlugInOpen(h,pKernelPlugIn)\
2553  WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_OPEN, h, pKernelPlugIn, \
2554  sizeof(WD_KERNEL_PLUGIN), FALSE)
2555 
2568 #define WD_KernelPlugInClose(h,pKernelPlugIn)\
2569  WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_CLOSE, h, pKernelPlugIn, \
2570  sizeof(WD_KERNEL_PLUGIN), FALSE)
2571 
2591 #define WD_KernelPlugInCall(h,pKernelPlugInCall)\
2592  WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_CALL, h, pKernelPlugInCall, \
2593  sizeof(WD_KERNEL_PLUGIN_CALL), FALSE)
2594 
2618 #define WD_IntEnable(h,pInterrupt)\
2619  WD_FUNCTION(IOCTL_WD_INT_ENABLE, h, pInterrupt, sizeof(WD_INTERRUPT), FALSE)
2620 
2632 #define WD_IntDisable(h,pInterrupt)\
2633  WD_FUNCTION(IOCTL_WD_INT_DISABLE, h, pInterrupt, sizeof(WD_INTERRUPT), \
2634  FALSE)
2635 
2647 #define WD_IntCount(h,pInterrupt)\
2648  WD_FUNCTION(IOCTL_WD_INT_COUNT, h, pInterrupt, sizeof(WD_INTERRUPT), FALSE)
2649 
2666 #define WD_IntWait(h,pInterrupt)\
2667  WD_FUNCTION(IOCTL_WD_INT_WAIT, h, pInterrupt, sizeof(WD_INTERRUPT), TRUE)
2668 
2683 #define WD_Sleep(h,pSleep)\
2684  WD_FUNCTION(IOCTL_WD_SLEEP, h, pSleep, sizeof(WD_SLEEP), FALSE)
2685 
2686 
2687 #define WD_EventRegister(h, pEvent) \
2688  WD_FUNCTION(IOCTL_WD_EVENT_REGISTER, h, pEvent, SIZE_OF_WD_EVENT(pEvent), \
2689  FALSE)
2690 #define WD_EventUnregister(h, pEvent) \
2691  WD_FUNCTION(IOCTL_WD_EVENT_UNREGISTER, h, pEvent, \
2692  SIZE_OF_WD_EVENT(pEvent), FALSE)
2693 #define WD_EventPull(h,pEvent) \
2694  WD_FUNCTION(IOCTL_WD_EVENT_PULL, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
2695 #define WD_EventSend(h,pEvent) \
2696  WD_FUNCTION(IOCTL_WD_EVENT_SEND, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
2697 #define WD_Usage(h, pStop) \
2698  WD_FUNCTION(IOCTL_WD_USAGE, h, pStop, sizeof(WD_USAGE), FALSE)
2699 
2700 #define WD_UGetDeviceData(h, pGetDevData) \
2701  WD_FUNCTION(IOCTL_WDU_GET_DEVICE_DATA, h, pGetDevData, \
2702  sizeof(WDU_GET_DEVICE_DATA), FALSE);
2703 #define WD_GetDeviceProperty(h, pGetDevProperty) \
2704  WD_FUNCTION(IOCTL_WD_GET_DEVICE_PROPERTY, h, pGetDevProperty, \
2705  sizeof(WD_GET_DEVICE_PROPERTY), FALSE);
2706 #define WD_USetInterface(h, pSetIfc) \
2707  WD_FUNCTION(IOCTL_WDU_SET_INTERFACE, h, pSetIfc, \
2708  sizeof(WDU_SET_INTERFACE), FALSE);
2709 #define WD_UResetPipe(h, pResetPipe) \
2710  WD_FUNCTION(IOCTL_WDU_RESET_PIPE, h, pResetPipe, sizeof(WDU_RESET_PIPE), \
2711  FALSE);
2712 #define WD_UTransfer(h, pTrans) \
2713  WD_FUNCTION(IOCTL_WDU_TRANSFER, h, pTrans, sizeof(WDU_TRANSFER), TRUE);
2714 #define WD_UHaltTransfer(h, pHaltTrans) \
2715  WD_FUNCTION(IOCTL_WDU_HALT_TRANSFER, h, pHaltTrans, \
2716  sizeof(WDU_HALT_TRANSFER), FALSE);
2717 #define WD_UWakeup(h, pWakeup) \
2718  WD_FUNCTION(IOCTL_WDU_WAKEUP, h, pWakeup, sizeof(WDU_WAKEUP), FALSE);
2719 #define WD_USelectiveSuspend(h, pSelectiveSuspend) \
2720  WD_FUNCTION(IOCTL_WDU_SELECTIVE_SUSPEND, h, pSelectiveSuspend, \
2721  sizeof(WDU_SELECTIVE_SUSPEND), FALSE);
2722 #define WD_UResetDevice(h, pResetDevice) \
2723  WD_FUNCTION(IOCTL_WDU_RESET_DEVICE, h, pResetDevice, \
2724  sizeof(WDU_RESET_DEVICE), FALSE);
2725 #define WD_UStreamOpen(h, pStream) \
2726  WD_FUNCTION(IOCTL_WDU_STREAM_OPEN, h, pStream, sizeof(WDU_STREAM), FALSE);
2727 #define WD_UStreamClose(h, pStream) \
2728  WD_FUNCTION(IOCTL_WDU_STREAM_CLOSE, h, pStream, sizeof(WDU_STREAM), FALSE);
2729 #define WD_UStreamStart(h, pStream) \
2730  WD_FUNCTION(IOCTL_WDU_STREAM_START, h, pStream, sizeof(WDU_STREAM), FALSE);
2731 #define WD_UStreamStop(h, pStream) \
2732  WD_FUNCTION(IOCTL_WDU_STREAM_STOP, h, pStream, sizeof(WDU_STREAM), FALSE);
2733 #define WD_UStreamFlush(h, pStream) \
2734  WD_FUNCTION(IOCTL_WDU_STREAM_FLUSH, h, pStream, sizeof(WDU_STREAM), FALSE);
2735 #define WD_UStreamGetStatus(h, pStreamStatus) \
2736  WD_FUNCTION(IOCTL_WDU_STREAM_GET_STATUS, h, pStreamStatus, \
2737  sizeof(WDU_STREAM_STATUS), FALSE);
2738 
2739 #define __ALIGN_DOWN(val,alignment) ( (val) & ~((alignment) - 1) )
2740 #define __ALIGN_UP(val,alignment) \
2741  ( ((val) + (alignment) - 1) & ~((alignment) - 1) )
2742 
2743 #ifdef WDLOG
2744  #include "wd_log.h"
2745 #endif
2746 
2747 #ifndef MIN
2748  #define MIN(a,b) ((a) > (b) ? (b) : (a))
2749 #endif
2750 #ifndef MAX
2751  #define MAX(a,b) ((a) > (b) ? (a) : (b))
2752 #endif
2753 #define SAFE_STRING(s) ((s) ? (s) : "")
2754 
2755 #define UNUSED_VAR(x) (void)x
2756 
2757 #ifdef __cplusplus
2758 }
2759 #endif
2760 
2761 #endif /* _WINDRVR_H_ */
2762 
#define NULL
Definition: kpstdlib.h:268
ITEM_IO.
Definition: windrvr.h:739
ITEM_INTERRUPT.
Definition: windrvr.h:747
ITEM_MEMORY.
Definition: windrvr.h:719
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:692
@ ITEM_INTERRUPT
Interrupt.
Definition: windrvr.h:694
@ ITEM_BUS
Bus.
Definition: windrvr.h:697
@ ITEM_NONE
Definition: windrvr.h:693
@ ITEM_IO
I/O.
Definition: windrvr.h:696
@ ITEM_MEMORY
Memory.
Definition: windrvr.h:695
@ WD_FORCE_CLEANUP
Definition: windrvr.h:840
@ WD_USB_HARD_RESET
Definition: windrvr.h:1543
@ WD_USB_CYCLE_PORT
Definition: windrvr.h:1544
struct WD_KERNEL_PLUGIN_CALL WD_KERNEL_PLUGIN_CALL_V40
@ WD_DMA_PAGES
Definition: windrvr.h:427
struct WD_PCI_CARD_INFO WD_PCI_CARD_INFO_V118
PCI_ACCESS_RESULT
Definition: windrvr.h:926
@ PCI_ACCESS_OK
Definition: windrvr.h:927
@ PCI_ACCESS_ERROR
Definition: windrvr.h:928
@ PCI_BAD_SLOT
Definition: windrvr.h:930
@ PCI_BAD_BUS
Definition: windrvr.h:929
WD_ITEM_MEM_OPTIONS
Definition: windrvr.h:701
@ WD_ITEM_MEM_DO_NOT_MAP_KERNEL
Skip the mapping of physical memory to the kernel address space.
Definition: windrvr.h:702
@ 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:704
@ WD_ITEM_MEM_USER_MAP
Map physical memory from user mode, Linux only.
Definition: windrvr.h:707
WD_GET_DEVICE_PROPERTY_OPTION
IOCTL Structures.
Definition: windrvr.h:1040
@ WD_DEVICE_USB
Definition: windrvr.h:1042
@ WD_DEVICE_PCI
Definition: windrvr.h:1041
struct WD_ITEMS WD_ITEMS_V118
struct WD_DEBUG_ADD WD_DEBUG_ADD_V503
size_t UPTR
Definition: windrvr.h:374
#define WD_VERSION_STR_LENGTH
Definition: windrvr.h:61
struct WD_IPC_SCAN_PROCS WD_IPC_SCAN_PROCS_V121
DEBUG_LEVEL
Definition: windrvr.h:955
@ D_ERROR
Definition: windrvr.h:957
@ D_TRACE
Definition: windrvr.h:960
@ D_WARN
Definition: windrvr.h:958
@ D_INFO
Definition: windrvr.h:959
@ D_OFF
Definition: windrvr.h:956
struct WD_TRANSFER WD_TRANSFER_V61
unsigned short int WORD
Definition: windrvr.h:333
struct WD_KERNEL_BUFFER WD_KERNEL_BUFFER_V121
WD_KER_BUF_OPTION
Definition: windrvr.h:561
@ KER_BUF_ALLOC_NON_CONTIG
Definition: windrvr.h:567
@ KER_BUF_GET_EXISTING_BUF
Definition: windrvr.h:570
@ KER_BUF_ALLOC_CONTIG
Definition: windrvr.h:568
@ KER_BUF_ALLOC_CACHED
Definition: windrvr.h:569
@ WD_PCI_CAP_ID_ALL
Definition: windrvr.h:884
#define WD_OpenLocal()
Definition: windrvr.h:1803
DEBUG_COMMAND
Definition: windrvr.h:984
@ DEBUG_DUMP_SEC_ON
Definition: windrvr.h:989
@ KERNEL_DEBUGGER_OFF
Definition: windrvr.h:992
@ DEBUG_CLEAR_BUFFER
Definition: windrvr.h:988
@ DEBUG_DUMP_CLOCK_OFF
Definition: windrvr.h:994
@ DEBUG_DUMP_CLOCK_ON
Definition: windrvr.h:993
@ KERNEL_DEBUGGER_ON
Definition: windrvr.h:991
@ DEBUG_SET_FILTER
Definition: windrvr.h:986
@ DEBUG_SET_BUFFER
Definition: windrvr.h:987
@ DEBUG_CLOCK_RESET
Definition: windrvr.h:995
@ DEBUG_STATUS
Definition: windrvr.h:985
@ DEBUG_DUMP_SEC_OFF
Definition: windrvr.h:990
struct WD_SLEEP WD_SLEEP_V40
#define WD_LICENSE_LENGTH
Definition: windrvr.h:667
unsigned char BYTE
Definition: windrvr.h:332
WD_ERROR_CODES
Definition: windrvr.h:1060
@ WD_INVALID_32BIT_APP
[0x20000021] Invalid 32 Bit User Application.
Definition: windrvr.h:1225
@ WD_TRY_AGAIN
[0x2000001d] Try Again.
Definition: windrvr.h:1211
@ WD_USBD_STATUS_DATA_TOGGLE_MISMATCH
[0xC0000003] HC status: Data toggle mismatch
Definition: windrvr.h:1279
@ WD_RESOURCE_OVERLAP
[0x2000000e] Resource Overlap.
Definition: windrvr.h:1129
@ WD_FAILED_KERNEL_MAPPING
[0x20000018] Failed to map memory to Kernel Space.
Definition: windrvr.h:1177
@ WD_WINDRIVER_STATUS_ERROR
[0x20000000]
Definition: windrvr.h:1064
@ WD_USBD_STATUS_UNEXPECTED_PID
[0xC0000007] HC status: Unexpected PID
Definition: windrvr.h:1291
@ WD_USBD_STATUS_REQUEST_FAILED
[0x80000500] Returned by USBD if it cannot complete a URB request.
Definition: windrvr.h:1358
@ WD_USBD_STATUS_INTERFACE_NOT_FOUND
[0xC0004000] USBD: Interface not found
Definition: windrvr.h:1415
@ WD_USBD_STATUS_INAVLID_CONFIGURATION_DESCRIPTOR
[0xC0000F00] USBD: Invalid configuration descriptor
Definition: windrvr.h:1396
@ WD_TOO_MANY_HANDLES
[0x20000022] Too Many Handles.
Definition: windrvr.h:1231
@ 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:1450
@ WD_USBD_STATUS_INVALID_URB_FUNCTION
[0x80000200] USBD: Invalid URB function
Definition: windrvr.h:1343
@ WD_USBD_STATUS_NOT_ACCESSED
[0xC000000F] HC status: Not accessed
Definition: windrvr.h:1310
@ WD_INTERRUPT_NOT_ENABLED
[0x2000000d] Interrupt not enabled.
Definition: windrvr.h:1122
@ WD_USBD_STATUS_ERROR_BUSY
[0x80000400] Returned if client driver attempts to close an endpoint/interface or configuration with ...
Definition: windrvr.h:1352
@ WD_USBD_STATUS_XACT_ERROR
[0xC0000011] HC status: The host controller has set the Transaction Error (XactErr) bit in the transf...
Definition: windrvr.h:1316
@ WD_MORE_PROCESSING_REQUIRED
[0xC0000016] More Processing Required.
Definition: windrvr.h:1250
@ WD_UNKNOWN_PIPE_TYPE
[0x20000006] Obsolete.
Definition: windrvr.h:1089
@ WD_INVALID_HANDLE
[0x20000001] Invalid WinDriver handle.
Definition: windrvr.h:1066
@ WD_USBD_STATUS_DATA_UNDERRUN
[0xC0000009] HC status: Data underrrun
Definition: windrvr.h:1297
@ WD_OPERATION_FAILED
[0x20000020] Operation Failed.
Definition: windrvr.h:1221
@ WD_USB_DESCRIPTOR_ERROR
[0x20000012] USB Descriptor Error.
Definition: windrvr.h:1147
@ WD_USBD_STATUS_RESERVED1
[0xC000000A] HC status: Reserved1
Definition: windrvr.h:1300
@ WD_USBD_STATUS_RESERVED2
[0xC000000B] HC status: Reserved1
Definition: windrvr.h:1302
@ WD_USBD_STATUS_NOT_SUPPORTED
[0xC0000E00] Returned for APIS not supported/implemented
Definition: windrvr.h:1393
@ WD_USBD_STATUS_DEVICE_GONE
[0xC0007000] USBD: Device Gone
Definition: windrvr.h:1426
@ WD_USBD_STATUS_ISO_NOT_ACCESSED_BY_HW
Extended isochronous error codes returned by USBD.
Definition: windrvr.h:1440
@ WD_USBD_STATUS_DATA_BUFFER_ERROR
[0xC0000013] HC status: Data buffer error
Definition: windrvr.h:1325
@ WD_USBD_STATUS_ISO_TD_ERROR
[0xC0030000] Controller reported an error in the TD.
Definition: windrvr.h:1444
@ WD_USBD_STATUS_DEV_NOT_RESPONDING
[0xC0000005] HC status: Device not responding
Definition: windrvr.h:1285
@ WD_USBD_STATUS_FIFO
[0xC0000010] HC status: FIFO
Definition: windrvr.h:1312
@ WD_NO_LICENSE
0x[20000009] No License.
Definition: windrvr.h:1096
@ WD_INVALID_PARAMETER
[0x2000001b] Invalid Parameter.
Definition: windrvr.h:1201
@ WD_WRONG_UNIQUE_ID
[0x20000010] Wrong unique ID (USB).
Definition: windrvr.h:1138
@ WD_USBD_STATUS_INVALID_PARAMETER
[0x80000300] USBD: Invalid parameter
Definition: windrvr.h:1346
@ WD_USBD_STATUS_BAD_START_FRAME
[0x80000A00] Returned if the requested start frame is not within
Definition: windrvr.h:1376
@ WD_USBD_STATUS_SUCCESS
[0x00000000] Success
Definition: windrvr.h:1260
@ WD_USBD_STATUS_ERROR
[0x80000000] Error
Definition: windrvr.h:1263
@ WD_DATA_MISMATCH
[0x20000008] Data Mismatch.
Definition: windrvr.h:1092
@ WD_NO_RESOURCES_ON_DEVICE
[0x20000019] No Resources On Device.
Definition: windrvr.h:1187
@ WD_NO_EVENTS
[0x2000001a] No Events.
Definition: windrvr.h:1197
@ WD_USBD_STATUS_NO_BANDWIDTH
[0x80000700] Returned when there is not enough bandwidth available
Definition: windrvr.h:1364
@ WD_USBD_STATUS_BUFFER_UNDERRUN
[0xC000000D] HC status: Buffer underrun
Definition: windrvr.h:1307
@ WD_NOT_IMPLEMENTED
[0x2000000a] Function not implemented.
Definition: windrvr.h:1102
@ 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:1079
@ 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:1388
@ WD_DEVICE_NOT_FOUND
[0x2000000f] Device not found.
Definition: windrvr.h:1135
@ WD_NO_DEVICE_OBJECT
[0x20000023] No Device Object.
Definition: windrvr.h:1237
@ WD_USBD_STATUS_CANCELED
[0xC0010000] USBD: Transfer canceled
Definition: windrvr.h:1330
@ WD_INCORRECT_VERSION
[0x2000001c] Incorrect version.
Definition: windrvr.h:1205
@ WD_USBD_STATUS_PENDING
[0x40000000] Operation pending
Definition: windrvr.h:1261
@ WD_USBD_STATUS_TIMEOUT
[0xC0006000] USBD: Timeout
Definition: windrvr.h:1423
@ WD_USBD_STATUS_ISOCH_REQUEST_FAILED
[0xC0000B00] Returned by HCD (Host Controller Driver) if all packets in an isochronous transfer compl...
Definition: windrvr.h:1380
@ WD_FAILED_ENABLING_INTERRUPT
[0x2000000c] Failed Enabling Interrupts.
Definition: windrvr.h:1111
@ WD_KERPLUG_FAILURE
[0x2000000b] Kernel PlugIn failure.
Definition: windrvr.h:1107
@ WD_WINDRIVER_NOT_FOUND
[0x2000001e] Obsolete
Definition: windrvr.h:1215
@ WD_SET_CONFIGURATION_FAILED
[0x20000013] Set Configuration Failed (USB).
Definition: windrvr.h:1155
@ WD_USBD_STATUS_CRC
[0xC0000001] HC status: CRC
Definition: windrvr.h:1275
@ 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:1336
@ WD_USBD_STATUS_INTERNAL_HC_ERROR
[0x80000800] Generic HC (Host Controller) error:
Definition: windrvr.h:1367
@ WD_FAILED_USER_MAPPING
[0x20000017] Failed to map memory to User Space.
Definition: windrvr.h:1168
@ WD_USBD_STATUS_INVALID_PIPE_HANDLE
[80000600] USBD: Invalid pipe handle
Definition: windrvr.h:1360
@ WD_STATUS_SUCCESS
[0] Operation completed successfully
Definition: windrvr.h:1061
@ WD_USBD_STATUS_INAVLID_PIPE_FLAGS
[0xC0005000] USBD: Invalid pipe flags
Definition: windrvr.h:1419
@ WD_INVALID_IOCTL
[0x2000001f] Invalid IOCTL.
Definition: windrvr.h:1216
@ WD_TIME_OUT_EXPIRED
[0x20000015] Time Out Expired.
Definition: windrvr.h:1161
@ WD_SYSTEM_INTERNAL_ERROR
[0x20000007] Internal System Error
Definition: windrvr.h:1090
@ WD_USBD_STATUS_BUFFER_TOO_SMALL
[0xC0003000] USBD: Buffer too small
Definition: windrvr.h:1411
@ WD_USBD_STATUS_INSUFFICIENT_RESOURCES
[0xC0001000] USBD: Insufficient resources
Definition: windrvr.h:1402
@ WD_USBD_STATUS_DATA_OVERRUN
[0xC0000008] HC status: Data overrun
Definition: windrvr.h:1294
@ WD_ZERO_PACKET_SIZE
[0x20000004] Maximum packet size is zero
Definition: windrvr.h:1082
@ WD_USBD_STATUS_ERROR_SHORT_TRANSFER
[0x80000900] Returned when a short packet terminates the transfer
Definition: windrvr.h:1371
@ WD_USBD_STATUS_STALL_PID
[0xC0000004] HC status: PID stall
Definition: windrvr.h:1283
@ WD_USBD_STATUS_PID_CHECK_FAILURE
[0xC0000006] HC status: PID check failed
Definition: windrvr.h:1288
@ WD_USBD_STATUS_ISO_NA_LATE_USBPORT
[0xC0040000] The packet was submitted in time by the client but
Definition: windrvr.h:1447
@ WD_CANT_OBTAIN_PDO
[0x20000014] Obsolete
Definition: windrvr.h:1160
@ WD_USBD_STATUS_BABBLE_DETECTED
[0xC0000012] HC status: Babble detected
Definition: windrvr.h:1322
@ WD_USBD_STATUS_HALTED
[0xC0000000] Halted
Definition: windrvr.h:1264
@ WD_INSUFFICIENT_RESOURCES
[0x20000005] Insufficient resources.
Definition: windrvr.h:1084
@ WD_USBD_STATUS_FRAME_CONTROL_OWNED
[0xC0000C00] Returned by USBD if the frame length control for a given
Definition: windrvr.h:1384
@ WD_USBD_STATUS_BTSTUFF
[0xC0000002] HC status: Bit stuffing
Definition: windrvr.h:1277
@ WD_USBD_STATUS_BUFFER_OVERRUN
[0xC000000C] HC status: Buffer overrun
Definition: windrvr.h:1304
@ WD_USBD_STATUS_SET_CONFIG_FAILED
[0xC0002000] USBD: Set configuration failed
Definition: windrvr.h:1406
@ WD_IRP_CANCELED
[0x20000016] IRP Cancelled.
Definition: windrvr.h:1165
@ WD_INVALID_PIPE_NUMBER
[0x20000002] USB: Invalid Pipe Number.
Definition: windrvr.h:1075
@ WD_OPERATION_ALREADY_DONE
[0x20000011] Operation Already Done.
Definition: windrvr.h:1141
@ WD_USBD_STATUS_STATUS_NOT_MAPPED
[0xC0008000] USBD: Status not mapped
Definition: windrvr.h:1429
@ WD_STATUS_INVALID_WD_HANDLE
[0xffffffff]
Definition: windrvr.h:1062
@ WD_USBD_STATUS_NO_MEMORY
[0x80000100] USBD: Out of memory
Definition: windrvr.h:1340
DEBUG_SECTION
Definition: windrvr.h:964
@ S_MISC
Definition: windrvr.h:971
@ S_IO
Definition: windrvr.h:966
@ S_DMA
Definition: windrvr.h:970
@ S_LICENSE
Definition: windrvr.h:972
@ S_EVENT
Definition: windrvr.h:978
@ S_INT
Definition: windrvr.h:968
@ S_USB
Definition: windrvr.h:976
@ S_ALL
Definition: windrvr.h:965
@ S_KER_PLUG
Definition: windrvr.h:977
@ S_MEM
Definition: windrvr.h:967
@ S_KER_BUF
Definition: windrvr.h:980
@ S_KER_DRV
Definition: windrvr.h:975
@ S_PCI
Definition: windrvr.h:969
@ S_PNP
Definition: windrvr.h:973
@ S_IPC
Definition: windrvr.h:979
@ S_CARD_REG
Definition: windrvr.h:974
struct WD_VERSION WD_VERSION_V30
struct WD_LICENSE WD_LICENSE_V122
WD_PCI_SCAN_OPTIONS
Definition: windrvr.h:875
@ WD_PCI_SCAN_BY_TOPOLOGY
Definition: windrvr.h:877
@ WD_PCI_SCAN_DEFAULT
Definition: windrvr.h:876
@ WD_PCI_SCAN_INCLUDE_DOMAINS
Definition: windrvr.h:879
@ WD_PCI_SCAN_REGISTERED
Definition: windrvr.h:878
WD_TRANSFER_CMD
IN WD_TRANSFER_CMD and WD_Transfer() DWORD stands for 32 bits and QWORD is 64 bit.
Definition: windrvr.h:385
@ WM_SWORD
Write memory string word.
Definition: windrvr.h:421
@ WM_SBYTE
Write memory string byte.
Definition: windrvr.h:420
@ RP_SDWORD
Read port string dword.
Definition: windrvr.h:401
@ WM_BYTE
Write memory byte.
Definition: windrvr.h:411
@ WM_SQWORD
Write memory string quad word.
Definition: windrvr.h:424
@ RM_DWORD
Read memory dword.
Definition: windrvr.h:410
@ WP_DWORD
Write port dword.
Definition: windrvr.h:395
@ RP_BYTE
Read port byte.
Definition: windrvr.h:390
@ WM_SDWORD
Write memory string dword.
Definition: windrvr.h:422
@ RM_WORD
Read memory word.
Definition: windrvr.h:409
@ RM_SBYTE
Read memory string byte.
Definition: windrvr.h:417
@ WP_SQWORD
Write port string qword.
Definition: windrvr.h:406
@ RM_BYTE
Read memory byte.
Definition: windrvr.h:408
@ WP_SBYTE
Write port string byte.
Definition: windrvr.h:402
@ WP_SWORD
Write port string word.
Definition: windrvr.h:403
@ RM_SWORD
Read memory string word.
Definition: windrvr.h:418
@ CMD_MASK
Interrupt Mask.
Definition: windrvr.h:388
@ WM_DWORD
Write memory dword.
Definition: windrvr.h:413
@ CMD_NONE
No command.
Definition: windrvr.h:386
@ RP_DWORD
Read port dword.
Definition: windrvr.h:392
@ CMD_END
End command.
Definition: windrvr.h:387
@ WP_BYTE
Write port byte.
Definition: windrvr.h:393
@ RP_QWORD
Read port qword.
Definition: windrvr.h:396
@ WM_QWORD
Write memory qword.
Definition: windrvr.h:415
@ RM_SDWORD
Read memory string dword.
Definition: windrvr.h:419
@ RM_QWORD
Read memory qword.
Definition: windrvr.h:414
@ WP_WORD
Write port word.
Definition: windrvr.h:394
@ WP_SDWORD
Write port string dword.
Definition: windrvr.h:404
@ RM_SQWORD
Read memory string quad word.
Definition: windrvr.h:423
@ RP_SWORD
Read port string word.
Definition: windrvr.h:400
@ WM_WORD
Write memory word.
Definition: windrvr.h:412
@ RP_SBYTE
Read port string byte.
Definition: windrvr.h:399
@ WP_QWORD
Write port qword.
Definition: windrvr.h:397
@ RP_WORD
Read port word.
Definition: windrvr.h:391
@ RP_SQWORD
Read port string qword.
Definition: windrvr.h:405
#define INVALID_HANDLE_VALUE
Definition: windrvr.h:1552
@ WD_IPC_MAX_PROCS
Definition: windrvr.h:801
#define WD_MAX_KP_NAME_LENGTH
Definition: windrvr.h:60
#define WIN32
Definition: windrvr.h:183
#define WD_Close
Definition: windrvr.h:1839
#define WD_CloseLocal(h)
Definition: windrvr.h:1788
@ WD_IPC_UID_UNICAST
Definition: windrvr.h:814
@ WD_IPC_SUBGROUP_MULTICAST
Definition: windrvr.h:815
@ WD_IPC_MULTICAST
Definition: windrvr.h:816
WD_EVENT_OPTION
Definition: windrvr.h:1477
@ WD_ACCEPT_CONTROL
used in WD_EVENT_SEND (acknowledge)
Definition: windrvr.h:1479
@ WD_ACKNOWLEDGE
Definition: windrvr.h:1478
#define BZERO(buf)
Definition: windrvr.h:1548
WD_PCI_SCAN_CAPS_OPTIONS
Definition: windrvr.h:892
@ WD_PCI_SCAN_CAPS_BASIC
Scan basic PCI capabilities.
Definition: windrvr.h:893
@ WD_PCI_SCAN_CAPS_EXTENDED
Scan extended (PCIe) PCI capabilities.
Definition: windrvr.h:894
struct WD_DEBUG WD_DEBUG_V40
DWORD WD_BUS_TYPE
Definition: windrvr.h:681
UINT64 PHYS_ADDR
Definition: windrvr.h:378
struct WD_DEBUG_DUMP WD_DEBUG_DUMP_V40
@ INTERRUPT_MESSAGE
Message-Signaled Interrupts (MSI).
Definition: windrvr.h:614
@ INTERRUPT_CMD_RETURN_VALUE
Obsolete.
Definition: windrvr.h:613
@ INTERRUPT_LATCHED
Legacy Latched Interrupts .
Definition: windrvr.h:604
@ INTERRUPT_MESSAGE_X
Extended Message-Signaled Interrupts (MSI-X).
Definition: windrvr.h:615
@ 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:607
@ INTERRUPT_LEVEL_SENSITIVE
Legacy Level Sensitive Interrupts.
Definition: windrvr.h:605
@ INTERRUPT_CE_INT_ID
Obsolete.
Definition: windrvr.h:612
@ INTERRUPT_DONT_GET_MSI_MESSAGE
Linux Only.
Definition: windrvr.h:617
struct WD_PCI_SCAN_CAPS WD_PCI_SCAN_CAPS_V118
struct WD_DMA_PAGE WD_DMA_PAGE_V80
struct WD_EVENT WD_EVENT_V121
struct WD_IPC_REGISTER WD_IPC_REGISTER_V121
struct WD_KERNEL_PLUGIN WD_KERNEL_PLUGIN_V40
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:526
struct WD_PCI_SRIOV WD_PCI_SRIOV_V122
unsigned __int64 UINT64
Definition: windrvr.h:314
#define REGKEY_BUFSIZE
Definition: windrvr.h:1690
struct WD_IPC_SEND WD_IPC_SEND_V121
@ WD_PCI_MAX_CAPS
Definition: windrvr.h:882
#define WD_PROCESS_NAME_LENGTH
Definition: windrvr.h:783
@ SLEEP_BUSY
Definition: windrvr.h:946
@ SLEEP_NON_BUSY
Definition: windrvr.h:946
@ WD_BUS_EISA
EISA, including ISA PnP.
Definition: windrvr.h:678
@ WD_BUS_ISA
ISA.
Definition: windrvr.h:677
@ WD_BUS_UNKNOWN
Unknown bus type.
Definition: windrvr.h:676
@ WD_BUS_PCI
PCI.
Definition: windrvr.h:679
@ WD_BUS_USB
USB.
Definition: windrvr.h:675
const char *DLLCALLCONV WD_DriverName(const char *sName)
Sets the name of the WinDriver kernel module, which will be used by the calling application.
#define DLLCALLCONV
Definition: windrvr.h:32
WD_EVENT_ACTION
Definition: windrvr.h:1455
@ WD_POWER_SYSTEM_WORKING
Definition: windrvr.h:1464
@ WD_POWER_SYSTEM_SLEEPING3
Definition: windrvr.h:1467
@ WD_POWER_SYSTEM_HIBERNATE
Definition: windrvr.h:1468
@ WD_POWER_CHANGED_D0
Power states for the power management.
Definition: windrvr.h:1459
@ WD_OBSOLETE
Obsolete.
Definition: windrvr.h:1458
@ WD_POWER_SYSTEM_SLEEPING2
Definition: windrvr.h:1466
@ WD_POWER_CHANGED_D3
Definition: windrvr.h:1463
@ WD_POWER_SYSTEM_SHUTDOWN
Definition: windrvr.h:1469
@ WD_POWER_CHANGED_D2
Definition: windrvr.h:1462
@ WD_INSERT
Definition: windrvr.h:1456
@ WD_POWER_CHANGED_D1
Definition: windrvr.h:1461
@ WD_POWER_SYSTEM_SLEEPING1
Definition: windrvr.h:1465
@ WD_REMOVE
Definition: windrvr.h:1457
@ WD_IPC_UNICAST_MSG
Definition: windrvr.h:1470
@ WD_IPC_MULTICAST_MSG
Definition: windrvr.h:1471
@ WD_PCI_CARDS
Definition: windrvr.h:842
@ WD_EVENT_TYPE_IPC
Definition: windrvr.h:1493
@ WD_EVENT_TYPE_UNKNOWN
Definition: windrvr.h:1490
@ WD_EVENT_TYPE_USB
Definition: windrvr.h:1492
@ WD_EVENT_TYPE_PCI
Definition: windrvr.h:1491
UINT64 DMA_ADDR
Definition: windrvr.h:377
DWORD WD_EVENT_TYPE
Definition: windrvr.h:1495
struct WD_PCI_SCAN_CARDS WD_PCI_SCAN_CARDS_V124
WD_DMA_OPTIONS
Definition: windrvr.h:433
@ DMA_KERNEL_BUFFER_ALLOC
The system allocates a contiguous buffer.
Definition: windrvr.h:434
@ DMA_DISABLE_MERGE_ADJACENT_PAGES
Disable merge adjacent pages.
Definition: windrvr.h:483
@ DMA_TRANSACTION
Use this flag to use the DMA transaction mechanism.
Definition: windrvr.h:478
@ DMA_TO_DEVICE
memory pages are locked to be read by device
Definition: windrvr.h:454
@ DMA_KBUF_BELOW_16M
If DMA_KERNEL_BUFFER_ALLOC is used, this will make sure it is under 16M.
Definition: windrvr.h:437
@ DMA_ALLOW_NO_HCARD
Allow memory lock without hCard.
Definition: windrvr.h:462
@ DMA_FROM_DEVICE
memory pages are locked to be written by device
Definition: windrvr.h:451
@ DMA_GET_PREALLOCATED_BUFFERS_ONLY
Windows: Try to allocate buffers from preallocated buffers pool ONLY (if none of them are available,...
Definition: windrvr.h:474
@ DMA_GET_EXISTING_BUF
Get existing buffer by hDma handle.
Definition: windrvr.h:464
@ DMA_ALLOW_64BIT_ADDRESS
Use this value for devices that support 64-bit DMA addressing.
Definition: windrvr.h:459
@ DMA_TO_FROM_DEVICE
memory pages are locked for both read and write
Definition: windrvr.h:456
@ DMA_LARGE_BUFFER
If DMA_LARGE_BUFFER is used, the maximum number of pages are dwPages, and not WD_DMA_PAGES.
Definition: windrvr.h:440
@ DMA_GPUDIRECT
Linux only.
Definition: windrvr.h:481
@ DMA_ALLOW_CACHE
Allow caching of contiguous memory.
Definition: windrvr.h:446
@ DMA_KERNEL_ONLY_MAP
Only map to kernel, dont map to user-mode.
Definition: windrvr.h:448
@ 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:468
@ DMA_RESERVED_MEM
Definition: windrvr.h:466
@ WD_CARD_ITEMS
Definition: windrvr.h:763
@ WD_MATCH_EXCLUDE
Exclude if there is a match.
Definition: windrvr.h:507
unsigned int UINT32
Definition: windrvr.h:337
#define DEBUG_USER_BUF_LEN
Definition: windrvr.h:1012
struct WD_CARD_REGISTER WD_CARD_REGISTER_V118
WD_INTERRUPT_WAIT_RESULT
Definition: windrvr.h:631
@ INTERRUPT_INTERRUPTED
Wait was interrupted before an actual hardware interrupt was received.
Definition: windrvr.h:634
@ INTERRUPT_RECEIVED
Interrupt was received.
Definition: windrvr.h:632
@ INTERRUPT_STOPPED
Interrupt was disabled during wait.
Definition: windrvr.h:633
UINT32 KPTR
Definition: windrvr.h:368
#define WD_Open
Definition: windrvr.h:1840
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