1
2
3
4
5
6
7
8#ifndef __CVMX_FPA_H__
9#define __CVMX_FPA_H__
10
11#include "cvmx-scratch.h"
12#include "cvmx-fpa-defs.h"
13#include "cvmx-fpa1.h"
14#include "cvmx-fpa3.h"
15
16#define CVMX_FPA_MIN_BLOCK_SIZE 128
17#define CVMX_FPA_ALIGNMENT 128
18#define CVMX_FPA_POOL_NAME_LEN 16
19
20
21#define CVMX_FPA_NUM_POOLS \
22 (octeon_has_feature(OCTEON_FEATURE_FPA3) ? cvmx_fpa3_num_auras() : CVMX_FPA1_NUM_POOLS)
23
24
25
26
27struct cvmx_fpa_pool_config {
28 s64 pool_num;
29 u64 buffer_size;
30 u64 buffer_count;
31};
32
33typedef struct cvmx_fpa_pool_config cvmx_fpa_pool_config_t;
34
35
36
37
38
39
40
41const char *cvmx_fpa_get_name(int pool_num);
42
43
44
45
46int cvmx_fpa_global_init_node(int node);
47
48
49
50
51static inline void cvmx_fpa_enable(void)
52{
53 if (!octeon_has_feature(OCTEON_FEATURE_FPA3))
54 cvmx_fpa1_enable();
55 else
56 cvmx_fpa_global_init_node(cvmx_get_node_num());
57}
58
59
60
61
62static inline void cvmx_fpa_disable(void)
63{
64 if (!octeon_has_feature(OCTEON_FEATURE_FPA3))
65 cvmx_fpa1_disable();
66
67}
68
69
70
71
72
73
74
75static inline void cvmx_fpa_global_initialize(void)
76{
77 cvmx_fpa_global_init_node(cvmx_get_node_num());
78}
79
80
81
82
83
84
85
86static inline cvmx_fpa3_gaura_t cvmx_fpa1_pool_to_fpa3_aura(cvmx_fpa1_pool_t pool)
87{
88 if ((octeon_has_feature(OCTEON_FEATURE_FPA3))) {
89 unsigned int node = cvmx_get_node_num();
90 cvmx_fpa3_gaura_t aura = __cvmx_fpa3_gaura(node, pool);
91 return aura;
92 }
93 return CVMX_FPA3_INVALID_GAURA;
94}
95
96
97
98
99
100
101
102static inline void *cvmx_fpa_alloc(u64 pool)
103{
104
105 if ((octeon_has_feature(OCTEON_FEATURE_FPA3))) {
106 return cvmx_fpa3_alloc(cvmx_fpa1_pool_to_fpa3_aura(pool));
107 } else
108 return cvmx_fpa1_alloc(pool);
109}
110
111
112
113
114
115
116
117
118
119
120
121static inline void cvmx_fpa_async_alloc(u64 scr_addr, u64 pool)
122{
123 if ((octeon_has_feature(OCTEON_FEATURE_FPA3))) {
124 return cvmx_fpa3_async_alloc(scr_addr, cvmx_fpa1_pool_to_fpa3_aura(pool));
125 } else
126 return cvmx_fpa1_async_alloc(scr_addr, pool);
127}
128
129
130
131
132
133
134
135
136
137
138
139
140static inline void *cvmx_fpa_async_alloc_finish(u64 scr_addr, u64 pool)
141{
142 if ((octeon_has_feature(OCTEON_FEATURE_FPA3)))
143 return cvmx_fpa3_async_alloc_finish(scr_addr, cvmx_fpa1_pool_to_fpa3_aura(pool));
144 else
145 return cvmx_fpa1_async_alloc_finish(scr_addr, pool);
146}
147
148
149
150
151
152
153
154
155
156
157
158static inline void cvmx_fpa_free_nosync(void *ptr, u64 pool, u64 num_cache_lines)
159{
160
161 if ((octeon_has_feature(OCTEON_FEATURE_FPA3)))
162 cvmx_fpa3_free_nosync(ptr, cvmx_fpa1_pool_to_fpa3_aura(pool), num_cache_lines);
163 else
164 cvmx_fpa1_free_nosync(ptr, pool, num_cache_lines);
165}
166
167
168
169
170
171
172
173
174
175
176static inline void cvmx_fpa_free(void *ptr, u64 pool, u64 num_cache_lines)
177{
178 if ((octeon_has_feature(OCTEON_FEATURE_FPA3)))
179 cvmx_fpa3_free(ptr, cvmx_fpa1_pool_to_fpa3_aura(pool), num_cache_lines);
180 else
181 cvmx_fpa1_free(ptr, pool, num_cache_lines);
182}
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200int cvmx_fpa_setup_pool(int pool, const char *name, void *buffer, u64 block_size, u64 num_blocks);
201
202int cvmx_fpa_shutdown_pool(int pool);
203
204
205
206
207
208
209unsigned int cvmx_fpa_get_block_size(int pool);
210
211int cvmx_fpa_is_pool_available(int pool_num);
212u64 cvmx_fpa_get_pool_owner(int pool_num);
213int cvmx_fpa_get_max_pools(void);
214int cvmx_fpa_get_current_count(int pool_num);
215int cvmx_fpa_validate_pool(int pool);
216
217#endif
218