|
谁能解释一下rk3288的wifi驱动工作流程?
发表于 2015-11-4 16:19:55
浏览:8542
|
回复:0
打印
只看该作者
[复制链接]
楼主
本帖最后由 pqy 于 2015-11-4 16:21 编辑
我先说说自己的理解:
首先用户往/sys/class/rkwifi/driver写入1,会触发wifi_init_exit_module()函数,这个函数又触发rockchip_wifi_init_module_rkwifi()函数,接着dhd_module_init(),这应该是关键函数了。函数里用了两个semaphore dhd_chipup_sem,dhd_registration_sem分别实现wifi上电和设备注册。dhd_chipup_sem通过好几个函数传递给了sdio_func_reg_notify(),但是这个函数仅仅是对其up了一下,- static struct semaphore *notify_semaphore = NULL;
- int sdio_func_reg_notify(void* semaphore)
- {
- notify_semaphore = semaphore;
- if (notify_semaphore)
- up(notify_semaphore);
- return 0;
- //return sdio_register_driver(&dummy_sdmmc_driver);
- }
复制代码
notify_semaphore是static的,文件其他地方再没用到。
问题1:这么做有什么意义?up了之后,接下来的down_timeout(&dhd_chipup_sem,msecs_to_jiffies(POWERUP_WAIT_MS)) == 0不是一定成立了吗?这部分检测上电是否成功的代码不是多余的吗?
接下来到了设备注册,由dhd_bus_register()开始,这个函数将dhdsdio的probe和disconnect函数传递给bcmsdh_register(),bcmsdh_register()接到参数后,注册sdio驱动。
我的问题是,bcmsdh_sdmmc_probe()函数是怎么触发的?
|
|