1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include "gxio/iorpc_trio.h"
17
18struct alloc_asids_param {
19 unsigned int count;
20 unsigned int first;
21 unsigned int flags;
22};
23
24int gxio_trio_alloc_asids(gxio_trio_context_t *context, unsigned int count,
25 unsigned int first, unsigned int flags)
26{
27 struct alloc_asids_param temp;
28 struct alloc_asids_param *params = &temp;
29
30 params->count = count;
31 params->first = first;
32 params->flags = flags;
33
34 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
35 sizeof(*params), GXIO_TRIO_OP_ALLOC_ASIDS);
36}
37
38EXPORT_SYMBOL(gxio_trio_alloc_asids);
39
40
41struct alloc_memory_maps_param {
42 unsigned int count;
43 unsigned int first;
44 unsigned int flags;
45};
46
47int gxio_trio_alloc_memory_maps(gxio_trio_context_t *context,
48 unsigned int count, unsigned int first,
49 unsigned int flags)
50{
51 struct alloc_memory_maps_param temp;
52 struct alloc_memory_maps_param *params = &temp;
53
54 params->count = count;
55 params->first = first;
56 params->flags = flags;
57
58 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
59 sizeof(*params), GXIO_TRIO_OP_ALLOC_MEMORY_MAPS);
60}
61
62EXPORT_SYMBOL(gxio_trio_alloc_memory_maps);
63
64struct alloc_scatter_queues_param {
65 unsigned int count;
66 unsigned int first;
67 unsigned int flags;
68};
69
70int gxio_trio_alloc_scatter_queues(gxio_trio_context_t *context,
71 unsigned int count, unsigned int first,
72 unsigned int flags)
73{
74 struct alloc_scatter_queues_param temp;
75 struct alloc_scatter_queues_param *params = &temp;
76
77 params->count = count;
78 params->first = first;
79 params->flags = flags;
80
81 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
82 sizeof(*params),
83 GXIO_TRIO_OP_ALLOC_SCATTER_QUEUES);
84}
85
86EXPORT_SYMBOL(gxio_trio_alloc_scatter_queues);
87
88struct alloc_pio_regions_param {
89 unsigned int count;
90 unsigned int first;
91 unsigned int flags;
92};
93
94int gxio_trio_alloc_pio_regions(gxio_trio_context_t *context,
95 unsigned int count, unsigned int first,
96 unsigned int flags)
97{
98 struct alloc_pio_regions_param temp;
99 struct alloc_pio_regions_param *params = &temp;
100
101 params->count = count;
102 params->first = first;
103 params->flags = flags;
104
105 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
106 sizeof(*params), GXIO_TRIO_OP_ALLOC_PIO_REGIONS);
107}
108
109EXPORT_SYMBOL(gxio_trio_alloc_pio_regions);
110
111struct init_pio_region_aux_param {
112 unsigned int pio_region;
113 unsigned int mac;
114 uint32_t bus_address_hi;
115 unsigned int flags;
116};
117
118int gxio_trio_init_pio_region_aux(gxio_trio_context_t *context,
119 unsigned int pio_region, unsigned int mac,
120 uint32_t bus_address_hi, unsigned int flags)
121{
122 struct init_pio_region_aux_param temp;
123 struct init_pio_region_aux_param *params = &temp;
124
125 params->pio_region = pio_region;
126 params->mac = mac;
127 params->bus_address_hi = bus_address_hi;
128 params->flags = flags;
129
130 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
131 sizeof(*params), GXIO_TRIO_OP_INIT_PIO_REGION_AUX);
132}
133
134EXPORT_SYMBOL(gxio_trio_init_pio_region_aux);
135
136
137struct init_memory_map_mmu_aux_param {
138 unsigned int map;
139 unsigned long va;
140 uint64_t size;
141 unsigned int asid;
142 unsigned int mac;
143 uint64_t bus_address;
144 unsigned int node;
145 unsigned int order_mode;
146};
147
148int gxio_trio_init_memory_map_mmu_aux(gxio_trio_context_t *context,
149 unsigned int map, unsigned long va,
150 uint64_t size, unsigned int asid,
151 unsigned int mac, uint64_t bus_address,
152 unsigned int node,
153 unsigned int order_mode)
154{
155 struct init_memory_map_mmu_aux_param temp;
156 struct init_memory_map_mmu_aux_param *params = &temp;
157
158 params->map = map;
159 params->va = va;
160 params->size = size;
161 params->asid = asid;
162 params->mac = mac;
163 params->bus_address = bus_address;
164 params->node = node;
165 params->order_mode = order_mode;
166
167 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
168 sizeof(*params),
169 GXIO_TRIO_OP_INIT_MEMORY_MAP_MMU_AUX);
170}
171
172EXPORT_SYMBOL(gxio_trio_init_memory_map_mmu_aux);
173
174struct get_port_property_param {
175 struct pcie_trio_ports_property trio_ports;
176};
177
178int gxio_trio_get_port_property(gxio_trio_context_t *context,
179 struct pcie_trio_ports_property *trio_ports)
180{
181 int __result;
182 struct get_port_property_param temp;
183 struct get_port_property_param *params = &temp;
184
185 __result =
186 hv_dev_pread(context->fd, 0, (HV_VirtAddr) params, sizeof(*params),
187 GXIO_TRIO_OP_GET_PORT_PROPERTY);
188 *trio_ports = params->trio_ports;
189
190 return __result;
191}
192
193EXPORT_SYMBOL(gxio_trio_get_port_property);
194
195struct config_legacy_intr_param {
196 union iorpc_interrupt interrupt;
197 unsigned int mac;
198 unsigned int intx;
199};
200
201int gxio_trio_config_legacy_intr(gxio_trio_context_t *context, int inter_x,
202 int inter_y, int inter_ipi, int inter_event,
203 unsigned int mac, unsigned int intx)
204{
205 struct config_legacy_intr_param temp;
206 struct config_legacy_intr_param *params = &temp;
207
208 params->interrupt.kernel.x = inter_x;
209 params->interrupt.kernel.y = inter_y;
210 params->interrupt.kernel.ipi = inter_ipi;
211 params->interrupt.kernel.event = inter_event;
212 params->mac = mac;
213 params->intx = intx;
214
215 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
216 sizeof(*params), GXIO_TRIO_OP_CONFIG_LEGACY_INTR);
217}
218
219EXPORT_SYMBOL(gxio_trio_config_legacy_intr);
220
221struct config_msi_intr_param {
222 union iorpc_interrupt interrupt;
223 unsigned int mac;
224 unsigned int mem_map;
225 uint64_t mem_map_base;
226 uint64_t mem_map_limit;
227 unsigned int asid;
228};
229
230int gxio_trio_config_msi_intr(gxio_trio_context_t *context, int inter_x,
231 int inter_y, int inter_ipi, int inter_event,
232 unsigned int mac, unsigned int mem_map,
233 uint64_t mem_map_base, uint64_t mem_map_limit,
234 unsigned int asid)
235{
236 struct config_msi_intr_param temp;
237 struct config_msi_intr_param *params = &temp;
238
239 params->interrupt.kernel.x = inter_x;
240 params->interrupt.kernel.y = inter_y;
241 params->interrupt.kernel.ipi = inter_ipi;
242 params->interrupt.kernel.event = inter_event;
243 params->mac = mac;
244 params->mem_map = mem_map;
245 params->mem_map_base = mem_map_base;
246 params->mem_map_limit = mem_map_limit;
247 params->asid = asid;
248
249 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
250 sizeof(*params), GXIO_TRIO_OP_CONFIG_MSI_INTR);
251}
252
253EXPORT_SYMBOL(gxio_trio_config_msi_intr);
254
255
256struct set_mps_mrs_param {
257 uint16_t mps;
258 uint16_t mrs;
259 unsigned int mac;
260};
261
262int gxio_trio_set_mps_mrs(gxio_trio_context_t *context, uint16_t mps,
263 uint16_t mrs, unsigned int mac)
264{
265 struct set_mps_mrs_param temp;
266 struct set_mps_mrs_param *params = &temp;
267
268 params->mps = mps;
269 params->mrs = mrs;
270 params->mac = mac;
271
272 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
273 sizeof(*params), GXIO_TRIO_OP_SET_MPS_MRS);
274}
275
276EXPORT_SYMBOL(gxio_trio_set_mps_mrs);
277
278struct force_rc_link_up_param {
279 unsigned int mac;
280};
281
282int gxio_trio_force_rc_link_up(gxio_trio_context_t *context, unsigned int mac)
283{
284 struct force_rc_link_up_param temp;
285 struct force_rc_link_up_param *params = &temp;
286
287 params->mac = mac;
288
289 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
290 sizeof(*params), GXIO_TRIO_OP_FORCE_RC_LINK_UP);
291}
292
293EXPORT_SYMBOL(gxio_trio_force_rc_link_up);
294
295struct force_ep_link_up_param {
296 unsigned int mac;
297};
298
299int gxio_trio_force_ep_link_up(gxio_trio_context_t *context, unsigned int mac)
300{
301 struct force_ep_link_up_param temp;
302 struct force_ep_link_up_param *params = &temp;
303
304 params->mac = mac;
305
306 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
307 sizeof(*params), GXIO_TRIO_OP_FORCE_EP_LINK_UP);
308}
309
310EXPORT_SYMBOL(gxio_trio_force_ep_link_up);
311
312struct get_mmio_base_param {
313 HV_PTE base;
314};
315
316int gxio_trio_get_mmio_base(gxio_trio_context_t *context, HV_PTE *base)
317{
318 int __result;
319 struct get_mmio_base_param temp;
320 struct get_mmio_base_param *params = &temp;
321
322 __result =
323 hv_dev_pread(context->fd, 0, (HV_VirtAddr) params, sizeof(*params),
324 GXIO_TRIO_OP_GET_MMIO_BASE);
325 *base = params->base;
326
327 return __result;
328}
329
330EXPORT_SYMBOL(gxio_trio_get_mmio_base);
331
332struct check_mmio_offset_param {
333 unsigned long offset;
334 unsigned long size;
335};
336
337int gxio_trio_check_mmio_offset(gxio_trio_context_t *context,
338 unsigned long offset, unsigned long size)
339{
340 struct check_mmio_offset_param temp;
341 struct check_mmio_offset_param *params = &temp;
342
343 params->offset = offset;
344 params->size = size;
345
346 return hv_dev_pwrite(context->fd, 0, (HV_VirtAddr) params,
347 sizeof(*params), GXIO_TRIO_OP_CHECK_MMIO_OFFSET);
348}
349
350EXPORT_SYMBOL(gxio_trio_check_mmio_offset);
351