Files
2025-04-07 07:44:27 -07:00

171 lines
5.1 KiB
C

//-----------------------------------------------------------------------------
// Author : hiyohiyo
// Mail : hiyohiyo@crystalmark.info
// Web : http://openlibsys.org/
// License : The modified BSD license
//
// Copyright 2007-2008 OpenLibSys.org. All rights reserved.
//-----------------------------------------------------------------------------
#pragma once
//-----------------------------------------------------------------------------
//
// The Device type codes form 32768 to 65535 are for customer use.
//
//-----------------------------------------------------------------------------
#define OLS_TYPE 40000
//-----------------------------------------------------------------------------
//
// Version Information
//
//-----------------------------------------------------------------------------
#define OLS_DRIVER_ID _T("WinRing0_1_2_0")
#define OLS_DRIVER_MAJOR_VERSION 1
#define OLS_DRIVER_MINOR_VERSION 2
#define OLS_DRIVER_REVISION 0
#define OLS_DRIVER_RELESE 5
#define OLS_DRIVER_VERSION \
((OLS_DRIVER_MAJOR_VERSION << 24) | (OLS_DRIVER_MINOR_VERSION << 16) \
| (OLS_DRIVER_REVISION << 8) | OLS_DRIVER_RELESE)
//-----------------------------------------------------------------------------
//
// The IOCTL function codes from 0x800 to 0xFFF are for customer use.
//
//-----------------------------------------------------------------------------
#define IOCTL_OLS_GET_DRIVER_VERSION \
CTL_CODE(OLS_TYPE, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_OLS_GET_REFCOUNT \
CTL_CODE(OLS_TYPE, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_OLS_READ_MSR \
CTL_CODE(OLS_TYPE, 0x821, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_OLS_WRITE_MSR \
CTL_CODE(OLS_TYPE, 0x822, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_OLS_READ_PMC \
CTL_CODE(OLS_TYPE, 0x823, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_OLS_HALT \
CTL_CODE(OLS_TYPE, 0x824, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_OLS_READ_IO_PORT \
CTL_CODE(OLS_TYPE, 0x831, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_OLS_WRITE_IO_PORT \
CTL_CODE(OLS_TYPE, 0x832, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_OLS_READ_IO_PORT_BYTE \
CTL_CODE(OLS_TYPE, 0x833, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_OLS_READ_IO_PORT_WORD \
CTL_CODE(OLS_TYPE, 0x834, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_OLS_READ_IO_PORT_DWORD \
CTL_CODE(OLS_TYPE, 0x835, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_OLS_WRITE_IO_PORT_BYTE \
CTL_CODE(OLS_TYPE, 0x836, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_OLS_WRITE_IO_PORT_WORD \
CTL_CODE(OLS_TYPE, 0x837, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_OLS_WRITE_IO_PORT_DWORD \
CTL_CODE(OLS_TYPE, 0x838, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_OLS_READ_MEMORY \
CTL_CODE(OLS_TYPE, 0x841, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_OLS_WRITE_MEMORY \
CTL_CODE(OLS_TYPE, 0x842, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_OLS_READ_PCI_CONFIG \
CTL_CODE(OLS_TYPE, 0x851, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_OLS_WRITE_PCI_CONFIG \
CTL_CODE(OLS_TYPE, 0x852, METHOD_BUFFERED, FILE_WRITE_ACCESS)
//-----------------------------------------------------------------------------
//
// PCI Error Code
//
//-----------------------------------------------------------------------------
#define OLS_ERROR_PCI_BUS_NOT_EXIST (0xE0000001L)
#define OLS_ERROR_PCI_NO_DEVICE (0xE0000002L)
#define OLS_ERROR_PCI_WRITE_CONFIG (0xE0000003L)
#define OLS_ERROR_PCI_READ_CONFIG (0xE0000004L)
//-----------------------------------------------------------------------------
//
// Support Macros
//
//-----------------------------------------------------------------------------
// Bus Number, Device Number and Function Number to PCI Device Address
#define PciBusDevFunc(Bus, Dev, Func) ((Bus&0xFF)<<8) | ((Dev&0x1F)<<3) | (Func&7)
// PCI Device Address to Bus Number
#define PciGetBus(address) ((address>>8) & 0xFF)
// PCI Device Address to Device Number
#define PciGetDev(address) ((address>>3) & 0x1F)
// PCI Device Address to Function Number
#define PciGetFunc(address) (address&7)
//-----------------------------------------------------------------------------
//
// Typedef Struct
//
//-----------------------------------------------------------------------------
#pragma pack(push,4)
typedef struct _OLS_WRITE_MSR_INPUT {
ULONG Register;
ULARGE_INTEGER Value;
} OLS_WRITE_MSR_INPUT;
typedef struct _OLS_WRITE_IO_PORT_INPUT {
ULONG PortNumber;
union {
ULONG LongData;
USHORT ShortData;
UCHAR CharData;
};
} OLS_WRITE_IO_PORT_INPUT;
typedef struct _OLS_READ_PCI_CONFIG_INPUT {
ULONG PciAddress;
ULONG PciOffset;
} OLS_READ_PCI_CONFIG_INPUT;
typedef struct _OLS_WRITE_PCI_CONFIG_INPUT {
ULONG PciAddress;
ULONG PciOffset;
UCHAR Data[1];
} OLS_WRITE_PCI_CONFIG_INPUT;
typedef LARGE_INTEGER PHYSICAL_ADDRESS;
typedef struct _OLS_READ_MEMORY_INPUT {
PHYSICAL_ADDRESS Address;
ULONG UnitSize;
ULONG Count;
} OLS_READ_MEMORY_INPUT;
typedef struct _OLS_WRITE_MEMORY_INPUT {
PHYSICAL_ADDRESS Address;
ULONG UnitSize;
ULONG Count;
UCHAR Data[1];
} OLS_WRITE_MEMORY_INPUT;
#pragma pack(pop)