sfc: Add efx_nic_type operation for NVRAM self-test
authorBen Hutchings <bhutchings@solarflare.com>
Sun, 29 Nov 2009 03:43:33 +0000 (03:43 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Nov 2009 00:46:31 +0000 (16:46 -0800)
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/sfc/falcon.c
drivers/net/sfc/falcon.h
drivers/net/sfc/net_driver.h
drivers/net/sfc/selftest.c

index bcdc5452bfd0a8064696884709e006331065ca02..d4d13c13f8ae91e8804e88f42143011315b843b9 100644 (file)
@@ -2345,7 +2345,8 @@ static void falcon_remove_port(struct efx_nic *efx)
  *
  **************************************************************************/
 
-int falcon_read_nvram(struct efx_nic *efx, struct falcon_nvconfig *nvconfig_out)
+static int
+falcon_read_nvram(struct efx_nic *efx, struct falcon_nvconfig *nvconfig_out)
 {
        struct falcon_nvconfig *nvconfig;
        struct efx_spi_device *spi;
@@ -2408,6 +2409,11 @@ int falcon_read_nvram(struct efx_nic *efx, struct falcon_nvconfig *nvconfig_out)
        return rc;
 }
 
+static int falcon_test_nvram(struct efx_nic *efx)
+{
+       return falcon_read_nvram(efx, NULL);
+}
+
 /* Registers tested in the falcon register test */
 static struct {
        unsigned address;
@@ -3290,6 +3296,7 @@ struct efx_nic_type falcon_a1_nic_type = {
        .get_wol = falcon_get_wol,
        .set_wol = falcon_set_wol,
        .resume_wol = efx_port_dummy_op_void,
+       .test_nvram = falcon_test_nvram,
        .default_mac_ops = &falcon_xmac_operations,
 
        .revision = EFX_REV_FALCON_A1,
@@ -3328,6 +3335,7 @@ struct efx_nic_type falcon_b0_nic_type = {
        .set_wol = falcon_set_wol,
        .resume_wol = efx_port_dummy_op_void,
        .test_registers = falcon_b0_test_registers,
+       .test_nvram = falcon_test_nvram,
        .default_mac_ops = &falcon_xmac_operations,
 
        .revision = EFX_REV_FALCON_B0,
index cfcc2a38366fff194c8a20ae2b4e8c62669a56ea..464c2747260faf832c18348a20b4f213f1ca0bde 100644 (file)
@@ -151,9 +151,6 @@ extern void falcon_stop_nic_stats(struct efx_nic *efx);
 extern int falcon_reset_xaui(struct efx_nic *efx);
 
 /* Tests */
-struct falcon_nvconfig;
-extern int falcon_read_nvram(struct efx_nic *efx,
-                            struct falcon_nvconfig *nvconfig);
 
 /**************************************************************************
  *
index 9d353d923eecbcdc6bbe23242fb9d4cc277a7c0f..de7cf17f4a4516ac2159a43730916fce18b6f326 100644 (file)
@@ -865,6 +865,7 @@ static inline const char *efx_dev_name(struct efx_nic *efx)
  * @set_wol: Push WoL configuration to the NIC
  * @resume_wol: Synchronise WoL state between driver and MC (e.g. after resume)
  * @test_registers: Test read/write functionality of control registers
+ * @test_nvram: Test validity of NVRAM contents
  * @default_mac_ops: efx_mac_operations to set at startup
  * @revision: Hardware architecture revision
  * @mem_map_size: Memory BAR mapped size
@@ -904,6 +905,7 @@ struct efx_nic_type {
        int (*set_wol)(struct efx_nic *efx, u32 type);
        void (*resume_wol)(struct efx_nic *efx);
        int (*test_registers)(struct efx_nic *efx);
+       int (*test_nvram)(struct efx_nic *efx);
        struct efx_mac_operations *default_mac_ops;
 
        int revision;
index f3035521004413e2b6bcbb7ad7fdf2eb951cf856..fa56e2e8e9c59aed0a230ee05e97bc6fa486f7d6 100644 (file)
@@ -113,10 +113,13 @@ out:
 
 static int efx_test_nvram(struct efx_nic *efx, struct efx_self_tests *tests)
 {
-       int rc;
+       int rc = 0;
+
+       if (efx->type->test_nvram) {
+               rc = efx->type->test_nvram(efx);
+               tests->nvram = rc ? -1 : 1;
+       }
 
-       rc = falcon_read_nvram(efx, NULL);
-       tests->nvram = rc ? -1 : 1;
        return rc;
 }