blob: 2797626bfe14ccccb50621c03014130d54c618e2 [file] [log] [blame]
// Copyright 2017 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.
#pragma once
#include <zircon/compiler.h>
#include <ddk/device.h>
#include <ddk/protocol/block.h>
#include <hw/sdmmc.h>
__BEGIN_CDECLS;
typedef struct sdmmc {
zx_device_t* mxdev;
zx_device_t* host_mxdev;
uint8_t type;
#define SDMMC_TYPE_SD 0
#define SDMMC_TYPE_MMC 1
uint8_t bus_width; // Data bus width
uint8_t signal_voltage; // Bus signal voltage
uint8_t timing; // Bus timing
#define SDMMC_TIMING_LEGACY 0
#define SDMMC_TIMING_HS 1
#define SDMMC_TIMING_HS200 2
#define SDMMC_TIMING_HS400 3
unsigned clock_rate; // Bus clock rate
uint64_t capacity; // Card capacity
uint16_t rca; // Relative address
uint32_t raw_cid[4];
uint32_t raw_csd[4];
uint8_t raw_ext_csd[512];
block_callbacks_t* callbacks;
} sdmmc_t;
// Issue a command to the host controller
zx_status_t sdmmc_do_command(zx_device_t* dev, const uint32_t cmd, const uint32_t arg, iotxn_t* txn);
zx_status_t sdmmc_probe_sd(sdmmc_t* sdmmc, iotxn_t* setup_txn);
zx_status_t sdmmc_probe_mmc(sdmmc_t* sdmmc, iotxn_t* setup_txn);
__END_CDECLS;