Exemplo n.º 1
0
void BcmUnit::attach() {
  if (attached_.load(std::memory_order_acquire)) {
    throw FbossError("unit ", unit_, " already initialized");
  }

  auto rv = opennsl_switch_event_register(unit_, switchEventCallback, this);
  bcmCheckError(rv, "unable to register switch event callback for unit ",
                unit_);

  attached_.store(true, std::memory_order_release);
}
/*
 * Register hw trigger callback
 *
 * @notes  callback will be executed in driver thread so post the data
 *           to respective task.
 *
 */
void
bst_switch_event_register(bool enable)
{
    int hw_unit = 0;
    static bool event_registered = false;

    for (hw_unit = 0; hw_unit <= MAX_SWITCH_UNIT_ID; hw_unit++) {
        if (enable) {
            opennsl_switch_event_register(hw_unit,
                        (opennsl_switch_event_cb_t)bst_switch_event_callback,
                        (void *)&trigger_user_data[hw_unit]);
            event_registered = true;
        } else if (!enable && event_registered) {
            opennsl_switch_event_unregister(hw_unit,
                        (opennsl_switch_event_cb_t)bst_switch_event_callback,
                        (void *)&trigger_user_data[hw_unit]);
            event_registered = false;
        }
    }
}