【Linux网络源码3】PCI层和网络接口卡

PCI层和网络接口卡

一、主要数据结构

  1. pci_driver
struct pci_driver {
    // 表头指针
	struct list_head node;

    // 驱动程序的名称
	const char *name;

    // 一个ID向量,内核用于把一些设备关联到次驱动程序
	const struct pci_device_id *id_table;	/* must be non-NULL for probe to be called */

    // 此函数应开启硬件、分配net_drivice结构没初始化并注册新设备。
	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;
};
  • int (*suspend) (struct pci_dev *dev, pm_message_t state);
    主要停止设备出口队列,是的该设备无法再传输
  • int (*resume) (struct pci_dev *dev);
    重启出口队列,是的该设备得以再次传输
  1. pci_device_id
struct pci_device_id {
    // 用于识别设备
	__u32 vendor, device;		/* Vendor and device ID or PCI_ANY_ID*/

    // 不常用到
	__u32 subvendor, subdevice;	/* Subsystem ID's or PCI_ANY_ID */

    // 该设备属于的类
	__u32 class, class_mask;	/* (class,subclass,prog-if) triplet */

    // 驱动程序使用的一个私有参数
	kernel_ulong_t driver_data;	/* Data private to the driver */
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值