net/qede/base: refactor code of SP queues

Maintain slowpath event queue and consumer queue within HW function
structure, update corresponding alloc and free APIs accordingly.
Cleanup unused code under CONFIG_ECORE_LL2 ifdef.

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
This commit is contained in:
Rasesh Mody 2017-03-29 13:36:26 -07:00 committed by Ferruh Yigit
parent ea7c1c6f37
commit d411a2b5e4
3 changed files with 64 additions and 92 deletions

View File

@ -165,12 +165,9 @@ void ecore_resc_free(struct ecore_dev *p_dev)
ecore_cxt_mngr_free(p_hwfn);
ecore_qm_info_free(p_hwfn);
ecore_spq_free(p_hwfn);
ecore_eq_free(p_hwfn, p_hwfn->p_eq);
ecore_consq_free(p_hwfn, p_hwfn->p_consq);
ecore_eq_free(p_hwfn);
ecore_consq_free(p_hwfn);
ecore_int_free(p_hwfn);
#ifdef CONFIG_ECORE_LL2
ecore_ll2_free(p_hwfn, p_hwfn->p_ll2_info);
#endif
ecore_iov_free(p_hwfn);
ecore_dmae_info_free(p_hwfn);
ecore_dcbx_info_free(p_hwfn, p_hwfn->p_dcbx_info);
@ -836,11 +833,6 @@ alloc_err:
enum _ecore_status_t ecore_resc_alloc(struct ecore_dev *p_dev)
{
struct ecore_consq *p_consq;
struct ecore_eq *p_eq;
#ifdef CONFIG_ECORE_LL2
struct ecore_ll2_info *p_ll2_info;
#endif
enum _ecore_status_t rc = ECORE_SUCCESS;
int i;
@ -988,24 +980,13 @@ enum _ecore_status_t ecore_resc_alloc(struct ecore_dev *p_dev)
goto alloc_no_mem;
}
p_eq = ecore_eq_alloc(p_hwfn, (u16)n_eqes);
if (!p_eq)
goto alloc_no_mem;
p_hwfn->p_eq = p_eq;
rc = ecore_eq_alloc(p_hwfn, (u16)n_eqes);
if (rc)
goto alloc_err;
p_consq = ecore_consq_alloc(p_hwfn);
if (!p_consq)
goto alloc_no_mem;
p_hwfn->p_consq = p_consq;
#ifdef CONFIG_ECORE_LL2
if (p_hwfn->using_ll2) {
p_ll2_info = ecore_ll2_alloc(p_hwfn);
if (!p_ll2_info)
goto alloc_no_mem;
p_hwfn->p_ll2_info = p_ll2_info;
}
#endif
rc = ecore_consq_alloc(p_hwfn);
if (rc)
goto alloc_err;
/* DMA info initialization */
rc = ecore_dmae_info_alloc(p_hwfn);
@ -1053,8 +1034,8 @@ void ecore_resc_setup(struct ecore_dev *p_dev)
ecore_cxt_mngr_setup(p_hwfn);
ecore_spq_setup(p_hwfn);
ecore_eq_setup(p_hwfn, p_hwfn->p_eq);
ecore_consq_setup(p_hwfn, p_hwfn->p_consq);
ecore_eq_setup(p_hwfn);
ecore_consq_setup(p_hwfn);
/* Read shadow of current MFW mailbox */
ecore_mcp_read_mb(p_hwfn, p_hwfn->p_main_ptt);
@ -1065,10 +1046,6 @@ void ecore_resc_setup(struct ecore_dev *p_dev)
ecore_int_setup(p_hwfn, p_hwfn->p_main_ptt);
ecore_iov_setup(p_hwfn, p_hwfn->p_main_ptt);
#ifdef CONFIG_ECORE_LL2
if (p_hwfn->using_ll2)
ecore_ll2_setup(p_hwfn, p_hwfn->p_ll2_info);
#endif
}
}

View File

