• linux驱动- PCI-E设备驱动-PCIE设备结构体


    /*
    * The pci_dev structure is used to describe PCI devices.
    */
    struct pci_dev {
        struct list_head bus_list;/* node in per-bus list */
        struct pci_bus *bus;/* bus this device is on */
        struct pci_bus *subordinate;/* bus this device bridges to */
         
        void*sysdata;/* hook for sys-specific extension */
        struct proc_dir_entry *procent;/* device entry in /proc/bus/pci */
        struct pci_slot *slot;/* Physical slot this device is in */
         
        unsignedint devfn;/* encoded device & function index */
        unsignedshort vendor;
        unsignedshort device;
        unsignedshort subsystem_vendor;
        unsignedshort subsystem_device;
        unsignedintclass;/* 3 bytes: (base,sub,prog-if) */
        u8 revision;/* PCI revision, low byte of class word */
        u8 hdr_type;/* PCI header type (`multi' flag masked out) */
        u8 pcie_cap;/* PCI-E capability offset */
        u8 pcie_type;/* PCI-E device/port type */
        u8 rom_base_reg;/* which config register controls the ROM */
        u8 pin;/* which interrupt pin this device uses */
         
        struct pci_driver *driver;/* which driver has allocated this device */
        u64 dma_mask;/* Mask of the bits of bus address this
        device implements. Normally this is
        0xffffffff. You only need to change
        this if your device has broken DMA
        or supports 64-bit transfers. */
         
        struct device_dma_parameters dma_parms;
         
        pci_power_t current_state;/* Current operating state. In ACPI-speak,
        this is D0-D3, D0 being fully functional,
        and D3 being off. */
        int pm_cap;/* PM capability offset in the
        configuration space */
        unsignedint pme_support:5;/* Bitmask of states from which PME#
        can be generated */
        unsignedint pme_interrupt:1;
        unsignedint d1_support:1;/* Low power state D1 is supported */
        unsignedint d2_support:1;/* Low power state D2 is supported */
        unsignedint no_d1d2:1;/* Only allow D0 and D3 */
        unsignedint mmio_always_on:1;/* disallow turning off io/mem
        decoding during bar sizing */
        unsignedint wakeup_prepared:1;
        unsignedint d3_delay;/* D3->D0 transition time in ms */
         
        #ifdef CONFIG_PCIEASPM
        struct pcie_link_state *link_state;/* ASPM link state. */
        #endif
         
        pci_channel_state_t error_state;/* current connectivity state */
        struct device dev;/* Generic device interface */
         
        int cfg_size;/* Size of configuration space */
         
        /*
        * Instead of touching interrupt line and base address registers  使用储存在irq的值取代直接接触中断线和基地址寄存器。
        * directly, use the values stored here. They might be different!
        */
        unsignedint irq;
        struct resource resource[DEVICE_COUNT_RESOURCE];/* I/O and memory regions + expansion ROMs */
        resource_size_t fw_addr[DEVICE_COUNT_RESOURCE];/* FW-assigned addr */
         
        /* These fields are used by common fixups */
        unsignedint transparent:1;/* Transparent PCI bridge */
        unsignedint multifunction:1;/* Part of multi-function device */
        /* keep track of device state */
        unsignedint is_added:1;
        unsignedint is_busmaster:1;/* device is busmaster */
        unsignedint no_msi:1;/* device may not use msi */
        unsignedint block_ucfg_access:1;/* userspace config space access is blocked */
        unsignedint broken_parity_status:1;/* Device generates false positive parity */
        unsignedint irq_reroute_variant:2;/* device needs IRQ rerouting variant */
        unsignedint msi_enabled:1;
        unsignedint msix_enabled:1;
        unsignedint ari_enabled:1;/* ARI forwarding */
        unsignedint is_managed:1;
        unsignedint is_pcie:1;/* Obsolete. Will be removed.
        Use pci_is_pcie() instead */
        unsignedint needs_freset:1;/* Dev requires fundamental reset */
        unsignedint state_saved:1;
        unsignedint is_physfn:1;
        unsignedint is_virtfn:1;
        unsignedint reset_fn:1;
        unsignedint is_hotplug_bridge:1;
        unsignedint __aer_firmware_first_valid:1;
        unsignedint __aer_firmware_first:1;
        pci_dev_flags_t dev_flags;
        atomic_t enable_cnt;/* pci_enable_device has been called */
         
        u32 saved_config_space[16];/* config space saved at suspend time */
        struct hlist_head saved_cap_space;
        struct bin_attribute *rom_attr;/* attribute descriptor for sysfs ROM entry */
        int rom_attr_enabled;/* has display of the rom attribute been enabled? */
        struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE];/* sysfs file for resources */
        struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE];/* sysfs file for WC mapping of resources */
        #ifdef CONFIG_PCI_MSI
        struct list_head msi_list;
        #endif
        struct pci_vpd *vpd;
        #ifdef CONFIG_PCI_IOV
        union{
        struct pci_sriov *sriov;/* SR-IOV capability related */
        struct pci_dev *physfn;/* the PF this VF is associated with */
        };
        struct pci_ats *ats;/* Address Translation Service */
        #endif
    };
  • 相关阅读:
    pycharm鼠标光标变成黑色方块
    华章8月书讯,夏日静心好读书
    测试既是一门科学,也是一门艺术
    计算机科学与技术专业教指委将成立“物联网工程专业教学研究专家组”
    【七夕送好书】转微博获赠书!
    孟岩谈《C++程序设计原理与实践》
    【有奖活动】华章IT15周年,评选您心中最有影响力的10种图书
    《测试之美》连载:创建开源的QA社区
    Web前端开发之“常见模块你真的很了解吗?”
    测试驱动开发简介
  • 原文地址:https://www.cnblogs.com/starsKing/p/6206534.html
Copyright © 2020-2023  润新知