参考usb.sd,usb.uni,usbpolicy.h
crb.sb:
#ifdef ADVANCED_FORM_SET
#ifdef FORM_SET_TYPEDEF
#pragma pack(1)
typedef struct {
UINT8 PowerledMode;
UINT8 GpioNum;
} POWERLED_CONFIGURATION;
#endif
#ifdef FORM_SET_VARSTORE
varstore POWERLED_CONFIGURATION,
key = AUTO_ID(POWERLED_CONFIGURATION_KEY),
name = PowerledConfiguration,
guid = SETUP_GUID;
#endif
#ifdef FORM_SET_ITEM
// Define controls to be added to the main page of the formset
#endif
#ifdef FORM_SET_GOTO
// Define goto commands for the forms defined in this file
// goto CRB_FORM_ID,
// prompt = STRING_TOKEN(STR_CRB_FORM),
// help = STRING_TOKEN(STR_CRB_FORM_HELP);
goto POWERLED_CONFIG_FORM_ID,
prompt = STRING_TOKEN(STR_POWERLED_CONFIGURATION),
help = STRING_TOKEN(STR_POWERLED_CONFIGURATION_HELP);
#endif
#ifdef FORM_SET_FORM
// Define forms
form formid = AUTO_ID(POWERLED_CONFIG_FORM_ID),
title = STRING_TOKEN(STR_POWERLED_CONFIGURATION);
SUBTITLE(STRING_TOKEN(STR_POWERLED_CONFIGURATION))
SEPARATOR
grayoutif ideqval SYSTEM_ACCESS.Access == SYSTEM_PASSWORD_USER;
oneof varid = POWERLED_CONFIGURATION.PowerledMode,
prompt = STRING_TOKEN(STR_POWERLED_CONTROL),
help = STRING_TOKEN(STR_POWERLED_CONFIGURATION_HELP),
option text = STRING_TOKEN(STR_POWERLED_ENABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
option text = STRING_TOKEN(STR_POWERLED_DISABLED), value = 1, flags = RESET_REQUIRED;
option text = STRING_TOKEN(STR_POWERLED_BLINK), value = 2, flags = RESET_REQUIRED;
endoneof;
endif;
// CRB_CHECKBOX_CRBTEST
endform; // CRB_FORM_ID
#endif // FORM_SET_FORM
#endif // ADVANCED_FORM_SET
crb.uni:
#string STR_POWERLED_CONFIGURATION #language eng "Power led Configuration"
#string STR_POWERLED_CONFIGURATION_HELP #language eng "Power led Configuration"
#string STR_POWERLED_CONTROL #language eng "Power led Control"
#string STR_POWERLED_ENABLED #language eng "Enabled"
#string STR_POWERLED_DISABLED #language eng "Disabled"
#string STR_POWERLED_BLINK #language eng "Blink"
#string STR_EMPTY #language eng ""
crbpei.c
#include <Efi.h>
#include <Pei.h>
#include <Token.h>
#include <AmiPeiLib.h>
#include <Library/PeiServicesLib.h>
#include <AmiCspLib.h>
#include <Ppi\Smbus2.h>
//#include <Ppi\CrbInfo.h>
#include <Library\BaseMemoryLib.h>
//#define IT8772E_CONFIG_INDEX 0x2E
//#define IT8772E_CONFIG_DATA 0x2F
EFI_STATUS EFIAPI PowerledPeiInit (
IN EFI_PEI_FILE_HANDLE FileHandle,
IN CONST EFI_PEI_SERVICES **PeiServices )
{
EFI_STATUS Status = EFI_SUCCESS;
UINTN VarSize;
EFI_PEI_READ_ONLY_VARIABLE2_PPI *VariableServices;
SETUP_DATA PowerledConfiguration;
EFI_GUID gSetupVariableGuid = { 0xEC87D643, 0xEBA4, 0x4BB5, { 0xA1, 0xE5, 0x3F, 0x3E, 0x36, 0xB2, 0x0D, 0xA9 }};
VarSize = sizeof (SETUP_DATA);
Status = PeiServicesLocatePpi (
&gEfiPeiReadOnlyVariable2PpiGuid,
0,
NULL,
&VariableServices);
if (EFI_ERROR(Status)) {
return EFI_NOT_FOUND;
}
Status = VariableServices->GetVariable (
VariableServices,
L"Setup",
&gSetupVariableGuid,
NULL,
&VarSize,
&PowerledConfiguration
);
switch(PowerledConfiguration.PowerledMode){
case 0:
//IoWrite8(0x70,0x51);
//IoWrite8(0x71,0x88);
break; // Enable
case 1:
//config entry
IoWrite8(0x70,0x52);
IoWrite8(0x71,0x77);
IoWrite8(IT8772E_CONFIG_INDEX,0x87);
IoWrite8(IT8772E_CONFIG_INDEX,0x01);
IoWrite8(IT8772E_CONFIG_INDEX,0x55);
IoWrite8(IT8772E_CONFIG_INDEX,0x55);
IoWrite8(IT8772E_CONFIG_INDEX,0x07);//LDN locate
IoWrite8(IT8772E_CONFIG_DATA,0x07);//Select GPIO
IoWrite8(IT8772E_CONFIG_INDEX,0x26);//config GP22
IoWrite8(IT8772E_CONFIG_DATA,0xF7);
IoWrite8(IT8772E_CONFIG_INDEX,0xC1);//enable GPIO
IoWrite8(IT8772E_CONFIG_DATA,0x04);
IoWrite8(IT8772E_CONFIG_INDEX,0xC9);//enable GPIO as output mode
IoWrite8(IT8772E_CONFIG_DATA,0x04);
IoWrite8(0xA01,0xFB);//Powled suppress
break;
//end
case 2:
//config entry
// IoWrite8(0x70,0x53);
// IoWrite8(0x71,0x99);
IoWrite8(IT8772E_CONFIG_INDEX,0x87);
IoWrite8(IT8772E_CONFIG_INDEX,0x01);
IoWrite8(IT8772E_CONFIG_INDEX,0x55);
IoWrite8(IT8772E_CONFIG_INDEX,0x55);
IoWrite8(IT8772E_CONFIG_INDEX,0x07);//LDN locate
IoWrite8(IT8772E_CONFIG_DATA,0x07);//Select GPIO
IoWrite8(IT8772E_CONFIG_INDEX,0x26);//config GP22
IoWrite8(IT8772E_CONFIG_DATA,0xF7);
IoWrite8(IT8772E_CONFIG_INDEX,0xC1);//enable GPIO
IoWrite8(IT8772E_CONFIG_DATA,0x00);
IoWrite8(IT8772E_CONFIG_INDEX,0xC9);//enable GPIO as output mode
IoWrite8(IT8772E_CONFIG_DATA,0x00);
IoWrite8(IT8772E_CONFIG_INDEX,0xF8);//Blink
IoWrite8(IT8772E_CONFIG_DATA,0x12);
break;
//IoWrite8(0xA01,0xFF);//Powled bright
//end
// }
}
return EFI_SUCCESS;
}