blob: e4b1578ee840fc97fa394e6ba91caa39fd8e8932 [file] [log] [blame]
// Copyright 2018 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.
library ddk.protocol.sdio;
using zx;
const uint8 SDIO_FN_0 = 0;
const uint8 SDIO_FN_1 = 0;
const uint8 SDIO_FN_2 = 0;
/// Including func 0
const uint8 SDIO_MAX_FUNCS = 8;
struct SdioFuncHwInfo {
uint32 manufacturer_id;
uint32 product_id;
uint32 max_blk_size;
uint32 max_tran_speed;
uint8 fn_intf_code;
};
enum SDIO_CARD : uint32 {
MULTI_BLOCK = 0x1;
SRW = 0x2;
DIRECT_COMMAND = 0x4;
SUSPEND_RESUME = 0x8;
LOW_SPEED = 0x10;
HIGH_SPEED = 0x20;
HIGH_POWER = 0x40;
FOUR_BIT_BUS = 0x80;
HS_SDR12 = 0x100;
HS_SDR25 = 0x200;
UHS_SDR50 = 0x400;
UHS_SDR104 = 0x800;
UHS_DDR50 = 0x1000;
TYPE_A = 0x2000;
TYPE_B = 0x4000;
TYPE_C = 0x8000;
TYPE_D = 0x10000;
};
struct SdioDeviceHwInfo {
/// number of sdio funcs
uint32 num_funcs;
uint32 sdio_vsn;
uint32 cccr_vsn;
uint32 caps;
};
struct SdioHwInfo {
SdioDeviceHwInfo dev_hw_info;
array<SdioFuncHwInfo>:SDIO_MAX_FUNCS funcs_hw_info;
uint32 host_max_transfer_size;
};
struct SdioRwTxn {
uint32 addr;
uint32 data_size;
bool incr;
bool fifo;
bool write;
bool use_dma;
/// Used if use_dma is true
handle<vmo> dma_vmo;
/// Used if use_dma is false
vector<void> virt;
/// offset into dma_vmo or virt
uint64 buf_offset;
};
[Layout="ddk-protocol"]
interface Sdio {
1: GetDevHwInfo() -> (zx.status s, SdioHwInfo hw_info);
3: EnableFn(uint8 fn_idx) -> (zx.status s);
4: DisableFn(uint8 fn_idx) -> (zx.status s);
5: EnableFnIntr(uint8 fn_idx) -> (zx.status s);
6: DisableFnIntr(uint8 fn_idx) -> (zx.status s);
7: UpdateBlockSize(uint8 fn_idx, uint16 blk_sz, bool deflt) -> (zx.status s);
8: GetBlockSize(uint8 fn_idx) -> (zx.status s, uint16 cur_blk_size);
9: DoRwTxn(uint8 fn_idx, SdioRwTxn? txn) -> (zx.status s);
};