From ef426851ea3cc4aaf2beda8862cc0e0953cf4b6c Mon Sep 17 00:00:00 2001 From: zhuzhuzhu <945386260@qq.com> Date: Sat, 5 Oct 2024 14:30:52 +0800 Subject: [PATCH] [feat] add pci api,the pci/pcie driver add pci api,the pci/pcie driver writer can use this to get resource of current device with flag,there are three flag : 1. PCI_BUS_REGION_F_MEM it mean memory space 2. PCI_BUS_REGION_F_IO it mean io space 3. PCI_BUS_REGION_F_PREFETCH it mean prefetchable memory --- components/drivers/include/drivers/pci.h | 2 +- components/drivers/pci/pci.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/components/drivers/include/drivers/pci.h b/components/drivers/include/drivers/pci.h index a44e1bbdcc..1ae439351c 100644 --- a/components/drivers/include/drivers/pci.h +++ b/components/drivers/include/drivers/pci.h @@ -596,7 +596,7 @@ const struct rt_pci_device_id *rt_pci_match_ids(struct rt_pci_device *pdev, rt_err_t rt_pci_driver_register(struct rt_pci_driver *pdrv); rt_err_t rt_pci_device_register(struct rt_pci_device *pdev); - +struct rt_pci_bus_resource *rt_pci_find_bar(struct rt_pci_device* pdev,rt_ubase_t flags,int index); #define RT_PCI_DRIVER_EXPORT(driver) RT_DRIVER_EXPORT(driver, pci, BUILIN) extern struct rt_spinlock rt_pci_lock; diff --git a/components/drivers/pci/pci.c b/components/drivers/pci/pci.c index e4d287b353..369856e0e9 100644 --- a/components/drivers/pci/pci.c +++ b/components/drivers/pci/pci.c @@ -712,6 +712,20 @@ rt_err_t rt_pci_device_alloc_resource(struct rt_pci_host_bridge *host_bridge, return err; } +struct rt_pci_bus_resource *rt_pci_find_bar(struct rt_pci_device* pdev,rt_ubase_t flags,int index) +{ + for (int i = 0; i < RT_PCI_BAR_NR_MAX; i++) + { + if (pdev->resource[i].flags == flags) + { + index--; + if (index == 0) + return &pdev->resource[i]; + } + } + return RT_NULL; +} + void rt_pci_enum_device(struct rt_pci_bus *bus, rt_bool_t (callback(struct rt_pci_device *, void *)), void *data) {