[DDK]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 23 Dec 2013 17:40:50 +0000 (17:40 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 23 Dec 2013 17:40:50 +0000 (17:40 +0000)
Introduce DDK headers needed for Virtual Device Drivers development. nt_vdd.h and vddsvc.h will get populated with functions as soon as they will be implemented in NTVDM.
isvbop.h/.inc is fully implemented. isvbop.inc defines 3rd-party VDD bops and "function"-calls for 16-bit apps (in assembler), and isvbop.h defines the same in C-language.
They are both MSVC and GCC-compatible.

svn path=/branches/ntvdm/; revision=61352

include/ddk/isvbop.h [new file with mode: 0644]
include/ddk/isvbop.inc [new file with mode: 0644]
include/ddk/nt_vdd.h [new file with mode: 0644]
include/ddk/vddsvc.h [new file with mode: 0644]

diff --git a/include/ddk/isvbop.h b/include/ddk/isvbop.h
new file mode 100644 (file)
index 0000000..088e9e6
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * isvbop.h
+ *
+ * Windows NT Device Driver Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ *   Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+/*
+ * The corresponding ASM header of this file is isvbop.inc.
+ */
+
+#pragma once
+
+/* BOP Identifiers */
+#define BOP_3RDPARTY    0x58    // 3rd-party VDD BOP
+#define BOP_UNSIMULATE  0xFE    // Stop execution
+
+#if defined(__GNUC__)
+
+#define RegisterModule()    __asm__(".byte 0xC4, 0xC4, %c0, 0" : : "i"(BOP_3RDPARTY))
+#define UnRegisterModule()  __asm__(".byte 0xC4, 0xC4, %c0, 1" : : "i"(BOP_3RDPARTY))
+#define DispatchCall()      __asm__(".byte 0xC4, 0xC4, %c0, 2" : : "i"(BOP_3RDPARTY))
+#define VDDUnSimulate16()   __asm__(".byte 0xC4, 0xC4, %c0"    : : "i"(BOP_UNSIMULATE))
+
+#elif defined(_MSC_VER)
+
+#define RegisterModule()    _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_3RDPARTY _asm _emit 0
+#define UnRegisterModule()  _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_3RDPARTY _asm _emit 1
+#define DispatchCall()      _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_3RDPARTY _asm _emit 2
+#define VDDUnSimulate16()   _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_UNSIMULATE
+
+#else
+#error Unknown compiler for inline assembler
+#endif
+
+/* EOF */
diff --git a/include/ddk/isvbop.inc b/include/ddk/isvbop.inc
new file mode 100644 (file)
index 0000000..7a13b4b
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * isvbop.inc
+ *
+ * Windows NT Device Driver Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ *   Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+/*
+ * This is the corresponding ASM header for isvbop.h.
+ * Please refer to isvbop.h for information about these interfaces.
+ */
+
+#include <asm.inc>
+
+BOP_3RDPARTY    = HEX(58)
+BOP_UNSIMULATE  = HEX(FE)
+
+MACRO(RegisterModule)
+    .byte HEX(C4), HEX(C4), BOP_3RDPARTY, 0
+ENDM
+
+MACRO(UnRegisterModule)
+    .byte HEX(C4), HEX(C4), BOP_3RDPARTY, 1
+ENDM
+
+MACRO(DispatchCall)
+    .byte HEX(C4), HEX(C4), BOP_3RDPARTY, 2
+ENDM
+
+MACRO(VDDUnSimulate16)
+    .byte HEX(C4), HEX(C4), BOP_UNSIMULATE
+ENDM
+
+/* EOF */
diff --git a/include/ddk/nt_vdd.h b/include/ddk/nt_vdd.h
new file mode 100644 (file)
index 0000000..199c6c6
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * nt_vdd.h
+ *
+ * Windows NT Device Driver Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ *   Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#pragma once
+
+#define _NT_VDD
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * I/O Port services
+ */
+
+typedef VOID (*PFNVDD_INB)   (WORD iport, PBYTE data);
+typedef VOID (*PFNVDD_INW)   (WORD iport, PWORD data);
+typedef VOID (*PFNVDD_INSB)  (WORD iport, PBYTE data, WORD count);
+typedef VOID (*PFNVDD_INSW)  (WORD iport, PWORD data, WORD count);
+typedef VOID (*PFNVDD_OUTB)  (WORD iport, BYTE  data);
+typedef VOID (*PFNVDD_OUTW)  (WORD iport, WORD  data);
+typedef VOID (*PFNVDD_OUTSB) (WORD iport, PBYTE data, WORD count);
+typedef VOID (*PFNVDD_OUTSW) (WORD iport, PWORD data, WORD count);
+
+typedef struct _VDD_IO_HANDLERS
+{
+    PFNVDD_INB   inb_handler;
+    PFNVDD_INW   inw_handler;
+    PFNVDD_INSB  insb_handler;
+    PFNVDD_INSW  insw_handler;
+    PFNVDD_OUTB  outb_handler;
+    PFNVDD_OUTW  outw_handler;
+    PFNVDD_OUTSB outsb_handler;
+    PFNVDD_OUTSW outsw_handler;
+} VDD_IO_HANDLERS, *PVDD_IO_HANDLERS;
+
+typedef struct _VDD_IO_PORTRANGE
+{
+    WORD First;
+    WORD Last;
+} VDD_IO_PORTRANGE, *PVDD_IO_PORTRANGE;
+
+BOOL
+WINAPI
+VDDInstallIOHook
+(
+    HANDLE            hVdd,
+    WORD              cPortRange,
+    PVDD_IO_PORTRANGE pPortRange,
+    PVDD_IO_HANDLERS  IOhandler
+);
+
+VOID
+WINAPI
+VDDDeInstallIOHook
+(
+    HANDLE            hVdd,
+    WORD              cPortRange,
+    PVDD_IO_PORTRANGE pPortRange
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* EOF */
diff --git a/include/ddk/vddsvc.h b/include/ddk/vddsvc.h
new file mode 100644 (file)
index 0000000..be53553
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * vddsvc.h
+ *
+ * Windows NT Device Driver Kit
+ *
+ * This file is part of the ReactOS DDK package.
+ *
+ * Contributors:
+ *   Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#pragma once
+
+#ifndef _NT_VDD
+#include <nt_vdd.h>
+#endif
+
+
+
+/* EOF */