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 1287457d11SPrabhakar Kushwaha #define DPIO_VER_MINOR 1 13a2a55e51SPrabhakar Kushwaha 14a2a55e51SPrabhakar Kushwaha /* Command IDs */ 15a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_CLOSE 0x800 16a2a55e51SPrabhakar Kushwaha #define DPIO_CMDID_OPEN 0x803 17*1ebbe4fcSPrabhakar Kushwaha #define DPIO_CMDID_CREATE 0x903 18*1ebbe4fcSPrabhakar 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 */ 30*1ebbe4fcSPrabhakar Kushwaha #define DPIO_CMD_CREATE(cmd, cfg) \ 31*1ebbe4fcSPrabhakar Kushwaha do { \ 32*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 16, 2, enum dpio_channel_mode, \ 33*1ebbe4fcSPrabhakar Kushwaha cfg->channel_mode);\ 34*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 8, uint8_t, cfg->num_priorities);\ 35*1ebbe4fcSPrabhakar Kushwaha } while (0) 36*1ebbe4fcSPrabhakar Kushwaha 37*1ebbe4fcSPrabhakar 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);\ 48a2a55e51SPrabhakar Kushwaha } while (0) 49a2a55e51SPrabhakar Kushwaha 50a2a55e51SPrabhakar Kushwaha /* Data Path I/O Portal API 51a2a55e51SPrabhakar Kushwaha * Contains initialization APIs and runtime control APIs for DPIO 52a2a55e51SPrabhakar Kushwaha */ 53a2a55e51SPrabhakar Kushwaha 54a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 551f1c25c7SPrabhakar Kushwaha 56a2a55e51SPrabhakar Kushwaha /** 57a2a55e51SPrabhakar Kushwaha * dpio_open() - Open a control session for the specified object 58a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 5987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 60a2a55e51SPrabhakar Kushwaha * @dpio_id: DPIO unique ID 61a2a55e51SPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 62a2a55e51SPrabhakar Kushwaha * 63a2a55e51SPrabhakar Kushwaha * This function can be used to open a control session for an 64a2a55e51SPrabhakar Kushwaha * already created object; an object may have been declared in 65a2a55e51SPrabhakar Kushwaha * the DPL or by calling the dpio_create() function. 66a2a55e51SPrabhakar Kushwaha * This function returns a unique authentication token, 67a2a55e51SPrabhakar Kushwaha * associated with the specific object ID and the specific MC 68a2a55e51SPrabhakar Kushwaha * portal; this token must be used in all subsequent commands for 69a2a55e51SPrabhakar Kushwaha * this specific object. 70a2a55e51SPrabhakar Kushwaha * 71a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 72a2a55e51SPrabhakar Kushwaha */ 7387457d11SPrabhakar Kushwaha int dpio_open(struct fsl_mc_io *mc_io, 7487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 7587457d11SPrabhakar Kushwaha int dpio_id, 7687457d11SPrabhakar Kushwaha uint16_t *token); 77a2a55e51SPrabhakar Kushwaha 78a2a55e51SPrabhakar Kushwaha /** 791f1c25c7SPrabhakar Kushwaha * dpio_close() - Close the control session of the object 80a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 8187457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 821f1c25c7SPrabhakar Kushwaha * @token: Token of DPIO object 83a2a55e51SPrabhakar Kushwaha * 84a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 85a2a55e51SPrabhakar Kushwaha */ 8687457d11SPrabhakar Kushwaha int dpio_close(struct fsl_mc_io *mc_io, 8787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 8887457d11SPrabhakar Kushwaha uint16_t token); 89a2a55e51SPrabhakar Kushwaha 90a2a55e51SPrabhakar Kushwaha /** 91a2a55e51SPrabhakar Kushwaha * enum dpio_channel_mode - DPIO notification channel mode 92a2a55e51SPrabhakar Kushwaha * @DPIO_NO_CHANNEL: No support for notification channel 93a2a55e51SPrabhakar Kushwaha * @DPIO_LOCAL_CHANNEL: Notifications on data availability can be received by a 94a2a55e51SPrabhakar Kushwaha * dedicated channel in the DPIO; user should point the queue's 95a2a55e51SPrabhakar Kushwaha * destination in the relevant interface to this DPIO 96a2a55e51SPrabhakar Kushwaha */ 97a2a55e51SPrabhakar Kushwaha enum dpio_channel_mode { 98a2a55e51SPrabhakar Kushwaha DPIO_NO_CHANNEL = 0, 99a2a55e51SPrabhakar Kushwaha DPIO_LOCAL_CHANNEL = 1, 100a2a55e51SPrabhakar Kushwaha }; 101a2a55e51SPrabhakar Kushwaha 102a2a55e51SPrabhakar Kushwaha /** 103*1ebbe4fcSPrabhakar Kushwaha * struct dpio_cfg - Structure representing DPIO configuration 104*1ebbe4fcSPrabhakar Kushwaha * @channel_mode: Notification channel mode 105*1ebbe4fcSPrabhakar Kushwaha * @num_priorities: Number of priorities for the notification channel (1-8); 106*1ebbe4fcSPrabhakar Kushwaha * relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL' 107*1ebbe4fcSPrabhakar Kushwaha */ 108*1ebbe4fcSPrabhakar Kushwaha struct dpio_cfg { 109*1ebbe4fcSPrabhakar Kushwaha enum dpio_channel_mode channel_mode; 110*1ebbe4fcSPrabhakar Kushwaha uint8_t num_priorities; 111*1ebbe4fcSPrabhakar Kushwaha }; 112*1ebbe4fcSPrabhakar Kushwaha 113*1ebbe4fcSPrabhakar Kushwaha /** 114*1ebbe4fcSPrabhakar Kushwaha * dpio_create() - Create the DPIO object. 115*1ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 116*1ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 117*1ebbe4fcSPrabhakar Kushwaha * @cfg: Configuration structure 118*1ebbe4fcSPrabhakar Kushwaha * @token: Returned token; use in subsequent API calls 119*1ebbe4fcSPrabhakar Kushwaha * 120*1ebbe4fcSPrabhakar Kushwaha * Create the DPIO object, allocate required resources and 121*1ebbe4fcSPrabhakar Kushwaha * perform required initialization. 122*1ebbe4fcSPrabhakar Kushwaha * 123*1ebbe4fcSPrabhakar Kushwaha * The object can be created either by declaring it in the 124*1ebbe4fcSPrabhakar Kushwaha * DPL file, or by calling this function. 125*1ebbe4fcSPrabhakar Kushwaha * 126*1ebbe4fcSPrabhakar Kushwaha * This function returns a unique authentication token, 127*1ebbe4fcSPrabhakar Kushwaha * associated with the specific object ID and the specific MC 128*1ebbe4fcSPrabhakar Kushwaha * portal; this token must be used in all subsequent calls to 129*1ebbe4fcSPrabhakar Kushwaha * this specific object. For objects that are created using the 130*1ebbe4fcSPrabhakar Kushwaha * DPL file, call dpio_open() function to get an authentication 131*1ebbe4fcSPrabhakar Kushwaha * token first. 132*1ebbe4fcSPrabhakar Kushwaha * 133*1ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 134*1ebbe4fcSPrabhakar Kushwaha */ 135*1ebbe4fcSPrabhakar Kushwaha int dpio_create(struct fsl_mc_io *mc_io, 136*1ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 137*1ebbe4fcSPrabhakar Kushwaha const struct dpio_cfg *cfg, 138*1ebbe4fcSPrabhakar Kushwaha uint16_t *token); 139*1ebbe4fcSPrabhakar Kushwaha 140*1ebbe4fcSPrabhakar Kushwaha /** 141*1ebbe4fcSPrabhakar Kushwaha * dpio_destroy() - Destroy the DPIO object and release all its resources. 142*1ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 143*1ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 144*1ebbe4fcSPrabhakar Kushwaha * @token: Token of DPIO object 145*1ebbe4fcSPrabhakar Kushwaha * 146*1ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 147*1ebbe4fcSPrabhakar Kushwaha */ 148*1ebbe4fcSPrabhakar Kushwaha int dpio_destroy(struct fsl_mc_io *mc_io, 149*1ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 150*1ebbe4fcSPrabhakar Kushwaha uint16_t token); 151*1ebbe4fcSPrabhakar Kushwaha 152*1ebbe4fcSPrabhakar Kushwaha /** 153a2a55e51SPrabhakar Kushwaha * dpio_enable() - Enable the DPIO, allow I/O portal operations. 154a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 15587457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 156a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 157a2a55e51SPrabhakar Kushwaha * 158a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 159a2a55e51SPrabhakar Kushwaha */ 16087457d11SPrabhakar Kushwaha int dpio_enable(struct fsl_mc_io *mc_io, 16187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 16287457d11SPrabhakar Kushwaha uint16_t token); 163a2a55e51SPrabhakar Kushwaha 164a2a55e51SPrabhakar Kushwaha /** 165a2a55e51SPrabhakar Kushwaha * dpio_disable() - Disable the DPIO, stop any I/O portal operation. 166a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 16787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 168a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 169a2a55e51SPrabhakar Kushwaha * 170a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 171a2a55e51SPrabhakar Kushwaha */ 17287457d11SPrabhakar Kushwaha int dpio_disable(struct fsl_mc_io *mc_io, 17387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 17487457d11SPrabhakar Kushwaha uint16_t token); 175a2a55e51SPrabhakar Kushwaha 176a2a55e51SPrabhakar Kushwaha /** 177a2a55e51SPrabhakar Kushwaha * dpio_reset() - Reset the DPIO, returns the object to initial state. 178a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 17987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 180a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 181a2a55e51SPrabhakar Kushwaha * 182a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 183a2a55e51SPrabhakar Kushwaha */ 18487457d11SPrabhakar Kushwaha int dpio_reset(struct fsl_mc_io *mc_io, 18587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 18687457d11SPrabhakar Kushwaha uint16_t token); 187a2a55e51SPrabhakar Kushwaha 188a2a55e51SPrabhakar Kushwaha /** 189a2a55e51SPrabhakar Kushwaha * struct dpio_attr - Structure representing DPIO attributes 190a2a55e51SPrabhakar Kushwaha * @id: DPIO object ID 191a2a55e51SPrabhakar Kushwaha * @version: DPIO version 1921f1c25c7SPrabhakar Kushwaha * @qbman_portal_ce_offset: offset of the software portal cache-enabled area 1931f1c25c7SPrabhakar Kushwaha * @qbman_portal_ci_offset: offset of the software portal cache-inhibited area 194a2a55e51SPrabhakar Kushwaha * @qbman_portal_id: Software portal ID 195a2a55e51SPrabhakar Kushwaha * @channel_mode: Notification channel mode 196a2a55e51SPrabhakar Kushwaha * @num_priorities: Number of priorities for the notification channel (1-8); 197a2a55e51SPrabhakar Kushwaha * relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL' 198a2a55e51SPrabhakar Kushwaha */ 199a2a55e51SPrabhakar Kushwaha struct dpio_attr { 200a2a55e51SPrabhakar Kushwaha int id; 201a2a55e51SPrabhakar Kushwaha /** 202a2a55e51SPrabhakar Kushwaha * struct version - DPIO version 203a2a55e51SPrabhakar Kushwaha * @major: DPIO major version 204a2a55e51SPrabhakar Kushwaha * @minor: DPIO minor version 205a2a55e51SPrabhakar Kushwaha */ 206a2a55e51SPrabhakar Kushwaha struct { 207a2a55e51SPrabhakar Kushwaha uint16_t major; 208a2a55e51SPrabhakar Kushwaha uint16_t minor; 209a2a55e51SPrabhakar Kushwaha } version; 2101f1c25c7SPrabhakar Kushwaha uint64_t qbman_portal_ce_offset; 2111f1c25c7SPrabhakar Kushwaha uint64_t qbman_portal_ci_offset; 212a2a55e51SPrabhakar Kushwaha uint16_t qbman_portal_id; 213a2a55e51SPrabhakar Kushwaha enum dpio_channel_mode channel_mode; 214a2a55e51SPrabhakar Kushwaha uint8_t num_priorities; 215a2a55e51SPrabhakar Kushwaha }; 216a2a55e51SPrabhakar Kushwaha 217a2a55e51SPrabhakar Kushwaha /** 218a2a55e51SPrabhakar Kushwaha * dpio_get_attributes() - Retrieve DPIO attributes 219a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 22087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 221a2a55e51SPrabhakar Kushwaha * @token: Token of DPIO object 222a2a55e51SPrabhakar Kushwaha * @attr: Returned object's attributes 223a2a55e51SPrabhakar Kushwaha * 224a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise 225a2a55e51SPrabhakar Kushwaha */ 226a2a55e51SPrabhakar Kushwaha int dpio_get_attributes(struct fsl_mc_io *mc_io, 22787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 228a2a55e51SPrabhakar Kushwaha uint16_t token, 229a2a55e51SPrabhakar Kushwaha struct dpio_attr *attr); 230a2a55e51SPrabhakar Kushwaha 231a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPIO_H */ 232