@ -355,7 +355,7 @@ enum _ecore_status_t ecore_eq_completion(struct ecore_hwfn *p_hwfn,
return rc;
}
struct ecore_eq *ecore_eq_alloc(struct ecore_hwfn *p_hwfn, u16 num_elem)
enum _ecore_status_t ecore_eq_alloc(struct ecore_hwfn *p_hwfn, u16 num_elem)
{
struct ecore_eq *p_eq;
@ -364,7 +364,7 @@ struct ecore_eq *ecore_eq_alloc(struct ecore_hwfn *p_hwfn, u16 num_elem)
if (!p_eq) {
DP_NOTICE(p_hwfn, true,
"Failed to allocate `struct ecore_eq'\n");
return OSAL_NULL;
return ECORE_NOMEM;
}
/* Allocate and initialize EQ chain*/
@ -374,7 +374,7 @@ struct ecore_eq *ecore_eq_alloc(struct ecore_hwfn *p_hwfn, u16 num_elem)
ECORE_CHAIN_CNT_TYPE_U16,
num_elem,
sizeof(union event_ring_element),
&p_eq->chain, OSAL_NULL)) {
&p_eq->chain, OSAL_NULL) != ECORE_SUCCESS) {
DP_NOTICE(p_hwfn, true, "Failed to allocate eq chain\n");
goto eq_allocate_fail;
}
@ -383,24 +383,28 @@ struct ecore_eq *ecore_eq_alloc(struct ecore_hwfn *p_hwfn, u16 num_elem)
ecore_int_register_cb(p_hwfn, ecore_eq_completion,
p_eq, &p_eq->eq_sb_index, &p_eq->p_fw_cons);
return p_eq;
p_hwfn->p_eq = p_eq;
return ECORE_SUCCESS;
eq_allocate_fail:
ecore_eq_free(p_hwfn, p_eq);
return OSAL_NULL;
}
void ecore_eq_setup(struct ecore_hwfn *p_hwfn, struct ecore_eq *p_eq)
{
ecore_chain_reset(&p_eq->chain);
}
void ecore_eq_free(struct ecore_hwfn *p_hwfn, struct ecore_eq *p_eq)
{
if (!p_eq)
return;
ecore_chain_free(p_hwfn->p_dev, &p_eq->chain);
OSAL_FREE(p_hwfn->p_dev, p_eq);
return ECORE_NOMEM;
}
void ecore_eq_setup(struct ecore_hwfn *p_hwfn)
{
ecore_chain_reset(&p_hwfn->p_eq->chain);
}
void ecore_eq_free(struct ecore_hwfn *p_hwfn)
{
if (!p_hwfn->p_eq)
return;
ecore_chain_free(p_hwfn->p_dev, &p_hwfn->p_eq->chain);
OSAL_FREE(p_hwfn->p_dev, p_hwfn->p_eq);
p_hwfn->p_eq = OSAL_NULL;
}
/***************************************************************************
@ -943,7 +947,7 @@ enum _ecore_status_t ecore_spq_completion(struct ecore_hwfn *p_hwfn,
return rc;
}
struct ecore_consq *ecore_consq_alloc(struct ecore_hwfn *p_hwfn)
enum _ecore_status_t ecore_consq_alloc(struct ecore_hwfn *p_hwfn)
{
struct ecore_consq *p_consq;
@ -953,7 +957,7 @@ struct ecore_consq *ecore_consq_alloc(struct ecore_hwfn *p_hwfn)
if (!p_consq) {
DP_NOTICE(p_hwfn, true,
"Failed to allocate `struct ecore_consq'\n");
return OSAL_NULL;
return ECORE_NOMEM;
}
/* Allocate and initialize EQ chain */
@ -963,27 +967,29 @@ struct ecore_consq *ecore_consq_alloc(struct ecore_hwfn *p_hwfn)
ECORE_CHAIN_CNT_TYPE_U16,
ECORE_CHAIN_PAGE_SIZE / 0x80,
0x80,
&p_consq->chain, OSAL_NULL)) {
&p_consq->chain, OSAL_NULL) != ECORE_SUCCESS) {
DP_NOTICE(p_hwfn, true, "Failed to allocate consq chain");
goto consq_allocate_fail;
}
return p_consq;
p_hwfn->p_consq = p_consq;
return ECORE_SUCCESS;
consq_allocate_fail:
ecore_consq_free(p_hwfn, p_consq);
return OSAL_NULL;
}
void ecore_consq_setup(struct ecore_hwfn *p_hwfn, struct ecore_consq *p_consq)
{
ecore_chain_reset(&p_consq->chain);
}
void ecore_consq_free(struct ecore_hwfn *p_hwfn, struct ecore_consq *p_consq)
{
if (!p_consq)
return;
ecore_chain_free(p_hwfn->p_dev, &p_consq->chain);
OSAL_FREE(p_hwfn->p_dev, p_consq);
return ECORE_NOMEM;
}
void ecore_consq_setup(struct ecore_hwfn *p_hwfn)
{
ecore_chain_reset(&p_hwfn->p_consq->chain);
}
void ecore_consq_free(struct ecore_hwfn *p_hwfn)
{
if (!p_hwfn->p_consq)
return;
ecore_chain_free(p_hwfn->p_dev, &p_hwfn->p_consq->chain);
OSAL_FREE(p_hwfn->p_dev, p_hwfn->p_consq);
}

