1 hl_device_init全景 device_early_init->sw_init->hw_init->device_late_init //main initialization function for habanalabs device int hl_device_init(struct hl_device *hdev) { /* Initialize ASIC function pointers and perform early init */ rc = device_early_init(hdev); /* Start calling A...
WDFDEVICE_INIT结构是框架定义和分配的不透明结构。 语法 C++ structWDFDEVICE_INIT{;// Reserved.}; 成员 函数和筛选器驱动程序接收指向此结构的指针作为 EvtDriverDeviceAdd 回调函数的输入,或作为 WdfControlDeviceInitAllocate的返回值。 总线驱动程序接收结构指针作为 EvtChildListCreateDevice 回调函数的输入,或作为...
传入参数 dev, 找到 dev 中 memory-region 对应的 reserved memory .然后调用 reserved_memory 对象的 ops->device_init( reserved_memory * rmem, device * dev ); 81staticinlineintof_reserved_mem_device_init(structdevice *dev)82{83returnof_reserved_mem_device_init_by_idx(dev, dev->of_node,0);...
这些都是电源管理部分的核心数据结构,can_wakeup为1时 表明一个设备可以被唤醒,设备驱动为了支持linux中的电源管理,有责任调用device_init_wakeup()来初始化can_wakeup。而should_wakeup则是在设备的 电源状态发生变化时 被device_may_wakeup()用来测试,测试它该不该变化。 can_wakeup,标识本设备是否具有唤醒能力。只...
static inline int device_set_wakeup_enable(struct device *dev, bool enable) { dev->power.should_wakeup = enable; return 0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 要认识device_init_wakeup(),首先需要知道两个概念:can_wakeup和should_wakeup。这两个家伙从哪里来的?看struct device结构体,...
对于FDO 设备,必须先调用框架设备对象初始化方法和框架 FDO 初始化方法,然后驱动程序才能为设备对象调用 WdfDeviceCreate 方法。对于FDO 设备,在驱动程序为框架设备对象调用 WdfDeviceCreate 后,无法调用框架设备对象初始化方法和框架 FDO 初始化方法(将信息存储在WDFDEVICE_INIT结构中)。
使用时注意先后顺序,先调用device_init_wakeup,再使用dev_pm_set_wake_irq,一般在模块的初始化函数或驱动的probe函数里面使用这两个API设置设备的唤醒属性。
staticinline intdevice_init_wakeup(struct device*dev,bool val){device_set_wakeup_capable(dev,val);//设置设备能不能被唤醒device_set_wakeup_enable(dev,val);//设置设备使不使用唤醒;return0;} // 设备模型中的 所有设备 都有两个标志来控制 唤醒事件(可使得设备或系统退出低功耗状态)。
指向框架分配的WDFDEVICE_INIT结构的指针。 返回值 如果操作成功,则返回STATUS_SUCCESS。 否则, 将返回相应的NTSTATUS代码。 注解 客户端驱动程序必须在调用WdfDeviceInitSetPnpPowerEventCallbacks后调用此函数。 此函数使用包含指向客户端驱动程序实现的 PnP 和电源回调函数的指针的框架WDFDEVICE_INIT结构 ...
PWDFDEVICE_INIT deviceInit =NULL; NTSTATUS status; WDF_OBJECT_ATTRIBUTES objectAttribs; deviceInit = WdfControlDeviceInitAllocate( hDriver, &SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RW_RES_R );if(deviceInit ==NULL) { status = STATUS_INSUFFICIENT_RESOURCES;gotoError; } status = WdfDeviceInit...