From b9346e0fc5f0761c63a6e26c6436f0d6d645c826 Mon Sep 17 00:00:00 2001 From: Mithlesh Thukral Date: Fri, 20 Mar 2009 17:35:58 +0530 Subject: [PATCH] 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 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(-) diff --git a/drivers/staging/sxg/sxg.c b/drivers/staging/sxg/sxg.c index 59b241e8e288..884e56aa9f0f 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 f59a86acc1c8..81f81d4b0ad0 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 -- 2.30.2