ReactOS 0.4.16-dev-1401-gf1332c7
HalPortIo.c File Reference
#include <kmt_test.h>
#include <debug.h>
Include dependency graph for HalPortIo.c:

Go to the source code of this file.

Classes

struct  _TEST_CONTEXT
 

Macros

#define NDEBUG
 

Typedefs

typedef struct _TEST_CONTEXT TEST_CONTEXT
 
typedef struct _TEST_CONTEXTPTEST_CONTEXT
 

Functions

static DECLSPEC_NOINLINE VOID TestWriteStringUshort (_In_ PTEST_CONTEXT Context)
 
static DECLSPEC_NOINLINE VOID TestWriteStringUlong (_In_ PTEST_CONTEXT Context)
 
static DECLSPEC_NOINLINE VOID TestWriteStringUchar (_In_ PTEST_CONTEXT Context)
 
static DECLSPEC_NOINLINE VOID TestReadStringUshort (_In_ PTEST_CONTEXT Context)
 
static DECLSPEC_NOINLINE VOID TestReadStringUlong (_In_ PTEST_CONTEXT Context)
 
static DECLSPEC_NOINLINE VOID TestReadStringUchar (_In_ PTEST_CONTEXT Context)
 
static VOID TestStringIo (VOID)
 
 START_TEST (HalPortIo)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file HalPortIo.c.

Typedef Documentation

◆ PTEST_CONTEXT

◆ TEST_CONTEXT

Function Documentation

◆ START_TEST()

START_TEST ( HalPortIo  )

Definition at line 142 of file HalPortIo.c.

143{
144 TestStringIo();
145}
static VOID TestStringIo(VOID)
Definition: HalPortIo.c:113

◆ TestReadStringUchar()

static DECLSPEC_NOINLINE VOID TestReadStringUchar ( _In_ PTEST_CONTEXT  Context)
static

Definition at line 103 of file HalPortIo.c.

105{
106 __inbytestring(Context->Port, Context->Buffer, Context->Size);
107
108 ok_eq_pointer(Context->Buffer, Context->OldBuffer);
109}
#define ok_eq_pointer(value, expected)
Definition: apitest.h:40
PPC_QUAL void __inbytestring(unsigned long Port, unsigned char *Buffer, unsigned long Count)
Definition: intrin_ppc.h:584

Referenced by TestStringIo().

◆ TestReadStringUlong()

static DECLSPEC_NOINLINE VOID TestReadStringUlong ( _In_ PTEST_CONTEXT  Context)
static

Definition at line 92 of file HalPortIo.c.

94{
95 __outdwordstring(Context->Port, Context->Buffer, Context->Size / sizeof(ULONG));
96
97 ok_eq_pointer(Context->Buffer, Context->OldBuffer);
98}
PPC_QUAL void __outdwordstring(unsigned long const Port, const unsigned long *const Buffer, const unsigned long Count)
Definition: intrin_ppc.h:671
uint32_t ULONG
Definition: typedefs.h:59

Referenced by TestStringIo().

◆ TestReadStringUshort()

static DECLSPEC_NOINLINE VOID TestReadStringUshort ( _In_ PTEST_CONTEXT  Context)
static

Definition at line 81 of file HalPortIo.c.

83{
84 __inwordstring(Context->Port, Context->Buffer, Context->Size / sizeof(USHORT));
85
86 ok_eq_pointer(Context->Buffer, Context->OldBuffer);
87}
PPC_QUAL void __inwordstring(unsigned long Port, unsigned short *Buffer, unsigned long Count)
Definition: intrin_ppc.h:591
unsigned short USHORT
Definition: pedump.c:61

Referenced by TestStringIo().

◆ TestStringIo()

static VOID TestStringIo ( VOID  )
static

Definition at line 113 of file HalPortIo.c.

114{
116 UCHAR Buffer[20];
117
118 /* End of the x86 I/O range */
119 Context.Port = 0xFFFF - sizeof(ULONG);
120
121 Context.Buffer = Buffer;
122 Context.OldBuffer = Buffer;
123 Context.Size = sizeof(Buffer);
124
128
129 /*
130 * Check whether the driver is running inside a virtual machine
131 * as it's not safe to write to I/O ports
132 * without having the port resources assigned.
133 */
134 if (!skip(KmtIsVirtualMachine, "Please run those tests in a supported virtual machine\n"))
135 {
139 }
140}
static DECLSPEC_NOINLINE VOID TestWriteStringUshort(_In_ PTEST_CONTEXT Context)
Definition: HalPortIo.c:44
static DECLSPEC_NOINLINE VOID TestReadStringUlong(_In_ PTEST_CONTEXT Context)
Definition: HalPortIo.c:92
static DECLSPEC_NOINLINE VOID TestWriteStringUchar(_In_ PTEST_CONTEXT Context)
Definition: HalPortIo.c:70
static DECLSPEC_NOINLINE VOID TestWriteStringUlong(_In_ PTEST_CONTEXT Context)
Definition: HalPortIo.c:59
static DECLSPEC_NOINLINE VOID TestReadStringUshort(_In_ PTEST_CONTEXT Context)
Definition: HalPortIo.c:81
static DECLSPEC_NOINLINE VOID TestReadStringUchar(_In_ PTEST_CONTEXT Context)
Definition: HalPortIo.c:103
#define skip(...)
Definition: atltest.h:64
Definition: bufpool.h:45
BOOLEAN KmtIsVirtualMachine
unsigned char UCHAR
Definition: xmlstorage.h:181

Referenced by START_TEST().

◆ TestWriteStringUchar()

static DECLSPEC_NOINLINE VOID TestWriteStringUchar ( _In_ PTEST_CONTEXT  Context)
static

Definition at line 70 of file HalPortIo.c.

72{
73 __inbytestring(Context->Port, Context->Buffer, Context->Size);
74
75 ok_eq_pointer(Context->Buffer, Context->OldBuffer);
76}

Referenced by TestStringIo().

◆ TestWriteStringUlong()

static DECLSPEC_NOINLINE VOID TestWriteStringUlong ( _In_ PTEST_CONTEXT  Context)
static

Definition at line 59 of file HalPortIo.c.

61{
62 __outdwordstring(Context->Port, Context->Buffer, Context->Size / sizeof(ULONG));
63
64 ok_eq_pointer(Context->Buffer, Context->OldBuffer);
65}

Referenced by TestStringIo().

◆ TestWriteStringUshort()

static DECLSPEC_NOINLINE VOID TestWriteStringUshort ( _In_ PTEST_CONTEXT  Context)
static

Definition at line 44 of file HalPortIo.c.

46{
47 __outwordstring(Context->Port, Context->Buffer, Context->Size / sizeof(USHORT));
48
49 /*
50 * The 'rep outsw' instruction increments or decrements the address in ESI by Size * 2.
51 * Test for CORE-20078: the ESI value should be preserved across calls.
52 */
53 ok_eq_pointer(Context->Buffer, Context->OldBuffer);
54}
PPC_QUAL void __outwordstring(unsigned long const Port, const unsigned short *const Buffer, const unsigned long Count)
Definition: intrin_ppc.h:662

Referenced by TestStringIo().