Lines Matching full:mbx

127 	0x3038,		/* Host MBX ctrl */
128 0x303C, /* FW MBX ctrl */
132 0x1000, /* MBX intr enable */
493 static inline void qlcnic_83xx_notify_mbx_response(struct qlcnic_mailbox *mbx) in qlcnic_83xx_notify_mbx_response() argument
495 mbx->rsp_status = QLC_83XX_MBX_RESPONSE_ARRIVED; in qlcnic_83xx_notify_mbx_response()
496 complete(&mbx->completion); in qlcnic_83xx_notify_mbx_response()
502 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_poll_process_aen() local
505 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
514 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_poll_process_aen()
515 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_poll_process_aen()
519 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_poll_process_aen()
607 "failed to register MBX interrupt\n"); in qlcnic_83xx_setup_mbx_intr()
806 "Host MBX regs(%d)\n", cmd->req.num); in qlcnic_dump_mbx()
814 "FW MBX regs(%d)\n", cmd->rsp.num); in qlcnic_dump_mbx()
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()
1083 "Failed to alloc mbx args %d\n", err); in qlcnic_83xx_add_rings()
1089 /* set up status rings, mbx 2-81 */ in qlcnic_83xx_add_rings()
1212 /* set up status rings, mbx 8-57/87 */ in qlcnic_83xx_create_rx_ctx()
1235 /* set up receive rings, mbx 88-111/135 */ in qlcnic_83xx_create_rx_ctx()
1324 struct qlcnic_tx_mbx mbx; in qlcnic_83xx_create_tx_ctx() local
1334 memset(&mbx, 0, sizeof(struct qlcnic_tx_mbx)); in qlcnic_83xx_create_tx_ctx()
1337 mbx.phys_addr_low = LSD(tx->phys_addr); in qlcnic_83xx_create_tx_ctx()
1338 mbx.phys_addr_high = MSD(tx->phys_addr); in qlcnic_83xx_create_tx_ctx()
1339 mbx.cnsmr_index_low = LSD(tx->hw_cons_phys_addr); in qlcnic_83xx_create_tx_ctx()
1340 mbx.cnsmr_index_high = MSD(tx->hw_cons_phys_addr); in qlcnic_83xx_create_tx_ctx()
1341 mbx.size = tx->num_desc; in qlcnic_83xx_create_tx_ctx()
1353 mbx.intr_id = msix_id; in qlcnic_83xx_create_tx_ctx()
1355 mbx.intr_id = 0xffff; in qlcnic_83xx_create_tx_ctx()
1356 mbx.src = 0; in qlcnic_83xx_create_tx_ctx()
1372 memcpy(buf, &mbx, sizeof(struct qlcnic_tx_mbx)); in qlcnic_83xx_create_tx_ctx()
2351 struct qlcnic_mailbox *mbx; in qlcnic_83xx_handle_aen() local
2354 mbx = adapter->ahw->mailbox; in qlcnic_83xx_handle_aen()
2355 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_handle_aen()
2364 if (mbx->rsp_status != rsp_status) in qlcnic_83xx_handle_aen()
2365 qlcnic_83xx_notify_mbx_response(mbx); in qlcnic_83xx_handle_aen()
2373 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_handle_aen()
3865 void qlcnic_83xx_reinit_mbx_work(struct qlcnic_mailbox *mbx) in qlcnic_83xx_reinit_mbx_work() argument
3867 reinit_completion(&mbx->completion); in qlcnic_83xx_reinit_mbx_work()
3868 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_reinit_mbx_work()
3871 void qlcnic_83xx_free_mailbox(struct qlcnic_mailbox *mbx) in qlcnic_83xx_free_mailbox() argument
3873 if (!mbx) in qlcnic_83xx_free_mailbox()
3876 destroy_workqueue(mbx->work_q); in qlcnic_83xx_free_mailbox()
3877 kfree(mbx); in qlcnic_83xx_free_mailbox()
3896 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_flush_mbx_queue() local
3897 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_flush_mbx_queue()
3900 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3907 mbx->num_cmds--; in qlcnic_83xx_flush_mbx_queue()
3911 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_flush_mbx_queue()
3917 struct qlcnic_mailbox *mbx = ahw->mailbox; in qlcnic_83xx_check_mbx_status() local
3920 if (!test_bit(QLC_83XX_MBX_READY, &mbx->status)) in qlcnic_83xx_check_mbx_status()
3925 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_check_mbx_status()
3945 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_dequeue_mbx_cmd() local
3947 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3950 mbx->num_cmds--; in qlcnic_83xx_dequeue_mbx_cmd()
3952 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_dequeue_mbx_cmd()
3994 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_detach_mailbox_work() local
3996 if (!mbx) in qlcnic_83xx_detach_mailbox_work()
3999 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_detach_mailbox_work()
4000 complete(&mbx->completion); in qlcnic_83xx_detach_mailbox_work()
4001 cancel_work_sync(&mbx->work); in qlcnic_83xx_detach_mailbox_work()
4002 flush_workqueue(mbx->work_q); in qlcnic_83xx_detach_mailbox_work()
4010 struct qlcnic_mailbox *mbx = adapter->ahw->mailbox; in qlcnic_83xx_enqueue_mbx_cmd() local
4012 if (test_bit(QLC_83XX_MBX_READY, &mbx->status)) { in qlcnic_83xx_enqueue_mbx_cmd()
4017 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
4019 list_add_tail(&cmd->list, &mbx->cmd_q); in qlcnic_83xx_enqueue_mbx_cmd()
4020 mbx->num_cmds++; in qlcnic_83xx_enqueue_mbx_cmd()
4021 cmd->total_cmds = mbx->num_cmds; in qlcnic_83xx_enqueue_mbx_cmd()
4023 queue_work(mbx->work_q, &mbx->work); in qlcnic_83xx_enqueue_mbx_cmd()
4025 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_enqueue_mbx_cmd()
4090 …dev_info(&adapter->pdev->dev, "Mbx interrupt mask=0x%x, Mbx interrupt enable=0x%x, Host mbx contro… in qlcnic_dump_mailbox_registers()
4099 struct qlcnic_mailbox *mbx = container_of(work, struct qlcnic_mailbox, in qlcnic_83xx_mailbox_worker() local
4101 struct qlcnic_adapter *adapter = mbx->adapter; in qlcnic_83xx_mailbox_worker()
4102 const struct qlcnic_mbx_ops *mbx_ops = mbx->ops; in qlcnic_83xx_mailbox_worker()
4104 struct list_head *head = &mbx->cmd_q; in qlcnic_83xx_mailbox_worker()
4117 spin_lock_irqsave(&mbx->aen_lock, flags); in qlcnic_83xx_mailbox_worker()
4118 mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT; in qlcnic_83xx_mailbox_worker()
4119 spin_unlock_irqrestore(&mbx->aen_lock, flags); in qlcnic_83xx_mailbox_worker()
4121 spin_lock_bh(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4124 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4129 spin_unlock_bh(&mbx->queue_lock); in qlcnic_83xx_mailbox_worker()
4134 if (wait_for_completion_timeout(&mbx->completion, in qlcnic_83xx_mailbox_worker()
4142 clear_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_mailbox_worker()
4165 struct qlcnic_mailbox *mbx; in qlcnic_83xx_init_mailbox_work() local
4167 ahw->mailbox = kzalloc(sizeof(*mbx), GFP_KERNEL); in qlcnic_83xx_init_mailbox_work()
4171 mbx = ahw->mailbox; in qlcnic_83xx_init_mailbox_work()
4172 mbx->ops = &qlcnic_83xx_mbx_ops; in qlcnic_83xx_init_mailbox_work()
4173 mbx->adapter = adapter; in qlcnic_83xx_init_mailbox_work()
4175 spin_lock_init(&mbx->queue_lock); in qlcnic_83xx_init_mailbox_work()
4176 spin_lock_init(&mbx->aen_lock); in qlcnic_83xx_init_mailbox_work()
4177 INIT_LIST_HEAD(&mbx->cmd_q); in qlcnic_83xx_init_mailbox_work()
4178 init_completion(&mbx->completion); in qlcnic_83xx_init_mailbox_work()
4180 mbx->work_q = create_singlethread_workqueue("qlcnic_mailbox"); in qlcnic_83xx_init_mailbox_work()
4181 if (mbx->work_q == NULL) { in qlcnic_83xx_init_mailbox_work()
4182 kfree(mbx); in qlcnic_83xx_init_mailbox_work()
4186 INIT_WORK(&mbx->work, qlcnic_83xx_mailbox_worker); in qlcnic_83xx_init_mailbox_work()
4187 set_bit(QLC_83XX_MBX_READY, &mbx->status); in qlcnic_83xx_init_mailbox_work()