11// SPDX-License-Identifier: GPL-2.0
22// Copyright 2019 NXP
33
4+ #include <linux/bitfield.h>
45#include <linux/module.h>
56#include <linux/types.h>
67#include <linux/io.h>
78#include <linux/fsl/mc.h>
89#include "dpdmai.h"
910
11+ #define DEST_TYPE_MASK 0xF
12+
1013struct dpdmai_rsp_get_attributes {
1114 __le32 id ;
1215 u8 num_of_priorities ;
13- u8 pad0 [3 ];
16+ u8 num_of_queues ;
17+ u8 pad0 [2 ];
1418 __le16 major ;
1519 __le16 minor ;
1620};
1721
1822struct dpdmai_cmd_queue {
1923 __le32 dest_id ;
20- u8 priority ;
21- u8 queue ;
24+ u8 dest_priority ;
25+ union {
26+ u8 queue ;
27+ u8 pri ;
28+ };
2229 u8 dest_type ;
23- u8 pad ;
30+ u8 queue_idx ;
2431 __le64 user_ctx ;
2532 union {
2633 __le32 options ;
2734 __le32 fqid ;
2835 };
29- };
36+ } __packed ;
3037
3138struct dpdmai_rsp_get_tx_queue {
3239 __le64 pad ;
@@ -37,6 +44,10 @@ struct dpdmai_cmd_open {
3744 __le32 dpdmai_id ;
3845} __packed ;
3946
47+ struct dpdmai_cmd_destroy {
48+ __le32 dpdmai_id ;
49+ } __packed ;
50+
4051static inline u64 mc_enc (int lsoffset , int width , u64 val )
4152{
4253 return (val & MAKE_UMASK64 (width )) << lsoffset ;
@@ -113,18 +124,23 @@ EXPORT_SYMBOL_GPL(dpdmai_close);
113124 * dpdmai_destroy() - Destroy the DPDMAI object and release all its resources.
114125 * @mc_io: Pointer to MC portal's I/O object
115126 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
127+ * @dpdmai_id: The object id; it must be a valid id within the container that created this object;
116128 * @token: Token of DPDMAI object
117129 *
118130 * Return: '0' on Success; error code otherwise.
119131 */
120- int dpdmai_destroy (struct fsl_mc_io * mc_io , u32 cmd_flags , u16 token )
132+ int dpdmai_destroy (struct fsl_mc_io * mc_io , u32 cmd_flags , u32 dpdmai_id , u16 token )
121133{
134+ struct dpdmai_cmd_destroy * cmd_params ;
122135 struct fsl_mc_command cmd = { 0 };
123136
124137 /* prepare command */
125138 cmd .header = mc_encode_cmd_header (DPDMAI_CMDID_DESTROY ,
126139 cmd_flags , token );
127140
141+ cmd_params = (struct dpdmai_cmd_destroy * )& cmd .params ;
142+ cmd_params -> dpdmai_id = cpu_to_le32 (dpdmai_id );
143+
128144 /* send command to mc*/
129145 return mc_send_command (mc_io , & cmd );
130146}
@@ -224,6 +240,7 @@ int dpdmai_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags,
224240 attr -> version .major = le16_to_cpu (rsp_params -> major );
225241 attr -> version .minor = le16_to_cpu (rsp_params -> minor );
226242 attr -> num_of_priorities = rsp_params -> num_of_priorities ;
243+ attr -> num_of_queues = rsp_params -> num_of_queues ;
227244
228245 return 0 ;
229246}
@@ -240,7 +257,7 @@ EXPORT_SYMBOL_GPL(dpdmai_get_attributes);
240257 *
241258 * Return: '0' on Success; Error code otherwise.
242259 */
243- int dpdmai_set_rx_queue (struct fsl_mc_io * mc_io , u32 cmd_flags , u16 token ,
260+ int dpdmai_set_rx_queue (struct fsl_mc_io * mc_io , u32 cmd_flags , u16 token , u8 queue_idx ,
244261 u8 priority , const struct dpdmai_rx_queue_cfg * cfg )
245262{
246263 struct dpdmai_cmd_queue * cmd_params ;
@@ -252,11 +269,12 @@ int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
252269
253270 cmd_params = (struct dpdmai_cmd_queue * )cmd .params ;
254271 cmd_params -> dest_id = cpu_to_le32 (cfg -> dest_cfg .dest_id );
255- cmd_params -> priority = cfg -> dest_cfg .priority ;
256- cmd_params -> queue = priority ;
272+ cmd_params -> dest_priority = cfg -> dest_cfg .priority ;
273+ cmd_params -> pri = priority ;
257274 cmd_params -> dest_type = cfg -> dest_cfg .dest_type ;
258275 cmd_params -> user_ctx = cpu_to_le64 (cfg -> user_ctx );
259276 cmd_params -> options = cpu_to_le32 (cfg -> options );
277+ cmd_params -> queue_idx = queue_idx ;
260278
261279 /* send command to mc*/
262280 return mc_send_command (mc_io , & cmd );
@@ -274,7 +292,7 @@ EXPORT_SYMBOL_GPL(dpdmai_set_rx_queue);
274292 *
275293 * Return: '0' on Success; Error code otherwise.
276294 */
277- int dpdmai_get_rx_queue (struct fsl_mc_io * mc_io , u32 cmd_flags , u16 token ,
295+ int dpdmai_get_rx_queue (struct fsl_mc_io * mc_io , u32 cmd_flags , u16 token , u8 queue_idx ,
278296 u8 priority , struct dpdmai_rx_queue_attr * attr )
279297{
280298 struct dpdmai_cmd_queue * cmd_params ;
@@ -287,6 +305,7 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
287305
288306 cmd_params = (struct dpdmai_cmd_queue * )cmd .params ;
289307 cmd_params -> queue = priority ;
308+ cmd_params -> queue_idx = queue_idx ;
290309
291310 /* send command to mc*/
292311 err = mc_send_command (mc_io , & cmd );
@@ -295,8 +314,8 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,
295314
296315 /* retrieve response parameters */
297316 attr -> dest_cfg .dest_id = le32_to_cpu (cmd_params -> dest_id );
298- attr -> dest_cfg .priority = cmd_params -> priority ;
299- attr -> dest_cfg .dest_type = cmd_params -> dest_type ;
317+ attr -> dest_cfg .priority = cmd_params -> dest_priority ;
318+ attr -> dest_cfg .dest_type = FIELD_GET ( DEST_TYPE_MASK , cmd_params -> dest_type ) ;
300319 attr -> user_ctx = le64_to_cpu (cmd_params -> user_ctx );
301320 attr -> fqid = le32_to_cpu (cmd_params -> fqid );
302321
@@ -316,7 +335,7 @@ EXPORT_SYMBOL_GPL(dpdmai_get_rx_queue);
316335 * Return: '0' on Success; Error code otherwise.
317336 */
318337int dpdmai_get_tx_queue (struct fsl_mc_io * mc_io , u32 cmd_flags ,
319- u16 token , u8 priority , u32 * fqid )
338+ u16 token , u8 queue_idx , u8 priority , struct dpdmai_tx_queue_attr * attr )
320339{
321340 struct dpdmai_rsp_get_tx_queue * rsp_params ;
322341 struct dpdmai_cmd_queue * cmd_params ;
@@ -329,6 +348,7 @@ int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
329348
330349 cmd_params = (struct dpdmai_cmd_queue * )cmd .params ;
331350 cmd_params -> queue = priority ;
351+ cmd_params -> queue_idx = queue_idx ;
332352
333353 /* send command to mc*/
334354 err = mc_send_command (mc_io , & cmd );
@@ -338,7 +358,7 @@ int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io, u32 cmd_flags,
338358 /* retrieve response parameters */
339359
340360 rsp_params = (struct dpdmai_rsp_get_tx_queue * )cmd .params ;
341- * fqid = le32_to_cpu (rsp_params -> fqid );
361+ attr -> fqid = le32_to_cpu (rsp_params -> fqid );
342362
343363 return 0 ;
344364}
0 commit comments