mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +02:00
Fix a bug. iSCSI driver doesn’t follow driver model Start()/Stop() in case no configuration data for login. So when VLAN form Add/Remove items, iScsi form cannot update MAC address.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10740 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
10c9a2e3f6
commit
fd627b160d
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
The entry point of IScsi driver.
|
The entry point of IScsi driver.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2009, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2010, 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
|
||||||
@ -137,16 +137,61 @@ IScsiDriverBindingStart (
|
|||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
ISCSI_DRIVER_DATA *Private;
|
ISCSI_DRIVER_DATA *Private;
|
||||||
|
VOID *Interface;
|
||||||
|
|
||||||
|
Private = IScsiCreateDriverData (This->DriverBindingHandle, ControllerHandle);
|
||||||
|
if (Private == NULL) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Create a underlayer child instance, but not need to configure it. Just open ChildHandle
|
||||||
|
// via BY_DRIVER. That is, establishing the relationship between ControllerHandle and ChildHandle.
|
||||||
|
// Therefore, when DisconnectController(), especially VLAN virtual controller handle,
|
||||||
|
// IScsiDriverBindingStop() will be called.
|
||||||
|
//
|
||||||
|
Status = NetLibCreateServiceChild (
|
||||||
|
ControllerHandle,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
&gEfiTcp4ServiceBindingProtocolGuid,
|
||||||
|
&Private->ChildHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
|
Private->ChildHandle,
|
||||||
|
&gEfiTcp4ProtocolGuid,
|
||||||
|
&Interface,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
ControllerHandle,
|
||||||
|
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Always install private protocol no matter what happens later. We need to
|
||||||
|
// keep the relationship between ControllerHandle and ChildHandle.
|
||||||
|
//
|
||||||
|
Status = gBS->InstallProtocolInterface (
|
||||||
|
&ControllerHandle,
|
||||||
|
&gIScsiPrivateGuid,
|
||||||
|
EFI_NATIVE_INTERFACE,
|
||||||
|
&Private->IScsiIdentifier
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
goto ON_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Try to add a port configuration page for this controller.
|
// Try to add a port configuration page for this controller.
|
||||||
//
|
//
|
||||||
IScsiConfigUpdateForm (This->DriverBindingHandle, ControllerHandle, TRUE);
|
IScsiConfigUpdateForm (This->DriverBindingHandle, ControllerHandle, TRUE);
|
||||||
|
|
||||||
Private = IScsiCreateDriverData (This->DriverBindingHandle, ControllerHandle);
|
|
||||||
if (Private == NULL) {
|
|
||||||
return EFI_OUT_OF_RESOURCES;
|
|
||||||
}
|
|
||||||
//
|
//
|
||||||
// Get the iSCSI configuration data of this controller.
|
// Get the iSCSI configuration data of this controller.
|
||||||
//
|
//
|
||||||
@ -190,19 +235,7 @@ IScsiDriverBindingStart (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto ON_ERROR;
|
goto ON_ERROR;
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// Install the iSCSI private stuff as a flag to indicate this controller
|
|
||||||
// is already controlled by iSCSI driver.
|
|
||||||
//
|
|
||||||
Status = gBS->InstallProtocolInterface (
|
|
||||||
&ControllerHandle,
|
|
||||||
&gIScsiPrivateGuid,
|
|
||||||
EFI_NATIVE_INTERFACE,
|
|
||||||
&Private->IScsiIdentifier
|
|
||||||
);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
goto ON_ERROR;
|
|
||||||
}
|
|
||||||
//
|
//
|
||||||
// Update/Publish the iSCSI Boot Firmware Table.
|
// Update/Publish the iSCSI Boot Firmware Table.
|
||||||
//
|
//
|
||||||
@ -213,7 +246,6 @@ IScsiDriverBindingStart (
|
|||||||
ON_ERROR:
|
ON_ERROR:
|
||||||
|
|
||||||
IScsiSessionAbort (&Private->Session);
|
IScsiSessionAbort (&Private->Session);
|
||||||
IScsiCleanDriverData (Private);
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -312,6 +344,27 @@ IScsiDriverBindingStop (
|
|||||||
|
|
||||||
Private = ISCSI_DRIVER_DATA_FROM_IDENTIFIER (IScsiIdentifier);
|
Private = ISCSI_DRIVER_DATA_FROM_IDENTIFIER (IScsiIdentifier);
|
||||||
|
|
||||||
|
if (Private->ChildHandle != NULL) {
|
||||||
|
Status = gBS->CloseProtocol (
|
||||||
|
Private->ChildHandle,
|
||||||
|
&gEfiTcp4ProtocolGuid,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
IScsiController
|
||||||
|
);
|
||||||
|
|
||||||
|
ASSERT (!EFI_ERROR (Status));
|
||||||
|
|
||||||
|
Status = NetLibDestroyServiceChild (
|
||||||
|
IScsiController,
|
||||||
|
This->DriverBindingHandle,
|
||||||
|
&gEfiTcp4ServiceBindingProtocolGuid,
|
||||||
|
Private->ChildHandle
|
||||||
|
);
|
||||||
|
ASSERT (!EFI_ERROR (Status));
|
||||||
|
}
|
||||||
|
|
||||||
|
IScsiConfigUpdateForm (This->DriverBindingHandle, IScsiController, FALSE);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Uninstall the private protocol.
|
// Uninstall the private protocol.
|
||||||
//
|
//
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
The header file of IScsiImpl.c.
|
The header file of IScsiImpl.c.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2010, 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
|
||||||
@ -153,7 +153,7 @@ struct _ISCSI_DRIVER_DATA {
|
|||||||
EFI_HANDLE Image;
|
EFI_HANDLE Image;
|
||||||
EFI_HANDLE Controller;
|
EFI_HANDLE Controller;
|
||||||
ISCSI_PRIVATE_PROTOCOL IScsiIdentifier;
|
ISCSI_PRIVATE_PROTOCOL IScsiIdentifier;
|
||||||
|
EFI_HANDLE ChildHandle;
|
||||||
EFI_EVENT ExitBootServiceEvent;
|
EFI_EVENT ExitBootServiceEvent;
|
||||||
|
|
||||||
EFI_EXT_SCSI_PASS_THRU_PROTOCOL IScsiExtScsiPassThru;
|
EFI_EXT_SCSI_PASS_THRU_PROTOCOL IScsiExtScsiPassThru;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user