Lines Matching refs:dev

25  * $FreeBSD: stable/11/sys/dev/mlx5/mlx5_core/mlx5_eq.c 363041 2020-07-09 11:06:29Z kib $
30 #include <dev/mlx5/port.h>
31 #include <dev/mlx5/mlx5_ifc.h>
32 #include <dev/mlx5/mlx5_fpga/core.h>
84 static void mlx5_port_module_event(struct mlx5_core_dev *dev,
86 static void mlx5_port_general_notification_event(struct mlx5_core_dev *dev,
89 static int mlx5_cmd_destroy_eq(struct mlx5_core_dev *dev, u8 eqn)
97 return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
220 mlx5_temp_warning_event(struct mlx5_core_dev *dev, struct mlx5_eqe *eqe)
223 mlx5_core_warn(dev,
229 static int mlx5_eq_int(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
245 mlx5_core_dbg(eq->dev, "eqn %d, eqe type %s\n",
250 mlx5_cq_completion(dev, cqn);
262 mlx5_core_dbg(dev, "event %s(%d) arrived on resource 0x%x\n",
264 mlx5_rsc_event(dev, rsn, eqe->type);
270 mlx5_core_dbg(dev, "SRQ event %s(%d): srqn 0x%x\n",
272 mlx5_srq_event(dev, rsn, eqe->type);
276 if (dev->state != MLX5_DEVICE_STATE_INTERNAL_ERROR) {
277 mlx5_cmd_comp_handler(dev, be32_to_cpu(eqe->data.cmd.vector),
292 if (dev->event)
293 dev->event(dev, port_subtype_event(eqe->sub_type),
297 mlx5_core_warn(dev, "Port event with unrecognized subtype: port %d, sub_type %d\n",
309 if (dev->event)
310 dev->event(dev,
315 mlx5_core_warn(dev,
322 mlx5_port_general_notification_event(dev, eqe);
327 mlx5_core_warn(dev, "CQ error on CQN 0x%x, syndrom 0x%x\n",
329 mlx5_cq_event(dev, cqn, eqe->type);
337 mlx5_core_dbg(dev, "page request for func 0x%x, npages %d\n",
339 mlx5_core_req_pages_handler(dev, func_id, npages);
344 mlx5_port_module_event(dev, eqe);
353 if (dev->event)
354 dev->event(dev,
358 if (dev->priv.eswitch != NULL)
359 mlx5_eswitch_vport_event(dev->priv.eswitch,
365 mlx5_fpga_event(dev, eqe->type, &eqe->data.raw);
368 mlx5_temp_warning_event(dev, eqe);
372 mlx5_core_warn(dev, "Unhandled event 0x%x on EQ 0x%x\n",
401 struct mlx5_core_dev *dev = eq->dev;
404 if (likely(dev->priv.disable_irqs == 0))
405 mlx5_eq_int(dev, eq);
422 int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx,
426 struct mlx5_priv *priv = &dev->priv;
435 err = mlx5_buf_alloc(dev, eq->nent * MLX5_EQE_SIZE, 2 * PAGE_SIZE,
463 err = mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
469 eq->dev = dev;
500 mlx5_cmd_destroy_eq(dev, eq->eqn);
506 mlx5_buf_free(dev, &eq->buf);
511 int mlx5_destroy_unmap_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq)
515 free_irq(dev->priv.msix_arr[eq->irqn].vector, eq);
516 err = mlx5_cmd_destroy_eq(dev, eq->eqn);
518 mlx5_core_warn(dev, "failed to destroy a previously created eq: eqn %d\n",
520 mlx5_buf_free(dev, &eq->buf);
526 int mlx5_eq_init(struct mlx5_core_dev *dev)
530 spin_lock_init(&dev->priv.eq_table.lock);
538 void mlx5_eq_cleanup(struct mlx5_core_dev *dev)
542 int mlx5_start_eqs(struct mlx5_core_dev *dev)
544 struct mlx5_eq_table *table = &dev->priv.eq_table;
548 if (MLX5_CAP_GEN(dev, port_module_event))
552 if (MLX5_CAP_GEN(dev, nic_vport_change_event))
556 if (MLX5_CAP_GEN(dev, dcbx))
560 if (MLX5_CAP_GEN(dev, fpga))
564 if (MLX5_CAP_GEN(dev, temp_warn_event))
567 if (MLX5_CAP_GEN(dev, general_notification_event)) {
572 err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
574 &dev->priv.uuari.uars[0]);
576 mlx5_core_warn(dev, "failed to create cmd EQ %d\n", err);
580 mlx5_cmd_use_events(dev);
582 err = mlx5_create_map_eq(dev, &table->async_eq, MLX5_EQ_VEC_ASYNC,
584 &dev->priv.uuari.uars[0]);
586 mlx5_core_warn(dev, "failed to create async EQ %d\n", err);
590 err = mlx5_create_map_eq(dev, &table->pages_eq,
594 &dev->priv.uuari.uars[0]);
596 mlx5_core_warn(dev, "failed to create pages EQ %d\n", err);
603 mlx5_destroy_unmap_eq(dev, &table->async_eq);
606 mlx5_cmd_use_polling(dev);
607 mlx5_destroy_unmap_eq(dev, &table->cmd_eq);
611 int mlx5_stop_eqs(struct mlx5_core_dev *dev)
613 struct mlx5_eq_table *table = &dev->priv.eq_table;
616 err = mlx5_destroy_unmap_eq(dev, &table->pages_eq);
620 mlx5_destroy_unmap_eq(dev, &table->async_eq);
621 mlx5_cmd_use_polling(dev);
623 err = mlx5_destroy_unmap_eq(dev, &table->cmd_eq);
625 mlx5_cmd_use_events(dev);
630 int mlx5_core_eq_query(struct mlx5_core_dev *dev, struct mlx5_eq *eq,
639 return mlx5_cmd_exec(dev, in, sizeof(in), out, outlen);
681 unsigned int mlx5_query_module_status(struct mlx5_core_dev *dev, int module_num)
685 return dev->module_status[module_num];
688 static void mlx5_port_module_event(struct mlx5_core_dev *dev,
705 dev->priv.pme_stats.status_counters[module_status]++;
708 mlx5_core_info(dev,
714 mlx5_core_info(dev,
719 mlx5_core_err(dev,
725 dev->priv.pme_stats.error_counters[error_type]++;
729 mlx5_core_info(dev,
734 dev->module_status[module_num] = module_status;
737 static void mlx5_port_general_notification_event(struct mlx5_core_dev *dev,
751 mlx5_trigger_health_watchdog(dev);
754 mlx5_core_warn(dev,
762 mlx5_disable_interrupts(struct mlx5_core_dev *dev)
764 int nvec = dev->priv.eq_table.num_comp_vectors + MLX5_EQ_VEC_COMP_BASE;
768 disable_irq(dev->priv.msix_arr[x].vector);
772 mlx5_poll_interrupts(struct mlx5_core_dev *dev)
776 if (unlikely(dev->priv.disable_irqs != 0))
779 mlx5_eq_int(dev, &dev->priv.eq_table.cmd_eq);
780 mlx5_eq_int(dev, &dev->priv.eq_table.async_eq);
781 mlx5_eq_int(dev, &dev->priv.eq_table.pages_eq);
783 list_for_each_entry(eq, &dev->priv.eq_table.comp_eqs_list, list)
784 mlx5_eq_int(dev, eq);