diff options
Diffstat (limited to 'drivers/net/ethernet/brocade/bna/bna_enet.c')
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bna_enet.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/drivers/net/ethernet/brocade/bna/bna_enet.c b/drivers/net/ethernet/brocade/bna/bna_enet.c index 68a275d66fcf..26f5c5abfd1f 100644 --- a/drivers/net/ethernet/brocade/bna/bna_enet.c +++ b/drivers/net/ethernet/brocade/bna/bna_enet.c | |||
@@ -167,13 +167,14 @@ bna_bfi_attr_get_rsp(struct bna_ioceth *ioceth, | |||
167 | * Store only if not set earlier, since BNAD can override the HW | 167 | * Store only if not set earlier, since BNAD can override the HW |
168 | * attributes | 168 | * attributes |
169 | */ | 169 | */ |
170 | if (!ioceth->attr.num_txq) | 170 | if (!ioceth->attr.fw_query_complete) { |
171 | ioceth->attr.num_txq = ntohl(rsp->max_cfg); | 171 | ioceth->attr.num_txq = ntohl(rsp->max_cfg); |
172 | if (!ioceth->attr.num_rxp) | ||
173 | ioceth->attr.num_rxp = ntohl(rsp->max_cfg); | 172 | ioceth->attr.num_rxp = ntohl(rsp->max_cfg); |
174 | ioceth->attr.num_ucmac = ntohl(rsp->max_ucmac); | 173 | ioceth->attr.num_ucmac = ntohl(rsp->max_ucmac); |
175 | ioceth->attr.num_mcmac = BFI_ENET_MAX_MCAM; | 174 | ioceth->attr.num_mcmac = BFI_ENET_MAX_MCAM; |
176 | ioceth->attr.max_rit_size = ntohl(rsp->rit_size); | 175 | ioceth->attr.max_rit_size = ntohl(rsp->rit_size); |
176 | ioceth->attr.fw_query_complete = true; | ||
177 | } | ||
177 | 178 | ||
178 | bfa_fsm_send_event(ioceth, IOCETH_E_ENET_ATTR_RESP); | 179 | bfa_fsm_send_event(ioceth, IOCETH_E_ENET_ATTR_RESP); |
179 | } | 180 | } |
@@ -1693,6 +1694,16 @@ static struct bfa_ioc_cbfn bna_ioceth_cbfn = { | |||
1693 | bna_cb_ioceth_reset | 1694 | bna_cb_ioceth_reset |
1694 | }; | 1695 | }; |
1695 | 1696 | ||
1697 | static void bna_attr_init(struct bna_ioceth *ioceth) | ||
1698 | { | ||
1699 | ioceth->attr.num_txq = BFI_ENET_DEF_TXQ; | ||
1700 | ioceth->attr.num_rxp = BFI_ENET_DEF_RXP; | ||
1701 | ioceth->attr.num_ucmac = BFI_ENET_DEF_UCAM; | ||
1702 | ioceth->attr.num_mcmac = BFI_ENET_MAX_MCAM; | ||
1703 | ioceth->attr.max_rit_size = BFI_ENET_DEF_RITSZ; | ||
1704 | ioceth->attr.fw_query_complete = false; | ||
1705 | } | ||
1706 | |||
1696 | static void | 1707 | static void |
1697 | bna_ioceth_init(struct bna_ioceth *ioceth, struct bna *bna, | 1708 | bna_ioceth_init(struct bna_ioceth *ioceth, struct bna *bna, |
1698 | struct bna_res_info *res_info) | 1709 | struct bna_res_info *res_info) |
@@ -1738,6 +1749,8 @@ bna_ioceth_init(struct bna_ioceth *ioceth, struct bna *bna, | |||
1738 | ioceth->stop_cbfn = NULL; | 1749 | ioceth->stop_cbfn = NULL; |
1739 | ioceth->stop_cbarg = NULL; | 1750 | ioceth->stop_cbarg = NULL; |
1740 | 1751 | ||
1752 | bna_attr_init(ioceth); | ||
1753 | |||
1741 | bfa_fsm_set_state(ioceth, bna_ioceth_sm_stopped); | 1754 | bfa_fsm_set_state(ioceth, bna_ioceth_sm_stopped); |
1742 | } | 1755 | } |
1743 | 1756 | ||
@@ -2036,7 +2049,8 @@ bna_uninit(struct bna *bna) | |||
2036 | int | 2049 | int |
2037 | bna_num_txq_set(struct bna *bna, int num_txq) | 2050 | bna_num_txq_set(struct bna *bna, int num_txq) |
2038 | { | 2051 | { |
2039 | if (num_txq > 0 && (num_txq <= bna->ioceth.attr.num_txq)) { | 2052 | if (bna->ioceth.attr.fw_query_complete && |
2053 | (num_txq <= bna->ioceth.attr.num_txq)) { | ||
2040 | bna->ioceth.attr.num_txq = num_txq; | 2054 | bna->ioceth.attr.num_txq = num_txq; |
2041 | return BNA_CB_SUCCESS; | 2055 | return BNA_CB_SUCCESS; |
2042 | } | 2056 | } |
@@ -2047,7 +2061,8 @@ bna_num_txq_set(struct bna *bna, int num_txq) | |||
2047 | int | 2061 | int |
2048 | bna_num_rxp_set(struct bna *bna, int num_rxp) | 2062 | bna_num_rxp_set(struct bna *bna, int num_rxp) |
2049 | { | 2063 | { |
2050 | if (num_rxp > 0 && (num_rxp <= bna->ioceth.attr.num_rxp)) { | 2064 | if (bna->ioceth.attr.fw_query_complete && |
2065 | (num_rxp <= bna->ioceth.attr.num_rxp)) { | ||
2051 | bna->ioceth.attr.num_rxp = num_rxp; | 2066 | bna->ioceth.attr.num_rxp = num_rxp; |
2052 | return BNA_CB_SUCCESS; | 2067 | return BNA_CB_SUCCESS; |
2053 | } | 2068 | } |