这里以QCS8250平台为例。
Wi-Fi MAC地址的获取流程位于:vendor/qcom/opensource/wlan/qcacld-3.0/core/hdd/src/wlan_hdd_main.c文件的hdd_initialize_mac_address接口。
从平台驱动程序或wlan_mac.bin获取MAC地址。如果平台驱动程序提供了mac地址,驱动程序使用它,否则它将使用wlan_mac.bin更新HW mac地址。
static int hdd_initialize_mac_address(struct hdd_context *hdd_ctx)
{
bool update_mac_addr_to_fw = true;
ret = hdd_platform_wlan_mac(hdd_ctx); ------①从平台驱动获取
status = hdd_update_mac_config(hdd_ctx); ------②从wlan_mac.bin获取
if (hdd_generate_macaddr_auto(hdd_ctx) != 0) ------③根据serialno生成MAC地址
if (update_mac_addr_to_fw) {
//释放需要将MAC地址更新到固件中
ret = hdd_update_mac_addr_to_fw(hdd_ctx);
}
}
static int hdd_update_mac_addr_to_fw(struct hdd_context *hdd_ctx)
{
if (hdd_ctx->num_provisioned_addr)
qdf_mem_copy(&custom_mac_addr, &hdd_ctx->provisioned_mac_addr[0].bytes[0], sizeof(tSirMacAddr));
else
qdf_mem_copy(&custom_mac_addr, &hdd_ctx->derived_mac_addr[0].bytes[0], sizeof(tSirMacAddr));
status = sme_set_custom_mac_addr(custom_mac_addr);
}
其中,Wi-Fi MAC地址获取优先级如下:
①从平台驱动获取
②从wlan_mac.bin获取
③根据serialno生成一个02开头的MAC地址
最终生成的MAC地址会写回到FW固件中。
1 从平台驱动获取MAC地址
vendor/qcom/opensource/wlan/qcacld-3.0/core/hdd/src/wlan_hdd_main.c
static int hdd_platform_wlan_mac(struct hdd_context *hdd_ctx)
{
uint32_t no_of_mac_addr, iter;
uint32_t max_mac_addr = QDF_MAX_CONCURRENCY_PERSONA;
uint32_t mac_addr_size = QDF_MAC_ADDR_SIZE;

本文详细介绍了在QCS8250平台上,Android10系统中Wi-Fi MAC地址的获取流程,主要包括从平台驱动、wlan_mac.bin文件以及根据serialno生成MAC地址三个步骤。在hdd_initialize_mac_address接口中,优先级依次为:平台驱动、wlan_mac.bin文件和serialno生成的02开头MAC地址。当无法从前两者获取时,系统将自动生成MAC地址。

4351

被折叠的 条评论
为什么被折叠?



