【AMI BIOS入门】添加item-POWERLED_CONFIGURATION

本文介绍了一个用于配置PowerLED模式的结构体及相应的初始化过程。通过定义结构体`POWERLED_CONFIGURATION`来存储PowerLED的工作模式,并提供了不同的选项如启用、禁用和闪烁等。此外,还展示了如何在PEI阶段根据变量配置进行相应的硬件设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 参考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;
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值