资讯详情

pm8001驱动内核代码分析(三)pm8001_init和pm8001_exit函数

基础阅读:如何将系统文章添加到主机适配器中?SCSI子系统(4)向系统添加适配器

pm8001_init

主要申请工作队列,Sas layer 回调函数注册,pci驱动注册到设备模型。

drivers/scsi/pm8001/pm8001_init.c接口代码赏析:

/**                                                                                                                *  pm8001_init - initialize scsi transport template                                                               */                                                                                                               static int __init pm8001_init(void)                                                                               {                                                                                                                     int rc = -ENOMEM;                                                                                                                                                                                                                   pm8001_wq = alloc_workqueue("pm80xx", 0, 0);                                                                      if (!pm8001_wq)                                                                                                       goto err;                                                                                                                                                                                                                       pm8001_id = 0;                                                                                                    pm8001_stt = sas_domain_attach_transport(&pm8001_transport_ops);                                                  if (!pm8001_stt)                                                                                                      goto err_wq;                                                                                                  rc = pci_register_driver(&pm8001_pci_driver);                                                                     if (rc)                                                                                                               goto err_tp;                                                                                                  return 0;                                                                                                                                                                                                                       err_tp:                                                                                                               sas_release_transport(pm8001_stt);                                                                            err_wq:                                                                                                               destroy_workqueue(pm8001_wq);                                                                                 err:                                                                                                                  return rc;                                                                                                    }     

1.alloc_workqueue

创建一个workqueue, 中间参数为0,默认配置

struct workqueue_struct *pm8001_wq;  pm8001_wq = alloc_workqueue("pm80xx", 0, 0);                                                                   

使用地点:调用工作处理函数pm8001_work_fn

drivers/scsi/pm8001/pm8001_hwi.c

int pm8001_handle_event(struct pm8001_hba_info *pm8001_ha, void *data,                    int handler) {        struct pm8001_work *pw;     int ret = 0;          pw = kmalloc(sizeof(struct pm8001_work), GFP_ATOMIC);     if (pw) {         pw->pm8001_ha = pm8001_ha;         pw->data = data;         pw->handler = handler;         INIT_WORK(&pw->work, pm8001_work_fn);         queue_work(pm8001_wq, &pw->work);     } else         ret = -ENOMEM;      return ret; } 

2.sas_domain_attach_transport

3.pci_register_driver

标签: pm80e贴片电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司