summaryrefslogtreecommitdiff
path: root/tools/sdv/samples/SDV-FailDriver-NDIS/driver/mp.h
blob: 8f1160388cfffc1f53fff9da082659c3404752f6 (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#ifndef _MP_H
#define _MP_H

#ifdef __cplusplus
extern "C" {
#endif
#include <ndis.h>
#ifdef __cplusplus
}
#endif

#define MP_NDIS_MAJOR_VERSION       6
#define MP_NDIS_MINOR_VERSION       0

#pragma warning(disable: 28121)
#pragma warning(disable: 28141)

typedef enum _NIC_PAUSE_STATE
{
    NicPaused,
    NicPausing,
    NicRunning
} NIC_PAUSE_STATE, *PNIC_PAUSE_STATE;

typedef enum _NIC_PNP_STATE
{
    NicStarted,
    NicInReset,
    NicShutdown,
    NicHalted
} NIC_PNP_STATE, *PNIC_PNP_STATE;

#define NIC_TAG                         ((ULONG)'001E')


#define NIC_INTERFACE_TYPE              NdisInterfacePci
#define NIC_CHECK_FOR_HANG_TIME         2
//10000 system time units (100-nanosecond intervals) = 1 milliseconds
#define NIC_LINK_DETECTION_DELAY        -1000000 //-1*(100*10000) 

typedef struct _MP_ADAPTER
{
    NDIS_HANDLE             AdapterHandle;

    NDIS_SPIN_LOCK          Lock;

    NIC_PAUSE_STATE         PauseState;
    NIC_PNP_STATE           PNPState;
    
    ULONG                   RefCount;

    ULONG                   LastRefCount;

    BOOLEAN                 InterruptRegistered;
    NDIS_HANDLE             InterruptHandle;

    BOOLEAN                 TimerRegistered;
    NDIS_HANDLE             TimerHandle;
    
    BOOLEAN                 AdapetrMemoryAllocated;
    NDIS_HANDLE             NdisMiniportDmaHandle;

} MP_ADAPTER, *PMP_ADAPTER;


//--------------------------------------
// Miniport routines in MP_MAIN.C
//--------------------------------------

#ifdef __cplusplus
extern "C"
#endif
NDIS_STATUS
DriverEntry(
    _In_ PDRIVER_OBJECT      DriverObject,
    _In_ PUNICODE_STRING     RegistryPath
    );


MINIPORT_ALLOCATE_SHARED_MEM_COMPLETE MPAllocateComplete;

MINIPORT_HALT MPHalt;
MINIPORT_SET_OPTIONS MPSetOptions;
MINIPORT_INITIALIZE MPInitialize;
MINIPORT_PAUSE MPPause;
MINIPORT_RESTART MPRestart;
MINIPORT_OID_REQUEST MPOidRequest;
MINIPORT_INTERRUPT_DPC MPHandleInterrupt;
MINIPORT_ISR MPIsr;
MINIPORT_RESET MPReset;
MINIPORT_RETURN_NET_BUFFER_LISTS MPReturnNetBufferLists;
MINIPORT_CANCEL_OID_REQUEST MPCancelOidRequest;
MINIPORT_SHUTDOWN MPShutdown;
MINIPORT_SEND_NET_BUFFER_LISTS MPSendNetBufferLists;
MINIPORT_CANCEL_SEND MPCancelSendNetBufferLists;
MINIPORT_DEVICE_PNP_EVENT_NOTIFY MPPnPEventNotify;
MINIPORT_UNLOAD MPUnload;
MINIPORT_CHECK_FOR_HANG MPCheckForHang;
MINIPORT_ENABLE_INTERRUPT MpEnableInterrupt;
MINIPORT_DISABLE_INTERRUPT MpDisableInterrupt;
MINIPORT_SYNCHRONIZE_INTERRUPT MPSynchronizeInterrupt;
MINIPORT_PROCESS_SG_LIST MPProcessSGList;
NDIS_TIMER_FUNCTION MpDemonstrationTimer;
NDIS_IO_WORKITEM_FUNCTION MPQueuedWorkItem;

NDIS_STATUS 
NICAllocAdapterMemory(
    _In_ PMP_ADAPTER     Adapter
    );
    
NDIS_STATUS 
MpRegisterInterrupt(
    _In_ PMP_ADAPTER         pAdapter
    );

NDIS_STATUS
MpQueueTimer(
    _In_ PMP_ADAPTER         pAdapter
    );

#endif  // _MP_H