summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
authorGuEe-GUI <[email protected]>2024-11-27 17:13:27 +0800
committerRbb666 <[email protected]>2024-11-28 09:46:58 +0800
commit50982cd970fc5b70830be0cb7c71b1bc50fca5b0 (patch)
tree419c10831297f60e48fe419b197b5b25c4f647c1 /components/drivers/include
parent0d2e677f07869d8c122fbb15a94c1a47bba1928a (diff)
[DM/PCI] Add memory window pool for EP
Signed-off-by: GuEe-GUI <[email protected]>
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/pci_endpoint.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/components/drivers/include/drivers/pci_endpoint.h b/components/drivers/include/drivers/pci_endpoint.h
index 3e6fd7c918..c43c182d95 100644
--- a/components/drivers/include/drivers/pci_endpoint.h
+++ b/components/drivers/include/drivers/pci_endpoint.h
@@ -73,6 +73,7 @@ struct rt_pci_ep_msix_tbl
};
struct rt_pci_ep_ops;
+struct rt_pci_ep_mem;
struct rt_pci_ep
{
@@ -84,6 +85,9 @@ struct rt_pci_ep
const struct rt_device *rc_dev;
const struct rt_pci_ep_ops *ops;
+ rt_size_t mems_nr;
+ struct rt_pci_ep_mem *mems;
+
rt_uint8_t max_functions;
RT_BITMAP_DECLARE(functions_map, 8);
rt_list_t epf_nodes;
@@ -92,6 +96,16 @@ struct rt_pci_ep
void *priv;
};
+struct rt_pci_ep_mem
+{
+ rt_ubase_t cpu_addr;
+ rt_size_t size;
+ rt_size_t page_size;
+
+ rt_bitmap_t *map;
+ rt_size_t bits;
+};
+
struct rt_pci_epf
{
rt_list_t list;
@@ -170,6 +184,16 @@ rt_err_t rt_pci_ep_stop(struct rt_pci_ep *ep);
rt_err_t rt_pci_ep_register(struct rt_pci_ep *ep);
rt_err_t rt_pci_ep_unregister(struct rt_pci_ep *ep);
+rt_err_t rt_pci_ep_mem_array_init(struct rt_pci_ep *ep,
+ struct rt_pci_ep_mem *mems, rt_size_t mems_nr);
+rt_err_t rt_pci_ep_mem_init(struct rt_pci_ep *ep,
+ rt_ubase_t cpu_addr, rt_size_t size, rt_size_t page_size);
+
+void *rt_pci_ep_mem_alloc(struct rt_pci_ep *ep,
+ rt_ubase_t *out_cpu_addr, rt_size_t size);
+void rt_pci_ep_mem_free(struct rt_pci_ep *ep,
+ void *vaddr, rt_ubase_t cpu_addr, rt_size_t size);
+
rt_err_t rt_pci_ep_add_epf(struct rt_pci_ep *ep, struct rt_pci_epf *epf);
rt_err_t rt_pci_ep_remove_epf(struct rt_pci_ep *ep, struct rt_pci_epf *epf);