📄 pcifunc.cpp
字号:
#include "PCIFunc.h"
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// unsigned int ReadPCIWord( unsigned char BUS_NUMBER,
// unsigned char DEVICE_NUMBER,
// unsigned char FUNCTION_NUMBER,
// unsigned char REGISTER_NUMBER)
//
// Input:BUS_NUMBER = bus to read from
// DEVICE_NUMBER = device number to read from
// FUNCTION_NUMBER = function number to read from
// REGISTER_NUMBER = starting register number(HIGH BIT)
// Output: Unsigned int : the word Value read from
// Description:Read a word from PCI Configuration Space
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
unsigned int ReadPCIWord ( unsigned char BUS_NUMBER,
unsigned char DEVICE_NUMBER,
unsigned char FUNCTION_NUMBER,
unsigned char REGISTER_NUMBER)
{
unsigned int Value , TempValue;
TempValue = ReadPCIByte(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER + 1);
Value = TempValue << 8;
TempValue = ReadPCIByte(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER);
Value += TempValue ;
return Value;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// void Write2PCIWord( unsigned char BUS_NUMBER,
// unsigned char DEVICE_NUMBER,
// unsigned char FUNCTION_NUMBER,
// unsigned char REGISTER_NUMBER,
// unsigned int VALUE)
//
// Input:BUS_NUMBER = bus to read from
// DEVICE_NUMBER = device number to Write to
// FUNCTION_NUMBER = function number to Write to
// REGISTER_NUMBER = starting register number(HIGH BIT)
// VALUE = The Value you want to Write
// Output: NONE
// Description:Write a word from PCI Configuration Space
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void Write2PCIWord( unsigned char BUS_NUMBER,
unsigned char DEVICE_NUMBER,
unsigned char FUNCTION_NUMBER,
unsigned char REGISTER_NUMBER,
unsigned int VALUE)
{
unsigned char ValueHigh , ValueLow;
ValueHigh = (unsigned char) ((VALUE & 0xFF00) >> 8);
ValueLow = (unsigned char) (VALUE & 0x00FF);
Write2PCIByte(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER + 1, ValueHigh);
Write2PCIByte(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER , ValueLow);
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// unsigned long ReadPCIDword( unsigned char BUS_NUMBER,
// unsigned char DEVICE_NUMBER,
// unsigned char FUNCTION_NUMBER,
// unsigned char REGISTER_NUMBER,
//
// Input:BUS_NUMBER = bus to read from
// DEVICE_NUMBER = device number to read from
// FUNCTION_NUMBER = function number to read from
// REGISTER_NUMBER = starting register number(HIGH BIT)
// Output: Unsigned long : the DWORD Value read from
// Description:Read a dword from PCI Configuration Space
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
unsigned long ReadPCIDword (unsigned char BUS_NUMBER,
unsigned char DEVICE_NUMBER,
unsigned char FUNCTION_NUMBER,
unsigned char REGISTER_NUMBER)
{
unsigned long Value ,TempValue;
TempValue = ReadPCIWord(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER + 2);
Value = TempValue << 16;
TempValue = ReadPCIWord(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER);
Value += TempValue ;
return Value;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// void Write2PCIWord( unsigned char BUS_NUMBER,
// unsigned char DEVICE_NUMBER,
// unsigned char FUNCTION_NUMBER,
// unsigned char REGISTER_NUMBER,
// unsigned long VALUE)
//
// Input:BUS_NUMBER = bus to read from
// DEVICE_NUMBER = device number to read from
// FUNCTION_NUMBER = function number to read from
// REGISTER_NUMBER = starting register number(HIGH BIT)
// VALUE = The Value you want to Write
// Output: NONE
// Description:Write a dword from PCI Configuration Space
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void Write2PCIDword(unsigned char BUS_NUMBER,
unsigned char DEVICE_NUMBER,
unsigned char FUNCTION_NUMBER,
unsigned char REGISTER_NUMBER,
unsigned long VALUE)
{
unsigned int ValueHigh , ValueLow;
ValueHigh = (unsigned int) ((VALUE & 0xFFFF0000) >> 16);
ValueLow = (unsigned int) (VALUE & 0x0000FFFF);
Write2PCIWord(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER + 2 , ValueHigh);
Write2PCIWord(BUS_NUMBER , DEVICE_NUMBER , FUNCTION_NUMBER , REGISTER_NUMBER , ValueLow);
}
//End of the Implementation of PCIFUNC.C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -