diff options
| author | Bjorn Helgaas <bhelgaas@google.com> | 2012-08-24 04:31:58 +0400 |
|---|---|---|
| committer | Bjorn Helgaas <bhelgaas@google.com> | 2012-08-24 04:31:58 +0400 |
| commit | e1c171b86baaccab983ded5dfa1663c0981d2520 (patch) | |
| tree | 648ad71d7bd2838678f66d055fcaae654b5e4ddc /include | |
| parent | 0d7614f09c1ebdbaa1599a5aba7593f147bf96ee (diff) | |
| parent | 479e0d485eaab452cf248cd1a9520015023b35b2 (diff) | |
| download | linux-e1c171b86baaccab983ded5dfa1663c0981d2520.tar.xz | |
Merge branch 'pci/jiang-pcie-cap' into next
* pci/jiang-pcie-cap: (40 commits)
rtl8192e: Use PCI Express Capability accessors
et131x: Use PCI Express Capability accessors
rapdio/tsi721: Use PCI Express Capability accessors
drm/radeon: Use PCI Express Capability accessors
[SCSI] qla4xxx: Use PCI Express Capability accessors
[SCSI] qla4xxx: Use PCI Express Capability accessors
IB/qib: Use PCI Express Capability accessors
IB/mthca: Use PCI Express Capability accessors
rtlwifi: Use PCI Express Capability accessors
iwlwifi: Use PCI Express Capability accessors
iwlegacy: Use PCI Express Capability accessors
ath9k: Use PCI Express Capability accessors
atl1c: Use PCI Express Capability accessors
cxgb4: Use PCI Express Capability accessors
cxgb3: Use PCI Express Capability accessors
myri10ge: Use PCI Express Capability accessors
niu: Use PCI Express Capability accessors
mlx4: Use PCI Express Capability accessors
vxge: Use PCI Express Capability accessors
igb: Use PCI Express Capability accessors
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/pci.h | 44 | ||||
| -rw-r--r-- | include/linux/pci_regs.h | 1 |
2 files changed, 44 insertions, 1 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h index 5faa8310eec9..b8667e0548e0 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -254,10 +254,10 @@ struct pci_dev { 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:4; /* PCI-E device/port type */ u8 pcie_mpss:3; /* PCI-E Max Payload Size Supported */ u8 rom_base_reg; /* which config register controls the ROM */ u8 pin; /* which interrupt pin this device uses */ + u16 pcie_flags_reg; /* cached PCI-E Capabilities Register */ struct pci_driver *driver; /* which driver has allocated this device */ u64 dma_mask; /* Mask of the bits of bus address this @@ -816,6 +816,39 @@ static inline int pci_write_config_dword(const struct pci_dev *dev, int where, return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val); } +int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val); +int pcie_capability_read_dword(struct pci_dev *dev, int pos, u32 *val); +int pcie_capability_write_word(struct pci_dev *dev, int pos, u16 val); +int pcie_capability_write_dword(struct pci_dev *dev, int pos, u32 val); +int pcie_capability_clear_and_set_word(struct pci_dev *dev, int pos, + u16 clear, u16 set); +int pcie_capability_clear_and_set_dword(struct pci_dev *dev, int pos, + u32 clear, u32 set); + +static inline int pcie_capability_set_word(struct pci_dev *dev, int pos, + u16 set) +{ + return pcie_capability_clear_and_set_word(dev, pos, 0, set); +} + +static inline int pcie_capability_set_dword(struct pci_dev *dev, int pos, + u32 set) +{ + return pcie_capability_clear_and_set_dword(dev, pos, 0, set); +} + +static inline int pcie_capability_clear_word(struct pci_dev *dev, int pos, + u16 clear) +{ + return pcie_capability_clear_and_set_word(dev, pos, clear, 0); +} + +static inline int pcie_capability_clear_dword(struct pci_dev *dev, int pos, + u32 clear) +{ + return pcie_capability_clear_and_set_dword(dev, pos, clear, 0); +} + /* user-space driven config access */ int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val); int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val); @@ -1650,6 +1683,15 @@ static inline bool pci_is_pcie(struct pci_dev *dev) return !!pci_pcie_cap(dev); } +/** + * pci_pcie_type - get the PCIe device/port type + * @dev: PCI device + */ +static inline int pci_pcie_type(const struct pci_dev *dev) +{ + return (dev->pcie_flags_reg & PCI_EXP_FLAGS_TYPE) >> 4; +} + void pci_request_acs(void); bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags); bool pci_acs_path_enabled(struct pci_dev *start, diff --git a/include/linux/pci_regs.h b/include/linux/pci_regs.h index 7fb75b143755..3958f70f3202 100644 --- a/include/linux/pci_regs.h +++ b/include/linux/pci_regs.h @@ -549,6 +549,7 @@ #define PCI_EXP_LNKCAP2_SLS_8_0GB 0x04 /* Current Link Speed 8.0GT/s */ #define PCI_EXP_LNKCAP2_CROSSLINK 0x100 /* Crosslink supported */ #define PCI_EXP_LNKCTL2 48 /* Link Control 2 */ +#define PCI_EXP_LNKSTA2 50 /* Link Status 2 */ #define PCI_EXP_SLTCTL2 56 /* Slot Control 2 */ /* Extended Capabilities (PCI-X 2.0 and Express) */ |
