Staging: sxg: Read the correct MAC address from the card for Rev B cards
authorMithlesh Thukral <mithlesh@linsyssoft.com>
Fri, 20 Mar 2009 12:05:58 +0000 (17:35 +0530)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 3 Apr 2009 21:53:13 +0000 (14:53 -0700)
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>
drivers/staging/sxg/sxg.c
drivers/staging/sxg/sxghw.h

index 59b241e8e288a6dbf801f2b35889d4863e3e590c..884e56aa9f0f09c356080ad45f11037153f4176d 100644 (file)
@@ -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:
index f59a86acc1c8b7ef7f72c5e9f2f382c40fff6a08..81f81d4b0ad0b1c3f6dd70158b22e9a0cd830f9c 100644 (file)
@@ -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