Refine some call back function to return EFI_UNSUPPORTED for all unsupported call back type.
Signed-off-by: ydong10 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11686 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -680,255 +680,254 @@ IScsiFormCallback (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_INPUT_KEY Key;
|
EFI_INPUT_KEY Key;
|
||||||
|
|
||||||
if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)) {
|
if (Action == EFI_BROWSER_ACTION_CHANGING) {
|
||||||
|
Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);
|
||||||
//
|
//
|
||||||
// Do nothing for UEFI OPEN/CLOSE Action
|
// Retrive uncommitted data from Browser
|
||||||
//
|
//
|
||||||
return EFI_SUCCESS;
|
IfrNvData = AllocateZeroPool (sizeof (ISCSI_CONFIG_IFR_NVDATA));
|
||||||
}
|
ASSERT (IfrNvData != NULL);
|
||||||
|
if (!HiiGetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA), (UINT8 *) IfrNvData)) {
|
||||||
Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);
|
FreePool (IfrNvData);
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
//
|
|
||||||
// Retrive uncommitted data from Browser
|
|
||||||
//
|
|
||||||
IfrNvData = AllocateZeroPool (sizeof (ISCSI_CONFIG_IFR_NVDATA));
|
|
||||||
ASSERT (IfrNvData != NULL);
|
|
||||||
if (!HiiGetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA), (UINT8 *) IfrNvData)) {
|
|
||||||
FreePool (IfrNvData);
|
|
||||||
return EFI_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
|
||||||
|
|
||||||
switch (QuestionId) {
|
|
||||||
case KEY_INITIATOR_NAME:
|
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->InitiatorName, IScsiName);
|
|
||||||
BufferSize = AsciiStrSize (IScsiName);
|
|
||||||
|
|
||||||
Status = gIScsiInitiatorName.Set (&gIScsiInitiatorName, &BufferSize, IScsiName);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid iSCSI Name!", NULL);
|
|
||||||
}
|
}
|
||||||
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
break;
|
switch (QuestionId) {
|
||||||
|
case KEY_INITIATOR_NAME:
|
||||||
|
IScsiUnicodeStrToAsciiStr (IfrNvData->InitiatorName, IScsiName);
|
||||||
|
BufferSize = AsciiStrSize (IScsiName);
|
||||||
|
|
||||||
case KEY_LOCAL_IP:
|
Status = gIScsiInitiatorName.Set (&gIScsiInitiatorName, &BufferSize, IScsiName);
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->LocalIp, Ip4String);
|
if (EFI_ERROR (Status)) {
|
||||||
Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid iSCSI Name!", NULL);
|
||||||
if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
}
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);
|
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
} else {
|
|
||||||
CopyMem (&Private->Current->SessionConfigData.LocalIp, &HostIp.v4, sizeof (HostIp.v4));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_SUBNET_MASK:
|
case KEY_LOCAL_IP:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->SubnetMask, Ip4String);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->LocalIp, Ip4String);
|
||||||
Status = IScsiAsciiStrToIp (Ip4String, &SubnetMask.v4);
|
Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);
|
||||||
if (EFI_ERROR (Status) || ((SubnetMask.Addr[0] != 0) && (IScsiGetSubnetMaskPrefixLength (&SubnetMask.v4) == 0))) {
|
if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Subnet Mask!", NULL);
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);
|
||||||
Status = EFI_INVALID_PARAMETER;
|
Status = EFI_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CopyMem (&Private->Current->SessionConfigData.SubnetMask, &SubnetMask.v4, sizeof (SubnetMask.v4));
|
CopyMem (&Private->Current->SessionConfigData.LocalIp, &HostIp.v4, sizeof (HostIp.v4));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_GATE_WAY:
|
case KEY_SUBNET_MASK:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->Gateway, Ip4String);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->SubnetMask, Ip4String);
|
||||||
Status = IScsiAsciiStrToIp (Ip4String, &Gateway.v4);
|
Status = IScsiAsciiStrToIp (Ip4String, &SubnetMask.v4);
|
||||||
if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {
|
if (EFI_ERROR (Status) || ((SubnetMask.Addr[0] != 0) && (IScsiGetSubnetMaskPrefixLength (&SubnetMask.v4) == 0))) {
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Gateway!", NULL);
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Subnet Mask!", NULL);
|
||||||
Status = EFI_INVALID_PARAMETER;
|
Status = EFI_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CopyMem (&Private->Current->SessionConfigData.Gateway, &Gateway.v4, sizeof (Gateway.v4));
|
CopyMem (&Private->Current->SessionConfigData.SubnetMask, &SubnetMask.v4, sizeof (SubnetMask.v4));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_TARGET_IP:
|
case KEY_GATE_WAY:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->TargetIp, Ip4String);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->Gateway, Ip4String);
|
||||||
Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);
|
Status = IScsiAsciiStrToIp (Ip4String, &Gateway.v4);
|
||||||
if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Gateway!", NULL);
|
||||||
Status = EFI_INVALID_PARAMETER;
|
Status = EFI_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CopyMem (&Private->Current->SessionConfigData.TargetIp, &HostIp.v4, sizeof (HostIp.v4));
|
CopyMem (&Private->Current->SessionConfigData.Gateway, &Gateway.v4, sizeof (Gateway.v4));
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_TARGET_NAME:
|
case KEY_TARGET_IP:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->TargetName, IScsiName);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->TargetIp, Ip4String);
|
||||||
Status = IScsiNormalizeName (IScsiName, AsciiStrLen (IScsiName));
|
Status = IScsiAsciiStrToIp (Ip4String, &HostIp.v4);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid iSCSI Name!", NULL);
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);
|
||||||
} else {
|
Status = EFI_INVALID_PARAMETER;
|
||||||
AsciiStrCpy (Private->Current->SessionConfigData.TargetName, IScsiName);
|
} else {
|
||||||
}
|
CopyMem (&Private->Current->SessionConfigData.TargetIp, &HostIp.v4, sizeof (HostIp.v4));
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_DHCP_ENABLE:
|
case KEY_TARGET_NAME:
|
||||||
if (IfrNvData->InitiatorInfoFromDhcp == 0) {
|
IScsiUnicodeStrToAsciiStr (IfrNvData->TargetName, IScsiName);
|
||||||
IfrNvData->TargetInfoFromDhcp = 0;
|
Status = IScsiNormalizeName (IScsiName, AsciiStrLen (IScsiName));
|
||||||
}
|
if (EFI_ERROR (Status)) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid iSCSI Name!", NULL);
|
||||||
|
} else {
|
||||||
|
AsciiStrCpy (Private->Current->SessionConfigData.TargetName, IScsiName);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_BOOT_LUN:
|
case KEY_DHCP_ENABLE:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->BootLun, LunString);
|
if (IfrNvData->InitiatorInfoFromDhcp == 0) {
|
||||||
Status = IScsiAsciiStrToLun (LunString, (UINT8 *) &Lun);
|
IfrNvData->TargetInfoFromDhcp = 0;
|
||||||
if (EFI_ERROR (Status)) {
|
}
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid LUN string!", NULL);
|
|
||||||
} else {
|
|
||||||
CopyMem (Private->Current->SessionConfigData.BootLun, &Lun, sizeof (Lun));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_CHAP_NAME:
|
case KEY_BOOT_LUN:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->CHAPName, Private->Current->AuthConfigData.CHAPName);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->BootLun, LunString);
|
||||||
break;
|
Status = IScsiAsciiStrToLun (LunString, (UINT8 *) &Lun);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid LUN string!", NULL);
|
||||||
|
} else {
|
||||||
|
CopyMem (Private->Current->SessionConfigData.BootLun, &Lun, sizeof (Lun));
|
||||||
|
}
|
||||||
|
|
||||||
case KEY_CHAP_SECRET:
|
break;
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->CHAPSecret, Private->Current->AuthConfigData.CHAPSecret);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_REVERSE_CHAP_NAME:
|
case KEY_CHAP_NAME:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->ReverseCHAPName, Private->Current->AuthConfigData.ReverseCHAPName);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->CHAPName, Private->Current->AuthConfigData.CHAPName);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_REVERSE_CHAP_SECRET:
|
case KEY_CHAP_SECRET:
|
||||||
IScsiUnicodeStrToAsciiStr (IfrNvData->ReverseCHAPSecret, Private->Current->AuthConfigData.ReverseCHAPSecret);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->CHAPSecret, Private->Current->AuthConfigData.CHAPSecret);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_CONFIG_ISID:
|
case KEY_REVERSE_CHAP_NAME:
|
||||||
IScsiParseIsIdFromString (IfrNvData->IsId, Private->Current->SessionConfigData.IsId);
|
IScsiUnicodeStrToAsciiStr (IfrNvData->ReverseCHAPName, Private->Current->AuthConfigData.ReverseCHAPName);
|
||||||
IScsiConvertIsIdToString (IfrNvData->IsId, Private->Current->SessionConfigData.IsId);
|
break;
|
||||||
|
|
||||||
break;
|
case KEY_REVERSE_CHAP_SECRET:
|
||||||
|
IScsiUnicodeStrToAsciiStr (IfrNvData->ReverseCHAPSecret, Private->Current->AuthConfigData.ReverseCHAPSecret);
|
||||||
|
break;
|
||||||
|
|
||||||
case KEY_SAVE_CHANGES:
|
case KEY_CONFIG_ISID:
|
||||||
//
|
IScsiParseIsIdFromString (IfrNvData->IsId, Private->Current->SessionConfigData.IsId);
|
||||||
// First, update those fields which don't have INTERACTIVE set.
|
IScsiConvertIsIdToString (IfrNvData->IsId, Private->Current->SessionConfigData.IsId);
|
||||||
//
|
|
||||||
Private->Current->SessionConfigData.Enabled = IfrNvData->Enabled;
|
|
||||||
Private->Current->SessionConfigData.InitiatorInfoFromDhcp = IfrNvData->InitiatorInfoFromDhcp;
|
|
||||||
Private->Current->SessionConfigData.TargetPort = IfrNvData->TargetPort;
|
|
||||||
if (Private->Current->SessionConfigData.TargetPort == 0) {
|
|
||||||
Private->Current->SessionConfigData.TargetPort = ISCSI_WELL_KNOWN_PORT;
|
|
||||||
}
|
|
||||||
|
|
||||||
Private->Current->SessionConfigData.TargetInfoFromDhcp = IfrNvData->TargetInfoFromDhcp;
|
break;
|
||||||
Private->Current->AuthConfigData.CHAPType = IfrNvData->CHAPType;
|
|
||||||
|
|
||||||
//
|
case KEY_SAVE_CHANGES:
|
||||||
// Only do full parameter validation if iSCSI is enabled on this device.
|
|
||||||
//
|
|
||||||
if (Private->Current->SessionConfigData.Enabled) {
|
|
||||||
//
|
//
|
||||||
// Validate the address configuration of the Initiator if DHCP isn't
|
// First, update those fields which don't have INTERACTIVE set.
|
||||||
// deployed.
|
|
||||||
//
|
//
|
||||||
if (!Private->Current->SessionConfigData.InitiatorInfoFromDhcp) {
|
Private->Current->SessionConfigData.Enabled = IfrNvData->Enabled;
|
||||||
CopyMem (&HostIp.v4, &Private->Current->SessionConfigData.LocalIp, sizeof (HostIp.v4));
|
Private->Current->SessionConfigData.InitiatorInfoFromDhcp = IfrNvData->InitiatorInfoFromDhcp;
|
||||||
CopyMem (&SubnetMask.v4, &Private->Current->SessionConfigData.SubnetMask, sizeof (SubnetMask.v4));
|
Private->Current->SessionConfigData.TargetPort = IfrNvData->TargetPort;
|
||||||
CopyMem (&Gateway.v4, &Private->Current->SessionConfigData.Gateway, sizeof (Gateway.v4));
|
if (Private->Current->SessionConfigData.TargetPort == 0) {
|
||||||
|
Private->Current->SessionConfigData.TargetPort = ISCSI_WELL_KNOWN_PORT;
|
||||||
|
}
|
||||||
|
|
||||||
if ((Gateway.Addr[0] != 0)) {
|
Private->Current->SessionConfigData.TargetInfoFromDhcp = IfrNvData->TargetInfoFromDhcp;
|
||||||
if (SubnetMask.Addr[0] == 0) {
|
Private->Current->AuthConfigData.CHAPType = IfrNvData->CHAPType;
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Gateway address is set but subnet mask is zero.", NULL);
|
|
||||||
|
//
|
||||||
|
// Only do full parameter validation if iSCSI is enabled on this device.
|
||||||
|
//
|
||||||
|
if (Private->Current->SessionConfigData.Enabled) {
|
||||||
|
//
|
||||||
|
// Validate the address configuration of the Initiator if DHCP isn't
|
||||||
|
// deployed.
|
||||||
|
//
|
||||||
|
if (!Private->Current->SessionConfigData.InitiatorInfoFromDhcp) {
|
||||||
|
CopyMem (&HostIp.v4, &Private->Current->SessionConfigData.LocalIp, sizeof (HostIp.v4));
|
||||||
|
CopyMem (&SubnetMask.v4, &Private->Current->SessionConfigData.SubnetMask, sizeof (SubnetMask.v4));
|
||||||
|
CopyMem (&Gateway.v4, &Private->Current->SessionConfigData.Gateway, sizeof (Gateway.v4));
|
||||||
|
|
||||||
|
if ((Gateway.Addr[0] != 0)) {
|
||||||
|
if (SubnetMask.Addr[0] == 0) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Gateway address is set but subnet mask is zero.", NULL);
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
break;
|
||||||
|
} else if (!IP4_NET_EQUAL (HostIp.Addr[0], Gateway.Addr[0], SubnetMask.Addr[0])) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Local IP and Gateway are not in the same subnet.", NULL);
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Validate target configuration if DHCP isn't deployed.
|
||||||
|
//
|
||||||
|
if (!Private->Current->SessionConfigData.TargetInfoFromDhcp) {
|
||||||
|
CopyMem (&HostIp.v4, &Private->Current->SessionConfigData.TargetIp, sizeof (HostIp.v4));
|
||||||
|
if (!NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Target IP is invalid!", NULL);
|
||||||
Status = EFI_INVALID_PARAMETER;
|
Status = EFI_INVALID_PARAMETER;
|
||||||
break;
|
break;
|
||||||
} else if (!IP4_NET_EQUAL (HostIp.Addr[0], Gateway.Addr[0], SubnetMask.Addr[0])) {
|
}
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Local IP and Gateway are not in the same subnet.", NULL);
|
}
|
||||||
|
|
||||||
|
if (IfrNvData->CHAPType != ISCSI_CHAP_NONE) {
|
||||||
|
if ((IfrNvData->CHAPName[0] == '\0') || (IfrNvData->CHAPSecret[0] == '\0')) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"CHAP Name or CHAP Secret is invalid!", NULL);
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((IfrNvData->CHAPType == ISCSI_CHAP_MUTUAL) &&
|
||||||
|
((IfrNvData->ReverseCHAPName[0] == '\0') || (IfrNvData->ReverseCHAPSecret[0] == '\0'))
|
||||||
|
) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Reverse CHAP Name or Reverse CHAP Secret is invalid!", NULL);
|
||||||
Status = EFI_INVALID_PARAMETER;
|
Status = EFI_INVALID_PARAMETER;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// Validate target configuration if DHCP isn't deployed.
|
BufferSize = sizeof (Private->Current->SessionConfigData);
|
||||||
//
|
gRT->SetVariable (
|
||||||
if (!Private->Current->SessionConfigData.TargetInfoFromDhcp) {
|
Private->Current->MacString,
|
||||||
CopyMem (&HostIp.v4, &Private->Current->SessionConfigData.TargetIp, sizeof (HostIp.v4));
|
&gEfiIScsiInitiatorNameProtocolGuid,
|
||||||
if (!NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
ISCSI_CONFIG_VAR_ATTR,
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Target IP is invalid!", NULL);
|
BufferSize,
|
||||||
Status = EFI_INVALID_PARAMETER;
|
&Private->Current->SessionConfigData
|
||||||
break;
|
);
|
||||||
}
|
|
||||||
|
BufferSize = sizeof (Private->Current->AuthConfigData);
|
||||||
|
gRT->SetVariable (
|
||||||
|
Private->Current->MacString,
|
||||||
|
&mIScsiCHAPAuthInfoGuid,
|
||||||
|
ISCSI_CONFIG_VAR_ATTR,
|
||||||
|
BufferSize,
|
||||||
|
&Private->Current->AuthConfigData
|
||||||
|
);
|
||||||
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if ((QuestionId >= KEY_DEVICE_ENTRY_BASE) && (QuestionId < (mNumberOfIScsiDevices + KEY_DEVICE_ENTRY_BASE))) {
|
||||||
|
//
|
||||||
|
// In case goto the device configuration form, update the device form title.
|
||||||
|
//
|
||||||
|
ConfigFormEntry = IScsiGetConfigFormEntryByIndex ((UINT32) (QuestionId - KEY_DEVICE_ENTRY_BASE));
|
||||||
|
ASSERT (ConfigFormEntry != NULL);
|
||||||
|
|
||||||
|
UnicodeSPrint (PortString, (UINTN) 128, L"Port %s", ConfigFormEntry->MacString);
|
||||||
|
DeviceFormTitleToken = (EFI_STRING_ID) STR_ISCSI_DEVICE_FORM_TITLE;
|
||||||
|
HiiSetString (Private->RegisteredHandle, DeviceFormTitleToken, PortString, NULL);
|
||||||
|
|
||||||
|
IScsiConvertDeviceConfigDataToIfrNvData (ConfigFormEntry, IfrNvData);
|
||||||
|
|
||||||
|
Private->Current = ConfigFormEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IfrNvData->CHAPType != ISCSI_CHAP_NONE) {
|
break;
|
||||||
if ((IfrNvData->CHAPName[0] == '\0') || (IfrNvData->CHAPSecret[0] == '\0')) {
|
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"CHAP Name or CHAP Secret is invalid!", NULL);
|
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((IfrNvData->CHAPType == ISCSI_CHAP_MUTUAL) &&
|
|
||||||
((IfrNvData->ReverseCHAPName[0] == '\0') || (IfrNvData->ReverseCHAPSecret[0] == '\0'))
|
|
||||||
) {
|
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Reverse CHAP Name or Reverse CHAP Secret is invalid!", NULL);
|
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferSize = sizeof (Private->Current->SessionConfigData);
|
if (!EFI_ERROR (Status)) {
|
||||||
gRT->SetVariable (
|
|
||||||
Private->Current->MacString,
|
|
||||||
&gEfiIScsiInitiatorNameProtocolGuid,
|
|
||||||
ISCSI_CONFIG_VAR_ATTR,
|
|
||||||
BufferSize,
|
|
||||||
&Private->Current->SessionConfigData
|
|
||||||
);
|
|
||||||
|
|
||||||
BufferSize = sizeof (Private->Current->AuthConfigData);
|
|
||||||
gRT->SetVariable (
|
|
||||||
Private->Current->MacString,
|
|
||||||
&mIScsiCHAPAuthInfoGuid,
|
|
||||||
ISCSI_CONFIG_VAR_ATTR,
|
|
||||||
BufferSize,
|
|
||||||
&Private->Current->AuthConfigData
|
|
||||||
);
|
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if ((QuestionId >= KEY_DEVICE_ENTRY_BASE) && (QuestionId < (mNumberOfIScsiDevices + KEY_DEVICE_ENTRY_BASE))) {
|
|
||||||
//
|
//
|
||||||
// In case goto the device configuration form, update the device form title.
|
// Pass changed uncommitted data back to Form Browser
|
||||||
//
|
//
|
||||||
ConfigFormEntry = IScsiGetConfigFormEntryByIndex ((UINT32) (QuestionId - KEY_DEVICE_ENTRY_BASE));
|
HiiSetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA), (UINT8 *) IfrNvData, NULL);
|
||||||
ASSERT (ConfigFormEntry != NULL);
|
|
||||||
|
|
||||||
UnicodeSPrint (PortString, (UINTN) 128, L"Port %s", ConfigFormEntry->MacString);
|
|
||||||
DeviceFormTitleToken = (EFI_STRING_ID) STR_ISCSI_DEVICE_FORM_TITLE;
|
|
||||||
HiiSetString (Private->RegisteredHandle, DeviceFormTitleToken, PortString, NULL);
|
|
||||||
|
|
||||||
IScsiConvertDeviceConfigDataToIfrNvData (ConfigFormEntry, IfrNvData);
|
|
||||||
|
|
||||||
Private->Current = ConfigFormEntry;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FreePool (IfrNvData);
|
||||||
|
|
||||||
break;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
//
|
||||||
//
|
// All other action return unsupported.
|
||||||
// Pass changed uncommitted data back to Form Browser
|
//
|
||||||
//
|
return EFI_UNSUPPORTED;
|
||||||
HiiSetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA), (UINT8 *) IfrNvData, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
FreePool (IfrNvData);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Helper functions for configuring or getting the parameters relating to Ip4.
|
Helper functions for configuring or getting the parameters relating to Ip4.
|
||||||
|
|
||||||
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@@ -692,76 +692,76 @@ Ip4FormCallback (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_INPUT_KEY Key;
|
EFI_INPUT_KEY Key;
|
||||||
|
|
||||||
if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)) {
|
if (Action == EFI_BROWSER_ACTION_CHANGING) {
|
||||||
|
Ip4ConfigInstance = IP4_CONFIG_INSTANCE_FROM_CONFIG_ACCESS (This);
|
||||||
|
|
||||||
|
IfrFormNvData = AllocateZeroPool (sizeof (IP4_CONFIG_IFR_NVDATA));
|
||||||
|
if (IfrFormNvData == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Do nothing for UEFI OPEN/CLOSE Action
|
// Retrive uncommitted data from Browser
|
||||||
//
|
//
|
||||||
return EFI_SUCCESS;
|
if (!HiiGetBrowserData (&mNicIp4ConfigNvDataGuid, EFI_NIC_IP4_CONFIG_VARIABLE, sizeof (IP4_CONFIG_IFR_NVDATA), (UINT8 *) IfrFormNvData)) {
|
||||||
}
|
FreePool (IfrFormNvData);
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
Ip4ConfigInstance = IP4_CONFIG_INSTANCE_FROM_CONFIG_ACCESS (This);
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
IfrFormNvData = AllocateZeroPool (sizeof (IP4_CONFIG_IFR_NVDATA));
|
switch (QuestionId) {
|
||||||
if (IfrFormNvData == NULL) {
|
case KEY_LOCAL_IP:
|
||||||
return EFI_OUT_OF_RESOURCES;
|
Status = Ip4StrToIp (IfrFormNvData->StationAddress, &HostIp.v4);
|
||||||
}
|
if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
CopyMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.LocalIp, &HostIp.v4, sizeof (HostIp.v4));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_SUBNET_MASK:
|
||||||
|
Status = Ip4StrToIp (IfrFormNvData->SubnetMask, &SubnetMask.v4);
|
||||||
|
if (EFI_ERROR (Status) || ((SubnetMask.Addr[0] != 0) && (GetSubnetMaskPrefixLength (&SubnetMask.v4) == 0))) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Subnet Mask!", NULL);
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
CopyMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.SubnetMask, &SubnetMask.v4, sizeof (SubnetMask.v4));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_GATE_WAY:
|
||||||
|
Status = Ip4StrToIp (IfrFormNvData->GatewayAddress, &Gateway.v4);
|
||||||
|
if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Gateway!", NULL);
|
||||||
|
Status = EFI_INVALID_PARAMETER;
|
||||||
|
} else {
|
||||||
|
CopyMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.Gateway, &Gateway.v4, sizeof (Gateway.v4));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_SAVE_CHANGES:
|
||||||
|
Status = Ip4ConfigConvertIfrNvDataToDeviceConfigData (IfrFormNvData, Ip4ConfigInstance);
|
||||||
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Retrive uncommitted data from Browser
|
|
||||||
//
|
|
||||||
if (!HiiGetBrowserData (&mNicIp4ConfigNvDataGuid, EFI_NIC_IP4_CONFIG_VARIABLE, sizeof (IP4_CONFIG_IFR_NVDATA), (UINT8 *) IfrFormNvData)) {
|
|
||||||
FreePool (IfrFormNvData);
|
FreePool (IfrFormNvData);
|
||||||
return EFI_NOT_FOUND;
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
//
|
||||||
|
// All other action return unsupported.
|
||||||
switch (QuestionId) {
|
//
|
||||||
case KEY_LOCAL_IP:
|
return EFI_UNSUPPORTED;
|
||||||
Status = Ip4StrToIp (IfrFormNvData->StationAddress, &HostIp.v4);
|
|
||||||
if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {
|
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid IP address!", NULL);
|
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
} else {
|
|
||||||
CopyMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.LocalIp, &HostIp.v4, sizeof (HostIp.v4));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_SUBNET_MASK:
|
|
||||||
Status = Ip4StrToIp (IfrFormNvData->SubnetMask, &SubnetMask.v4);
|
|
||||||
if (EFI_ERROR (Status) || ((SubnetMask.Addr[0] != 0) && (GetSubnetMaskPrefixLength (&SubnetMask.v4) == 0))) {
|
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Subnet Mask!", NULL);
|
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
} else {
|
|
||||||
CopyMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.SubnetMask, &SubnetMask.v4, sizeof (SubnetMask.v4));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_GATE_WAY:
|
|
||||||
Status = Ip4StrToIp (IfrFormNvData->GatewayAddress, &Gateway.v4);
|
|
||||||
if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {
|
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid Gateway!", NULL);
|
|
||||||
Status = EFI_INVALID_PARAMETER;
|
|
||||||
} else {
|
|
||||||
CopyMem (&Ip4ConfigInstance->Ip4ConfigCallbackInfo.Gateway, &Gateway.v4, sizeof (Gateway.v4));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_SAVE_CHANGES:
|
|
||||||
Status = Ip4ConfigConvertIfrNvDataToDeviceConfigData (IfrFormNvData, Ip4ConfigInstance);
|
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
FreePool (IfrFormNvData);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
HII Config Access protocol implementation of VLAN configuration module.
|
HII Config Access protocol implementation of VLAN configuration module.
|
||||||
|
|
||||||
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions
|
are licensed and made available under the terms and conditions
|
||||||
of the BSD License which accompanies this distribution. The full
|
of the BSD License which accompanies this distribution. The full
|
||||||
@@ -254,77 +254,84 @@ VlanCallback (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
if (Action == EFI_BROWSER_ACTION_CHANGING) {
|
||||||
// Get Browser data
|
//
|
||||||
//
|
// Get Browser data
|
||||||
Configuration = AllocateZeroPool (sizeof (VLAN_CONFIGURATION));
|
//
|
||||||
ASSERT (Configuration != NULL);
|
Configuration = AllocateZeroPool (sizeof (VLAN_CONFIGURATION));
|
||||||
HiiGetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration);
|
ASSERT (Configuration != NULL);
|
||||||
|
HiiGetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration);
|
||||||
|
|
||||||
VlanConfig = PrivateData->VlanConfig;
|
VlanConfig = PrivateData->VlanConfig;
|
||||||
|
|
||||||
switch (QuestionId) {
|
switch (QuestionId) {
|
||||||
case VLAN_ADD_QUESTION_ID:
|
case VLAN_ADD_QUESTION_ID:
|
||||||
//
|
|
||||||
// Add a VLAN
|
|
||||||
//
|
|
||||||
VlanConfig->Set (VlanConfig, Configuration->VlanId, Configuration->Priority);
|
|
||||||
VlanUpdateForm (PrivateData);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Connect the newly created VLAN device
|
|
||||||
//
|
|
||||||
VlanHandle = NetLibGetVlanHandle (PrivateData->ControllerHandle, Configuration->VlanId);
|
|
||||||
if (VlanHandle == NULL) {
|
|
||||||
//
|
//
|
||||||
// There may be no child handle created for VLAN ID 0, connect the parent handle
|
// Add a VLAN
|
||||||
//
|
//
|
||||||
VlanHandle = PrivateData->ControllerHandle;
|
VlanConfig->Set (VlanConfig, Configuration->VlanId, Configuration->Priority);
|
||||||
}
|
VlanUpdateForm (PrivateData);
|
||||||
gBS->ConnectController (VlanHandle, NULL, NULL, TRUE);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear UI data
|
// Connect the newly created VLAN device
|
||||||
//
|
//
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
VlanHandle = NetLibGetVlanHandle (PrivateData->ControllerHandle, Configuration->VlanId);
|
||||||
Configuration->VlanId = 0;
|
if (VlanHandle == NULL) {
|
||||||
Configuration->Priority = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VLAN_REMOVE_QUESTION_ID:
|
|
||||||
//
|
|
||||||
// Remove VLAN
|
|
||||||
//
|
|
||||||
ASSERT (PrivateData->NumberOfVlan <= MAX_VLAN_NUMBER);
|
|
||||||
for (Index = 0; Index < PrivateData->NumberOfVlan; Index++) {
|
|
||||||
if (Configuration->VlanList[Index] != 0) {
|
|
||||||
//
|
//
|
||||||
// Checkbox is selected, need remove this VLAN
|
// There may be no child handle created for VLAN ID 0, connect the parent handle
|
||||||
//
|
//
|
||||||
VlanConfig->Remove (VlanConfig, PrivateData->VlanId[Index]);
|
VlanHandle = PrivateData->ControllerHandle;
|
||||||
}
|
}
|
||||||
|
gBS->ConnectController (VlanHandle, NULL, NULL, TRUE);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Clear UI data
|
||||||
|
//
|
||||||
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
||||||
|
Configuration->VlanId = 0;
|
||||||
|
Configuration->Priority = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VLAN_REMOVE_QUESTION_ID:
|
||||||
|
//
|
||||||
|
// Remove VLAN
|
||||||
|
//
|
||||||
|
ASSERT (PrivateData->NumberOfVlan <= MAX_VLAN_NUMBER);
|
||||||
|
for (Index = 0; Index < PrivateData->NumberOfVlan; Index++) {
|
||||||
|
if (Configuration->VlanList[Index] != 0) {
|
||||||
|
//
|
||||||
|
// Checkbox is selected, need remove this VLAN
|
||||||
|
//
|
||||||
|
VlanConfig->Remove (VlanConfig, PrivateData->VlanId[Index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VlanUpdateForm (PrivateData);
|
||||||
|
if (PrivateData->NumberOfVlan == 0) {
|
||||||
|
//
|
||||||
|
// No VLAN device now, connect the physical NIC handle.
|
||||||
|
// Note: PrivateData->NumberOfVlan has been updated by VlanUpdateForm()
|
||||||
|
//
|
||||||
|
gBS->ConnectController (PrivateData->ControllerHandle, NULL, NULL, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
||||||
|
ZeroMem (Configuration->VlanList, MAX_VLAN_NUMBER);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
VlanUpdateForm (PrivateData);
|
HiiSetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration, NULL);
|
||||||
if (PrivateData->NumberOfVlan == 0) {
|
FreePool (Configuration);
|
||||||
//
|
return EFI_SUCCESS;
|
||||||
// No VLAN device now, connect the physical NIC handle.
|
|
||||||
// Note: PrivateData->NumberOfVlan has been updated by VlanUpdateForm()
|
|
||||||
//
|
|
||||||
gBS->ConnectController (PrivateData->ControllerHandle, NULL, NULL, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
|
||||||
ZeroMem (Configuration->VlanList, MAX_VLAN_NUMBER);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HiiSetBrowserData (&mVlanFormSetGuid, mVlanStorageName, sizeof (VLAN_CONFIGURATION), (UINT8 *) Configuration, NULL);
|
//
|
||||||
FreePool (Configuration);
|
// All other action return unsupported.
|
||||||
return EFI_SUCCESS;
|
//
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
4. It save all the mapping info in NV variables which will be consumed
|
4. It save all the mapping info in NV variables which will be consumed
|
||||||
by platform override protocol driver to publish the platform override protocol.
|
by platform override protocol driver to publish the platform override protocol.
|
||||||
|
|
||||||
Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@@ -1335,81 +1335,81 @@ PlatOverMngrCallback (
|
|||||||
EFI_INPUT_KEY Key;
|
EFI_INPUT_KEY Key;
|
||||||
PLAT_OVER_MNGR_DATA *FakeNvData;
|
PLAT_OVER_MNGR_DATA *FakeNvData;
|
||||||
|
|
||||||
if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)) {
|
if (Action == EFI_BROWSER_ACTION_CHANGING) {
|
||||||
//
|
Private = EFI_CALLBACK_INFO_FROM_THIS (This);
|
||||||
// Do nothing for UEFI OPEN/CLOSE Action
|
FakeNvData = &Private->FakeNvData;
|
||||||
//
|
if (!HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData)) {
|
||||||
return EFI_SUCCESS;
|
return EFI_NOT_FOUND;
|
||||||
}
|
|
||||||
|
|
||||||
Private = EFI_CALLBACK_INFO_FROM_THIS (This);
|
|
||||||
FakeNvData = &Private->FakeNvData;
|
|
||||||
if (!HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData)) {
|
|
||||||
return EFI_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (KeyValue == KEY_VALUE_DEVICE_REFRESH ||
|
|
||||||
KeyValue == KEY_VALUE_DEVICE_FILTER ||
|
|
||||||
KeyValue == KEY_VALUE_DRIVER_GOTO_PREVIOUS
|
|
||||||
) {
|
|
||||||
UpdateDeviceSelectPage (Private, KeyValue, FakeNvData);
|
|
||||||
//
|
|
||||||
// Update page title string
|
|
||||||
//
|
|
||||||
NewStringToken = STRING_TOKEN (STR_TITLE);
|
|
||||||
if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path", NULL) == 0) {
|
|
||||||
ASSERT (FALSE);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (((KeyValue >= KEY_VALUE_DEVICE_OFFSET) && (KeyValue < KEY_VALUE_DEVICE_MAX)) || (KeyValue == KEY_VALUE_ORDER_GOTO_PREVIOUS)) {
|
if (KeyValue == KEY_VALUE_DEVICE_REFRESH ||
|
||||||
if (KeyValue == KEY_VALUE_ORDER_GOTO_PREVIOUS) {
|
KeyValue == KEY_VALUE_DEVICE_FILTER ||
|
||||||
KeyValue = (EFI_QUESTION_ID) (mSelectedCtrIndex + KEY_VALUE_DEVICE_OFFSET);
|
KeyValue == KEY_VALUE_DRIVER_GOTO_PREVIOUS
|
||||||
|
) {
|
||||||
|
UpdateDeviceSelectPage (Private, KeyValue, FakeNvData);
|
||||||
|
//
|
||||||
|
// Update page title string
|
||||||
|
//
|
||||||
|
NewStringToken = STRING_TOKEN (STR_TITLE);
|
||||||
|
if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path", NULL) == 0) {
|
||||||
|
ASSERT (FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UpdateBindingDriverSelectPage (Private, KeyValue, FakeNvData);
|
|
||||||
//
|
|
||||||
// Update page title string
|
|
||||||
//
|
|
||||||
NewStringToken = STRING_TOKEN (STR_TITLE);
|
|
||||||
if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller", NULL) == 0) {
|
|
||||||
ASSERT (FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (KeyValue == KEY_VALUE_DRIVER_GOTO_ORDER) {
|
if (((KeyValue >= KEY_VALUE_DEVICE_OFFSET) && (KeyValue < KEY_VALUE_DEVICE_MAX)) || (KeyValue == KEY_VALUE_ORDER_GOTO_PREVIOUS)) {
|
||||||
UpdatePrioritySelectPage (Private, KeyValue, FakeNvData);
|
if (KeyValue == KEY_VALUE_ORDER_GOTO_PREVIOUS) {
|
||||||
//
|
KeyValue = (EFI_QUESTION_ID) (mSelectedCtrIndex + KEY_VALUE_DEVICE_OFFSET);
|
||||||
// Update page title string
|
}
|
||||||
//
|
UpdateBindingDriverSelectPage (Private, KeyValue, FakeNvData);
|
||||||
NewStringToken = STRING_TOKEN (STR_TITLE);
|
//
|
||||||
if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them", NULL) == 0) {
|
// Update page title string
|
||||||
ASSERT (FALSE);
|
//
|
||||||
|
NewStringToken = STRING_TOKEN (STR_TITLE);
|
||||||
|
if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller", NULL) == 0) {
|
||||||
|
ASSERT (FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (KeyValue == KEY_VALUE_ORDER_SAVE_AND_EXIT) {
|
if (KeyValue == KEY_VALUE_DRIVER_GOTO_ORDER) {
|
||||||
Status = CommintChanges (Private, KeyValue, FakeNvData);
|
UpdatePrioritySelectPage (Private, KeyValue, FakeNvData);
|
||||||
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
//
|
||||||
if (EFI_ERROR (Status)) {
|
// Update page title string
|
||||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Single Override Info too large, Saving Error!", NULL);
|
//
|
||||||
return EFI_DEVICE_ERROR;
|
NewStringToken = STRING_TOKEN (STR_TITLE);
|
||||||
|
if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them", NULL) == 0) {
|
||||||
|
ASSERT (FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (KeyValue == KEY_VALUE_DEVICE_CLEAR) {
|
if (KeyValue == KEY_VALUE_ORDER_SAVE_AND_EXIT) {
|
||||||
|
Status = CommintChanges (Private, KeyValue, FakeNvData);
|
||||||
|
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Single Override Info too large, Saving Error!", NULL);
|
||||||
|
return EFI_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (KeyValue == KEY_VALUE_DEVICE_CLEAR) {
|
||||||
|
//
|
||||||
|
// Deletes all environment variable(s) that contain the override mappings info
|
||||||
|
//
|
||||||
|
FreeMappingDatabase (&mMappingDataBase);
|
||||||
|
Status = SaveOverridesMapping (&mMappingDataBase);
|
||||||
|
UpdateDeviceSelectPage (Private, KeyValue, FakeNvData);
|
||||||
|
}
|
||||||
//
|
//
|
||||||
// Deletes all environment variable(s) that contain the override mappings info
|
// Pass changed uncommitted data back to Form Browser
|
||||||
//
|
//
|
||||||
FreeMappingDatabase (&mMappingDataBase);
|
HiiSetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData, NULL);
|
||||||
Status = SaveOverridesMapping (&mMappingDataBase);
|
|
||||||
UpdateDeviceSelectPage (Private, KeyValue, FakeNvData);
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Pass changed uncommitted data back to Form Browser
|
// All other action return unsupported.
|
||||||
//
|
//
|
||||||
HiiSetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData, NULL);
|
return EFI_UNSUPPORTED;
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user