summaryrefslogtreecommitdiff
path: root/gpio/samples/simdevice/common.h
blob: 003fb4182b2e5ca7519d5db11daa96c0969fdec7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*++

Copyright (c) Microsoft Corporation.  All rights reserved.

    THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
    KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
    PURPOSE.

Module Name:

    common.h

Abstract:

    Header file that provide some utility functionalities to the sample device driver

Environment:

    Kernel mode

--*/

#pragma once

#ifndef _KERNEL_MODE
// This is a user-mode driver
#include <windows.h>
#else
// This is a kernel-mode driver
#include <ntddk.h>
#define NTSTRSAFE_LIB
#include <ntstrsafe.h>
#endif

#pragma warning(disable:4201)  // disable nameless struct/union warnings
#include <wdf.h>
#pragma warning(default:4201)

#ifndef MAX_USHORT
#define MAX_USHORT ((USHORT)-1)
#endif

#ifndef MAX_ULONG
#define MAX_ULONG ((ULONG)-1)
#endif

#ifndef MAX_ULONG64
#define MAX_ULONG64 ((ULONG64)-1)
#endif

//
// Useful macros for setting and checking flags.
//

#define SET_FLAGS(_x, _f)          ((_x) |= (_f))
#define CLEAR_FLAGS(_x, _f)        ((_x) &= ~(_f))
#define CLEAR_OTHER_FLAGS(_x, _f)  ((_x) &= (_f))
#define CHECK_FLAG(_x, _f)         ((_x) & (_f))

//
// Macros for rounding up or down.
//

#define ROUND_DOWN(_x, _alignment) \
    ((_alignment == 1) ? (_x) : (((_x) / (_alignment)) * (_alignment)))

#define ROUND_UP(_x, _alignment) \
    ROUND_DOWN((_x) + (_alignment) - 1, (_alignment))

//
// Macros for find minimum and maximum of two integers.
//

#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#define MAX(a,b) (((a) < (b)) ? (b) : (a))

//
// Define macros to allow easy pointer arithmetic.
//

#define Add2Ptr(_Ptr, _Value) ((PVOID)((PUCHAR)(_Ptr) + (_Value)))
#define PtrOffset(_Base, _Ptr) ((ULONG_PTR)(_Ptr) - (ULONG_PTR)(_Base))

// 4127 -- Conditional Expression is Constant warning
#define WHILE(constant) \
__pragma(warning(disable: 4127)) while(constant) __pragma(warning(default: 4127))

#define FIELD_OFFSET_AND_SIZE(t, f) \
    (FIELD_OFFSET(t, f) + FIELD_SIZE(t, f))