Home | History | Annotate | Download | only in IScsiDxe
      1 /** @file
      2   The header file of IScsiConfig.c.
      3 
      4 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
      5 This program and the accompanying materials
      6 are licensed and made available under the terms and conditions of the BSD License
      7 which accompanies this distribution.  The full text of the license may be found at
      8 http://opensource.org/licenses/bsd-license.php
      9 
     10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef _ISCSI_CONFIG_H_
     16 #define _ISCSI_CONFIG_H_
     17 
     18 #include <Guid/MdeModuleHii.h>
     19 #include <Protocol/HiiConfigRouting.h>
     20 #include <Library/HiiLib.h>
     21 #include <Library/DevicePathLib.h>
     22 #include <Library/DebugLib.h>
     23 #include <Library/BaseLib.h>
     24 #include <Library/NetLib.h>
     25 
     26 extern UINT8  IScsiConfigDxeBin[];
     27 extern UINT8  IScsi4DxeStrings[];
     28 
     29 #define ISCSI_INITATOR_NAME_VAR_NAME        L"I_NAME"
     30 
     31 #define ISCSI_CONFIG_VAR_ATTR               (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE)
     32 
     33 #define ISCSI_FORM_CALLBACK_INFO_SIGNATURE  SIGNATURE_32 ('I', 'f', 'c', 'i')
     34 
     35 
     36 
     37 /**
     38   If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear,
     39   then this macro return a pointer to a data structure ISCSI_FORM_CALLBACK_INFO.
     40 
     41   If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set,
     42   The Signature field of the data structure ISCSI_FORM_CALLBACK_INFO
     43   is compared to TestSignature.  If the signatures match, then a pointer
     44   to the pointer to a data structure ISCSI_FORM_CALLBACK_INFO is returned.
     45   If the signatures do not match, then DebugAssert() is called with a description
     46   of "CR has a bad signature" and Callback is returned.
     47 
     48   If the data type ISCSI_FORM_CALLBACK_INFO_SIGNATURE does not contain the field
     49   specified by Callback, then the module will not compile.
     50 
     51   If ISCSI_FORM_CALLBACK_INFO_SIGNATURE does not contain a field called Signature,
     52   then the module will not compile.
     53 
     54   @param   Callback      Pointer to the specified field within the data
     55                          structure ISCSI_FORM_CALLBACK_INFO.
     56   @return  A pointer to the pointer to a data structure ISCSI_FORM_CALLBACK_INFO.
     57   @retval  Others        Some unexpected error happened.
     58 **/
     59 
     60 #define ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK(Callback) \
     61   CR ( \
     62   Callback, \
     63   ISCSI_FORM_CALLBACK_INFO, \
     64   ConfigAccess, \
     65   ISCSI_FORM_CALLBACK_INFO_SIGNATURE \
     66   )
     67 
     68 #pragma pack(1)
     69 
     70 typedef struct _ISCSI_MAC_INFO {
     71   EFI_MAC_ADDRESS Mac;
     72   UINT8           Len;
     73   UINT16          VlanId;
     74 } ISCSI_MAC_INFO;
     75 
     76 typedef struct _ISCSI_DEVICE_LIST {
     77   UINT8           NumDevice;
     78   ISCSI_MAC_INFO  MacInfo[1];
     79 } ISCSI_DEVICE_LIST;
     80 
     81 #pragma pack()
     82 
     83 typedef struct _ISCSI_CONFIG_FORM_ENTRY {
     84   LIST_ENTRY                    Link;
     85   EFI_HANDLE                    Controller;
     86   CHAR16                        MacString[95];
     87   EFI_STRING_ID                 PortTitleToken;
     88   EFI_STRING_ID                 PortTitleHelpToken;
     89 
     90   ISCSI_SESSION_CONFIG_NVDATA   SessionConfigData;
     91   ISCSI_CHAP_AUTH_CONFIG_NVDATA AuthConfigData;
     92 } ISCSI_CONFIG_FORM_ENTRY;
     93 
     94 typedef struct _ISCSI_FORM_CALLBACK_INFO {
     95   UINTN                            Signature;
     96   EFI_HANDLE                       DriverHandle;
     97   EFI_HII_CONFIG_ACCESS_PROTOCOL   ConfigAccess;
     98   EFI_HII_DATABASE_PROTOCOL        *HiiDatabase;
     99   EFI_HII_CONFIG_ROUTING_PROTOCOL  *ConfigRouting;
    100   UINT16                           *KeyList;
    101   VOID                             *FormBuffer;
    102   EFI_HII_HANDLE                   RegisteredHandle;
    103   ISCSI_CONFIG_FORM_ENTRY          *Current;
    104 } ISCSI_FORM_CALLBACK_INFO;
    105 
    106 #pragma pack(1)
    107 
    108 ///
    109 /// HII specific Vendor Device Path definition.
    110 ///
    111 typedef struct {
    112   VENDOR_DEVICE_PATH             VendorDevicePath;
    113   EFI_DEVICE_PATH_PROTOCOL       End;
    114 } HII_VENDOR_DEVICE_PATH;
    115 
    116 #pragma pack()
    117 
    118 /**
    119   Updates the iSCSI configuration form to add/delete an entry for the iSCSI
    120   device specified by the Controller.
    121 
    122   @param[in]  DriverBindingHandle The driverbinding handle.
    123   @param[in]  Controller          The controller handle of the iSCSI device.
    124   @param[in]  AddForm             Whether to add or delete a form entry.
    125 
    126   @retval EFI_SUCCESS             The iSCSI configuration form is updated.
    127   @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
    128   @retval Others                  Other errors as indicated.
    129 **/
    130 EFI_STATUS
    131 IScsiConfigUpdateForm (
    132   IN EFI_HANDLE  DriverBindingHandle,
    133   IN EFI_HANDLE  Controller,
    134   IN BOOLEAN     AddForm
    135   );
    136 
    137 /**
    138   Initialize the iSCSI configuration form.
    139 
    140   @param[in]  DriverBindingHandle  The iSCSI driverbinding handle.
    141 
    142   @retval EFI_SUCCESS              The iSCSI configuration form is initialized.
    143   @retval EFI_OUT_OF_RESOURCES     Failed to allocate memory.
    144   @retval Others                   Other errors as indicated.
    145 **/
    146 EFI_STATUS
    147 IScsiConfigFormInit (
    148   VOID
    149   );
    150 
    151 /**
    152   Unload the iSCSI configuration form, this includes: delete all the iSCSI
    153   device configuration entries, uninstall the form callback protocol and
    154   free the resources used.
    155 
    156   @param[in]  DriverBindingHandle The iSCSI driverbinding handle.
    157 
    158   @retval EFI_SUCCESS             The iSCSI configuration form is unloaded.
    159   @retval EFI_OUT_OF_RESOURCES    Failed to allocate memory.
    160 **/
    161 EFI_STATUS
    162 IScsiConfigFormUnload (
    163   IN EFI_HANDLE  DriverBindingHandle
    164   );
    165 
    166 #endif
    167