// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "third_party/iwlwifi/platform/irq.h"

#include <lib/async/dispatcher.h>

#include <memory>

#include "third_party/iwlwifi/platform/task-internal.h"

// Internally, the IRQ timers are just tasks, dispatched on the IRQ dispatcher.
struct iwl_irq_timer : public wlan::iwlwifi::TaskInternal {
 public:
  explicit iwl_irq_timer(async_dispatcher_t* dispatcher, iwl_irq_timer_func func, void* data)
      : TaskInternal(dispatcher, func, data) {}
};

zx_status_t iwl_irq_timer_create(struct device* dev, iwl_irq_timer_func func, void* data,
                                 struct iwl_irq_timer** out_timer) {
  *out_timer = new iwl_irq_timer(dev->irq_dispatcher, func, data);
  return ZX_OK;
}

zx_status_t iwl_irq_timer_start(struct iwl_irq_timer* timer, zx_duration_t delay) {
  return timer->Post(delay);
}

zx_status_t iwl_irq_timer_stop(struct iwl_irq_timer* timer) { return timer->Cancel(); }

void iwl_irq_timer_release_sync(struct iwl_irq_timer* timer) { delete timer; }
