|
@@ -17,6 +17,7 @@
|
|
* Under PCI, each device has 256 bytes of configuration address space,
|
|
* Under PCI, each device has 256 bytes of configuration address space,
|
|
* of which the first 64 bytes are standardized as follows:
|
|
* of which the first 64 bytes are standardized as follows:
|
|
*/
|
|
*/
|
|
|
|
+#define PCI_STD_HEADER_SIZEOF 64
|
|
#define PCI_VENDOR_ID 0x00 /* 16 bits */
|
|
#define PCI_VENDOR_ID 0x00 /* 16 bits */
|
|
#define PCI_DEVICE_ID 0x02 /* 16 bits */
|
|
#define PCI_DEVICE_ID 0x02 /* 16 bits */
|
|
#define PCI_COMMAND 0x04 /* 16 bits */
|
|
#define PCI_COMMAND 0x04 /* 16 bits */
|
|
@@ -1311,6 +1312,51 @@ pci_addr_t dm_pci_phys_to_bus(struct udevice *dev, phys_addr_t addr,
|
|
*/
|
|
*/
|
|
void *dm_pci_map_bar(struct udevice *dev, int bar, int flags);
|
|
void *dm_pci_map_bar(struct udevice *dev, int bar, int flags);
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * dm_pci_find_capability() - find a capability
|
|
|
|
+ *
|
|
|
|
+ * Tell if a device supports a given PCI capability. Returns the
|
|
|
|
+ * address of the requested capability structure within the device's
|
|
|
|
+ * PCI configuration space or 0 in case the device does not support it.
|
|
|
|
+ *
|
|
|
|
+ * Possible values for @cap:
|
|
|
|
+ *
|
|
|
|
+ * %PCI_CAP_ID_MSI Message Signalled Interrupts
|
|
|
|
+ * %PCI_CAP_ID_PCIX PCI-X
|
|
|
|
+ * %PCI_CAP_ID_EXP PCI Express
|
|
|
|
+ * %PCI_CAP_ID_MSIX MSI-X
|
|
|
|
+ *
|
|
|
|
+ * See PCI_CAP_ID_xxx for the complete capability ID codes.
|
|
|
|
+ *
|
|
|
|
+ * @dev: PCI device to query
|
|
|
|
+ * @cap: capability code
|
|
|
|
+ * @return: capability address or 0 if not supported
|
|
|
|
+ */
|
|
|
|
+int dm_pci_find_capability(struct udevice *dev, int cap);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * dm_pci_find_ext_capability() - find an extended capability
|
|
|
|
+ *
|
|
|
|
+ * Tell if a device supports a given PCI express extended capability.
|
|
|
|
+ * Returns the address of the requested extended capability structure
|
|
|
|
+ * within the device's PCI configuration space or 0 in case the device
|
|
|
|
+ * does not support it.
|
|
|
|
+ *
|
|
|
|
+ * Possible values for @cap:
|
|
|
|
+ *
|
|
|
|
+ * %PCI_EXT_CAP_ID_ERR Advanced Error Reporting
|
|
|
|
+ * %PCI_EXT_CAP_ID_VC Virtual Channel
|
|
|
|
+ * %PCI_EXT_CAP_ID_DSN Device Serial Number
|
|
|
|
+ * %PCI_EXT_CAP_ID_PWR Power Budgeting
|
|
|
|
+ *
|
|
|
|
+ * See PCI_EXT_CAP_ID_xxx for the complete extended capability ID codes.
|
|
|
|
+ *
|
|
|
|
+ * @dev: PCI device to query
|
|
|
|
+ * @cap: extended capability code
|
|
|
|
+ * @return: extended capability address or 0 if not supported
|
|
|
|
+ */
|
|
|
|
+int dm_pci_find_ext_capability(struct udevice *dev, int cap);
|
|
|
|
+
|
|
#define dm_pci_virt_to_bus(dev, addr, flags) \
|
|
#define dm_pci_virt_to_bus(dev, addr, flags) \
|
|
dm_pci_phys_to_bus(dev, (virt_to_phys(addr)), (flags))
|
|
dm_pci_phys_to_bus(dev, (virt_to_phys(addr)), (flags))
|
|
#define dm_pci_bus_to_virt(dev, addr, flags, len, map_flags) \
|
|
#define dm_pci_bus_to_virt(dev, addr, flags, len, map_flags) \
|