| /* SPDX-License-Identifier: GPL-2.0+ */ | |
| /* | |
| * Freescale Layerscape MC I/O wrapper | |
| * | |
| * Copyright 2013-2016 Freescale Semiconductor, Inc. | |
| * Copyright 2017, 2023 NXP | |
| */ | |
| #ifndef _FSL_DPRC_H | |
| #define _FSL_DPRC_H | |
| /* DPRC Version */ | |
| #define DPRC_VER_MAJOR 6 | |
| #define DPRC_VER_MINOR 1 | |
| /* Command IDs */ | |
| #define DPRC_CMDID_CLOSE 0x8001 | |
| #define DPRC_CMDID_OPEN 0x8051 | |
| #define DPRC_CMDID_GET_API_VERSION 0xa051 | |
| #define DPRC_CMDID_CREATE_CONT 0x1511 | |
| #define DPRC_CMDID_DESTROY_CONT 0x1521 | |
| #define DPRC_CMDID_GET_CONT_ID 0x8301 | |
| #define DPRC_CMDID_CONNECT 0x1671 | |
| #define DPRC_CMDID_DISCONNECT 0x1681 | |
| #define DPRC_CMDID_GET_CONNECTION 0x16C1 | |
| #pragma pack(push, 1) | |
| struct dprc_cmd_open { | |
| __le32 container_id; | |
| }; | |
| struct dprc_cmd_create_container { | |
| __le32 options; | |
| __le32 icid; | |
| __le32 pad1; | |
| __le32 portal_id; | |
| u8 label[16]; | |
| }; | |
| struct dprc_rsp_create_container { | |
| __le64 pad0; | |
| __le32 child_container_id; | |
| __le32 pad1; | |
| __le64 child_portal_addr; | |
| }; | |
| struct dprc_cmd_destroy_container { | |
| __le32 child_container_id; | |
| }; | |
| struct dprc_cmd_connect { | |
| __le32 ep1_id; | |
| __le16 ep1_interface_id; | |
| __le16 pad0; | |
| __le32 ep2_id; | |
| __le16 ep2_interface_id; | |
| __le16 pad1; | |
| u8 ep1_type[16]; | |
| __le32 max_rate; | |
| __le32 committed_rate; | |
| u8 ep2_type[16]; | |
| }; | |
| struct dprc_cmd_disconnect { | |
| __le32 id; | |
| __le32 interface_id; | |
| u8 type[16]; | |
| }; | |
| struct dprc_cmd_get_connection { | |
| __le32 ep1_id; | |
| __le16 ep1_interface_id; | |
| __le16 pad; | |
| u8 ep1_type[16]; | |
| }; | |
| struct dprc_rsp_get_connection { | |
| __le64 pad[3]; | |
| __le32 ep2_id; | |
| __le16 ep2_interface_id; | |
| __le16 pad1; | |
| u8 ep2_type[16]; | |
| __le32 state; | |
| }; | |
| #pragma pack(pop) | |
| /* Data Path Resource Container API | |
| * Contains DPRC API for managing and querying DPAA resources | |
| */ | |
| struct fsl_mc_io; | |
| /** | |
| * Set this value as the icid value in dprc_cfg structure when creating a | |
| * container, in case the ICID is not selected by the user and should be | |
| * allocated by the DPRC from the pool of ICIDs. | |
| */ | |
| #define DPRC_GET_ICID_FROM_POOL (u16)(~(0)) | |
| /** | |
| * Set this value as the portal_id value in dprc_cfg structure when creating a | |
| * container, in case the portal ID is not specifically selected by the | |
| * user and should be allocated by the DPRC from the pool of portal ids. | |
| */ | |
| #define DPRC_GET_PORTAL_ID_FROM_POOL (int)(~(0)) | |
| int dprc_get_container_id(struct fsl_mc_io *mc_io, u32 cmd_flags, int *container_id); | |
| int dprc_open(struct fsl_mc_io *mc_io, u32 cmd_flags, int container_id, u16 *token); | |
| int dprc_close(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token); | |
| /** | |
| * Container general options | |
| * | |
| * These options may be selected at container creation by the container creator | |
| * and can be retrieved using dprc_get_attributes() | |
| */ | |
| /* Spawn Policy Option allowed - Indicates that the new container is allowed | |
| * to spawn and have its own child containers. | |
| */ | |
| #define DPRC_CFG_OPT_SPAWN_ALLOWED 0x00000001 | |
| /* General Container allocation policy - Indicates that the new container is | |
| * allowed to allocate requested resources from its parent container; if not | |
| * set, the container is only allowed to use resources in its own pools; Note | |
| * that this is a container's global policy, but the parent container may | |
| * override it and set specific quota per resource type. | |
| */ | |
| #define DPRC_CFG_OPT_ALLOC_ALLOWED 0x00000002 | |
| /* Object initialization allowed - software context associated with this | |
| * container is allowed to invoke object initialization operations. | |
| */ | |
| #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED 0x00000004 | |
| /* Topology change allowed - software context associated with this | |
| * container is allowed to invoke topology operations, such as attach/detach | |
| * of network objects. | |
| */ | |
| #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED 0x00000008 | |
| /* AIOP - Indicates that container belongs to AIOP. */ | |
| #define DPRC_CFG_OPT_AIOP 0x00000020 | |
| /* IRQ Config - Indicates that the container allowed to configure its IRQs.*/ | |
| #define DPRC_CFG_OPT_IRQ_CFG_ALLOWED 0x00000040 | |
| /** | |
| * struct dprc_cfg - Container configuration options | |
| * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free | |
| * ICID value is allocated by the DPRC | |
| * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free | |
| * portal ID is allocated by the DPRC | |
| * @options: Combination of 'DPRC_CFG_OPT_<X>' options | |
| * @label: Object's label | |
| */ | |
| struct dprc_cfg { | |
| u16 icid; | |
| int portal_id; | |
| uint64_t options; | |
| char label[16]; | |
| }; | |
| int dprc_create_container(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, | |
| struct dprc_cfg *cfg, int *child_container_id, | |
| uint64_t *child_portal_offset); | |
| int dprc_destroy_container(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, | |
| int child_container_id); | |
| /** | |
| * struct dprc_connection_cfg - Connection configuration. | |
| * Used for virtual connections only | |
| * @committed_rate: Committed rate (Mbits/s) | |
| * @max_rate: Maximum rate (Mbits/s) | |
| */ | |
| struct dprc_connection_cfg { | |
| u32 committed_rate; | |
| u32 max_rate; | |
| }; | |
| /** | |
| * struct dprc_endpoint - Endpoint description for link connect/disconnect | |
| * operations | |
| * @type: Endpoint object type: NULL terminated string | |
| * @id: Endpoint object ID | |
| * @if_id: Interface ID; should be set for endpoints with multiple | |
| * interfaces ("dpsw", "dpdmux"); for others, always set to 0 | |
| */ | |
| struct dprc_endpoint { | |
| char type[16]; | |
| int id; | |
| u16 if_id; | |
| }; | |
| int dprc_connect(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, | |
| const struct dprc_endpoint *endpoint1, | |
| const struct dprc_endpoint *endpoint2, | |
| const struct dprc_connection_cfg *cfg); | |
| int dprc_disconnect(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, | |
| const struct dprc_endpoint *endpoint); | |
| int dprc_get_connection(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, | |
| const struct dprc_endpoint *endpoint1, | |
| struct dprc_endpoint *endpoint2, int *state); | |
| int dprc_get_api_version(struct fsl_mc_io *mc_io, u32 cmd_flags, | |
| u16 *major_ver, u16 *minor_ver); | |
| #endif /* _FSL_DPRC_H */ |