Lines Matching +full:sw +full:- +full:exception

1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
2 /* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved */
9 /* All driver-specific traps must be documented in
127 struct prestera_switch *sw; member
146 DEVLINK_TRAP_GENERIC(EXCEPTION, TRAP, _id, \
151 DEVLINK_TRAP_DRIVER(EXCEPTION, TRAP, DEVLINK_PRESTERA_TRAP_ID_##_id, \
356 struct prestera_switch *sw = devlink_priv(dl); in prestera_dl_info_get() local
360 sw->dev->fw_rev.maj, in prestera_dl_info_get()
361 sw->dev->fw_rev.min, in prestera_dl_info_get()
362 sw->dev->fw_rev.sub); in prestera_dl_info_get()
389 dev->dev); in prestera_devlink_alloc()
394 void prestera_devlink_free(struct prestera_switch *sw) in prestera_devlink_free() argument
396 struct devlink *dl = priv_to_devlink(sw); in prestera_devlink_free()
401 void prestera_devlink_register(struct prestera_switch *sw) in prestera_devlink_register() argument
403 struct devlink *dl = priv_to_devlink(sw); in prestera_devlink_register()
408 void prestera_devlink_unregister(struct prestera_switch *sw) in prestera_devlink_unregister() argument
410 struct devlink *dl = priv_to_devlink(sw); in prestera_devlink_unregister()
417 struct prestera_switch *sw = port->sw; in prestera_devlink_port_register() local
418 struct devlink *dl = priv_to_devlink(sw); in prestera_devlink_port_register()
423 attrs.phys.port_number = port->fp_id; in prestera_devlink_port_register()
424 attrs.switch_id.id_len = sizeof(sw->id); in prestera_devlink_port_register()
425 memcpy(attrs.switch_id.id, &sw->id, attrs.switch_id.id_len); in prestera_devlink_port_register()
427 devlink_port_attrs_set(&port->dl_port, &attrs); in prestera_devlink_port_register()
429 err = devlink_port_register(dl, &port->dl_port, port->fp_id); in prestera_devlink_port_register()
431 dev_err(prestera_dev(sw), "devlink_port_register failed: %d\n", err); in prestera_devlink_port_register()
440 devlink_port_unregister(&port->dl_port); in prestera_devlink_port_unregister()
443 int prestera_devlink_traps_register(struct prestera_switch *sw) in prestera_devlink_traps_register() argument
447 struct devlink *devlink = priv_to_devlink(sw); in prestera_devlink_traps_register()
454 return -ENOMEM; in prestera_devlink_traps_register()
456 trap_data->trap_items_arr = kcalloc(traps_count, in prestera_devlink_traps_register()
459 if (!trap_data->trap_items_arr) { in prestera_devlink_traps_register()
460 err = -ENOMEM; in prestera_devlink_traps_register()
464 trap_data->sw = sw; in prestera_devlink_traps_register()
465 trap_data->traps_count = traps_count; in prestera_devlink_traps_register()
466 sw->trap_data = trap_data; in prestera_devlink_traps_register()
475 err = devlink_traps_register(devlink, &prestera_trap->trap, 1, in prestera_devlink_traps_register()
476 sw); in prestera_devlink_traps_register()
484 for (i--; i >= 0; i--) { in prestera_devlink_traps_register()
486 devlink_traps_unregister(devlink, &prestera_trap->trap, 1); in prestera_devlink_traps_register()
491 kfree(trap_data->trap_items_arr); in prestera_devlink_traps_register()
498 prestera_get_trap_item_by_cpu_code(struct prestera_switch *sw, u8 cpu_code) in prestera_get_trap_item_by_cpu_code() argument
500 struct prestera_trap_data *trap_data = sw->trap_data; in prestera_get_trap_item_by_cpu_code()
504 for (i = 0; i < trap_data->traps_count; i++) { in prestera_get_trap_item_by_cpu_code()
506 if (cpu_code == prestera_trap->cpu_code) in prestera_get_trap_item_by_cpu_code()
507 return &trap_data->trap_items_arr[i]; in prestera_get_trap_item_by_cpu_code()
519 devlink = port->dl_port.devlink; in prestera_devlink_trap_report()
521 trap_item = prestera_get_trap_item_by_cpu_code(port->sw, cpu_code); in prestera_devlink_trap_report()
525 devlink_trap_report(devlink, skb, trap_item->trap_ctx, in prestera_devlink_trap_report()
526 &port->dl_port, NULL); in prestera_devlink_trap_report()
530 prestera_devlink_trap_item_lookup(struct prestera_switch *sw, u16 trap_id) in prestera_devlink_trap_item_lookup() argument
532 struct prestera_trap_data *trap_data = sw->trap_data; in prestera_devlink_trap_item_lookup()
537 return &trap_data->trap_items_arr[i]; in prestera_devlink_trap_item_lookup()
546 struct prestera_switch *sw = devlink_priv(devlink); in prestera_trap_init() local
549 trap_item = prestera_devlink_trap_item_lookup(sw, trap->id); in prestera_trap_init()
551 return -EINVAL; in prestera_trap_init()
553 trap_item->trap_ctx = trap_ctx; in prestera_trap_init()
554 trap_item->action = trap->init_action; in prestera_trap_init()
565 return -EOPNOTSUPP; in prestera_trap_action_set()
572 struct prestera_switch *sw = devlink_priv(devlink); in prestera_drop_counter_get() local
578 return prestera_hw_cpu_code_counters_get(sw, prestera_trap->cpu_code, in prestera_drop_counter_get()
582 void prestera_devlink_traps_unregister(struct prestera_switch *sw) in prestera_devlink_traps_unregister() argument
584 struct prestera_trap_data *trap_data = sw->trap_data; in prestera_devlink_traps_unregister()
585 struct devlink *dl = priv_to_devlink(sw); in prestera_devlink_traps_unregister()
596 kfree(trap_data->trap_items_arr); in prestera_devlink_traps_unregister()