net/bnxt: free statistics context
Add function and associated structures and definitions to free statistics context from the ASIC. New HWRM call: bnxt_hwrm_stat_ctx_free This command is used to free a stat context. Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com> Signed-off-by: Stephen Hurd <stephen.hurd@broadcom.com> Reviewed-by: David Christensen <david.christensen@broadcom.com>
This commit is contained in:
parent
37d6161a68
commit
200b64ba0b
@ -742,6 +742,28 @@ int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp,
|
||||
return rc;
|
||||
}
|
||||
|
||||
int bnxt_hwrm_stat_ctx_free(struct bnxt *bp,
|
||||
struct bnxt_cp_ring_info *cpr, unsigned int idx)
|
||||
{
|
||||
int rc;
|
||||
struct hwrm_stat_ctx_free_input req = {.req_type = 0 };
|
||||
struct hwrm_stat_ctx_free_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
|
||||
HWRM_PREP(req, STAT_CTX_FREE, -1, resp);
|
||||
|
||||
req.stat_ctx_id = rte_cpu_to_le_16(cpr->hw_stats_ctx_id);
|
||||
req.seq_id = rte_cpu_to_le_16(bp->hwrm_cmd_seq++);
|
||||
|
||||
rc = bnxt_hwrm_send_message(bp, &req, sizeof(req));
|
||||
|
||||
HWRM_CHECK_RESULT;
|
||||
|
||||
cpr->hw_stats_ctx_id = HWRM_NA_SIGNATURE;
|
||||
bp->grp_info[idx].fw_stats_ctx = cpr->hw_stats_ctx_id;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int bnxt_hwrm_vnic_alloc(struct bnxt *bp, struct bnxt_vnic_info *vnic)
|
||||
{
|
||||
int rc = 0, i, j;
|
||||
@ -918,6 +940,28 @@ int bnxt_clear_all_hwrm_stat_ctxs(struct bnxt *bp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bnxt_free_all_hwrm_stat_ctxs(struct bnxt *bp)
|
||||
{
|
||||
int rc;
|
||||
unsigned int i;
|
||||
struct bnxt_cp_ring_info *cpr;
|
||||
|
||||
for (i = 0; i < bp->rx_cp_nr_rings + bp->tx_cp_nr_rings; i++) {
|
||||
unsigned int idx = i + 1;
|
||||
|
||||
if (i >= bp->rx_cp_nr_rings)
|
||||
cpr = bp->tx_queues[i - bp->rx_cp_nr_rings]->cp_ring;
|
||||
else
|
||||
cpr = bp->rx_queues[i]->cp_ring;
|
||||
if (cpr->hw_stats_ctx_id != HWRM_NA_SIGNATURE) {
|
||||
rc = bnxt_hwrm_stat_ctx_free(bp, cpr, idx);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bnxt_alloc_all_hwrm_stat_ctxs(struct bnxt *bp)
|
||||
{
|
||||
unsigned int i;
|
||||
|
@ -74,6 +74,8 @@ int bnxt_hwrm_ring_grp_free(struct bnxt *bp, unsigned int idx);
|
||||
int bnxt_hwrm_stat_clear(struct bnxt *bp, struct bnxt_cp_ring_info *cpr);
|
||||
int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp,
|
||||
struct bnxt_cp_ring_info *cpr, unsigned int idx);
|
||||
int bnxt_hwrm_stat_ctx_free(struct bnxt *bp,
|
||||
struct bnxt_cp_ring_info *cpr, unsigned int idx);
|
||||
|
||||
int bnxt_hwrm_ver_get(struct bnxt *bp);
|
||||
|
||||
@ -87,6 +89,7 @@ int bnxt_hwrm_vnic_rss_cfg(struct bnxt *bp,
|
||||
|
||||
int bnxt_alloc_all_hwrm_stat_ctxs(struct bnxt *bp);
|
||||
int bnxt_clear_all_hwrm_stat_ctxs(struct bnxt *bp);
|
||||
int bnxt_free_all_hwrm_stat_ctxs(struct bnxt *bp);
|
||||
int bnxt_free_all_hwrm_ring_grps(struct bnxt *bp);
|
||||
int bnxt_alloc_all_hwrm_ring_grps(struct bnxt *bp);
|
||||
void bnxt_free_hwrm_resources(struct bnxt *bp);
|
||||
|
@ -104,6 +104,7 @@ struct ctx_hw_stats64 {
|
||||
#define HWRM_CFA_L2_FILTER_CFG (UINT32_C(0x92))
|
||||
#define HWRM_CFA_L2_SET_RX_MASK (UINT32_C(0x93))
|
||||
#define HWRM_STAT_CTX_ALLOC (UINT32_C(0xb0))
|
||||
#define HWRM_STAT_CTX_FREE (UINT32_C(0xb1))
|
||||
#define HWRM_STAT_CTX_CLR_STATS (UINT32_C(0xb3))
|
||||
#define HWRM_EXEC_FWD_RESP (UINT32_C(0xd0))
|
||||
|
||||
@ -3839,6 +3840,86 @@ struct hwrm_stat_ctx_clr_stats_output {
|
||||
uint8_t valid;
|
||||
} __attribute__((packed));
|
||||
|
||||
/* hwrm_stat_ctx_free */
|
||||
/* Description: This command is used to free a stat context. */
|
||||
/* Input (24 bytes) */
|
||||
|
||||
struct hwrm_stat_ctx_free_input {
|
||||
/*
|
||||
* This value indicates what type of request this is. The format for the
|
||||
* rest of the command is determined by this field.
|
||||
*/
|
||||
uint16_t req_type;
|
||||
|
||||
/*
|
||||
* This value indicates the what completion ring the request will be
|
||||
* optionally completed on. If the value is -1, then no CR completion
|
||||
* will be generated. Any other value must be a valid CR ring_id value
|
||||
* for this function.
|
||||
*/
|
||||
uint16_t cmpl_ring;
|
||||
|
||||
/* This value indicates the command sequence number. */
|
||||
uint16_t seq_id;
|
||||
|
||||
/*
|
||||
* Target ID of this command. 0x0 - 0xFFF8 - Used for function ids
|
||||
* 0xFFF8 - 0xFFFE - Reserved for internal processors 0xFFFF - HWRM
|
||||
*/
|
||||
uint16_t target_id;
|
||||
|
||||
/*
|
||||
* This is the host address where the response will be written when the
|
||||
* request is complete. This area must be 16B aligned and must be
|
||||
* cleared to zero before the request is made.
|
||||
*/
|
||||
uint64_t resp_addr;
|
||||
|
||||
/* ID of the statistics context that is being queried. */
|
||||
uint32_t stat_ctx_id;
|
||||
|
||||
uint32_t unused_0;
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Output (16 bytes) */
|
||||
|
||||
struct hwrm_stat_ctx_free_output {
|
||||
/*
|
||||
* Pass/Fail or error type Note: receiver to verify the in parameters,
|
||||
* and fail the call with an error when appropriate
|
||||
*/
|
||||
uint16_t error_code;
|
||||
|
||||
/* This field returns the type of original request. */
|
||||
uint16_t req_type;
|
||||
|
||||
/* This field provides original sequence number of the command. */
|
||||
uint16_t seq_id;
|
||||
|
||||
/*
|
||||
* This field is the length of the response in bytes. The last byte of
|
||||
* the response is a valid flag that will read as '1' when the command
|
||||
* has been completely written to memory.
|
||||
*/
|
||||
uint16_t resp_len;
|
||||
|
||||
/* This is the statistics context ID value. */
|
||||
uint32_t stat_ctx_id;
|
||||
|
||||
uint8_t unused_0;
|
||||
uint8_t unused_1;
|
||||
uint8_t unused_2;
|
||||
|
||||
/*
|
||||
* This field is used in Output records to indicate that the output is
|
||||
* completely written to RAM. This field should be read as '1' to
|
||||
* indicate that the output has been completely written. When writing a
|
||||
* command completion or response to an internal processor, the order of
|
||||
* writes has to be such that this field is written last.
|
||||
*/
|
||||
uint8_t valid;
|
||||
} __attribute__((packed));
|
||||
|
||||
/* hwrm_vnic_alloc */
|
||||
/*
|
||||
* Description: This VNIC is a resource in the RX side of the chip that is used
|
||||
|
Loading…
Reference in New Issue
Block a user