blob: b78d4e4ef0485918449bb0aa8477615a7fedfa55 [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_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_