Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright 2019-2020 NXP
3 : : */
4 : :
5 : : #include <stdio.h>
6 : : #include <stdlib.h>
7 : : #include <string.h>
8 : : #include <fcntl.h>
9 : : #include <errno.h>
10 : : #include <unistd.h>
11 : : #include <termios.h>
12 : : #include <sys/ioctl.h>
13 : : #include <stdbool.h>
14 : :
15 : : #include <rte_common.h>
16 : : #include "fm_ext.h"
17 : : #include "fm_pcd_ext.h"
18 : : #include "fm_port_ext.h"
19 : : #include "fm_vsp_ext.h"
20 : : #include <dpaa_ethdev.h>
21 : :
22 : : uint32_t
23 : 0 : fm_port_vsp_alloc(t_handle h_fm_port,
24 : : t_fm_port_vspalloc_params *p_params)
25 : : {
26 : : t_device *p_dev = (t_device *)h_fm_port;
27 : : ioc_fm_port_vsp_alloc_params_t params;
28 : :
29 : : _fml_dbg("Calling...");
30 : : memset(¶ms, 0, sizeof(ioc_fm_port_vsp_alloc_params_t));
31 : : memcpy(¶ms.params, p_params, sizeof(t_fm_port_vspalloc_params));
32 : :
33 [ # # ]: 0 : if (ioctl(p_dev->fd, FM_PORT_IOC_VSP_ALLOC, ¶ms))
34 : 0 : RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG);
35 : :
36 : : _fml_dbg("Called.");
37 : :
38 : : return E_OK;
39 : : }
40 : :
41 : : t_handle
42 : 0 : fm_vsp_config(t_fm_vsp_params *p_fm_vsp_params)
43 : : {
44 : : t_device *p_dev = NULL;
45 : : t_device *p_vsp_dev = NULL;
46 : : ioc_fm_vsp_params_t param;
47 : :
48 : 0 : p_dev = p_fm_vsp_params->h_fm;
49 : :
50 : : _fml_dbg("Performing VSP Configuration...");
51 : :
52 : : memset(¶m, 0, sizeof(ioc_fm_vsp_params_t));
53 : : memcpy(¶m, p_fm_vsp_params, sizeof(t_fm_vsp_params));
54 : 0 : param.vsp_params.h_fm = UINT_TO_PTR(p_dev->id);
55 : : param.id = NULL;
56 : :
57 [ # # ]: 0 : if (ioctl(p_dev->fd, FM_IOC_VSP_CONFIG, ¶m)) {
58 : 0 : DPAA_PMD_ERR("ioctl error");
59 : 0 : return NULL;
60 : : }
61 : :
62 : 0 : p_vsp_dev = (t_device *)malloc(sizeof(t_device));
63 [ # # ]: 0 : if (!p_vsp_dev) {
64 : 0 : DPAA_PMD_ERR("FM VSP Params!");
65 : 0 : return NULL;
66 : : }
67 : : memset(p_vsp_dev, 0, sizeof(t_device));
68 : 0 : p_vsp_dev->h_user_priv = (t_handle)p_dev;
69 : 0 : p_dev->owners++;
70 : 0 : p_vsp_dev->id = PTR_TO_UINT(param.id);
71 : :
72 : : _fml_dbg("VSP Configuration completed");
73 : :
74 : 0 : return (t_handle)p_vsp_dev;
75 : : }
76 : :
77 : : uint32_t
78 : 0 : fm_vsp_init(t_handle h_fm_vsp)
79 : : {
80 : : t_device *p_dev = NULL;
81 : : t_device *p_vsp_dev = (t_device *)h_fm_vsp;
82 : : ioc_fm_obj_t id;
83 : :
84 : : _fml_dbg("Calling...");
85 : :
86 : 0 : p_dev = (t_device *)p_vsp_dev->h_user_priv;
87 : 0 : id.obj = UINT_TO_PTR(p_vsp_dev->id);
88 : :
89 [ # # ]: 0 : if (ioctl(p_dev->fd, FM_IOC_VSP_INIT, &id)) {
90 : 0 : DPAA_PMD_ERR("ioctl error");
91 : 0 : RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG);
92 : : }
93 : :
94 : : _fml_dbg("Called.");
95 : :
96 : : return E_OK;
97 : : }
98 : :
99 : : uint32_t
100 : 0 : fm_vsp_free(t_handle h_fm_vsp)
101 : : {
102 : : t_device *p_dev = NULL;
103 : : t_device *p_vsp_dev = (t_device *)h_fm_vsp;
104 : : ioc_fm_obj_t id;
105 : :
106 : : _fml_dbg("Calling...");
107 : :
108 : 0 : p_dev = (t_device *)p_vsp_dev->h_user_priv;
109 : 0 : id.obj = UINT_TO_PTR(p_vsp_dev->id);
110 : :
111 [ # # ]: 0 : if (ioctl(p_dev->fd, FM_IOC_VSP_FREE, &id)) {
112 : 0 : DPAA_PMD_ERR("ioctl error");
113 : 0 : RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG);
114 : : }
115 : :
116 : 0 : p_dev->owners--;
117 : 0 : free(p_vsp_dev);
118 : :
119 : : _fml_dbg("Called.");
120 : :
121 : 0 : return E_OK;
122 : : }
123 : :
124 : : uint32_t
125 : 0 : fm_vsp_config_buffer_prefix_content(t_handle h_fm_vsp,
126 : : t_fm_buffer_prefix_content *p_fm_buffer_prefix_content)
127 : : {
128 : : t_device *p_dev = NULL;
129 : : t_device *p_vsp_dev = (t_device *)h_fm_vsp;
130 : : ioc_fm_buffer_prefix_content_params_t params;
131 : :
132 : : _fml_dbg("Calling...");
133 : :
134 : 0 : p_dev = (t_device *)p_vsp_dev->h_user_priv;
135 : 0 : params.p_fm_vsp = UINT_TO_PTR(p_vsp_dev->id);
136 : : memcpy(¶ms.fm_buffer_prefix_content,
137 : : p_fm_buffer_prefix_content, sizeof(*p_fm_buffer_prefix_content));
138 : :
139 [ # # ]: 0 : if (ioctl(p_dev->fd, FM_IOC_VSP_CONFIG_BUFFER_PREFIX_CONTENT,
140 : : ¶ms)) {
141 : 0 : DPAA_PMD_ERR("ioctl error");
142 : 0 : RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG);
143 : : }
144 : :
145 : : _fml_dbg("Called.");
146 : :
147 : : return E_OK;
148 : : }
|