src/dpdk/drivers/net/enic/enic.h
static inline unsigned int vf_wq_cq_idx(struct enic_vf_representor *vf)
{
	/* rq is not a typo. index(vcwI) coincides with index(vdI) */
	return vf->pf->conf_rq_count - (vf->pf->max_vf_id + vf->vf_id + 2);
}
/*
 * WQ, RQ, CQ allocation scheme. Firmware gives the driver an array of
 * WQs, an array of RQs, and an array of CQs. Fow now, these are
 * statically allocated between PF app send/receive queues and VF
 * representor app send/receive queues. VF representor supports only 1
 * send and 1 receive queue. The number of PF app queue is not known
 * until the queue setup time.
 *
 * R = number of receive queues for PF app
 * S = number of send queues for PF app
 * V = number of VF representors
 *
 * wI = WQ for PF app send queue I
 * rI = SOP RQ for PF app receive queue I
 * dI = Data RQ for rI
 * cwI = CQ for wI
 * crI = CQ for rI
 * vwI = WQ for VF representor send queue I
 * vrI = SOP RQ for VF representor receive queue I
 * vdI = Data RQ for vrI
 * vcwI = CQ for vwI
 * vcrI = CQ for vrI
 *
 * WQ array: | w0 |..| wS-1 |..| vwV-1 |..| vw0 |
 *             ^         ^         ^         ^
 *    index    0        S-1       W-V       W-1    W=len(WQ array)
 *
 * RQ array: | r0  |..| rR-1  |d0 |..|dR-1|  ..|vdV-1 |..| vd0 |vrV-1 |..|vr0 |
 *             ^         ^     ^       ^         ^          ^     ^        ^
 *    index    0        R-1    R      2R-1      X-2V    X-(V+1)  X-V      X-1
 * X=len(RQ array)
 *
 * CQ array: | cr0 |..| crR-1 |cw0|..|cwS-1|..|vcwV-1|..| vcw0|vcrV-1|..|vcr0|..
 *              ^         ^     ^       ^        ^         ^      ^        ^
 *    index     0        R-1    R     R+S-1     X-2V    X-(V+1)  X-V      X-1
 * X is not a typo. It really is len(RQ array) to accommodate enic_cq_rq() used
 * throughout RX handlers. The current scheme requires
 * len(CQ array) >= len(RQ array).
 */
WQ, RQ, CQ allocation scheme. Firmware gives the driver an array of
WQs, an array of RQs, and an array of CQs. Fow now, these are
statically allocated between PF app send/receive queues and VF
representor app send/receive queues. VF representor supports only 1
send and 1 receive queue. The number of PF app queue is not known
until the queue setup time.

R = number of receive queues for PF app
S = number of send queues for PF app
V = number of VF representors








WQ RQ CQ allocation scheme . Firmware gives the driver an array of WQs an array of RQs and an array of CQs . Fow now these are statically allocated between PF app send / receive queues and VF representor app send / receive queues . VF representor supports only 1 send and 1 receive queue . The number of PF app queue is not known until the queue setup time . R = number of receive queues for PF app S = number of send queues for PF app V = number of VF representors
static inline unsigned int vf_wq_cq_idx(struct enic_vf_representor *vf)
{
	return vf->pf->conf_rq_count - (vf->pf->max_vf_id + vf->vf_id + 2);
}
static inline unsigned int vf_wq_cq_idx ( struct enic_vf_representor * vf ) { return vf -> pf -> conf_rq_count - ( vf -> pf -> max_vf_id + vf -> vf_id + 2 ) ; }
WQ, RQ, CQ allocation scheme.
WQ RQ CQ allocation scheme .
/* rq is not a typo. index(vcwI) coincides with index(vdI) */