1131a75b6SHemant Agrawal /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0) 22c63db04SHemant Agrawal * 32c63db04SHemant Agrawal * Copyright 2013-2016 Freescale Semiconductor Inc. 4*591200efSGagandeep Singh * Copyright 2016-2023 NXP 52c63db04SHemant Agrawal * 62c63db04SHemant Agrawal */ 72c63db04SHemant Agrawal #include <fsl_mc_sys.h> 82c63db04SHemant Agrawal #include <fsl_mc_cmd.h> 92c63db04SHemant Agrawal #include <fsl_dpio.h> 102c63db04SHemant Agrawal #include <fsl_dpio_cmd.h> 112c63db04SHemant Agrawal 1216bbc98aSShreyansh Jain /** 1316bbc98aSShreyansh Jain * dpio_open() - Open a control session for the specified object 1416bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 1516bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1616bbc98aSShreyansh Jain * @dpio_id: DPIO unique ID 1716bbc98aSShreyansh Jain * @token: Returned token; use in subsequent API calls 1816bbc98aSShreyansh Jain * 1916bbc98aSShreyansh Jain * This function can be used to open a control session for an 2016bbc98aSShreyansh Jain * already created object; an object may have been declared in 2116bbc98aSShreyansh Jain * the DPL or by calling the dpio_create() function. 2216bbc98aSShreyansh Jain * This function returns a unique authentication token, 2316bbc98aSShreyansh Jain * associated with the specific object ID and any MC portals 2416bbc98aSShreyansh Jain * assigned to the parent container; this token must be used in 2516bbc98aSShreyansh Jain * all subsequent commands for this specific object. 2616bbc98aSShreyansh Jain * 2716bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 2816bbc98aSShreyansh Jain */ 292c63db04SHemant Agrawal int dpio_open(struct fsl_mc_io *mc_io, 302c63db04SHemant Agrawal uint32_t cmd_flags, 312c63db04SHemant Agrawal int dpio_id, 322c63db04SHemant Agrawal uint16_t *token) 332c63db04SHemant Agrawal { 3416bbc98aSShreyansh Jain struct dpio_cmd_open *cmd_params; 352c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 362c63db04SHemant Agrawal int err; 372c63db04SHemant Agrawal 382c63db04SHemant Agrawal /* prepare command */ 392c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_OPEN, 402c63db04SHemant Agrawal cmd_flags, 412c63db04SHemant Agrawal 0); 4216bbc98aSShreyansh Jain cmd_params = (struct dpio_cmd_open *)cmd.params; 4316bbc98aSShreyansh Jain cmd_params->dpio_id = cpu_to_le32(dpio_id); 442c63db04SHemant Agrawal 452c63db04SHemant Agrawal /* send command to mc*/ 462c63db04SHemant Agrawal err = mc_send_command(mc_io, &cmd); 472c63db04SHemant Agrawal if (err) 482c63db04SHemant Agrawal return err; 492c63db04SHemant Agrawal 502c63db04SHemant Agrawal /* retrieve response parameters */ 5116bbc98aSShreyansh Jain *token = mc_cmd_hdr_read_token(&cmd); 522c63db04SHemant Agrawal 532c63db04SHemant Agrawal return 0; 542c63db04SHemant Agrawal } 552c63db04SHemant Agrawal 5616bbc98aSShreyansh Jain /** 5716bbc98aSShreyansh Jain * dpio_close() - Close the control session of the object 5816bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 5916bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 6016bbc98aSShreyansh Jain * @token: Token of DPIO object 6116bbc98aSShreyansh Jain * 6216bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 6316bbc98aSShreyansh Jain */ 642c63db04SHemant Agrawal int dpio_close(struct fsl_mc_io *mc_io, 652c63db04SHemant Agrawal uint32_t cmd_flags, 662c63db04SHemant Agrawal uint16_t token) 672c63db04SHemant Agrawal { 682c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 692c63db04SHemant Agrawal 702c63db04SHemant Agrawal /* prepare command */ 712c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_CLOSE, 722c63db04SHemant Agrawal cmd_flags, 732c63db04SHemant Agrawal token); 742c63db04SHemant Agrawal 752c63db04SHemant Agrawal /* send command to mc*/ 762c63db04SHemant Agrawal return mc_send_command(mc_io, &cmd); 772c63db04SHemant Agrawal } 782c63db04SHemant Agrawal 7916bbc98aSShreyansh Jain /** 8016bbc98aSShreyansh Jain * dpio_create() - Create the DPIO object. 8116bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 8216bbc98aSShreyansh Jain * @dprc_token: Parent container token; '0' for default container 8316bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 8416bbc98aSShreyansh Jain * @cfg: Configuration structure 8516bbc98aSShreyansh Jain * @obj_id: Returned object id 8616bbc98aSShreyansh Jain * 8716bbc98aSShreyansh Jain * Create the DPIO object, allocate required resources and 8816bbc98aSShreyansh Jain * perform required initialization. 8916bbc98aSShreyansh Jain * 9016bbc98aSShreyansh Jain * The object can be created either by declaring it in the 9116bbc98aSShreyansh Jain * DPL file, or by calling this function. 9216bbc98aSShreyansh Jain * 9316bbc98aSShreyansh Jain * The function accepts an authentication token of a parent 9416bbc98aSShreyansh Jain * container that this object should be assigned to. The token 9516bbc98aSShreyansh Jain * can be '0' so the object will be assigned to the default container. 9616bbc98aSShreyansh Jain * The newly created object can be opened with the returned 9716bbc98aSShreyansh Jain * object id and using the container's associated tokens and MC portals. 9816bbc98aSShreyansh Jain * 9916bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 10016bbc98aSShreyansh Jain */ 1012c63db04SHemant Agrawal int dpio_create(struct fsl_mc_io *mc_io, 1022c63db04SHemant Agrawal uint16_t dprc_token, 1032c63db04SHemant Agrawal uint32_t cmd_flags, 1042c63db04SHemant Agrawal const struct dpio_cfg *cfg, 1052c63db04SHemant Agrawal uint32_t *obj_id) 1062c63db04SHemant Agrawal { 10716bbc98aSShreyansh Jain struct dpio_cmd_create *cmd_params; 1082c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 1092c63db04SHemant Agrawal int err; 1102c63db04SHemant Agrawal 1112c63db04SHemant Agrawal /* prepare command */ 1122c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_CREATE, 1132c63db04SHemant Agrawal cmd_flags, 1142c63db04SHemant Agrawal dprc_token); 11516bbc98aSShreyansh Jain cmd_params = (struct dpio_cmd_create *)cmd.params; 11616bbc98aSShreyansh Jain cmd_params->num_priorities = cfg->num_priorities; 11716bbc98aSShreyansh Jain dpio_set_field(cmd_params->channel_mode, 11816bbc98aSShreyansh Jain CHANNEL_MODE, 11916bbc98aSShreyansh Jain cfg->channel_mode); 1202c63db04SHemant Agrawal 1212c63db04SHemant Agrawal /* send command to mc*/ 1222c63db04SHemant Agrawal err = mc_send_command(mc_io, &cmd); 1232c63db04SHemant Agrawal if (err) 1242c63db04SHemant Agrawal return err; 1252c63db04SHemant Agrawal 1262c63db04SHemant Agrawal /* retrieve response parameters */ 12716bbc98aSShreyansh Jain *obj_id = mc_cmd_read_object_id(&cmd); 1282c63db04SHemant Agrawal 1292c63db04SHemant Agrawal return 0; 1302c63db04SHemant Agrawal } 1312c63db04SHemant Agrawal 13216bbc98aSShreyansh Jain /** 13316bbc98aSShreyansh Jain * dpio_destroy() - Destroy the DPIO object and release all its resources. 13416bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 13516bbc98aSShreyansh Jain * @dprc_token: Parent container token; '0' for default container 13616bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 13716bbc98aSShreyansh Jain * @object_id: The object id; it must be a valid id within the container that 13816bbc98aSShreyansh Jain * created this object; 13916bbc98aSShreyansh Jain * 14016bbc98aSShreyansh Jain * The function accepts the authentication token of the parent container that 14116bbc98aSShreyansh Jain * created the object (not the one that currently owns the object). The object 14216bbc98aSShreyansh Jain * is searched within parent using the provided 'object_id'. 14316bbc98aSShreyansh Jain * All tokens to the object must be closed before calling destroy. 14416bbc98aSShreyansh Jain * 14516bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise 14616bbc98aSShreyansh Jain */ 1472c63db04SHemant Agrawal int dpio_destroy(struct fsl_mc_io *mc_io, 1482c63db04SHemant Agrawal uint16_t dprc_token, 1492c63db04SHemant Agrawal uint32_t cmd_flags, 1502c63db04SHemant Agrawal uint32_t object_id) 1512c63db04SHemant Agrawal { 15216bbc98aSShreyansh Jain struct dpio_cmd_destroy *cmd_params; 1532c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 1542c63db04SHemant Agrawal 1552c63db04SHemant Agrawal /* prepare command */ 1562c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_DESTROY, 1572c63db04SHemant Agrawal cmd_flags, 1582c63db04SHemant Agrawal dprc_token); 15916bbc98aSShreyansh Jain 1602c63db04SHemant Agrawal /* set object id to destroy */ 16116bbc98aSShreyansh Jain cmd_params = (struct dpio_cmd_destroy *)cmd.params; 16216bbc98aSShreyansh Jain cmd_params->dpio_id = cpu_to_le32(object_id); 16316bbc98aSShreyansh Jain 1642c63db04SHemant Agrawal /* send command to mc*/ 1652c63db04SHemant Agrawal return mc_send_command(mc_io, &cmd); 1662c63db04SHemant Agrawal } 1672c63db04SHemant Agrawal 16816bbc98aSShreyansh Jain /** 16916bbc98aSShreyansh Jain * dpio_enable() - Enable the DPIO, allow I/O portal operations. 17016bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 17116bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 17216bbc98aSShreyansh Jain * @token: Token of DPIO object 17316bbc98aSShreyansh Jain * 17416bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise 17516bbc98aSShreyansh Jain */ 1762c63db04SHemant Agrawal int dpio_enable(struct fsl_mc_io *mc_io, 1772c63db04SHemant Agrawal uint32_t cmd_flags, 1782c63db04SHemant Agrawal uint16_t token) 1792c63db04SHemant Agrawal { 1802c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 1812c63db04SHemant Agrawal 1822c63db04SHemant Agrawal /* prepare command */ 1832c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_ENABLE, 1842c63db04SHemant Agrawal cmd_flags, 1852c63db04SHemant Agrawal token); 1862c63db04SHemant Agrawal 1872c63db04SHemant Agrawal /* send command to mc*/ 1882c63db04SHemant Agrawal return mc_send_command(mc_io, &cmd); 1892c63db04SHemant Agrawal } 1902c63db04SHemant Agrawal 19116bbc98aSShreyansh Jain /** 19216bbc98aSShreyansh Jain * dpio_disable() - Disable the DPIO, stop any I/O portal operation. 19316bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 19416bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 19516bbc98aSShreyansh Jain * @token: Token of DPIO object 19616bbc98aSShreyansh Jain * 19716bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise 19816bbc98aSShreyansh Jain */ 1992c63db04SHemant Agrawal int dpio_disable(struct fsl_mc_io *mc_io, 2002c63db04SHemant Agrawal uint32_t cmd_flags, 2012c63db04SHemant Agrawal uint16_t token) 2022c63db04SHemant Agrawal { 2032c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 2042c63db04SHemant Agrawal 2052c63db04SHemant Agrawal /* prepare command */ 2062c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_DISABLE, 2072c63db04SHemant Agrawal cmd_flags, 2082c63db04SHemant Agrawal token); 2092c63db04SHemant Agrawal 2102c63db04SHemant Agrawal /* send command to mc*/ 2112c63db04SHemant Agrawal return mc_send_command(mc_io, &cmd); 2122c63db04SHemant Agrawal } 2132c63db04SHemant Agrawal 21416bbc98aSShreyansh Jain /** 21516bbc98aSShreyansh Jain * dpio_is_enabled() - Check if the DPIO is enabled. 21616bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 21716bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 21816bbc98aSShreyansh Jain * @token: Token of DPIO object 21916bbc98aSShreyansh Jain * @en: Returns '1' if object is enabled; '0' otherwise 22016bbc98aSShreyansh Jain * 22116bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 22216bbc98aSShreyansh Jain */ 2232c63db04SHemant Agrawal int dpio_is_enabled(struct fsl_mc_io *mc_io, 2242c63db04SHemant Agrawal uint32_t cmd_flags, 2252c63db04SHemant Agrawal uint16_t token, 2262c63db04SHemant Agrawal int *en) 2272c63db04SHemant Agrawal { 22816bbc98aSShreyansh Jain struct dpio_rsp_is_enabled *rsp_params; 2292c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 2302c63db04SHemant Agrawal int err; 23116bbc98aSShreyansh Jain 2322c63db04SHemant Agrawal /* prepare command */ 2332c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_IS_ENABLED, cmd_flags, 2342c63db04SHemant Agrawal token); 2352c63db04SHemant Agrawal 2362c63db04SHemant Agrawal /* send command to mc*/ 2372c63db04SHemant Agrawal err = mc_send_command(mc_io, &cmd); 2382c63db04SHemant Agrawal if (err) 2392c63db04SHemant Agrawal return err; 2402c63db04SHemant Agrawal 2412c63db04SHemant Agrawal /* retrieve response parameters */ 24216bbc98aSShreyansh Jain rsp_params = (struct dpio_rsp_is_enabled *)cmd.params; 24316bbc98aSShreyansh Jain *en = dpio_get_field(rsp_params->en, ENABLE); 2442c63db04SHemant Agrawal 2452c63db04SHemant Agrawal return 0; 2462c63db04SHemant Agrawal } 2472c63db04SHemant Agrawal 24816bbc98aSShreyansh Jain /** 24916bbc98aSShreyansh Jain * dpio_reset() - Reset the DPIO, returns the object to initial state. 25016bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 25116bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 25216bbc98aSShreyansh Jain * @token: Token of DPIO object 25316bbc98aSShreyansh Jain * 25416bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 25516bbc98aSShreyansh Jain */ 2562c63db04SHemant Agrawal int dpio_reset(struct fsl_mc_io *mc_io, 2572c63db04SHemant Agrawal uint32_t cmd_flags, 2582c63db04SHemant Agrawal uint16_t token) 2592c63db04SHemant Agrawal { 2602c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 2612c63db04SHemant Agrawal 2622c63db04SHemant Agrawal /* prepare command */ 2632c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_RESET, 2642c63db04SHemant Agrawal cmd_flags, 2652c63db04SHemant Agrawal token); 2662c63db04SHemant Agrawal 2672c63db04SHemant Agrawal /* send command to mc*/ 2682c63db04SHemant Agrawal return mc_send_command(mc_io, &cmd); 2692c63db04SHemant Agrawal } 2702c63db04SHemant Agrawal 271b4a63e60SHemant Agrawal /** 272b4a63e60SHemant Agrawal * dpio_get_attributes() - Retrieve DPIO attributes 273b4a63e60SHemant Agrawal * @mc_io: Pointer to MC portal's I/O object 274b4a63e60SHemant Agrawal * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 275b4a63e60SHemant Agrawal * @token: Token of DPIO object 276b4a63e60SHemant Agrawal * @attr: Returned object's attributes 277b4a63e60SHemant Agrawal * 278b4a63e60SHemant Agrawal * Return: '0' on Success; Error code otherwise 279b4a63e60SHemant Agrawal */ 2802c63db04SHemant Agrawal int dpio_get_attributes(struct fsl_mc_io *mc_io, 2812c63db04SHemant Agrawal uint32_t cmd_flags, 2822c63db04SHemant Agrawal uint16_t token, 2832c63db04SHemant Agrawal struct dpio_attr *attr) 2842c63db04SHemant Agrawal { 28516bbc98aSShreyansh Jain struct dpio_rsp_get_attr *rsp_params; 2862c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 2872c63db04SHemant Agrawal int err; 2882c63db04SHemant Agrawal 2892c63db04SHemant Agrawal /* prepare command */ 2902c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_ATTR, 2912c63db04SHemant Agrawal cmd_flags, 2922c63db04SHemant Agrawal token); 2932c63db04SHemant Agrawal 2942c63db04SHemant Agrawal /* send command to mc*/ 2952c63db04SHemant Agrawal err = mc_send_command(mc_io, &cmd); 2962c63db04SHemant Agrawal if (err) 2972c63db04SHemant Agrawal return err; 2982c63db04SHemant Agrawal 2992c63db04SHemant Agrawal /* retrieve response parameters */ 30016bbc98aSShreyansh Jain rsp_params = (struct dpio_rsp_get_attr *)cmd.params; 30116bbc98aSShreyansh Jain attr->id = le32_to_cpu(rsp_params->id); 30216bbc98aSShreyansh Jain attr->qbman_portal_id = le16_to_cpu(rsp_params->qbman_portal_id); 30316bbc98aSShreyansh Jain attr->num_priorities = rsp_params->num_priorities; 30416bbc98aSShreyansh Jain attr->qbman_portal_ce_offset = 30516bbc98aSShreyansh Jain le64_to_cpu(rsp_params->qbman_portal_ce_offset); 30616bbc98aSShreyansh Jain attr->qbman_portal_ci_offset = 30716bbc98aSShreyansh Jain le64_to_cpu(rsp_params->qbman_portal_ci_offset); 30816bbc98aSShreyansh Jain attr->qbman_version = le32_to_cpu(rsp_params->qbman_version); 30916bbc98aSShreyansh Jain attr->clk = le32_to_cpu(rsp_params->clk); 31016bbc98aSShreyansh Jain attr->channel_mode = dpio_get_field(rsp_params->channel_mode, 31116bbc98aSShreyansh Jain ATTR_CHANNEL_MODE); 3122c63db04SHemant Agrawal 3132c63db04SHemant Agrawal return 0; 3142c63db04SHemant Agrawal } 3152c63db04SHemant Agrawal 31616bbc98aSShreyansh Jain /** 31716bbc98aSShreyansh Jain * dpio_set_stashing_destination() - Set the stashing destination. 31816bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 31916bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 32016bbc98aSShreyansh Jain * @token: Token of DPIO object 32116bbc98aSShreyansh Jain * @sdest: Stashing destination value 32216bbc98aSShreyansh Jain * 32316bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 32416bbc98aSShreyansh Jain */ 3252c63db04SHemant Agrawal int dpio_set_stashing_destination(struct fsl_mc_io *mc_io, 3262c63db04SHemant Agrawal uint32_t cmd_flags, 3272c63db04SHemant Agrawal uint16_t token, 3282c63db04SHemant Agrawal uint8_t sdest) 3292c63db04SHemant Agrawal { 33016bbc98aSShreyansh Jain struct dpio_stashing_dest *cmd_params; 3312c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 3322c63db04SHemant Agrawal 3332c63db04SHemant Agrawal /* prepare command */ 3342c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_SET_STASHING_DEST, 3352c63db04SHemant Agrawal cmd_flags, 3362c63db04SHemant Agrawal token); 33716bbc98aSShreyansh Jain cmd_params = (struct dpio_stashing_dest *)cmd.params; 33816bbc98aSShreyansh Jain cmd_params->sdest = sdest; 3392c63db04SHemant Agrawal 3402c63db04SHemant Agrawal /* send command to mc*/ 3412c63db04SHemant Agrawal return mc_send_command(mc_io, &cmd); 3422c63db04SHemant Agrawal } 3432c63db04SHemant Agrawal 34416bbc98aSShreyansh Jain /** 34516bbc98aSShreyansh Jain * dpio_get_stashing_destination() - Get the stashing destination.. 34616bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 34716bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 34816bbc98aSShreyansh Jain * @token: Token of DPIO object 34916bbc98aSShreyansh Jain * @sdest: Returns the stashing destination value 35016bbc98aSShreyansh Jain * 35116bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 35216bbc98aSShreyansh Jain */ 3532c63db04SHemant Agrawal int dpio_get_stashing_destination(struct fsl_mc_io *mc_io, 3542c63db04SHemant Agrawal uint32_t cmd_flags, 3552c63db04SHemant Agrawal uint16_t token, 3562c63db04SHemant Agrawal uint8_t *sdest) 3572c63db04SHemant Agrawal { 35816bbc98aSShreyansh Jain struct dpio_stashing_dest *rsp_params; 3592c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 3602c63db04SHemant Agrawal int err; 3612c63db04SHemant Agrawal 3622c63db04SHemant Agrawal /* prepare command */ 3632c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_STASHING_DEST, 3642c63db04SHemant Agrawal cmd_flags, 3652c63db04SHemant Agrawal token); 3662c63db04SHemant Agrawal 3672c63db04SHemant Agrawal /* send command to mc*/ 3682c63db04SHemant Agrawal err = mc_send_command(mc_io, &cmd); 3692c63db04SHemant Agrawal if (err) 3702c63db04SHemant Agrawal return err; 3712c63db04SHemant Agrawal 3722c63db04SHemant Agrawal /* retrieve response parameters */ 37316bbc98aSShreyansh Jain rsp_params = (struct dpio_stashing_dest *)cmd.params; 37416bbc98aSShreyansh Jain *sdest = rsp_params->sdest; 3752c63db04SHemant Agrawal 3762c63db04SHemant Agrawal return 0; 3772c63db04SHemant Agrawal } 3782c63db04SHemant Agrawal 37916bbc98aSShreyansh Jain /** 380*591200efSGagandeep Singh * dpio_set_stashing_destination_by_core_id() - Set the stashing destination source 381*591200efSGagandeep Singh * using the core id. 382*591200efSGagandeep Singh * @mc_io: Pointer to MC portal's I/O object 383*591200efSGagandeep Singh * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 384*591200efSGagandeep Singh * @token: Token of DPIO object 385*591200efSGagandeep Singh * @core_id: Core id stashing destination 386*591200efSGagandeep Singh * 387*591200efSGagandeep Singh * Return: '0' on Success; Error code otherwise. 388*591200efSGagandeep Singh */ 389*591200efSGagandeep Singh int dpio_set_stashing_destination_by_core_id(struct fsl_mc_io *mc_io, 390*591200efSGagandeep Singh uint32_t cmd_flags, 391*591200efSGagandeep Singh uint16_t token, 392*591200efSGagandeep Singh uint8_t core_id) 393*591200efSGagandeep Singh { 394*591200efSGagandeep Singh struct dpio_stashing_dest_by_core_id *cmd_params; 395*591200efSGagandeep Singh struct mc_command cmd = { 0 }; 396*591200efSGagandeep Singh 397*591200efSGagandeep Singh /* prepare command */ 398*591200efSGagandeep Singh cmd.header = mc_encode_cmd_header(DPIO_CMDID_SET_STASHING_DEST_BY_CORE_ID, 399*591200efSGagandeep Singh cmd_flags, 400*591200efSGagandeep Singh token); 401*591200efSGagandeep Singh cmd_params = (struct dpio_stashing_dest_by_core_id *)cmd.params; 402*591200efSGagandeep Singh cmd_params->core_id = core_id; 403*591200efSGagandeep Singh 404*591200efSGagandeep Singh /* send command to mc*/ 405*591200efSGagandeep Singh return mc_send_command(mc_io, &cmd); 406*591200efSGagandeep Singh } 407*591200efSGagandeep Singh 408*591200efSGagandeep Singh /** 409*591200efSGagandeep Singh * dpio_set_stashing_destination_source() - Set the stashing destination source. 410*591200efSGagandeep Singh * @mc_io: Pointer to MC portal's I/O object 411*591200efSGagandeep Singh * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 412*591200efSGagandeep Singh * @token: Token of DPIO object 413*591200efSGagandeep Singh * @ss: Stashing destination source (0 manual/1 automatic) 414*591200efSGagandeep Singh * 415*591200efSGagandeep Singh * Return: '0' on Success; Error code otherwise. 416*591200efSGagandeep Singh */ 417*591200efSGagandeep Singh int dpio_set_stashing_destination_source(struct fsl_mc_io *mc_io, 418*591200efSGagandeep Singh uint32_t cmd_flags, 419*591200efSGagandeep Singh uint16_t token, 420*591200efSGagandeep Singh uint8_t ss) 421*591200efSGagandeep Singh { 422*591200efSGagandeep Singh struct dpio_stashing_dest_source *cmd_params; 423*591200efSGagandeep Singh struct mc_command cmd = { 0 }; 424*591200efSGagandeep Singh 425*591200efSGagandeep Singh /* prepare command */ 426*591200efSGagandeep Singh cmd.header = mc_encode_cmd_header(DPIO_CMDID_SET_STASHING_DEST_SOURCE, 427*591200efSGagandeep Singh cmd_flags, 428*591200efSGagandeep Singh token); 429*591200efSGagandeep Singh cmd_params = (struct dpio_stashing_dest_source *)cmd.params; 430*591200efSGagandeep Singh cmd_params->ss = ss; 431*591200efSGagandeep Singh 432*591200efSGagandeep Singh /* send command to mc*/ 433*591200efSGagandeep Singh return mc_send_command(mc_io, &cmd); 434*591200efSGagandeep Singh } 435*591200efSGagandeep Singh 436*591200efSGagandeep Singh /** 437*591200efSGagandeep Singh * dpio_get_stashing_destination_source() - Get the stashing destination source. 438*591200efSGagandeep Singh * @mc_io: Pointer to MC portal's I/O object 439*591200efSGagandeep Singh * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 440*591200efSGagandeep Singh * @token: Token of DPIO object 441*591200efSGagandeep Singh * @ss: Returns the stashing destination source (0 manual/1 automatic) 442*591200efSGagandeep Singh * 443*591200efSGagandeep Singh * Return: '0' on Success; Error code otherwise. 444*591200efSGagandeep Singh */ 445*591200efSGagandeep Singh int dpio_get_stashing_destination_source(struct fsl_mc_io *mc_io, 446*591200efSGagandeep Singh uint32_t cmd_flags, 447*591200efSGagandeep Singh uint16_t token, 448*591200efSGagandeep Singh uint8_t *ss) 449*591200efSGagandeep Singh { 450*591200efSGagandeep Singh struct dpio_stashing_dest_source *rsp_params; 451*591200efSGagandeep Singh struct mc_command cmd = { 0 }; 452*591200efSGagandeep Singh int err; 453*591200efSGagandeep Singh 454*591200efSGagandeep Singh /* prepare command */ 455*591200efSGagandeep Singh cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_STASHING_DEST_SOURCE, 456*591200efSGagandeep Singh cmd_flags, 457*591200efSGagandeep Singh token); 458*591200efSGagandeep Singh 459*591200efSGagandeep Singh /* send command to mc*/ 460*591200efSGagandeep Singh err = mc_send_command(mc_io, &cmd); 461*591200efSGagandeep Singh if (err) 462*591200efSGagandeep Singh return err; 463*591200efSGagandeep Singh 464*591200efSGagandeep Singh /* retrieve response parameters */ 465*591200efSGagandeep Singh rsp_params = (struct dpio_stashing_dest_source *)cmd.params; 466*591200efSGagandeep Singh *ss = rsp_params->ss; 467*591200efSGagandeep Singh 468*591200efSGagandeep Singh return 0; 469*591200efSGagandeep Singh } 470*591200efSGagandeep Singh 471*591200efSGagandeep Singh /** 47216bbc98aSShreyansh Jain * dpio_add_static_dequeue_channel() - Add a static dequeue channel. 47316bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 47416bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 47516bbc98aSShreyansh Jain * @token: Token of DPIO object 47616bbc98aSShreyansh Jain * @dpcon_id: DPCON object ID 47716bbc98aSShreyansh Jain * @channel_index: Returned channel index to be used in qbman API 47816bbc98aSShreyansh Jain * 47916bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 48016bbc98aSShreyansh Jain */ 4813844bdd1SNipun Gupta int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io, 4823844bdd1SNipun Gupta uint32_t cmd_flags, 4833844bdd1SNipun Gupta uint16_t token, 4843844bdd1SNipun Gupta int dpcon_id, 4853844bdd1SNipun Gupta uint8_t *channel_index) 4863844bdd1SNipun Gupta { 48716bbc98aSShreyansh Jain struct dpio_rsp_add_static_dequeue_channel *rsp_params; 48816bbc98aSShreyansh Jain struct dpio_cmd_static_dequeue_channel *cmd_params; 4893844bdd1SNipun Gupta struct mc_command cmd = { 0 }; 4903844bdd1SNipun Gupta int err; 4913844bdd1SNipun Gupta 4923844bdd1SNipun Gupta /* prepare command */ 4933844bdd1SNipun Gupta cmd.header = mc_encode_cmd_header(DPIO_CMDID_ADD_STATIC_DEQUEUE_CHANNEL, 4943844bdd1SNipun Gupta cmd_flags, 4953844bdd1SNipun Gupta token); 49616bbc98aSShreyansh Jain cmd_params = (struct dpio_cmd_static_dequeue_channel *)cmd.params; 49716bbc98aSShreyansh Jain cmd_params->dpcon_id = cpu_to_le32(dpcon_id); 4983844bdd1SNipun Gupta 4993844bdd1SNipun Gupta /* send command to mc*/ 5003844bdd1SNipun Gupta err = mc_send_command(mc_io, &cmd); 5013844bdd1SNipun Gupta if (err) 5023844bdd1SNipun Gupta return err; 5033844bdd1SNipun Gupta 5043844bdd1SNipun Gupta /* retrieve response parameters */ 50516bbc98aSShreyansh Jain rsp_params = (struct dpio_rsp_add_static_dequeue_channel *)cmd.params; 50616bbc98aSShreyansh Jain *channel_index = rsp_params->channel_index; 5073844bdd1SNipun Gupta 5083844bdd1SNipun Gupta return 0; 5093844bdd1SNipun Gupta } 5103844bdd1SNipun Gupta 51116bbc98aSShreyansh Jain /** 51216bbc98aSShreyansh Jain * dpio_remove_static_dequeue_channel() - Remove a static dequeue channel. 51316bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 51416bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 51516bbc98aSShreyansh Jain * @token: Token of DPIO object 51616bbc98aSShreyansh Jain * @dpcon_id: DPCON object ID 51716bbc98aSShreyansh Jain * 51816bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 51916bbc98aSShreyansh Jain */ 5203844bdd1SNipun Gupta int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io, 5213844bdd1SNipun Gupta uint32_t cmd_flags, 5223844bdd1SNipun Gupta uint16_t token, 5233844bdd1SNipun Gupta int dpcon_id) 5243844bdd1SNipun Gupta { 52516bbc98aSShreyansh Jain struct dpio_cmd_static_dequeue_channel *cmd_params; 5263844bdd1SNipun Gupta struct mc_command cmd = { 0 }; 5273844bdd1SNipun Gupta 5283844bdd1SNipun Gupta /* prepare command */ 5293844bdd1SNipun Gupta cmd.header = mc_encode_cmd_header( 5303844bdd1SNipun Gupta DPIO_CMDID_REMOVE_STATIC_DEQUEUE_CHANNEL, 5313844bdd1SNipun Gupta cmd_flags, 5323844bdd1SNipun Gupta token); 53316bbc98aSShreyansh Jain cmd_params = (struct dpio_cmd_static_dequeue_channel *)cmd.params; 53416bbc98aSShreyansh Jain cmd_params->dpcon_id = cpu_to_le32(dpcon_id); 5353844bdd1SNipun Gupta 5363844bdd1SNipun Gupta /* send command to mc*/ 5373844bdd1SNipun Gupta return mc_send_command(mc_io, &cmd); 5383844bdd1SNipun Gupta } 5393844bdd1SNipun Gupta 54016bbc98aSShreyansh Jain /** 54116bbc98aSShreyansh Jain * dpio_get_api_version() - Get Data Path I/O API version 54216bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object 54316bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 54416bbc98aSShreyansh Jain * @major_ver: Major version of data path i/o API 54516bbc98aSShreyansh Jain * @minor_ver: Minor version of data path i/o API 54616bbc98aSShreyansh Jain * 54716bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise. 54816bbc98aSShreyansh Jain */ 5492c63db04SHemant Agrawal int dpio_get_api_version(struct fsl_mc_io *mc_io, 5502c63db04SHemant Agrawal uint32_t cmd_flags, 5512c63db04SHemant Agrawal uint16_t *major_ver, 5522c63db04SHemant Agrawal uint16_t *minor_ver) 5532c63db04SHemant Agrawal { 55416bbc98aSShreyansh Jain struct dpio_rsp_get_api_version *rsp_params; 5552c63db04SHemant Agrawal struct mc_command cmd = { 0 }; 5562c63db04SHemant Agrawal int err; 5572c63db04SHemant Agrawal 5582c63db04SHemant Agrawal cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_API_VERSION, 5592c63db04SHemant Agrawal cmd_flags, 5602c63db04SHemant Agrawal 0); 5612c63db04SHemant Agrawal 5622c63db04SHemant Agrawal err = mc_send_command(mc_io, &cmd); 5632c63db04SHemant Agrawal if (err) 5642c63db04SHemant Agrawal return err; 5652c63db04SHemant Agrawal 56616bbc98aSShreyansh Jain rsp_params = (struct dpio_rsp_get_api_version *)cmd.params; 56716bbc98aSShreyansh Jain *major_ver = le16_to_cpu(rsp_params->major); 56816bbc98aSShreyansh Jain *minor_ver = le16_to_cpu(rsp_params->minor); 5692c63db04SHemant Agrawal 5702c63db04SHemant Agrawal return 0; 5712c63db04SHemant Agrawal } 572