1 /* 2 * Freescale Layerscape MC I/O wrapper 3 * 4 * Copyright (C) 2013-2016 Freescale Semiconductor, Inc. 5 * Copyright 2017 NXP 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 /*! 10 * @file fsl_dpbp.h 11 * @brief Data Path Buffer Pool API 12 */ 13 #ifndef __FSL_DPBP_H 14 #define __FSL_DPBP_H 15 16 /* DPBP Version */ 17 #define DPBP_VER_MAJOR 3 18 #define DPBP_VER_MINOR 3 19 20 /* Command IDs */ 21 #define DPBP_CMDID_CLOSE 0x8001 22 #define DPBP_CMDID_OPEN 0x8041 23 #define DPBP_CMDID_CREATE 0x9041 24 #define DPBP_CMDID_DESTROY 0x9841 25 #define DPBP_CMDID_GET_API_VERSION 0xa041 26 27 #define DPBP_CMDID_ENABLE 0x0021 28 #define DPBP_CMDID_DISABLE 0x0031 29 #define DPBP_CMDID_GET_ATTR 0x0041 30 #define DPBP_CMDID_RESET 0x0051 31 #define DPBP_CMDID_IS_ENABLED 0x0061 32 33 /* cmd, param, offset, width, type, arg_name */ 34 #define DPBP_CMD_OPEN(cmd, dpbp_id) \ 35 MC_CMD_OP(cmd, 0, 0, 32, int, dpbp_id) 36 37 /* cmd, param, offset, width, type, arg_name */ 38 #define DPBP_RSP_GET_ATTRIBUTES(cmd, attr) \ 39 do { \ 40 MC_RSP_OP(cmd, 0, 16, 16, uint16_t, attr->bpid); \ 41 MC_RSP_OP(cmd, 0, 32, 32, int, attr->id);\ 42 } while (0) 43 44 /* Data Path Buffer Pool API 45 * Contains initialization APIs and runtime control APIs for DPBP 46 */ 47 48 struct fsl_mc_io; 49 50 /** 51 * dpbp_open() - Open a control session for the specified object. 52 * @mc_io: Pointer to MC portal's I/O object 53 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 54 * @dpbp_id: DPBP unique ID 55 * @token: Returned token; use in subsequent API calls 56 * 57 * This function can be used to open a control session for an 58 * already created object; an object may have been declared in 59 * the DPL or by calling the dpbp_create function. 60 * This function returns a unique authentication token, 61 * associated with the specific object ID and the specific MC 62 * portal; this token must be used in all subsequent commands for 63 * this specific object 64 * 65 * Return: '0' on Success; Error code otherwise. 66 */ 67 int dpbp_open(struct fsl_mc_io *mc_io, 68 uint32_t cmd_flags, 69 int dpbp_id, 70 uint16_t *token); 71 72 /** 73 * dpbp_close() - Close the control session of the object 74 * @mc_io: Pointer to MC portal's I/O object 75 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 76 * @token: Token of DPBP object 77 * 78 * After this function is called, no further operations are 79 * allowed on the object without opening a new control session. 80 * 81 * Return: '0' on Success; Error code otherwise. 82 */ 83 int dpbp_close(struct fsl_mc_io *mc_io, 84 uint32_t cmd_flags, 85 uint16_t token); 86 87 /** 88 * struct dpbp_cfg - Structure representing DPBP configuration 89 * @options: place holder 90 */ 91 struct dpbp_cfg { 92 uint32_t options; 93 }; 94 95 /** 96 * dpbp_create() - Create the DPBP object. 97 * @mc_io: Pointer to MC portal's I/O object 98 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 99 * @cfg: Configuration structure 100 * @token: Returned token; use in subsequent API calls 101 * 102 * Create the DPBP object, allocate required resources and 103 * perform required initialization. 104 * 105 * The object can be created either by declaring it in the 106 * DPL file, or by calling this function. 107 * This function returns a unique authentication token, 108 * associated with the specific object ID and the specific MC 109 * portal; this token must be used in all subsequent calls to 110 * this specific object. For objects that are created using the 111 * DPL file, call dpbp_open function to get an authentication 112 * token first. 113 * 114 * Return: '0' on Success; Error code otherwise. 115 */ 116 int dpbp_create(struct fsl_mc_io *mc_io, 117 uint16_t dprc_token, 118 uint32_t cmd_flags, 119 const struct dpbp_cfg *cfg, 120 uint32_t *obj_id); 121 122 /** 123 * dpbp_destroy() - Destroy the DPBP object and release all its resources. 124 * @mc_io: Pointer to MC portal's I/O object 125 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 126 * @token: Token of DPBP object 127 * 128 * Return: '0' on Success; error code otherwise. 129 */ 130 int dpbp_destroy(struct fsl_mc_io *mc_io, 131 uint16_t dprc_token, 132 uint32_t cmd_flags, 133 uint32_t obj_id); 134 135 /** 136 * dpbp_enable() - Enable the DPBP. 137 * @mc_io: Pointer to MC portal's I/O object 138 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 139 * @token: Token of DPBP object 140 * 141 * Return: '0' on Success; Error code otherwise. 142 */ 143 int dpbp_enable(struct fsl_mc_io *mc_io, 144 uint32_t cmd_flags, 145 uint16_t token); 146 147 /** 148 * dpbp_disable() - Disable the DPBP. 149 * @mc_io: Pointer to MC portal's I/O object 150 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 151 * @token: Token of DPBP object 152 * 153 * Return: '0' on Success; Error code otherwise. 154 */ 155 int dpbp_disable(struct fsl_mc_io *mc_io, 156 uint32_t cmd_flags, 157 uint16_t token); 158 159 /** 160 * dpbp_is_enabled() - Check if the DPBP is enabled. 161 * @mc_io: Pointer to MC portal's I/O object 162 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 163 * @token: Token of DPBP object 164 * @en: Returns '1' if object is enabled; '0' otherwise 165 * 166 * Return: '0' on Success; Error code otherwise. 167 */ 168 int dpbp_is_enabled(struct fsl_mc_io *mc_io, 169 uint32_t cmd_flags, 170 uint16_t token, 171 int *en); 172 173 /** 174 * dpbp_reset() - Reset the DPBP, returns the object to initial state. 175 * @mc_io: Pointer to MC portal's I/O object 176 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 177 * @token: Token of DPBP object 178 * 179 * Return: '0' on Success; Error code otherwise. 180 */ 181 int dpbp_reset(struct fsl_mc_io *mc_io, 182 uint32_t cmd_flags, 183 uint16_t token); 184 185 186 /** 187 * struct dpbp_attr - Structure representing DPBP attributes 188 * @id: DPBP object ID 189 * @version: DPBP version 190 * @bpid: Hardware buffer pool ID; should be used as an argument in 191 * acquire/release operations on buffers 192 */ 193 struct dpbp_attr { 194 uint32_t id; 195 uint16_t bpid; 196 }; 197 198 /** 199 * dpbp_get_attributes - Retrieve DPBP attributes. 200 * 201 * @mc_io: Pointer to MC portal's I/O object 202 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 203 * @token: Token of DPBP object 204 * @attr: Returned object's attributes 205 * 206 * Return: '0' on Success; Error code otherwise. 207 */ 208 int dpbp_get_attributes(struct fsl_mc_io *mc_io, 209 uint32_t cmd_flags, 210 uint16_t token, 211 struct dpbp_attr *attr); 212 213 /** 214 * dpbp_get_api_version - Retrieve DPBP Major and Minor version info. 215 * 216 * @mc_io: Pointer to MC portal's I/O object 217 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 218 * @major_ver: DPBP major version 219 * @minor_ver: DPBP minor version 220 * 221 * Return: '0' on Success; Error code otherwise. 222 */ 223 int dpbp_get_api_version(struct fsl_mc_io *mc_io, 224 u32 cmd_flags, 225 u16 *major_ver, 226 u16 *minor_ver); 227 228 /** @} */ 229 230 #endif /* __FSL_DPBP_H */ 231