Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84313
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 18
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-07 23:50
文章分类
文章存档

2014年(13)

2013年(16)

我的朋友

分类: LINUX

2013-11-21 14:29:33

原文地址:struct pci_driver 作者:intentness

struct pci_driver {
struct list_head node;
char *name;
const struct pci_device_id *id_table; /* must be non-NULL for probe to be called */
int  (*probe)  (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */
void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
int  (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */
int  (*suspend_late) (struct pci_dev *dev, pm_message_t state);
int  (*resume_early) (struct pci_dev *dev);
int  (*resume) (struct pci_dev *dev);                /* Device woken up */
void (*shutdown) (struct pci_dev *dev);
struct pci_error_handlers *err_handler;
struct device_driver driver;
struct pci_dynids dynids;
};

1、 struct list_head node  这是链表的头

2、char* name 驱动的名字,它必须是唯一的,在内核中所有的PCI驱动里面,通常被设置为各驱动模块名字相同,它显示在在sysfs中的/sysbus/pci/drivers/下。

3、const struct pci_device_id  *id_table  是一个指向pci设备的id编号的指针,用于描述当前PCI设备的编号,一般用做probe的输入参数。

4、int (*probe) (struct pci_dev  *dev, const struct pci_device_id *id) 指向PCI驱动中的probe函数指针,这个函数被PCI核心调用,当它有一个它认为这个驱动想控制的 struct pci_dev时,一个指向pci_device_id的指针,PCI核心用来做这个决定,也被告传递给这个函数,如果这个PCI驱动需要这个传递给它的struct pci_dev, 它应当正初始化这个设备,并返回0, 如果这个驱动不想拥有这个设备,或者产生一个错误,它应当返回一个负的错误值。

5、void (*remove) (struct pci_dev  *dev)  指向PCI核心在struct pci_dev被告从系统中去除时调用的函数指针,或者当PCI驱动被从内核中卸载时。

6、int (*suspend) (struct pci_dev  *dev, pm_message_t state)  当struct pci_dev被挂起时PCI核心调用的函数指针,挂起状态在state 变量时传递,这个函数是可选的

7、int (*resume) (struct pci_def  *dev) 当pci_dev被告恢复时PCI核心调用的函数指针,它的调用一定是在suspend函数执行之后,这个函数可选。

8、void (*shutdown) (struct pci_dev *dev) 当此设备需要关闭时,此函数指针所指向的函数将会被调用。

9、int (*suspend_late) (struct pci_dev *dev, pm_message_t  state)  与suspend功能类似

10、int (*resume_early) (struct pci_dev  *dev) 与resume功能类似

11、struct pci_error_handlers  *err_handler;

12、struct device_driver   driver;

13、struct pci_dynids  dynids;
 




要创建一个正确的struct pci_driver结构,只需要4个字段被正确初始化:
static struct pci_driver  test_pci_driver = {
.name = "test_pci",
.id_table = test_ids,
.probe = test_probe,
.remove = test_remove,
};

阅读(984) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~