Lines Matching refs:tx
2766 #define call_tx_stop_cbfn(tx) \ argument
2768 if ((tx)->stop_cbfn) { \
2771 cbfn = (tx)->stop_cbfn; \
2772 cbarg = (tx)->stop_cbarg; \
2773 (tx)->stop_cbfn = NULL; \
2774 (tx)->stop_cbarg = NULL; \
2775 cbfn(cbarg, (tx)); \
2779 static void bna_tx_mod_cb_tx_stopped(void *tx_mod, struct bna_tx *tx);
2780 static void bna_bfi_tx_enet_start(struct bna_tx *tx);
2781 static void bna_tx_enet_stop(struct bna_tx *tx);
2808 bna_tx_sm_stopped_entry(struct bna_tx *tx) in bna_tx_sm_stopped_entry() argument
2810 call_tx_stop_cbfn(tx); in bna_tx_sm_stopped_entry()
2814 bna_tx_sm_stopped(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_stopped() argument
2818 bfa_fsm_set_state(tx, bna_tx_sm_start_wait); in bna_tx_sm_stopped()
2822 call_tx_stop_cbfn(tx); in bna_tx_sm_stopped()
2839 bna_tx_sm_start_wait_entry(struct bna_tx *tx) in bna_tx_sm_start_wait_entry() argument
2841 bna_bfi_tx_enet_start(tx); in bna_tx_sm_start_wait_entry()
2845 bna_tx_sm_start_wait(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_start_wait() argument
2849 tx->flags &= ~BNA_TX_F_BW_UPDATED; in bna_tx_sm_start_wait()
2850 bfa_fsm_set_state(tx, bna_tx_sm_stop_wait); in bna_tx_sm_start_wait()
2854 tx->flags &= ~BNA_TX_F_BW_UPDATED; in bna_tx_sm_start_wait()
2855 bfa_fsm_set_state(tx, bna_tx_sm_stopped); in bna_tx_sm_start_wait()
2859 if (tx->flags & BNA_TX_F_BW_UPDATED) { in bna_tx_sm_start_wait()
2860 tx->flags &= ~BNA_TX_F_BW_UPDATED; in bna_tx_sm_start_wait()
2861 bfa_fsm_set_state(tx, bna_tx_sm_prio_stop_wait); in bna_tx_sm_start_wait()
2863 bfa_fsm_set_state(tx, bna_tx_sm_started); in bna_tx_sm_start_wait()
2867 tx->flags |= BNA_TX_F_BW_UPDATED; in bna_tx_sm_start_wait()
2876 bna_tx_sm_started_entry(struct bna_tx *tx) in bna_tx_sm_started_entry() argument
2879 int is_regular = (tx->type == BNA_TX_T_REGULAR); in bna_tx_sm_started_entry()
2881 list_for_each_entry(txq, &tx->txq_q, qe) { in bna_tx_sm_started_entry()
2884 bna_ib_start(tx->bna, &txq->ib, is_regular); in bna_tx_sm_started_entry()
2886 tx->tx_resume_cbfn(tx->bna->bnad, tx); in bna_tx_sm_started_entry()
2890 bna_tx_sm_started(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_started() argument
2894 bfa_fsm_set_state(tx, bna_tx_sm_stop_wait); in bna_tx_sm_started()
2895 tx->tx_stall_cbfn(tx->bna->bnad, tx); in bna_tx_sm_started()
2896 bna_tx_enet_stop(tx); in bna_tx_sm_started()
2900 bfa_fsm_set_state(tx, bna_tx_sm_failed); in bna_tx_sm_started()
2901 tx->tx_stall_cbfn(tx->bna->bnad, tx); in bna_tx_sm_started()
2902 tx->tx_cleanup_cbfn(tx->bna->bnad, tx); in bna_tx_sm_started()
2906 bfa_fsm_set_state(tx, bna_tx_sm_prio_stop_wait); in bna_tx_sm_started()
2915 bna_tx_sm_stop_wait_entry(struct bna_tx *tx) in bna_tx_sm_stop_wait_entry() argument
2920 bna_tx_sm_stop_wait(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_stop_wait() argument
2925 bfa_fsm_set_state(tx, bna_tx_sm_cleanup_wait); in bna_tx_sm_stop_wait()
2926 tx->tx_cleanup_cbfn(tx->bna->bnad, tx); in bna_tx_sm_stop_wait()
2934 bna_tx_enet_stop(tx); in bna_tx_sm_stop_wait()
2947 bna_tx_sm_cleanup_wait_entry(struct bna_tx *tx) in bna_tx_sm_cleanup_wait_entry() argument
2952 bna_tx_sm_cleanup_wait(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_cleanup_wait() argument
2961 bfa_fsm_set_state(tx, bna_tx_sm_stopped); in bna_tx_sm_cleanup_wait()
2970 bna_tx_sm_prio_stop_wait_entry(struct bna_tx *tx) in bna_tx_sm_prio_stop_wait_entry() argument
2972 tx->tx_stall_cbfn(tx->bna->bnad, tx); in bna_tx_sm_prio_stop_wait_entry()
2973 bna_tx_enet_stop(tx); in bna_tx_sm_prio_stop_wait_entry()
2977 bna_tx_sm_prio_stop_wait(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_prio_stop_wait() argument
2981 bfa_fsm_set_state(tx, bna_tx_sm_stop_wait); in bna_tx_sm_prio_stop_wait()
2985 bfa_fsm_set_state(tx, bna_tx_sm_failed); in bna_tx_sm_prio_stop_wait()
2986 tx->tx_cleanup_cbfn(tx->bna->bnad, tx); in bna_tx_sm_prio_stop_wait()
2990 bfa_fsm_set_state(tx, bna_tx_sm_prio_cleanup_wait); in bna_tx_sm_prio_stop_wait()
3003 bna_tx_sm_prio_cleanup_wait_entry(struct bna_tx *tx) in bna_tx_sm_prio_cleanup_wait_entry() argument
3005 tx->tx_cleanup_cbfn(tx->bna->bnad, tx); in bna_tx_sm_prio_cleanup_wait_entry()
3009 bna_tx_sm_prio_cleanup_wait(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_prio_cleanup_wait() argument
3013 bfa_fsm_set_state(tx, bna_tx_sm_cleanup_wait); in bna_tx_sm_prio_cleanup_wait()
3017 bfa_fsm_set_state(tx, bna_tx_sm_failed); in bna_tx_sm_prio_cleanup_wait()
3025 bfa_fsm_set_state(tx, bna_tx_sm_start_wait); in bna_tx_sm_prio_cleanup_wait()
3034 bna_tx_sm_failed_entry(struct bna_tx *tx) in bna_tx_sm_failed_entry() argument
3039 bna_tx_sm_failed(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_failed() argument
3043 bfa_fsm_set_state(tx, bna_tx_sm_quiesce_wait); in bna_tx_sm_failed()
3047 bfa_fsm_set_state(tx, bna_tx_sm_cleanup_wait); in bna_tx_sm_failed()
3055 bfa_fsm_set_state(tx, bna_tx_sm_stopped); in bna_tx_sm_failed()
3064 bna_tx_sm_quiesce_wait_entry(struct bna_tx *tx) in bna_tx_sm_quiesce_wait_entry() argument
3069 bna_tx_sm_quiesce_wait(struct bna_tx *tx, enum bna_tx_event event) in bna_tx_sm_quiesce_wait() argument
3073 bfa_fsm_set_state(tx, bna_tx_sm_cleanup_wait); in bna_tx_sm_quiesce_wait()
3077 bfa_fsm_set_state(tx, bna_tx_sm_failed); in bna_tx_sm_quiesce_wait()
3081 bfa_fsm_set_state(tx, bna_tx_sm_start_wait); in bna_tx_sm_quiesce_wait()
3094 bna_bfi_tx_enet_start(struct bna_tx *tx) in bna_bfi_tx_enet_start() argument
3096 struct bfi_enet_tx_cfg_req *cfg_req = &tx->bfi_enet_cmd.cfg_req; in bna_bfi_tx_enet_start()
3101 BFI_ENET_H2I_TX_CFG_SET_REQ, 0, tx->rid); in bna_bfi_tx_enet_start()
3105 cfg_req->num_queues = tx->num_txq; in bna_bfi_tx_enet_start()
3106 for (i = 0; i < tx->num_txq; i++) { in bna_bfi_tx_enet_start()
3108 : list_first_entry(&tx->txq_q, struct bna_txq, qe); in bna_bfi_tx_enet_start()
3133 cfg_req->tx_cfg.vlan_id = htons((u16)tx->txf_vlan_id); in bna_bfi_tx_enet_start()
3137 bfa_msgq_cmd_set(&tx->msgq_cmd, NULL, NULL, in bna_bfi_tx_enet_start()
3139 bfa_msgq_cmd_post(&tx->bna->msgq, &tx->msgq_cmd); in bna_bfi_tx_enet_start()
3143 bna_bfi_tx_enet_stop(struct bna_tx *tx) in bna_bfi_tx_enet_stop() argument
3145 struct bfi_enet_req *req = &tx->bfi_enet_cmd.req; in bna_bfi_tx_enet_stop()
3148 BFI_ENET_H2I_TX_CFG_CLR_REQ, 0, tx->rid); in bna_bfi_tx_enet_stop()
3151 bfa_msgq_cmd_set(&tx->msgq_cmd, NULL, NULL, sizeof(struct bfi_enet_req), in bna_bfi_tx_enet_stop()
3153 bfa_msgq_cmd_post(&tx->bna->msgq, &tx->msgq_cmd); in bna_bfi_tx_enet_stop()
3157 bna_tx_enet_stop(struct bna_tx *tx) in bna_tx_enet_stop() argument
3162 list_for_each_entry(txq, &tx->txq_q, qe) in bna_tx_enet_stop()
3163 bna_ib_stop(tx->bna, &txq->ib); in bna_tx_enet_stop()
3165 bna_bfi_tx_enet_stop(tx); in bna_tx_enet_stop()
3207 struct bna_tx *tx = NULL; in bna_tx_get() local
3212 tx = list_first_entry(&tx_mod->tx_free_q, struct bna_tx, qe); in bna_tx_get()
3214 tx = list_last_entry(&tx_mod->tx_free_q, struct bna_tx, qe); in bna_tx_get()
3215 list_del(&tx->qe); in bna_tx_get()
3216 tx->type = type; in bna_tx_get()
3218 return tx; in bna_tx_get()
3222 bna_tx_free(struct bna_tx *tx) in bna_tx_free() argument
3224 struct bna_tx_mod *tx_mod = &tx->bna->tx_mod; in bna_tx_free()
3228 while (!list_empty(&tx->txq_q)) { in bna_tx_free()
3229 txq = list_first_entry(&tx->txq_q, struct bna_txq, qe); in bna_tx_free()
3231 txq->tx = NULL; in bna_tx_free()
3236 if (qe == &tx->qe) { in bna_tx_free()
3237 list_del(&tx->qe); in bna_tx_free()
3242 tx->bna = NULL; in bna_tx_free()
3243 tx->priv = NULL; in bna_tx_free()
3246 if (((struct bna_tx *)qe)->rid < tx->rid) in bna_tx_free()
3249 list_add(&tx->qe, qe); in bna_tx_free()
3253 bna_tx_start(struct bna_tx *tx) in bna_tx_start() argument
3255 tx->flags |= BNA_TX_F_ENET_STARTED; in bna_tx_start()
3256 if (tx->flags & BNA_TX_F_ENABLED) in bna_tx_start()
3257 bfa_fsm_send_event(tx, TX_E_START); in bna_tx_start()
3261 bna_tx_stop(struct bna_tx *tx) in bna_tx_stop() argument
3263 tx->stop_cbfn = bna_tx_mod_cb_tx_stopped; in bna_tx_stop()
3264 tx->stop_cbarg = &tx->bna->tx_mod; in bna_tx_stop()
3266 tx->flags &= ~BNA_TX_F_ENET_STARTED; in bna_tx_stop()
3267 bfa_fsm_send_event(tx, TX_E_STOP); in bna_tx_stop()
3271 bna_tx_fail(struct bna_tx *tx) in bna_tx_fail() argument
3273 tx->flags &= ~BNA_TX_F_ENET_STARTED; in bna_tx_fail()
3274 bfa_fsm_send_event(tx, TX_E_FAIL); in bna_tx_fail()
3278 bna_bfi_tx_enet_start_rsp(struct bna_tx *tx, struct bfi_msgq_mhdr *msghdr) in bna_bfi_tx_enet_start_rsp() argument
3280 struct bfi_enet_tx_cfg_rsp *cfg_rsp = &tx->bfi_enet_cmd.cfg_rsp; in bna_bfi_tx_enet_start_rsp()
3284 bfa_msgq_rsp_copy(&tx->bna->msgq, (u8 *)cfg_rsp, in bna_bfi_tx_enet_start_rsp()
3287 tx->hw_id = cfg_rsp->hw_id; in bna_bfi_tx_enet_start_rsp()
3289 for (i = 0, txq = list_first_entry(&tx->txq_q, struct bna_txq, qe); in bna_bfi_tx_enet_start_rsp()
3290 i < tx->num_txq; i++, txq = list_next_entry(txq, qe)) { in bna_bfi_tx_enet_start_rsp()
3293 tx->bna->pcidev.pci_bar_kva in bna_bfi_tx_enet_start_rsp()
3296 tx->bna->pcidev.pci_bar_kva in bna_bfi_tx_enet_start_rsp()
3305 bfa_fsm_send_event(tx, TX_E_STARTED); in bna_bfi_tx_enet_start_rsp()
3309 bna_bfi_tx_enet_stop_rsp(struct bna_tx *tx, struct bfi_msgq_mhdr *msghdr) in bna_bfi_tx_enet_stop_rsp() argument
3311 bfa_fsm_send_event(tx, TX_E_STOPPED); in bna_bfi_tx_enet_stop_rsp()
3317 struct bna_tx *tx; in bna_bfi_bw_update_aen() local
3319 list_for_each_entry(tx, &tx_mod->tx_active_q, qe) in bna_bfi_bw_update_aen()
3320 bfa_fsm_send_event(tx, TX_E_BW_UPDATE); in bna_bfi_bw_update_aen()
3378 struct bna_tx *tx; in bna_tx_create() local
3396 tx = bna_tx_get(tx_mod, tx_cfg->tx_type); in bna_tx_create()
3397 if (!tx) in bna_tx_create()
3399 tx->bna = bna; in bna_tx_create()
3400 tx->priv = priv; in bna_tx_create()
3404 INIT_LIST_HEAD(&tx->txq_q); in bna_tx_create()
3410 list_move_tail(&txq->qe, &tx->txq_q); in bna_tx_create()
3411 txq->tx = tx; in bna_tx_create()
3420 tx->tcb_setup_cbfn = tx_cbfn->tcb_setup_cbfn; in bna_tx_create()
3421 tx->tcb_destroy_cbfn = tx_cbfn->tcb_destroy_cbfn; in bna_tx_create()
3423 tx->tx_stall_cbfn = tx_cbfn->tx_stall_cbfn; in bna_tx_create()
3424 tx->tx_resume_cbfn = tx_cbfn->tx_resume_cbfn; in bna_tx_create()
3425 tx->tx_cleanup_cbfn = tx_cbfn->tx_cleanup_cbfn; in bna_tx_create()
3427 list_add_tail(&tx->qe, &tx_mod->tx_active_q); in bna_tx_create()
3429 tx->num_txq = tx_cfg->num_txq; in bna_tx_create()
3431 tx->flags = 0; in bna_tx_create()
3432 if (tx->bna->tx_mod.flags & BNA_TX_MOD_F_ENET_STARTED) { in bna_tx_create()
3433 switch (tx->type) { in bna_tx_create()
3435 if (!(tx->bna->tx_mod.flags & in bna_tx_create()
3437 tx->flags |= BNA_TX_F_ENET_STARTED; in bna_tx_create()
3440 if (tx->bna->tx_mod.flags & BNA_TX_MOD_F_ENET_LOOPBACK) in bna_tx_create()
3441 tx->flags |= BNA_TX_F_ENET_STARTED; in bna_tx_create()
3449 list_for_each_entry(txq, &tx->txq_q, qe) { in bna_tx_create()
3494 if (tx->tcb_setup_cbfn) in bna_tx_create()
3495 (tx->tcb_setup_cbfn)(bna->bnad, txq->tcb); in bna_tx_create()
3505 tx->txf_vlan_id = 0; in bna_tx_create()
3507 bfa_fsm_set_state(tx, bna_tx_sm_stopped); in bna_tx_create()
3509 tx_mod->rid_mask |= BIT(tx->rid); in bna_tx_create()
3511 return tx; in bna_tx_create()
3514 bna_tx_free(tx); in bna_tx_create()
3519 bna_tx_destroy(struct bna_tx *tx) in bna_tx_destroy() argument
3523 list_for_each_entry(txq, &tx->txq_q, qe) in bna_tx_destroy()
3524 if (tx->tcb_destroy_cbfn) in bna_tx_destroy()
3525 (tx->tcb_destroy_cbfn)(tx->bna->bnad, txq->tcb); in bna_tx_destroy()
3527 tx->bna->tx_mod.rid_mask &= ~BIT(tx->rid); in bna_tx_destroy()
3528 bna_tx_free(tx); in bna_tx_destroy()
3532 bna_tx_enable(struct bna_tx *tx) in bna_tx_enable() argument
3534 if (tx->fsm != (bfa_sm_t)bna_tx_sm_stopped) in bna_tx_enable()
3537 tx->flags |= BNA_TX_F_ENABLED; in bna_tx_enable()
3539 if (tx->flags & BNA_TX_F_ENET_STARTED) in bna_tx_enable()
3540 bfa_fsm_send_event(tx, TX_E_START); in bna_tx_enable()
3544 bna_tx_disable(struct bna_tx *tx, enum bna_cleanup_type type, in bna_tx_disable() argument
3548 (*cbfn)(tx->bna->bnad, tx); in bna_tx_disable()
3552 tx->stop_cbfn = cbfn; in bna_tx_disable()
3553 tx->stop_cbarg = tx->bna->bnad; in bna_tx_disable()
3555 tx->flags &= ~BNA_TX_F_ENABLED; in bna_tx_disable()
3557 bfa_fsm_send_event(tx, TX_E_STOP); in bna_tx_disable()
3561 bna_tx_cleanup_complete(struct bna_tx *tx) in bna_tx_cleanup_complete() argument
3563 bfa_fsm_send_event(tx, TX_E_CLEANUP_DONE); in bna_tx_cleanup_complete()
3567 bna_tx_mod_cb_tx_stopped(void *arg, struct bna_tx *tx) in bna_tx_mod_cb_tx_stopped() argument
3593 tx_mod->tx = (struct bna_tx *) in bna_tx_mod_init()
3604 tx_mod->tx[i].rid = i; in bna_tx_mod_init()
3605 list_add_tail(&tx_mod->tx[i].qe, &tx_mod->tx_free_q); in bna_tx_mod_init()
3624 struct bna_tx *tx; in bna_tx_mod_start() local
3630 list_for_each_entry(tx, &tx_mod->tx_active_q, qe) in bna_tx_mod_start()
3631 if (tx->type == type) in bna_tx_mod_start()
3632 bna_tx_start(tx); in bna_tx_mod_start()
3638 struct bna_tx *tx; in bna_tx_mod_stop() local
3647 list_for_each_entry(tx, &tx_mod->tx_active_q, qe) in bna_tx_mod_stop()
3648 if (tx->type == type) { in bna_tx_mod_stop()
3650 bna_tx_stop(tx); in bna_tx_mod_stop()
3659 struct bna_tx *tx; in bna_tx_mod_fail() local
3664 list_for_each_entry(tx, &tx_mod->tx_active_q, qe) in bna_tx_mod_fail()
3665 bna_tx_fail(tx); in bna_tx_mod_fail()
3669 bna_tx_coalescing_timeo_set(struct bna_tx *tx, int coalescing_timeo) in bna_tx_coalescing_timeo_set() argument
3673 list_for_each_entry(txq, &tx->txq_q, qe) in bna_tx_coalescing_timeo_set()