/* * cache the DPRC version to reduce the number of commands * towards the mc firmware
*/ static u16 dprc_major_ver; static u16 dprc_minor_ver;
/** * 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 * * Return: '0' on Success; Error code otherwise. * * @warning Required before any operation on the object.
*/ int dprc_open(struct fsl_mc_io *mc_io,
u32 cmd_flags, int container_id,
u16 *token)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_open *cmd_params; int err;
/** * 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 * allowed on the object without opening a new control session. * * Return: '0' on Success; Error code otherwise.
*/ int dprc_close(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token)
{ struct fsl_mc_command cmd = { 0 };
/* send command to mc*/ return mc_send_command(mc_io, &cmd);
}
EXPORT_SYMBOL_GPL(dprc_close);
/** * 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 * @options: 32 bit options: * - 0 (no bits set) - all the objects inside the container are * reset. The child containers are entered recursively and the * objects reset. All the objects (including the child containers) * are closed. * - bit 0 set - all the objects inside the container are reset. * However the child containers are not entered recursively. * This option is supported for API versions >= 6.5 * In case a software context crashes or becomes non-responsive, the parent * may wish to reset its resources container before the software context is * restarted. * * This routine informs all objects assigned to the child container that the * container is being reset, so they may perform any cleanup operations that are * needed. All objects handles that were owned by the child container shall be * closed. * * Note that such request may be submitted even if the child software context * has not crashed, but the resulting object cleanup operations will not be * aware of that. * * Return: '0' on Success; Error code otherwise.
*/ int dprc_reset_container(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token, int child_container_id,
u32 options)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_reset_container *cmd_params;
u32 cmdid = DPRC_CMDID_RESET_CONT; int err;
/* * If the DPRC object version was not yet cached, cache it now. * Otherwise use the already cached value.
*/ if (!dprc_major_ver && !dprc_minor_ver) {
err = dprc_get_api_version(mc_io, 0,
&dprc_major_ver,
&dprc_minor_ver); if (err) return err;
}
/* * MC API 6.5 introduced a new field in the command used to pass * some flags. * Bit 0 indicates that the child containers are not recursively reset.
*/ if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 5))
cmdid = DPRC_CMDID_RESET_CONT_V2;
/* send command to mc*/ return mc_send_command(mc_io, &cmd);
}
EXPORT_SYMBOL_GPL(dprc_reset_container);
/** * dprc_set_irq() - Set IRQ information for the DPRC to trigger an interrupt. * @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 * @irq_index: Identifies the interrupt index to configure * @irq_cfg: IRQ configuration * * Return: '0' on Success; Error code otherwise.
*/ int dprc_set_irq(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token,
u8 irq_index, struct dprc_irq_cfg *irq_cfg)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_set_irq *cmd_params;
/* send command to mc*/ return mc_send_command(mc_io, &cmd);
}
/** * dprc_set_irq_enable() - Set overall interrupt state. * @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 * @irq_index: The interrupt index to configure * @en: Interrupt state - enable = 1, disable = 0 * * Allows GPP software to control when interrupts are generated. * Each interrupt can have up to 32 causes. The enable/disable control's the * overall interrupt state. if the interrupt is disabled no causes will cause * an interrupt. * * Return: '0' on Success; Error code otherwise.
*/ int dprc_set_irq_enable(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token,
u8 irq_index,
u8 en)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_set_irq_enable *cmd_params;
/* send command to mc*/ return mc_send_command(mc_io, &cmd);
}
/** * dprc_set_irq_mask() - Set interrupt mask. * @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 * @irq_index: The interrupt index to configure * @mask: event mask to trigger interrupt; * each bit: * 0 = ignore event * 1 = consider event for asserting irq * * Every interrupt can have up to 32 causes and the interrupt model supports * masking/unmasking each cause independently * * Return: '0' on Success; Error code otherwise.
*/ int dprc_set_irq_mask(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token,
u8 irq_index,
u32 mask)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_set_irq_mask *cmd_params;
/* send command to mc*/ return mc_send_command(mc_io, &cmd);
}
/** * dprc_get_irq_status() - Get the current status of any pending interrupts. * @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 * @irq_index: The interrupt index to configure * @status: Returned interrupts status - one bit per cause: * 0 = no interrupt pending * 1 = interrupt pending * * Return: '0' on Success; Error code otherwise.
*/ int dprc_get_irq_status(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token,
u8 irq_index,
u32 *status)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_get_irq_status *cmd_params; struct dprc_rsp_get_irq_status *rsp_params; int err;
/** * dprc_clear_irq_status() - Clear a pending interrupt's status * @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 * @irq_index: The interrupt index to configure * @status: bits to clear (W1C) - one bit per cause: * 0 = don't change * 1 = clear status bit * * Return: '0' on Success; Error code otherwise.
*/ int dprc_clear_irq_status(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token,
u8 irq_index,
u32 status)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_clear_irq_status *cmd_params;
/** * 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,
u32 cmd_flags,
u16 token, int *obj_count)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_rsp_get_obj_count *rsp_params; int err;
/** * 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 * * The object descriptors are retrieved one by one by incrementing * obj_index up to (not including) the value of obj_count returned * from dprc_get_obj_count(). dprc_get_obj_count() must * be called prior to dprc_get_obj(). * * Return: '0' on Success; Error code otherwise.
*/ int dprc_get_obj(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token, int obj_index, struct fsl_mc_obj_desc *obj_desc)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_get_obj *cmd_params; struct dprc_rsp_get_obj *rsp_params; int err;
/** * dprc_set_obj_irq() - Set IRQ information for object to trigger an interrupt. * @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: Type of the object to set its IRQ * @obj_id: ID of the object to set its IRQ * @irq_index: The interrupt index to configure * @irq_cfg: IRQ configuration * * Return: '0' on Success; Error code otherwise.
*/ int dprc_set_obj_irq(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token, char *obj_type, int obj_id,
u8 irq_index, struct dprc_irq_cfg *irq_cfg)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_set_obj_irq *cmd_params;
/* send command to mc*/ return mc_send_command(mc_io, &cmd);
}
EXPORT_SYMBOL_GPL(dprc_set_obj_irq);
/** * 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_id: Unique object instance as returned in dprc_get_obj() * @region_index: The specific region to query * @region_desc: Returns the requested region descriptor * * Return: '0' on Success; Error code otherwise.
*/ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token, char *obj_type, int obj_id,
u8 region_index, struct dprc_region_desc *region_desc)
{ struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_get_obj_region *cmd_params; struct dprc_rsp_get_obj_region *rsp_params; int err;
/* * If the DPRC object version was not yet cached, cache it now. * Otherwise use the already cached value.
*/ if (!dprc_major_ver && !dprc_minor_ver) {
err = dprc_get_api_version(mc_io, 0,
&dprc_major_ver,
&dprc_minor_ver); if (err) return err;
}
if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 6)) { /* * MC API version 6.6 changed the size of the MC portals and software * portals to 64K (as implemented by hardware). If older API is in use the * size reported is less (64 bytes for mc portals and 4K for software * portals).
*/
} elseif (dprc_major_ver == 6 && dprc_minor_ver >= 3) { /* * MC API version 6.3 introduced a new field to the region * descriptor: base_address. If the older API is in use then the base * address is set to zero to indicate it needs to be obtained elsewhere * (typically the device tree).
*/
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG_V2,
cmd_flags, token);
} else {
cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
cmd_flags, token);
}
/** * dprc_get_api_version - Get Data Path Resource Container API version * @mc_io: Pointer to Mc portal's I/O object * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' * @major_ver: Major version of Data Path Resource Container API * @minor_ver: Minor version of Data Path Resource Container API * * Return: '0' on Success; Error code otherwise.
*/ int dprc_get_api_version(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 *major_ver,
u16 *minor_ver)
{ struct fsl_mc_command cmd = { 0 }; int err;
/** * dprc_get_container_id - Get container ID associated with a given portal. * @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,
u32 cmd_flags, int *container_id)
{ struct fsl_mc_command cmd = { 0 }; int err;
/** * dprc_get_connection() - Get connected endpoint and link status if connection * exists. * @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; * -1 - no connection (endpoint2 information is irrelevant) * * Return: '0' on Success; -ENOTCONN if connection does not exist.
*/ int dprc_get_connection(struct fsl_mc_io *mc_io,
u32 cmd_flags,
u16 token, conststruct dprc_endpoint *endpoint1, struct dprc_endpoint *endpoint2, int *state)
{ struct dprc_cmd_get_connection *cmd_params; struct dprc_rsp_get_connection *rsp_params; struct fsl_mc_command cmd = { 0 }; int err, i;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.