1131a75b6SHemant Agrawal /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
27ee46864SHemant Agrawal *
37ee46864SHemant Agrawal * Copyright 2013-2016 Freescale Semiconductor Inc.
4131a75b6SHemant Agrawal * Copyright 2016-2017 NXP
57ee46864SHemant Agrawal *
67ee46864SHemant Agrawal */
77ee46864SHemant Agrawal #include <fsl_mc_sys.h>
87ee46864SHemant Agrawal #include <fsl_mc_cmd.h>
97ee46864SHemant Agrawal #include <fsl_dpbp.h>
107ee46864SHemant Agrawal #include <fsl_dpbp_cmd.h>
117ee46864SHemant Agrawal
1216bbc98aSShreyansh Jain /**
1316bbc98aSShreyansh Jain * dpbp_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 * @dpbp_id: DPBP 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 dpbp_create function.
2216bbc98aSShreyansh Jain * This function returns a unique authentication token,
2316bbc98aSShreyansh Jain * associated with the specific object ID and the specific MC
2416bbc98aSShreyansh Jain * portal; this token must be used in all subsequent commands for
2516bbc98aSShreyansh Jain * this specific object
2616bbc98aSShreyansh Jain *
2716bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
2816bbc98aSShreyansh Jain */
dpbp_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int dpbp_id,uint16_t * token)297ee46864SHemant Agrawal int dpbp_open(struct fsl_mc_io *mc_io,
307ee46864SHemant Agrawal uint32_t cmd_flags,
317ee46864SHemant Agrawal int dpbp_id,
327ee46864SHemant Agrawal uint16_t *token)
337ee46864SHemant Agrawal {
3416bbc98aSShreyansh Jain struct dpbp_cmd_open *cmd_params;
357ee46864SHemant Agrawal struct mc_command cmd = { 0 };
367ee46864SHemant Agrawal int err;
377ee46864SHemant Agrawal
387ee46864SHemant Agrawal /* prepare command */
397ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_OPEN,
4016bbc98aSShreyansh Jain cmd_flags, 0);
4116bbc98aSShreyansh Jain cmd_params = (struct dpbp_cmd_open *)cmd.params;
4216bbc98aSShreyansh Jain cmd_params->dpbp_id = cpu_to_le32(dpbp_id);
437ee46864SHemant Agrawal
447ee46864SHemant Agrawal /* send command to mc*/
457ee46864SHemant Agrawal err = mc_send_command(mc_io, &cmd);
467ee46864SHemant Agrawal if (err)
477ee46864SHemant Agrawal return err;
487ee46864SHemant Agrawal
497ee46864SHemant Agrawal /* retrieve response parameters */
5016bbc98aSShreyansh Jain *token = mc_cmd_hdr_read_token(&cmd);
517ee46864SHemant Agrawal
527ee46864SHemant Agrawal return err;
537ee46864SHemant Agrawal }
547ee46864SHemant Agrawal
5516bbc98aSShreyansh Jain /**
5616bbc98aSShreyansh Jain * dpbp_close() - Close the control session of the object
5716bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
5816bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
5916bbc98aSShreyansh Jain * @token: Token of DPBP object
6016bbc98aSShreyansh Jain *
6116bbc98aSShreyansh Jain * After this function is called, no further operations are
6216bbc98aSShreyansh Jain * allowed on the object without opening a new control session.
6316bbc98aSShreyansh Jain *
6416bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
6516bbc98aSShreyansh Jain */
dpbp_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)667ee46864SHemant Agrawal int dpbp_close(struct fsl_mc_io *mc_io,
677ee46864SHemant Agrawal uint32_t cmd_flags,
687ee46864SHemant Agrawal uint16_t token)
697ee46864SHemant Agrawal {
707ee46864SHemant Agrawal struct mc_command cmd = { 0 };
717ee46864SHemant Agrawal
727ee46864SHemant Agrawal /* prepare command */
737ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, cmd_flags,
747ee46864SHemant Agrawal token);
757ee46864SHemant Agrawal
767ee46864SHemant Agrawal /* send command to mc*/
777ee46864SHemant Agrawal return mc_send_command(mc_io, &cmd);
787ee46864SHemant Agrawal }
797ee46864SHemant Agrawal
8016bbc98aSShreyansh Jain /**
8116bbc98aSShreyansh Jain * dpbp_create() - Create the DPBP object.
8216bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
8316bbc98aSShreyansh Jain * @dprc_token: Parent container token; '0' for default container
8416bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
8516bbc98aSShreyansh Jain * @cfg: Configuration structure
8616bbc98aSShreyansh Jain * @obj_id: Returned object id; use in subsequent API calls
8716bbc98aSShreyansh Jain *
8816bbc98aSShreyansh Jain * Create the DPBP object, allocate required resources and
8916bbc98aSShreyansh Jain * perform required initialization.
9016bbc98aSShreyansh Jain *
9116bbc98aSShreyansh Jain * This function accepts an authentication token of a parent
9216bbc98aSShreyansh Jain * container that this object should be assigned to and returns
9316bbc98aSShreyansh Jain * an object id. This object_id will be used in all subsequent calls to
9416bbc98aSShreyansh Jain * this specific object.
9516bbc98aSShreyansh Jain *
9616bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
9716bbc98aSShreyansh Jain */
dpbp_create(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,const struct dpbp_cfg * cfg,uint32_t * obj_id)987ee46864SHemant Agrawal int dpbp_create(struct fsl_mc_io *mc_io,
997ee46864SHemant Agrawal uint16_t dprc_token,
1007ee46864SHemant Agrawal uint32_t cmd_flags,
1017ee46864SHemant Agrawal const struct dpbp_cfg *cfg,
1027ee46864SHemant Agrawal uint32_t *obj_id)
1037ee46864SHemant Agrawal {
1047ee46864SHemant Agrawal struct mc_command cmd = { 0 };
1057ee46864SHemant Agrawal int err;
1067ee46864SHemant Agrawal
1077ee46864SHemant Agrawal (void)(cfg); /* unused */
1087ee46864SHemant Agrawal
1097ee46864SHemant Agrawal /* prepare command */
1107ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_CREATE,
11116bbc98aSShreyansh Jain cmd_flags, dprc_token);
1127ee46864SHemant Agrawal
1137ee46864SHemant Agrawal /* send command to mc*/
1147ee46864SHemant Agrawal err = mc_send_command(mc_io, &cmd);
1157ee46864SHemant Agrawal if (err)
1167ee46864SHemant Agrawal return err;
1177ee46864SHemant Agrawal
1187ee46864SHemant Agrawal /* retrieve response parameters */
11916bbc98aSShreyansh Jain *obj_id = mc_cmd_read_object_id(&cmd);
1207ee46864SHemant Agrawal
1217ee46864SHemant Agrawal return 0;
1227ee46864SHemant Agrawal }
1237ee46864SHemant Agrawal
12416bbc98aSShreyansh Jain /**
12516bbc98aSShreyansh Jain * dpbp_destroy() - Destroy the DPBP object and release all its resources.
12616bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
12716bbc98aSShreyansh Jain * @dprc_token: Parent container token; '0' for default container
12816bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
12916bbc98aSShreyansh Jain * @obj_id: ID of DPBP object
13016bbc98aSShreyansh Jain *
13116bbc98aSShreyansh Jain * Return: '0' on Success; error code otherwise.
13216bbc98aSShreyansh Jain */
dpbp_destroy(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,uint32_t obj_id)1337ee46864SHemant Agrawal int dpbp_destroy(struct fsl_mc_io *mc_io,
1347ee46864SHemant Agrawal uint16_t dprc_token,
1357ee46864SHemant Agrawal uint32_t cmd_flags,
13616bbc98aSShreyansh Jain uint32_t obj_id)
1377ee46864SHemant Agrawal {
13816bbc98aSShreyansh Jain struct dpbp_cmd_destroy *cmd_params;
1397ee46864SHemant Agrawal struct mc_command cmd = { 0 };
1407ee46864SHemant Agrawal
1417ee46864SHemant Agrawal /* prepare command */
1427ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_DESTROY,
14316bbc98aSShreyansh Jain cmd_flags, dprc_token);
14416bbc98aSShreyansh Jain
14516bbc98aSShreyansh Jain cmd_params = (struct dpbp_cmd_destroy *)cmd.params;
14616bbc98aSShreyansh Jain cmd_params->object_id = cpu_to_le32(obj_id);
14716bbc98aSShreyansh Jain
1487ee46864SHemant Agrawal /* send command to mc*/
1497ee46864SHemant Agrawal return mc_send_command(mc_io, &cmd);
1507ee46864SHemant Agrawal }
1517ee46864SHemant Agrawal
15216bbc98aSShreyansh Jain /**
15316bbc98aSShreyansh Jain * dpbp_enable() - Enable the DPBP.
15416bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
15516bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
15616bbc98aSShreyansh Jain * @token: Token of DPBP object
15716bbc98aSShreyansh Jain *
15816bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
15916bbc98aSShreyansh Jain */
dpbp_enable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)1607ee46864SHemant Agrawal int dpbp_enable(struct fsl_mc_io *mc_io,
1617ee46864SHemant Agrawal uint32_t cmd_flags,
1627ee46864SHemant Agrawal uint16_t token)
1637ee46864SHemant Agrawal {
1647ee46864SHemant Agrawal struct mc_command cmd = { 0 };
1657ee46864SHemant Agrawal
1667ee46864SHemant Agrawal /* prepare command */
1677ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, cmd_flags,
1687ee46864SHemant Agrawal token);
1697ee46864SHemant Agrawal
1707ee46864SHemant Agrawal /* send command to mc*/
1717ee46864SHemant Agrawal return mc_send_command(mc_io, &cmd);
1727ee46864SHemant Agrawal }
1737ee46864SHemant Agrawal
17416bbc98aSShreyansh Jain /**
17516bbc98aSShreyansh Jain * dpbp_disable() - Disable the DPBP.
17616bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
17716bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
17816bbc98aSShreyansh Jain * @token: Token of DPBP object
17916bbc98aSShreyansh Jain *
18016bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
18116bbc98aSShreyansh Jain */
dpbp_disable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)1827ee46864SHemant Agrawal int dpbp_disable(struct fsl_mc_io *mc_io,
1837ee46864SHemant Agrawal uint32_t cmd_flags,
1847ee46864SHemant Agrawal uint16_t token)
1857ee46864SHemant Agrawal {
1867ee46864SHemant Agrawal struct mc_command cmd = { 0 };
1877ee46864SHemant Agrawal
1887ee46864SHemant Agrawal /* prepare command */
1897ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_DISABLE,
19016bbc98aSShreyansh Jain cmd_flags, token);
1917ee46864SHemant Agrawal
1927ee46864SHemant Agrawal /* send command to mc*/
1937ee46864SHemant Agrawal return mc_send_command(mc_io, &cmd);
1947ee46864SHemant Agrawal }
1957ee46864SHemant Agrawal
19616bbc98aSShreyansh Jain /**
19716bbc98aSShreyansh Jain * dpbp_is_enabled() - Check if the DPBP is enabled.
19816bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
19916bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
20016bbc98aSShreyansh Jain * @token: Token of DPBP object
20116bbc98aSShreyansh Jain * @en: Returns '1' if object is enabled; '0' otherwise
20216bbc98aSShreyansh Jain *
20316bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
20416bbc98aSShreyansh Jain */
dpbp_is_enabled(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int * en)2057ee46864SHemant Agrawal int dpbp_is_enabled(struct fsl_mc_io *mc_io,
2067ee46864SHemant Agrawal uint32_t cmd_flags,
2077ee46864SHemant Agrawal uint16_t token,
2087ee46864SHemant Agrawal int *en)
2097ee46864SHemant Agrawal {
21016bbc98aSShreyansh Jain struct dpbp_rsp_is_enabled *rsp_params;
2117ee46864SHemant Agrawal struct mc_command cmd = { 0 };
2127ee46864SHemant Agrawal int err;
21316bbc98aSShreyansh Jain
2147ee46864SHemant Agrawal /* prepare command */
2157ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_IS_ENABLED, cmd_flags,
2167ee46864SHemant Agrawal token);
2177ee46864SHemant Agrawal
2187ee46864SHemant Agrawal /* send command to mc*/
2197ee46864SHemant Agrawal err = mc_send_command(mc_io, &cmd);
2207ee46864SHemant Agrawal if (err)
2217ee46864SHemant Agrawal return err;
2227ee46864SHemant Agrawal
2237ee46864SHemant Agrawal /* retrieve response parameters */
22416bbc98aSShreyansh Jain rsp_params = (struct dpbp_rsp_is_enabled *)cmd.params;
22516bbc98aSShreyansh Jain *en = rsp_params->enabled & DPBP_ENABLE;
2267ee46864SHemant Agrawal
2277ee46864SHemant Agrawal return 0;
2287ee46864SHemant Agrawal }
2297ee46864SHemant Agrawal
23016bbc98aSShreyansh Jain /**
23116bbc98aSShreyansh Jain * dpbp_reset() - Reset the DPBP, returns the object to initial state.
23216bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
23316bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
23416bbc98aSShreyansh Jain * @token: Token of DPBP object
23516bbc98aSShreyansh Jain *
23616bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
23716bbc98aSShreyansh Jain */
dpbp_reset(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)2387ee46864SHemant Agrawal int dpbp_reset(struct fsl_mc_io *mc_io,
2397ee46864SHemant Agrawal uint32_t cmd_flags,
2407ee46864SHemant Agrawal uint16_t token)
2417ee46864SHemant Agrawal {
2427ee46864SHemant Agrawal struct mc_command cmd = { 0 };
2437ee46864SHemant Agrawal
2447ee46864SHemant Agrawal /* prepare command */
2457ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_RESET,
24616bbc98aSShreyansh Jain cmd_flags, token);
2477ee46864SHemant Agrawal
2487ee46864SHemant Agrawal /* send command to mc*/
2497ee46864SHemant Agrawal return mc_send_command(mc_io, &cmd);
2507ee46864SHemant Agrawal }
251*b4a63e60SHemant Agrawal /**
252*b4a63e60SHemant Agrawal * dpbp_get_attributes - Retrieve DPBP attributes.
253*b4a63e60SHemant Agrawal *
254*b4a63e60SHemant Agrawal * @mc_io: Pointer to MC portal's I/O object
255*b4a63e60SHemant Agrawal * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
256*b4a63e60SHemant Agrawal * @token: Token of DPBP object
257*b4a63e60SHemant Agrawal * @attr: Returned object's attributes
258*b4a63e60SHemant Agrawal *
259*b4a63e60SHemant Agrawal * Return: '0' on Success; Error code otherwise.
260*b4a63e60SHemant Agrawal */
dpbp_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpbp_attr * attr)2617ee46864SHemant Agrawal int dpbp_get_attributes(struct fsl_mc_io *mc_io,
2627ee46864SHemant Agrawal uint32_t cmd_flags,
2637ee46864SHemant Agrawal uint16_t token,
2647ee46864SHemant Agrawal struct dpbp_attr *attr)
2657ee46864SHemant Agrawal {
26616bbc98aSShreyansh Jain struct dpbp_rsp_get_attributes *rsp_params;
2677ee46864SHemant Agrawal struct mc_command cmd = { 0 };
2687ee46864SHemant Agrawal int err;
2697ee46864SHemant Agrawal
2707ee46864SHemant Agrawal /* prepare command */
2717ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_ATTR,
27216bbc98aSShreyansh Jain cmd_flags, token);
2737ee46864SHemant Agrawal
2747ee46864SHemant Agrawal /* send command to mc*/
2757ee46864SHemant Agrawal err = mc_send_command(mc_io, &cmd);
2767ee46864SHemant Agrawal if (err)
2777ee46864SHemant Agrawal return err;
2787ee46864SHemant Agrawal
2797ee46864SHemant Agrawal /* retrieve response parameters */
28016bbc98aSShreyansh Jain rsp_params = (struct dpbp_rsp_get_attributes *)cmd.params;
28116bbc98aSShreyansh Jain attr->bpid = le16_to_cpu(rsp_params->bpid);
28216bbc98aSShreyansh Jain attr->id = le32_to_cpu(rsp_params->id);
2837ee46864SHemant Agrawal
2847ee46864SHemant Agrawal return 0;
2857ee46864SHemant Agrawal }
2867ee46864SHemant Agrawal
28716bbc98aSShreyansh Jain /**
28816bbc98aSShreyansh Jain * dpbp_get_api_version - Get Data Path Buffer Pool API version
28916bbc98aSShreyansh Jain * @mc_io: Pointer to Mc portal's I/O object
29016bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
29116bbc98aSShreyansh Jain * @major_ver: Major version of Buffer Pool API
29216bbc98aSShreyansh Jain * @minor_ver: Minor version of Buffer Pool API
29316bbc98aSShreyansh Jain *
29416bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
29516bbc98aSShreyansh Jain */
dpbp_get_api_version(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t * major_ver,uint16_t * minor_ver)2967ee46864SHemant Agrawal int dpbp_get_api_version(struct fsl_mc_io *mc_io,
2977ee46864SHemant Agrawal uint32_t cmd_flags,
2987ee46864SHemant Agrawal uint16_t *major_ver,
2997ee46864SHemant Agrawal uint16_t *minor_ver)
3007ee46864SHemant Agrawal {
30116bbc98aSShreyansh Jain struct dpbp_rsp_get_api_version *rsp_params;
3027ee46864SHemant Agrawal struct mc_command cmd = { 0 };
3037ee46864SHemant Agrawal int err;
3047ee46864SHemant Agrawal
30516bbc98aSShreyansh Jain /* prepare command */
3067ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_API_VERSION,
30716bbc98aSShreyansh Jain cmd_flags, 0);
3087ee46864SHemant Agrawal
30916bbc98aSShreyansh Jain /* send command to mc */
3107ee46864SHemant Agrawal err = mc_send_command(mc_io, &cmd);
3117ee46864SHemant Agrawal if (err)
3127ee46864SHemant Agrawal return err;
3137ee46864SHemant Agrawal
31416bbc98aSShreyansh Jain /* retrieve response parameters */
31516bbc98aSShreyansh Jain rsp_params = (struct dpbp_rsp_get_api_version *)cmd.params;
31616bbc98aSShreyansh Jain *major_ver = le16_to_cpu(rsp_params->major);
31716bbc98aSShreyansh Jain *minor_ver = le16_to_cpu(rsp_params->minor);
3187ee46864SHemant Agrawal
3197ee46864SHemant Agrawal return 0;
3207ee46864SHemant Agrawal }
3217ee46864SHemant Agrawal
32216bbc98aSShreyansh Jain /**
32316bbc98aSShreyansh Jain * dpbp_get_num_free_bufs() - Get number of free buffers in the buffer pool
32416bbc98aSShreyansh Jain * @mc_io: Pointer to MC portal's I/O object
32516bbc98aSShreyansh Jain * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
32616bbc98aSShreyansh Jain * @token: Token of DPBP object
32716bbc98aSShreyansh Jain * @num_free_bufs: Number of free buffers
32816bbc98aSShreyansh Jain *
32916bbc98aSShreyansh Jain * Return: '0' on Success; Error code otherwise.
33016bbc98aSShreyansh Jain */
33116bbc98aSShreyansh Jain
dpbp_get_num_free_bufs(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,uint32_t * num_free_bufs)3327ee46864SHemant Agrawal int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
3337ee46864SHemant Agrawal uint32_t cmd_flags,
3347ee46864SHemant Agrawal uint16_t token,
3357ee46864SHemant Agrawal uint32_t *num_free_bufs)
3367ee46864SHemant Agrawal {
33716bbc98aSShreyansh Jain struct dpbp_rsp_get_num_free_bufs *rsp_params;
3387ee46864SHemant Agrawal struct mc_command cmd = { 0 };
3397ee46864SHemant Agrawal int err;
3407ee46864SHemant Agrawal
3417ee46864SHemant Agrawal /* prepare command */
3427ee46864SHemant Agrawal cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_FREE_BUFFERS_NUM,
3437ee46864SHemant Agrawal cmd_flags,
3447ee46864SHemant Agrawal token);
3457ee46864SHemant Agrawal
3467ee46864SHemant Agrawal /* send command to mc*/
3477ee46864SHemant Agrawal err = mc_send_command(mc_io, &cmd);
3487ee46864SHemant Agrawal if (err)
3497ee46864SHemant Agrawal return err;
3507ee46864SHemant Agrawal
3517ee46864SHemant Agrawal /* retrieve response parameters */
35216bbc98aSShreyansh Jain rsp_params = (struct dpbp_rsp_get_num_free_bufs *)cmd.params;
35316bbc98aSShreyansh Jain *num_free_bufs = le32_to_cpu(rsp_params->num_free_bufs);
3547ee46864SHemant Agrawal
3557ee46864SHemant Agrawal return 0;
3567ee46864SHemant Agrawal }
357