Lines Matching refs:rocker_port

100 static u32 rocker_msix_tx_vector(const struct rocker_port *rocker_port)  in rocker_msix_tx_vector()  argument
102 return rocker_msix_vector(rocker_port->rocker, in rocker_msix_tx_vector()
103 ROCKER_MSIX_VEC_TX(rocker_port->port_number)); in rocker_msix_tx_vector()
106 static u32 rocker_msix_rx_vector(const struct rocker_port *rocker_port) in rocker_msix_rx_vector() argument
108 return rocker_msix_vector(rocker_port->rocker, in rocker_msix_rx_vector()
109 ROCKER_MSIX_VEC_RX(rocker_port->port_number)); in rocker_msix_rx_vector()
672 static int rocker_dma_rx_ring_skb_map(const struct rocker_port *rocker_port, in rocker_dma_rx_ring_skb_map() argument
676 const struct rocker *rocker = rocker_port->rocker; in rocker_dma_rx_ring_skb_map()
696 static size_t rocker_port_rx_buf_len(const struct rocker_port *rocker_port) in rocker_port_rx_buf_len() argument
698 return rocker_port->dev->mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN; in rocker_port_rx_buf_len()
701 static int rocker_dma_rx_ring_skb_alloc(const struct rocker_port *rocker_port, in rocker_dma_rx_ring_skb_alloc() argument
704 struct net_device *dev = rocker_port->dev; in rocker_dma_rx_ring_skb_alloc()
706 size_t buf_len = rocker_port_rx_buf_len(rocker_port); in rocker_dma_rx_ring_skb_alloc()
718 err = rocker_dma_rx_ring_skb_map(rocker_port, desc_info, skb, buf_len); in rocker_dma_rx_ring_skb_alloc()
755 static int rocker_dma_rx_ring_skbs_alloc(const struct rocker_port *rocker_port) in rocker_dma_rx_ring_skbs_alloc() argument
757 const struct rocker_dma_ring_info *rx_ring = &rocker_port->rx_ring; in rocker_dma_rx_ring_skbs_alloc()
758 const struct rocker *rocker = rocker_port->rocker; in rocker_dma_rx_ring_skbs_alloc()
763 err = rocker_dma_rx_ring_skb_alloc(rocker_port, in rocker_dma_rx_ring_skbs_alloc()
776 static void rocker_dma_rx_ring_skbs_free(const struct rocker_port *rocker_port) in rocker_dma_rx_ring_skbs_free() argument
778 const struct rocker_dma_ring_info *rx_ring = &rocker_port->rx_ring; in rocker_dma_rx_ring_skbs_free()
779 const struct rocker *rocker = rocker_port->rocker; in rocker_dma_rx_ring_skbs_free()
786 static int rocker_port_dma_rings_init(struct rocker_port *rocker_port) in rocker_port_dma_rings_init() argument
788 struct rocker *rocker = rocker_port->rocker; in rocker_port_dma_rings_init()
792 ROCKER_DMA_TX(rocker_port->port_number), in rocker_port_dma_rings_init()
794 &rocker_port->tx_ring); in rocker_port_dma_rings_init()
796 netdev_err(rocker_port->dev, "failed to create tx dma ring\n"); in rocker_port_dma_rings_init()
800 err = rocker_dma_ring_bufs_alloc(rocker, &rocker_port->tx_ring, in rocker_port_dma_rings_init()
804 netdev_err(rocker_port->dev, "failed to alloc tx dma ring buffers\n"); in rocker_port_dma_rings_init()
809 ROCKER_DMA_RX(rocker_port->port_number), in rocker_port_dma_rings_init()
811 &rocker_port->rx_ring); in rocker_port_dma_rings_init()
813 netdev_err(rocker_port->dev, "failed to create rx dma ring\n"); in rocker_port_dma_rings_init()
817 err = rocker_dma_ring_bufs_alloc(rocker, &rocker_port->rx_ring, in rocker_port_dma_rings_init()
821 netdev_err(rocker_port->dev, "failed to alloc rx dma ring buffers\n"); in rocker_port_dma_rings_init()
825 err = rocker_dma_rx_ring_skbs_alloc(rocker_port); in rocker_port_dma_rings_init()
827 netdev_err(rocker_port->dev, "failed to alloc rx dma ring skbs\n"); in rocker_port_dma_rings_init()
830 rocker_dma_ring_pass_to_producer(rocker, &rocker_port->rx_ring); in rocker_port_dma_rings_init()
835 rocker_dma_ring_bufs_free(rocker, &rocker_port->rx_ring, in rocker_port_dma_rings_init()
838 rocker_dma_ring_destroy(rocker, &rocker_port->rx_ring); in rocker_port_dma_rings_init()
840 rocker_dma_ring_bufs_free(rocker, &rocker_port->tx_ring, in rocker_port_dma_rings_init()
843 rocker_dma_ring_destroy(rocker, &rocker_port->tx_ring); in rocker_port_dma_rings_init()
847 static void rocker_port_dma_rings_fini(struct rocker_port *rocker_port) in rocker_port_dma_rings_fini() argument
849 struct rocker *rocker = rocker_port->rocker; in rocker_port_dma_rings_fini()
851 rocker_dma_rx_ring_skbs_free(rocker_port); in rocker_port_dma_rings_fini()
852 rocker_dma_ring_bufs_free(rocker, &rocker_port->rx_ring, in rocker_port_dma_rings_fini()
854 rocker_dma_ring_destroy(rocker, &rocker_port->rx_ring); in rocker_port_dma_rings_fini()
855 rocker_dma_ring_bufs_free(rocker, &rocker_port->tx_ring, in rocker_port_dma_rings_fini()
857 rocker_dma_ring_destroy(rocker, &rocker_port->tx_ring); in rocker_port_dma_rings_fini()
860 static void rocker_port_set_enable(const struct rocker_port *rocker_port, in rocker_port_set_enable() argument
863 u64 val = rocker_read64(rocker_port->rocker, PORT_PHYS_ENABLE); in rocker_port_set_enable()
866 val |= 1ULL << rocker_port->pport; in rocker_port_set_enable()
868 val &= ~(1ULL << rocker_port->pport); in rocker_port_set_enable()
869 rocker_write64(rocker_port->rocker, PORT_PHYS_ENABLE, val); in rocker_port_set_enable()
899 static void rocker_port_link_up(const struct rocker_port *rocker_port) in rocker_port_link_up() argument
901 netif_carrier_on(rocker_port->dev); in rocker_port_link_up()
902 netdev_info(rocker_port->dev, "Link is up\n"); in rocker_port_link_up()
905 static void rocker_port_link_down(const struct rocker_port *rocker_port) in rocker_port_link_down() argument
907 netif_carrier_off(rocker_port->dev); in rocker_port_link_down()
908 netdev_info(rocker_port->dev, "Link is down\n"); in rocker_port_link_down()
917 struct rocker_port *rocker_port; in rocker_event_link_change() local
930 rocker_port = rocker->ports[port_number]; in rocker_event_link_change()
931 if (netif_carrier_ok(rocker_port->dev) != link_up) { in rocker_event_link_change()
933 rocker_port_link_up(rocker_port); in rocker_event_link_change()
935 rocker_port_link_down(rocker_port); in rocker_event_link_change()
941 static int rocker_world_port_ev_mac_vlan_seen(struct rocker_port *rocker_port,
950 struct rocker_port *rocker_port; in rocker_event_mac_vlan_seen() local
967 rocker_port = rocker->ports[port_number]; in rocker_event_mac_vlan_seen()
968 return rocker_world_port_ev_mac_vlan_seen(rocker_port, addr, vlan_id); in rocker_event_mac_vlan_seen()
1026 struct rocker_port *rocker_port = dev_id; in rocker_tx_irq_handler() local
1028 napi_schedule(&rocker_port->napi_tx); in rocker_tx_irq_handler()
1034 struct rocker_port *rocker_port = dev_id; in rocker_rx_irq_handler() local
1036 napi_schedule(&rocker_port->napi_rx); in rocker_rx_irq_handler()
1044 int rocker_cmd_exec(struct rocker_port *rocker_port, bool nowait, in rocker_cmd_exec() argument
1048 struct rocker *rocker = rocker_port->rocker; in rocker_cmd_exec()
1066 err = prepare(rocker_port, desc_info, prepare_priv); in rocker_cmd_exec()
1087 err = process(rocker_port, desc_info, process_priv); in rocker_cmd_exec()
1094 rocker_cmd_get_port_settings_prep(const struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_prep() argument
1107 rocker_port->pport)) in rocker_cmd_get_port_settings_prep()
1114 rocker_cmd_get_port_settings_ethtool_proc(const struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_ethtool_proc() argument
1153 rocker_cmd_get_port_settings_macaddr_proc(const struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_macaddr_proc() argument
1180 rocker_cmd_get_port_settings_mode_proc(const struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_mode_proc() argument
1209 rocker_cmd_get_port_settings_phys_name_proc(const struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_phys_name_proc() argument
1250 rocker_cmd_set_port_settings_ethtool_prep(const struct rocker_port *rocker_port, in rocker_cmd_set_port_settings_ethtool_prep() argument
1264 rocker_port->pport)) in rocker_cmd_set_port_settings_ethtool_prep()
1280 rocker_cmd_set_port_settings_macaddr_prep(const struct rocker_port *rocker_port, in rocker_cmd_set_port_settings_macaddr_prep() argument
1294 rocker_port->pport)) in rocker_cmd_set_port_settings_macaddr_prep()
1304 rocker_cmd_set_port_settings_mtu_prep(const struct rocker_port *rocker_port, in rocker_cmd_set_port_settings_mtu_prep() argument
1318 rocker_port->pport)) in rocker_cmd_set_port_settings_mtu_prep()
1328 rocker_cmd_set_port_learning_prep(const struct rocker_port *rocker_port, in rocker_cmd_set_port_learning_prep() argument
1342 rocker_port->pport)) in rocker_cmd_set_port_learning_prep()
1352 rocker_cmd_get_port_settings_ethtool(struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_ethtool() argument
1355 return rocker_cmd_exec(rocker_port, false, in rocker_cmd_get_port_settings_ethtool()
1361 static int rocker_cmd_get_port_settings_macaddr(struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_macaddr() argument
1364 return rocker_cmd_exec(rocker_port, false, in rocker_cmd_get_port_settings_macaddr()
1370 static int rocker_cmd_get_port_settings_mode(struct rocker_port *rocker_port, in rocker_cmd_get_port_settings_mode() argument
1373 return rocker_cmd_exec(rocker_port, false, in rocker_cmd_get_port_settings_mode()
1379 rocker_cmd_set_port_settings_ethtool(struct rocker_port *rocker_port, in rocker_cmd_set_port_settings_ethtool() argument
1386 return rocker_cmd_exec(rocker_port, false, in rocker_cmd_set_port_settings_ethtool()
1391 static int rocker_cmd_set_port_settings_macaddr(struct rocker_port *rocker_port, in rocker_cmd_set_port_settings_macaddr() argument
1394 return rocker_cmd_exec(rocker_port, false, in rocker_cmd_set_port_settings_macaddr()
1399 static int rocker_cmd_set_port_settings_mtu(struct rocker_port *rocker_port, in rocker_cmd_set_port_settings_mtu() argument
1402 return rocker_cmd_exec(rocker_port, false, in rocker_cmd_set_port_settings_mtu()
1407 int rocker_port_set_learning(struct rocker_port *rocker_port, in rocker_port_set_learning() argument
1410 return rocker_cmd_exec(rocker_port, false, in rocker_port_set_learning()
1468 static int rocker_world_check_init(struct rocker_port *rocker_port) in rocker_world_check_init() argument
1470 struct rocker *rocker = rocker_port->rocker; in rocker_world_check_init()
1474 err = rocker_cmd_get_port_settings_mode(rocker_port, &mode); in rocker_world_check_init()
1489 static int rocker_world_port_pre_init(struct rocker_port *rocker_port) in rocker_world_port_pre_init() argument
1491 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_pre_init()
1494 rocker_port->wpriv = kzalloc(wops->port_priv_size, GFP_KERNEL); in rocker_world_port_pre_init()
1495 if (!rocker_port->wpriv) in rocker_world_port_pre_init()
1499 err = wops->port_pre_init(rocker_port); in rocker_world_port_pre_init()
1501 kfree(rocker_port->wpriv); in rocker_world_port_pre_init()
1505 static int rocker_world_port_init(struct rocker_port *rocker_port) in rocker_world_port_init() argument
1507 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_init()
1511 return wops->port_init(rocker_port); in rocker_world_port_init()
1514 static void rocker_world_port_fini(struct rocker_port *rocker_port) in rocker_world_port_fini() argument
1516 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_fini()
1520 wops->port_fini(rocker_port); in rocker_world_port_fini()
1523 static void rocker_world_port_post_fini(struct rocker_port *rocker_port) in rocker_world_port_post_fini() argument
1525 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_post_fini()
1529 wops->port_post_fini(rocker_port); in rocker_world_port_post_fini()
1530 kfree(rocker_port->wpriv); in rocker_world_port_post_fini()
1533 static int rocker_world_port_open(struct rocker_port *rocker_port) in rocker_world_port_open() argument
1535 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_open()
1539 return wops->port_open(rocker_port); in rocker_world_port_open()
1542 static void rocker_world_port_stop(struct rocker_port *rocker_port) in rocker_world_port_stop() argument
1544 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_stop()
1548 wops->port_stop(rocker_port); in rocker_world_port_stop()
1551 static int rocker_world_port_attr_stp_state_set(struct rocker_port *rocker_port, in rocker_world_port_attr_stp_state_set() argument
1554 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_attr_stp_state_set()
1559 return wops->port_attr_stp_state_set(rocker_port, state); in rocker_world_port_attr_stp_state_set()
1563 rocker_world_port_attr_bridge_flags_support_get(const struct rocker_port * in rocker_world_port_attr_bridge_flags_support_get() argument
1564 rocker_port, in rocker_world_port_attr_bridge_flags_support_get()
1568 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_attr_bridge_flags_support_get()
1572 return wops->port_attr_bridge_flags_support_get(rocker_port, in rocker_world_port_attr_bridge_flags_support_get()
1577 rocker_world_port_attr_pre_bridge_flags_set(struct rocker_port *rocker_port, in rocker_world_port_attr_pre_bridge_flags_set() argument
1580 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_attr_pre_bridge_flags_set()
1587 err = rocker_world_port_attr_bridge_flags_support_get(rocker_port, in rocker_world_port_attr_pre_bridge_flags_set()
1599 rocker_world_port_attr_bridge_flags_set(struct rocker_port *rocker_port, in rocker_world_port_attr_bridge_flags_set() argument
1602 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_attr_bridge_flags_set()
1607 return wops->port_attr_bridge_flags_set(rocker_port, flags.val); in rocker_world_port_attr_bridge_flags_set()
1611 rocker_world_port_attr_bridge_ageing_time_set(struct rocker_port *rocker_port, in rocker_world_port_attr_bridge_ageing_time_set() argument
1614 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_attr_bridge_ageing_time_set()
1619 return wops->port_attr_bridge_ageing_time_set(rocker_port, ageing_time); in rocker_world_port_attr_bridge_ageing_time_set()
1623 rocker_world_port_obj_vlan_add(struct rocker_port *rocker_port, in rocker_world_port_obj_vlan_add() argument
1626 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_obj_vlan_add()
1631 return wops->port_obj_vlan_add(rocker_port, vlan); in rocker_world_port_obj_vlan_add()
1635 rocker_world_port_obj_vlan_del(struct rocker_port *rocker_port, in rocker_world_port_obj_vlan_del() argument
1638 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_obj_vlan_del()
1645 return wops->port_obj_vlan_del(rocker_port, vlan); in rocker_world_port_obj_vlan_del()
1649 rocker_world_port_fdb_add(struct rocker_port *rocker_port, in rocker_world_port_fdb_add() argument
1652 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_fdb_add()
1657 return wops->port_obj_fdb_add(rocker_port, info->vid, info->addr); in rocker_world_port_fdb_add()
1661 rocker_world_port_fdb_del(struct rocker_port *rocker_port, in rocker_world_port_fdb_del() argument
1664 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_fdb_del()
1668 return wops->port_obj_fdb_del(rocker_port, info->vid, info->addr); in rocker_world_port_fdb_del()
1671 static int rocker_world_port_master_linked(struct rocker_port *rocker_port, in rocker_world_port_master_linked() argument
1675 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_master_linked()
1679 return wops->port_master_linked(rocker_port, master, extack); in rocker_world_port_master_linked()
1682 static int rocker_world_port_master_unlinked(struct rocker_port *rocker_port, in rocker_world_port_master_unlinked() argument
1685 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_master_unlinked()
1689 return wops->port_master_unlinked(rocker_port, master); in rocker_world_port_master_unlinked()
1692 static int rocker_world_port_neigh_update(struct rocker_port *rocker_port, in rocker_world_port_neigh_update() argument
1695 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_neigh_update()
1699 return wops->port_neigh_update(rocker_port, n); in rocker_world_port_neigh_update()
1702 static int rocker_world_port_neigh_destroy(struct rocker_port *rocker_port, in rocker_world_port_neigh_destroy() argument
1705 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_neigh_destroy()
1709 return wops->port_neigh_destroy(rocker_port, n); in rocker_world_port_neigh_destroy()
1712 static int rocker_world_port_ev_mac_vlan_seen(struct rocker_port *rocker_port, in rocker_world_port_ev_mac_vlan_seen() argument
1716 struct rocker_world_ops *wops = rocker_port->rocker->wops; in rocker_world_port_ev_mac_vlan_seen()
1720 return wops->port_ev_mac_vlan_seen(rocker_port, addr, vlan_id); in rocker_world_port_ev_mac_vlan_seen()
1757 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_open() local
1760 err = rocker_port_dma_rings_init(rocker_port); in rocker_port_open()
1764 err = request_irq(rocker_msix_tx_vector(rocker_port), in rocker_port_open()
1766 rocker_driver_name, rocker_port); in rocker_port_open()
1768 netdev_err(rocker_port->dev, "cannot assign tx irq\n"); in rocker_port_open()
1772 err = request_irq(rocker_msix_rx_vector(rocker_port), in rocker_port_open()
1774 rocker_driver_name, rocker_port); in rocker_port_open()
1776 netdev_err(rocker_port->dev, "cannot assign rx irq\n"); in rocker_port_open()
1780 err = rocker_world_port_open(rocker_port); in rocker_port_open()
1782 netdev_err(rocker_port->dev, "cannot open port in world\n"); in rocker_port_open()
1786 napi_enable(&rocker_port->napi_tx); in rocker_port_open()
1787 napi_enable(&rocker_port->napi_rx); in rocker_port_open()
1789 rocker_port_set_enable(rocker_port, true); in rocker_port_open()
1794 free_irq(rocker_msix_rx_vector(rocker_port), rocker_port); in rocker_port_open()
1796 free_irq(rocker_msix_tx_vector(rocker_port), rocker_port); in rocker_port_open()
1798 rocker_port_dma_rings_fini(rocker_port); in rocker_port_open()
1804 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_stop() local
1807 rocker_port_set_enable(rocker_port, false); in rocker_port_stop()
1808 napi_disable(&rocker_port->napi_rx); in rocker_port_stop()
1809 napi_disable(&rocker_port->napi_tx); in rocker_port_stop()
1810 rocker_world_port_stop(rocker_port); in rocker_port_stop()
1811 free_irq(rocker_msix_rx_vector(rocker_port), rocker_port); in rocker_port_stop()
1812 free_irq(rocker_msix_tx_vector(rocker_port), rocker_port); in rocker_port_stop()
1813 rocker_port_dma_rings_fini(rocker_port); in rocker_port_stop()
1818 static void rocker_tx_desc_frags_unmap(const struct rocker_port *rocker_port, in rocker_tx_desc_frags_unmap() argument
1821 const struct rocker *rocker = rocker_port->rocker; in rocker_tx_desc_frags_unmap()
1848 static int rocker_tx_desc_frag_map_put(const struct rocker_port *rocker_port, in rocker_tx_desc_frag_map_put() argument
1852 const struct rocker *rocker = rocker_port->rocker; in rocker_tx_desc_frag_map_put()
1860 netdev_err(rocker_port->dev, "failed to dma map tx frag\n"); in rocker_tx_desc_frag_map_put()
1884 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_xmit() local
1885 struct rocker *rocker = rocker_port->rocker; in rocker_port_xmit()
1891 desc_info = rocker_desc_head_get(&rocker_port->tx_ring); in rocker_port_xmit()
1903 err = rocker_tx_desc_frag_map_put(rocker_port, desc_info, in rocker_port_xmit()
1916 err = rocker_tx_desc_frag_map_put(rocker_port, desc_info, in rocker_port_xmit()
1925 rocker_desc_head_set(rocker, &rocker_port->tx_ring, desc_info); in rocker_port_xmit()
1927 desc_info = rocker_desc_head_get(&rocker_port->tx_ring); in rocker_port_xmit()
1934 rocker_tx_desc_frags_unmap(rocker_port, desc_info); in rocker_port_xmit()
1947 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_set_mac_address() local
1953 err = rocker_cmd_set_port_settings_macaddr(rocker_port, addr->sa_data); in rocker_port_set_mac_address()
1962 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_change_mtu() local
1972 err = rocker_cmd_set_port_settings_mtu(rocker_port, new_mtu); in rocker_port_change_mtu()
1985 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_get_phys_port_name() local
1989 err = rocker_cmd_exec(rocker_port, false, in rocker_port_get_phys_port_name()
2000 struct rocker_port *rocker_port = netdev_priv(n->dev); in rocker_port_neigh_destroy() local
2003 err = rocker_world_port_neigh_destroy(rocker_port, n); in rocker_port_neigh_destroy()
2005 netdev_warn(rocker_port->dev, "failed to handle neigh destroy (err %d)\n", in rocker_port_neigh_destroy()
2012 const struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_get_port_parent_id() local
2013 const struct rocker *rocker = rocker_port->rocker; in rocker_port_get_port_parent_id()
2039 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_attr_set() local
2044 err = rocker_world_port_attr_stp_state_set(rocker_port, in rocker_port_attr_set()
2048 err = rocker_world_port_attr_pre_bridge_flags_set(rocker_port, in rocker_port_attr_set()
2052 err = rocker_world_port_attr_bridge_flags_set(rocker_port, in rocker_port_attr_set()
2056 err = rocker_world_port_attr_bridge_ageing_time_set(rocker_port, in rocker_port_attr_set()
2070 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_obj_add() local
2075 err = rocker_world_port_obj_vlan_add(rocker_port, in rocker_port_obj_add()
2089 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_obj_del() local
2094 err = rocker_world_port_obj_vlan_del(rocker_port, in rocker_port_obj_del()
2211 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_get_link_ksettings() local
2213 return rocker_cmd_get_port_settings_ethtool(rocker_port, ecmd); in rocker_port_get_link_ksettings()
2220 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_set_link_ksettings() local
2222 return rocker_cmd_set_port_settings_ethtool(rocker_port, ecmd); in rocker_port_set_link_ksettings()
2265 rocker_cmd_get_port_stats_prep(const struct rocker_port *rocker_port, in rocker_cmd_get_port_stats_prep() argument
2280 rocker_port->pport)) in rocker_cmd_get_port_stats_prep()
2289 rocker_cmd_get_port_stats_ethtool_proc(const struct rocker_port *rocker_port, in rocker_cmd_get_port_stats_ethtool_proc() argument
2312 if (pport != rocker_port->pport) in rocker_cmd_get_port_stats_ethtool_proc()
2326 static int rocker_cmd_get_port_stats_ethtool(struct rocker_port *rocker_port, in rocker_cmd_get_port_stats_ethtool() argument
2329 return rocker_cmd_exec(rocker_port, false, in rocker_cmd_get_port_stats_ethtool()
2338 struct rocker_port *rocker_port = netdev_priv(dev); in rocker_port_get_stats() local
2340 if (rocker_cmd_get_port_stats_ethtool(rocker_port, data) != 0) { in rocker_port_get_stats()
2372 static struct rocker_port *rocker_port_napi_tx_get(struct napi_struct *napi) in rocker_port_napi_tx_get()
2374 return container_of(napi, struct rocker_port, napi_tx); in rocker_port_napi_tx_get()
2379 struct rocker_port *rocker_port = rocker_port_napi_tx_get(napi); in rocker_port_poll_tx() local
2380 const struct rocker *rocker = rocker_port->rocker; in rocker_port_poll_tx()
2386 while ((desc_info = rocker_desc_tail_get(&rocker_port->tx_ring))) { in rocker_port_poll_tx()
2391 netdev_err(rocker_port->dev, "tx desc received with err %d\n", in rocker_port_poll_tx()
2393 rocker_tx_desc_frags_unmap(rocker_port, desc_info); in rocker_port_poll_tx()
2397 rocker_port->dev->stats.tx_packets++; in rocker_port_poll_tx()
2398 rocker_port->dev->stats.tx_bytes += skb->len; in rocker_port_poll_tx()
2400 rocker_port->dev->stats.tx_errors++; in rocker_port_poll_tx()
2407 if (credits && netif_queue_stopped(rocker_port->dev)) in rocker_port_poll_tx()
2408 netif_wake_queue(rocker_port->dev); in rocker_port_poll_tx()
2411 rocker_dma_ring_credits_set(rocker, &rocker_port->tx_ring, credits); in rocker_port_poll_tx()
2417 const struct rocker_port *rocker_port, in rocker_port_rx_proc() argument
2438 skb->protocol = eth_type_trans(skb, rocker_port->dev); in rocker_port_rx_proc()
2443 rocker_port->dev->stats.rx_packets++; in rocker_port_rx_proc()
2444 rocker_port->dev->stats.rx_bytes += skb->len; in rocker_port_rx_proc()
2448 return rocker_dma_rx_ring_skb_alloc(rocker_port, desc_info); in rocker_port_rx_proc()
2451 static struct rocker_port *rocker_port_napi_rx_get(struct napi_struct *napi) in rocker_port_napi_rx_get()
2453 return container_of(napi, struct rocker_port, napi_rx); in rocker_port_napi_rx_get()
2458 struct rocker_port *rocker_port = rocker_port_napi_rx_get(napi); in rocker_port_poll_rx() local
2459 const struct rocker *rocker = rocker_port->rocker; in rocker_port_poll_rx()
2466 (desc_info = rocker_desc_tail_get(&rocker_port->rx_ring))) { in rocker_port_poll_rx()
2470 netdev_err(rocker_port->dev, "rx desc received with err %d\n", in rocker_port_poll_rx()
2473 err = rocker_port_rx_proc(rocker, rocker_port, in rocker_port_poll_rx()
2476 netdev_err(rocker_port->dev, "rx processing failed with err %d\n", in rocker_port_poll_rx()
2480 rocker_port->dev->stats.rx_errors++; in rocker_port_poll_rx()
2483 rocker_desc_head_set(rocker, &rocker_port->rx_ring, desc_info); in rocker_port_poll_rx()
2490 rocker_dma_ring_credits_set(rocker, &rocker_port->rx_ring, credits); in rocker_port_poll_rx()
2499 static void rocker_carrier_init(const struct rocker_port *rocker_port) in rocker_carrier_init() argument
2501 const struct rocker *rocker = rocker_port->rocker; in rocker_carrier_init()
2505 link_up = link_status & (1ULL << rocker_port->pport); in rocker_carrier_init()
2507 netif_carrier_on(rocker_port->dev); in rocker_carrier_init()
2509 netif_carrier_off(rocker_port->dev); in rocker_carrier_init()
2514 struct rocker_port *rocker_port; in rocker_remove_ports() local
2518 rocker_port = rocker->ports[i]; in rocker_remove_ports()
2519 if (!rocker_port) in rocker_remove_ports()
2521 rocker_world_port_fini(rocker_port); in rocker_remove_ports()
2522 unregister_netdev(rocker_port->dev); in rocker_remove_ports()
2523 rocker_world_port_post_fini(rocker_port); in rocker_remove_ports()
2524 free_netdev(rocker_port->dev); in rocker_remove_ports()
2530 static void rocker_port_dev_addr_init(struct rocker_port *rocker_port) in rocker_port_dev_addr_init() argument
2532 const struct rocker *rocker = rocker_port->rocker; in rocker_port_dev_addr_init()
2537 err = rocker_cmd_get_port_settings_macaddr(rocker_port, addr); in rocker_port_dev_addr_init()
2539 eth_hw_addr_set(rocker_port->dev, addr); in rocker_port_dev_addr_init()
2542 eth_hw_addr_random(rocker_port->dev); in rocker_port_dev_addr_init()
2551 struct rocker_port *rocker_port; in rocker_probe_port() local
2555 dev = alloc_etherdev(sizeof(struct rocker_port)); in rocker_probe_port()
2559 rocker_port = netdev_priv(dev); in rocker_probe_port()
2560 rocker_port->dev = dev; in rocker_probe_port()
2561 rocker_port->rocker = rocker; in rocker_probe_port()
2562 rocker_port->port_number = port_number; in rocker_probe_port()
2563 rocker_port->pport = port_number + 1; in rocker_probe_port()
2565 err = rocker_world_check_init(rocker_port); in rocker_probe_port()
2571 rocker_port_dev_addr_init(rocker_port); in rocker_probe_port()
2574 netif_napi_add_tx(dev, &rocker_port->napi_tx, rocker_port_poll_tx); in rocker_probe_port()
2575 netif_napi_add(dev, &rocker_port->napi_rx, rocker_port_poll_rx); in rocker_probe_port()
2576 rocker_carrier_init(rocker_port); in rocker_probe_port()
2585 err = rocker_world_port_pre_init(rocker_port); in rocker_probe_port()
2595 rocker->ports[port_number] = rocker_port; in rocker_probe_port()
2597 err = rocker_world_port_init(rocker_port); in rocker_probe_port()
2609 rocker_world_port_post_fini(rocker_port); in rocker_probe_port()
2622 alloc_size = sizeof(struct rocker_port *) * rocker->port_count; in rocker_probe_ports()
2698 struct rocker_port *rocker_port; member
2703 rocker_fdb_offload_notify(struct rocker_port *rocker_port, in rocker_fdb_offload_notify() argument
2712 rocker_port->dev, &info.info, NULL); in rocker_fdb_offload_notify()
2719 struct rocker_port *rocker_port = switchdev_work->rocker_port; in rocker_switchdev_event_work() local
2729 err = rocker_world_port_fdb_add(rocker_port, fdb_info); in rocker_switchdev_event_work()
2731 netdev_dbg(rocker_port->dev, "fdb add failed err=%d\n", err); in rocker_switchdev_event_work()
2734 rocker_fdb_offload_notify(rocker_port, fdb_info); in rocker_switchdev_event_work()
2740 err = rocker_world_port_fdb_del(rocker_port, fdb_info); in rocker_switchdev_event_work()
2742 netdev_dbg(rocker_port->dev, "fdb add failed err=%d\n", err); in rocker_switchdev_event_work()
2749 dev_put(rocker_port->dev); in rocker_switchdev_event_work()
2759 struct rocker_port *rocker_port; in rocker_switchdev_event() local
2767 rocker_port = netdev_priv(dev); in rocker_switchdev_event()
2773 switchdev_work->rocker_port = rocker_port; in rocker_switchdev_event()
2797 queue_work(rocker_port->rocker->rocker_owq, in rocker_switchdev_event()
3038 struct rocker_port *rocker_port; in rocker_port_dev_check_under() local
3043 rocker_port = netdev_priv(dev); in rocker_port_dev_check_under()
3044 if (rocker_port->rocker != rocker) in rocker_port_dev_check_under()
3052 struct rocker_port *port;
3069 struct rocker_port *rocker_port_dev_lower_find(struct net_device *dev, in rocker_port_dev_lower_find()
3092 struct rocker_port *rocker_port; in rocker_netdevice_event() local
3103 rocker_port = netdev_priv(dev); in rocker_netdevice_event()
3105 err = rocker_world_port_master_linked(rocker_port, in rocker_netdevice_event()
3112 err = rocker_world_port_master_unlinked(rocker_port, in rocker_netdevice_event()
3134 struct rocker_port *rocker_port; in rocker_netevent_event() local
3146 rocker_port = netdev_priv(dev); in rocker_netevent_event()
3147 err = rocker_world_port_neigh_update(rocker_port, n); in rocker_netevent_event()