summaryrefslogtreecommitdiff
path: root/simemi/simemi.h
blob: ecc6c957a274505b3984bde8f69b8e60713b0897 (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
/*++

Copyright (c) Microsoft Corporation. All rights reserved.

Module Name:

    simemi.h

Abstract:

    This module contains the internal declarations of the simemi driver.

--*/

#pragma once

#include <ntddk.h>
#include <wdf.h>
#include "simemipublic.h"

#define SIM_EMI_TAG 'IMES'

typedef struct _SIM_EMI_BUS_FDO_DATA {
    FAST_MUTEX BusMutex;
    LIST_ENTRY ChildDevices;
} SIM_EMI_BUS_FDO_DATA, *PSIM_EMI_BUS_FDO_DATA;

typedef struct _SIM_EMI_CHANNEL_DATA {
    ULONG64 LastPollTime;
    ULONG64 LastAbsoluteEnergy;

    SIM_EMI_BUS_CHANNEL_INFO Info;
} SIM_EMI_CHANNEL_DATA, *PSIM_EMI_CHANNEL_DATA;

#define SIM_EMI_CHANNEL_DATA_SIZE(_ChannelNameSize) \
    (FIELD_OFFSET(SIM_EMI_CHANNEL_DATA, Info) + \
        SIM_EMI_BUS_CHANNEL_INFO_SIZE(_ChannelNameSize))

#define SIM_EMI_CHANNEL_DATA_NEXT_CHANNEL_DATA(_Channel) \
    ((PSIM_EMI_CHANNEL_DATA)((PUCHAR)(_Channel) + \
        SIM_EMI_CHANNEL_DATA_SIZE((_Channel)->Info.ChannelNameSize)))

typedef struct _SIM_EMI_BUS_PDO_DATA {
    LIST_ENTRY Link;
    PFAST_MUTEX BusMutex;

    USHORT EmiVersion;
    ULONG ChildDeviceHandle;
    USHORT ChannelCount;
    SIM_EMI_CHANNEL_DATA ChannelData[ANYSIZE_ARRAY];
} SIM_EMI_BUS_PDO_DATA, *PSIM_EMI_BUS_PDO_DATA;

WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(SIM_EMI_BUS_FDO_DATA, SimEmiGetFdoData);
WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(SIM_EMI_BUS_PDO_DATA, SimEmiGetPdoData);

typedef struct _SIM_EMI_BUS_PDO_IDENTIFICATION_INFO {
    WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER Header;

    USHORT EmiVersion;
    ULONG ChildDeviceHandle;

    USHORT ChannelCount;
    ULONG ChannelInfoSize;
    PSIM_EMI_BUS_CHANNEL_INFO ChannelInfo;
} SIM_EMI_BUS_PDO_IDENTIFICATION_INFO, *PSIM_EMI_BUS_PDO_IDENTIFICATION_INFO;

static LPCWSTR SimEmiHardwareOEM = L"SimEmi";
static LPCWSTR SimEmiHardwareModelV1 = L"SimEmiV1";
static LPCWSTR SimEmiHardwareModelV2 = L"SimEmiV2";
static const USHORT SimEmiHardwareRevisionV1 = 1;
static const USHORT SimEmiHardwareRevisionV2 = 2;

//
// simemifdo.c routine declarations
//

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL SimEmiFdoControl;
EVT_WDF_DRIVER_DEVICE_ADD SimEmiFdoCreateDevice;

//
// simemipdo.c routine declarations
//

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL SimEmiPdoControl;
EVT_WDF_CHILD_LIST_CREATE_DEVICE SimEmiPdoCreateDevice;