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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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);
}