blob: a8ef4f94257c1b038d5e9db888af6694ce24d568 [file] [log] [blame]
// 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_DEVICES_BLOCK_DRIVERS_AS370_SDHCI_AS370_SDHCI_H_
#define SRC_DEVICES_BLOCK_DRIVERS_AS370_SDHCI_AS370_SDHCI_H_
#include <fuchsia/hardware/sdhci/cpp/banjo.h>
#include <lib/mmio/mmio.h>
#include <ddktl/device.h>
namespace sdhci {
class As370Sdhci;
using DeviceType = ddk::Device<As370Sdhci>;
class As370Sdhci : public DeviceType, public ddk::SdhciProtocol<As370Sdhci, ddk::base_protocol> {
public:
static zx_status_t Create(void* ctx, zx_device_t* parent);
virtual ~As370Sdhci() = 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:
As370Sdhci(zx_device_t* parent, ddk::MmioBuffer core_mmio, zx::interrupt irq, uint32_t did,
zx::bti bti)
: DeviceType(parent),
core_mmio_(std::move(core_mmio)),
irq_(std::move(irq)),
did_(did),
bti_(std::move(bti)) {}
int IrqThread();
ddk::MmioBuffer core_mmio_;
zx::interrupt irq_;
uint32_t did_;
zx::bti bti_;
};
} // namespace sdhci
#endif // SRC_DEVICES_BLOCK_DRIVERS_AS370_SDHCI_AS370_SDHCI_H_