netxen: qlogic ethernet : Fix endian bug.
Change the datatype of "ip_addr" to __be32 as 'ip' should be in big endian format. Adapter needs "ip address" in big endian format stored at lower 32bit of req.word[1]. netxen_config_ipaddr() now receives 'ip' in big endian format. To satisfy adapter's need, use memcpy() to copy byte by byte of 'ip' into lower 32bit of req.word[1]. Mac address and serial number of adapter need to be in little endian format. Change the data type of the related variables to __le32 / __le64 or cast it explicitly to __le32 / __le64 depending upon the requirement. Signed-off-by: Santosh Nayak <santoshprasadnayak@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
50cdc8fc40
commit
06d6c10876
|
@ -954,7 +954,7 @@ typedef struct nx_mac_list_s {
|
||||||
|
|
||||||
struct nx_vlan_ip_list {
|
struct nx_vlan_ip_list {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
u32 ip_addr;
|
__be32 ip_addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1780,7 +1780,7 @@ int netxen_process_rcv_ring(struct nx_host_sds_ring *sds_ring, int max);
|
||||||
void netxen_p3_free_mac_list(struct netxen_adapter *adapter);
|
void netxen_p3_free_mac_list(struct netxen_adapter *adapter);
|
||||||
int netxen_config_intr_coalesce(struct netxen_adapter *adapter);
|
int netxen_config_intr_coalesce(struct netxen_adapter *adapter);
|
||||||
int netxen_config_rss(struct netxen_adapter *adapter, int enable);
|
int netxen_config_rss(struct netxen_adapter *adapter, int enable);
|
||||||
int netxen_config_ipaddr(struct netxen_adapter *adapter, u32 ip, int cmd);
|
int netxen_config_ipaddr(struct netxen_adapter *adapter, __be32 ip, int cmd);
|
||||||
int netxen_linkevent_request(struct netxen_adapter *adapter, int enable);
|
int netxen_linkevent_request(struct netxen_adapter *adapter, int enable);
|
||||||
void netxen_advert_link_change(struct netxen_adapter *adapter, int linkup);
|
void netxen_advert_link_change(struct netxen_adapter *adapter, int linkup);
|
||||||
void netxen_pci_camqm_read_2M(struct netxen_adapter *, u64, u64 *);
|
void netxen_pci_camqm_read_2M(struct netxen_adapter *, u64, u64 *);
|
||||||
|
|
|
@ -909,7 +909,7 @@ int netxen_config_rss(struct netxen_adapter *adapter, int enable)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
int netxen_config_ipaddr(struct netxen_adapter *adapter, u32 ip, int cmd)
|
int netxen_config_ipaddr(struct netxen_adapter *adapter, __be32 ip, int cmd)
|
||||||
{
|
{
|
||||||
nx_nic_req_t req;
|
nx_nic_req_t req;
|
||||||
u64 word;
|
u64 word;
|
||||||
|
@ -922,7 +922,7 @@ int netxen_config_ipaddr(struct netxen_adapter *adapter, u32 ip, int cmd)
|
||||||
req.req_hdr = cpu_to_le64(word);
|
req.req_hdr = cpu_to_le64(word);
|
||||||
|
|
||||||
req.words[0] = cpu_to_le64(cmd);
|
req.words[0] = cpu_to_le64(cmd);
|
||||||
req.words[1] = cpu_to_le64(ip);
|
memcpy(&req.words[1], &ip, sizeof(u32));
|
||||||
|
|
||||||
rv = netxen_send_cmd_descs(adapter, (struct cmd_desc_type0 *)&req, 1);
|
rv = netxen_send_cmd_descs(adapter, (struct cmd_desc_type0 *)&req, 1);
|
||||||
if (rv != 0) {
|
if (rv != 0) {
|
||||||
|
@ -1050,7 +1050,7 @@ int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, u64 *mac)
|
||||||
if (netxen_get_flash_block(adapter, offset, sizeof(u64), pmac) == -1)
|
if (netxen_get_flash_block(adapter, offset, sizeof(u64), pmac) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (*mac == cpu_to_le64(~0ULL)) {
|
if (*mac == ~0ULL) {
|
||||||
|
|
||||||
offset = NX_OLD_MAC_ADDR_OFFSET +
|
offset = NX_OLD_MAC_ADDR_OFFSET +
|
||||||
(adapter->portnum * sizeof(u64));
|
(adapter->portnum * sizeof(u64));
|
||||||
|
@ -1059,7 +1059,7 @@ int netxen_get_flash_mac_addr(struct netxen_adapter *adapter, u64 *mac)
|
||||||
offset, sizeof(u64), pmac) == -1)
|
offset, sizeof(u64), pmac) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (*mac == cpu_to_le64(~0ULL))
|
if (*mac == ~0ULL)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2155,7 +2155,7 @@ static u32 netxen_md_rd_crb(struct netxen_adapter *adapter,
|
||||||
static u32
|
static u32
|
||||||
netxen_md_rdrom(struct netxen_adapter *adapter,
|
netxen_md_rdrom(struct netxen_adapter *adapter,
|
||||||
struct netxen_minidump_entry_rdrom
|
struct netxen_minidump_entry_rdrom
|
||||||
*romEntry, u32 *data_buff)
|
*romEntry, __le32 *data_buff)
|
||||||
{
|
{
|
||||||
int i, count = 0;
|
int i, count = 0;
|
||||||
u32 size, lck_val;
|
u32 size, lck_val;
|
||||||
|
|
|
@ -805,12 +805,12 @@ netxen_check_options(struct netxen_adapter *adapter)
|
||||||
char brd_name[NETXEN_MAX_SHORT_NAME];
|
char brd_name[NETXEN_MAX_SHORT_NAME];
|
||||||
char serial_num[32];
|
char serial_num[32];
|
||||||
int i, offset, val, err;
|
int i, offset, val, err;
|
||||||
int *ptr32;
|
__le32 *ptr32;
|
||||||
struct pci_dev *pdev = adapter->pdev;
|
struct pci_dev *pdev = adapter->pdev;
|
||||||
|
|
||||||
adapter->driver_mismatch = 0;
|
adapter->driver_mismatch = 0;
|
||||||
|
|
||||||
ptr32 = (int *)&serial_num;
|
ptr32 = (__le32 *)&serial_num;
|
||||||
offset = NX_FW_SERIAL_NUM_OFFSET;
|
offset = NX_FW_SERIAL_NUM_OFFSET;
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
if (netxen_rom_fast_read(adapter, offset, &val) == -1) {
|
if (netxen_rom_fast_read(adapter, offset, &val) == -1) {
|
||||||
|
|
Loading…
Reference in New Issue