From mithlesh@linsyssoft.com Fri Mar 20 19:56:28 2009 From: Mithlesh Thukral Date: Fri, 20 Mar 2009 17:35:58 +0530 (IST) Subject: Staging: sxg: Read the correct MAC address from the card for Rev B cards To: Greg Kroah-Hartman Cc: Sahara Project , Christopher Harrer Message-ID: 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 Signed-off-by: Mithlesh Thukral Signed-off-by: Greg Kroah-Hartman --- drivers/staging/sxg/sxg.c | 19 ++++++++++++------- drivers/staging/sxg/sxghw.h | 9 --------- 2 files changed, 12 insertions(+), 16 deletions(-) --- a/drivers/staging/sxg/sxg.c +++ b/drivers/staging/sxg/sxg.c @@ -834,14 +834,15 @@ static void sxg_config_pci(struct pci_de 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 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 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: --- 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