Lines Matching refs:sw

93 struct prestera_port *prestera_port_find_by_hwid(struct prestera_switch *sw,
98 read_lock(&sw->port_list_lock);
99 list_for_each_entry(tmp, &sw->port_list, list) {
105 read_unlock(&sw->port_list_lock);
110 struct prestera_port *prestera_find_port(struct prestera_switch *sw, u32 id)
114 read_lock(&sw->port_list_lock);
115 list_for_each_entry(tmp, &sw->port_list, list) {
121 read_unlock(&sw->port_list_lock);
131 return port ? port->sw : NULL;
371 struct prestera_switch *sw = port->sw;
377 if (!sw->np)
380 of_node_get(sw->np);
381 ports = of_find_node_by_name(sw->np, "ports");
388 dev_err(sw->dev->dev,
458 if (memcmp(port->sw->base_mac, addr, ETH_ALEN - 1))
591 write_lock(&port->sw->port_list_lock);
592 list_add(&port->list, &port->sw->port_list);
593 write_unlock(&port->sw->port_list_lock);
598 write_lock(&port->sw->port_list_lock);
600 write_unlock(&port->sw->port_list_lock);
603 static int prestera_port_create(struct prestera_switch *sw, u32 id)
621 port->sw = sw;
628 dev_err(prestera_dev(sw), "Failed to get port(%u) info\n", id);
639 SET_NETDEV_DEV(dev, sw->dev->dev);
645 dev->mtu = min_t(unsigned int, sw->mtu_max, PRESTERA_MTU_DEFAULT);
646 dev->min_mtu = sw->mtu_min;
647 dev->max_mtu = sw->mtu_max;
651 dev_err(prestera_dev(sw), "Failed to set port(%u) mtu(%d)\n",
661 eth_hw_addr_gen(dev, sw->base_mac, port->fp_id);
665 if (memcmp(dev->dev_addr, sw->base_mac, ETH_ALEN - 1)) {
666 dev_warn(prestera_dev(sw), "Port MAC address wraps for port(%u)\n", id);
667 dev_addr_mod(dev, 0, sw->base_mac, ETH_ALEN - 1);
672 dev_err(prestera_dev(sw), "Failed to set port(%u) mac addr\n", id);
678 dev_err(prestera_dev(sw), "Failed to get port(%u) caps\n", id);
701 dev_err(prestera_dev(sw),
715 dev_err(prestera_dev(sw),
763 static void prestera_destroy_ports(struct prestera_switch *sw)
767 list_for_each_entry_safe(port, tmp, &sw->port_list, list)
771 static int prestera_create_ports(struct prestera_switch *sw)
777 for (port_idx = 0; port_idx < sw->port_count; port_idx++) {
778 err = prestera_port_create(sw, port_idx);
786 list_for_each_entry_safe(port, tmp, &sw->port_list, list) {
794 static void prestera_port_handle_event(struct prestera_switch *sw,
804 port = prestera_find_port(sw, pevt->port_id);
842 static int prestera_event_handlers_register(struct prestera_switch *sw)
844 return prestera_hw_event_handler_register(sw, PRESTERA_EVENT_TYPE_PORT,
849 static void prestera_event_handlers_unregister(struct prestera_switch *sw)
851 prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_PORT,
855 static int prestera_switch_set_base_mac_addr(struct prestera_switch *sw)
859 if (sw->np)
860 ret = of_get_mac_address(sw->np, sw->base_mac);
861 if (!is_valid_ether_addr(sw->base_mac) || ret) {
862 eth_random_addr(sw->base_mac);
863 dev_info(prestera_dev(sw), "using random base mac address\n");
866 return prestera_hw_switch_mac_set(sw, sw->base_mac);
869 struct prestera_lag *prestera_lag_by_id(struct prestera_switch *sw, u16 id)
871 return id < sw->lag_max ? &sw->lags[id] : NULL;
874 static struct prestera_lag *prestera_lag_by_dev(struct prestera_switch *sw,
880 for (id = 0; id < sw->lag_max; id++) {
881 lag = &sw->lags[id];
889 int prestera_lag_id(struct prestera_switch *sw,
896 for (id = 0; id < sw->lag_max; id++) {
897 lag = prestera_lag_by_id(sw, id);
913 static struct prestera_lag *prestera_lag_create(struct prestera_switch *sw,
919 for (id = 0; id < sw->lag_max; id++) {
920 lag = &sw->lags[id];
932 static void prestera_lag_destroy(struct prestera_switch *sw,
943 struct prestera_switch *sw = port->sw;
947 lag = prestera_lag_by_dev(sw, lag_dev);
949 lag = prestera_lag_create(sw, lag_dev);
954 if (lag->member_count >= sw->lag_member_max)
960 prestera_lag_destroy(sw, lag);
973 struct prestera_switch *sw = port->sw;
997 prestera_lag_destroy(sw, lag);
1012 static int prestera_lag_init(struct prestera_switch *sw)
1016 sw->lags = kcalloc(sw->lag_max, sizeof(*sw->lags), GFP_KERNEL);
1017 if (!sw->lags)
1020 for (id = 0; id < sw->lag_max; id++)
1021 sw->lags[id].lag_id = id;
1026 static void prestera_lag_fini(struct prestera_switch *sw)
1030 for (idx = 0; idx < sw->lag_max; idx++)
1031 WARN_ON(sw->lags[idx].member_count);
1033 kfree(sw->lags);
1205 prestera_mdb_entry_create(struct prestera_switch *sw,
1215 flood_domain = prestera_flood_domain_create(sw);
1219 mdb_entry->sw = sw;
1245 prestera_flood_domain_create(struct prestera_switch *sw)
1253 domain->sw = sw;
1348 static int prestera_netdev_event_handler_register(struct prestera_switch *sw)
1350 sw->netdev_nb.notifier_call = prestera_netdev_event_handler;
1352 return register_netdevice_notifier(&sw->netdev_nb);
1355 static void prestera_netdev_event_handler_unregister(struct prestera_switch *sw)
1357 unregister_netdevice_notifier(&sw->netdev_nb);
1360 static int prestera_switch_init(struct prestera_switch *sw)
1364 sw->np = sw->dev->dev->of_node;
1366 err = prestera_hw_switch_init(sw);
1368 dev_err(prestera_dev(sw), "Failed to init Switch device\n");
1372 rwlock_init(&sw->port_list_lock);
1373 INIT_LIST_HEAD(&sw->port_list);
1375 err = prestera_switch_set_base_mac_addr(sw);
1379 err = prestera_netdev_event_handler_register(sw);
1383 err = prestera_router_init(sw);
1387 err = prestera_switchdev_init(sw);
1391 err = prestera_rxtx_switch_init(sw);
1395 err = prestera_event_handlers_register(sw);
1399 err = prestera_counter_init(sw);
1403 err = prestera_acl_init(sw);
1407 err = prestera_span_init(sw);
1411 err = prestera_devlink_traps_register(sw);
1415 err = prestera_lag_init(sw);
1419 err = prestera_create_ports(sw);
1423 prestera_devlink_register(sw);
1427 prestera_lag_fini(sw);
1429 prestera_devlink_traps_unregister(sw);
1431 prestera_span_fini(sw);
1433 prestera_acl_fini(sw);
1435 prestera_counter_fini(sw);
1437 prestera_event_handlers_unregister(sw);
1439 prestera_rxtx_switch_fini(sw);
1441 prestera_switchdev_fini(sw);
1443 prestera_router_fini(sw);
1445 prestera_netdev_event_handler_unregister(sw);
1446 prestera_hw_switch_fini(sw);
1451 static void prestera_switch_fini(struct prestera_switch *sw)
1453 prestera_devlink_unregister(sw);
1454 prestera_destroy_ports(sw);
1455 prestera_lag_fini(sw);
1456 prestera_devlink_traps_unregister(sw);
1457 prestera_span_fini(sw);
1458 prestera_acl_fini(sw);
1459 prestera_counter_fini(sw);
1460 prestera_event_handlers_unregister(sw);
1461 prestera_rxtx_switch_fini(sw);
1462 prestera_switchdev_fini(sw);
1463 prestera_router_fini(sw);
1464 prestera_netdev_event_handler_unregister(sw);
1465 prestera_hw_switch_fini(sw);
1466 of_node_put(sw->np);
1471 struct prestera_switch *sw;
1474 sw = prestera_devlink_alloc(dev);
1475 if (!sw)
1478 dev->priv = sw;
1479 sw->dev = dev;
1481 err = prestera_switch_init(sw);
1483 prestera_devlink_free(sw);
1493 struct prestera_switch *sw = dev->priv;
1495 prestera_switch_fini(sw);
1496 prestera_devlink_free(sw);