mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-10-16 08:47:25 +08:00
Linux update to 4.12-rc1+
Linux baseline b23afd384801711ab6dbccd259cc14cb09a1dcaf.
This commit is contained in:
@@ -37,8 +37,11 @@
|
||||
/* Hardware constants */
|
||||
#define QM_CHANNEL_SWPORTAL0 0
|
||||
#define QMAN_CHANNEL_POOL1 0x21
|
||||
#define QMAN_CHANNEL_CAAM 0x80
|
||||
#define QMAN_CHANNEL_POOL1_REV3 0x401
|
||||
#define QMAN_CHANNEL_CAAM_REV3 0x840
|
||||
extern u16 qm_channel_pool1;
|
||||
extern u16 qm_channel_caam;
|
||||
|
||||
/* Portal processing (interrupt) sources */
|
||||
#define QM_PIRQ_CSCI 0x00100000 /* Congestion State Change */
|
||||
@@ -166,6 +169,7 @@ static inline void qm_fd_set_param(struct qm_fd *fd, enum qm_fd_format fmt,
|
||||
#define qm_fd_set_contig_big(fd, len) \
|
||||
qm_fd_set_param(fd, qm_fd_contig_big, 0, len)
|
||||
#define qm_fd_set_sg_big(fd, len) qm_fd_set_param(fd, qm_fd_sg_big, 0, len)
|
||||
#define qm_fd_set_compound(fd, len) qm_fd_set_param(fd, qm_fd_compound, 0, len)
|
||||
|
||||
static inline void qm_fd_clear_fd(struct qm_fd *fd)
|
||||
{
|
||||
@@ -640,6 +644,7 @@ struct qm_mcc_initcgr {
|
||||
#define QM_CGR_WE_MODE 0x0001
|
||||
|
||||
#define QMAN_CGR_FLAG_USE_INIT 0x00000001
|
||||
#define QMAN_CGR_MODE_FRAME 0x00000001
|
||||
|
||||
/* Portal and Frame Queues */
|
||||
/* Represents a managed portal */
|
||||
@@ -792,6 +797,84 @@ struct qman_cgr {
|
||||
#define QMAN_INITFQ_FLAG_SCHED 0x00000001 /* schedule rather than park */
|
||||
#define QMAN_INITFQ_FLAG_LOCAL 0x00000004 /* set dest portal */
|
||||
|
||||
/*
|
||||
* For qman_volatile_dequeue(); Choose one PRECEDENCE. EXACT is optional. Use
|
||||
* NUMFRAMES(n) (6-bit) or NUMFRAMES_TILLEMPTY to fill in the frame-count. Use
|
||||
* FQID(n) to fill in the frame queue ID.
|
||||
*/
|
||||
#define QM_VDQCR_PRECEDENCE_VDQCR 0x0
|
||||
#define QM_VDQCR_PRECEDENCE_SDQCR 0x80000000
|
||||
#define QM_VDQCR_EXACT 0x40000000
|
||||
#define QM_VDQCR_NUMFRAMES_MASK 0x3f000000
|
||||
#define QM_VDQCR_NUMFRAMES_SET(n) (((n) & 0x3f) << 24)
|
||||
#define QM_VDQCR_NUMFRAMES_GET(n) (((n) >> 24) & 0x3f)
|
||||
#define QM_VDQCR_NUMFRAMES_TILLEMPTY QM_VDQCR_NUMFRAMES_SET(0)
|
||||
|
||||
#define QMAN_VOLATILE_FLAG_WAIT 0x00000001 /* wait if VDQCR is in use */
|
||||
#define QMAN_VOLATILE_FLAG_WAIT_INT 0x00000002 /* if wait, interruptible? */
|
||||
#define QMAN_VOLATILE_FLAG_FINISH 0x00000004 /* wait till VDQCR completes */
|
||||
|
||||
/* "Query FQ Non-Programmable Fields" */
|
||||
struct qm_mcr_queryfq_np {
|
||||
u8 verb;
|
||||
u8 result;
|
||||
u8 __reserved1;
|
||||
u8 state; /* QM_MCR_NP_STATE_*** */
|
||||
u32 fqd_link; /* 24-bit, _res2[24-31] */
|
||||
u16 odp_seq; /* 14-bit, _res3[14-15] */
|
||||
u16 orp_nesn; /* 14-bit, _res4[14-15] */
|
||||
u16 orp_ea_hseq; /* 15-bit, _res5[15] */
|
||||
u16 orp_ea_tseq; /* 15-bit, _res6[15] */
|
||||
u32 orp_ea_hptr; /* 24-bit, _res7[24-31] */
|
||||
u32 orp_ea_tptr; /* 24-bit, _res8[24-31] */
|
||||
u32 pfdr_hptr; /* 24-bit, _res9[24-31] */
|
||||
u32 pfdr_tptr; /* 24-bit, _res10[24-31] */
|
||||
u8 __reserved2[5];
|
||||
u8 is; /* 1-bit, _res12[1-7] */
|
||||
u16 ics_surp;
|
||||
u32 byte_cnt;
|
||||
u32 frm_cnt; /* 24-bit, _res13[24-31] */
|
||||
u32 __reserved3;
|
||||
u16 ra1_sfdr; /* QM_MCR_NP_RA1_*** */
|
||||
u16 ra2_sfdr; /* QM_MCR_NP_RA2_*** */
|
||||
u16 __reserved4;
|
||||
u16 od1_sfdr; /* QM_MCR_NP_OD1_*** */
|
||||
u16 od2_sfdr; /* QM_MCR_NP_OD2_*** */
|
||||
u16 od3_sfdr; /* QM_MCR_NP_OD3_*** */
|
||||
} __packed;
|
||||
|
||||
#define QM_MCR_NP_STATE_FE 0x10
|
||||
#define QM_MCR_NP_STATE_R 0x08
|
||||
#define QM_MCR_NP_STATE_MASK 0x07 /* Reads FQD::STATE; */
|
||||
#define QM_MCR_NP_STATE_OOS 0x00
|
||||
#define QM_MCR_NP_STATE_RETIRED 0x01
|
||||
#define QM_MCR_NP_STATE_TEN_SCHED 0x02
|
||||
#define QM_MCR_NP_STATE_TRU_SCHED 0x03
|
||||
#define QM_MCR_NP_STATE_PARKED 0x04
|
||||
#define QM_MCR_NP_STATE_ACTIVE 0x05
|
||||
#define QM_MCR_NP_PTR_MASK 0x07ff /* for RA[12] & OD[123] */
|
||||
#define QM_MCR_NP_RA1_NRA(v) (((v) >> 14) & 0x3) /* FQD::NRA */
|
||||
#define QM_MCR_NP_RA2_IT(v) (((v) >> 14) & 0x1) /* FQD::IT */
|
||||
#define QM_MCR_NP_OD1_NOD(v) (((v) >> 14) & 0x3) /* FQD::NOD */
|
||||
#define QM_MCR_NP_OD3_NPC(v) (((v) >> 14) & 0x3) /* FQD::NPC */
|
||||
|
||||
enum qm_mcr_queryfq_np_masks {
|
||||
qm_mcr_fqd_link_mask = BIT(24) - 1,
|
||||
qm_mcr_odp_seq_mask = BIT(14) - 1,
|
||||
qm_mcr_orp_nesn_mask = BIT(14) - 1,
|
||||
qm_mcr_orp_ea_hseq_mask = BIT(15) - 1,
|
||||
qm_mcr_orp_ea_tseq_mask = BIT(15) - 1,
|
||||
qm_mcr_orp_ea_hptr_mask = BIT(24) - 1,
|
||||
qm_mcr_orp_ea_tptr_mask = BIT(24) - 1,
|
||||
qm_mcr_pfdr_hptr_mask = BIT(24) - 1,
|
||||
qm_mcr_pfdr_tptr_mask = BIT(24) - 1,
|
||||
qm_mcr_is_mask = BIT(1) - 1,
|
||||
qm_mcr_frm_cnt_mask = BIT(24) - 1,
|
||||
};
|
||||
|
||||
#define qm_mcr_np_get(np, field) \
|
||||
((np)->field & (qm_mcr_##field##_mask))
|
||||
|
||||
/* Portal Management */
|
||||
/**
|
||||
* qman_p_irqsource_add - add processing sources to be interrupt-driven
|
||||
@@ -966,6 +1049,25 @@ int qman_retire_fq(struct qman_fq *fq, u32 *flags);
|
||||
*/
|
||||
int qman_oos_fq(struct qman_fq *fq);
|
||||
|
||||
/*
|
||||
* qman_volatile_dequeue - Issue a volatile dequeue command
|
||||
* @fq: the frame queue object to dequeue from
|
||||
* @flags: a bit-mask of QMAN_VOLATILE_FLAG_*** options
|
||||
* @vdqcr: bit mask of QM_VDQCR_*** options, as per qm_dqrr_vdqcr_set()
|
||||
*
|
||||
* Attempts to lock access to the portal's VDQCR volatile dequeue functionality.
|
||||
* The function will block and sleep if QMAN_VOLATILE_FLAG_WAIT is specified and
|
||||
* the VDQCR is already in use, otherwise returns non-zero for failure. If
|
||||
* QMAN_VOLATILE_FLAG_FINISH is specified, the function will only return once
|
||||
* the VDQCR command has finished executing (ie. once the callback for the last
|
||||
* DQRR entry resulting from the VDQCR command has been called). If not using
|
||||
* the FINISH flag, completion can be determined either by detecting the
|
||||
* presence of the QM_DQRR_STAT_UNSCHEDULED and QM_DQRR_STAT_DQCR_EXPIRED bits
|
||||
* in the "stat" parameter passed to the FQ's dequeue callback, or by waiting
|
||||
* for the QMAN_FQ_STATE_VDQCR bit to disappear.
|
||||
*/
|
||||
int qman_volatile_dequeue(struct qman_fq *fq, u32 flags, u32 vdqcr);
|
||||
|
||||
/**
|
||||
* qman_enqueue - Enqueue a frame to a frame queue
|
||||
* @fq: the frame queue object to enqueue to
|
||||
@@ -997,6 +1099,13 @@ int qman_alloc_fqid_range(u32 *result, u32 count);
|
||||
*/
|
||||
int qman_release_fqid(u32 fqid);
|
||||
|
||||
/**
|
||||
* qman_query_fq_np - Queries non-programmable FQD fields
|
||||
* @fq: the frame queue object to be queried
|
||||
* @np: storage for the queried FQD fields
|
||||
*/
|
||||
int qman_query_fq_np(struct qman_fq *fq, struct qm_mcr_queryfq_np *np);
|
||||
|
||||
/* Pool-channel management */
|
||||
/**
|
||||
* qman_alloc_pool_range - Allocate a contiguous range of pool-channel IDs
|
||||
|
Reference in New Issue
Block a user