1
2
3
4
5
6
7
8
9
10#ifndef _FSL_MC_PRIVATE_H_
11#define _FSL_MC_PRIVATE_H_
12
13#include "../include/mc.h"
14#include "dprc.h"
15#include <linux/mutex.h>
16
17
18
19
20
21#define FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS 256
22
23
24
25
26
27
28
29
30
31
32
33struct fsl_mc_resource_pool {
34 enum fsl_mc_pool_type type;
35 int max_count;
36 int free_count;
37 struct mutex mutex;
38 struct list_head free_list;
39 struct fsl_mc_bus *mc_bus;
40};
41
42
43
44
45
46
47
48
49
50
51
52struct fsl_mc_bus {
53 struct fsl_mc_device mc_dev;
54 struct fsl_mc_resource_pool resource_pools[FSL_MC_NUM_POOL_TYPES];
55 struct fsl_mc_device_irq *irq_resources;
56 struct mutex scan_mutex;
57 struct dprc_attributes dprc_attr;
58};
59
60#define to_fsl_mc_bus(_mc_dev) \
61 container_of(_mc_dev, struct fsl_mc_bus, mc_dev)
62
63int __must_check fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
64 struct fsl_mc_io *mc_io,
65 struct device *parent_dev,
66 struct fsl_mc_device **new_mc_dev);
67
68void fsl_mc_device_remove(struct fsl_mc_device *mc_dev);
69
70int __init dprc_driver_init(void);
71
72void dprc_driver_exit(void);
73
74int __init fsl_mc_allocator_driver_init(void);
75
76void fsl_mc_allocator_driver_exit(void);
77
78void fsl_mc_init_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
79
80void fsl_mc_cleanup_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
81
82int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus,
83 enum fsl_mc_pool_type pool_type,
84 struct fsl_mc_resource
85 **new_resource);
86
87void fsl_mc_resource_free(struct fsl_mc_resource *resource);
88
89int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
90 unsigned int irq_count);
91
92void fsl_mc_msi_domain_free_irqs(struct device *dev);
93
94int __init its_fsl_mc_msi_init(void);
95
96void its_fsl_mc_msi_cleanup(void);
97
98int fsl_mc_find_msi_domain(struct device *mc_platform_dev,
99 struct irq_domain **mc_msi_domain);
100
101int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
102 unsigned int irq_count);
103
104void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus);
105
106int __must_check fsl_create_mc_io(struct device *dev,
107 phys_addr_t mc_portal_phys_addr,
108 u32 mc_portal_size,
109 struct fsl_mc_device *dpmcp_dev,
110 u32 flags, struct fsl_mc_io **new_mc_io);
111
112void fsl_destroy_mc_io(struct fsl_mc_io *mc_io);
113
114bool fsl_mc_is_root_dprc(struct device *dev);
115
116#endif
117