From a1eb0b3d9f14d13bff02e08b151ae39bf2628ab5 Mon Sep 17 00:00:00 2001 From: Greg Goldman Date: Thu, 3 Jun 2010 18:07:27 -0700 Subject: [PATCH] network: wireless: bcm4329: Fix MAC address import Signed-off-by: Dmitry Shmidt --- drivers/net/wireless/bcm4329/Makefile | 1 + drivers/net/wireless/bcm4329/dhd_cdc.c | 21 +---------------- drivers/net/wireless/bcm4329/dhd_common.c | 28 ++++++++++++++++++++++- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/drivers/net/wireless/bcm4329/Makefile b/drivers/net/wireless/bcm4329/Makefile index a7c0267dfcfc..453630e90836 100644 --- a/drivers/net/wireless/bcm4329/Makefile +++ b/drivers/net/wireless/bcm4329/Makefile @@ -6,6 +6,7 @@ DHDCFLAGS = -DLINUX -DBCMDRIVER -DBCMDONGLEHOST -DDHDTHREAD -DBCMWPA2 \ -Wall -Wstrict-prototypes -Werror -DOOB_INTR_ONLY -DCUSTOMER_HW2 \ -DDHD_USE_STATIC_BUF -DMMC_SDIO_ABORT -DDHD_DEBUG_TRAP -DSOFTAP \ -DEMBEDDED_PLATFORM -DARP_OFFLOAD_SUPPORT -DPKT_FILTER_SUPPORT \ + -DGET_CUSTOM_MAC_ENABLE \ -Idrivers/net/wireless/bcm4329 -Idrivers/net/wireless/bcm4329/include DHDOFILES = dhd_linux.o linux_osl.o bcmutils.o dhd_common.o dhd_custom_gpio.o \ diff --git a/drivers/net/wireless/bcm4329/dhd_cdc.c b/drivers/net/wireless/bcm4329/dhd_cdc.c index 835b30a9f8f3..f091e797a92e 100644 --- a/drivers/net/wireless/bcm4329/dhd_cdc.c +++ b/drivers/net/wireless/bcm4329/dhd_cdc.c @@ -41,10 +41,6 @@ #include #include -#ifdef CUSTOMER_HW2 -int wifi_get_mac_addr(unsigned char *buf); -#endif - extern int dhd_preinit_ioctls(dhd_pub_t *dhd); /* Packet alignment for most efficient SDIO (can change based on platform) */ @@ -520,26 +516,11 @@ dhd_prot_init(dhd_pub_t *dhd) { int ret = 0; char buf[128]; -#ifdef CUSTOMER_HW2 - struct ether_addr ea_addr; -#endif + DHD_TRACE(("%s: Enter\n", __FUNCTION__)); dhd_os_proto_block(dhd); -#ifdef CUSTOMER_HW2 - /* Set the device MAC address if applicable */ - ret = wifi_get_mac_addr(ea_addr.octet); - if (!ret) { - bcm_mkiovar("cur_etheraddr", (void *)&ea_addr, ETHER_ADDR_LEN, buf, sizeof(buf)); - ret = dhdcdc_set_ioctl(dhd, 0, WLC_SET_VAR, buf, sizeof(buf)); - if (ret < 0) { - DHD_ERROR(("%s: can't set MAC address , error=%d\n", __FUNCTION__, ret)); - goto fail; - } - } -#endif - /* Get the device MAC address */ strcpy(buf, "cur_etheraddr"); ret = dhdcdc_query_ioctl(dhd, 0, WLC_GET_VAR, buf, sizeof(buf)); diff --git a/drivers/net/wireless/bcm4329/dhd_common.c b/drivers/net/wireless/bcm4329/dhd_common.c index 1fd07215fe9b..033498453581 100644 --- a/drivers/net/wireless/bcm4329/dhd_common.c +++ b/drivers/net/wireless/bcm4329/dhd_common.c @@ -37,9 +37,12 @@ #include #include - #include +#ifdef GET_CUSTOM_MAC_ENABLE +int wifi_get_mac_addr(unsigned char *buf); +#endif /* GET_CUSTOM_MAC_ENABLE */ + int dhd_msg_level; char fw_path[MOD_PARAM_PATHLEN]; @@ -1236,6 +1239,29 @@ dhd_preinit_ioctls(dhd_pub_t *dhd) uint bcn_timeout = 3; int scan_assoc_time = 40; int scan_unassoc_time = 80; +#ifdef GET_CUSTOM_MAC_ENABLE + int ret; + struct ether_addr ea_addr; +#endif /* GET_CUSTOM_MAC_ENABLE */ + +#ifdef GET_CUSTOM_MAC_ENABLE + /* + ** Read MAC address from external customer place + ** NOTE that default mac address has to be present in otp or nvram file + ** to bring up firmware but unique per board mac address maybe provided + ** by customer code + */ + ret = wifi_get_mac_addr(ea_addr.octet); + if (!ret) { + bcm_mkiovar("cur_etheraddr", (void *)&ea_addr, ETHER_ADDR_LEN, buf, sizeof(buf)); + ret = dhdcdc_set_ioctl(dhd, 0, WLC_SET_VAR, buf, sizeof(buf)); + if (ret < 0) { + DHD_ERROR(("%s: can't set MAC address , error=%d\n", __FUNCTION__, ret)); + } + else + memcpy(dhd->mac.octet, (void *)&ea_addr, ETHER_ADDR_LEN); + } +#endif /* GET_CUSTOM_MAC_ENABLE */ /* Set Country code */ if (dhd->country_code[0] != 0) { -- 2.34.1