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

基础阅读:主机适配器怎么加入系统的文章《深入浅出SCSI子系统(四)添加适配器到系统》

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值