Lines Matching refs:hwdev
70 static int get_capability(struct hinic_hwdev *hwdev, in get_capability() argument
73 struct hinic_cap *nic_cap = &hwdev->nic_cap; in get_capability()
76 if (!HINIC_IS_PF(hwdev->hwif) && !HINIC_IS_PPF(hwdev->hwif)) in get_capability()
82 num_aeqs = HINIC_HWIF_NUM_AEQS(hwdev->hwif); in get_capability()
83 num_ceqs = HINIC_HWIF_NUM_CEQS(hwdev->hwif); in get_capability()
84 num_irqs = HINIC_HWIF_NUM_IRQS(hwdev->hwif); in get_capability()
110 struct hinic_hwdev *hwdev = &pfhwdev->hwdev; in get_cap_from_fw() local
111 struct hinic_hwif *hwif = hwdev->hwif; in get_cap_from_fw()
128 return get_capability(hwdev, &dev_cap); in get_cap_from_fw()
137 static int get_dev_cap(struct hinic_hwdev *hwdev) in get_dev_cap() argument
139 struct hinic_hwif *hwif = hwdev->hwif; in get_dev_cap()
147 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in get_dev_cap()
170 static int init_msix(struct hinic_hwdev *hwdev) in init_msix() argument
172 struct hinic_hwif *hwif = hwdev->hwif; in init_msix()
184 msix_entries_size = nr_irqs * sizeof(*hwdev->msix_entries); in init_msix()
185 hwdev->msix_entries = devm_kzalloc(&pdev->dev, msix_entries_size, in init_msix()
187 if (!hwdev->msix_entries) in init_msix()
191 hwdev->msix_entries[i].entry = i; in init_msix()
193 err = pci_enable_msix_exact(pdev, hwdev->msix_entries, nr_irqs); in init_msix()
206 static void disable_msix(struct hinic_hwdev *hwdev) in disable_msix() argument
208 struct hinic_hwif *hwif = hwdev->hwif; in disable_msix()
225 int hinic_port_msg_cmd(struct hinic_hwdev *hwdev, enum hinic_port_cmd cmd, in hinic_port_msg_cmd() argument
228 struct hinic_hwif *hwif = hwdev->hwif; in hinic_port_msg_cmd()
237 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in hinic_port_msg_cmd()
250 static int init_fw_ctxt(struct hinic_hwdev *hwdev) in init_fw_ctxt() argument
252 struct hinic_hwif *hwif = hwdev->hwif; in init_fw_ctxt()
266 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_FWCTXT_INIT, in init_fw_ctxt()
286 static int set_hw_ioctxt(struct hinic_hwdev *hwdev, unsigned int rq_depth, in set_hw_ioctxt() argument
289 struct hinic_hwif *hwif = hwdev->hwif; in set_hw_ioctxt()
312 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in set_hw_ioctxt()
320 static int wait_for_outbound_state(struct hinic_hwdev *hwdev) in wait_for_outbound_state() argument
323 struct hinic_hwif *hwif = hwdev->hwif; in wait_for_outbound_state()
341 static int wait_for_db_state(struct hinic_hwdev *hwdev) in wait_for_db_state() argument
343 struct hinic_hwif *hwif = hwdev->hwif; in wait_for_db_state()
362 static int wait_for_io_stopped(struct hinic_hwdev *hwdev) in wait_for_io_stopped() argument
365 struct hinic_hwif *hwif = hwdev->hwif; in wait_for_io_stopped()
377 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in wait_for_io_stopped()
412 static int clear_io_resources(struct hinic_hwdev *hwdev) in clear_io_resources() argument
415 struct hinic_hwif *hwif = hwdev->hwif; in clear_io_resources()
425 err = wait_for_io_stopped(hwdev); in clear_io_resources()
433 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in clear_io_resources()
454 static int set_resources_state(struct hinic_hwdev *hwdev, in set_resources_state() argument
458 struct hinic_hwif *hwif = hwdev->hwif; in set_resources_state()
470 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in set_resources_state()
486 static int get_base_qpn(struct hinic_hwdev *hwdev, u16 *base_qpn) in get_base_qpn() argument
489 struct hinic_hwif *hwif = hwdev->hwif; in get_base_qpn()
496 err = hinic_port_msg_cmd(hwdev, HINIC_PORT_CMD_GET_GLOBAL_QPN, in get_base_qpn()
515 int hinic_hwdev_ifup(struct hinic_hwdev *hwdev) in hinic_hwdev_ifup() argument
517 struct hinic_func_to_io *func_to_io = &hwdev->func_to_io; in hinic_hwdev_ifup()
518 struct hinic_cap *nic_cap = &hwdev->nic_cap; in hinic_hwdev_ifup()
519 struct hinic_hwif *hwif = hwdev->hwif; in hinic_hwdev_ifup()
527 err = get_base_qpn(hwdev, &base_qpn); in hinic_hwdev_ifup()
536 ceq_msix_entries = &hwdev->msix_entries[num_aeqs]; in hinic_hwdev_ifup()
546 sq_msix_entries = &hwdev->msix_entries[num_aeqs + num_ceqs]; in hinic_hwdev_ifup()
547 rq_msix_entries = &hwdev->msix_entries[num_aeqs + num_ceqs + num_qps]; in hinic_hwdev_ifup()
556 err = wait_for_db_state(hwdev); in hinic_hwdev_ifup()
562 err = set_hw_ioctxt(hwdev, HINIC_SQ_DEPTH, HINIC_RQ_DEPTH); in hinic_hwdev_ifup()
583 void hinic_hwdev_ifdown(struct hinic_hwdev *hwdev) in hinic_hwdev_ifdown() argument
585 struct hinic_func_to_io *func_to_io = &hwdev->func_to_io; in hinic_hwdev_ifdown()
586 struct hinic_cap *nic_cap = &hwdev->nic_cap; in hinic_hwdev_ifdown()
588 clear_io_resources(hwdev); in hinic_hwdev_ifdown()
601 void hinic_hwdev_cb_register(struct hinic_hwdev *hwdev, in hinic_hwdev_cb_register() argument
607 struct hinic_hwif *hwif = hwdev->hwif; in hinic_hwdev_cb_register()
618 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in hinic_hwdev_cb_register()
633 void hinic_hwdev_cb_unregister(struct hinic_hwdev *hwdev, in hinic_hwdev_cb_unregister() argument
636 struct hinic_hwif *hwif = hwdev->hwif; in hinic_hwdev_cb_unregister()
647 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in hinic_hwdev_cb_unregister()
674 struct hinic_hwdev *hwdev; in nic_mgmt_msg_handler() local
679 hwdev = &pfhwdev->hwdev; in nic_mgmt_msg_handler()
680 hwif = hwdev->hwif; in nic_mgmt_msg_handler()
714 struct hinic_hwdev *hwdev = &pfhwdev->hwdev; in init_pfhwdev() local
715 struct hinic_hwif *hwif = hwdev->hwif; in init_pfhwdev()
738 struct hinic_hwdev *hwdev = &pfhwdev->hwdev; in free_pfhwdev() local
740 hinic_set_pf_action(hwdev->hwif, HINIC_PF_MGMT_INIT); in free_pfhwdev()
758 struct hinic_hwdev *hwdev; in hinic_init_hwdev() local
784 hwdev = &pfhwdev->hwdev; in hinic_init_hwdev()
785 hwdev->hwif = hwif; in hinic_init_hwdev()
787 err = init_msix(hwdev); in hinic_init_hwdev()
793 err = wait_for_outbound_state(hwdev); in hinic_init_hwdev()
801 err = hinic_aeqs_init(&hwdev->aeqs, hwif, num_aeqs, in hinic_init_hwdev()
803 hwdev->msix_entries); in hinic_init_hwdev()
815 err = get_dev_cap(hwdev); in hinic_init_hwdev()
821 err = init_fw_ctxt(hwdev); in hinic_init_hwdev()
827 err = set_resources_state(hwdev, HINIC_RES_ACTIVE); in hinic_init_hwdev()
833 return hwdev; in hinic_init_hwdev()
841 hinic_aeqs_free(&hwdev->aeqs); in hinic_init_hwdev()
844 disable_msix(hwdev); in hinic_init_hwdev()
857 void hinic_free_hwdev(struct hinic_hwdev *hwdev) in hinic_free_hwdev() argument
859 struct hinic_pfhwdev *pfhwdev = container_of(hwdev, in hinic_free_hwdev()
861 hwdev); in hinic_free_hwdev()
863 set_resources_state(hwdev, HINIC_RES_CLEAN); in hinic_free_hwdev()
867 hinic_aeqs_free(&hwdev->aeqs); in hinic_free_hwdev()
869 disable_msix(hwdev); in hinic_free_hwdev()
871 hinic_free_hwif(hwdev->hwif); in hinic_free_hwdev()
874 int hinic_hwdev_max_num_qps(struct hinic_hwdev *hwdev) in hinic_hwdev_max_num_qps() argument
876 struct hinic_cap *nic_cap = &hwdev->nic_cap; in hinic_hwdev_max_num_qps()
887 int hinic_hwdev_num_qps(struct hinic_hwdev *hwdev) in hinic_hwdev_num_qps() argument
889 struct hinic_cap *nic_cap = &hwdev->nic_cap; in hinic_hwdev_num_qps()
901 struct hinic_sq *hinic_hwdev_get_sq(struct hinic_hwdev *hwdev, int i) in hinic_hwdev_get_sq() argument
903 struct hinic_func_to_io *func_to_io = &hwdev->func_to_io; in hinic_hwdev_get_sq()
906 if (i >= hinic_hwdev_num_qps(hwdev)) in hinic_hwdev_get_sq()
919 struct hinic_rq *hinic_hwdev_get_rq(struct hinic_hwdev *hwdev, int i) in hinic_hwdev_get_rq() argument
921 struct hinic_func_to_io *func_to_io = &hwdev->func_to_io; in hinic_hwdev_get_rq()
924 if (i >= hinic_hwdev_num_qps(hwdev)) in hinic_hwdev_get_rq()
937 int hinic_hwdev_msix_cnt_set(struct hinic_hwdev *hwdev, u16 msix_index) in hinic_hwdev_msix_cnt_set() argument
939 return hinic_msix_attr_cnt_clear(hwdev->hwif, msix_index); in hinic_hwdev_msix_cnt_set()
954 int hinic_hwdev_msix_set(struct hinic_hwdev *hwdev, u16 msix_index, in hinic_hwdev_msix_set() argument
959 return hinic_msix_attr_set(hwdev->hwif, msix_index, in hinic_hwdev_msix_set()
974 int hinic_hwdev_hw_ci_addr_set(struct hinic_hwdev *hwdev, struct hinic_sq *sq, in hinic_hwdev_hw_ci_addr_set() argument
978 struct hinic_hwif *hwif = hwdev->hwif; in hinic_hwdev_hw_ci_addr_set()
1001 pfhwdev = container_of(hwdev, struct hinic_pfhwdev, hwdev); in hinic_hwdev_hw_ci_addr_set()
1016 void hinic_hwdev_set_msix_state(struct hinic_hwdev *hwdev, u16 msix_index, in hinic_hwdev_set_msix_state() argument
1019 hinic_set_msix_state(hwdev->hwif, msix_index, flag); in hinic_hwdev_set_msix_state()