// Copyright 2019 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.

#ifndef SRC_STORAGE_BLOCK_DRIVERS_MSM8X53_SDHCI_MSM8X53_SDHCI_H_
#define SRC_STORAGE_BLOCK_DRIVERS_MSM8X53_SDHCI_MSM8X53_SDHCI_H_

#include <lib/mmio/mmio.h>

#include <ddktl/device.h>
#include <ddktl/protocol/sdhci.h>

namespace sdhci {

class Msm8x53Sdhci;
using DeviceType = ddk::Device<Msm8x53Sdhci>;

class Msm8x53Sdhci : public DeviceType,
                     public ddk::SdhciProtocol<Msm8x53Sdhci, ddk::base_protocol> {
 public:
  static zx_status_t Create(void* ctx, zx_device_t* parent);

  virtual ~Msm8x53Sdhci() = default;

  void DdkRelease() { delete this; }

  zx_status_t Init();

  zx_status_t SdhciGetInterrupt(zx::interrupt* out_irq);
  zx_status_t SdhciGetMmio(zx::vmo* out_mmio, zx_off_t* out_offset);
  zx_status_t SdhciGetBti(uint32_t index, zx::bti* out_bti);
  uint32_t SdhciGetBaseClock();
  uint64_t SdhciGetQuirks(uint64_t* out_dma_boundary_alignment);
  void SdhciHwReset();

 private:
  Msm8x53Sdhci(zx_device_t* parent, ddk::MmioBuffer core_mmio, ddk::MmioBuffer hc_mmio,
               zx::interrupt irq)
      : DeviceType(parent),
        core_mmio_(std::move(core_mmio)),
        hc_mmio_(std::move(hc_mmio)),
        irq_(std::move(irq)) {}

  int IrqThread();

  ddk::MmioBuffer core_mmio_;
  ddk::MmioBuffer hc_mmio_;
  zx::interrupt irq_;
};

}  // namespace sdhci

#endif  // SRC_STORAGE_BLOCK_DRIVERS_MSM8X53_SDHCI_MSM8X53_SDHCI_H_
