wifi驱动总结(1)

时间:2024-02-21 12:16:07

一、wifi平台设备驱动注册过程
Path:Rtw_android.c (rk3399\kernel\drivers\net\wireless\rockchip_wlan\rtl8723au\os_dep\linux);
Static struct Platform_driver wifi_device =
{
  .probe = wifi_probe
  .remove = wifi_remove
  .suspend = wifi_supend
  .resume = wifi_resume
  .driver =
  {
  .name = “bcmdhd_wlan”
  }
}

二、wifi设备注册简单流程
1、设备初始化:static struct platform_device mahimahi_wifi_device;
2、设备注册: platform_device_register(&mahimahi_wifi_device);

三、wifi设备初始化
wifi平台设备驱动在注册时,成功匹配了wifi设备后,会调用的函数wifi_probe(),从而实现wifi设备的初始化;
Path:Rtw_android.c (rk3399\kernel\drivers\net\wireless\rockchip_wlan\rtl8723au\os_dep\linux)
static int wifi_probe(struct platform_device *pdev)
{
wifi_set_power(1, 0);
wifi_set_carddetect(1);
};

四、mmc_rescan()函数
mmc_rescan()是core.c中一个很重要的函数,它遵照SDIO卡协议的SDIO卡启动过程,包括了非激活模式、卡识别模式和数据传输模式三种模式共九种状态的转换。其中的mmc_attach_sdio函数很重要,它是SDIO卡的初始化的起点,主要工作包括:匹配SDIO卡的工作电压,分配并初始化mmc_card结构,然后注册mmc_card到系统中。
此外,mmc_rescan()还具有扫描检测功能,即如果设备产生了中断,mmc_rescan()函数一开始就会再次检测,所有挂接在该host上的所有SDIO设备,确认是否存在,如果不存在就做相应的释放工作,以确保数据的一致性。如果检测到了新的设备,那么它就会创建一个新的mmc_card,初始化并添加该设备。