Marvell NetXtreme Firmware Upgrade Tool for Linux Copyright (c) 2005-2019 Marvell Semiconductor Inc. All rights reserved. July 1, 2019. Table of Contents ================= 1. Introduction 2. Requirements 3. Installation 4. Supported Operating Systems 5. Command Usage 6. Exit Codes 7. Examples 8. Known Limitations 9. Third Party Software License 1. Introduction: ================ LnxQlgcUpg.sh is a non-interactive shell script which can be run from a Linux terminal. This script can ONLY be used to upgrade the firmware components and it does not require user intervention. On executing LnxQlgcUpg.sh, it automatically extracts the SDK contents and initiate the upgrade process. On completion it displays success or failure message to indicate final result. lnxfwnx2 is a console application which can be run from a Linux terminal. The application supports both command-line as well as interactive mode to interact with the users. When calling the utility from another process or when using the utility as a command line tool, the utility will take commands from user specified parameters and return appropriate exit code to indicate the result. This module is dependent on device driver and TCL libraries for firmware access. 2. Requirements: ================ 1. Driver Versions: a). For E3 controller: bnx2 Linux driver version 1.4.41 or above. b). For E4 controller: qed Linux driver version 8.3.4.0 or above. qede Linux driver version 8.3.4.0 or above. qede(inbox) Linux driver version 8.33.0.20 on RHEL7.6, RHEL8.0, SLES12.4, SLES15.1 and higher Please refer to README.TXT of the target driver for installation instruction. 2. For v2.4.1 or later libncurses.so.5 and libtinfo.so.5 are needed. Please use 'ldd lnxfwnx2' to find the dependency of these libraries. 3. PHY Firmware can be upgraded only if the corresponding INTERFACES ARE UP. Please use the following command to up the interface. #ifconfig p6p1 up p6p1 => is the interface that need to be made up / down #ifconfig p6p1 down 3. Installation: ================ 1. Non-interactive upgrade : No installation required Files required for Non-interactive upgrade: 1) lnxfwnx2-{arch}.sdk.tgz - SDK Package 2) LnxQlgcUpg.sh - Script file 3) Marvell provided MBI file Note: LnxQlgcUpg.sh requires MBI (multi-boot image) file to be present in same folder as LnxQlgcUpg.sh script file. 2. Manual mode To install lnxfwnx2 SDK package. a. On terminal execute cmd 'tar -zxvf lnxfwnx2-{arch}.sdk.tgz' to untar the package. The files included in the sdk package are: 1) lnxfwnx2 - This upgrade utility program 2) libtcl8.6.8.so - Dependent TCL library 3) Readme.txt - This file. 4) Release.txt - Release Notes 5) qlgc_pci.ids - PCI ID file for adapter identification 4. Supported Operating Systems: =============================== OS Name OS Type Hardware Platform ------------------------ ------------ -------------------- * Red Hat RHEL AS/ES 7.x 64-bit x64 * Red Hat RHEL AS/ES 6.x 32-bit x86 * Red Hat RHEL AS/ES 6.x 64-bit x64 * Red Hat RHEL AS/ES 5.8 32-bit x86 * Red Hat RHEL AS/ES 5.8 64-bit x64 * Red Hat RHEL AS/ES 5.7 32-bit x86 * Red Hat RHEL AS/ES 5.7 64-bit x64 * Red Hat RHEL AS/ES 5.6 32-bit x86 * Red Hat RHEL AS/ES 5.6 64-bit x64 * Novell SLES 15 GA 64-bit x64 * Novell SLES 12 SP4/SP3/SP1 64-bit x64 * Novell SLES 11 SP2/SP1 32-bit x86 * Novell SLES 11 SP2/SP1 64-bit x64 5. Command Usage: ================= 5.a Non-interactive upgrade --------------------- After installation run the shell script. ./LnxQlgcUpg.sh The script identifies the supported Marvell Adapters and upgrades all the firmware components on all applicable adapters in a system. 5.b Manual mode ------------------------ Notes: 1) Some of the commands are not supported for E4 controller. 2) For more information, please refer to the section 4.a.1 to view the list of unavailable commands for E4. Usage: ------ lnxfwnx2 provides both command-line and interactive mode to the user. lnxfwnx2 { -all | [ID | MAC] } [Commands] The '-all' option applies to 'upgrade', 'restorenvram', 'cfg' and 'factory_defaults' commands only. The 'ID/MAC' option is used to select the adapter for the command to apply. It can be omitted if there is only one adapter in the system. The ID/MAC is optional for 'help', 'version', and 'dev' commands, but it is required for all other commands. 1. When '-all' is specified, 'ID' or 'MAC' cannot be specified. Commands 'upgrade', 'restorenvram', cfg and factory_defaults will use the device information in the image to apply to all NICs that match the same device information. 2. On Linux, 'ID' is the the interface name (i.e. ethX). 3. 'MAC' is the MAC address name of the NIC in the system. For example, '00:10:18:00:11:99' is a valid MAC address from 'ifconfig' utility. Use '001018001199' as an input parameter to select the NIC. 5.b.1. Available commands: --------------------------------------------------------------------- The following is the list of commands for E3 & E4 controllers. Command Name : General Command Description : Command Support/Availability ---------------- --------------------------------------------- ---------------------------------- [E3] [E4-OOB drv] [E4-inbox drv] ----- ----------- ------------ help : list of available commands : Yes Yes Yes q : exit the program : Yes Yes Yes log : log output to a file : Yes Yes Yes dev : select an adapter or List available adapters : Yes Yes Yes dir : display file directory in NVRAM : Yes Yes No crc : check/update NVRAM checksum : Yes Yes No prg : Program NVRAM with specified firmware image : Yes No No dumpnvram : save entire NVRAM content or MDUMP image : Yes Yes No to a specified file restorenvram : restore entire NVRAM content from a file : Yes No No version : display version of this program : Yes Yes Yes upgrade : upgrades the firmware or bootcode : Yes Yes Yes reset : reset the selected NIC. : Yes Yes Yes -w : Enable/Disable WOL : Yes Yes Yes cfg : Configure NVRAM : Yes Yes Yes phy : Upgrade PHY firmware : Yes Yes Yes info : Displays the general information : Yes Yes No factory_defaults : Restore NVM_CFG1 to factory default settings : No Yes Yes update_cfg : Update NVM_CFG and META firmware images : No Yes Yes xml : export the firmware versions in xml file : Yes Yes Yes vlant : Creates an empty VLAN Table in NVRAM : Yes No No 5.2. Command usage discription with options: -------------------------------------------- upgrade [-noreset] [-F] {-bc|-mba|-ipmi|-ump|-ncsi|-m_pn|-ib|-ib_ipv6| -ib_ipv4n6|-l2t|-mfw1|-mfw|-feb|-vpd|-ccm} [-c] [-p] {} [] This command upgrades the firmware or bootcode for the NetXtreme II controller. The specifies the name of the file that contains the appropriate image. The specifies the name of the file to which the current NVRAM contents will be saved. The is a mandatory parameter, but the is an optional parameter. The current NVRAM content will NOT be saved if the is not specified. Use forwardslash instead of backslash when specifying file path. Alternatively you could also use two backslashes in the file path. Use file/directory paths without quotes/spaces. If the upgrade version is same or older than the version in NVRAM, upgrade will be aborted. The -noreset option is to skip the driver restart of the selected NIC after the firmware upgrade is completed. This option is only valid in Command Line Mode. If there an error in upgrading any component of MBI image, upgrade process will be be aborted immediatly. The -F option is to force the upgrade without checking version. OPTION NAME OF FIRMWARE OR BOOT IMAGE -bc bootcode -mfw1 bootcode + NCSI firmware for BCM57712 and above -mfw Upgrade MFW firmware -mba MBA (PXE) code -l2t L2 firmware for BCM5771x adapter -ipmi IPMI management firmware -ump UMP management firmware -ncsi NCSI management firmware -m_pn I/O module file for BCM5771x adapter -ib iSCSI boot driver with IPv4 address support. -ib_ipv6 iSCSI boot driver with IPv6 address support. -ib_ipv4n6 iSCSI boot driver with IPv4 and IPv6 address support. -feb FCoE boot code. -vpd Extended VPD. -ccm CCM firmware. -mbi Monolithic Image. The [-c], [-p] option is valid only when "-ib/-ib_ipv6/-ib_ipv4n6" option is specified. The [-c] option is also valid when "-feb" option is specified. -c upgrade the iSCSI/FCoE configuration along with iSCSI/FCoE boot code. The '-ib', '-ib_ipv6', and '-ib_ipv4n6' will add/ upgrade the iSCSI configuration automatically. The '-feb' will add/upgrade the FCoE configuration automatically. This option is obsolete and no longer necessary. This option does not have effect any more. -p upgrade the iSCSI configuration program along with iSCSI boot code. This option is obsolete and no longer necessary. Note: For E4 controller, the ONLY availabe options are -mba, -mfw, -mbi. reset Reset the selected NIC. This command is only valid in Command Line Mode. -w {} The function enables or disables WOL setting. set to '1' to enable WOL. set to '0' to disable WOL. restorenvram {} [idmatch] [lic] [config [mac]] [preserve [vpd]] This command reads complete NVRAM image from a file and writes the image to NVRAM. Before writing the NVRAM image to adapter, verifications against source NVRAM image will be performed. If any verification failed, the image will not be written to adapter. is the file name of NVRAM image. is a mandatory parameter. Use forwardslash instead of backslash when specifying . Alternatively you could also use two backslashes in the file path. Use file/directory paths without quotes/spaces. 'idmatch' requests the Firmware Upgrade Tool to restore the NVRAM image only if the 4 IDs (vendor_id, device_id, subsystem_vendor_id, subsystem_device_id) in the image file match those in the device. 'lic' means licencing information will be copied from the source image, without this parameter it's preserved. 'config' means configuration area will copy from source image except MAC address. Configuration area includes MAC address and various options. 'mac' applies only when 'config' is specified. When 'mac' is specified, all configuration are copied including MAC address. 'preserve' means all other components will be copied from the source image except for the parameters supplied\r\n" after this command. 'vpd' is applicable with 'preserve' option. When 'vpd' is specified, vpd information of nvram is preserved. dumpnvram {} Dumps the NVRAM contents or MDUMP image to the specified file. if "mdump" option is not specified then dump the entire NVMRAM contents to specified file. is a mandatory parameter. Use forwardslash instead of backslash when specifying . Alternatively you could also use two backslashes in the file path. Use file/directory paths without quotes/spaces. prg {-ib|-ib_ipv6|-ib_ipv4n6|-mba|-ccm} {} [-c] [-p] This command programs NVRAM with the specified firmware image. -ib : iSCSI boot driver with IPv4 address support. -ib_ipv6 : iSCSI boot driver with IPv6 address support. -ib_ipv4n6 : iSCSI boot driver with both IPv4 and IPv6 address support. -mba : MBA firmware -ccm : CCM firmware : a mandatory parameter to specify the input binary file. -c : force to program iSCSI configuration, only valid when used with -ib, -ib_ipv6, or ip_ipv4n6 option. -p : force to program iSCSI configuration utility program, only valid when used with -ib, -ib_ipv6, or ip_ipv4n6 option. Note: 'prg' command only supports selective Marvell adapters. The image file for the 'prg {-ib|-ib_ipv6|-ib_ipv4n6}' command is required to contain ONLY valid iSCSI boot without other firmware directories. crc [-all] {-mbi} {mbi_file} Performs the CRC check to verify the integrity of the NVRAM. -all : Performs CRC check on all the adapters present on the system. -mbi : To selectively perform CRC check on selected adapters : crc check will be performed on adapters supported by MBI and present on system. Above options are only available in cmd line mode. dir [-delete ] Displays a listing of the firmware programmed in NVRAM. Delete the specified in the directory and its firmware from NVRAM. The can be found from 'Image' list using the 'dir' command. The user should use 'cfg' command to disable the management option before removing the management firmware. -all : Displays listing of the firmware in NVRAM for all the adapters present on the system. -mbi : To display listing of the firmwares in NVRAM for selected adapters : dir will be performed on adapters supported by MBI and present on system. Above options are only available in cmd line mode. dev [] is the adapter to be selected as target device cfg [-noreset] {-mac | -lldpmac | -mba | -ipmi | -ump | -wol | -2p5g | -mgmt | -dcbx | -shadow_swim | -sriov_hide_menu | -sriov | -revid_ctl | -vf_per_pf | -vpdv0 | -bar2size | -show [show_option]} This command programs the specified configuration into NVRAM. The -ipmi, -ump, and -mgmt are used to enable/disable the management firmware which can be one of ipmi, ump, or ncsi. Both "-ipmi" and "-ump" are deprecated in favor of the "-mgmt". The user should not enable MGMT option in the absence of the management firmware. The -noreset option is to skip the driver restart of the selected NIC after the 'cfg' operation is completed. This option is only valid in Command Line Mode. -mac : is a 12-digit HEX MAC address, e.g. 0010181a2b3c. This option is valid for BCM57712 or later NICs. -lldpmac : is a 12-digit HEX MAC address, e.g. 0010181a2b3c. This option is valid for 579xx and QL4xxxx NICs. -mba : set to '1' to enable mba firmware. set to '0' to disable mba firmware. This option is valid for BCM57712 and 578xx NICs. -ipmi : set to '1' to enable management firmware. set to '0' to disable management firmware. This option is valid for BCM57712 NICs. -ump : set to '1' to enable management firmware. set to '0' to disable management firmware. This option is valid for BCM57712 NICs. -mgmt : set to '1' to enable management firmware. set to '0' to disable management firmware. This option is valid for BCM57712 NICs. -wol : set to '1' to enable wol feature. set to '0' to disable wol feature. -2p5g : set to '1' to enable 2.5G SERDES support. set to '0' to disable 2.5G SERDES support. This option is valid for BCM5706 NIC. -dcbx : For BCM57712 and 578xx NICs: set to '1' to enable DCBX functionality. set to '0' to disable DCBX functionality. For 579xx and QL4xxxx NICs: set to '0' to disable DCBX functionality. set to '1' to select IEEE mode. set to '2' to select CEE mode. set to '3' to select Dynamic mode. -shadow_swim: set to '1' to enable Shadow SWIM functionality. set to '0' to disable Shadow SWIM functionality. This option is valid for BCM57712 or 578xx. -sriov_hide_menu: set to '1' to hide SRIOV menu. set to '0' to show SRIOV menu. This option is valid for BCM57712 and 578xx NICs. -sriov : set to '1' to enable SRIOV. set to '0' to disable SRIOV. This option is valid for BCM57712 or later NIC. -vf_per_pf : set the number of VF per PF. This option is valid for BCM57712 and 578xx NICs. -vpdv0 : set to VPD V0 tag. should be in x.y.z format. This option is valid for BCM57712 or later NIC. -revid_ctl : set to '0' to preserve revision Id. set to '1' for actual revision Id. set to '2' to force B0. set to '3' to force B1. This option is valid for 578xx NIC. -rdma_enablement : set to '0' to disable RDMA. set to '1' to enable RoCE. set to '2' to enable iWarp. set to '3' to enable both RoCE and iWarp. This option is valid for 579xx and QL4xxxx NICs. -roce_priority_mode : set from '0' to '7' to set ROCE priority mode. This option is valid for 579xx and QL4xxxx NICs. -mba_boot_protocol : set to '0' for PXE boot. set to '3' for iSCSI boot. set to '4' for FCoE boot. set to '7' for None. This option is valid for 579xx and QL4xxxx NICs. -bar2size: set as per following table: For 579xx based adapters: 0 (Disabled), 1 (64K), 2 (128K), 3 (256K), 4 (512K), 5 (1M), 6 (2M), 7 (4M), 8 (8M), 9 (16M), 10 (32M), 11 (64M), 12 (128M), 13 (256M), 14(512M), 15(1G) For QL4xxxx based adapters: 0 (Disabled), 5 (1M), 6 (2M), 7 (4M), 8 (8M), 9 (16M), 10 (32M), 11 (64M), 12 (128M), 13 (256M), 14 (512M), 15 (1G)\r\n" This option is valid for 579xx and QL4xxxx NICs. -show : show the settings of current configuration. If 'show_option' is specified, it will show the setting of the specified option, 'sriov' will display whether SRIOV is enabled or disabled 'vf_per_pf' will display VF per PF setting 'manuf_kit_ver' will display manufacture kit version 'manuf_date' will display manufacture date phy {-ver | -upg } This command can display the firmware version of external PHY or upgrade the PHY firmware. After upgrading the PHY firmware, a system reboot is required for the new PHY firmware to become effective. -w {} The function enables or disables WOL setting. set to '1' to enable WOL. set to '0' to disable WOL. factory_defaults Reset the selected NIC NVM_CFG1 to factory defaults settings. This command is only valid for E4 adapters. Limitations of factory_defaults: - In the interactive mode even though factory_defaults is percieved to be executed on port basis but the changes will be reflected on all the ports. - The cmd can’t handle user changes on options which changed their type. E.g. if a user made a change on an option that was changed from per-port to per-function, then a new per-function option will be created in the new NVM_CFG1 (the pre-port option is obsolete). The new per-function option will be set to its default value and not to the user’s change value of the obsolete per-port option, since the tool can’t relate this option to the old obsolete option. update_cfg [.bin .txt] This command updates DEFAULT_CFG and NVM_CFG firmware in NVMRAM The command require both nvm_cfg image (in binary format) and meta image (in txt format) to update NVM_CFG and DEFAULT_CFG in NVRAM. This command is only valid for E4 adapters. - In the interactive mode even though update_cfg is perceived to be executed on port basis but the changes will be reflected on all the ports. - While upgrading NVM_CFG, the cmd automatically takes care of the options changed by the user. info This command displays the following general information. Property Name : Description/Comment ------------- --------------------- Temperature : Displays temperature in Celsius for E3 and E4 adapters. Active SWIM : Displays current active SWIM group for E3 adapters only. xml {xml_file_name} {mbi_file_name} This cmd will read the firmware versions either from NVRAM or MBI file and export to XML file -xml_file_name : Name of the XML file to be created -mbi_file_name : IF valid MBI file is passed then firmware versions are read from MBI file and exported to XML ELSE firmware versions are read from NVRAM and exported to XML vlant {[-reset] [-delete]} If VLAN table is not present in NVRAM then this cmd will create an empty VLAN Table in NVRAM. This command is only available for E3 adapters. -reset : clears all the entries in VLAN table -delete : deletes VLAN table from NVRAM 6. Exit Codes: ============== ///////////////////////////////////////////////////////////////////////// // Return codes #define FWUPG_OK 0 // Upgrade firmware OK #define FWUPG_QUIT 1 // Quit program #define FWUPG_PARAM_ERROR 2 // Not correct parameters #define FWUPG_NOT_CORRECT_TARGET 3 // Not applicable to this device. #define FWUPG_CANNOT_READ_NVRAM 4 // Cannot read NVRAM #define FWUPG_FAILED_GET_NVRAM_SIZE 5 // Cannot get NVRAM size #define FWUPG_CANNOT_GET_HANDLE 6 // Cannot get NIC handle #define FWUPG_ADAPTER_NOT_FOUND 7 // Adapter not found #define FWUPG_CANNOT_LOCK_ADAPTER 8 // Cannot lock adapter #define FWUPG_FAILED_GET_PXE_INFO 9 // Failed to get PXE // information #define FWUPG_FAILED_CREATE_NVRAM_IMAGE_FILE 10 // Failed to create NVRAM // image file #define FWUPG_FAILED_WRITE_NVRAM_IMAGE_FILE 11 // Failed to write to // NVRAM image file #define FWUPG_GET_CLOSE_EVENT 12 // Get close event #define FWUPG_FAILED_READ_NVRAM_FILE 13 // Failed to read NVRAM // image file #define FWUPG_INIT_FAILED 14 // Initialization failed #define FWUPG_UNSUPPORTED_QLMAPI_VER 15 // QLMAPI is too old #define FWUPG_NIC_NOT_SUPPORTED 16 // NIC is not supported #define FWUPG_UNKNOWN_COMMAND 17 // Unknown command #define FWUPG_NVRAM_WRITE_FAILED 18 // NVRAM update failed #define FWUPG_WRONG_NVRAM_FILE_SIZE 19 // NVRAM image file size #define FWUPG_NVRAM_IMAGE_CHKSUM_FAILED 20 // NVRAM image file // checksum failed #define FWUPG_NVRAM_CHKSUM_FAILED 21 // NVRAM crc or checksum failed #define FWUPG_NVRAM_IMAGE_FILE_DEVID_MISMATCH 22 // device information or media // type in NVRAM image file // does not match NIC #define FWUPG_ASF_NOT_SUPPORTED_BY_BOOTCODE 23 // ASF is not supported by // the bootcode firmware #define FWUPG_ASF_NOT_SUPPORTED_BY_NIC 24 // ASF is not supported by // the NIC hardware #define FWUPG_DIR_FULL 25 // No NVRAM directory entry // available #define FWUPG_INVALID_NVRAM_FILE 26 // Incorrect NVRAM file // format #define FWUPG_NVRAM_FULL 27 // not enough NVRAM space #define FWUPG_DIR_NOT_SUPPORTED 28 // Directory is not // supported by bootcode #define FWUPG_NVRAM_CORRUPTED 29 // NVRAM corrupted #define FWUPG_DIR_NOT_FOUND 30 // a directory entry is // not found #define FWUPG_DIR_UPDATE_FAILED 31 // Update NVRAM directory // failed #define FWUPG_DIR_FOUND 32 // a directory entry is // found #define FWUPG_CANNOT_READ_MEM 33 // Cannot read NIC register // or memory #define FWUPG_MALLOC_ERROR 34 // memory allocation error #define FWUPG_FW_IMAGE_WRONG_VERSION 35 // wrong version of // firmware image #define FWUPG_FW_IMAGE_INVALID_ASF 36 // invalid asf image #define FWUPG_READ_NIC_ASF_TABLE_FAILED 37 // failed to read ASF table // from NIC #define FWUPG_UNSUPPORTED_NIC_ASF_TABLE 38 // version of ASF table on // NIC is not supported #define FWUPG_REBOOT_FAILED 39 // unable to reboot machine #define FWUPG_NOT_SUPPORTED_DRIVER 40 // the version of driver is // too old #define FWUPG_DRIVER_NOT_LOADED 41 // driver is not loaded #define FWUPG_FILE_TOO_BIG 42 // file is too big #define FWUPG_CANNOT_WRITE_MEM 43 // Cannot write NIC // register or memory #define FWUPG_MGMT_FW_NOT_FOUND 44 // Cannot find management // firmware #define FWUPG_UMP_FOUND 45 // UMP firmware exist #define FWUPG_FAILED_TO_GET_VERINFO 46 // failed to get module // version info #define FWUPG_ERR_ENDOFFILE 47 // unexpected end of file // encountered. #define FWUPG_INVALID_MEDIUM_TYPE 48 // The chip has an unknown // medium type. Neither the // board is copper nor // serdes. #define FWUPG_INVALID_OFFSET 49 // invalid NVRAM offset. #define FWUPG_FILE_ALREADY_EXISTS 50 // output file already // exists. #define FWUPG_NON_SELFBOOT_IMAGE 51 // Not a selfboot image. #define FWUPG_BAD_MAGIC_VALUE 52 // Bad magic value #define FWUPG_BAD_PARITY_VALUE 53 // Bad parity value #define FWUPG_BAD_VPD_CHKSUM 54 // Bad VPD checksum #define FWUPG_BAD_CHIP_REV 55 // Bad chip revision #define FWUPG_VPD_DATA_MISSING 56 // VPD data missing #define FWUPG_NO_SELFBOOT 57 // target not self boot // capable #define FWUPG_LEGACY_TO_SELFBOOT 58 // Cannot upgrade firmware // from legacy to selfboot. #define FWUPG_ZERO_SELFBOOT 59 // upgfrm does not support // Format 0 Selfboot image // upgrade #define FWUPG_UNSUPPORTED_FEATURE 60 // Feature not supported. #define FWUPG_DIAG_FAILURE 61 // diag failure #define FWUPG_NO_BRCM_ADAPTER 62 // No Marvell network // adapter found! #define FWUPG_FILE_DOES_NOT_EXIST 63 // File does not exist #define FWUPG_UMP_NOT_SUPPORTED 64 // ump not supported #define FWUPG_MISSING_UMP 65 // UMP config firmware is // not loaded in NVRAM #define FWUPG_CFG_VER_MISMATCH 66 // UMP config version // mismatch #define FWUPG_INVALID_ISCSI_IMAGE 67 // invalid ISCSI image #define FWUPG_INVALID_UMP_IMAGE 68 // invalid UMP image #define FWUPG_INVALID_MBA_IMAGE 69 // invalid MBA image #define FWUPG_PRG_FAILED 70 // programming NVRAM failed #define FWUPG_BOOTSTRAP_UPDATE_FAILED 71 // bootstrap update failed #define FWUPG_CMD_ALL_NOT_SUPPORTED 72 // '-all' option is not // supported in this context #define FWUPG_UNSUPPORTED_PLATFORM 73 // Feature not supported on // this platform #define FWUPG_MAC_PARAM_ERROR 74 // Cannot override MAC on // multiple NICs. #define FWUPG_INVALID_BOOTCODE 75 // Not a valid bootcode file #define FWUPG_INVALID_IPMI_FILE 76 // Not a valid ipmi file #define FWUPG_INVALID_DUMP 77 // Invalid dump file. #define FWUPG_INVALID_FORMAT 78 // Invalid image/file format. #define FWUPG_DIR_ENTRY_MISMATCH 80 // Mismatch in directory entries #define FWUPG_MBA_MISMATCH 81 // MBA directory entry mismatch #define FWUPG_UMP_MISMATCH 82 // UMP directory entry mismatch #define FWUPG_IPMI_MISMATCH 83 // IPMI directory entry mismatch #define FWUPG_ISCSI_MISMATCH 84 // ISCSI directory entry mismatch #define FWUPG_ASF_MISMATCH 85 // ASF directory entry mismatch #define FWUPG_ISCSI_NOT_SUPPORTED 86 // ISCSI is not supported. #define FWUPG_SPECIAL_UPGRADE_REQUIRED 87 // Special upgrade is required. #define FWUPG_MISSING_CMD 88 // No valid command was specified. #define FWUPG_RESERVE1 89 // Reserved message holder. #define FWUPG_RESERVE2 90 // Reserved message holder. #define FWUPG_MISSING_ASF 91 // ASF config firmware is // not loaded in NVRAM #define FWUPG_MISSING_IPMI 92 // IPMI config firmware is // not loaded in NVRAM #define FWUPG_MISSING_MBA 93 // MBA config firmware is // not loaded in NVRAM #define FWUPG_NO_DEV_ID 94 // No device ID in NVRAM image file #define FWUPG_SYSTEM_REBOOT 95 // System Reboot required #define FWUPG_INVALID_NCSI_IMAGE 96 // invalid NCSI image #define FWUPG_MISSING_MGMT_FW 97 // Missing management firmware in NVRAM #define FWUPG_INVALID_PHY_IMAGE 98 // Invalid PHY firmware file. #define FWUPG_DRIVER_COMMUNICATE_ERROR 99 // Error in communicating to driver #define FWUPG_FW_EXISTING_IN_NVRAM 100 // The firmware to be programmed is existing in NVRAM #define FWUPG_FAIL_TO_GET_MAC_ADDR 101 // Failed to read MAC ADDR from the file #define FWUPG_MGMTFW_NOT_SUPPORTED_BY_NIC 102 // Management firmware is not supported by the NIC #define FWUPG_IMAGE_FILE_CRC_ERROR 103 // Image file CRC error #define FWUPG_IMAGE_FILE_SIG_ERROR 103 // Image file RSA signature error #define FWUPG_INVALID_L2T_IMAGE 104 // invalid L2T image #define FWUPG_CMD_ABORTED 105 // Command aborted #define FWUPG_PHY_FW_CORRUPTED 106 // PHY firmware corrupted #define FWUPG_UNKNOWN_EXT_PHY 107 // Unknown external PHY #define FWUPG_CANNOT_UPGRADE_TO_DIFF_FORMAT 108 // Can't upgrade to a different format #define FWUPG_CANNOT_READ_OTP 109 // Can't read to OTP #define FWUPG_CANNOT_WRITE_OTP 110 // Can't write to OTP #define FWUPG_FAIL_TO_CREATE_EXT_DIR_ENTRY 111 // Failed to create Extended Directory entry #define FWUPG_INVALID_BOOTCODE_IMAGE 112 // invalid Bootcode image #define FWUPG_INVALID_IO_MODULE_IMAGE 113 // Invalid I/O Module file. #define FWUPG_NCSI_MISMATCH 114 // NCSI directory entry mismatch #define FWUPG_INVALID_FCOE_IMAGE 115 // Invalid FCoE image #define FWUPG_FCOE_MISMATCH 116 // FCOE directory entry mismatch #define FWUPG_32BIT_APP_IN_WOW64 117 // Can't run 32-bit application in 64-bit platform. #define FWUPG_IMAGE_FILE_SIG_ERROR 118 // Image file RSA signature error #define FWUPG_32BIT_APP_IN_WOW64 119 // Can't run 32-bit application in 64-bit platform. #define FWUPG_INVALID_MFW_IMAGE 120 // Invalid MFW image #define FWUPG_INVALID_CCM_IMAGE 121 // invalid CCM image #define FWUPG_CCM_NOT_SUPPORTED 122 // CCM is not supported. #define FWUPG_CCM_MISMATCH 123 // CCM directory entry mismatch #define FWUPG_DIAG_TEST_NOT_SUPPORTED 124 // Specified Diagnostic tests are not supported #define FWUPG_DIAG_TEST_FAILED 125 // Diagnostic test failed #define FWUPG_INVALID_MBI_IMAGE 126 // invalid MBI image #define FWUPG_INVALID_MBI_LENGTH 127 // MBI length mismatch #define FWUPG_REGISTER_TEST_FAILED 128 // Register test failed #define FWUPG_MII_REGISTER_TEST_FAILED 129 // MII registers test failed #define FWUPG_NVRAM_TEST_FAILED 130 // NVRAM test failed #define FWUPG_MEMORY_TEST_FAILED 131 // Memory test failed #define FWUPG_TEST_INTERRUPT_FAILED 132 // Interrupt test failed #define FWUPG_CPU_TEST_FAILED 133 // CPU test failed #define FWUPG_MAC_LOOPBACK_TEST_FAILED 134 // Loopback test failed #define FWUPG_PHY_LOOPBACK_TEST_FAILED 135 // Loopback test failed #define FWUPG_LED_TEST_FAILED 136 // LED test failed #define FWUPG_INVALID_HW_INIT_IMAGE 137 // Not a valid INIT_HW file #define FWUPG_RESTORED_NIC_BACK_TO_NORMAl_STATE 138 // Restored the NIC back to normal state in the event of failed or partial MBI firware update or CRC checksum failed. #define FWUPG_SHA256_AUTH_FAILED_ON_NVM_DUMP 139 // SHA256 authentication failed against nvm dump before restoring back to normal state. #define FWUPG_RESTORE_FAILED 140 // Failed to restore the NIC back to normal state. #define FWUPG_FAILED_GET_CURRENT_TEMPERATURE 141 // Failed to get the current temperature of the NIC. #define FWUPG_BLOCKED_AHALOM_FROM_CNA_TO_NIC 142 // Block MBI downgrade from CNA (HP12.10) to NIC (HP12.00) for HP ALOM adapters #define FWUPG_META_PARSEING_ERROR 143 // Unable to parse META file #define FWUPG_INVALID_OPTION 144 // This option is not a valid option #define FWUPG_UNSUPPORTED_OPTION 145 // This option is not available on this adapter #define FWUPG_INVALID_OPTION_VALUE 146 // Supplied value for this NVM_CFG1 option is invalid #define FWUPG_NO_DRVR_NVRAM_ACCESS 147 // On Linux platform only Firmware upgrade is supported with inbox driver, other NVM operations like dir,crc etc. are not supported. #define FWUPG_READ_CONFIG_FAILED 148 // NVRAM read configuration failed. #define FWUPG_DRIVER_NOT_INSTALLED 149 // Intermediate or miniport driver not installed. #define FWUPG_READ_EEPROM_FAILED 150 // EPROM read failed. #define FWUPG_WRITE_EEPROM_FAILED 151 // EPROM write failed. #define FWUPG_NO_READ_EEPROM_PRIV 152 // No privilege to read EEPROM. #define FWUPG_NO_WRITE_EEPROM_PRIV 153 // No privilege to read EEPROM. #define FWUPG_NO_DIAG_ACCESS_RIGHT 154 // Application did not call QLmapiInitDiag() with successful return. #define FWUPG_DATA_NOT_FOUND 155 // Requested data not found. #define FWUPG_READ_REGISTER_FAILED 156 // read register failed. #define FWUPG_UNSUPPORTED_IOCTL 157 // unsupported IOCTL. #define FWUPG_DEVIO_CALL_FAILED 158 // DeviceIoControl() failed. #define FWUPG_FILE_OPEN_FAILED 159 // file open failed. #define FWUPG_UPGRADE_PHY_FW_ERROR 160 // Failed to upgrade PHY firmware. #define FWUPG_INTERNAL_DATA_ERROR 161 // internal data error. #define FWUPG_DEVICE_IS_NOT_UP 162 // The device is not up and running. #define FWUPG_LOW_SYSTEM_RESOURCES 163 // IOCTL failed due to low system resources. #define FWUPG_MBI_IMAGE_CHKSUM_FAILED 164 // MBI image file checksum failure #define FWUPG_INVALID_VPD_IMAGE 165 // Invalid VPD image in NVM 7. Examples: ============== Note: The 'restorenvram' and 'upgrade' commands shall perform successfully for the specified adapter meeting ALL the following conditions: 1) The device information of the adapter matches that in the image file. 2) The adapter currently supports the requested target firmware. 7.1 Command Line Mode Examples: ******************************* 'lnxfwnx2' will enter interactive mode. 'lnxfwnx2 upgrade -bc /tmp/new_bootcode /tmp/oldBoot' will upgrade bootcode for the ONLY qualified adapter found. The adapter parameter can be omitted if ONLY ONE qualified adapter is found. 'lnxfwnx2 001018001199 upgrade -mba b57mmbae.nic /backup/oldPXE.bin' will upgrade PXE for the adapter with MAC 00:10:18:00:11:99. 'lnxfwnx2 001018001199 upgrade -F -ipmi impi55 old_image' will upgrade IPMI for the adapter with the specified MAC. 'lnxfwnx2 -all upgrade -ipmi pt5706h6.20 /backup/saveIPMI' will upgrade for all the qualified BRCM 5706 adapters that currently support IPMI. When multiple applicable adapters are present, the MAC address of the adapter is appended to the backup NVRAM image parameter filename 'lnxfwnx2 -all upgrade -F -ump /tmp/NtX2Ump.bin backupUMP' will force a downgrade for all the BRCM 5706/5708 adapters with existing UMP support. When multiple applicable adapters are present, the MAC address of the adapter is appended to the backup NVRAM image parameter filename. 'lnxfwnx2 -all dir -mbi ql_mbi_7148.bin' will display the listing of firmwares in NVMRAM for all the adapters that are supported in MBI and are currently present in the system. 'lnxfwnx2 -all dir' will display the listing of firmware in NVMRAM for all the adapters that currently present in the system. 'lnxfwnx2 -all crc -mbi ql_mbi_7148.bin' will perform the CRC check on all the adapters that are supported in MBI and are currently present in the system. 'lnxfwnx2 -all crc' will perform CRC check on all the adapters that are currently present in the system. 'lnxfwnx2 -all restorenvram "/tmp/backup.bin" config' will read a complete NVRAM image from file 'backup.bin' and write the image to NVRAM along with its configurations. If 'config' parameter is left out, only the image is written. This will only restore NVRAM images to those with matching FW, with the exception to variations in version numbers. 'lnxfwnx2 0010181a1b1c cfg -mac 0010189d9e9f' will configure the selected adapter whose current MAC address is 00:10:18:1a:1b:1c to be the new MAC address 00:10:18:9d:9e:9f. 'lnxfwnx2 0010189a9b9c cfg -ipmi 1' will enable ipmi firmware if the ipmi firmware is present in the selected adapter whose current MAC address is 00:10:18:9a:9b:9c. 'lnxfwnx2 0010189a9b9c reset' will reset the selected adapter whose current MAC address is 00:10:18:9a:9b:9c. 'lnxfwnx2 xml xml_name' will read the firmware versions from NVMRAM and export to XML. 'lnxfwnx2 xml xml_name mbi_file' will read the firmware versions from given MBI file and export to XML. 7.2 Interactive Mode Examples: ******************************* 'help' will display a list and descriptions of available commands. 'q' will exit the utility. 'dev' will display a list of upgradeable devices. 'dev 0' will select device 0. 'dir' will display a listing of the firmware programmed in NVRAM. 'crc' will check the integrity of the NVRAM CRC. 'dumpnvram /backup.bin' saves the dump file to the specified file. 'restorenvram "/tmp_dir/backup.bin" config mac' will include all configurations including the MAC address. In order to verify the MAC address was configured, exiting the program will be necessary followed by either disabling and enabling the adapter or rebooting the system. 'upgrade -bc ee5706c3.19 backup5706.bin' will upgrade the boot code for a BRCM 5706 adapter. 'version' will display the version of Firmware Upgrade utility. '-w 1' will enable the WOL setting on the current adapter. 'cfg -mac 0010181a2b3c" will configure MAC address for the selected qualified adapter. 'cfg -ump 0' will disable ump firmware if the ump firmware is present in the selected adapter. 'cfg -show sriov' will display current setting of SRIOV in the selected adapter. 'cfg -show vf_per_pf' will display current setting of number of VF per PF in the selected adapter. 8. Known Limitations: ===================== 1. The read/write NVRAM operations and all other commands requiring NVRAM access are unable to perform correctly on Red Hat EL3.0 with kernel versions prior to 2.4.23. Due to a limitation in kernel versions prior to 2.4.23, older Linux distributions including Red Hat EL 3.0 may cause "firmware upgrade tool" not function with an error code 58. This problem is seen on 32-bit and 64-bit platforms with 57xx family NICs loaded with tg3 driver (version >= 3.37) and 5706 family NICs loaded with bnx2 driver. 2. Known issue for BCM5709-based adapter: ************************************** After this software is used to upgrade the firmware (including Bootcode, IPMI, UMP, iSCSI boot... ) in the NVRAM, the system has to be rebooted for the new firmware to become effective. The commands that require a reboot after exiting the software are "upgrade", "prg", and "restorenvram". 3. Known issue for E3 adapters running inbox drivers: ************************************** Some of the most recent kernels (for example in SLES15/SLES15.1) has a security feature to prevent user space access to physical memory above 1MB (IIRC). Due to which "firmmare upgrade tool" may not function properly. There are couple of workaround: 1. At boot time: Add iomem=relaxed in kernel command line during boot time. 2. update grub.cfg file: 2.1 add iomem=relaxed at the end for GRUB_CMDLINE_LINUX_DEFAULT parameter in file /etc/default/grub.cfg (based on the distro, location of grub.cfg may vary) 2.2 run cmd grub2-mkconfig -o /boot/grub2/grub.cfg 2.3 reboot the server to take effect 3. To avoid the issue or extra kernel param use the latest OOB drivers. Note: "iomem=relaxed" workaround will not work if Secure Boot is enabled. Disable Secure Boot before updating the firmware when using "iomem=relaxed" workaround. 4. "Grc Attn" and "qed_int_attentions" messages are observed while updating firmware on SLES15 Issue is seen if qede driver 8.24.xx is installed on the SLES15 system. The issue is seen when registers are accessed using ELBI method. To resolve this issue please install updated out-of-box qede driver 8.37.xx or above on SLES15 where registers are accessed using debugfs interface. 9. Third Party Software License: ================================ Portions of this software contain third party code subject to the following conditions: OpenSSL: -------- /* ==================================================================== * Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ Original SSLeay License: ------------------------ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ Tcl/Tk License Terms: --------------------- /* This software is copyrighted by the Regents of the University of California, * Sun Microsystems, Inc., Scriptics Corporation, and other parties. The following * terms apply to all files associated with the software unless explicitly disclaimed * in individual files. * * The authors hereby grant permission to use, copy, modify, distribute, and license * this software and its documentation for any purpose, provided that existing copyright * notices are retained in all copies and that this notice is included verbatim in any * distributions. No written agreement, license, or royalty fee is required for any of * the authorized uses. Modifications to this software may be copyrighted by their authors * and need not follow the licensing terms described here, provided that the new terms * are clearly indicated on the first page of each file where they apply. * * IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS * HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" * BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * GOVERNMENT USE: If you are acquiring this software on behalf of the U.S. government, * the Government shall have only "Restricted Rights" in the software and related * documentation as defined in the Federal Acquisition Regulations (FARs) in Clause * 52.227.19 (c) (2). If you are acquiring the software on behalf of the Department of Defense, * the software shall be classified as "Commercial Computer Software" and the Government * shall have only "Restricted Rights" as defined in Clause 252.227-7013 (c) (1) of DFARs. * Notwithstanding the foregoing, the authors grant the U.S. Government and others acting * in its behalf permission to use and distribute the software in accordance with the terms * specified in this license. */ License of Libedit library: --------------------------- /*- * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Christos Zoulas of Cornell University. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */