资源简介
自己编写的基于edk2编写的读写pci的小程序,模仿AMI RU工具,适合初学bios开发的developer

代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#define HEX_KEY_INPUT( x ) ( ( (x <= ‘9‘) && (x >= ‘0‘) ) || ( (x <= ‘F‘) && (x >= ‘A‘) ) || ( (x <= ‘f‘) && (x >= ‘a‘) ) )
#define CALC_EFI_PCI_ADDRESS( Bus Dev Fun Reg ) \
( (UINT64) ( ( ( (UINTN) Bus) << 24) + ( ( (UINTN) Dev) << 16) + \
( ( (UINTN) Fun) << 8) + ( (UINTN) Reg) ) )
#define SCAN_CODE_NULL 0x0000
#define SCAN_CODE_UP 0x0001
#define SCAN_CODE_DOWN 0x0002
#define SCAN_CODE_RIGHT 0x0003
#define SCAN_CODE_LEFT 0x0004
#define SCAN_CODE_PAGE_UP 0x0009
#define SCAN_CODE_PAGE_DOWN 0x000A
#define SCAN_CODE_ESC 0x0017
#define SCAN_CODE_F1 0x000B
#define CHAR_CR 0x000D
EFI_STATUS PCI_Reg( UINT8 UINT8 UINT8 );
UINTN
Xtoi(
IN CHAR16 *Str
)
{
return(StrHexToUintn( Str ) );
}
EFI_STATUS
EFIAPI
UefiMain
( IN EFI_HANDLE ImageHandle IN EFI_SYSTEM_TABLE *SystemTable )
{
EFI_INPUT_KEY Key;
EFI_STATUS Status;
UINT8 Addr;
UINT8 Bus;
UINT8 Dev;
UINT8 Fun;
UINTN Index3;
UINT8 InPutKeyFlag;
CHAR16 *InPutKey;
InPutKey = AllocatePool( 2 * 9 );
Status = EFI_SUCCESS;
InPutKeyFlag = 0;
Bus = 0;
Dev = 0;
Fun = 0;
Addr = 0;
gST->ConOut->ClearScreen( gST->ConOut );
Print( L“Bus:00“ );
for (;; )
{
gST->ConOut->EnableCursor( gST->ConOut TRUE );
gST->ConOut->SetCursorPosition( gST->ConOut 4 0 );
Status = gBS->WaitForEvent( 1 &gST->ConIn->WaitForKey &Index3 );
Status = gST->ConIn->ReadKeyStroke( gST->ConIn &Key );
if ( HEX_KEY_INPUT( Key.UnicodeChar ) )
{
if ( InPutKeyFlag >= 2 )
InPutKeyFlag = 0;
InPutKey[InPutKeyFlag] = Key.UnicodeChar;
InPutKey[InPutKeyFlag + 1] = L‘\0‘;
InPutKeyFlag++;
if ( InPutKeyFlag != 0 )
{
Addr = (UINT8) Xtoi( InPutKey );
if ( Addr < 0x10 )
{
Print( L“0%x“ Addr );
} else {
Print( L“%x“ Addr );
}
}
continue;
}
if ( Key.UnicodeChar == CHAR_CR )
{
Bus = Addr;
InPutKeyFlag = 0;
Addr = 0;
break;
}
if ( Key.ScanCode == SCAN_CODE_ESC )
{
break;
}
}
if ( Bus < 0x10 )
{
Print( L“0%x“ Bus );
} else { Print( L“%x“ Bus ); }
Print( L“ “ );
Print( L“Dev:00“ );
for (;; )
{
gST->ConOut->EnableCursor( gST->ConOut TRUE );
gST->ConOut->SetCursorPosition( gST->ConOut 11 0 );
Status = gBS->WaitForEvent( 1 &gST->ConIn->WaitForKey &Index3 );
Status = gST->ConIn->ReadKeyStroke( gST->ConIn &Key );
if ( HEX_KEY_INPUT( Key.UnicodeChar ) )
{
if ( InPutKeyFlag >= 2 )
InPutKeyFlag = 0;
InPutKey[InPutKeyFlag] = Key.UnicodeChar;
InPutKey[InPutKeyFlag + 1] = L‘\0‘;
InPutKeyFlag++;
if ( InPutKeyFlag != 0 )
{
Addr = (UINT8) Xtoi( InPutKey );
if ( Addr < 0x1
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-08-07 13:19 pciRW\
文件 10360 2016-08-07 11:50 pciRW\pci.c
文件 567 2016-08-07 12:03 pciRW\pci.info
- 上一篇:类似知乎的图文编辑器
- 下一篇:tex2word破解版).rar
相关资源
- 技嘉H310M S2 BIOS
- 技嘉z77p-d3 rev 1.0 添加nvme模块的最新
- 联想H61主板BIOS升级F9KT58AUS支持22NM.i
- Lenovo Z460 SLIC2.1 LENOVO-29CN38WW(V2.15)
- 联想G400G500G490BIOS
- ASUS BIOS 加NVME协议文件: Nvme.ffs NV
- Phoenix BIOS Editor.rar
- HP笔记本BIOS丢失解决方法,DMI TOOLK
- Y450 BIOS白名单
- BIOS修改工具DMI236
- 联想F40/F41bios3.13版
- 联想启天M4350 BIOS升级文件
- 详细图解联想Y430\\Y530笔记本SLIC表2.
- 联想g460 bios 29CN38WW(V2.15)
- G460 2.15 x64 bios
- 三星通用bios更新程序
- rx560bios合集-注意显存颗粒及供电
- 联想K29最新1.70BIOS修改版,去白名单验
- 联想刷bios‘工具
- 解决Y470/Y570更新2.12BIOS后无法识别8G内
- 黑苹果—盈通 R6770-1024GD5 TA 经典版
- 华硕P8H61/USB3 R2.0主板BIOS驱动 免费版
- 映泰Biostar TA870网
- asus华硕 m5a97 le r2.0主板bios 官方版
- 华硕ASUS K42JZ BIOS主板驱动程序 v9.1.1
- ASUS华硕B85主板BIOS驱动程序 官方版
- 联想A320一体机BIOS
- 启天M7150 BIOS
- 启天M7150 L-IG41M主板 BIOS
- gi945解除限制pjbios
评论
共有 条评论