代码写的很糙,仅供参考
c文件
#include "Uefi.h"
#include "Library/UefiBootServicesTableLib.h"
#include "Library/UefiRuntimeServicesTableLib.h"
#include "Library/DebugLib.h"
#include "Library/MemoryAllocationLib.h"
#include "Guid/ComExpressConfigVariable.h"
#include "WellsburgPkg/Include/Library/PchPlatformLib.h"
#include "Library/UefiLib.h"
#include <Protocol/ShellParameters.h>
#include <Protocol/Shell.h>
CHAR16 **Argv;
#define RCBA 0xFED1C000
EFI_STATUS
GetArg (
VOID
)
{
EFI_STATUS Status;
EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters;
Status = gBS->HandleProtocol (
gImageHandle,
&gEfiShellParametersProtocolGuid,
(VOID**)&ShellParameters
);
if (EFI_ERROR(Status)) {
return Status;
}
Argv = ShellParameters->Argv;
return EFI_SUCCESS;
}
EFI_STATUS
EFIAPI
Siconfig(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable)
{
EFI_STATUS Status;
UINT8 TxPeHalf, PeTxiset, Txiset;
UINT32 Data32Or, Data32And,Data32;
UINT32 TempBuf1,TempBuf2;
Print(L"hello world\n");
Status = GetArg();
TempBuf1 = (UINT32)StrHexToUintn(Argv[1]);
TempBuf2 = (UINT32)StrHexToUintn(Argv[2]);
Print(L" Status :%r\n",Status);
Print(L"%x %x\n",TempBuf1,TempBuf2);
TxPeHalf = (UINT8)(TempBuf1 >> 16);
PeTxiset = (UINT8)(TempBuf1 >> 8);
Txiset = (UINT8)TempBuf1;
//
Data32And = (UINT32)~(0x00007F00);
Data32Or = (UINT32) (0x00000000);
ASSERT (TxPeHalf < 2);
Data32Or |= (TxPeHalf & 0x01) << 14; // BIT[14] (PERPORTTXPEHALF) = Usb20EyeDiagramTuningParam3
ASSERT (PeTxiset < 8);
Data32Or |= (PeTxiset & 0x07) << 11; // BIT[13:11] (PERPORTPETXISET) = Usb20EyeDiagramTuningParam2
ASSERT (Txiset < 8);
Data32Or |= (Txiset & 0x07) << 8; // BIT[10:08] (PERPORTTXISET) = Usb20EyeDiagramTuningParam1
//
Status = ProgramIobp (
RCBA,
0xE5004000 + (TempBuf2 * 0x100),
Data32And,
Data32Or
);
Print(L" write usb si :%r\n",Status);
Status = ReadIobp(RCBA,0xE5004000+(TempBuf2 * 0x100),&Data32);
Print(L" read usb si : %x %r\n",Data32,Status);
return Status;
}
inf文件
[Defines]
INF_VERSION = 0x00010015
VERSION_STRING = 1.0
BASE_NAME = Siconfig
MODULE_TYPE = UEFI_APPLICATION
FILE_GUID = 42081926-cb7d-4365-b67f-3150c801d58c
ENTRY_POINT = Siconfig
[Sources]
Siconfig.c
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
ServerCommonPkg/ServerCommonPkg.dec
AmiCompatibilityPkg/AmiCompatibilityPkg.dec
AmiTsePkg/AmiTsePkg.dec
GrantleySocketPkg/SocketPkg.dec
WellsburgPkg/WellsburgPkg.dec
[Protocols]
gEfiShellParametersProtocolGuid
[LibraryClasses]
UefiApplicationEntryPoint
UefiBootServicesTableLib
UefiRuntimeServicesTableLib
DebugLib
MemoryAllocationLib
PchPlatformLib
UefiLib
BaseLib
PchPlatformLib
MemoryAllocationLib
[Depex]
gEfiShellParametersProtocolGuid