171 lines
5.1 KiB
C
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)
|