void ath6kl_mangle_mac_address(struct ath6kl *ar, u8 locally_administered_bit) { u8 *ptr_mac; int i, ret; u8 *macbuf; switch (ar->target_type) { case TARGET_TYPE_AR6003: ptr_mac = ar->fw_board + AR6003_MAC_ADDRESS_OFFSET; break; case TARGET_TYPE_AR6004: ptr_mac = ar->fw_board + AR6004_MAC_ADDRESS_OFFSET; break; default: ath6kl_err("Invalid Target Type\n"); return; } /* #if 0 mac address issue - It sometimes changed macaddress */ ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC from EEPROM %02X:%02X:%02X:%02X:%02X:%02X\n", ptr_mac[0], ptr_mac[1], ptr_mac[2], ptr_mac[3], ptr_mac[4], ptr_mac[5]); /* #endif */ ret = ath6kl_fetch_nvmac_info(ar); if (ret) { ath6kl_err("MAC address nvmac file not found\n"); return; } macbuf = kmalloc(ath6kl_softmac_len + 1, GFP_ATOMIC); if (macbuf) { unsigned int softmac[6]; memcpy(macbuf, ath6kl_softmac, ath6kl_softmac_len); macbuf[ath6kl_softmac_len] = '\0'; if (sscanf(macbuf, "%02x:%02x:%02x:%02x:%02x:%02x", &softmac[0], &softmac[1], &softmac[2], &softmac[3], &softmac[4], &softmac[5]) == 6) { for (i = 0; i < 6; ++i) ptr_mac[i] = softmac[i] & 0xff; } ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC from SoftMAC %02X_%02X:%02X\n", ptr_mac[0], ptr_mac[4], ptr_mac[5]); } vfree(ath6kl_softmac); if (locally_administered_bit) ptr_mac[0] |= 0x02; ath6kl_calculate_crc(ar->target_type, ar->fw_board, ar->fw_board_len); }
void ath6kl_mangle_mac_address(struct ath6kl *ar, u8 locally_administered_bit) { u8 *ptr_mac; int i, ret; switch (ar->target_type) { case TARGET_TYPE_AR6003: ptr_mac = ar->fw_board + AR6003_MAC_ADDRESS_OFFSET; break; case TARGET_TYPE_AR6004: ptr_mac = ar->fw_board + AR6004_MAC_ADDRESS_OFFSET; break; default: ath6kl_err("Invalid Target Type\n"); return; } ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC from EEPROM %02X:%02X:%02X:%02X:%02X:%02X\n", ptr_mac[0], ptr_mac[1], ptr_mac[2], ptr_mac[3], ptr_mac[4], ptr_mac[5]); ret = ath6kl_fetch_mac_file(ar); if (ret) { ath6kl_err("MAC address file not found\n"); return; } for (i = 0; i < ETH_ALEN; ++i) { ptr_mac[i] = ath6kl_softmac[i] & 0xff; } kfree(ath6kl_softmac); if (locally_administered_bit) ptr_mac[0] |= 0x02; ath6kl_calculate_crc(ar->target_type, ar->fw_board, ar->fw_board_len); }
void ath6kl_mangle_mac_address(struct ath6kl *ar, u8 locally_administered_bit) { u8 *ptr_mac; int i; const char *source = "eeprom"; switch (ar->target_type) { case TARGET_TYPE_AR6003: ptr_mac = ar->fw_board + AR6003_MAC_ADDRESS_OFFSET; break; case TARGET_TYPE_AR6004: ptr_mac = ar->fw_board + AR6004_MAC_ADDRESS_OFFSET; break; default: ath6kl_err("Invalid Target Type\n"); return; } #ifdef CONFIG_LAB126 /* * Get mac address from kernel data structure * We only use it if strtol is able to atoi appropriately and * the OUI seems to be set to something */ { unsigned long val; char buf[3]; char tmp_mac[ETH_ALEN]; for (i=0; i<ETH_ALEN; i++) { buf[0] = lab126_mac_address[i*2]; buf[1] = lab126_mac_address[i*2+1]; buf[2] = '\0'; if (strict_strtoul(buf, 16, &val) != 0) { break; } tmp_mac[i] = val & 0xFF; } if ((i == ETH_ALEN) && (tmp_mac[0] || tmp_mac[1] || tmp_mac[2])) { memcpy(ptr_mac, tmp_mac, ETH_ALEN); source = "kernel"; } } #else { int ret; ret = ath6kl_fetch_mac_file(ar); if (ret) { ath6kl_err("MAC address file not found\n"); return; } for (i = 0; i < ETH_ALEN; ++i) { ptr_mac[i] = ath6kl_softmac[i] & 0xff; } kfree(ath6kl_softmac); source = "softmac file"; } #endif if (locally_administered_bit) ptr_mac[0] |= 0x02; ath6kl_err("MAC from %s xx:xx:xx:xx:xx:%02X\n", source, ptr_mac[5]); ath6kl_calculate_crc(ar->target_type, ar->fw_board, ar->fw_board_len); }
void ath6kl_mangle_mac_address(struct ath6kl *ar) { u8 *ptr_mac; int i, ret; #ifdef CONFIG_MACH_PX unsigned int softmac[6]; #endif switch (ar->target_type) { case TARGET_TYPE_AR6003: ptr_mac = ar->fw_board + AR6003_MAC_ADDRESS_OFFSET; break; case TARGET_TYPE_AR6004: ptr_mac = ar->fw_board + AR6004_MAC_ADDRESS_OFFSET; break; default: ath6kl_err("Invalid Target Type\n"); return; } #if 0 ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC from EEPROM %02X:%02X:%02X:%02X:%02X:%02X\n", ptr_mac[0], ptr_mac[1], ptr_mac[2], ptr_mac[3], ptr_mac[4], ptr_mac[5]); #endif #ifdef CONFIG_MACH_PX ret = ath6kl_fetch_nvmac_info(ar); if (ret) { ath6kl_err("MAC address file not found\n"); return; } if (sscanf(ath6kl_softmac, "%02x:%02x:%02x:%02x:%02x:%02x", &softmac[0], &softmac[1], &softmac[2], &softmac[3], &softmac[4], &softmac[5])==6) { for (i=0; i<6; ++i) { ptr_mac[i] = softmac[i] & 0xff; } } ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC from SoftMAC %02X_%02X:%02X\n", ptr_mac[0], ptr_mac[4], ptr_mac[5]); vfree(ath6kl_softmac); #else ret = ath6kl_fetch_mac_file(ar); if (ret) { ath6kl_err("MAC address file not found\n"); return; } for (i = 0; i < ETH_ALEN; ++i) { ptr_mac[i] = ath6kl_softmac[i] & 0xff; } kfree(ath6kl_softmac); #endif ath6kl_calculate_crc(ar->target_type, ar->fw_board, ar->fw_board_len); }
void ath6kl_mangle_mac_address(struct ath6kl *ar) { u8 *ptr_mac; int i, ret; #ifdef CONFIG_MACH_MSM8X60_PORORO //LS3_LeeYoungHo_120424_chg [ // unsigned int softmac[6]; unsigned char softmac[6]; #endif switch (ar->target_type) { case TARGET_TYPE_AR6003: ptr_mac = ar->fw_board + AR6003_MAC_ADDRESS_OFFSET; break; case TARGET_TYPE_AR6004: ptr_mac = ar->fw_board + AR6004_MAC_ADDRESS_OFFSET; break; default: ath6kl_err("Invalid Target Type\n"); return; } #ifdef CONFIG_MACH_MSM8X60_PORORO //LS3_LeeYoungHo_120424_chg [ // ret = ath6kl_fetch_softmac_info(ar); ret = read_mac_addr_from_file(softmac_file, softmac); if (ret < 0) { ath6kl_err("MAC address file not found: panmac read fail\n"); /* create a random MAC in case we cannot read file from system */ ptr_mac[0] = 0x2C; /* locally administered */ ptr_mac[1] = 0x30; ptr_mac[2] = 0x68; ptr_mac[3] = random32() & 0xff; ptr_mac[4] = random32() & 0xff; ptr_mac[5] = random32() & 0xff; ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC random generated as %02X:%02X:%02X:%02X:%02X:%02X\n", ptr_mac[0], ptr_mac[1], ptr_mac[2], ptr_mac[3], ptr_mac[4], ptr_mac[5]); } else { //panmac read OK if (memcmp(softmac, "\0\0\0\0\0\0", 6)!=0) { memcpy(ptr_mac, softmac, 6); for (i=0; i<6; ++i) { ptr_mac[i] = softmac[i] & 0xff; } ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC from panmac %02X:%02X:%02X:%02X:%02X:%02X\n", ptr_mac[0], ptr_mac[1], ptr_mac[2], ptr_mac[3], ptr_mac[4], ptr_mac[5]); } else { ath6kl_err("panmac is init value\n"); /* create a random MAC in case we cannot read file from system */ ptr_mac[0] = 0x2C; /* locally administered */ ptr_mac[1] = 0x30; ptr_mac[2] = 0x68; ptr_mac[3] = random32() & 0xff; ptr_mac[4] = random32() & 0xff; ptr_mac[5] = random32() & 0xff; ath6kl_dbg(ATH6KL_DBG_BOOT, "MAC random generated as %02X:%02X:%02X:%02X:%02X:%02X\n", ptr_mac[0], ptr_mac[1], ptr_mac[2], ptr_mac[3], ptr_mac[4], ptr_mac[5]); } } #else ret = ath6kl_fetch_mac_file(ar); if (ret) { ath6kl_err("MAC address file not found\n"); return; } for (i = 0; i < ETH_ALEN; ++i) { ptr_mac[i] = ath6kl_softmac[i] & 0xff; } kfree(ath6kl_softmac); #endif ath6kl_calculate_crc(ar->target_type, ar->fw_board, ar->fw_board_len); }