Lines Matching refs:port_priv

169 	struct adin1110_port_priv *port_priv;
293 static int adin1110_read_fifo(struct adin1110_port_priv *port_priv)
295 struct adin1110_priv *priv = port_priv->priv;
305 if (!port_priv->nr) {
338 rxb = netdev_alloc_skb(port_priv->netdev, round_len + header_len);
355 rxb->protocol = eth_type_trans(rxb, port_priv->netdev);
357 if ((port_priv->flags & IFF_ALLMULTI && rxb->pkt_type == PACKET_MULTICAST) ||
358 (port_priv->flags & IFF_BROADCAST && rxb->pkt_type == PACKET_BROADCAST))
359 rxb->offload_fwd_mark = port_priv->priv->forwarding;
363 port_priv->rx_bytes += frame_size - ADIN1110_FRAME_HEADER_LEN;
364 port_priv->rx_packets++;
369 static int adin1110_write_fifo(struct adin1110_port_priv *port_priv,
372 struct adin1110_priv *priv = port_priv->priv;
409 frame_header = cpu_to_be16(port_priv->nr);
420 port_priv->tx_bytes += txb->len;
421 port_priv->tx_packets++;
537 static bool adin1110_port_rx_ready(struct adin1110_port_priv *port_priv,
540 if (!netif_oper_up(port_priv->netdev))
543 if (!port_priv->nr)
549 static void adin1110_read_frames(struct adin1110_port_priv *port_priv,
552 struct adin1110_priv *priv = port_priv->priv;
561 if (!adin1110_port_rx_ready(port_priv, status1))
564 ret = adin1110_read_fifo(port_priv);
625 static int adin1110_write_mac_address(struct adin1110_port_priv *port_priv,
629 struct adin1110_priv *priv = port_priv->priv;
635 if (!port_priv->nr)
699 static u32 adin1110_port_rules(struct adin1110_port_priv *port_priv,
705 if (!port_priv->nr)
713 if (fw_to_other_port && port_priv->priv->forwarding)
719 static int adin1110_multicast_filter(struct adin1110_port_priv *port_priv,
729 if (accept_multicast && port_priv->state == BR_STATE_FORWARDING)
730 port_rules = adin1110_port_rules(port_priv, true, true);
732 return adin1110_write_mac_address(port_priv, mac_nr, mac,
736 static int adin1110_broadcasts_filter(struct adin1110_port_priv *port_priv,
744 if (accept_broadcast && port_priv->state == BR_STATE_FORWARDING)
745 port_rules = adin1110_port_rules(port_priv, true, true);
747 return adin1110_write_mac_address(port_priv, mac_nr, mask,
754 struct adin1110_port_priv *port_priv = netdev_priv(netdev);
765 mac_slot = (!port_priv->nr) ? ADIN_MAC_P1_ADDR_SLOT : ADIN_MAC_P2_ADDR_SLOT;
766 port_rules = adin1110_port_rules(port_priv, true, false);
768 return adin1110_write_mac_address(port_priv, mac_slot, netdev->dev_addr,
792 static int adin1110_set_promisc_mode(struct adin1110_port_priv *port_priv,
795 struct adin1110_priv *priv = port_priv->priv;
798 if (port_priv->state != BR_STATE_FORWARDING)
801 if (!port_priv->nr)
810 static int adin1110_setup_rx_mode(struct adin1110_port_priv *port_priv)
814 ret = adin1110_set_promisc_mode(port_priv,
815 !!(port_priv->flags & IFF_PROMISC));
819 ret = adin1110_multicast_filter(port_priv, ADIN_MAC_MULTICAST_ADDR_SLOT,
820 !!(port_priv->flags & IFF_ALLMULTI));
824 ret = adin1110_broadcasts_filter(port_priv,
826 !!(port_priv->flags & IFF_BROADCAST));
830 return adin1110_set_bits(port_priv->priv, ADIN1110_CONFIG1,
858 struct adin1110_port_priv *port_priv;
861 port_priv = container_of(work, struct adin1110_port_priv, rx_mode_work);
862 priv = port_priv->priv;
865 adin1110_setup_rx_mode(port_priv);
871 struct adin1110_port_priv *port_priv = netdev_priv(dev);
872 struct adin1110_priv *priv = port_priv->priv;
876 port_priv->flags = dev->flags;
877 schedule_work(&port_priv->rx_mode_work);
884 struct adin1110_port_priv *port_priv = netdev_priv(net_dev);
885 struct adin1110_priv *priv = port_priv->priv;
915 port_priv->state = BR_STATE_FORWARDING;
932 phy_start(port_priv->phydev);
941 struct adin1110_port_priv *port_priv = netdev_priv(net_dev);
942 struct adin1110_priv *priv = port_priv->priv;
946 mask = !port_priv->nr ? ADIN2111_RX_RDY_IRQ : ADIN1110_RX_RDY_IRQ;
955 netif_stop_queue(port_priv->netdev);
956 flush_work(&port_priv->tx_work);
957 phy_stop(port_priv->phydev);
964 struct adin1110_port_priv *port_priv;
969 port_priv = container_of(work, struct adin1110_port_priv, tx_work);
970 priv = port_priv->priv;
974 while ((txb = skb_dequeue(&port_priv->txq))) {
975 ret = adin1110_write_fifo(port_priv, txb);
988 struct adin1110_port_priv *port_priv = netdev_priv(dev);
989 struct adin1110_priv *priv = port_priv->priv;
999 skb_queue_tail(&port_priv->txq, skb);
1002 schedule_work(&port_priv->tx_work);
1010 struct adin1110_port_priv *port_priv = netdev_priv(dev);
1012 storage->rx_packets = port_priv->rx_packets;
1013 storage->tx_packets = port_priv->tx_packets;
1015 storage->rx_bytes = port_priv->rx_bytes;
1016 storage->tx_bytes = port_priv->tx_bytes;
1022 struct adin1110_port_priv *port_priv = netdev_priv(dev);
1023 struct adin1110_priv *priv = port_priv->priv;
1034 struct adin1110_port_priv *port_priv = netdev_priv(dev);
1037 err = snprintf(name, len, "p%d", port_priv->nr);
1152 static int adin1110_port_bridge_join(struct adin1110_port_priv *port_priv,
1155 struct adin1110_priv *priv = port_priv->priv;
1158 port_priv->bridge = bridge;
1169 return adin1110_set_mac_address(port_priv->netdev, bridge->dev_addr);
1172 static int adin1110_port_bridge_leave(struct adin1110_port_priv *port_priv,
1175 struct adin1110_priv *priv = port_priv->priv;
1178 port_priv->bridge = NULL;
1196 struct adin1110_port_priv *port_priv = netdev_priv(dev);
1207 ret = adin1110_port_bridge_join(port_priv, info->upper_dev);
1209 ret = adin1110_port_bridge_leave(port_priv, info->upper_dev);
1228 static int adin1110_port_set_forwarding_state(struct adin1110_port_priv *port_priv)
1230 struct adin1110_priv *priv = port_priv->priv;
1233 port_priv->state = BR_STATE_FORWARDING;
1236 ret = adin1110_set_mac_address(port_priv->netdev,
1237 port_priv->netdev->dev_addr);
1244 ret = adin1110_setup_rx_mode(port_priv);
1251 static int adin1110_port_set_blocking_state(struct adin1110_port_priv *port_priv)
1254 struct adin1110_priv *priv = port_priv->priv;
1260 port_priv->state = BR_STATE_BLOCKING;
1264 mac_slot = (!port_priv->nr) ? ADIN_MAC_P1_ADDR_SLOT : ADIN_MAC_P2_ADDR_SLOT;
1275 port_rules = adin1110_port_rules(port_priv, true, false);
1276 ret = adin1110_write_mac_address(port_priv, mac_slot, mac,
1288 static int adin1110_port_attr_stp_state_set(struct adin1110_port_priv *port_priv,
1293 return adin1110_port_set_forwarding_state(port_priv);
1298 return adin1110_port_set_blocking_state(port_priv);
1308 struct adin1110_port_priv *port_priv = netdev_priv(dev);
1312 return adin1110_port_attr_stp_state_set(port_priv,
1353 static int adin1110_fdb_add(struct adin1110_port_priv *port_priv,
1356 struct adin1110_priv *priv = port_priv->priv;
1364 netdev_dbg(port_priv->netdev,
1367 fdb->offloaded, port_priv->nr);
1387 other_port = priv->ports[!port_priv->nr];
1415 static int adin1110_fdb_del(struct adin1110_port_priv *port_priv,
1418 struct adin1110_priv *priv = port_priv->priv;
1423 netdev_dbg(port_priv->netdev,
1426 fdb->offloaded, port_priv->nr);
1449 struct adin1110_port_priv *port_priv;
1453 port_priv = switchdev_work->port_priv;
1455 mutex_lock(&port_priv->priv->lock);
1459 ret = adin1110_fdb_add(port_priv, &switchdev_work->fdb_info);
1461 adin1110_fdb_offload_notify(port_priv->netdev,
1465 adin1110_fdb_del(port_priv, &switchdev_work->fdb_info);
1471 mutex_unlock(&port_priv->priv->lock);
1475 dev_put(port_priv->netdev);
1483 struct adin1110_port_priv *port_priv = netdev_priv(netdev);
1495 switchdev_work->port_priv = port_priv;
1567 struct adin1110_port_priv *port_priv;
1573 netdev = devm_alloc_etherdev(dev, sizeof(*port_priv));
1577 port_priv = netdev_priv(netdev);
1578 port_priv->netdev = netdev;
1579 port_priv->priv = priv;
1580 port_priv->cfg = priv->cfg;
1581 port_priv->nr = i;
1582 priv->ports[i] = port_priv;
1590 INIT_WORK(&port_priv->tx_work, adin1110_tx_work);
1591 INIT_WORK(&port_priv->rx_mode_work, adin1110_rx_mode_work);
1592 skb_queue_head_init(&port_priv->txq);
1602 port_priv->phydev = get_phy_device(priv->mii_bus, i + 1, false);
1603 if (IS_ERR(port_priv->phydev)) {
1605 return PTR_ERR(port_priv->phydev);
1608 port_priv->phydev = phy_connect(netdev,
1609 phydev_name(port_priv->phydev),
1612 if (IS_ERR(port_priv->phydev)) {
1614 return PTR_ERR(port_priv->phydev);
1618 port_priv->phydev);