Lines Matching refs:mbx
492 static inline void qlcnic_83xx_notify_mbx_response(struct qlcnic_mailbox *mbx) in qlcnic_83xx_notify_mbx_response() argument
494 mbx->rsp_status = QLC_83XX_MBX_RESPONSE_ARRIVED; in qlcnic_83xx_notify_mbx_response()
495 complete(&mbx->completion); in qlcnic_83xx_notify_mbx_response()
501 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_poll_process_aen() local
504 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
513 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_poll_process_aen()
514 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_poll_process_aen()
518 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
850 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_issue_cmd() local
855 if (!mbx) in qlcnic_83xx_issue_cmd()
860 err = mbx->ops->enqueue_cmd(adapter, cmd, &timeout); in qlcnic_83xx_issue_cmd()
876 flush_workqueue(mbx->work_q); in qlcnic_83xx_issue_cmd()
895 int qlcnic_83xx_alloc_mbx_args(struct qlcnic_cmd_args *mbx, in qlcnic_83xx_alloc_mbx_args() argument
902 memset(mbx, 0, sizeof(struct qlcnic_cmd_args)); in qlcnic_83xx_alloc_mbx_args()
907 mbx->op_type = QLC_83XX_FW_MBX_CMD; in qlcnic_83xx_alloc_mbx_args()
908 mbx->req.num = mbx_tbl[i].in_args; in qlcnic_83xx_alloc_mbx_args()
909 mbx->rsp.num = mbx_tbl[i].out_args; in qlcnic_83xx_alloc_mbx_args()
910 mbx->req.arg = kcalloc(mbx->req.num, sizeof(u32), in qlcnic_83xx_alloc_mbx_args()
912 if (!mbx->req.arg) in qlcnic_83xx_alloc_mbx_args()
914 mbx->rsp.arg = kcalloc(mbx->rsp.num, sizeof(u32), in qlcnic_83xx_alloc_mbx_args()
916 if (!mbx->rsp.arg) { in qlcnic_83xx_alloc_mbx_args()
917 kfree(mbx->req.arg); in qlcnic_83xx_alloc_mbx_args()
918 mbx->req.arg = NULL; in qlcnic_83xx_alloc_mbx_args()
922 mbx->req.arg[0] = (type | (mbx->req.num << 16) | temp); in qlcnic_83xx_alloc_mbx_args()
923 mbx->cmd_op = type; in qlcnic_83xx_alloc_mbx_args()
1016 struct qlcnic_mailbox *mbx = ahw->mailbox; in qlcnic_83xx_process_aen() local
1019 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_process_aen()
1026 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_process_aen()
1027 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_process_aen()
1030 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_process_aen()
1318 struct qlcnic_tx_mbx mbx; in qlcnic_83xx_create_tx_ctx() local
1328 memset(&mbx, 0, sizeof(struct qlcnic_tx_mbx)); in qlcnic_83xx_create_tx_ctx()
1331 mbx.phys_addr_low = LSD(tx->phys_addr); in qlcnic_83xx_create_tx_ctx()
1332 mbx.phys_addr_high = MSD(tx->phys_addr); in qlcnic_83xx_create_tx_ctx()
1333 mbx.cnsmr_index_low = LSD(tx->hw_cons_phys_addr); in qlcnic_83xx_create_tx_ctx()
1334 mbx.cnsmr_index_high = MSD(tx->hw_cons_phys_addr); in qlcnic_83xx_create_tx_ctx()
1335 mbx.size = tx->num_desc; in qlcnic_83xx_create_tx_ctx()
1347 mbx.intr_id = msix_id; in qlcnic_83xx_create_tx_ctx()
1349 mbx.intr_id = 0xffff; in qlcnic_83xx_create_tx_ctx()
1350 mbx.src = 0; in qlcnic_83xx_create_tx_ctx()
1366 memcpy(buf, &mbx, sizeof(struct qlcnic_tx_mbx)); in qlcnic_83xx_create_tx_ctx()
2343 struct qlcnic_mailbox *mbx; in qlcnic_83xx_handle_aen() local
2346 mbx = adapter->ahw->mailbox; in qlcnic_83xx_handle_aen()
2347 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_handle_aen()
2356 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_handle_aen()
2357 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_handle_aen()
2365 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_handle_aen()
3818 void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx) in qlcnic_83xx_reinit_mbx_work() argument
3820 reinit_completion(&mbx->completion); in qlcnic_83xx_reinit_mbx_work()
3821 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_reinit_mbx_work()
3824 void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx) in qlcnic_83xx_free_mailbox() argument
3826 if (!mbx) in qlcnic_83xx_free_mailbox()
3829 destroy_workqueue(mbx->work_q); in qlcnic_83xx_free_mailbox()
3830 kfree(mbx); in qlcnic_83xx_free_mailbox()
3849 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_flush_mbx_queue() local
3850 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_flush_mbx_queue()
3853 spin_lock(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3860 mbx->num_cmds--; in qlcnic_83xx_flush_mbx_queue()
3864 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3870 struct qlcnic_mailbox *mbx = ahw->mailbox; in qlcnic_83xx_check_mbx_status() local
3873 if (!test_bit(QLC_83XX_MBX_READY, &mbx->status)) in qlcnic_83xx_check_mbx_status()
3878 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_check_mbx_status()
3898 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_dequeue_mbx_cmd() local
3900 spin_lock(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3903 mbx->num_cmds--; in qlcnic_83xx_dequeue_mbx_cmd()
3905 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3947 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_detach_mailbox_work() local
3949 if (!mbx) in qlcnic_83xx_detach_mailbox_work()
3952 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_detach_mailbox_work()
3953 complete(&mbx->completion); in qlcnic_83xx_detach_mailbox_work()
3954 cancel_work_sync(&mbx->work); in qlcnic_83xx_detach_mailbox_work()
3955 flush_workqueue(mbx->work_q); in qlcnic_83xx_detach_mailbox_work()
3963 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_enqueue_mbx_cmd() local
3965 if (test_bit(QLC_83XX_MBX_READY, &mbx->status)) { in qlcnic_83xx_enqueue_mbx_cmd()
3970 spin_lock(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
3972 list_add_tail(&cmd->list, &mbx->cmd_q); in qlcnic_83xx_enqueue_mbx_cmd()
3973 mbx->num_cmds++; in qlcnic_83xx_enqueue_mbx_cmd()
3974 cmd->total_cmds = mbx->num_cmds; in qlcnic_83xx_enqueue_mbx_cmd()
3976 queue_work(mbx->work_q, &mbx->work); in qlcnic_83xx_enqueue_mbx_cmd()
3978 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
4052 struct qlcnic_mailbox *mbx = container_of(work, struct qlcnic_mailbox, in qlcnic_83xx_mailbox_worker() local
4054 struct qlcnic_adapter *adapter = mbx->adapter; in qlcnic_83xx_mailbox_worker()
4055 const struct qlcnic_mbx_ops *mbx_ops = mbx->ops; in qlcnic_83xx_mailbox_worker()
4057 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_mailbox_worker()
4070 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_mailbox_worker()
4071 mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT; in qlcnic_83xx_mailbox_worker()
4072 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_mailbox_worker()
4074 spin_lock(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4077 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4082 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4087 if (wait_for_completion_timeout(&mbx->completion, in qlcnic_83xx_mailbox_worker()
4095 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_mailbox_worker()
4118 struct qlcnic_mailbox *mbx; in qlcnic_83xx_init_mailbox_work() local
4120 ahw->mailbox = kzalloc(sizeof(*mbx), GFP_KERNEL); in qlcnic_83xx_init_mailbox_work()
4124 mbx = ahw->mailbox; in qlcnic_83xx_init_mailbox_work()
4125 mbx->ops = &qlcnic_83xx_mbx_ops; in qlcnic_83xx_init_mailbox_work()
4126 mbx->adapter = adapter; in qlcnic_83xx_init_mailbox_work()
4128 spin_lock_init(&mbx->queue_lock); in qlcnic_83xx_init_mailbox_work()
4129 spin_lock_init(&mbx->aen_lock); in qlcnic_83xx_init_mailbox_work()
4130 INIT_LIST_HEAD(&mbx->cmd_q); in qlcnic_83xx_init_mailbox_work()
4131 init_completion(&mbx->completion); in qlcnic_83xx_init_mailbox_work()
4133 mbx->work_q = create_singlethread_workqueue("qlcnic_mailbox"); in qlcnic_83xx_init_mailbox_work()
4134 if (mbx->work_q == NULL) { in qlcnic_83xx_init_mailbox_work()
4135 kfree(mbx); in qlcnic_83xx_init_mailbox_work()
4139 INIT_WORK(&mbx->work, qlcnic_83xx_mailbox_worker); in qlcnic_83xx_init_mailbox_work()
4140 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_init_mailbox_work()