linux中PCI子系統補充

不少網絡接口卡都是PCI設備,必須與Linux PCI子系統協同工做。新的PCI設備是PCI Express設備.PCI設備都有隻讀的配置空間,能夠經過lspci命令來讀取。node

       #lspci -xxx能夠查看PCI配置空間內容的十六進制表示linux

       #lspci -xxxx能夠查看擴展PCI配置空間內容的十六進制表示網絡

固然linux PCI API提供了3個讀取配置空間的方法,位於文件對象

drivers/pci/access.c中:接口

pci_read_config_byte, pci_read_config_word, pci_read_config_dwordip

還有寫配置的方法ci

pci_write_config_byte, pci_write _config_word, pci_write _config_dwordrem

       在Linux PCI子系統中,PCI設備用pci_device_id對象表示,位於文件it

include/linux/mod_devicetable.h:io

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 */

};

       每一個pci設備驅動程序都聲明瞭一個pci_drier對象,位於文件include/linux/pci.h

struct pci_driver {

        struct list_head node;

        const 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);

        int (*sriov_configure) (struct pci_dev *dev, int num_vfs); /* PF pdev */

        const struct pci_error_handlers *err_handler;

        const struct attribute_group **groups;

        struct device_driver    driver;

        struct pci_dynids dynids;

}; 

相關文章
相關標籤/搜索