@ -10,7 +10,7 @@
# define _FSL_DPRC_H
/* DPRC Version */
# define DPRC_VER_MAJOR 4
# define DPRC_VER_MAJOR 5
# define DPRC_VER_MINOR 0
/* Command IDs */
@ -191,14 +191,16 @@ do { \
/* param, offset, width, type, arg_name */
# define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \
do { \
MC_RSP_OP ( cmd , 1 , 0 , 64 , uint64 _t, region_desc - > base_offset ) ; \
MC_RSP_OP ( cmd , 1 , 0 , 32 , uint32 _t, region_desc - > base_offset ) ; \
MC_RSP_OP ( cmd , 2 , 0 , 32 , uint32_t , region_desc - > size ) ; \
MC_RSP_OP ( cmd , 2 , 32 , 4 , enum dprc_region_type , region_desc - > type ) ; \
MC_RSP_OP ( cmd , 3 , 0 , 32 , uint32_t , region_desc - > flags ) ; \
} while ( 0 )
/* cmd, param, offset, width, type, arg_name */
# define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_in dex , label) \
# define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_type, obj_ id, label) \
do { \
MC_CMD_OP ( cmd , 0 , 0 , 32 , int , obj_in dex ) ; \
MC_CMD_OP ( cmd , 0 , 0 , 32 , int , obj_id ) ; \
MC_CMD_OP ( cmd , 1 , 0 , 8 , char , label [ 0 ] ) ; \
MC_CMD_OP ( cmd , 1 , 8 , 8 , char , label [ 1 ] ) ; \
MC_CMD_OP ( cmd , 1 , 16 , 8 , char , label [ 2 ] ) ; \
@ -215,15 +217,31 @@ do { \
MC_CMD_OP ( cmd , 2 , 40 , 8 , char , label [ 13 ] ) ; \
MC_CMD_OP ( cmd , 2 , 48 , 8 , char , label [ 14 ] ) ; \
MC_CMD_OP ( cmd , 2 , 56 , 8 , char , label [ 15 ] ) ; \
MC_CMD_OP ( cmd , 3 , 0 , 8 , char , obj_type [ 0 ] ) ; \
MC_CMD_OP ( cmd , 3 , 8 , 8 , char , obj_type [ 1 ] ) ; \
MC_CMD_OP ( cmd , 3 , 16 , 8 , char , obj_type [ 2 ] ) ; \
MC_CMD_OP ( cmd , 3 , 24 , 8 , char , obj_type [ 3 ] ) ; \
MC_CMD_OP ( cmd , 3 , 32 , 8 , char , obj_type [ 4 ] ) ; \
MC_CMD_OP ( cmd , 3 , 40 , 8 , char , obj_type [ 5 ] ) ; \
MC_CMD_OP ( cmd , 3 , 48 , 8 , char , obj_type [ 6 ] ) ; \
MC_CMD_OP ( cmd , 3 , 56 , 8 , char , obj_type [ 7 ] ) ; \
MC_CMD_OP ( cmd , 4 , 0 , 8 , char , obj_type [ 8 ] ) ; \
MC_CMD_OP ( cmd , 4 , 8 , 8 , char , obj_type [ 9 ] ) ; \
MC_CMD_OP ( cmd , 4 , 16 , 8 , char , obj_type [ 10 ] ) ; \
MC_CMD_OP ( cmd , 4 , 24 , 8 , char , obj_type [ 11 ] ) ; \
MC_CMD_OP ( cmd , 4 , 32 , 8 , char , obj_type [ 12 ] ) ; \
MC_CMD_OP ( cmd , 4 , 40 , 8 , char , obj_type [ 13 ] ) ; \
MC_CMD_OP ( cmd , 4 , 48 , 8 , char , obj_type [ 14 ] ) ; \
MC_CMD_OP ( cmd , 4 , 56 , 8 , char , obj_type [ 15 ] ) ; \
} while ( 0 )
/* cmd, param, offset, width, type, arg_name */
# define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2) \
# define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg ) \
do { \
MC_CMD_OP ( cmd , 0 , 0 , 32 , int , endpoint1 - > id ) ; \
MC_CMD_OP ( cmd , 0 , 32 , 32 , int , endpoint1 - > interface_id ) ; \
MC_CMD_OP ( cmd , 0 , 32 , 16 , uint16_t , endpoint1 - > if_id ) ; \
MC_CMD_OP ( cmd , 1 , 0 , 32 , int , endpoint2 - > id ) ; \
MC_CMD_OP ( cmd , 1 , 32 , 32 , int , endpoint2 - > interface_id ) ; \
MC_CMD_OP ( cmd , 1 , 32 , 16 , uint16_t , endpoint2 - > if_id ) ; \
MC_CMD_OP ( cmd , 2 , 0 , 8 , char , endpoint1 - > type [ 0 ] ) ; \
MC_CMD_OP ( cmd , 2 , 8 , 8 , char , endpoint1 - > type [ 1 ] ) ; \
MC_CMD_OP ( cmd , 2 , 16 , 8 , char , endpoint1 - > type [ 2 ] ) ; \
@ -240,6 +258,8 @@ do { \
MC_CMD_OP ( cmd , 3 , 40 , 8 , char , endpoint1 - > type [ 13 ] ) ; \
MC_CMD_OP ( cmd , 3 , 48 , 8 , char , endpoint1 - > type [ 14 ] ) ; \
MC_CMD_OP ( cmd , 3 , 56 , 8 , char , endpoint1 - > type [ 15 ] ) ; \
MC_CMD_OP ( cmd , 4 , 0 , 32 , uint32_t , cfg - > max_rate ) ; \
MC_CMD_OP ( cmd , 4 , 32 , 32 , uint32_t , cfg - > committed_rate ) ; \
MC_CMD_OP ( cmd , 5 , 0 , 8 , char , endpoint2 - > type [ 0 ] ) ; \
MC_CMD_OP ( cmd , 5 , 8 , 8 , char , endpoint2 - > type [ 1 ] ) ; \
MC_CMD_OP ( cmd , 5 , 16 , 8 , char , endpoint2 - > type [ 2 ] ) ; \
@ -262,7 +282,7 @@ do { \
# define DPRC_CMD_DISCONNECT(cmd, endpoint) \
do { \
MC_CMD_OP ( cmd , 0 , 0 , 32 , int , endpoint - > id ) ; \
MC_CMD_OP ( cmd , 0 , 32 , 32 , int , endpoint - > inter face _id ) ; \
MC_CMD_OP ( cmd , 0 , 32 , 16 , uint16_t , endpoint - > if_id ) ; \
MC_CMD_OP ( cmd , 1 , 0 , 8 , char , endpoint - > type [ 0 ] ) ; \
MC_CMD_OP ( cmd , 1 , 8 , 8 , char , endpoint - > type [ 1 ] ) ; \
MC_CMD_OP ( cmd , 1 , 16 , 8 , char , endpoint - > type [ 2 ] ) ; \
@ -285,7 +305,7 @@ do { \
# define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \
do { \
MC_CMD_OP ( cmd , 0 , 0 , 32 , int , endpoint1 - > id ) ; \
MC_CMD_OP ( cmd , 0 , 32 , 32 , int , endpoint1 - > inter face _id ) ; \
MC_CMD_OP ( cmd , 0 , 32 , 16 , uint16_t , endpoint1 - > if_id ) ; \
MC_CMD_OP ( cmd , 1 , 0 , 8 , char , endpoint1 - > type [ 0 ] ) ; \
MC_CMD_OP ( cmd , 1 , 8 , 8 , char , endpoint1 - > type [ 1 ] ) ; \
MC_CMD_OP ( cmd , 1 , 16 , 8 , char , endpoint1 - > type [ 2 ] ) ; \
@ -304,12 +324,11 @@ do { \
MC_CMD_OP ( cmd , 2 , 56 , 8 , char , endpoint1 - > type [ 15 ] ) ; \
} while ( 0 )
/* cmd, param, offset, width, type, arg_name */
# define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \
do { \
MC_RSP_OP ( cmd , 3 , 0 , 32 , int , endpoint2 - > id ) ; \
MC_RSP_OP ( cmd , 3 , 32 , 32 , int , endpoint2 - > inter face _id ) ; \
MC_RSP_OP ( cmd , 3 , 32 , 16 , uint16_t , endpoint2 - > if_id ) ; \
MC_RSP_OP ( cmd , 4 , 0 , 8 , char , endpoint2 - > type [ 0 ] ) ; \
MC_RSP_OP ( cmd , 4 , 8 , 8 , char , endpoint2 - > type [ 1 ] ) ; \
MC_RSP_OP ( cmd , 4 , 16 , 8 , char , endpoint2 - > type [ 2 ] ) ; \
@ -351,16 +370,20 @@ struct fsl_mc_io;
/**
* dprc_get_container_id ( ) - Get container ID associated with a given portal .
* @ mc_io : Pointer to MC portal ' s I / O object
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ container_id : Requested container ID
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_get_container_id ( struct fsl_mc_io * mc_io , int * container_id ) ;
int dprc_get_container_id ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
int * container_id ) ;
/**
* dprc_open ( ) - Open DPRC object for use
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ container_id : Container ID to open
* @ token : Returned token of DPRC object
*
@ -368,11 +391,15 @@ int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id);
*
* @ warning Required before any operation on the object .
*/
int dprc_open ( struct fsl_mc_io * mc_io , int container_id , uint16_t * token ) ;
int dprc_open ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
int container_id ,
uint16_t * token ) ;
/**
* dprc_close ( ) - Close the control session of the object
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
*
* After this function is called , no further operations are
@ -380,7 +407,9 @@ int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token);
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_close ( struct fsl_mc_io * mc_io , uint16_t token ) ;
int dprc_close ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ) ;
/**
* Container general options
@ -440,6 +469,7 @@ struct dprc_cfg {
/**
* dprc_reset_container - Reset child container .
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ child_container_id : ID of the container to reset
*
@ -458,9 +488,10 @@ struct dprc_cfg {
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_reset_container ( struct fsl_mc_io * mc_io ,
uint16_t token ,
int child_container_id ) ;
int dprc_reset_container ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
int child_container_id ) ;
/**
* struct dprc_attributes - Container attributes
@ -489,24 +520,30 @@ struct dprc_attributes {
/**
* dprc_get_attributes ( ) - Obtains container attributes
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ attributes Returned container attributes
* @ attributes : Returned container attributes
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_get_attributes ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
struct dprc_attributes * attributes ) ;
/**
* dprc_get_obj_count ( ) - Obtains the number of objects in the DPRC
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ obj_count : Number of objects assigned to the DPRC
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_get_obj_count ( struct fsl_mc_io * mc_io , uint16_t token , int * obj_count ) ;
int dprc_get_obj_count ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
int * obj_count ) ;
/* Objects Attributes Flags */
@ -542,6 +579,7 @@ struct dprc_obj_desc {
/**
* dprc_get_obj ( ) - Get general information on an object
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ obj_index : Index of the object to be queried ( < obj_count )
* @ obj_desc : Returns the requested object descriptor
@ -554,6 +592,7 @@ struct dprc_obj_desc {
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_get_obj ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
int obj_index ,
struct dprc_obj_desc * obj_desc ) ;
@ -562,6 +601,7 @@ int dprc_get_obj(struct fsl_mc_io *mc_io,
* dprc_get_res_count ( ) - Obtains the number of free resources that are
* assigned to this container , by pool type
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ type : pool type
* @ res_count : Returned number of free resources of the given
@ -569,7 +609,8 @@ int dprc_get_obj(struct fsl_mc_io *mc_io,
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_get_res_count ( struct fsl_mc_io * mc_io ,
int dprc_get_res_count ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
char * type ,
int * res_count ) ;
@ -604,6 +645,7 @@ struct dprc_res_ids_range_desc {
/**
* dprc_get_res_ids ( ) - Obtains IDs of free resources in the container
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ type : pool type
* @ range_desc : range descriptor
@ -611,10 +653,25 @@ struct dprc_res_ids_range_desc {
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_get_res_ids ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
char * type ,
struct dprc_res_ids_range_desc * range_desc ) ;
/* Region flags */
/* Cacheable - Indicates that region should be mapped as cacheable */
# define DPRC_REGION_CACHEABLE 0x00000001
/**
* enum dprc_region_type - Region type
* @ DPRC_REGION_TYPE_MC_PORTAL : MC portal region
* @ DPRC_REGION_TYPE_QBMAN_PORTAL : Qbman portal region
*/
enum dprc_region_type {
DPRC_REGION_TYPE_MC_PORTAL ,
DPRC_REGION_TYPE_QBMAN_PORTAL
} ;
/**
* struct dprc_region_desc - Mappable region descriptor
* @ base_offset : Region offset from region ' s base address .
@ -622,17 +679,22 @@ int dprc_get_res_ids(struct fsl_mc_io *mc_io,
* base address ; For DPIO , region base is offset from SoC QMan portals
* base address
* @ size : Region size ( in bytes )
* @ flags : Region attributes
* @ type : Portal region type
*/
struct dprc_region_desc {
uint64 _t base_offset ;
uint32 _t base_offset ;
uint32_t size ;
uint32_t flags ;
enum dprc_region_type type ;
} ;
/**
* dprc_get_obj_region ( ) - Get region information for a specified object .
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ obj_type ; Object type as returned in dprc_get_obj ( )
* @ obj_type : Object type as returned in dprc_get_obj ( )
* @ obj_id : Unique object instance as returned in dprc_get_obj ( )
* @ region_index : The specific region to query
* @ region_desc : Returns the requested region descriptor
@ -640,6 +702,7 @@ struct dprc_region_desc {
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_get_obj_region ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
char * obj_type ,
int obj_id ,
@ -650,53 +713,74 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
* operations
* @ type : Endpoint object type : NULL terminated string
* @ id : Endpoint object ID
* @ inter face _id : Interface ID ; should be set for endpoints with multiple
* @ 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 ;
int interface_id ;
char type [ 16 ] ;
int id ;
uint16_t if_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 {
uint32_t committed_rate ;
uint32_t max_rate ;
} ;
/**
* dprc_connect ( ) - Connect two endpoints to create a network link between them
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ endpoint1 : Endpoint 1 configuration parameters
* @ endpoint2 : Endpoint 2 configuration parameters
* @ cfg : Connection configuration . The connection configuration is ignored for
* connections made to DPMAC objects , where rate is retrieved from the
* MAC configuration .
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_connect ( struct fsl_mc_io * mc_io ,
uint16_t token ,
const struct dprc_endpoint * endpoint1 ,
const struct dprc_endpoint * endpoint2 ) ;
int dprc_connect ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
const struct dprc_endpoint * endpoint1 ,
const struct dprc_endpoint * endpoint2 ,
const struct dprc_connection_cfg * cfg ) ;
/**
* dprc_disconnect ( ) - Disconnect one endpoint to remove its network connection
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ endpoint : Endpoint configuration parameters
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
int dprc_disconnect ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
const struct dprc_endpoint * endpoint ) ;
/**
* dprc_get_connection ( ) - Get connected endpoint and link status if connection
* exists .
* @ mc_io Pointer to MC portal ' s I / O object
* @ token Token of DPRC object
* @ endpoint1 Endpoint 1 configuration parameters
* @ endpoint2 Returned endpoint 2 configuration parameters
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPRC object
* @ endpoint1 : Endpoint 1 configuration parameters
* @ endpoint2 : Returned endpoint 2 configuration parameters
* @ state : Returned link state : 1 - link is up , 0 - link is down
*
* Return : ' 0 ' on Success ; - ENAVAIL if connection does not exist .
*/
int dprc_get_connection ( struct fsl_mc_io * mc_io ,
uint32_t cmd_flags ,
uint16_t token ,
const struct dprc_endpoint * endpoint1 ,
struct dprc_endpoint * endpoint2 ,