| /* SPDX-License-Identifier: GPL-2.0+ */ | |
| /* | |
| * Copyright 2013-2016 Freescale Semiconductor, Inc. | |
| * Copyright 2017, 2023 NXP | |
| */ | |
| #ifndef _FSL_DPIO_H | |
| #define _FSL_DPIO_H | |
| /* DPIO Version */ | |
| #define DPIO_VER_MAJOR 4 | |
| #define DPIO_VER_MINOR 2 | |
| /* Command IDs */ | |
| #define DPIO_CMDID_CLOSE 0x8001 | |
| #define DPIO_CMDID_OPEN 0x8031 | |
| #define DPIO_CMDID_CREATE 0x9031 | |
| #define DPIO_CMDID_DESTROY 0x9831 | |
| #define DPIO_CMDID_GET_API_VERSION 0xa031 | |
| #define DPIO_CMDID_ENABLE 0x0021 | |
| #define DPIO_CMDID_DISABLE 0x0031 | |
| #define DPIO_CMDID_GET_ATTR 0x0041 | |
| /* Macros for accessing command fields smaller than 1byte */ | |
| #define DPIO_MASK(field) \ | |
| GENMASK(DPIO_##field##_SHIFT + DPIO_##field##_SIZE - 1, \ | |
| DPIO_##field##_SHIFT) | |
| #define dpio_set_field(var, field, val) \ | |
| ((var) |= (((val) << DPIO_##field##_SHIFT) & DPIO_MASK(field))) | |
| #define dpio_get_field(var, field) \ | |
| (((var) & DPIO_MASK(field)) >> DPIO_##field##_SHIFT) | |
| #pragma pack(push, 1) | |
| struct dpio_cmd_open { | |
| __le32 dpio_id; | |
| }; | |
| #define DPIO_CHANNEL_MODE_SHIFT 0 | |
| #define DPIO_CHANNEL_MODE_SIZE 2 | |
| struct dpio_cmd_create { | |
| __le16 pad1; | |
| /* from LSB: channel_mode:2 */ | |
| u8 channel_mode; | |
| u8 pad2; | |
| u8 num_priorities; | |
| }; | |
| struct dpio_cmd_destroy { | |
| __le32 dpio_id; | |
| }; | |
| #define DPIO_ATTR_CHANNEL_MODE_SHIFT 0 | |
| #define DPIO_ATTR_CHANNEL_MODE_SIZE 4 | |
| struct dpio_rsp_get_attr { | |
| __le32 id; | |
| __le16 qbman_portal_id; | |
| u8 num_priorities; | |
| /* from LSB: channel_mode:4 */ | |
| u8 channel_mode; | |
| __le64 qbman_portal_ce_offset; | |
| __le64 qbman_portal_ci_offset; | |
| __le32 qbman_version; | |
| __le32 pad; | |
| __le32 clk; | |
| }; | |
| #pragma pack(pop) | |
| /* Data Path I/O Portal API | |
| * Contains initialization APIs and runtime control APIs for DPIO | |
| */ | |
| struct fsl_mc_io; | |
| int dpio_open(struct fsl_mc_io *mc_io, u32 cmd_flags, int dpio_id, | |
| u16 *token); | |
| int dpio_close(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token); | |
| /** | |
| * enum dpio_channel_mode - DPIO notification channel mode | |
| * @DPIO_NO_CHANNEL: No support for notification channel | |
| * @DPIO_LOCAL_CHANNEL: Notifications on data availability can be received by a | |
| * dedicated channel in the DPIO; user should point the queue's | |
| * destination in the relevant interface to this DPIO | |
| */ | |
| enum dpio_channel_mode { | |
| DPIO_NO_CHANNEL = 0, | |
| DPIO_LOCAL_CHANNEL = 1, | |
| }; | |
| /** | |
| * struct dpio_cfg - Structure representing DPIO configuration | |
| * @channel_mode: Notification channel mode | |
| * @num_priorities: Number of priorities for the notification channel (1-8); | |
| * relevant only if 'channel_mode = DPIO_LOCAL_CHANNEL' | |
| */ | |
| struct dpio_cfg { | |
| enum dpio_channel_mode channel_mode; | |
| u8 num_priorities; | |
| }; | |
| int dpio_create(struct fsl_mc_io *mc_io, u16 dprc_token, u32 cmd_flags, | |
| const struct dpio_cfg *cfg, u32 *obj_id); | |
| int dpio_destroy(struct fsl_mc_io *mc_io, u16 dprc_token, u32 cmd_flags, | |
| u32 object_id); | |
| int dpio_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token); | |
| int dpio_disable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token); | |
| /** | |
| * struct dpio_attr - Structure representing DPIO attributes | |
| * @id: DPIO object ID | |
| * @qbman_portal_ce_offset: Offset of the software portal cache-enabled area | |
| * @qbman_portal_ci_offset: Offset of the software portal | |
| * cache-inhibited area | |
| * @qbman_portal_id: Software portal ID | |
| * @channel_mode: Notification channel mode | |
| * @num_priorities: Number of priorities for the notification | |
| * channel (1-8); relevant only if | |
| * 'channel_mode = DPIO_LOCAL_CHANNEL' | |
| * @qbman_version: QBMAN version | |
| */ | |
| struct dpio_attr { | |
| int id; | |
| u64 qbman_portal_ce_offset; | |
| u64 qbman_portal_ci_offset; | |
| u16 qbman_portal_id; | |
| enum dpio_channel_mode channel_mode; | |
| u8 num_priorities; | |
| u32 qbman_version; | |
| u32 clk; | |
| }; | |
| int dpio_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, | |
| struct dpio_attr *attr); | |
| int dpio_get_api_version(struct fsl_mc_io *mc_io, u32 cmd_flags, | |
| u16 *major_ver, u16 *minor_ver); | |
| #endif /* _FSL_DPIO_H */ |