881 lines
21 KiB
C
881 lines
21 KiB
C
/** @file
|
|
This file for CR SOL reference
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2013, Insyde Software Corporation. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#include "SolConfigUtil.h"
|
|
|
|
#include <Protocol/SimpleNetwork.h>
|
|
|
|
#include <Guid/MdeModuleHii.h>
|
|
|
|
#include <Library/PrintLib.h>
|
|
#include <Library/HiiLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <Library/DxeServicesTableLib.h>
|
|
#include <Library/DevicePathLib.h>
|
|
#include <Library/VariableLib.h>
|
|
#include <Library/UefiHiiServicesLib.h>
|
|
#include <Library/HiiExLib.h>
|
|
|
|
|
|
#define SOL_CONFIG_VAR_ATTR (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE)
|
|
#define IPv4_MAC_LENGTH 6
|
|
#define IPv4_IP_LENGTH 4
|
|
#define MAX_SCU_TEXT_SIZE 50
|
|
//[-start-160406-IB14090058-add]//
|
|
#define LENGTH_OF_STRING 13
|
|
//[-end-160406-IB14090058-add]//
|
|
|
|
#define IsDigital(c) ((c)>= '0' && (c) <= '9')
|
|
#define IsAlphabet(c) (((c)>= 'A' && (c) <= 'Z') || ((c)>= 'a' && (c) <= 'z'))
|
|
#define IsAfAlphabet(c) (((c)>= 'A' && (c) <= 'F') || ((c)>= 'a' && (c) <= 'f'))
|
|
#define IsText(c) ((c)>= 0x20 && (c) <= 0x7E)
|
|
#define NET_IS_DIGIT(Ch) (('0' <= (Ch)) && ((Ch) <= '9'))
|
|
|
|
typedef BOOLEAN (*VALIDATE_FUNC)(CHAR16 code);
|
|
|
|
EFI_HII_HANDLE mHiiHandle;
|
|
CHAR16 gMacString[30] = {0};
|
|
//CR_SOL_CONFIG gSolConfigNvData;
|
|
H2O_DIALOG_PROTOCOL *gH2oDialog = NULL;
|
|
//[-start-160106-IB04930000-add]//
|
|
//
|
|
// Store StringRefID when POST initialize, use this array to update string later in SCU.
|
|
//
|
|
UINT16 mSolStrId[7] = {0};
|
|
//[-end-160106-IB04930000-add]//
|
|
|
|
GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR8 SolHexString[] = "0123456789ABCDEFabcdef";
|
|
|
|
CHAR16 *gDialogTitle [] = {
|
|
L"Set IP Address",
|
|
L"Invalid IP address !",
|
|
L"Set Subnet mask",
|
|
L"Invalid Subnet Mask !",
|
|
L"Set Gateway IP address",
|
|
L"Invalid Gateway IP address !"
|
|
};
|
|
|
|
EFI_STATUS
|
|
TextInputDialog (
|
|
IN CHAR16 *Title,
|
|
IN VALIDATE_FUNC IsValidChar,
|
|
IN UINTN FieldLen,
|
|
IN UINTN BufferSize,
|
|
OUT CHAR16 *Buffer
|
|
);
|
|
|
|
VOID
|
|
ShowErrorMessage (
|
|
CHAR16 *Str
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
EFI_INPUT_KEY Key;
|
|
|
|
if (gH2oDialog == NULL) {
|
|
Status = gBS->LocateProtocol (&gH2ODialogProtocolGuid, NULL, (VOID **)&gH2oDialog);
|
|
if (EFI_ERROR(Status)) {
|
|
return ;
|
|
}
|
|
}
|
|
|
|
gH2oDialog->ConfirmDialog (
|
|
2, // NumberOfLines
|
|
FALSE, // HotKey
|
|
0, // MaximumStringSize
|
|
NULL, // StringBuffer
|
|
&Key, // KeyValue
|
|
Str // String
|
|
);
|
|
|
|
}
|
|
|
|
BOOLEAN
|
|
VisibleCharCheckFun (
|
|
CHAR16 c
|
|
)
|
|
{
|
|
if (c >= 0x20 && c < 0x7f) {
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOLEAN
|
|
Ipv4CharCheckFunc (
|
|
CHAR16 c
|
|
)
|
|
{
|
|
if (IsDigital(c)) {
|
|
return TRUE;
|
|
}
|
|
|
|
if (c == '.') {
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOLEAN
|
|
MacCharCheckFunc(
|
|
CHAR16 c
|
|
)
|
|
{
|
|
if (IsDigital(c)) {
|
|
return TRUE;
|
|
}
|
|
|
|
if (c == '.') {
|
|
return TRUE;
|
|
}
|
|
|
|
if (IsAfAlphabet (c)) {
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
EFI_STATUS
|
|
UnicodeStrToIp (
|
|
IN CHAR16 *Str,
|
|
OUT EFI_IPv4_ADDRESS *Ip
|
|
)
|
|
{
|
|
UINTN Index;
|
|
UINTN Number;
|
|
|
|
Index = 0;
|
|
|
|
while (*Str) {
|
|
|
|
if (Index > 3) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
Number = 0;
|
|
while (NET_IS_DIGIT (*Str)) {
|
|
Number = Number * 10 + (*Str - '0');
|
|
Str++;
|
|
}
|
|
|
|
if (Number > 0xFF) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
Ip->Addr[Index] = (UINT8) Number;
|
|
|
|
if ((*Str != '\0') && (*Str != '.')) {
|
|
//
|
|
// The current character should be either the NULL terminator or
|
|
// the dot delimiter.
|
|
//
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
if (*Str == '.') {
|
|
//
|
|
// Skip the delimiter.
|
|
//
|
|
Str++;
|
|
}
|
|
|
|
Index++;
|
|
}
|
|
|
|
if (Index != 4) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
EFI_STATUS
|
|
UnicodeStrToMac (
|
|
IN CHAR16 *Str,
|
|
OUT EFI_MAC_ADDRESS *Mac
|
|
)
|
|
{
|
|
UINTN Index;
|
|
UINTN Number;
|
|
|
|
Index = 0;
|
|
|
|
while (*Str) {
|
|
|
|
if (Index > 5) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
Number = 0;
|
|
while (NET_IS_DIGIT (*Str) || IsAfAlphabet(*Str)) {
|
|
|
|
if(NET_IS_DIGIT (*Str)) {
|
|
Number = Number * 16 + (*Str - '0');
|
|
} else {
|
|
if ((*Str >= 'A') && (*Str <= 'F')) {
|
|
Number = Number * 16 + (*Str - 'A') + 10;
|
|
} else {
|
|
Number = Number * 16 + (*Str - 'a') + 10;
|
|
}
|
|
}
|
|
Str++;
|
|
}
|
|
|
|
if (Number > 0xFF) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
Mac->Addr[Index] = (UINT8) Number;
|
|
|
|
if ((*Str != '\0') && (*Str != '.')) {
|
|
//
|
|
// The current character should be either the NULL terminator or
|
|
// the dot delimiter.
|
|
//
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
if (*Str == '.') {
|
|
//
|
|
// Skip the delimiter.
|
|
//
|
|
Str++;
|
|
}
|
|
|
|
Index++;
|
|
}
|
|
|
|
if (Index != 6) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
|
|
VOID
|
|
SolMacAddrToStr (
|
|
IN EFI_MAC_ADDRESS *Mac,
|
|
IN UINT32 Len,
|
|
OUT CHAR16 *Str
|
|
)
|
|
{
|
|
UINT32 Index;
|
|
CHAR16 *String;
|
|
|
|
for (Index = 0; Index < Len; Index++) {
|
|
Str[3 * Index] = (CHAR16) SolHexString[(Mac->Addr[Index] >> 4) & 0x0F];
|
|
Str[3 * Index + 1] = (CHAR16) SolHexString[Mac->Addr[Index] & 0x0F];
|
|
Str[3 * Index + 2] = L'-';
|
|
}
|
|
|
|
String = &Str[3 * Index - 1] ;
|
|
|
|
*String = L'\0';
|
|
}
|
|
|
|
CHAR16 *
|
|
ByteToStr (
|
|
IN UINT8 Byte,
|
|
OUT CHAR16 *Str
|
|
)
|
|
{
|
|
UINT16 *DecimalStr;
|
|
BOOLEAN SkipMiddleZero;
|
|
|
|
|
|
SkipMiddleZero = TRUE;
|
|
DecimalStr = Str;
|
|
|
|
*Str = L'0' + Byte / 100;
|
|
|
|
if (*Str != L'0') {
|
|
Byte = Byte % 100;
|
|
Str++;
|
|
SkipMiddleZero = FALSE;
|
|
}
|
|
|
|
*Str = L'0' + Byte / 10;
|
|
|
|
if (*Str != L'0' || !SkipMiddleZero) {
|
|
Byte = Byte % 10;
|
|
Str++;
|
|
}
|
|
|
|
*Str = L'0' + Byte;
|
|
|
|
Str++;
|
|
|
|
*Str = 0;
|
|
|
|
return Str;
|
|
}
|
|
|
|
VOID
|
|
IpAddrToStr (
|
|
IN EFI_IPv4_ADDRESS *Ip,
|
|
OUT CHAR16 *Str
|
|
)
|
|
{
|
|
UINTN Index;
|
|
|
|
for (Index = 0; Index < IPv4_IP_LENGTH; Index++) {
|
|
|
|
Str = ByteToStr (Ip->Addr[Index], Str);
|
|
|
|
if (Index < IPv4_IP_LENGTH - 1) {
|
|
*Str++ = L'.';
|
|
}
|
|
}
|
|
}
|
|
|
|
VOID
|
|
MacAddrToStr (
|
|
IN EFI_MAC_ADDRESS *Mac,
|
|
OUT CHAR16 *Str
|
|
)
|
|
{
|
|
UINTN Index;
|
|
|
|
for (Index = 0; Index < IPv4_MAC_LENGTH; Index++) {
|
|
|
|
Str = ByteToStr (Mac->Addr[Index], Str);
|
|
|
|
if (Index < IPv4_MAC_LENGTH - 1) {
|
|
*Str++ = L'.';
|
|
}
|
|
}
|
|
}
|
|
|
|
//[-start-180418-IB08400583-modify]//
|
|
VOID
|
|
UpdateFormSolAddr (
|
|
EFI_IPv4_ADDRESS *Address,
|
|
EFI_STRING_ID StringRef
|
|
)
|
|
//[-end-180418-IB08400583-modify]//
|
|
{
|
|
CHAR16 UniStr[MAX_SCU_TEXT_SIZE];
|
|
|
|
IpAddrToStr (Address, UniStr);
|
|
HiiSetString (mHiiHandle, StringRef, UniStr, NULL);
|
|
}
|
|
|
|
//[-start-180418-IB08400583-modify]//
|
|
VOID
|
|
UpdateFormSolMacAddr (
|
|
EFI_MAC_ADDRESS *MacAddr,
|
|
EFI_STRING_ID StringRef
|
|
)
|
|
//[-end-180418-IB08400583-modify]//
|
|
{
|
|
CHAR16 UniStr[MAX_SCU_TEXT_SIZE];
|
|
|
|
SolMacAddrToStr (MacAddr, IPv4_MAC_LENGTH, UniStr);
|
|
HiiSetString (mHiiHandle, StringRef, UniStr, NULL);
|
|
}
|
|
|
|
|
|
//[-start-180418-IB08400583-modify]//
|
|
VOID
|
|
UpdateFormSolStr (
|
|
CHAR16 *Str,
|
|
EFI_STRING_ID StringRef
|
|
)
|
|
//[-end-180418-IB08400583-modify]//
|
|
{
|
|
HiiSetString (mHiiHandle, StringRef, Str, NULL);
|
|
}
|
|
|
|
|
|
VOID
|
|
SolUpdateEntrys (
|
|
SOL_CONFIGURATION *SolConfig
|
|
)
|
|
{
|
|
// CR_SOL_CONFIG *SolConfigNvdata;
|
|
|
|
// SolConfigNvdata = &CrIfrNvdata->CrSolConfig;
|
|
|
|
UpdateFormSolAddr ((EFI_IPv4_ADDRESS *)&SolConfig->LocalIp, mSolStrId[SOL_IP_ADDR_STR_INDEX]);
|
|
|
|
UpdateFormSolAddr ((EFI_IPv4_ADDRESS *)&SolConfig->SubnetMask, mSolStrId[SOL_MASK_STR_INDEX]);
|
|
|
|
UpdateFormSolAddr ((EFI_IPv4_ADDRESS *)&SolConfig->Gateway, mSolStrId[SOL_GATEWAY_STR_INDEX]);
|
|
|
|
UpdateFormSolAddr ((EFI_IPv4_ADDRESS *)&SolConfig->AdminIp, mSolStrId[SOL_ADMIN_IP_STR_INDEX]);
|
|
|
|
UpdateFormSolStr (SolConfig->UserName, mSolStrId[SOL_LOGIN_ACCOUNT_STR_INDEX]);
|
|
|
|
UpdateFormSolStr (SolConfig->Password, mSolStrId[SOL_LOGIN_PASSWORD_STR_INDEX]);
|
|
|
|
UpdateFormSolMacAddr ((EFI_MAC_ADDRESS *)&SolConfig->AdminMac, mSolStrId[SOL_ADMIN_MAC_STR_INDEX]);
|
|
}
|
|
|
|
|
|
EFI_STATUS
|
|
SolConfigCallback (
|
|
EFI_QUESTION_ID QuestionId,
|
|
SOL_CONFIGURATION *SolConfig
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
CHAR16 StringBuffer[50];
|
|
EFI_IPv4_ADDRESS Ip;
|
|
EFI_MAC_ADDRESS Mac;
|
|
|
|
switch (QuestionId) {
|
|
case KEY_SOL_PORT_IP :
|
|
Status = TextInputDialog(L"Set IP Address", Ipv4CharCheckFunc, 15, 16, StringBuffer);
|
|
if (Status == EFI_SUCCESS) {
|
|
Status = UnicodeStrToIp (StringBuffer, &Ip);
|
|
if (Status == EFI_SUCCESS) {
|
|
// SolConfig->LocalIp = Ip;
|
|
CopyMem (SolConfig->LocalIp, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
|
UpdateFormSolAddr (&Ip, mSolStrId[SOL_IP_ADDR_STR_INDEX]);
|
|
// Status = EFI_SUCCESS;
|
|
}
|
|
else {
|
|
ShowErrorMessage (L"Invalid IP address !");
|
|
// Status = EFI_UNSUPPORTED;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case KEY_SOL_PORT_MASK :
|
|
Status = TextInputDialog(L"Set Subnet mask", Ipv4CharCheckFunc, 15, 16, StringBuffer);
|
|
if (Status == EFI_SUCCESS) {
|
|
Status = UnicodeStrToIp (StringBuffer, &Ip);
|
|
if (Status == EFI_SUCCESS) {
|
|
// SolConfig->SubnetMask = Ip;
|
|
CopyMem (SolConfig->SubnetMask, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
|
UpdateFormSolAddr (&Ip, mSolStrId[SOL_MASK_STR_INDEX]);
|
|
// Status = EFI_SUCCESS;
|
|
}
|
|
else {
|
|
ShowErrorMessage (L"Invalid Subnet Mask !");
|
|
// Status = EFI_UNSUPPORTED;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case KEY_SOL_PORT_GATEWAY :
|
|
Status = TextInputDialog(L"Set Gateway IP address", Ipv4CharCheckFunc, 15, 16, StringBuffer);
|
|
if (Status == EFI_SUCCESS) {
|
|
Status = UnicodeStrToIp (StringBuffer, &Ip);
|
|
if (Status == EFI_SUCCESS) {
|
|
// SolConfig->Gateway = Ip;
|
|
CopyMem (SolConfig->Gateway, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
|
UpdateFormSolAddr (&Ip, mSolStrId[SOL_GATEWAY_STR_INDEX]);
|
|
// Status = EFI_SUCCESS;
|
|
}
|
|
else {
|
|
ShowErrorMessage (L"Invalid Gateway IP address !");
|
|
// Status = EFI_UNSUPPORTED;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case KEY_SOL_ADMIN_IP :
|
|
Status = TextInputDialog(L"Set Adminstrator IP address", Ipv4CharCheckFunc, 15, 16, StringBuffer);
|
|
if (Status == EFI_SUCCESS) {
|
|
Status = UnicodeStrToIp (StringBuffer, &Ip);
|
|
if (Status == EFI_SUCCESS) {
|
|
// SolConfig->AdminIp = Ip;
|
|
CopyMem (SolConfig->AdminIp, &Ip, sizeof (EFI_IPv4_ADDRESS));
|
|
UpdateFormSolAddr (&Ip, mSolStrId[SOL_ADMIN_IP_STR_INDEX]);
|
|
// Status = EFI_SUCCESS;
|
|
}
|
|
else {
|
|
ShowErrorMessage (L"Invalid Adminstrator IP address !");
|
|
// Status = EFI_UNSUPPORTED;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case KEY_SOL_ADMIN_MAC :
|
|
Status = TextInputDialog(L"Set Adminstrator MAC address", MacCharCheckFunc, 17, 18, StringBuffer);
|
|
if (Status == EFI_SUCCESS) {
|
|
ZeroMem (&Mac, sizeof(EFI_MAC_ADDRESS));
|
|
Status = UnicodeStrToMac (StringBuffer, &Mac);
|
|
if (Status == EFI_SUCCESS) {
|
|
// SolConfig->AdminMac = Mac;
|
|
CopyMem (SolConfig->AdminMac, &Mac, sizeof (EFI_MAC_ADDRESS));
|
|
UpdateFormSolMacAddr (&Mac, mSolStrId[SOL_ADMIN_MAC_STR_INDEX]);
|
|
// Status = EFI_SUCCESS;
|
|
}
|
|
else {
|
|
ShowErrorMessage (L"Invalid Adminstrator MAC address !");
|
|
// Status = EFI_UNSUPPORTED;
|
|
}
|
|
}
|
|
break;
|
|
|
|
|
|
case KEY_SOL_LOGIN_NAME :
|
|
Status = TextInputDialog(L"Set Login Name", VisibleCharCheckFun, 12, 13, StringBuffer);
|
|
if (Status == EFI_SUCCESS) {
|
|
//[-start-180820-IB08400637-modify]//
|
|
StrCpyS(SolConfig->UserName, 13,StringBuffer);
|
|
//[-end-180820-IB08400637-modify]//
|
|
UpdateFormSolStr (StringBuffer, mSolStrId[SOL_LOGIN_ACCOUNT_STR_INDEX]);
|
|
// Status = EFI_SUCCESS;
|
|
}
|
|
else {
|
|
ShowErrorMessage (L"Invalid user name !");
|
|
// Status = EFI_UNSUPPORTED;
|
|
}
|
|
break;
|
|
|
|
case KEY_SOL_LOGIN_PASSWORD :
|
|
Status = TextInputDialog(L"Set Password", VisibleCharCheckFun, 12, 13, StringBuffer);
|
|
if (Status == EFI_SUCCESS) {
|
|
//[-start-180820-IB08400637-modify]//
|
|
StrCpyS(SolConfig->Password, 13, StringBuffer);
|
|
//[-end-180820-IB08400637-modify]//
|
|
UpdateFormSolStr (StringBuffer, mSolStrId[SOL_LOGIN_PASSWORD_STR_INDEX]);
|
|
// Status = EFI_SUCCESS;
|
|
}
|
|
else {
|
|
ShowErrorMessage (L"Invalid password !");
|
|
// Status = EFI_UNSUPPORTED;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
//[-start-160406-IB14090058-add]//
|
|
CHAR16*
|
|
GetPasswordStr (
|
|
IN CONST CHAR16* StrPtr
|
|
)
|
|
{
|
|
while (*StrPtr != 0) {
|
|
StrPtr++;
|
|
};
|
|
|
|
return (CHAR16*)(++StrPtr);
|
|
}
|
|
//[-end-160406-IB14090058-add]//
|
|
|
|
VOID
|
|
SolConfigSetToDefault (
|
|
SOL_CONFIGURATION *SolConfig
|
|
)
|
|
{
|
|
//[-start-160406-IB14090058-modify]//
|
|
SOL_CONFIGURATION *Tmp;
|
|
UINTN Size;
|
|
|
|
Size = sizeof (SOL_CONFIGURATION) - (sizeof (CHAR16) * LENGTH_OF_STRING * 2) - sizeof (UINT8) * 2;
|
|
Tmp = PcdGetPtr (PcdH2OCrSolDefaultSetting);
|
|
|
|
CopyMem (&SolConfig->PortNumber, &Tmp->PortNumber, Size);
|
|
//[-start-180820-IB08400637-modify]//
|
|
StrCpyS (SolConfig->UserName, 13, Tmp->UserName);
|
|
StrCpyS (SolConfig->Password, 13, GetPasswordStr (Tmp->UserName));
|
|
//[-end-180820-IB08400637-modify]//
|
|
//[-end-160406-IB14090058-modify]//
|
|
}
|
|
|
|
|
|
EFI_STATUS
|
|
InitSolFormLabel (
|
|
SOL_CONFIGURATION *SolConfig
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
EFI_IFR_GUID_LABEL *SolFormLabel;
|
|
VOID *StartOpCodeHandle;
|
|
EFI_STRING_ID StrTokenID;
|
|
EFI_STRING_ID PromptStrID;
|
|
EFI_STRING_ID PromptStrID2;
|
|
CHAR16 *BlankStr;
|
|
CHAR16 *PromptStr;
|
|
CHAR16 *PromptStr2;
|
|
UINTN PromptStrSize;
|
|
|
|
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
|
|
|
SolFormLabel = (EFI_IFR_GUID_LABEL*) HiiCreateGuidOpCode (
|
|
StartOpCodeHandle,
|
|
&gEfiIfrTianoGuid,
|
|
NULL,
|
|
sizeof (EFI_IFR_GUID_LABEL)
|
|
);
|
|
|
|
SolFormLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
|
SolFormLabel->Number = SOL_FORM_LABEL;
|
|
|
|
BlankStr = L" ";
|
|
StrTokenID = HiiSetString (mHiiHandle, 0, BlankStr, NULL);
|
|
PromptStrSize = 0x100;
|
|
PromptStr = AllocatePool (PromptStrSize);
|
|
PromptStr2 = AllocatePool (PromptStrSize);
|
|
|
|
//
|
|
// Admin IP option
|
|
//
|
|
ZeroMem (PromptStr, PromptStrSize);
|
|
UnicodeSPrint (
|
|
PromptStr,
|
|
PromptStrSize,
|
|
L" Administrator IP"
|
|
);
|
|
|
|
ZeroMem (PromptStr2, PromptStrSize);
|
|
IpAddrToStr ((EFI_IPv4_ADDRESS *)&SolConfig->AdminIp, PromptStr2);
|
|
PromptStrID = HiiSetString (mHiiHandle, 0, PromptStr, NULL);
|
|
PromptStrID2 = HiiSetString (mHiiHandle, 0, PromptStr2, NULL);
|
|
mSolStrId[SOL_ADMIN_IP_STR_INDEX] = PromptStrID2;
|
|
HiiCreateActionOpCodeEx (
|
|
StartOpCodeHandle,
|
|
(EFI_QUESTION_ID) KEY_SOL_ADMIN_IP,
|
|
PromptStrID,
|
|
StrTokenID,
|
|
PromptStrID2,
|
|
EFI_IFR_FLAG_CALLBACK,
|
|
0
|
|
);
|
|
|
|
//
|
|
// Admin MAC option
|
|
//
|
|
ZeroMem (PromptStr, PromptStrSize);
|
|
UnicodeSPrint (
|
|
PromptStr,
|
|
PromptStrSize,
|
|
L" Administrator MAC"
|
|
);
|
|
|
|
ZeroMem (PromptStr2, PromptStrSize);
|
|
// MacAddrToStr ((EFI_MAC_ADDRESS *)&SolConfig->AdminMac, PromptStr2);
|
|
SolMacAddrToStr ((EFI_MAC_ADDRESS *)&SolConfig->AdminMac, IPv4_MAC_LENGTH, PromptStr2);
|
|
PromptStrID = HiiSetString (mHiiHandle, 0, PromptStr, NULL);
|
|
PromptStrID2 = HiiSetString (mHiiHandle, 0, PromptStr2, NULL);
|
|
mSolStrId[SOL_ADMIN_MAC_STR_INDEX] = PromptStrID2;
|
|
HiiCreateActionOpCodeEx (
|
|
StartOpCodeHandle,
|
|
(EFI_QUESTION_ID) KEY_SOL_ADMIN_MAC,
|
|
PromptStrID,
|
|
StrTokenID,
|
|
PromptStrID2,
|
|
EFI_IFR_FLAG_CALLBACK,
|
|
0
|
|
);
|
|
|
|
//
|
|
// Login Name option
|
|
//
|
|
ZeroMem (PromptStr, PromptStrSize);
|
|
UnicodeSPrint (
|
|
PromptStr,
|
|
PromptStrSize,
|
|
L" Login Name"
|
|
);
|
|
|
|
PromptStrID = HiiSetString (mHiiHandle, 0, PromptStr, NULL);
|
|
PromptStrID2 = HiiSetString (mHiiHandle, 0, SolConfig->UserName, NULL);
|
|
mSolStrId[SOL_LOGIN_ACCOUNT_STR_INDEX] = PromptStrID2;
|
|
HiiCreateActionOpCodeEx (
|
|
StartOpCodeHandle,
|
|
(EFI_QUESTION_ID) KEY_SOL_LOGIN_NAME,
|
|
PromptStrID,
|
|
StrTokenID,
|
|
PromptStrID2,
|
|
EFI_IFR_FLAG_CALLBACK,
|
|
0
|
|
);
|
|
|
|
//
|
|
// Login Password option
|
|
//
|
|
ZeroMem (PromptStr, PromptStrSize);
|
|
UnicodeSPrint (
|
|
PromptStr,
|
|
PromptStrSize,
|
|
L" Password"
|
|
);
|
|
|
|
PromptStrID = HiiSetString (mHiiHandle, 0, PromptStr, NULL);
|
|
PromptStrID2 = HiiSetString (mHiiHandle, 0, SolConfig->Password, NULL);
|
|
mSolStrId[SOL_LOGIN_PASSWORD_STR_INDEX] = PromptStrID2;
|
|
HiiCreateActionOpCodeEx (
|
|
StartOpCodeHandle,
|
|
(EFI_QUESTION_ID) KEY_SOL_LOGIN_PASSWORD,
|
|
PromptStrID,
|
|
StrTokenID,
|
|
PromptStrID2,
|
|
EFI_IFR_FLAG_CALLBACK,
|
|
0
|
|
);
|
|
|
|
Status = HiiUpdateForm (
|
|
mHiiHandle,
|
|
NULL,
|
|
SOL_FORM_ID,
|
|
StartOpCodeHandle,
|
|
NULL
|
|
);
|
|
|
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
|
|
|
return Status;
|
|
}
|
|
|
|
EFI_STATUS
|
|
InitSolStaticIpLabel (
|
|
SOL_CONFIGURATION *SolConfig
|
|
)
|
|
{
|
|
EFI_IFR_GUID_LABEL *SolFormLabel;
|
|
VOID *StartOpCodeHandle;
|
|
EFI_STRING_ID StrTokenID;
|
|
EFI_STRING_ID PromptStrID;
|
|
EFI_STRING_ID PromptStrID2;
|
|
CHAR16 *BlankStr;
|
|
CHAR16 *PromptStr;
|
|
CHAR16 *PromptStr2;
|
|
UINTN PromptStrSize;
|
|
|
|
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
|
|
|
SolFormLabel = (EFI_IFR_GUID_LABEL*) HiiCreateGuidOpCode (
|
|
StartOpCodeHandle,
|
|
&gEfiIfrTianoGuid,
|
|
NULL,
|
|
sizeof (EFI_IFR_GUID_LABEL)
|
|
);
|
|
|
|
SolFormLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
|
SolFormLabel->Number = SOL_STATIC_IP_LABEL;
|
|
|
|
BlankStr = L" ";
|
|
StrTokenID = HiiSetString (mHiiHandle, 0, BlankStr, NULL);
|
|
PromptStrSize = 0x100;
|
|
PromptStr = AllocatePool (PromptStrSize);
|
|
PromptStr2 = AllocatePool (PromptStrSize);
|
|
|
|
//
|
|
// IP Address option
|
|
//
|
|
ZeroMem (PromptStr, PromptStrSize);
|
|
UnicodeSPrint (
|
|
PromptStr,
|
|
PromptStrSize,
|
|
L" IP Address"
|
|
);
|
|
|
|
ZeroMem (PromptStr2, PromptStrSize);
|
|
IpAddrToStr ((EFI_IPv4_ADDRESS *)&SolConfig->LocalIp, PromptStr2);
|
|
PromptStrID = HiiSetString (mHiiHandle, 0, PromptStr, NULL);
|
|
PromptStrID2 = HiiSetString (mHiiHandle, 0, PromptStr2, NULL);
|
|
mSolStrId[SOL_IP_ADDR_STR_INDEX] = PromptStrID2;
|
|
HiiCreateActionOpCodeEx (
|
|
StartOpCodeHandle,
|
|
(EFI_QUESTION_ID) KEY_SOL_PORT_IP,
|
|
PromptStrID,
|
|
StrTokenID,
|
|
PromptStrID2,
|
|
EFI_IFR_FLAG_CALLBACK,
|
|
0
|
|
);
|
|
|
|
//
|
|
// Subnet Mask option
|
|
//
|
|
ZeroMem (PromptStr, PromptStrSize);
|
|
UnicodeSPrint (
|
|
PromptStr,
|
|
PromptStrSize,
|
|
L" Subnet Mask"
|
|
);
|
|
|
|
ZeroMem (PromptStr2, PromptStrSize);
|
|
IpAddrToStr ((EFI_IPv4_ADDRESS *)&SolConfig->SubnetMask, PromptStr2);
|
|
PromptStrID = HiiSetString (mHiiHandle, 0, PromptStr, NULL);
|
|
PromptStrID2 = HiiSetString (mHiiHandle, 0, PromptStr2, NULL);
|
|
mSolStrId[SOL_MASK_STR_INDEX] = PromptStrID2;
|
|
HiiCreateActionOpCodeEx (
|
|
StartOpCodeHandle,
|
|
(EFI_QUESTION_ID) KEY_SOL_PORT_MASK,
|
|
PromptStrID,
|
|
StrTokenID,
|
|
PromptStrID2,
|
|
EFI_IFR_FLAG_CALLBACK,
|
|
0
|
|
);
|
|
|
|
//
|
|
// Gateway option
|
|
//
|
|
ZeroMem (PromptStr, PromptStrSize);
|
|
UnicodeSPrint (
|
|
PromptStr,
|
|
PromptStrSize,
|
|
L" Gateway"
|
|
);
|
|
|
|
ZeroMem (PromptStr2, PromptStrSize);
|
|
IpAddrToStr ((EFI_IPv4_ADDRESS *)&SolConfig->Gateway, PromptStr2);
|
|
PromptStrID = HiiSetString (mHiiHandle, 0, PromptStr, NULL);
|
|
PromptStrID2 = HiiSetString (mHiiHandle, 0, PromptStr2, NULL);
|
|
mSolStrId[SOL_GATEWAY_STR_INDEX] = PromptStrID2;
|
|
HiiCreateActionOpCodeEx (
|
|
StartOpCodeHandle,
|
|
(EFI_QUESTION_ID) KEY_SOL_PORT_GATEWAY,
|
|
PromptStrID,
|
|
StrTokenID,
|
|
PromptStrID2,
|
|
EFI_IFR_FLAG_CALLBACK,
|
|
0
|
|
);
|
|
|
|
HiiUpdateForm (
|
|
mHiiHandle,
|
|
NULL,
|
|
SOL_FORM_ID,
|
|
StartOpCodeHandle,
|
|
NULL
|
|
);
|
|
|
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
EFI_STATUS
|
|
SolConfigFormInit (
|
|
EFI_HII_HANDLE HiiHandle,
|
|
SOL_CONFIGURATION *SolConfig
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
mHiiHandle = HiiHandle;
|
|
|
|
InitSolStaticIpLabel (SolConfig);
|
|
Status = InitSolFormLabel (SolConfig);
|
|
return Status;
|
|
}
|