DM9000驱动理解二(挂起和恢复)

来源:互联网 发布:数据统计分析模板 编辑:程序博客网 时间:2024/06/10 19:30
//pratform设备挂起函数static int dm9000_drv_suspend(struct device *dev){//最终是用到宏container_of,让pdev,指向结构体dev里某个内存空间struct platform_device *pdev = to_platform_device(dev);//platform_get_drvdata最终调用dev_get_drvdata,是platform_set_drvdata的反过程struct net_device *ndev = platform_get_drvdata(pdev);board_info_t *db;if (ndev) {//让结构体指针指向结构体ndev内的的某个xx(xx还没搞懂是哪个变量或者结构体)//这个结构体在probe函数中被设置了。db = netdev_priv(ndev);db->in_suspend = 1;//检测网口是否被打开,主要是检测struct net_device中的state if (!netif_running(ndev))return 0;//挂起设备,主要调用函数netif_tx_stop_all_queues,停止该设备所有工作队列netif_device_detach(ndev);/* only shutdown if not using WoL */if (!db->wake_state)dm9000_shutdown(ndev);}return 0;}//pratform设备恢复函数static int dm9000_drv_resume(struct device *dev){//由此可看出这个几个结构体"包含"关系,struct device里"包含"struct platform_device//struct platform_device里面"包含"struct net_device,struct net_device里面包含board_info_tstruct platform_device *pdev = to_platform_device(dev);struct net_device *ndev = platform_get_drvdata(pdev);board_info_t *db = netdev_priv(ndev);if (ndev) {if (netif_running(ndev)) {/* reset if we were not in wake mode to ensure if * the device was powered off it is in a known state */if (!db->wake_state) {dm9000_reset(db);dm9000_init_dm9000(ndev);}//恢复设备,是netif_device_detach(ndev)的反操作,主要是恢复该设备的//所有工作队列。netif_device_attach(ndev);}db->in_suspend = 0;}return 0;}

原创粉丝点击