You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ra...@apache.org on 2024/01/20 13:10:28 UTC
(nuttx) 04/06: drivers/pcie: cosmetics
This is an automated email from the ASF dual-hosted git repository.
raiden00 pushed a commit to branch pci
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 25002adf9f81d3e2543c38b3dae9b63f48458420
Author: raiden00pl <ra...@railab.me>
AuthorDate: Sat Jan 20 13:40:26 2024 +0100
drivers/pcie: cosmetics
---
drivers/pcie/pcie_root.c | 124 +++++++++++++++++++++++++++---------------
include/nuttx/pcie/pcie.h | 135 ++++++++++++++++++++++++++++++++++------------
2 files changed, 184 insertions(+), 75 deletions(-)
diff --git a/drivers/pcie/pcie_root.c b/drivers/pcie/pcie_root.c
index b85c5862fa..8ee6da1a49 100644
--- a/drivers/pcie/pcie_root.c
+++ b/drivers/pcie/pcie_root.c
@@ -39,7 +39,7 @@
* Public Data
****************************************************************************/
-struct pcie_dev_type_s *pci_device_types[] =
+FAR struct pcie_dev_type_s *g_pci_device_types[] =
{
#ifdef CONFIG_VIRT_QEMU_PCI_TEST
&pcie_type_qemu_pci_test,
@@ -47,6 +47,19 @@ struct pcie_dev_type_s *pci_device_types[] =
NULL,
};
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+static struct pcie_dev_type_s g_tmp_type =
+{
+ PCI_ID_ANY, /* vendor */
+ PCI_ID_ANY, /* device */
+ PCI_ID_ANY, /* class_rev */
+ "Unknown", /* name */
+ NULL, /* probe */
+};
+
/****************************************************************************
* Public Functions
****************************************************************************/
@@ -70,29 +83,27 @@ struct pcie_dev_type_s *pci_device_types[] =
int pci_enumerate(FAR struct pcie_bus_s *bus,
FAR struct pcie_dev_type_s **types)
{
- unsigned int bdf;
- uint16_t vid;
- uint16_t id;
- uint16_t rev;
struct pcie_dev_s tmp_dev;
- struct pcie_dev_type_s tmp_type =
- {
- .name = "Unknown",
- .vendor = PCI_ID_ANY,
- .device = PCI_ID_ANY,
- .class_rev = PCI_ID_ANY,
- .probe = NULL,
- };
+ unsigned int bdf;
+ uint16_t vid;
+ uint16_t id;
+ uint16_t rev;
+ int i;
if (!bus)
+ {
return -EINVAL;
+ }
+
if (!types)
+ {
return -EINVAL;
+ }
for (bdf = 0; bdf < CONFIG_PCIE_MAX_BDF; bdf++)
{
tmp_dev.bus = bus;
- tmp_dev.type = &tmp_type;
+ tmp_dev.type = &g_tmp_type;
tmp_dev.bdf = bdf;
bus->ops->pci_cfg_read(&tmp_dev, PCI_CFG_VENDOR_ID, &vid, 2);
@@ -100,13 +111,15 @@ int pci_enumerate(FAR struct pcie_bus_s *bus,
bus->ops->pci_cfg_read(&tmp_dev, PCI_CFG_REVERSION, &rev, 2);
if (vid == PCI_ID_ANY)
- continue;
+ {
+ continue;
+ }
pciinfo("[%02x:%02x.%x] Found %04x:%04x, class/reversion %08x\n",
bdf >> 8, (bdf >> 3) & 0x1f, bdf & 0x3,
vid, id, rev);
- for (int i = 0; types[i] != NULL; i++)
+ for (i = 0; types[i] != NULL; i++)
{
if (types[i]->vendor == PCI_ID_ANY ||
types[i]->vendor == vid)
@@ -130,6 +143,7 @@ int pci_enumerate(FAR struct pcie_bus_s *bus,
device probe function\n",
bdf >> 8, (bdf >> 3) & 0x1f, bdf & 0x3);
}
+
break;
}
}
@@ -160,7 +174,7 @@ int pci_enumerate(FAR struct pcie_bus_s *bus,
int pcie_initialize(FAR struct pcie_bus_s *bus)
{
- return pci_enumerate(bus, pci_device_types);
+ return pci_enumerate(bus, g_pci_device_types);
}
/****************************************************************************
@@ -214,25 +228,31 @@ int pci_enable_device(FAR struct pcie_dev_s *dev)
int pci_find_cap(FAR struct pcie_dev_s *dev, uint16_t cap)
{
- uint8_t pos = PCI_CFG_CAP_PTR - 1;
+ uint8_t pos = PCI_CFG_CAP_PTR - 1;
uint16_t status;
- uint8_t rcap;
+ uint8_t rcap;
dev->bus->ops->pci_cfg_read(dev, PCI_CFG_STATUS, &status, 2);
if (!(status & PCI_STS_CAPS))
+ {
return -EINVAL;
+ }
while (1)
{
dev->bus->ops->pci_cfg_read(dev, pos + 1, &pos, 1);
if (pos == 0)
+ {
return -EINVAL;
+ }
dev->bus->ops->pci_cfg_read(dev, pos, &rcap, 1);
if (rcap == cap)
+ {
return pos;
+ }
}
}
@@ -252,11 +272,12 @@ int pci_find_cap(FAR struct pcie_dev_s *dev, uint16_t cap)
*
****************************************************************************/
-int pci_get_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint32_t *ret)
+int pci_get_bar(FAR struct pcie_dev_s *dev, uint32_t bar, FAR uint32_t *ret)
{
if (bar > 5)
+ {
return -EINVAL;
+ }
dev->bus->ops->pci_cfg_read(dev, PCI_CFG_BAR + bar * 4, ret, 4);
@@ -279,15 +300,16 @@ int pci_get_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
*
****************************************************************************/
-int pci_get_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint64_t *ret)
+int pci_get_bar64(FAR struct pcie_dev_s *dev, uint32_t bar, FAR uint64_t *ret)
{
- if (bar > 4 || ((bar % 2) != 0))
- return -EINVAL;
-
uint32_t barmem1;
uint32_t barmem2;
+ if (bar > 4 || ((bar % 2) != 0))
+ {
+ return -EINVAL;
+ }
+
dev->bus->ops->pci_cfg_read(dev, PCI_CFG_BAR + bar * 4, &barmem1, 4);
dev->bus->ops->pci_cfg_read(dev, PCI_CFG_BAR + bar * 4 + 4, &barmem2, 4);
@@ -312,11 +334,12 @@ int pci_get_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
*
****************************************************************************/
-int pci_set_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint32_t val)
+int pci_set_bar(FAR struct pcie_dev_s *dev, uint32_t bar, uint32_t val)
{
if (bar > 5)
+ {
return -EINVAL;
+ }
dev->bus->ops->pci_cfg_write(dev, PCI_CFG_BAR + bar * 4, &val, 4);
@@ -339,15 +362,16 @@ int pci_set_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
*
****************************************************************************/
-int pci_set_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint64_t val)
+int pci_set_bar64(FAR struct pcie_dev_s *dev, uint32_t bar, uint64_t val)
{
- if (bar > 4 || ((bar % 2) != 0))
- return -EINVAL;
-
uint32_t barmem1 = (uint32_t)val;
uint32_t barmem2 = (uint32_t)(val >> 32);
+ if (bar > 4 || ((bar % 2) != 0))
+ {
+ return -EINVAL;
+ }
+
dev->bus->ops->pci_cfg_write(dev, PCI_CFG_BAR + bar * 4, &barmem1, 4);
dev->bus->ops->pci_cfg_write(dev, PCI_CFG_BAR + bar * 4 + 4, &barmem2, 4);
@@ -372,27 +396,35 @@ int pci_set_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
****************************************************************************/
int pci_map_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
- unsigned long length, uint32_t *ret)
+ unsigned long length, FAR uint32_t *ret)
{
+ uint32_t barmem;
+
if (bar > 5)
+ {
return -EINVAL;
-
- uint32_t barmem;
+ }
dev->bus->ops->pci_cfg_read(dev, PCI_CFG_BAR + bar * 4, &barmem, 4);
if (((bar % 2) == 0 &&
(barmem & PCI_BAR_64BIT) == PCI_BAR_64BIT) ||
(barmem & PCI_BAR_IO) == PCI_BAR_IO)
+ {
return -EINVAL;
+ }
if (!dev->bus->ops->pci_map_bar)
+ {
return -EINVAL;
+ }
dev->bus->ops->pci_map_bar(dev, barmem, length);
if (ret)
- *ret = barmem;
+ {
+ *ret = barmem;
+ }
return OK;
}
@@ -415,32 +447,40 @@ int pci_map_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
****************************************************************************/
int pci_map_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
- unsigned long length, uint64_t *ret)
+ unsigned long length, FAR uint64_t *ret)
{
- if (bar > 4 || ((bar % 2) != 0))
- return -EINVAL;
-
uint32_t barmem1;
uint32_t barmem2;
uint64_t barmem;
+ if (bar > 4 || ((bar % 2) != 0))
+ {
+ return -EINVAL;
+ }
+
dev->bus->ops->pci_cfg_read(dev, PCI_CFG_BAR + bar * 4, &barmem1, 4);
if ((barmem1 & PCI_BAR_64BIT) != PCI_BAR_64BIT ||
(barmem1 & PCI_BAR_IO) == PCI_BAR_IO)
+ {
return -EINVAL;
+ }
dev->bus->ops->pci_cfg_read(dev, PCI_CFG_BAR + bar * 4 + 4, &barmem2, 4);
barmem = ((uint64_t)barmem2 << 32) | barmem1;
if (!dev->bus->ops->pci_map_bar64)
+ {
return -EINVAL;
+ }
dev->bus->ops->pci_map_bar64(dev, barmem, length);
if (ret)
- *ret = barmem;
+ {
+ *ret = barmem;
+ }
return OK;
}
diff --git a/include/nuttx/pcie/pcie.h b/include/nuttx/pcie/pcie.h
index fffc791a2d..066c3b7e16 100644
--- a/include/nuttx/pcie/pcie.h
+++ b/include/nuttx/pcie/pcie.h
@@ -107,26 +107,99 @@ struct pcie_dev_s;
struct pcie_bus_ops_s
{
- CODE int (*pcie_enumerate)(FAR struct pcie_bus_s *bus,
- FAR struct pcie_dev_type_s **types);
-
- CODE int (*pci_cfg_write)(FAR struct pcie_dev_s *dev, uintptr_t addr,
- FAR const void *buffer, unsigned int size);
-
- CODE int (*pci_cfg_read)(FAR struct pcie_dev_s *dev, uintptr_t addr,
- FAR void *buffer, unsigned int size);
-
- CODE int (*pci_map_bar)(FAR struct pcie_dev_s *dev, uint32_t addr,
+ /* Write 8, 16, 32, 64 bits data to PCI-E configuration space of device
+ * specified by dev.
+ *
+ * Input Parameters:
+ * bdf - Device private data
+ * buffer - A pointer to the read-only buffer of data to be written
+ * size - The number of bytes to send from the buffer
+ *
+ * Returned Value:
+ * 0: success, <0: A negated errno
+ *
+ */
+
+ CODE int (*pci_cfg_write)(FAR struct pcie_dev_s *dev, uintptr_t addr,
+ FAR const void *buffer, unsigned int size);
+
+ /* Read 8, 16, 32, 64 bits data to PCI-E configuration space of device
+ * specified by dev.
+ *
+ * Input Parameters:
+ * dev - Device private data
+ * buffer - A pointer to a buffer to receive the data from the device
+ * size - The requested number of bytes to be read
+ *
+ * Returned Value:
+ * 0: success, <0: A negated errno
+ *
+ */
+
+ CODE int (*pci_cfg_read)(FAR struct pcie_dev_s *dev, uintptr_t addr,
+ FAR void *buffer, unsigned int size);
+
+ /* Map address in a 32 bits bar in the memory address space
+ *
+ * Input Parameters:
+ * dev - Device private data
+ * bar - Bar number
+ * length - Map length, multiple of PAGE_SIZE
+ * ret - Bar Content
+ *
+ * Returned Value:
+ * 0: success, <0: A negated errno
+ *
+ */
+
+ CODE int (*pci_map_bar)(FAR struct pcie_dev_s *dev, uint32_t addr,
+ unsigned long length);
+
+ /* Map address in a 64 bits bar in the memory address space
+ *
+ * Input Parameters:
+ * dev - Device private data
+ * bar - Bar number
+ * length - Map length, multiple of PAGE_SIZE
+ * ret - Bar Content
+ *
+ * Returned Value:
+ * 0: success, <0: A negated errno
+ *
+ */
+
+ CODE int (*pci_map_bar64)(FAR struct pcie_dev_s *dev, uint64_t addr,
unsigned long length);
- CODE int (*pci_map_bar64)(FAR struct pcie_dev_s *dev, uint64_t addr,
- unsigned long length);
-
- CODE int (*pci_msi_register)(FAR struct pcie_dev_s *dev,
- uint16_t vector);
-
- CODE int (*pci_msix_register)(FAR struct pcie_dev_s *dev,
- uint32_t vector, uint32_t index);
+ /* Map device MSI vectors to a platform IRQ vector
+ *
+ * Input Parameters:
+ * dev - Device
+ * vector - IRQ number of the platform
+ *
+ * Returned Value:
+ * <0: Mapping failed
+ * 0: Mapping succeed
+ *
+ */
+
+ CODE int (*pci_msi_register)(FAR struct pcie_dev_s *dev, uint16_t vector);
+
+ /* Map a device MSI-X vector to a platform IRQ vector
+ *
+ * Input Parameters:
+ * dev - Device
+ * vector - IRQ number of the platform
+ * index - Device MSI-X vector number
+ *
+ * Returned Value:
+ * <0: Mapping failed
+ * 0: Mapping succeed
+ *
+ */
+
+ CODE int (*pci_msix_register)(FAR struct pcie_dev_s *dev,
+ uint32_t vector, uint32_t index);
};
/* PCIE bus private data. */
@@ -140,10 +213,10 @@ struct pcie_bus_s
struct pcie_dev_type_s
{
- uint16_t vendor; /* Device vendor ID */
- uint16_t device; /* Device ID */
- uint32_t class_rev; /* Device reversion */
- const char *name; /* Human readable name */
+ uint16_t vendor; /* Device vendor ID */
+ uint16_t device; /* Device ID */
+ uint32_t class_rev; /* Device reversion */
+ FAR const char *name; /* Human readable name */
/* Call back function when a device is probed */
@@ -157,7 +230,7 @@ struct pcie_dev_s
{
FAR struct pcie_bus_s *bus;
FAR struct pcie_dev_type_s *type;
- uint16_t bdf;
+ uint16_t bdf;
};
/****************************************************************************
@@ -246,7 +319,7 @@ int pci_find_cap(FAR struct pcie_dev_s *dev, uint16_t cap);
****************************************************************************/
int pci_map_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
- unsigned long length, uint32_t *ret);
+ unsigned long length, FAR uint32_t *ret);
/****************************************************************************
* Name: pci_map_bar64
@@ -266,7 +339,7 @@ int pci_map_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
****************************************************************************/
int pci_map_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
- unsigned long length, uint64_t *ret);
+ unsigned long length, FAR uint64_t *ret);
/****************************************************************************
* Name: pci_get_bar
@@ -284,8 +357,7 @@ int pci_map_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
*
****************************************************************************/
-int pci_get_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint32_t *ret);
+int pci_get_bar(FAR struct pcie_dev_s *dev, uint32_t bar, FAR uint32_t *ret);
/****************************************************************************
* Name: pci_get_bar64
@@ -303,8 +375,7 @@ int pci_get_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
*
****************************************************************************/
-int pci_get_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint64_t *ret);
+int pci_get_bar64(FAR struct pcie_dev_s *dev, uint32_t bar, uint64_t *ret);
/****************************************************************************
* Name: pci_set_bar
@@ -322,8 +393,7 @@ int pci_get_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
*
****************************************************************************/
-int pci_set_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint32_t val);
+int pci_set_bar(FAR struct pcie_dev_s *dev, uint32_t bar, FAR uint32_t val);
/****************************************************************************
* Name: pci_set_bar64
@@ -341,8 +411,7 @@ int pci_set_bar(FAR struct pcie_dev_s *dev, uint32_t bar,
*
****************************************************************************/
-int pci_set_bar64(FAR struct pcie_dev_s *dev, uint32_t bar,
- uint64_t val);
+int pci_set_bar64(FAR struct pcie_dev_s *dev, uint32_t bar, uint64_t val);
#undef EXTERN
#if defined(__cplusplus)