Lines Matching refs:mbx

490 static inline void qlcnic_83xx_notify_mbx_response(struct qlcnic_mailbox *mbx)  in qlcnic_83xx_notify_mbx_response()  argument
492 atomic_set(&mbx->rsp_status, QLC_83XX_MBX_RESPONSE_ARRIVED); in qlcnic_83xx_notify_mbx_response()
493 complete(&mbx->completion); in qlcnic_83xx_notify_mbx_response()
499 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_poll_process_aen() local
502 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
511 if (atomic_read(&mbx->rsp_status) != rsp_status) in qlcnic_83xx_poll_process_aen()
512 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_poll_process_aen()
516 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
848 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_issue_cmd() local
853 if (!mbx) in qlcnic_83xx_issue_cmd()
858 err = mbx->ops->enqueue_cmd(adapter, cmd, &timeout); in qlcnic_83xx_issue_cmd()
874 flush_workqueue(mbx->work_q); in qlcnic_83xx_issue_cmd()
893 int qlcnic_83xx_alloc_mbx_args(struct qlcnic_cmd_args *mbx, in qlcnic_83xx_alloc_mbx_args() argument
900 memset(mbx, 0, sizeof(struct qlcnic_cmd_args)); in qlcnic_83xx_alloc_mbx_args()
905 mbx->op_type = QLC_83XX_FW_MBX_CMD; in qlcnic_83xx_alloc_mbx_args()
906 mbx->req.num = mbx_tbl[i].in_args; in qlcnic_83xx_alloc_mbx_args()
907 mbx->rsp.num = mbx_tbl[i].out_args; in qlcnic_83xx_alloc_mbx_args()
908 mbx->req.arg = kcalloc(mbx->req.num, sizeof(u32), in qlcnic_83xx_alloc_mbx_args()
910 if (!mbx->req.arg) in qlcnic_83xx_alloc_mbx_args()
912 mbx->rsp.arg = kcalloc(mbx->rsp.num, sizeof(u32), in qlcnic_83xx_alloc_mbx_args()
914 if (!mbx->rsp.arg) { in qlcnic_83xx_alloc_mbx_args()
915 kfree(mbx->req.arg); in qlcnic_83xx_alloc_mbx_args()
916 mbx->req.arg = NULL; in qlcnic_83xx_alloc_mbx_args()
919 memset(mbx->req.arg, 0, sizeof(u32) * mbx->req.num); in qlcnic_83xx_alloc_mbx_args()
920 memset(mbx->rsp.arg, 0, sizeof(u32) * mbx->rsp.num); 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 (atomic_read(&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()
2342 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 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_handle_aen()
2361 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_handle_aen()
3789 void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx) in qlcnic_83xx_reinit_mbx_work() argument
3791 reinit_completion(&mbx->completion); in qlcnic_83xx_reinit_mbx_work()
3792 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_reinit_mbx_work()
3795 void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx) in qlcnic_83xx_free_mailbox() argument
3797 if (!mbx) in qlcnic_83xx_free_mailbox()
3800 destroy_workqueue(mbx->work_q); in qlcnic_83xx_free_mailbox()
3801 kfree(mbx); in qlcnic_83xx_free_mailbox()
3820 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_flush_mbx_queue() local
3821 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_flush_mbx_queue()
3824 spin_lock(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3831 mbx->num_cmds--; in qlcnic_83xx_flush_mbx_queue()
3835 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3841 struct qlcnic_mailbox *mbx = ahw->mailbox; in qlcnic_83xx_check_mbx_status() local
3844 if (!test_bit(QLC_83XX_MBX_READY, &mbx->status)) in qlcnic_83xx_check_mbx_status()
3849 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_check_mbx_status()
3869 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_dequeue_mbx_cmd() local
3871 spin_lock(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3874 mbx->num_cmds--; in qlcnic_83xx_dequeue_mbx_cmd()
3876 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3918 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_detach_mailbox_work() local
3920 if (!mbx) in qlcnic_83xx_detach_mailbox_work()
3923 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_detach_mailbox_work()
3924 complete(&mbx->completion); in qlcnic_83xx_detach_mailbox_work()
3925 cancel_work_sync(&mbx->work); in qlcnic_83xx_detach_mailbox_work()
3926 flush_workqueue(mbx->work_q); in qlcnic_83xx_detach_mailbox_work()
3934 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_enqueue_mbx_cmd() local
3936 if (test_bit(QLC_83XX_MBX_READY, &mbx->status)) { in qlcnic_83xx_enqueue_mbx_cmd()
3941 spin_lock(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
3943 list_add_tail(&cmd->list, &mbx->cmd_q); in qlcnic_83xx_enqueue_mbx_cmd()
3944 mbx->num_cmds++; in qlcnic_83xx_enqueue_mbx_cmd()
3945 cmd->total_cmds = mbx->num_cmds; in qlcnic_83xx_enqueue_mbx_cmd()
3947 queue_work(mbx->work_q, &mbx->work); in qlcnic_83xx_enqueue_mbx_cmd()
3949 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
4023 struct qlcnic_mailbox *mbx = container_of(work, struct qlcnic_mailbox, in qlcnic_83xx_mailbox_worker() local
4025 struct qlcnic_adapter *adapter = mbx->adapter; in qlcnic_83xx_mailbox_worker()
4026 struct qlcnic_mbx_ops *mbx_ops = mbx->ops; in qlcnic_83xx_mailbox_worker()
4028 atomic_t *rsp_status = &mbx->rsp_status; in qlcnic_83xx_mailbox_worker()
4029 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_mailbox_worker()
4043 spin_lock(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4046 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4051 spin_unlock(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4056 if (wait_for_completion_timeout(&mbx->completion, in qlcnic_83xx_mailbox_worker()
4064 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_mailbox_worker()
4087 struct qlcnic_mailbox *mbx; in qlcnic_83xx_init_mailbox_work() local
4089 ahw->mailbox = kzalloc(sizeof(*mbx), GFP_KERNEL); in qlcnic_83xx_init_mailbox_work()
4093 mbx = ahw->mailbox; in qlcnic_83xx_init_mailbox_work()
4094 mbx->ops = &qlcnic_83xx_mbx_ops; in qlcnic_83xx_init_mailbox_work()
4095 mbx->adapter = adapter; in qlcnic_83xx_init_mailbox_work()
4097 spin_lock_init(&mbx->queue_lock); in qlcnic_83xx_init_mailbox_work()
4098 spin_lock_init(&mbx->aen_lock); in qlcnic_83xx_init_mailbox_work()
4099 INIT_LIST_HEAD(&mbx->cmd_q); in qlcnic_83xx_init_mailbox_work()
4100 init_completion(&mbx->completion); in qlcnic_83xx_init_mailbox_work()
4102 mbx->work_q = create_singlethread_workqueue("qlcnic_mailbox"); in qlcnic_83xx_init_mailbox_work()
4103 if (mbx->work_q == NULL) { in qlcnic_83xx_init_mailbox_work()
4104 kfree(mbx); in qlcnic_83xx_init_mailbox_work()
4108 INIT_WORK(&mbx->work, qlcnic_83xx_mailbox_worker); in qlcnic_83xx_init_mailbox_work()
4109 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_init_mailbox_work()