// 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 <lib/ddk/binding_driver.h>
#include <lib/ddk/debug.h>
#include <lib/ddk/device.h>
#include <lib/ddk/driver.h>

#include "src/devices/misc/drivers/compat/v1_test.h"

namespace {

zx_status_t v1_test_init(void** out_ctx) {
  zxlogf(INFO, "v1_test_init");
  // We expect the test to delete `V1Test`.
  *out_ctx = new V1Test{};
  return ZX_OK;
}

zx_status_t v1_test_create(void* ctx, zx_device_t* dev, const char* name, zx_handle_t channel) {
  zxlogf(INFO, "v1_test_create: %s", name);
  zx_handle_close(channel);
  static_cast<V1Test*>(ctx)->did_create = true;
  device_add_args_t args{
      .name = "v1",
  };
  zx_device_t* out = nullptr;
  return device_add(dev, &args, &out);
}

void v1_test_release(void* ctx) {
  zxlogf(INFO, "v1_test_release");
  static_cast<V1Test*>(ctx)->did_release = true;
}

constexpr zx_driver_ops_t driver_ops = [] {
  zx_driver_ops_t ops = {};
  ops.version = DRIVER_OPS_VERSION;
  ops.init = v1_test_init;
  ops.create = v1_test_create;
  ops.release = v1_test_release;
  return ops;
}();

}  // namespace

ZIRCON_DRIVER(v1_create_test, driver_ops, "zircon", "0.1");
