#ifndef _FSL_QBMAN_PORTAL_H
#define _FSL_QBMAN_PORTAL_H
+#include <rte_compat.h>
#include <fsl_qbman_base.h>
#define SVR_LS1080A 0x87030000
* @p: the given software portal object.
* @mask: The value to set in SWP_ISR register.
*/
+__rte_internal
void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask);
/**
* rather by specifying the index (from 0 to 15) that has been mapped to the
* desired channel.
*/
+__rte_internal
void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable);
/* ------------------- */
* default/starting state.
* @d: the pull dequeue descriptor to be cleared.
*/
+__rte_internal
void qbman_pull_desc_clear(struct qbman_pull_desc *d);
/**
* the caller provides in 'storage_phys'), and 'stash' controls whether or not
* those writes to main-memory express a cache-warming attribute.
*/
+__rte_internal
void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
struct qbman_result *storage,
uint64_t storage_phys,
* @d: the pull dequeue descriptor to be set.
* @numframes: number of frames to be set, must be between 1 and 16, inclusive.
*/
+__rte_internal
void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
uint8_t numframes);
/**
* qbman_pull_desc_set_fq() - Set fqid from which the dequeue command dequeues.
* @fqid: the frame queue index of the given FQ.
*/
+__rte_internal
void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid);
/**
* Return 0 for success, and -EBUSY if the software portal is not ready
* to do pull dequeue.
*/
+__rte_internal
int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d);
/* -------------------------------- */
* only once, so repeated calls can return a sequence of DQRR entries, without
* requiring they be consumed immediately or in any particular order.
*/
+__rte_internal
const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *p);
/**
* qbman_swp_prefetch_dqrr_next() - prefetch the next DQRR entry.
* @s: the software portal object.
*/
+__rte_internal
void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s);
/**
* @s: the software portal object.
* @dq: the DQRR entry to be consumed.
*/
+__rte_internal
void qbman_swp_dqrr_consume(struct qbman_swp *s, const struct qbman_result *dq);
/**
* @s: the software portal object.
* @dqrr_index: the DQRR index entry to be consumed.
*/
+__rte_internal
void qbman_swp_dqrr_idx_consume(struct qbman_swp *s, uint8_t dqrr_index);
/**
*
* Return dqrr index.
*/
+__rte_internal
uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr);
/**
*
* Return dqrr entry object.
*/
+__rte_internal
struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx);
/* ------------------------------------------------- */
* Return 1 for getting a valid dequeue result, or 0 for not getting a valid
* dequeue result.
*/
+__rte_internal
int qbman_result_has_new_result(struct qbman_swp *s,
struct qbman_result *dq);
* Return 1 for getting a valid dequeue result, or 0 for not getting a valid
* dequeue result.
*/
+__rte_internal
int qbman_check_command_complete(struct qbman_result *dq);
+__rte_internal
int qbman_check_new_result(struct qbman_result *dq);
/* -------------------------------------------------------- */
*
* Return the state field.
*/
+__rte_internal
uint8_t qbman_result_DQ_flags(const struct qbman_result *dq);
/**
*
* Return seqnum.
*/
+__rte_internal
uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq);
/**
*
* Return odpid.
*/
+__rte_internal
uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq);
/**
*
* Return the frame queue context.
*/
+__rte_internal
uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq);
/**
*
* Return the frame descriptor.
*/
+__rte_internal
const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq);
/* State-change notifications (FQDAN/CDAN/CSCN/...). */
*
* Return the state in the notifiation.
*/
+__rte_internal
uint8_t qbman_result_SCN_state(const struct qbman_result *scn);
/**
* default/starting state.
* @d: the given enqueue descriptor.
*/
+__rte_internal
void qbman_eq_desc_clear(struct qbman_eq_desc *d);
/* Exactly one of the following descriptor "actions" should be set. (Calling
* @response_success: 1 = enqueue with response always; 0 = enqueue with
* rejections returned on a FQ.
*/
+__rte_internal
void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success);
/**
* qbman_eq_desc_set_orp() - Set order-resotration in the enqueue descriptor
* @incomplete: indiates whether this is the last fragments using the same
* sequeue number.
*/
+__rte_internal
void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
uint16_t opr_id, uint16_t seqnum, int incomplete);
* data structure.) 'stash' controls whether or not the write to main-memory
* expresses a cache-warming attribute.
*/
+__rte_internal
void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
uint64_t storage_phys,
int stash);
* result "storage" before issuing an enqueue, and use any non-zero 'token'
* value.
*/
+__rte_internal
void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token);
/**
* @d: the enqueue descriptor
* @fqid: the id of the frame queue to be enqueued.
*/
+__rte_internal
void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid);
/**
* @qd_bin: the queuing destination bin
* @qd_prio: the queuing destination priority.
*/
+__rte_internal
void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
uint16_t qd_bin, uint8_t qd_prio);
* held-active (order-preserving) FQ, whether the FQ should be parked instead of
* being rescheduled.)
*/
+__rte_internal
void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
uint8_t dqrr_idx, int park);
*
* Return the fd pointer.
*/
+__rte_internal
struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp);
/**
* This value is set into the response id before the enqueue command, which,
* get overwritten by qbman once the enqueue command is complete.
*/
+__rte_internal
void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val);
/**
* copied into the enqueue response to determine if the command has been
* completed, and response has been updated.
*/
+__rte_internal
uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp);
/**
*
* Return 0 when command is sucessful.
*/
+__rte_internal
uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp);
/**
*
* Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
*/
+__rte_internal
int qbman_swp_enqueue_multiple(struct qbman_swp *s,
const struct qbman_eq_desc *d,
const struct qbman_fd *fd,
*
* Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
*/
+__rte_internal
int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
const struct qbman_eq_desc *d,
struct qbman_fd **fd,
*
* Return the number of enqueued frames, -EBUSY if the EQCR is not ready.
*/
+__rte_internal
int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
const struct qbman_eq_desc *d,
const struct qbman_fd *fd,
* default/starting state.
* @d: the qbman release descriptor.
*/
+__rte_internal
void qbman_release_desc_clear(struct qbman_release_desc *d);
/**
* qbman_release_desc_set_bpid() - Set the ID of the buffer pool to release to
* @d: the qbman release descriptor.
*/
+__rte_internal
void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid);
/**
*
* Return 0 for success, -EBUSY if the release command ring is not ready.
*/
+__rte_internal
int qbman_swp_release(struct qbman_swp *s, const struct qbman_release_desc *d,
const uint64_t *buffers, unsigned int num_buffers);
* Return 0 for success, or negative error code if the acquire command
* fails.
*/
+__rte_internal
int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
unsigned int num_buffers);