1a2a55e51SPrabhakar Kushwaha /* 2a2a55e51SPrabhakar Kushwaha * Copyright (C) 2013-2015 Freescale Semiconductor 3a2a55e51SPrabhakar Kushwaha * 4a2a55e51SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+ 5a2a55e51SPrabhakar Kushwaha */ 6a2a55e51SPrabhakar Kushwaha 7a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPIO_H 8a2a55e51SPrabhakar Kushwaha #define _FSL_DPIO_H 9a2a55e51SPrabhakar Kushwaha 10a2a55e51SPrabhakar Kushwaha /* DPIO Version */ 111f1c25c7SPrabhakar Kushwaha #define DPIO_VER_MAJOR 3 12*53e353fcSPrabhakar Kushwaha #define DPIO_VER_MINOR 2 13a2a55e51SPrabhakar Kushwaha 14a2a55e51SPrabhakar Kushwaha /* Command IDs */ 15a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_CLOSE 0x800 16a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_OPEN 0x803 171ebbe4fcSPrabhakar Kushwaha #define DPIO_CMDID_CREATE 0x903 181ebbe4fcSPrabhakar Kushwaha #define DPIO_CMDID_DESTROY 0x900 19a2a55e51SPrabhakar Kushwaha 20a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_ENABLE 0x002 21a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_DISABLE 0x003 22a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_GET_ATTR 0x004 23a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_RESET 0x005 24a2a55e51SPrabhakar Kushwaha 25a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 26a2a55e51SPrabhakar Kushwaha #define DPIO_CMD_OPEN(cmd, dpio_id) \ 27a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, dpio_id) 28a2a55e51SPrabhakar Kushwaha 29a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 301ebbe4fcSPrabhakar Kushwaha #define DPIO_CMD_CREATE(cmd, cfg) \ 311ebbe4fcSPrabhakar Kushwaha do { \ 321ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 2, enum dpio_channel_mode, \ 331ebbe4fcSPrabhakar Kushwaha cfg->channel_mode);\ 341ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->num_priorities);\ 351ebbe4fcSPrabhakar Kushwaha } while (0) 361ebbe4fcSPrabhakar Kushwaha 371ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 38a2a55e51SPrabhakar Kushwaha #define DPIO_RSP_GET_ATTR(cmd, attr) \ 39a2a55e51SPrabhakar Kushwaha do { \ 40a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->id);\ 41a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->qbman_portal_id);\ 42a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 48, 8, uint8_t, attr->num_priorities);\ 43a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 56, 4, enum dpio_channel_mode, attr->channel_mode);\ 441f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, attr->qbman_portal_ce_offset);\ 451f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 64, uint64_t, attr->qbman_portal_ci_offset);\ 46a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 16, uint16_t, attr->version.major);\ 47a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 16, 16, uint16_t, attr->version.minor);\ 48*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->qbman_version);\ 49a2a55e51SPrabhakar Kushwaha } while (0) 50a2a55e51SPrabhakar Kushwaha 51a2a55e51SPrabhakar Kushwaha /* Data Path I/O Portal API 52a2a55e51SPrabhakar Kushwaha * Contains initialization APIs and runtime control APIs for DPIO 53a2a55e51SPrabhakar Kushwaha */ 54a2a55e51SPrabhakar Kushwaha 55a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 561f1c25c7SPrabhakar Kushwaha 57a2a55e51SPrabhakar Kushwaha /** 58a2a55e51SPrabhakar Kushwaha * dpio_open() - Open a control session for the specified object 59a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 6087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 61a2a55e51SPrabhakar Kushwaha * @dpio_id: DPIO unique ID 62a2a55e51SPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 63a2a55e51SPrabhakar Kushwaha * 64a2a55e51SPrabhakar Kushwaha * This function can be used to open a control session for an 65a2a55e51SPrabhakar Kushwaha * already created object; an object may have been declared in 66a2a55e51SPrabhakar Kushwaha * the DPL or by calling the dpio_create() function. 67a2a55e51SPrabhakar Kushwaha * This function returns a unique authentication token, 68a2a55e51SPrabhakar Kushwaha * associated with the specific object ID and the specific MC 69a2a55e51SPrabhakar Kushwaha * portal; this token must be used in all subsequent commands for 70a2a55e51SPrabhakar Kushwaha * this specific object. 71a2a55e51SPrabhakar Kushwaha * 72a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 73a2a55e51SPrabhakar Kushwaha */ 7487457d11SPrabhakar Kushwaha int dpio_open(struct fsl_mc_io *mc_io, 7587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 7687457d11SPrabhakar Kushwaha int dpio_id, 7787457d11SPrabhakar Kushwaha uint16_t *token); 78a2a55e51SPrabhakar Kushwaha 79a2a55e51SPrabhakar Kushwaha /** 801f1c25c7SPrabhakar Kushwaha * dpio_close() - Close the control session of the object 81a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 8287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 831f1c25c7SPrabhakar Kushwaha * @token: Token of DPIO object 84a2a55e51SPrabhakar Kushwaha * 85a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 86a2a55e51SPrabhakar Kushwaha */ 8787457d11SPrabhakar Kushwaha int dpio_close(struct fsl_mc_io *mc_io, 8887457d11SPrabhakar Kushwaha uint32_t cmd_flags, 8987457d11SPrabhakar Kushwaha uint16_t token); 90a2a55e51SPrabhakar Kushwaha 91a2a55e51SPrabhakar Kushwaha /** 92a2a55e51SPrabhakar Kushwaha * enum dpio_channel_mode - DPIO notification channel mode 93a2a55e51SPrabhakar Kushwaha * @DPIO_NO_CHANNEL: No support for notification channel 94a2a55e51SPrabhakar Kushwaha * @DPIO_LOCAL_CHANNEL: Notifications on data availability can be received by a 95a2a55e51SPrabhakar Kushwaha * dedicated channel in the DPIO; user should point the queue's 96a2a55e51SPrabhakar Kushwaha * destination in the relevant interface to this DPIO 97a2a55e51SPrabhakar Kushwaha */ 98a2a55e51SPrabhakar Kushwaha enum dpio_channel_mode { 99a2a55e51SPrabhakar Kushwaha DPIO_NO_CHANNEL = 0, 100a2a55e51SPrabhakar Kushwaha DPIO_LOCAL_CHANNEL = 1, 101a2a55e51SPrabhakar Kushwaha }; 102a2a55e51SPrabhakar Kushwaha 103a2a55e51SPrabhakar Kushwaha /** 1041ebbe4fcSPrabhakar Kushwaha * struct dpio_cfg - Structure representing DPIO configuration 1051ebbe4fcSPrabhakar Kushwaha * @channel_mode: Notification channel mode 1061ebbe4fcSPrabhakar Kushwaha * @num_priorities: Number of priorities for the notification channel (1-8); 1071ebbe4fcSPrabhakar Kushwaha * relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL' 1081ebbe4fcSPrabhakar Kushwaha */ 1091ebbe4fcSPrabhakar Kushwaha struct dpio_cfg { 1101ebbe4fcSPrabhakar Kushwaha enum dpio_channel_mode channel_mode; 1111ebbe4fcSPrabhakar Kushwaha uint8_t num_priorities; 1121ebbe4fcSPrabhakar Kushwaha }; 1131ebbe4fcSPrabhakar Kushwaha 1141ebbe4fcSPrabhakar Kushwaha /** 1151ebbe4fcSPrabhakar Kushwaha * dpio_create() - Create the DPIO object. 1161ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1171ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1181ebbe4fcSPrabhakar Kushwaha * @cfg: Configuration structure 1191ebbe4fcSPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 1201ebbe4fcSPrabhakar Kushwaha * 1211ebbe4fcSPrabhakar Kushwaha * Create the DPIO object, allocate required resources and 1221ebbe4fcSPrabhakar Kushwaha * perform required initialization. 1231ebbe4fcSPrabhakar Kushwaha * 1241ebbe4fcSPrabhakar Kushwaha * The object can be created either by declaring it in the 1251ebbe4fcSPrabhakar Kushwaha * DPL file, or by calling this function. 1261ebbe4fcSPrabhakar Kushwaha * 1271ebbe4fcSPrabhakar Kushwaha * This function returns a unique authentication token, 1281ebbe4fcSPrabhakar Kushwaha * associated with the specific object ID and the specific MC 1291ebbe4fcSPrabhakar Kushwaha * portal; this token must be used in all subsequent calls to 1301ebbe4fcSPrabhakar Kushwaha * this specific object. For objects that are created using the 1311ebbe4fcSPrabhakar Kushwaha * DPL file, call dpio_open() function to get an authentication 1321ebbe4fcSPrabhakar Kushwaha * token first. 1331ebbe4fcSPrabhakar Kushwaha * 1341ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 1351ebbe4fcSPrabhakar Kushwaha */ 1361ebbe4fcSPrabhakar Kushwaha int dpio_create(struct fsl_mc_io *mc_io, 1371ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 1381ebbe4fcSPrabhakar Kushwaha const struct dpio_cfg *cfg, 1391ebbe4fcSPrabhakar Kushwaha uint16_t *token); 1401ebbe4fcSPrabhakar Kushwaha 1411ebbe4fcSPrabhakar Kushwaha /** 1421ebbe4fcSPrabhakar Kushwaha * dpio_destroy() - Destroy the DPIO object and release all its resources. 1431ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 1441ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 1451ebbe4fcSPrabhakar Kushwaha * @token: Token of DPIO object 1461ebbe4fcSPrabhakar Kushwaha * 1471ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 1481ebbe4fcSPrabhakar Kushwaha */ 1491ebbe4fcSPrabhakar Kushwaha int dpio_destroy(struct fsl_mc_io *mc_io, 1501ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 1511ebbe4fcSPrabhakar Kushwaha uint16_t token); 1521ebbe4fcSPrabhakar Kushwaha 1531ebbe4fcSPrabhakar Kushwaha /** 154a2a55e51SPrabhakar Kushwaha * dpio_enable() - Enable the DPIO, allow I/O portal operations. 155a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 15687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 157a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 158a2a55e51SPrabhakar Kushwaha * 159a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 160a2a55e51SPrabhakar Kushwaha */ 16187457d11SPrabhakar Kushwaha int dpio_enable(struct fsl_mc_io *mc_io, 16287457d11SPrabhakar Kushwaha uint32_t cmd_flags, 16387457d11SPrabhakar Kushwaha uint16_t token); 164a2a55e51SPrabhakar Kushwaha 165a2a55e51SPrabhakar Kushwaha /** 166a2a55e51SPrabhakar Kushwaha * dpio_disable() - Disable the DPIO, stop any I/O portal operation. 167a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 16887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 169a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 170a2a55e51SPrabhakar Kushwaha * 171a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 172a2a55e51SPrabhakar Kushwaha */ 17387457d11SPrabhakar Kushwaha int dpio_disable(struct fsl_mc_io *mc_io, 17487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 17587457d11SPrabhakar Kushwaha uint16_t token); 176a2a55e51SPrabhakar Kushwaha 177a2a55e51SPrabhakar Kushwaha /** 178a2a55e51SPrabhakar Kushwaha * dpio_reset() - Reset the DPIO, returns the object to initial state. 179a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 18087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 181a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 182a2a55e51SPrabhakar Kushwaha * 183a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 184a2a55e51SPrabhakar Kushwaha */ 18587457d11SPrabhakar Kushwaha int dpio_reset(struct fsl_mc_io *mc_io, 18687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 18787457d11SPrabhakar Kushwaha uint16_t token); 188a2a55e51SPrabhakar Kushwaha 189a2a55e51SPrabhakar Kushwaha /** 190a2a55e51SPrabhakar Kushwaha * struct dpio_attr - Structure representing DPIO attributes 191a2a55e51SPrabhakar Kushwaha * @id: DPIO object ID 192a2a55e51SPrabhakar Kushwaha * @version: DPIO version 1931f1c25c7SPrabhakar Kushwaha * @qbman_portal_ce_offset: offset of the software portal cache-enabled area 1941f1c25c7SPrabhakar Kushwaha * @qbman_portal_ci_offset: offset of the software portal cache-inhibited area 195a2a55e51SPrabhakar Kushwaha * @qbman_portal_id: Software portal ID 196a2a55e51SPrabhakar Kushwaha * @channel_mode: Notification channel mode 197a2a55e51SPrabhakar Kushwaha * @num_priorities: Number of priorities for the notification channel (1-8); 198a2a55e51SPrabhakar Kushwaha * relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL' 199*53e353fcSPrabhakar Kushwaha * @qbman_version: QBMAN version 200a2a55e51SPrabhakar Kushwaha */ 201a2a55e51SPrabhakar Kushwaha struct dpio_attr { 202a2a55e51SPrabhakar Kushwaha int id; 203a2a55e51SPrabhakar Kushwaha /** 204a2a55e51SPrabhakar Kushwaha * struct version - DPIO version 205a2a55e51SPrabhakar Kushwaha * @major: DPIO major version 206a2a55e51SPrabhakar Kushwaha * @minor: DPIO minor version 207a2a55e51SPrabhakar Kushwaha */ 208a2a55e51SPrabhakar Kushwaha struct { 209a2a55e51SPrabhakar Kushwaha uint16_t major; 210a2a55e51SPrabhakar Kushwaha uint16_t minor; 211a2a55e51SPrabhakar Kushwaha } version; 2121f1c25c7SPrabhakar Kushwaha uint64_t qbman_portal_ce_offset; 2131f1c25c7SPrabhakar Kushwaha uint64_t qbman_portal_ci_offset; 214a2a55e51SPrabhakar Kushwaha uint16_t qbman_portal_id; 215a2a55e51SPrabhakar Kushwaha enum dpio_channel_mode channel_mode; 216a2a55e51SPrabhakar Kushwaha uint8_t num_priorities; 217*53e353fcSPrabhakar Kushwaha uint32_t qbman_version; 218a2a55e51SPrabhakar Kushwaha }; 219a2a55e51SPrabhakar Kushwaha 220a2a55e51SPrabhakar Kushwaha /** 221a2a55e51SPrabhakar Kushwaha * dpio_get_attributes() - Retrieve DPIO attributes 222a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 22387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 224a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 225a2a55e51SPrabhakar Kushwaha * @attr: Returned object's attributes 226a2a55e51SPrabhakar Kushwaha * 227a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 228a2a55e51SPrabhakar Kushwaha */ 229a2a55e51SPrabhakar Kushwaha int dpio_get_attributes(struct fsl_mc_io *mc_io, 23087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 231a2a55e51SPrabhakar Kushwaha uint16_t token, 232a2a55e51SPrabhakar Kushwaha struct dpio_attr *attr); 233a2a55e51SPrabhakar Kushwaha 234a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPIO_H */ 235