View File

@ -194,28 +194,23 @@ void ecore_spq_return_entry(struct ecore_hwfn *p_hwfn,
* @param p_hwfn
* @param num_elem number of elements in the eq
*
* @return struct ecore_eq* - a newly allocated structure; NULL upon error.
* @return enum _ecore_status_t
*/
struct ecore_eq *ecore_eq_alloc(struct ecore_hwfn *p_hwfn,
u16 num_elem);
enum _ecore_status_t ecore_eq_alloc(struct ecore_hwfn *p_hwfn, u16 num_elem);
/**
* @brief ecore_eq_setup - Reset the SPQ to its start state.
* @brief ecore_eq_setup - Reset the EQ to its start state.
*
* @param p_hwfn
* @param p_eq
*/
void ecore_eq_setup(struct ecore_hwfn *p_hwfn,
struct ecore_eq *p_eq);
void ecore_eq_setup(struct ecore_hwfn *p_hwfn);
/**
* @brief ecore_eq_deallocate - deallocates the given EQ struct.
* @brief ecore_eq_free - deallocates the given EQ struct.
*
* @param p_hwfn
* @param p_eq
*/
void ecore_eq_free(struct ecore_hwfn *p_hwfn,
struct ecore_eq *p_eq);
void ecore_eq_free(struct ecore_hwfn *p_hwfn);
/**
* @brief ecore_eq_prod_update - update the FW with default EQ producer
@ -261,32 +256,26 @@ enum _ecore_status_t ecore_spq_completion(struct ecore_hwfn *p_hwfn,
u32 ecore_spq_get_cid(struct ecore_hwfn *p_hwfn);
/**
* @brief ecore_consq_alloc - Allocates & initializes an ConsQ
* struct
* @brief ecore_consq_alloc - Allocates & initializes an ConsQ struct
*
* @param p_hwfn
*
* @return struct ecore_eq* - a newly allocated structure; NULL upon error.
* @return enum _ecore_status_t
*/
struct ecore_consq *ecore_consq_alloc(struct ecore_hwfn *p_hwfn);
enum _ecore_status_t ecore_consq_alloc(struct ecore_hwfn *p_hwfn);
/**
* @brief ecore_consq_setup - Reset the ConsQ to its start
* state.
* @brief ecore_consq_setup - Reset the ConsQ to its start state.
*
* @param p_hwfn
* @param p_eq
*/
void ecore_consq_setup(struct ecore_hwfn *p_hwfn,
struct ecore_consq *p_consq);
void ecore_consq_setup(struct ecore_hwfn *p_hwfn);
/**
* @brief ecore_consq_free - deallocates the given ConsQ struct.
*
* @param p_hwfn
* @param p_eq
*/
void ecore_consq_free(struct ecore_hwfn *p_hwfn,
struct ecore_consq *p_consq);
void ecore_consq_free(struct ecore_hwfn *p_hwfn);
#endif /* __ECORE_SPQ_H__ */