⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcifunc.cpp

📁 PC燒錄BIOS的源程序
💻 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 + -