Lines Matching refs:nic_dev

64 #define VLAN_BITMAP_SIZE(nic_dev)       (ALIGN(VLAN_N_VID, 8) / 8)  argument
116 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_get_link_ksettings() local
129 err = hinic_port_get_cap(nic_dev, &port_cap); in hinic_get_link_ksettings()
131 netif_err(nic_dev, drv, netdev, in hinic_get_link_ksettings()
136 err = hinic_port_link_state(nic_dev, &link_state); in hinic_get_link_ksettings()
138 netif_err(nic_dev, drv, netdev, in hinic_get_link_ksettings()
144 netif_info(nic_dev, drv, netdev, "No link\n"); in hinic_get_link_ksettings()
165 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_get_drvinfo() local
166 struct hinic_hwdev *hwdev = nic_dev->hwdev; in hinic_get_drvinfo()
185 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_get_channels() local
186 struct hinic_hwdev *hwdev = nic_dev->hwdev; in hinic_get_channels()
206 static void update_rx_stats(struct hinic_dev *nic_dev, struct hinic_rxq *rxq) in update_rx_stats() argument
208 struct hinic_rxq_stats *nic_rx_stats = &nic_dev->rx_stats; in update_rx_stats()
223 static void update_tx_stats(struct hinic_dev *nic_dev, struct hinic_txq *txq) in update_tx_stats() argument
225 struct hinic_txq_stats *nic_tx_stats = &nic_dev->tx_stats; in update_tx_stats()
243 static void update_nic_stats(struct hinic_dev *nic_dev) in update_nic_stats() argument
245 int i, num_qps = hinic_hwdev_num_qps(nic_dev->hwdev); in update_nic_stats()
248 update_rx_stats(nic_dev, &nic_dev->rxqs[i]); in update_nic_stats()
251 update_tx_stats(nic_dev, &nic_dev->txqs[i]); in update_nic_stats()
260 static int create_txqs(struct hinic_dev *nic_dev) in create_txqs() argument
262 int err, i, j, num_txqs = hinic_hwdev_num_qps(nic_dev->hwdev); in create_txqs()
263 struct net_device *netdev = nic_dev->netdev; in create_txqs()
266 if (nic_dev->txqs) in create_txqs()
269 txq_size = num_txqs * sizeof(*nic_dev->txqs); in create_txqs()
270 nic_dev->txqs = devm_kzalloc(&netdev->dev, txq_size, GFP_KERNEL); in create_txqs()
271 if (!nic_dev->txqs) in create_txqs()
275 struct hinic_sq *sq = hinic_hwdev_get_sq(nic_dev->hwdev, i); in create_txqs()
277 err = hinic_init_txq(&nic_dev->txqs[i], sq, netdev); in create_txqs()
279 netif_err(nic_dev, drv, netdev, in create_txqs()
289 hinic_clean_txq(&nic_dev->txqs[j]); in create_txqs()
291 devm_kfree(&netdev->dev, nic_dev->txqs); in create_txqs()
299 static void free_txqs(struct hinic_dev *nic_dev) in free_txqs() argument
301 int i, num_txqs = hinic_hwdev_num_qps(nic_dev->hwdev); in free_txqs()
302 struct net_device *netdev = nic_dev->netdev; in free_txqs()
304 if (!nic_dev->txqs) in free_txqs()
308 hinic_clean_txq(&nic_dev->txqs[i]); in free_txqs()
310 devm_kfree(&netdev->dev, nic_dev->txqs); in free_txqs()
311 nic_dev->txqs = NULL; in free_txqs()
320 static int create_rxqs(struct hinic_dev *nic_dev) in create_rxqs() argument
322 int err, i, j, num_rxqs = hinic_hwdev_num_qps(nic_dev->hwdev); in create_rxqs()
323 struct net_device *netdev = nic_dev->netdev; in create_rxqs()
326 if (nic_dev->rxqs) in create_rxqs()
329 rxq_size = num_rxqs * sizeof(*nic_dev->rxqs); in create_rxqs()
330 nic_dev->rxqs = devm_kzalloc(&netdev->dev, rxq_size, GFP_KERNEL); in create_rxqs()
331 if (!nic_dev->rxqs) in create_rxqs()
335 struct hinic_rq *rq = hinic_hwdev_get_rq(nic_dev->hwdev, i); in create_rxqs()
337 err = hinic_init_rxq(&nic_dev->rxqs[i], rq, netdev); in create_rxqs()
339 netif_err(nic_dev, drv, netdev, in create_rxqs()
349 hinic_clean_rxq(&nic_dev->rxqs[j]); in create_rxqs()
351 devm_kfree(&netdev->dev, nic_dev->rxqs); in create_rxqs()
359 static void free_rxqs(struct hinic_dev *nic_dev) in free_rxqs() argument
361 int i, num_rxqs = hinic_hwdev_num_qps(nic_dev->hwdev); in free_rxqs()
362 struct net_device *netdev = nic_dev->netdev; in free_rxqs()
364 if (!nic_dev->rxqs) in free_rxqs()
368 hinic_clean_rxq(&nic_dev->rxqs[i]); in free_rxqs()
370 devm_kfree(&netdev->dev, nic_dev->rxqs); in free_rxqs()
371 nic_dev->rxqs = NULL; in free_rxqs()
376 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_open() local
380 if (!(nic_dev->flags & HINIC_INTF_UP)) { in hinic_open()
381 err = hinic_hwdev_ifup(nic_dev->hwdev); in hinic_open()
383 netif_err(nic_dev, drv, netdev, in hinic_open()
389 err = create_txqs(nic_dev); in hinic_open()
391 netif_err(nic_dev, drv, netdev, in hinic_open()
396 err = create_rxqs(nic_dev); in hinic_open()
398 netif_err(nic_dev, drv, netdev, in hinic_open()
403 num_qps = hinic_hwdev_num_qps(nic_dev->hwdev); in hinic_open()
407 err = hinic_port_set_state(nic_dev, HINIC_PORT_ENABLE); in hinic_open()
409 netif_err(nic_dev, drv, netdev, in hinic_open()
414 err = hinic_port_set_func_state(nic_dev, HINIC_FUNC_PORT_ENABLE); in hinic_open()
416 netif_err(nic_dev, drv, netdev, in hinic_open()
424 down(&nic_dev->mgmt_lock); in hinic_open()
426 err = hinic_port_link_state(nic_dev, &link_state); in hinic_open()
428 netif_err(nic_dev, drv, netdev, "Failed to get link state\n"); in hinic_open()
433 nic_dev->flags |= HINIC_LINK_UP; in hinic_open()
435 nic_dev->flags |= HINIC_INTF_UP; in hinic_open()
437 if ((nic_dev->flags & (HINIC_LINK_UP | HINIC_INTF_UP)) == in hinic_open()
439 netif_info(nic_dev, drv, netdev, "link + intf UP\n"); in hinic_open()
444 up(&nic_dev->mgmt_lock); in hinic_open()
446 netif_info(nic_dev, drv, netdev, "HINIC_INTF is UP\n"); in hinic_open()
450 up(&nic_dev->mgmt_lock); in hinic_open()
451 ret = hinic_port_set_func_state(nic_dev, HINIC_FUNC_PORT_DISABLE); in hinic_open()
453 netif_warn(nic_dev, drv, netdev, in hinic_open()
457 ret = hinic_port_set_state(nic_dev, HINIC_PORT_DISABLE); in hinic_open()
459 netif_warn(nic_dev, drv, netdev, in hinic_open()
463 free_rxqs(nic_dev); in hinic_open()
466 free_txqs(nic_dev); in hinic_open()
469 if (!(nic_dev->flags & HINIC_INTF_UP)) in hinic_open()
470 hinic_hwdev_ifdown(nic_dev->hwdev); in hinic_open()
476 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_close() local
480 down(&nic_dev->mgmt_lock); in hinic_close()
482 flags = nic_dev->flags; in hinic_close()
483 nic_dev->flags &= ~HINIC_INTF_UP; in hinic_close()
488 update_nic_stats(nic_dev); in hinic_close()
490 up(&nic_dev->mgmt_lock); in hinic_close()
492 err = hinic_port_set_func_state(nic_dev, HINIC_FUNC_PORT_DISABLE); in hinic_close()
494 netif_err(nic_dev, drv, netdev, in hinic_close()
496 nic_dev->flags |= (flags & HINIC_INTF_UP); in hinic_close()
500 err = hinic_port_set_state(nic_dev, HINIC_PORT_DISABLE); in hinic_close()
502 netif_err(nic_dev, drv, netdev, "Failed to set port state\n"); in hinic_close()
503 nic_dev->flags |= (flags & HINIC_INTF_UP); in hinic_close()
507 free_rxqs(nic_dev); in hinic_close()
508 free_txqs(nic_dev); in hinic_close()
511 hinic_hwdev_ifdown(nic_dev->hwdev); in hinic_close()
513 netif_info(nic_dev, drv, netdev, "HINIC_INTF is DOWN\n"); in hinic_close()
519 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_change_mtu() local
522 netif_info(nic_dev, drv, netdev, "set_mtu = %d\n", new_mtu); in hinic_change_mtu()
524 err = hinic_port_set_mtu(nic_dev, new_mtu); in hinic_change_mtu()
526 netif_err(nic_dev, drv, netdev, "Failed to set port mtu\n"); in hinic_change_mtu()
542 struct hinic_dev *nic_dev = netdev_priv(netdev); in change_mac_addr() local
549 netif_info(nic_dev, drv, netdev, "change mac addr = %02x %02x %02x %02x %02x %02x\n", in change_mac_addr()
552 down(&nic_dev->mgmt_lock); in change_mac_addr()
555 err = hinic_port_del_mac(nic_dev, netdev->dev_addr, vid); in change_mac_addr()
557 netif_err(nic_dev, drv, netdev, in change_mac_addr()
562 err = hinic_port_add_mac(nic_dev, addr, vid); in change_mac_addr()
564 netif_err(nic_dev, drv, netdev, "Failed to add mac\n"); in change_mac_addr()
568 vid = find_next_bit(nic_dev->vlan_bitmap, VLAN_N_VID, vid + 1); in change_mac_addr()
571 up(&nic_dev->mgmt_lock); in change_mac_addr()
599 struct hinic_dev *nic_dev = netdev_priv(netdev); in add_mac_addr() local
606 netif_info(nic_dev, drv, netdev, "set mac addr = %02x %02x %02x %02x %02x %02x\n", in add_mac_addr()
609 down(&nic_dev->mgmt_lock); in add_mac_addr()
612 err = hinic_port_add_mac(nic_dev, addr, vid); in add_mac_addr()
614 netif_err(nic_dev, drv, netdev, "Failed to add mac\n"); in add_mac_addr()
618 vid = find_next_bit(nic_dev->vlan_bitmap, VLAN_N_VID, vid + 1); in add_mac_addr()
621 up(&nic_dev->mgmt_lock); in add_mac_addr()
634 struct hinic_dev *nic_dev = netdev_priv(netdev); in remove_mac_addr() local
641 netif_info(nic_dev, drv, netdev, "remove mac addr = %02x %02x %02x %02x %02x %02x\n", in remove_mac_addr()
644 down(&nic_dev->mgmt_lock); in remove_mac_addr()
647 err = hinic_port_del_mac(nic_dev, addr, vid); in remove_mac_addr()
649 netif_err(nic_dev, drv, netdev, in remove_mac_addr()
654 vid = find_next_bit(nic_dev->vlan_bitmap, VLAN_N_VID, vid + 1); in remove_mac_addr()
657 up(&nic_dev->mgmt_lock); in remove_mac_addr()
664 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_vlan_rx_add_vid() local
667 netif_info(nic_dev, drv, netdev, "add vid = %d\n", vid); in hinic_vlan_rx_add_vid()
669 down(&nic_dev->mgmt_lock); in hinic_vlan_rx_add_vid()
671 err = hinic_port_add_vlan(nic_dev, vid); in hinic_vlan_rx_add_vid()
673 netif_err(nic_dev, drv, netdev, "Failed to add vlan\n"); in hinic_vlan_rx_add_vid()
677 err = hinic_port_add_mac(nic_dev, netdev->dev_addr, vid); in hinic_vlan_rx_add_vid()
679 netif_err(nic_dev, drv, netdev, "Failed to set mac\n"); in hinic_vlan_rx_add_vid()
683 bitmap_set(nic_dev->vlan_bitmap, vid, 1); in hinic_vlan_rx_add_vid()
685 up(&nic_dev->mgmt_lock); in hinic_vlan_rx_add_vid()
689 ret = hinic_port_del_vlan(nic_dev, vid); in hinic_vlan_rx_add_vid()
691 netif_err(nic_dev, drv, netdev, in hinic_vlan_rx_add_vid()
695 up(&nic_dev->mgmt_lock); in hinic_vlan_rx_add_vid()
702 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_vlan_rx_kill_vid() local
705 netif_info(nic_dev, drv, netdev, "remove vid = %d\n", vid); in hinic_vlan_rx_kill_vid()
707 down(&nic_dev->mgmt_lock); in hinic_vlan_rx_kill_vid()
709 err = hinic_port_del_vlan(nic_dev, vid); in hinic_vlan_rx_kill_vid()
711 netif_err(nic_dev, drv, netdev, "Failed to delete vlan\n"); in hinic_vlan_rx_kill_vid()
715 bitmap_clear(nic_dev->vlan_bitmap, vid, 1); in hinic_vlan_rx_kill_vid()
717 up(&nic_dev->mgmt_lock); in hinic_vlan_rx_kill_vid()
721 up(&nic_dev->mgmt_lock); in hinic_vlan_rx_kill_vid()
728 struct hinic_dev *nic_dev = rx_mode_work_to_nic_dev(rx_mode_work); in set_rx_mode() local
730 netif_info(nic_dev, drv, nic_dev->netdev, "set rx mode work\n"); in set_rx_mode()
732 hinic_port_set_rx_mode(nic_dev, rx_mode_work->rx_mode); in set_rx_mode()
734 __dev_uc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr); in set_rx_mode()
735 __dev_mc_sync(nic_dev->netdev, add_mac_addr, remove_mac_addr); in set_rx_mode()
740 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_set_rx_mode() local
744 rx_mode_work = &nic_dev->rx_mode_work; in hinic_set_rx_mode()
757 queue_work(nic_dev->workq, &rx_mode_work->work); in hinic_set_rx_mode()
762 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_tx_timeout() local
764 netif_err(nic_dev, drv, netdev, "Tx timeout\n"); in hinic_tx_timeout()
770 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_get_stats64() local
774 nic_rx_stats = &nic_dev->rx_stats; in hinic_get_stats64()
775 nic_tx_stats = &nic_dev->tx_stats; in hinic_get_stats64()
777 down(&nic_dev->mgmt_lock); in hinic_get_stats64()
779 if (nic_dev->flags & HINIC_INTF_UP) in hinic_get_stats64()
780 update_nic_stats(nic_dev); in hinic_get_stats64()
782 up(&nic_dev->mgmt_lock); in hinic_get_stats64()
829 struct hinic_dev *nic_dev = handle; in link_status_event_handler() local
834 down(&nic_dev->mgmt_lock); in link_status_event_handler()
836 nic_dev->flags |= HINIC_LINK_UP; in link_status_event_handler()
838 if ((nic_dev->flags & (HINIC_LINK_UP | HINIC_INTF_UP)) == in link_status_event_handler()
840 netif_carrier_on(nic_dev->netdev); in link_status_event_handler()
841 netif_tx_wake_all_queues(nic_dev->netdev); in link_status_event_handler()
844 up(&nic_dev->mgmt_lock); in link_status_event_handler()
846 netif_info(nic_dev, drv, nic_dev->netdev, "HINIC_Link is UP\n"); in link_status_event_handler()
848 down(&nic_dev->mgmt_lock); in link_status_event_handler()
850 nic_dev->flags &= ~HINIC_LINK_UP; in link_status_event_handler()
852 netif_carrier_off(nic_dev->netdev); in link_status_event_handler()
853 netif_tx_disable(nic_dev->netdev); in link_status_event_handler()
855 up(&nic_dev->mgmt_lock); in link_status_event_handler()
857 netif_info(nic_dev, drv, nic_dev->netdev, "HINIC_Link is DOWN\n"); in link_status_event_handler()
877 struct hinic_dev *nic_dev; in nic_dev_init() local
895 netdev = alloc_etherdev_mq(sizeof(*nic_dev), num_qps); in nic_dev_init()
906 nic_dev = netdev_priv(netdev); in nic_dev_init()
907 nic_dev->netdev = netdev; in nic_dev_init()
908 nic_dev->hwdev = hwdev; in nic_dev_init()
909 nic_dev->msg_enable = MSG_ENABLE_DEFAULT; in nic_dev_init()
910 nic_dev->flags = 0; in nic_dev_init()
911 nic_dev->txqs = NULL; in nic_dev_init()
912 nic_dev->rxqs = NULL; in nic_dev_init()
913 nic_dev->tx_weight = tx_weight; in nic_dev_init()
914 nic_dev->rx_weight = rx_weight; in nic_dev_init()
916 sema_init(&nic_dev->mgmt_lock, 1); in nic_dev_init()
918 tx_stats = &nic_dev->tx_stats; in nic_dev_init()
919 rx_stats = &nic_dev->rx_stats; in nic_dev_init()
924 nic_dev->vlan_bitmap = devm_kzalloc(&pdev->dev, in nic_dev_init()
925 VLAN_BITMAP_SIZE(nic_dev), in nic_dev_init()
927 if (!nic_dev->vlan_bitmap) { in nic_dev_init()
932 nic_dev->workq = create_singlethread_workqueue(HINIC_WQ_NAME); in nic_dev_init()
933 if (!nic_dev->workq) { in nic_dev_init()
940 err = hinic_port_get_mac(nic_dev, netdev->dev_addr); in nic_dev_init()
944 err = hinic_port_add_mac(nic_dev, netdev->dev_addr, 0); in nic_dev_init()
950 err = hinic_port_set_mtu(nic_dev, netdev->mtu); in nic_dev_init()
956 rx_mode_work = &nic_dev->rx_mode_work; in nic_dev_init()
963 hinic_hwdev_cb_register(nic_dev->hwdev, HINIC_MGMT_MSG_CMD_LINK_STATUS, in nic_dev_init()
964 nic_dev, link_status_event_handler); in nic_dev_init()
976 hinic_hwdev_cb_unregister(nic_dev->hwdev, in nic_dev_init()
983 destroy_workqueue(nic_dev->workq); in nic_dev_init()
1057 struct hinic_dev *nic_dev = netdev_priv(netdev); in hinic_remove() local
1062 hinic_hwdev_cb_unregister(nic_dev->hwdev, in hinic_remove()
1065 rx_mode_work = &nic_dev->rx_mode_work; in hinic_remove()
1070 destroy_workqueue(nic_dev->workq); in hinic_remove()
1072 hinic_free_hwdev(nic_dev->hwdev); in hinic_remove()