1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang * Copyright 2017 NXP
3*4418919fSjohnjiang */
4*4418919fSjohnjiang
5*4418919fSjohnjiang #ifndef __SKELETON_RAWDEV_H__
6*4418919fSjohnjiang #define __SKELETON_RAWDEV_H__
7*4418919fSjohnjiang
8*4418919fSjohnjiang #include <rte_rawdev.h>
9*4418919fSjohnjiang
10*4418919fSjohnjiang extern int skeleton_pmd_logtype;
11*4418919fSjohnjiang
12*4418919fSjohnjiang #define SKELETON_PMD_LOG(level, fmt, args...) \
13*4418919fSjohnjiang rte_log(RTE_LOG_ ## level, skeleton_pmd_logtype, "%s(): " fmt "\n", \
14*4418919fSjohnjiang __func__, ##args)
15*4418919fSjohnjiang
16*4418919fSjohnjiang #define SKELETON_PMD_FUNC_TRACE() SKELETON_PMD_LOG(DEBUG, ">>")
17*4418919fSjohnjiang
18*4418919fSjohnjiang #define SKELETON_PMD_DEBUG(fmt, args...) \
19*4418919fSjohnjiang SKELETON_PMD_LOG(DEBUG, fmt, ## args)
20*4418919fSjohnjiang #define SKELETON_PMD_INFO(fmt, args...) \
21*4418919fSjohnjiang SKELETON_PMD_LOG(INFO, fmt, ## args)
22*4418919fSjohnjiang #define SKELETON_PMD_ERR(fmt, args...) \
23*4418919fSjohnjiang SKELETON_PMD_LOG(ERR, fmt, ## args)
24*4418919fSjohnjiang #define SKELETON_PMD_WARN(fmt, args...) \
25*4418919fSjohnjiang SKELETON_PMD_LOG(WARNING, fmt, ## args)
26*4418919fSjohnjiang /* Macros for self test application */
27*4418919fSjohnjiang #define SKELETON_TEST_INFO SKELETON_PMD_INFO
28*4418919fSjohnjiang #define SKELETON_TEST_DEBUG SKELETON_PMD_DEBUG
29*4418919fSjohnjiang #define SKELETON_TEST_ERR SKELETON_PMD_ERR
30*4418919fSjohnjiang #define SKELETON_TEST_WARN SKELETON_PMD_WARN
31*4418919fSjohnjiang
32*4418919fSjohnjiang #define SKELETON_SELFTEST_ARG ("selftest")
33*4418919fSjohnjiang
34*4418919fSjohnjiang #define SKELETON_VENDOR_ID 0x10
35*4418919fSjohnjiang #define SKELETON_DEVICE_ID 0x01
36*4418919fSjohnjiang
37*4418919fSjohnjiang #define SKELETON_MAJOR_VER 1
38*4418919fSjohnjiang #define SKELETON_MINOR_VER 0
39*4418919fSjohnjiang #define SKELETON_SUB_VER 0
40*4418919fSjohnjiang
41*4418919fSjohnjiang #define SKELETON_MAX_QUEUES 1
42*4418919fSjohnjiang
43*4418919fSjohnjiang enum skeleton_firmware_state {
44*4418919fSjohnjiang SKELETON_FW_READY,
45*4418919fSjohnjiang SKELETON_FW_LOADED,
46*4418919fSjohnjiang SKELETON_FW_ERROR
47*4418919fSjohnjiang };
48*4418919fSjohnjiang
49*4418919fSjohnjiang enum skeleton_device_state {
50*4418919fSjohnjiang SKELETON_DEV_RUNNING,
51*4418919fSjohnjiang SKELETON_DEV_STOPPED
52*4418919fSjohnjiang };
53*4418919fSjohnjiang
54*4418919fSjohnjiang enum skeleton_queue_state {
55*4418919fSjohnjiang SKELETON_QUEUE_DETACH,
56*4418919fSjohnjiang SKELETON_QUEUE_ATTACH
57*4418919fSjohnjiang };
58*4418919fSjohnjiang
59*4418919fSjohnjiang #define SKELETON_QUEUE_DEF_DEPTH 10
60*4418919fSjohnjiang #define SKELETON_QUEUE_MAX_DEPTH 25
61*4418919fSjohnjiang
62*4418919fSjohnjiang struct skeleton_firmware_version_info {
63*4418919fSjohnjiang uint8_t major;
64*4418919fSjohnjiang uint8_t minor;
65*4418919fSjohnjiang uint8_t subrel;
66*4418919fSjohnjiang };
67*4418919fSjohnjiang
68*4418919fSjohnjiang struct skeleton_firmware {
69*4418919fSjohnjiang /**< Device firmware information */
70*4418919fSjohnjiang struct skeleton_firmware_version_info firmware_version;
71*4418919fSjohnjiang /**< Device state */
72*4418919fSjohnjiang enum skeleton_firmware_state firmware_state;
73*4418919fSjohnjiang
74*4418919fSjohnjiang };
75*4418919fSjohnjiang
76*4418919fSjohnjiang #define SKELETON_MAX_ATTRIBUTES 10
77*4418919fSjohnjiang #define SKELETON_ATTRIBUTE_NAME_MAX 20
78*4418919fSjohnjiang
79*4418919fSjohnjiang struct skeleton_rawdev_attributes {
80*4418919fSjohnjiang /**< Name of the attribute */
81*4418919fSjohnjiang char *name;
82*4418919fSjohnjiang /**< Value or reference of value of attribute */
83*4418919fSjohnjiang uint64_t value;
84*4418919fSjohnjiang };
85*4418919fSjohnjiang
86*4418919fSjohnjiang /**< Device supports firmware loading/unloading */
87*4418919fSjohnjiang #define SKELETON_CAPA_FW_LOAD 0x0001
88*4418919fSjohnjiang /**< Device supports firmware reset */
89*4418919fSjohnjiang #define SKELETON_CAPA_FW_RESET 0x0002
90*4418919fSjohnjiang /**< Device support queue based communication */
91*4418919fSjohnjiang #define SKELETON_CAPA_QUEUES 0x0004
92*4418919fSjohnjiang /**< Default Capabilities: FW_LOAD, FW_RESET, QUEUES */
93*4418919fSjohnjiang #define SKELETON_DEFAULT_CAPA 0x7
94*4418919fSjohnjiang
95*4418919fSjohnjiang struct skeleton_rawdev_queue {
96*4418919fSjohnjiang uint8_t state;
97*4418919fSjohnjiang uint32_t depth;
98*4418919fSjohnjiang };
99*4418919fSjohnjiang
100*4418919fSjohnjiang struct skeleton_rawdev {
101*4418919fSjohnjiang uint16_t device_id;
102*4418919fSjohnjiang uint16_t vendor_id;
103*4418919fSjohnjiang uint16_t num_queues;
104*4418919fSjohnjiang /**< One of SKELETON_CAPA_* */
105*4418919fSjohnjiang uint16_t capabilities;
106*4418919fSjohnjiang /**< State of device; linked to firmware state */
107*4418919fSjohnjiang enum skeleton_device_state device_state;
108*4418919fSjohnjiang /**< Firmware configuration */
109*4418919fSjohnjiang struct skeleton_firmware fw;
110*4418919fSjohnjiang /**< Collection of all communication channels - which can be referred
111*4418919fSjohnjiang * to as queues.
112*4418919fSjohnjiang */
113*4418919fSjohnjiang struct skeleton_rawdev_queue queues[SKELETON_MAX_QUEUES];
114*4418919fSjohnjiang /**< Global table containing various pre-defined and user-defined
115*4418919fSjohnjiang * attributes.
116*4418919fSjohnjiang */
117*4418919fSjohnjiang struct skeleton_rawdev_attributes attr[SKELETON_MAX_ATTRIBUTES];
118*4418919fSjohnjiang struct rte_device *device;
119*4418919fSjohnjiang };
120*4418919fSjohnjiang
121*4418919fSjohnjiang struct skeleton_rawdev_conf {
122*4418919fSjohnjiang uint16_t num_queues;
123*4418919fSjohnjiang unsigned int capabilities;
124*4418919fSjohnjiang enum skeleton_device_state device_state;
125*4418919fSjohnjiang enum skeleton_firmware_state firmware_state;
126*4418919fSjohnjiang };
127*4418919fSjohnjiang
128*4418919fSjohnjiang static inline struct skeleton_rawdev *
skeleton_rawdev_get_priv(const struct rte_rawdev * rawdev)129*4418919fSjohnjiang skeleton_rawdev_get_priv(const struct rte_rawdev *rawdev)
130*4418919fSjohnjiang {
131*4418919fSjohnjiang return rawdev->dev_private;
132*4418919fSjohnjiang }
133*4418919fSjohnjiang
134*4418919fSjohnjiang int test_rawdev_skeldev(uint16_t dev_id);
135*4418919fSjohnjiang
136*4418919fSjohnjiang #endif /* __SKELETON_RAWDEV_H__ */
137