@ -778,15 +778,15 @@ qlcnic_has_mn(struct qlcnic_adapter *adapter)
static
struct uni_table_desc * qlcnic_get_table_desc ( const u8 * unirom , int section )
{
u32 i ;
u32 i , entries ;
struct uni_table_desc * directory = ( struct uni_table_desc * ) & unirom [ 0 ] ;
__le32 entries = cpu_to_ le32( directory - > num_entries ) ;
entries = le32_to_cpu ( directory - > num_entries ) ;
for ( i = 0 ; i < entries ; i + + ) {
__le 32 offs = cpu_to_ le32( directory - > findex ) +
( i * cpu_to_le32 ( directory - > entry_size ) ) ;
__le 32 tab_type = cpu_to_ le32( * ( ( u 32 * ) & unirom [ offs ] + 8 ) ) ;
u 32 offs = le32_to_cpu ( directory - > findex ) +
i * le32_to_cpu ( directory - > entry_size ) ;
u 32 tab_type = le32_to_cpu ( * ( ( __le 32 * ) & unirom [ offs ] + 8 ) ) ;
if ( tab_type = = section )
return ( struct uni_table_desc * ) & unirom [ offs ] ;
@ -802,17 +802,16 @@ qlcnic_validate_header(struct qlcnic_adapter *adapter)
{
const u8 * unirom = adapter - > fw - > data ;
struct uni_table_desc * directory = ( struct uni_table_desc * ) & unirom [ 0 ] ;
__le32 fw_file_size = adapter - > fw - > size ;
__le32 entries ;
__le32 entry_size ;
__le32 tab_size ;
u32 entries , entry_size , tab_size , fw_file_size ;
fw_file_size = adapter - > fw - > size ;
if ( fw_file_size < FILEHEADER_SIZE )
return - EINVAL ;
entries = cpu_to_ le32( directory - > num_entries ) ;
entry_size = cpu_to_ le32( directory - > entry_size ) ;
tab_size = cpu_to_ le32( directory - > findex ) + ( entries * entry_size ) ;
entries = le32_to_cpu ( directory - > num_entries ) ;
entry_size = le32_to_cpu ( directory - > entry_size ) ;
tab_size = le32_to_cpu ( directory - > findex ) + ( entries * entry_size ) ;
if ( fw_file_size < tab_size )
return - EINVAL ;
@ -825,29 +824,29 @@ qlcnic_validate_bootld(struct qlcnic_adapter *adapter)
{
struct uni_table_desc * tab_desc ;
struct uni_data_desc * descr ;
u32 offs , tab_size , data_size , idx ;
const u8 * unirom = adapter - > fw - > data ;
int idx = cpu_to_le32 ( * ( ( int * ) & unirom [ adapter - > file_prd_off ] +
QLCNIC_UNI_BOOTLD_IDX_OFF ) ) ;
__le32 offs ;
__le32 tab_size ;
__le32 data_size ;
__le32 temp ;
temp = * ( ( __le32 * ) & unirom [ adapter - > file_prd_off ] +
QLCNIC_UNI_BOOTLD_IDX_OFF ) ;
idx = le32_to_cpu ( temp ) ;
tab_desc = qlcnic_get_table_desc ( unirom , QLCNIC_UNI_DIR_SECT_BOOTLD ) ;
if ( ! tab_desc )
return - EINVAL ;
tab_size = cpu_to_ le32( tab_desc - > findex ) +
( cpu_to_le32 ( tab_desc - > entry_size ) * ( idx + 1 ) ) ;
tab_size = le32_to_cpu ( tab_desc - > findex ) +
le32_to_cpu ( tab_desc - > entry_size ) * ( idx + 1 ) ;
if ( adapter - > fw - > size < tab_size )
return - EINVAL ;
offs = cpu_to_ le32( tab_desc - > findex ) +
( cpu_to_le32 ( tab_desc - > entry_size ) * ( idx ) ) ;
offs = le32_to_cpu ( tab_desc - > findex ) +
le32_to_cpu ( tab_desc - > entry_size ) * idx ;
descr = ( struct uni_data_desc * ) & unirom [ offs ] ;
data_size = cpu_to_ le32( descr - > findex ) + cpu_to_ le32( descr - > size ) ;
data_size = le32_to_cpu ( descr - > findex ) + le32_to_cpu ( descr - > size ) ;
if ( adapter - > fw - > size < data_size )
return - EINVAL ;
@ -861,27 +860,27 @@ qlcnic_validate_fw(struct qlcnic_adapter *adapter)
struct uni_table_desc * tab_desc ;
struct uni_data_desc * descr ;
const u8 * unirom = adapter - > fw - > data ;
int idx = cpu_to_le32 ( * ( ( int * ) & unirom [ adapter - > file_prd_off ] +
QLCNIC_UNI_FIRMWARE_IDX_OFF ) ) ;
__le32 offs ;
__le32 tab_size ;
__le32 data_size ;
u32 offs , tab_size , data_size , idx ;
__le32 temp ;
temp = * ( ( __le32 * ) & unirom [ adapter - > file_prd_off ] +
QLCNIC_UNI_FIRMWARE_IDX_OFF ) ;
idx = le32_to_cpu ( temp ) ;
tab_desc = qlcnic_get_table_desc ( unirom , QLCNIC_UNI_DIR_SECT_FW ) ;
if ( ! tab_desc )
return - EINVAL ;
tab_size = cpu_to_ le32( tab_desc - > findex ) +
( cpu_to_le32 ( tab_desc - > entry_size ) * ( idx + 1 ) ) ;
tab_size = le32_to_cpu ( tab_desc - > findex ) +
le32_to_cpu ( tab_desc - > entry_size ) * ( idx + 1 ) ;
if ( adapter - > fw - > size < tab_size )
return - EINVAL ;
offs = cpu_to_ le32( tab_desc - > findex ) +
( cpu_to_le32 ( tab_desc - > entry_size ) * ( idx ) ) ;
offs = le32_to_cpu ( tab_desc - > findex ) +
le32_to_cpu ( tab_desc - > entry_size ) * idx ;
descr = ( struct uni_data_desc * ) & unirom [ offs ] ;
data_size = cpu_to_ le32( descr - > findex ) + cpu_to_ le32( descr - > size ) ;
data_size = le32_to_cpu ( descr - > findex ) + le32_to_cpu ( descr - > size ) ;
if ( adapter - > fw - > size < data_size )
return - EINVAL ;
@ -895,19 +894,17 @@ qlcnic_validate_product_offs(struct qlcnic_adapter *adapter)
struct uni_table_desc * ptab_descr ;
const u8 * unirom = adapter - > fw - > data ;
int mn_present = qlcnic_has_mn ( adapter ) ;
__le32 entries ;
__le32 entry_size ;
__le32 tab_size ;
u32 i ;
u32 entries , entry_size , tab_size , i ;
__le32 temp ;
ptab_descr = qlcnic_get_table_desc ( unirom ,
QLCNIC_UNI_DIR_SECT_PRODUCT_TBL ) ;
if ( ! ptab_descr )
return - EINVAL ;
entries = cpu_to_ le32( ptab_descr - > num_entries ) ;
entry_size = cpu_to_ le32( ptab_descr - > entry_size ) ;
tab_size = cpu_to_ le32( ptab_descr - > findex ) + ( entries * entry_size ) ;
entries = le32_to_cpu ( ptab_descr - > num_entries ) ;
entry_size = le32_to_cpu ( ptab_descr - > entry_size ) ;
tab_size = le32_to_cpu ( ptab_descr - > findex ) + ( entries * entry_size ) ;
if ( adapter - > fw - > size < tab_size )
return - EINVAL ;
@ -915,16 +912,16 @@ qlcnic_validate_product_offs(struct qlcnic_adapter *adapter)
nomn :
for ( i = 0 ; i < entries ; i + + ) {
__le 32 flags , file_chiprev , offs ;
u 32 flags , file_chiprev , offs ;
u8 chiprev = adapter - > ahw - > revision_id ;
u32 flagbit ;
offs = cpu_to_ le32( ptab_descr - > findex ) +
( i * cpu_to_le32 ( ptab_descr - > entry_size ) ) ;
flags = cpu_to_le32 ( * ( ( int * ) & unirom [ offs ] +
QLCNIC_UNI_FLAGS_OFF ) ) ;
file_chiprev = cpu_to_le32 ( * ( ( int * ) & unirom [ offs ] +
QLCNIC_UNI_CHIP_REV_OFF ) ) ;
offs = le32_to_cpu ( ptab_descr - > findex ) +
i * le32_to_cpu ( ptab_descr - > entry_size ) ;
temp = * ( ( __le32 * ) & unirom [ offs ] + QLCNIC_UNI_FLAGS_OFF ) ;
flags = le32_to_cpu ( temp ) ;
temp = * ( ( __le32 * ) & unirom [ offs ] + QLCNIC_UNI_CHIP_REV_OFF ) ;
file_chiprev = le32_to_cpu ( temp ) ;
flagbit = mn_present ? 1 : 2 ;
@ -976,18 +973,20 @@ struct uni_data_desc *qlcnic_get_data_desc(struct qlcnic_adapter *adapter,
u32 section , u32 idx_offset )
{
const u8 * unirom = adapter - > fw - > data ;
int idx = cpu_to_le32 ( * ( ( int * ) & unirom [ adapter - > file_prd_off ] +
idx_offset ) ) ;
struct uni_table_desc * tab_desc ;
__le32 offs ;
u32 offs , idx ;
__le32 temp ;
temp = * ( ( __le32 * ) & unirom [ adapter - > file_prd_off ] + idx_offset ) ;
idx = le32_to_cpu ( temp ) ;
tab_desc = qlcnic_get_table_desc ( unirom , section ) ;
if ( tab_desc = = NULL )
return NULL ;
offs = cpu_to_ le32( tab_desc - > findex ) +
( cpu_to_le32 ( tab_desc - > entry_size ) * idx ) ;
offs = le32_to_cpu ( tab_desc - > findex ) +
le32_to_cpu ( tab_desc - > entry_size ) * idx ;
return ( struct uni_data_desc * ) & unirom [ offs ] ;
}
@ -996,11 +995,13 @@ static u8 *
qlcnic_get_bootld_offs ( struct qlcnic_adapter * adapter )
{
u32 offs = QLCNIC_BOOTLD_START ;
struct uni_data_desc * data_desc ;
data_desc = qlcnic_get_data_desc ( adapter , QLCNIC_UNI_DIR_SECT_BOOTLD ,
QLCNIC_UNI_BOOTLD_IDX_OFF ) ;
if ( adapter - > fw_type = = QLCNIC_UNIFIED_ROMIMAGE )
offs = cpu_to_le32 ( ( qlcnic_get_data_desc ( adapter ,
QLCNIC_UNI_DIR_SECT_BOOTLD ,
QLCNIC_UNI_BOOTLD_IDX_OFF ) ) - > findex ) ;
offs = le32_to_cpu ( data_desc - > findex ) ;
return ( u8 * ) & adapter - > fw - > data [ offs ] ;
}
@ -1009,43 +1010,48 @@ static u8 *
qlcnic_get_fw_offs ( struct qlcnic_adapter * adapter )
{
u32 offs = QLCNIC_IMAGE_START ;
struct uni_data_desc * data_desc ;
data_desc = qlcnic_get_data_desc ( adapter , QLCNIC_UNI_DIR_SECT_FW ,
QLCNIC_UNI_FIRMWARE_IDX_OFF ) ;
if ( adapter - > fw_type = = QLCNIC_UNIFIED_ROMIMAGE )
offs = cpu_to_le32 ( ( qlcnic_get_data_desc ( adapter ,
QLCNIC_UNI_DIR_SECT_FW ,
QLCNIC_UNI_FIRMWARE_IDX_OFF ) ) - > findex ) ;
offs = le32_to_cpu ( data_desc - > findex ) ;
return ( u8 * ) & adapter - > fw - > data [ offs ] ;
}
static __le32
qlcnic_get_fw_size ( struct qlcnic_adapter * adapter )
static u32 qlcnic_get_fw_size ( struct qlcnic_adapter * adapter )
{
struct uni_data_desc * data_desc ;
const u8 * unirom = adapter - > fw - > data ;
data_desc = qlcnic_get_data_desc ( adapter , QLCNIC_UNI_DIR_SECT_FW ,
QLCNIC_UNI_FIRMWARE_IDX_OFF ) ;
if ( adapter - > fw_type = = QLCNIC_UNIFIED_ROMIMAGE )
return cpu_to_le32 ( ( qlcnic_get_data_desc ( adapter ,
QLCNIC_UNI_DIR_SECT_FW ,
QLCNIC_UNI_FIRMWARE_IDX_OFF ) ) - > size ) ;
return le32_to_cpu ( data_desc - > size ) ;
else
return cpu_to_le32 (
* ( u32 * ) & adapter - > fw - > data [ QLCNIC_FW_SIZE_OFFSET ] ) ;
return le32_to_cpu ( * ( __le32 * ) & unirom [ QLCNIC_FW_SIZE_OFFSET ] ) ;
}
static __le32
qlcnic_get_fw_version ( struct qlcnic_adapter * adapter )
static u32 qlcnic_get_fw_version ( struct qlcnic_adapter * adapter )
{
struct uni_data_desc * fw_data_desc ;
const struct firmware * fw = adapter - > fw ;
__le32 major , minor , sub ;
u32 major , minor , sub ;
__le32 version_offset ;
const u8 * ver_str ;
int i , ret ;
if ( adapter - > fw_type ! = QLCNIC_UNIFIED_ROMIMAGE )
return cpu_to_le32 ( * ( u32 * ) & fw - > data [ QLCNIC_FW_VERSION_OFFSET ] ) ;
if ( adapter - > fw_type ! = QLCNIC_UNIFIED_ROMIMAGE ) {
version_offset = * ( __le32 * ) & fw - > data [ QLCNIC_FW_VERSION_OFFSET ] ;
return le32_to_cpu ( version_offset ) ;
}
fw_data_desc = qlcnic_get_data_desc ( adapter , QLCNIC_UNI_DIR_SECT_FW ,
QLCNIC_UNI_FIRMWARE_IDX_OFF ) ;
ver_str = fw - > data + cpu_to_ le32( fw_data_desc - > findex ) +
cpu_to_ le32( fw_data_desc - > size ) - 17 ;
ver_str = fw - > data + le32_to_cpu ( fw_data_desc - > findex ) +
le32_to_cpu ( fw_data_desc - > size ) - 17 ;
for ( i = 0 ; i < 12 ; i + + ) {
if ( ! strncmp ( & ver_str [ i ] , " REV= " , 4 ) ) {
@ -1061,18 +1067,20 @@ qlcnic_get_fw_version(struct qlcnic_adapter *adapter)
return 0 ;
}
static __le32
qlcnic_get_bios_version ( struct qlcnic_adapter * adapter )
static u32 qlcnic_get_bios_version ( struct qlcnic_adapter * adapter )
{
const struct firmware * fw = adapter - > fw ;
__le32 bios_ver , prd_off = adapter - > file_prd_off ;
u32 bios_ver , prd_off = adapter - > file_prd_off ;
u8 * version_offset ;
__le32 temp ;
if ( adapter - > fw_type ! = QLCNIC_UNIFIED_ROMIMAGE )
return cpu_to_le32 (
* ( u32 * ) & fw - > data [ QLCNIC_BIOS_VERSION_OFFSET ] ) ;
if ( adapter - > fw_type ! = QLCNIC_UNIFIED_ROMIMAGE ) {
version_offset = ( u8 * ) & fw - > data [ QLCNIC_BIOS_VERSION_OFFSET ] ;
return le32_to_cpu ( * ( __le32 * ) version_offset ) ;
}
bios_ver = cpu_to_le32 ( * ( ( u32 * ) ( & fw - > data [ prd_off ] )
+ QLCNIC_UNI_BIOS_VERSION_OFF ) ) ;
temp = * ( ( __le32 * ) ( & fw - > data [ prd_off ] ) + QLCNIC_UNI_BIOS_VERSION_OFF ) ;
bios_ver = le32_to_cpu ( temp ) ;
return ( bios_ver < < 16 ) + ( ( bios_ver > > 8 ) & 0xff00 ) + ( bios_ver > > 24 ) ;
}
@ -1131,7 +1139,7 @@ static const char *fw_name[] = {
int
qlcnic_load_firmware ( struct qlcnic_adapter * adapter )
{
u 64 * ptr64 ;
__le 64 * ptr64 ;
u32 i , flashaddr , size ;
const struct firmware * fw = adapter - > fw ;
struct pci_dev * pdev = adapter - > pdev ;
@ -1140,15 +1148,15 @@ qlcnic_load_firmware(struct qlcnic_adapter *adapter)
fw_name [ adapter - > fw_type ] ) ;
if ( fw ) {
__le 64 data ;
u 64 data ;
size = ( QLCNIC_IMAGE_START - QLCNIC_BOOTLD_START ) / 8 ;
ptr64 = ( u 64 * ) qlcnic_get_bootld_offs ( adapter ) ;
ptr64 = ( __le 64 * ) qlcnic_get_bootld_offs ( adapter ) ;
flashaddr = QLCNIC_BOOTLD_START ;
for ( i = 0 ; i < size ; i + + ) {
data = cpu_to_ le64( ptr64 [ i ] ) ;
data = le64_to_cpu ( ptr64 [ i ] ) ;
if ( qlcnic_pci_mem_write_2M ( adapter , flashaddr , data ) )
return - EIO ;
@ -1156,13 +1164,13 @@ qlcnic_load_firmware(struct qlcnic_adapter *adapter)
flashaddr + = 8 ;
}
size = ( __force u32 ) qlcnic_get_fw_size ( adapter ) / 8 ;
size = qlcnic_get_fw_size ( adapter ) / 8 ;
ptr64 = ( u 64 * ) qlcnic_get_fw_offs ( adapter ) ;
ptr64 = ( __le 64 * ) qlcnic_get_fw_offs ( adapter ) ;
flashaddr = QLCNIC_IMAGE_START ;
for ( i = 0 ; i < size ; i + + ) {
data = cpu_to_ le64( ptr64 [ i ] ) ;
data = le64_to_cpu ( ptr64 [ i ] ) ;
if ( qlcnic_pci_mem_write_2M ( adapter ,
flashaddr , data ) )
@ -1171,9 +1179,9 @@ qlcnic_load_firmware(struct qlcnic_adapter *adapter)
flashaddr + = 8 ;
}
size = ( __force u32 ) qlcnic_get_fw_size ( adapter ) % 8 ;
size = qlcnic_get_fw_size ( adapter ) % 8 ;
if ( size ) {
data = cpu_to_ le64( ptr64 [ i ] ) ;
data = le64_to_cpu ( ptr64 [ i ] ) ;
if ( qlcnic_pci_mem_write_2M ( adapter ,
flashaddr , data ) )
@ -1225,7 +1233,7 @@ qlcnic_load_firmware(struct qlcnic_adapter *adapter)
static int
qlcnic_validate_firmware ( struct qlcnic_adapter * adapter )
{
__le 32 val ;
u 32 val ;
u32 ver , bios , min_size ;
struct pci_dev * pdev = adapter - > pdev ;
const struct firmware * fw = adapter - > fw ;
@ -1237,8 +1245,8 @@ qlcnic_validate_firmware(struct qlcnic_adapter *adapter)
min_size = QLCNIC_UNI_FW_MIN_SIZE ;
} else {
val = cpu_to_ le32( * ( u 32 * ) & fw - > data [ QLCNIC_FW_MAGIC_OFFSET ] ) ;
if ( ( __force u32 ) val ! = QLCNIC_BDINFO_MAGIC )
val = le32_to_cpu ( * ( __le 32 * ) & fw - > data [ QLCNIC_FW_MAGIC_OFFSET ] ) ;
if ( val ! = QLCNIC_BDINFO_MAGIC )
return - EINVAL ;
min_size = QLCNIC_FW_MIN_SIZE ;
@ -1259,7 +1267,7 @@ qlcnic_validate_firmware(struct qlcnic_adapter *adapter)
val = qlcnic_get_bios_version ( adapter ) ;
qlcnic_rom_fast_read ( adapter , QLCNIC_BIOS_VERSION_OFFSET , ( int * ) & bios ) ;
if ( ( __force u32 ) val ! = bios ) {
if ( val ! = bios ) {
dev_err ( & pdev - > dev , " %s: firmware bios is incompatible \n " ,
fw_name [ fw_type ] ) ;
return - EINVAL ;