Lines Matching full:sw

50 struct prestera_port *prestera_port_find_by_hwid(struct prestera_switch *sw,  in prestera_port_find_by_hwid()  argument
55 read_lock(&sw->port_list_lock); in prestera_port_find_by_hwid()
56 list_for_each_entry(port, &sw->port_list, list) { in prestera_port_find_by_hwid()
60 read_unlock(&sw->port_list_lock); in prestera_port_find_by_hwid()
65 struct prestera_port *prestera_find_port(struct prestera_switch *sw, u32 id) in prestera_find_port() argument
69 read_lock(&sw->port_list_lock); in prestera_find_port()
70 list_for_each_entry(port, &sw->port_list, list) { in prestera_find_port()
74 read_unlock(&sw->port_list_lock); in prestera_find_port()
121 if (memcmp(port->sw->base_mac, addr, ETH_ALEN - 1)) in prestera_is_valid_mac_addr()
263 write_lock(&port->sw->port_list_lock); in prestera_port_list_add()
264 list_add(&port->list, &port->sw->port_list); in prestera_port_list_add()
265 write_unlock(&port->sw->port_list_lock); in prestera_port_list_add()
270 write_lock(&port->sw->port_list_lock); in prestera_port_list_del()
272 write_unlock(&port->sw->port_list_lock); in prestera_port_list_del()
275 static int prestera_port_create(struct prestera_switch *sw, u32 id) in prestera_port_create() argument
291 port->sw = sw; in prestera_port_create()
296 dev_err(prestera_dev(sw), "Failed to get port(%u) info\n", id); in prestera_port_create()
310 dev->mtu = min_t(unsigned int, sw->mtu_max, PRESTERA_MTU_DEFAULT); in prestera_port_create()
311 dev->min_mtu = sw->mtu_min; in prestera_port_create()
312 dev->max_mtu = sw->mtu_max; in prestera_port_create()
316 dev_err(prestera_dev(sw), "Failed to set port(%u) mtu(%d)\n", in prestera_port_create()
329 memcpy(dev->dev_addr, sw->base_mac, dev->addr_len - 1); in prestera_port_create()
334 dev_err(prestera_dev(sw), "Failed to set port(%u) mac addr\n", id); in prestera_port_create()
340 dev_err(prestera_dev(sw), "Failed to get port(%u) caps\n", id); in prestera_port_create()
350 dev_err(prestera_dev(sw), "Failed to set port(%u) down\n", id); in prestera_port_create()
393 static void prestera_destroy_ports(struct prestera_switch *sw) in prestera_destroy_ports() argument
397 list_for_each_entry_safe(port, tmp, &sw->port_list, list) in prestera_destroy_ports()
401 static int prestera_create_ports(struct prestera_switch *sw) in prestera_create_ports() argument
407 for (port_idx = 0; port_idx < sw->port_count; port_idx++) { in prestera_create_ports()
408 err = prestera_port_create(sw, port_idx); in prestera_create_ports()
416 list_for_each_entry_safe(port, tmp, &sw->port_list, list) in prestera_create_ports()
422 static void prestera_port_handle_event(struct prestera_switch *sw, in prestera_port_handle_event() argument
428 port = prestera_find_port(sw, evt->port_evt.port_id); in prestera_port_handle_event()
447 static int prestera_event_handlers_register(struct prestera_switch *sw) in prestera_event_handlers_register() argument
449 return prestera_hw_event_handler_register(sw, PRESTERA_EVENT_TYPE_PORT, in prestera_event_handlers_register()
454 static void prestera_event_handlers_unregister(struct prestera_switch *sw) in prestera_event_handlers_unregister() argument
456 prestera_hw_event_handler_unregister(sw, PRESTERA_EVENT_TYPE_PORT, in prestera_event_handlers_unregister()
460 static int prestera_switch_set_base_mac_addr(struct prestera_switch *sw) in prestera_switch_set_base_mac_addr() argument
472 ether_addr_copy(sw->base_mac, base_mac); in prestera_switch_set_base_mac_addr()
474 if (!is_valid_ether_addr(sw->base_mac)) { in prestera_switch_set_base_mac_addr()
475 eth_random_addr(sw->base_mac); in prestera_switch_set_base_mac_addr()
476 dev_info(prestera_dev(sw), "using random base mac address\n"); in prestera_switch_set_base_mac_addr()
479 return prestera_hw_switch_mac_set(sw, sw->base_mac); in prestera_switch_set_base_mac_addr()
539 static int prestera_netdev_event_handler_register(struct prestera_switch *sw) in prestera_netdev_event_handler_register() argument
541 sw->netdev_nb.notifier_call = prestera_netdev_event_handler; in prestera_netdev_event_handler_register()
543 return register_netdevice_notifier(&sw->netdev_nb); in prestera_netdev_event_handler_register()
546 static void prestera_netdev_event_handler_unregister(struct prestera_switch *sw) in prestera_netdev_event_handler_unregister() argument
548 unregister_netdevice_notifier(&sw->netdev_nb); in prestera_netdev_event_handler_unregister()
551 static int prestera_switch_init(struct prestera_switch *sw) in prestera_switch_init() argument
555 err = prestera_hw_switch_init(sw); in prestera_switch_init()
557 dev_err(prestera_dev(sw), "Failed to init Switch device\n"); in prestera_switch_init()
561 rwlock_init(&sw->port_list_lock); in prestera_switch_init()
562 INIT_LIST_HEAD(&sw->port_list); in prestera_switch_init()
564 err = prestera_switch_set_base_mac_addr(sw); in prestera_switch_init()
568 err = prestera_netdev_event_handler_register(sw); in prestera_switch_init()
572 err = prestera_switchdev_init(sw); in prestera_switch_init()
576 err = prestera_rxtx_switch_init(sw); in prestera_switch_init()
580 err = prestera_event_handlers_register(sw); in prestera_switch_init()
584 err = prestera_devlink_register(sw); in prestera_switch_init()
588 err = prestera_create_ports(sw); in prestera_switch_init()
595 prestera_devlink_unregister(sw); in prestera_switch_init()
597 prestera_event_handlers_unregister(sw); in prestera_switch_init()
599 prestera_rxtx_switch_fini(sw); in prestera_switch_init()
601 prestera_switchdev_fini(sw); in prestera_switch_init()
603 prestera_netdev_event_handler_unregister(sw); in prestera_switch_init()
604 prestera_hw_switch_fini(sw); in prestera_switch_init()
609 static void prestera_switch_fini(struct prestera_switch *sw) in prestera_switch_fini() argument
611 prestera_destroy_ports(sw); in prestera_switch_fini()
612 prestera_devlink_unregister(sw); in prestera_switch_fini()
613 prestera_event_handlers_unregister(sw); in prestera_switch_fini()
614 prestera_rxtx_switch_fini(sw); in prestera_switch_fini()
615 prestera_switchdev_fini(sw); in prestera_switch_fini()
616 prestera_netdev_event_handler_unregister(sw); in prestera_switch_fini()
617 prestera_hw_switch_fini(sw); in prestera_switch_fini()
622 struct prestera_switch *sw; in prestera_device_register() local
625 sw = prestera_devlink_alloc(); in prestera_device_register()
626 if (!sw) in prestera_device_register()
629 dev->priv = sw; in prestera_device_register()
630 sw->dev = dev; in prestera_device_register()
632 err = prestera_switch_init(sw); in prestera_device_register()
634 prestera_devlink_free(sw); in prestera_device_register()
644 struct prestera_switch *sw = dev->priv; in prestera_device_unregister() local
646 prestera_switch_fini(sw); in prestera_device_unregister()
647 prestera_devlink_free(sw); in prestera_device_unregister()