Lines Matching refs:mbx
494 static inline void qlcnic_83xx_notify_mbx_response(struct qlcnic_mailbox *mbx) in qlcnic_83xx_notify_mbx_response() argument
496 mbx->rsp_status = QLC_83XX_MBX_RESPONSE_ARRIVED; in qlcnic_83xx_notify_mbx_response()
497 complete(&mbx->completion); in qlcnic_83xx_notify_mbx_response()
503 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_poll_process_aen() local
506 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
515 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_poll_process_aen()
516 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_poll_process_aen()
520 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
852 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_issue_cmd() local
857 if (!mbx) in qlcnic_83xx_issue_cmd()
862 err = mbx->ops->enqueue_cmd(adapter, cmd, &timeout); in qlcnic_83xx_issue_cmd()
878 flush_workqueue(mbx->work_q); in qlcnic_83xx_issue_cmd()
897 int qlcnic_83xx_alloc_mbx_args(struct qlcnic_cmd_args *mbx, in qlcnic_83xx_alloc_mbx_args() argument
904 memset(mbx, 0, sizeof(struct qlcnic_cmd_args)); in qlcnic_83xx_alloc_mbx_args()
909 mbx->op_type = QLC_83XX_FW_MBX_CMD; in qlcnic_83xx_alloc_mbx_args()
910 mbx->req.num = mbx_tbl[i].in_args; in qlcnic_83xx_alloc_mbx_args()
911 mbx->rsp.num = mbx_tbl[i].out_args; in qlcnic_83xx_alloc_mbx_args()
912 mbx->req.arg = kcalloc(mbx->req.num, sizeof(u32), in qlcnic_83xx_alloc_mbx_args()
914 if (!mbx->req.arg) in qlcnic_83xx_alloc_mbx_args()
916 mbx->rsp.arg = kcalloc(mbx->rsp.num, sizeof(u32), in qlcnic_83xx_alloc_mbx_args()
918 if (!mbx->rsp.arg) { in qlcnic_83xx_alloc_mbx_args()
919 kfree(mbx->req.arg); in qlcnic_83xx_alloc_mbx_args()
920 mbx->req.arg = NULL; in qlcnic_83xx_alloc_mbx_args()
924 mbx->req.arg[0] = (type | (mbx->req.num << 16) | temp); in qlcnic_83xx_alloc_mbx_args()
925 mbx->cmd_op = type; in qlcnic_83xx_alloc_mbx_args()
1018 struct qlcnic_mailbox *mbx = ahw->mailbox; in qlcnic_83xx_process_aen() local
1021 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_process_aen()
1028 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_process_aen()
1029 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_process_aen()
1032 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_process_aen()
1320 struct qlcnic_tx_mbx mbx; in qlcnic_83xx_create_tx_ctx() local
1330 memset(&mbx, 0, sizeof(struct qlcnic_tx_mbx)); in qlcnic_83xx_create_tx_ctx()
1333 mbx.phys_addr_low = LSD(tx->phys_addr); in qlcnic_83xx_create_tx_ctx()
1334 mbx.phys_addr_high = MSD(tx->phys_addr); in qlcnic_83xx_create_tx_ctx()
1335 mbx.cnsmr_index_low = LSD(tx->hw_cons_phys_addr); in qlcnic_83xx_create_tx_ctx()
1336 mbx.cnsmr_index_high = MSD(tx->hw_cons_phys_addr); in qlcnic_83xx_create_tx_ctx()
1337 mbx.size = tx->num_desc; in qlcnic_83xx_create_tx_ctx()
1349 mbx.intr_id = msix_id; in qlcnic_83xx_create_tx_ctx()
1351 mbx.intr_id = 0xffff; in qlcnic_83xx_create_tx_ctx()
1352 mbx.src = 0; in qlcnic_83xx_create_tx_ctx()
1368 memcpy(buf, &mbx, sizeof(struct qlcnic_tx_mbx)); in qlcnic_83xx_create_tx_ctx()
2345 struct qlcnic_mailbox *mbx; in qlcnic_83xx_handle_aen() local
2348 mbx = adapter->ahw->mailbox; in qlcnic_83xx_handle_aen()
2349 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_handle_aen()
2358 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_handle_aen()
2359 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_handle_aen()
2367 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_handle_aen()
3860 void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx) in qlcnic_83xx_reinit_mbx_work() argument
3862 reinit_completion(&mbx->completion); in qlcnic_83xx_reinit_mbx_work()
3863 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_reinit_mbx_work()
3866 void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx) in qlcnic_83xx_free_mailbox() argument
3868 if (!mbx) in qlcnic_83xx_free_mailbox()
3871 destroy_workqueue(mbx->work_q); in qlcnic_83xx_free_mailbox()
3872 kfree(mbx); in qlcnic_83xx_free_mailbox()
3891 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_flush_mbx_queue() local
3892 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_flush_mbx_queue()
3895 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3902 mbx->num_cmds--; in qlcnic_83xx_flush_mbx_queue()
3906 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3912 struct qlcnic_mailbox *mbx = ahw->mailbox; in qlcnic_83xx_check_mbx_status() local
3915 if (!test_bit(QLC_83XX_MBX_READY, &mbx->status)) in qlcnic_83xx_check_mbx_status()
3920 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_check_mbx_status()
3940 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_dequeue_mbx_cmd() local
3942 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3945 mbx->num_cmds--; in qlcnic_83xx_dequeue_mbx_cmd()
3947 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3989 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_detach_mailbox_work() local
3991 if (!mbx) in qlcnic_83xx_detach_mailbox_work()
3994 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_detach_mailbox_work()
3995 complete(&mbx->completion); in qlcnic_83xx_detach_mailbox_work()
3996 cancel_work_sync(&mbx->work); in qlcnic_83xx_detach_mailbox_work()
3997 flush_workqueue(mbx->work_q); in qlcnic_83xx_detach_mailbox_work()
4005 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_enqueue_mbx_cmd() local
4007 if (test_bit(QLC_83XX_MBX_READY, &mbx->status)) { in qlcnic_83xx_enqueue_mbx_cmd()
4012 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
4014 list_add_tail(&cmd->list, &mbx->cmd_q); in qlcnic_83xx_enqueue_mbx_cmd()
4015 mbx->num_cmds++; in qlcnic_83xx_enqueue_mbx_cmd()
4016 cmd->total_cmds = mbx->num_cmds; in qlcnic_83xx_enqueue_mbx_cmd()
4018 queue_work(mbx->work_q, &mbx->work); in qlcnic_83xx_enqueue_mbx_cmd()
4020 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
4094 struct qlcnic_mailbox *mbx = container_of(work, struct qlcnic_mailbox, in qlcnic_83xx_mailbox_worker() local
4096 struct qlcnic_adapter *adapter = mbx->adapter; in qlcnic_83xx_mailbox_worker()
4097 const struct qlcnic_mbx_ops *mbx_ops = mbx->ops; in qlcnic_83xx_mailbox_worker()
4099 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_mailbox_worker()
4112 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_mailbox_worker()
4113 mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT; in qlcnic_83xx_mailbox_worker()
4114 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_mailbox_worker()
4116 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4119 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4124 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4129 if (wait_for_completion_timeout(&mbx->completion, in qlcnic_83xx_mailbox_worker()
4137 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_mailbox_worker()
4160 struct qlcnic_mailbox *mbx; in qlcnic_83xx_init_mailbox_work() local
4162 ahw->mailbox = kzalloc(sizeof(*mbx), GFP_KERNEL); in qlcnic_83xx_init_mailbox_work()
4166 mbx = ahw->mailbox; in qlcnic_83xx_init_mailbox_work()
4167 mbx->ops = &qlcnic_83xx_mbx_ops; in qlcnic_83xx_init_mailbox_work()
4168 mbx->adapter = adapter; in qlcnic_83xx_init_mailbox_work()
4170 spin_lock_init(&mbx->queue_lock); in qlcnic_83xx_init_mailbox_work()
4171 spin_lock_init(&mbx->aen_lock); in qlcnic_83xx_init_mailbox_work()
4172 INIT_LIST_HEAD(&mbx->cmd_q); in qlcnic_83xx_init_mailbox_work()
4173 init_completion(&mbx->completion); in qlcnic_83xx_init_mailbox_work()
4175 mbx->work_q = create_singlethread_workqueue("qlcnic_mailbox"); in qlcnic_83xx_init_mailbox_work()
4176 if (mbx->work_q == NULL) { in qlcnic_83xx_init_mailbox_work()
4177 kfree(mbx); in qlcnic_83xx_init_mailbox_work()
4181 INIT_WORK(&mbx->work, qlcnic_83xx_mailbox_worker); in qlcnic_83xx_init_mailbox_work()
4182 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_init_mailbox_work()