static void __init rb2011_wlan_init(void) { u8 *hard_cfg = (u8 *) KSEG1ADDR(0x1f000000 + RB_HARD_CFG_OFFSET); u16 tag_len; u8 *tag; char *art_buf; u8 wlan_mac[ETH_ALEN]; int err; err = routerboot_find_tag(hard_cfg, RB_HARD_CFG_SIZE, RB_ID_WLAN_DATA, &tag, &tag_len); if (err) { pr_err("no calibration data found\n"); return; } art_buf = kmalloc(RB_ART_SIZE, GFP_KERNEL); if (art_buf == NULL) { pr_err("no memory for calibration data\n"); return; } err = rle_decode((char *) tag, tag_len, art_buf, RB_ART_SIZE, NULL, NULL); if (err) { pr_err("unable to decode calibration data\n"); goto free; } ath79_init_mac(wlan_mac, ath79_mac_base, 11); ath79_register_wmac(art_buf + 0x1000, wlan_mac); free: kfree(art_buf); }
static void __init rb751_wlan_setup(void) { u8 *hardconfig = (u8 *) KSEG1ADDR(RB751_HARDCONFIG); struct ath9k_platform_data *wmac_data; u16 tag_len; u8 *tag; u16 mac_len; u8 *mac; int err; wmac_data = ap9x_pci_get_wmac_data(0); if (!wmac_data) { pr_err("rb75x: unable to get address of wlan data\n"); return; } ap9x_pci_setup_wmac_led_pin(0, 9); err = routerboot_find_tag(hardconfig, RB751_HARDCONFIG_SIZE, RB_ID_WLAN_DATA, &tag, &tag_len); if (err) { pr_err("rb75x: no calibration data found\n"); return; } err = rle_decode(tag, tag_len, (unsigned char *) wmac_data->eeprom_data, sizeof(wmac_data->eeprom_data), NULL, NULL); if (err) { pr_err("rb75x: unable to decode wlan eeprom data\n"); return; } err = routerboot_find_tag(hardconfig, RB751_HARDCONFIG_SIZE, RB_ID_MAC_ADDRESS_PACK, &mac, &mac_len); if (err) { pr_err("rb75x: no mac address found\n"); return; } ap91_pci_init(NULL, mac); }