DPDK
19.02.0
Main Page
Related Pages
Data Structures
Files
Examples
File List
Globals
lib
librte_eal
common
include
rte_bus.h
Go to the documentation of this file.
1
/*-
2
* BSD LICENSE
3
*
4
* Copyright 2016 NXP
5
*
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
8
* are met:
9
*
10
* * Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* * Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in
14
* the documentation and/or other materials provided with the
15
* distribution.
16
* * Neither the name of NXP nor the names of its
17
* contributors may be used to endorse or promote products derived
18
* from this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
33
#ifndef _RTE_BUS_H_
34
#define _RTE_BUS_H_
35
45
#ifdef __cplusplus
46
extern
"C"
{
47
#endif
48
49
#include <stdio.h>
50
#include <sys/queue.h>
51
52
#include <
rte_log.h
>
53
#include <
rte_dev.h
>
54
56
TAILQ_HEAD
(rte_bus_list,
rte_bus
);
57
58
67
enum
rte_iova_mode
{
68
RTE_IOVA_DC = 0,
/* Don't care mode */
69
RTE_IOVA_PA = (1 << 0),
/* DMA using physical address */
70
RTE_IOVA_VA = (1 << 1)
/* DMA using virtual address */
71
};
72
84
typedef
int (*
rte_bus_scan_t
)(void);
85
96
typedef
int (*
rte_bus_probe_t
)(void);
97
120
typedef
struct
rte_device
*
121
(*rte_bus_find_device_t)(
const
struct
rte_device
*start,
rte_dev_cmp_t
cmp,
122
const
void
*data);
123
135
typedef
int (*
rte_bus_plug_t
)(
struct
rte_device
*dev);
136
148
typedef
int (*
rte_bus_unplug_t
)(
struct
rte_device
*dev);
149
168
typedef
int (*
rte_bus_parse_t
)(
const
char
*
name
,
void
*addr);
169
182
typedef
int (*
rte_bus_hot_unplug_handler_t
)(
struct
rte_device
*dev);
183
197
typedef
int (*
rte_bus_sigbus_handler_t
)(
const
void
*failure_addr);
198
202
enum
rte_bus_scan_mode
{
203
RTE_BUS_SCAN_UNDEFINED,
204
RTE_BUS_SCAN_WHITELIST,
205
RTE_BUS_SCAN_BLACKLIST,
206
};
207
211
struct
rte_bus_conf
{
212
enum
rte_bus_scan_mode
scan_mode
;
213
};
214
215
226
typedef
enum
rte_iova_mode
(*
rte_bus_get_iommu_class_t
)(void);
227
228
232
struct
rte_bus
{
233
TAILQ_ENTRY
(
rte_bus
) next;
234
const
char
*
name
;
235
rte_bus_scan_t
scan
;
236
rte_bus_probe_t
probe
;
237
rte_bus_find_device_t
find_device
;
238
rte_bus_plug_t
plug
;
239
rte_bus_unplug_t
unplug
;
240
rte_bus_parse_t
parse
;
241
struct
rte_bus_conf
conf
;
242
rte_bus_get_iommu_class_t
get_iommu_class
;
243
rte_dev_iterate_t
dev_iterate
;
244
rte_bus_hot_unplug_handler_t
hot_unplug_handler
;
246
rte_bus_sigbus_handler_t
sigbus_handler
;
249
};
250
258
void
rte_bus_register
(
struct
rte_bus
*bus);
259
267
void
rte_bus_unregister
(
struct
rte_bus
*bus);
268
276
int
rte_bus_scan
(
void
);
277
286
int
rte_bus_probe
(
void
);
287
294
void
rte_bus_dump
(FILE *f);
295
311
typedef
int (*
rte_bus_cmp_t
)(
const
struct
rte_bus
*bus,
const
void
*data);
312
335
struct
rte_bus
*
rte_bus_find
(
const
struct
rte_bus
*start,
rte_bus_cmp_t
cmp,
336
const
void
*data);
337
341
struct
rte_bus
*
rte_bus_find_by_device
(
const
struct
rte_device
*dev);
342
346
struct
rte_bus
*
rte_bus_find_by_name
(
const
char
*busname);
347
348
356
enum
rte_iova_mode
rte_bus_get_iommu_class
(
void
);
357
362
#define RTE_REGISTER_BUS(nm, bus) \
363
RTE_INIT_PRIO(businitfn_ ##nm, BUS) \
364
{\
365
(bus).name = RTE_STR(nm);\
366
rte_bus_register(&bus); \
367
}
368
369
#ifdef __cplusplus
370
}
371
#endif
372
373
#endif
/* _RTE_BUS_H */
Generated by
1.8.1.2