diff options
author | Mithlesh Thukral <mithlesh@linsyssoft.com> | 2009-03-20 17:35:58 +0530 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-04-03 14:53:13 -0700 |
commit | b9346e0fc5f0761c63a6e26c6436f0d6d645c826 (patch) | |
tree | b45a2aeb8445c767236227da13101ecdb106572d /drivers | |
parent | 544ed364f4cac1ed6024711132e059c2746325a5 (diff) |
Staging: sxg: Read the correct MAC address from the card for Rev B cards
Read the correct MAC address from EEPROM/Flash.
Without this fix, all the interfaces were using the same MAC address.
This works on Rev B firmware.
Signed-off-by: Christopher Harrer <charrer@alacritech.com>
Signed-off-by: Mithlesh Thukral <mithlesh@linsyssoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/sxg/sxg.c | 19 | ||||
-rw-r--r-- | drivers/staging/sxg/sxghw.h | 9 |
2 files changed, 12 insertions, 16 deletions
diff --git a/drivers/staging/sxg/sxg.c b/drivers/staging/sxg/sxg.c index 59b241e8e28..884e56aa9f0 100644 --- a/drivers/staging/sxg/sxg.c +++ b/drivers/staging/sxg/sxg.c @@ -834,14 +834,15 @@ static void sxg_config_pci(struct pci_dev *pcidev) static inline int sxg_read_config(struct adapter_t *adapter) { /* struct sxg_config data; */ + struct sxg_config *config; struct sw_cfg_data *data; dma_addr_t p_addr; unsigned long status; unsigned long i; + config = pci_alloc_consistent(adapter->pcidev, + sizeof(struct sxg_config), &p_addr); - data = pci_alloc_consistent(adapter->pcidev, - sizeof(struct sw_cfg_data), &p_addr); - if(!data) { + if(!config) { /* * We cant get even this much memory. Raise a hell * Get out of here @@ -851,8 +852,12 @@ static inline int sxg_read_config(struct adapter_t *adapter) return -ENOMEM; } + data = &config->SwCfg; + + /* Initialize (reflective memory) status register */ WRITE_REG(adapter->UcodeRegs[0].ConfigStat, SXG_CFG_TIMEOUT, TRUE); + /* Send request to fetch configuration data */ WRITE_REG64(adapter, adapter->UcodeRegs[0].Config, p_addr, 0); for(i=0; i<1000; i++) { READ_REG(adapter->UcodeRegs[0].ConfigStat, status); @@ -866,12 +871,12 @@ static inline int sxg_read_config(struct adapter_t *adapter) case SXG_CFG_LOAD_EEPROM: /* Config read from Flash succeeded */ case SXG_CFG_LOAD_FLASH: - /* Copy the MAC address to adapter structure */ - /* TODO: We are not doing the remaining part : FRU, - * etc + /* + * Copy the MAC address to adapter structure + * TODO: We are not doing the remaining part : FRU, etc */ memcpy(adapter->macaddr, data->MacAddr[0].MacAddr, - sizeof(struct sxg_config_mac)); + sizeof(struct sxg_config_mac)); break; case SXG_CFG_TIMEOUT: case SXG_CFG_LOAD_INVALID: diff --git a/drivers/staging/sxg/sxghw.h b/drivers/staging/sxg/sxghw.h index f59a86acc1c..81f81d4b0ad 100644 --- a/drivers/staging/sxg/sxghw.h +++ b/drivers/staging/sxg/sxghw.h @@ -944,15 +944,6 @@ struct sxg_config { struct sw_cfg_data SwCfg; }; -/* EEPROM/Flash Format (Sahara rev A) */ -struct sxg_config_a { - /* H/W Section - Read by Sahara hardware (256 bytes) */ - struct hw_cfg_data HwCfg[NUM_HW_CFG_ENTRIES_A]; - - /* S/W Section - Other configuration data (128 bytes) */ - struct sw_cfg_data SwCfg; -}; - #ifdef WINDOWS_COMPILER /* * The following macro is something of a kludge, but it is the only way |