headers: Add emi.h Required for https://github.com/mozilla-firefox/firefox/commit/0675e9ba405c2cd242f1676d633c918aa3416774 Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com> Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/emi.h b/mingw-w64-headers/include/emi.h new file mode 100644 index 0000000..f2fee6b --- /dev/null +++ b/mingw-w64-headers/include/emi.h
@@ -0,0 +1,83 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the mingw-w64 runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +#ifndef _EMI_ +#define _EMI_ + +#if (NTDDI_VERSION >= NTDDI_WINBLUE) + +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) + +DEFINE_GUID(GUID_DEVICE_ENERGY_METER, 0x45bd8344, 0x7ed6, 0x49cf, 0xa4, 0x40, 0xc2, 0x76, 0xc9, 0x33, 0xb0, 0x53); + +#define IOCTL_EMI_GET_VERSION CTL_CODE(FILE_DEVICE_UNKNOWN, 0, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_EMI_GET_METADATA_SIZE CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_EMI_GET_METADATA CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_EMI_GET_MEASUREMENT CTL_CODE(FILE_DEVICE_UNKNOWN, 3, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define EMI_NAME_MAX 16 + +#define EMI_VERSION_V1 1 +#define EMI_VERSION_V2 2 + +typedef enum { + EmiMeasurementUnitPicowattHours +} EMI_MEASUREMENT_UNIT; + +typedef struct { + USHORT EmiVersion; +} EMI_VERSION; + +typedef struct { + ULONG MetadataSize; +} EMI_METADATA_SIZE; + +typedef struct { + ULONGLONG AbsoluteEnergy; + ULONGLONG AbsoluteTime; +} EMI_CHANNEL_MEASUREMENT_DATA; + +typedef struct { + EMI_MEASUREMENT_UNIT MeasurementUnit; + WCHAR HardwareOEM[EMI_NAME_MAX]; + WCHAR HardwareModel[EMI_NAME_MAX]; + USHORT HardwareRevision; + USHORT MeteredHardwareNameSize; + WCHAR MeteredHardwareName[ANYSIZE_ARRAY]; +} EMI_METADATA_V1; + +typedef EMI_CHANNEL_MEASUREMENT_DATA EMI_MEASUREMENT_DATA_V1; + +typedef EMI_METADATA_V1 EMI_METADATA; +typedef EMI_MEASUREMENT_DATA_V1 EMI_MEASUREMENT_DATA; + +typedef struct { + EMI_MEASUREMENT_UNIT MeasurementUnit; + USHORT ChannelNameSize; + WCHAR ChannelName[ANYSIZE_ARRAY]; +} EMI_CHANNEL_V2; + +typedef struct { + WCHAR HardwareOEM[EMI_NAME_MAX]; + WCHAR HardwareModel[EMI_NAME_MAX]; + USHORT HardwareRevision; + USHORT ChannelCount; + EMI_CHANNEL_V2 Channels[ANYSIZE_ARRAY]; +} EMI_METADATA_V2; + +typedef struct { + EMI_CHANNEL_MEASUREMENT_DATA ChannelData[ANYSIZE_ARRAY]; +} EMI_MEASUREMENT_DATA_V2; + +#define EMI_CHANNEL_V2_LENGTH(_ChannelNameSize) (FIELD_OFFSET(EMI_CHANNEL_V2, ChannelName) + (_ChannelNameSize)) + +#define EMI_CHANNEL_V2_NEXT_CHANNEL(_Channel) ((EMI_CHANNEL_V2 *)((PUCHAR)(_Channel) + EMI_CHANNEL_V2_LENGTH((_Channel)->ChannelNameSize))) + +#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ + +#endif /* (NTDDI_VERSION >= NTDDI_WINBLUE) */ + +#endif /* _EMI_ */