123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814 |
- /** @file
- The header file of IScsiDriver.c.
- Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
- (C) Copyright 2017 Hewlett Packard Enterprise Development LP<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef _ISCSI_DRIVER_H_
- #define _ISCSI_DRIVER_H_
- #define ISCSI_V4_PRIVATE_GUID \
- { \
- 0xfa3cde4c, 0x87c2, 0x427d, { 0xae, 0xde, 0x7d, 0xd0, 0x96, 0xc8, 0x8c, 0x58 } \
- }
- #define ISCSI_V6_PRIVATE_GUID \
- { \
- 0x28be27e5, 0x66cc, 0x4a31, { 0xa3, 0x15, 0xdb, 0x14, 0xc3, 0x74, 0x4d, 0x85 } \
- }
- #define ISCSI_INITIATOR_NAME_VAR_NAME L"I_NAME"
- #define IP_MODE_AUTOCONFIG_IP4 3
- #define IP_MODE_AUTOCONFIG_IP6 4
- #define ALWAYS_USE_UEFI_ISCSI_AND_IGNORE_ISCSI_HBA 0x00
- #define STOP_UEFI_ISCSI_IF_HBA_INSTALL_AIP 0x01
- #define STOP_UEFI_ISCSI_IF_AIP_SUPPORT_IP4 0x02
- #define STOP_UEFI_ISCSI_IF_AIP_SUPPORT_IP6 0x04
- #define STOP_UEFI_ISCSI_IF_AIP_SUPPORT_OFFLOAD 0x08
- #define STOP_UEFI_ISCSI_IF_AIP_SUPPORT_MPIO 0x10
- #define STOP_UEFI_ISCSI_IF_AIP_CONFIGURED_IP4 0x20
- #define STOP_UEFI_ISCSI_IF_AIP_CONFIGURED_IP6 0x40
- #define ALWAYS_USE_ISCSI_HBA_AND_IGNORE_UEFI_ISCSI 0xFF
- extern EFI_COMPONENT_NAME2_PROTOCOL gIScsiComponentName2;
- extern EFI_COMPONENT_NAME_PROTOCOL gIScsiComponentName;
- extern EFI_UNICODE_STRING_TABLE *gIScsiControllerNameTable;
- extern EFI_ISCSI_INITIATOR_NAME_PROTOCOL gIScsiInitiatorName;
- extern EFI_AUTHENTICATION_INFO_PROTOCOL gIScsiAuthenticationInfo;
- extern EFI_EXT_SCSI_PASS_THRU_PROTOCOL gIScsiExtScsiPassThruProtocolTemplate;
- extern EFI_GUID gIScsiV4PrivateGuid;
- extern EFI_GUID gIScsiV6PrivateGuid;
- typedef struct {
- CHAR16 PortString[ISCSI_NAME_IFR_MAX_SIZE];
- LIST_ENTRY NicInfoList;
- UINT8 NicCount;
- UINT8 CurrentNic;
- UINT8 MaxNic;
- BOOLEAN Ipv6Flag;
- BOOLEAN OneSessionEstablished;
- BOOLEAN EnableMpio;
- UINT8 MpioCount; // The number of attempts in MPIO.
- UINT8 Krb5MpioCount; // The number of attempts login with KRB5 in MPIO.
- UINT8 SinglePathCount; // The number of single path attempts.
- UINT8 ValidSinglePathCount; // The number of valid single path attempts.
- UINT8 BootSelectedIndex;
- UINT8 AttemptCount;
- LIST_ENTRY AttemptConfigs; // User configured Attempt list.
- CHAR8 InitiatorName[ISCSI_NAME_MAX_SIZE];
- UINTN InitiatorNameLength;
- } ISCSI_PRIVATE_DATA;
- extern ISCSI_PRIVATE_DATA *mPrivate;
- typedef struct {
- LIST_ENTRY Link;
- UINT32 HwAddressSize;
- EFI_MAC_ADDRESS PermanentAddress;
- UINT8 NicIndex;
- UINT16 VlanId;
- UINTN BusNumber;
- UINTN DeviceNumber;
- UINTN FunctionNumber;
- BOOLEAN Ipv6Available;
- } ISCSI_NIC_INFO;
- typedef struct _ISCSI_PRIVATE_PROTOCOL {
- UINT32 Reserved;
- } ISCSI_PRIVATE_PROTOCOL;
- //
- // EFI Driver Binding Protocol for iSCSI driver.
- //
- /**
- Tests to see if this driver supports a given controller. If a child device is provided,
- it tests to see if this driver supports creating a handle for the specified child device.
- This function checks to see if the driver specified by This supports the device specified by
- ControllerHandle. Drivers typically use the device path attached to
- ControllerHandle and/or the services from the bus I/O abstraction attached to
- ControllerHandle to determine if the driver supports ControllerHandle. This function
- may be called many times during platform initialization. In order to reduce boot times, the tests
- performed by this function must be very small and take as little time as possible to execute. This
- function must not change the state of any hardware devices, and this function must be aware that the
- device specified by ControllerHandle may already be managed by the same driver or a
- different driver. This function must match its calls to AllocatePages() with FreePages(),
- AllocatePool() with FreePool(), and OpenProtocol() with CloseProtocol().
- Since ControllerHandle may have been previously started by the same driver, if a protocol is
- already in the opened state, then it must not be closed with CloseProtocol(). This is required
- to guarantee the state of ControllerHandle is not modified by this function.
- @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
- @param[in] ControllerHandle The handle of the controller to test. This handle
- must support a protocol interface that supplies
- an I/O abstraction to the driver.
- @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This
- parameter is ignored by device drivers, and is optional for bus
- drivers. For bus drivers, if this parameter is not NULL, then
- the bus driver must determine if the bus controller specified
- by ControllerHandle and the child controller specified
- by RemainingDevicePath are both supported by this
- bus driver.
- @retval EFI_SUCCESS The device specified by ControllerHandle and
- RemainingDevicePath is supported by the driver specified by This.
- @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and
- RemainingDevicePath is already managed by the driver
- specified by This.
- @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and
- RemainingDevicePath is already managed by a different
- driver or an application that requires exclusive access.
- Currently not implemented.
- @retval EFI_UNSUPPORTED The device specified by ControllerHandle and
- RemainingDevicePath is not supported by the driver specified by This.
- **/
- EFI_STATUS
- EFIAPI
- IScsiIp4DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
- /**
- Starts a device controller or a bus controller.
- The Start() function is designed to be invoked from the EFI boot service ConnectController().
- As a result, much of the error checking on the parameters to Start() has been moved into this
- common boot service. It is legal to call Start() from other locations,
- but the following calling restrictions must be followed or the system behavior will not be deterministic.
- 1. ControllerHandle must be a valid EFI_HANDLE.
- 2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned
- EFI_DEVICE_PATH_PROTOCOL.
- 3. Prior to calling Start(), the Supported() function for the driver specified by This must
- have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS.
- @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
- @param[in] ControllerHandle The handle of the controller to start. This handle
- must support a protocol interface that supplies
- an I/O abstraction to the driver.
- @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This
- parameter is ignored by device drivers, and is optional for bus
- drivers. For a bus driver, if this parameter is NULL, then handles
- for all the children of Controller are created by this driver.
- If this parameter is not NULL and the first Device Path Node is
- not the End of Device Path Node, then only the handle for the
- child device specified by the first Device Path Node of
- RemainingDevicePath is created by this driver.
- If the first Device Path Node of RemainingDevicePath is
- the End of Device Path Node, no child handle is created by this
- driver.
- @retval EFI_SUCCESS The device was started.
- @retval EFI_DEVICE_ERROR The device could not be started due to a device error. Currently not implemented.
- @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
- @retval Others The driver failed to start the device.
- **/
- EFI_STATUS
- EFIAPI
- IScsiIp4DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
- /**
- Stops a device controller or a bus controller.
- The Stop() function is designed to be invoked from the EFI boot service DisconnectController().
- As a result, much of the error checking on the parameters to Stop() has been moved
- into this common boot service. It is legal to call Stop() from other locations,
- but the following calling restrictions must be followed or the system behavior will not be deterministic.
- 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this
- same driver's Start() function.
- 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid
- EFI_HANDLE. In addition, all of these handles must have been created in this driver's
- Start() function, and the Start() function must have called OpenProtocol() on
- ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
- @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
- @param[in] ControllerHandle A handle to the device being stopped. The handle must
- support a bus specific I/O protocol for the driver
- to use to stop the device.
- @param[in] NumberOfChildren The number of child device handles in ChildHandleBuffer.
- @param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL
- if NumberOfChildren is 0.
- @retval EFI_SUCCESS The device was stopped.
- @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
- **/
- EFI_STATUS
- EFIAPI
- IScsiIp4DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer OPTIONAL
- );
- /**
- Tests to see if this driver supports a given controller. If a child device is provided,
- it tests to see if this driver supports creating a handle for the specified child device.
- This function checks to see if the driver specified by This supports the device specified by
- ControllerHandle. Drivers typically use the device path attached to
- ControllerHandle and/or the services from the bus I/O abstraction attached to
- ControllerHandle to determine if the driver supports ControllerHandle. This function
- may be called many times during platform initialization. In order to reduce boot times, the tests
- performed by this function must be very small and take as little time as possible to execute. This
- function must not change the state of any hardware devices, and this function must be aware that the
- device specified by ControllerHandle may already be managed by the same driver or a
- different driver. This function must match its calls to AllocatePages() with FreePages(),
- AllocatePool() with FreePool(), and OpenProtocol() with CloseProtocol().
- Since ControllerHandle may have been previously started by the same driver, if a protocol is
- already in the opened state, then it must not be closed with CloseProtocol(). This is required
- to guarantee the state of ControllerHandle is not modified by this function.
- @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
- @param[in] ControllerHandle The handle of the controller to test. This handle
- must support a protocol interface that supplies
- an I/O abstraction to the driver.
- @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This
- parameter is ignored by device drivers, and is optional for bus
- drivers. For bus drivers, if this parameter is not NULL, then
- the bus driver must determine if the bus controller specified
- by ControllerHandle and the child controller specified
- by RemainingDevicePath are both supported by this
- bus driver.
- @retval EFI_SUCCESS The device specified by ControllerHandle and
- RemainingDevicePath is supported by the driver specified by This.
- @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and
- RemainingDevicePath is already managed by the driver
- specified by This.
- @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and
- RemainingDevicePath is already managed by a different
- driver or an application that requires exclusive access.
- Currently not implemented.
- @retval EFI_UNSUPPORTED The device specified by ControllerHandle and
- RemainingDevicePath is not supported by the driver specified by This.
- **/
- EFI_STATUS
- EFIAPI
- IScsiIp6DriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
- /**
- Starts a device controller or a bus controller.
- The Start() function is designed to be invoked from the EFI boot service ConnectController().
- As a result, much of the error checking on the parameters to Start() has been moved into this
- common boot service. It is legal to call Start() from other locations,
- but the following calling restrictions must be followed or the system behavior will not be deterministic.
- 1. ControllerHandle must be a valid EFI_HANDLE.
- 2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned
- EFI_DEVICE_PATH_PROTOCOL.
- 3. Prior to calling Start(), the Supported() function for the driver specified by This must
- have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS.
- @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
- @param[in] ControllerHandle The handle of the controller to start. This handle
- must support a protocol interface that supplies
- an I/O abstraction to the driver.
- @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This
- parameter is ignored by device drivers, and is optional for bus
- drivers. For a bus driver, if this parameter is NULL, then handles
- for all the children of Controller are created by this driver.
- If this parameter is not NULL and the first Device Path Node is
- not the End of Device Path Node, then only the handle for the
- child device specified by the first Device Path Node of
- RemainingDevicePath is created by this driver.
- If the first Device Path Node of RemainingDevicePath is
- the End of Device Path Node, no child handle is created by this
- driver.
- @retval EFI_SUCCESS The device was started.
- @retval EFI_DEVICE_ERROR The device could not be started due to a device error. Currently not implemented.
- @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
- @retval Others The driver failed to start the device.
- **/
- EFI_STATUS
- EFIAPI
- IScsiIp6DriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
- );
- /**
- Stops a device controller or a bus controller.
- The Stop() function is designed to be invoked from the EFI boot service DisconnectController().
- As a result, much of the error checking on the parameters to Stop() has been moved
- into this common boot service. It is legal to call Stop() from other locations,
- but the following calling restrictions must be followed or the system behavior will not be deterministic.
- 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this
- same driver's Start() function.
- 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid
- EFI_HANDLE. In addition, all of these handles must have been created in this driver's
- Start() function, and the Start() function must have called OpenProtocol() on
- ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
- @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
- @param[in] ControllerHandle A handle to the device being stopped. The handle must
- support a bus specific I/O protocol for the driver
- to use to stop the device.
- @param[in] NumberOfChildren The number of child device handles in ChildHandleBuffer.
- @param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL
- if NumberOfChildren is 0.
- @retval EFI_SUCCESS The device was stopped.
- @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
- **/
- EFI_STATUS
- EFIAPI
- IScsiIp6DriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer OPTIONAL
- );
- //
- // EFI Component Name(2) Protocol for iSCSI driver.
- //
- /**
- Retrieves a Unicode string that is the user readable name of the driver.
- This function retrieves the user readable name of a driver in the form of a
- Unicode string. If the driver specified by This has a user readable name in
- the language specified by Language, then a pointer to the driver name is
- returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
- by This does not support the language specified by Language,
- then EFI_UNSUPPORTED is returned.
- @param[in] This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param[in] Language A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is up
- to the driver writer. Language is specified
- in RFC 4646 or ISO 639-2 language code format.
- @param[out] DriverName A pointer to the Unicode string to return.
- This Unicode string is the name of the
- driver specified by This in the language
- specified by Language.
- @retval EFI_SUCCESS The Unicode string for the Driver specified by
- This and the language specified by Language was
- returned in DriverName.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER DriverName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
- **/
- EFI_STATUS
- EFIAPI
- IScsiComponentNameGetDriverName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN CHAR8 *Language,
- OUT CHAR16 **DriverName
- );
- /**
- Retrieves a Unicode string that is the user readable name of the controller
- that is being managed by a driver.
- This function retrieves the user readable name of the controller specified by
- ControllerHandle and ChildHandle in the form of a Unicode string. If the
- driver specified by This has a user readable name in the language specified by
- Language, then a pointer to the controller name is returned in ControllerName,
- and EFI_SUCCESS is returned. If the driver specified by This is not currently
- managing the controller specified by ControllerHandle and ChildHandle,
- then EFI_UNSUPPORTED is returned. If the driver specified by This does not
- support the language specified by Language, then EFI_UNSUPPORTED is returned.
- @param[in] This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param[in] ControllerHandle The handle of a controller that the driver
- specified by This is managing. This handle
- specifies the controller whose name is to be
- returned.
- @param[in] ChildHandle The handle of the child controller to retrieve
- the name of. This is an optional parameter that
- may be NULL. It will be NULL for device
- drivers. It will also be NULL for a bus drivers
- that wish to retrieve the name of the bus
- controller. It will not be NULL for a bus
- driver that wishes to retrieve the name of a
- child controller.
- @param[in] Language A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is
- determined by the driver writer. Language is
- specified inRFC 4646 or ISO 639-2 language code
- format.
- @param[out] ControllerName A pointer to the Unicode string to return.
- This Unicode string is the name of the
- controller specified by ControllerHandle and
- ChildHandle in the language specified by
- Language from the point of view of the driver
- specified by This.
- @retval EFI_SUCCESS The Unicode string for the user readable name in
- the language specified by Language for the
- driver specified by This was returned in
- DriverName.
- @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
- EFI_HANDLE.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER ControllerName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This is not currently
- managing the controller specified by
- ControllerHandle and ChildHandle.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
- **/
- EFI_STATUS
- EFIAPI
- IScsiComponentNameGetControllerName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_HANDLE ChildHandle OPTIONAL,
- IN CHAR8 *Language,
- OUT CHAR16 **ControllerName
- );
- //
- // EFI iSCSI Initiator Name Protocol for iSCSI driver.
- //
- /**
- Retrieves the current set value of iSCSI Initiator Name.
- @param[in] This Pointer to the EFI_ISCSI_INITIATOR_NAME_PROTOCOL
- instance.
- @param[in, out] BufferSize Size of the buffer in bytes pointed to by Buffer /
- Actual size of the variable data buffer.
- @param[out] Buffer Pointer to the buffer for data to be read.
- @retval EFI_SUCCESS Data was successfully retrieved into the provided
- buffer and the BufferSize was sufficient to handle
- the iSCSI initiator name.
- @retval EFI_BUFFER_TOO_SMALL BufferSize is too small for the result. BufferSize
- will be updated with the size required to complete
- the request. Buffer will not be affected.
- @retval EFI_INVALID_PARAMETER BufferSize is NULL. BufferSize and Buffer will not
- be affected.
- @retval EFI_INVALID_PARAMETER Buffer is NULL. BufferSize and Buffer will not be
- affected.
- @retval EFI_DEVICE_ERROR The iSCSI initiator name could not be retrieved
- due to a hardware error.
- **/
- EFI_STATUS
- EFIAPI
- IScsiGetInitiatorName (
- IN EFI_ISCSI_INITIATOR_NAME_PROTOCOL *This,
- IN OUT UINTN *BufferSize,
- OUT VOID *Buffer
- );
- /**
- Sets the iSSI Initiator Name.
- @param[in] This Pointer to the EFI_ISCSI_INITIATOR_NAME_PROTOCOL
- instance.
- @param[in, out] BufferSize Size of the buffer in bytes pointed to by Buffer.
- @param[in] Buffer Pointer to the buffer for data to be written.
- @retval EFI_SUCCESS Data was successfully stored by the protocol.
- @retval EFI_UNSUPPORTED Platform policies do not allow for data to be
- written.
- @retval EFI_INVALID_PARAMETER BufferSize exceeds the maximum allowed limit.
- BufferSize will be updated with the maximum size
- required to complete the request.
- @retval EFI_INVALID_PARAMETER Buffersize is NULL. BufferSize and Buffer will not
- be affected.
- @retval EFI_INVALID_PARAMETER Buffer is NULL. BufferSize and Buffer will not be
- affected.
- @retval EFI_DEVICE_ERROR The data could not be stored due to a hardware
- error.
- @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the data
- @retval EFI_PROTOCOL_ERROR Input iSCSI initiator name does not adhere to RFC
- 3720
- **/
- EFI_STATUS
- EFIAPI
- IScsiSetInitiatorName (
- IN EFI_ISCSI_INITIATOR_NAME_PROTOCOL *This,
- IN OUT UINTN *BufferSize,
- IN VOID *Buffer
- );
- //
- // EFI_AUTHENTICATION_INFO_PROTOCOL for iSCSI driver.
- //
- /**
- Retrieves the authentication information associated with a particular controller handle.
- @param[in] This Pointer to the EFI_AUTHENTICATION_INFO_PROTOCOL.
- @param[in] ControllerHandle Handle to the Controller.
- @param[out] Buffer Pointer to the authentication information. This function is
- responsible for allocating the buffer and it is the caller's
- responsibility to free buffer when the caller is finished with buffer.
- @retval EFI_DEVICE_ERROR The authentication information could not be
- retrieved due to a hardware error.
- **/
- EFI_STATUS
- EFIAPI
- IScsiGetAuthenticationInfo (
- IN EFI_AUTHENTICATION_INFO_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- OUT VOID **Buffer
- );
- /**
- Set the authentication information for a given controller handle.
- @param[in] This Pointer to the EFI_AUTHENTICATION_INFO_PROTOCOL.
- @param[in] ControllerHandle Handle to the Controller.
- @param[in] Buffer Pointer to the authentication information.
- @retval EFI_UNSUPPORTED If the platform policies do not allow setting of
- the authentication information.
- **/
- EFI_STATUS
- EFIAPI
- IScsiSetAuthenticationInfo (
- IN EFI_AUTHENTICATION_INFO_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN VOID *Buffer
- );
- //
- // EFI_EXT_SCSI_PASS_THRU_PROTOCOL for iSCSI driver.
- //
- /**
- Sends a SCSI Request Packet to a SCSI device that is attached to the SCSI channel.
- This function supports both blocking I/O and nonblocking I/O. The blocking I/O
- functionality is required, and the nonblocking I/O functionality is optional.
- @param[in] This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
- @param[in] Target The Target is an array of size TARGET_MAX_BYTES and it
- represents the id of the SCSI device to send the SCSI
- Request Packet. Each transport driver may choose to
- utilize a subset of this size to suit the needs
- of transport target representation. For example, a
- Fibre Channel driver may use only 8 bytes (WWN)
- to represent an FC target.
- @param[in] Lun The LUN of the SCSI device to send the SCSI Request Packet.
- @param[in, out] Packet A pointer to the SCSI Request Packet to send to the
- SCSI device specified by Target and Lun.
- @param[in] Event If nonblocking I/O is not supported then Event is ignored,
- and blocking I/O is performed. If Event is NULL, then
- blocking I/O is performed. If Event is not NULL and non
- blocking I/O is supported, then nonblocking I/O is performed,
- and Event will be signaled when the SCSI Request Packet
- completes.
- @retval EFI_SUCCESS The SCSI Request Packet was sent by the host. For
- bi-directional commands, InTransferLength bytes
- were transferred from InDataBuffer.
- For write and bi-directional commands, OutTransferLength
- bytes were transferred by OutDataBuffer.
- @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was not executed.
- The number of bytes that could be transferred is
- returned in InTransferLength. For write and
- bi-directional commands, OutTransferLength bytes
- were transferred by OutDataBuffer.
- @retval EFI_NOT_READY The SCSI Request Packet could not be sent because
- there are too many SCSI Request Packets already
- queued. The caller may retry later.
- @retval EFI_DEVICE_ERROR A device error occurred while attempting to send
- the SCSI Request Packet.
- @retval EFI_INVALID_PARAMETER Target, Lun, or the contents of ScsiRequestPacket
- are invalid.
- @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet
- is not supported by the host adapter.
- This includes the case of Bi-directional SCSI
- commands not supported by the implementation.
- The SCSI Request Packet was not sent,
- so no additional status information is available.
- @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI
- Request Packet to execute.
- **/
- EFI_STATUS
- EFIAPI
- IScsiExtScsiPassThruFunction (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun,
- IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
- IN EFI_EVENT Event OPTIONAL
- );
- /**
- Used to retrieve the list of legal Target IDs and LUNs for SCSI devices on
- a SCSI channel. These can either be the list SCSI devices that are actually
- present on the SCSI channel, or the list of legal Target Ids and LUNs for the
- SCSI channel. Regardless, the caller of this function must probe the Target ID
- and LUN returned to see if a SCSI device is actually present at that location
- on the SCSI channel.
- @param[in] This The EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
- @param[in, out] Target On input, a pointer to the Target ID of a SCSI
- device present on the SCSI channel. On output, a
- pointer to the Target ID of the next SCSI device
- present on a SCSI channel. An input value of
- 0xFFFFFFFF retrieves the Target ID of the first
- SCSI device present on a SCSI channel.
- @param[in, out] Lun On input, a pointer to the LUN of a SCSI device
- present on the SCSI channel. On output, a pointer
- to the LUN of the next SCSI device present on a
- SCSI channel.
- @retval EFI_SUCCESS The Target ID and Lun of the next SCSI device on
- the SCSI channel was returned in Target and Lun.
- @retval EFI_NOT_FOUND There are no more SCSI devices on this SCSI
- channel.
- @retval EFI_INVALID_PARAMETER Target is not 0xFFFFFFFF,and Target and Lun were
- not returned on a previous call to
- GetNextDevice().
- **/
- EFI_STATUS
- EFIAPI
- IScsiExtScsiPassThruGetNextTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN OUT UINT8 **Target,
- IN OUT UINT64 *Lun
- );
- /**
- Allocate and build a device path node for a SCSI device on a SCSI channel.
- @param[in] This Protocol instance pointer.
- @param[in] Target The Target ID of the SCSI device for which a
- device path node is to be allocated and built.
- @param[in] Lun The LUN of the SCSI device for which a device
- path node is to be allocated and built.
- @param[in, out] DevicePath A pointer to a single device path node that
- describes the SCSI device specified by Target and
- Lun. This function is responsible for allocating
- the buffer DevicePath with the boot service
- AllocatePool(). It is the caller's
- responsibility to free DevicePath when the caller
- is finished with DevicePath.
- @retval EFI_SUCCESS The device path node that describes the SCSI
- device specified by Target and Lun was allocated
- and returned in DevicePath.
- @retval EFI_NOT_FOUND The SCSI devices specified by Target and Lun does
- not exist on the SCSI channel.
- @retval EFI_INVALID_PARAMETER DevicePath is NULL.
- @retval EFI_OUT_OF_RESOURCES There are not enough resources to allocate
- DevicePath.
- **/
- EFI_STATUS
- EFIAPI
- IScsiExtScsiPassThruBuildDevicePath (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun,
- IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
- );
- /**
- Translate a device path node to a Target ID and LUN.
- @param[in] This Protocol instance pointer.
- @param[in] DevicePath A pointer to the device path node that describes
- a SCSI device on the SCSI channel.
- @param[out] Target A pointer to the Target ID of a SCSI device on
- the SCSI channel.
- @param[out] Lun A pointer to the LUN of a SCSI device on the SCSI
- channel.
- @retval EFI_SUCCESS DevicePath was successfully translated to a
- Target ID and LUN, and they were returned in
- Target and Lun.
- @retval EFI_INVALID_PARAMETER DevicePath/Target/Lun is NULL.
- @retval EFI_UNSUPPORTED This driver does not support the device path node
- type in DevicePath.
- @retval EFI_NOT_FOUND A valid translation from DevicePath to a Target
- ID and LUN does not exist.
- **/
- EFI_STATUS
- EFIAPI
- IScsiExtScsiPassThruGetTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- OUT UINT8 **Target,
- OUT UINT64 *Lun
- );
- /**
- Resets a SCSI channel.This operation resets all the SCSI devices connected to
- the SCSI channel.
- @param[in] This Protocol instance pointer.
- @retval EFI_UNSUPPORTED It is not supported.
- **/
- EFI_STATUS
- EFIAPI
- IScsiExtScsiPassThruResetChannel (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This
- );
- /**
- Resets a SCSI device that is connected to a SCSI channel.
- @param[in] This Protocol instance pointer.
- @param[in] Target The Target ID of the SCSI device to reset.
- @param[in] Lun The LUN of the SCSI device to reset.
- @retval EFI_UNSUPPORTED It is not supported.
- **/
- EFI_STATUS
- EFIAPI
- IScsiExtScsiPassThruResetTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun
- );
- /**
- Retrieve the list of legal Target IDs for SCSI devices on a SCSI channel.
- @param[in] This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL
- instance.
- @param[in, out] Target (TARGET_MAX_BYTES) of a SCSI device present on
- the SCSI channel. On output, a pointer to the
- Target ID (an array of TARGET_MAX_BYTES) of the
- next SCSI device present on a SCSI channel.
- An input value of 0xF(all bytes in the array are 0xF)
- in the Target array retrieves the Target ID of the
- first SCSI device present on a SCSI channel.
- @retval EFI_SUCCESS The Target ID of the next SCSI device on the SCSI
- channel was returned in Target.
- @retval EFI_INVALID_PARAMETER Target or Lun is NULL.
- @retval EFI_TIMEOUT Target array is not all 0xF, and Target was not
- returned on a previous call to GetNextTarget().
- @retval EFI_NOT_FOUND There are no more SCSI devices on this SCSI channel.
- **/
- EFI_STATUS
- EFIAPI
- IScsiExtScsiPassThruGetNextTarget (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN OUT UINT8 **Target
- );
- #endif
|