blob: 061d36abb89dba38002cc9716fbb818e9d177bbf [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.
#pragma once
#include <zircon/compiler.h>
#include <ddk/protocol/sdio.h>
typedef struct sdio_func_tuple {
uint8_t t_code;
uint8_t t_body_size;
uint8_t *t_body;
} sdio_func_tuple_t;
typedef struct sdio_function {
sdio_func_hw_info_t hw_info;
uint16_t cur_blk_size;
bool enabled;
bool intr_enabled;
} sdio_function_t;
typedef struct sdio_device {
sdio_device_hw_info_t hw_info;
sdio_function_t funcs[SDIO_MAX_FUNCS];
} sdio_device_t;
static inline bool sdio_fn_idx_valid(uint8_t fn_idx) {
return (fn_idx < SDIO_MAX_FUNCS);
}
static inline bool sdio_is_uhs_supported(uint32_t hw_caps) {
return ((hw_caps & SDIO_CARD_UHS_SDR50) || (hw_caps & SDIO_CARD_UHS_SDR104) ||
(hw_caps & SDIO_CARD_UHS_DDR50));
}
static inline void update_bits(uint32_t *x, uint32_t mask, uint32_t loc, uint32_t val) {
*x &= ~mask;
*x |= ((val << loc) & mask);
}
static inline uint32_t get_bits(uint32_t x, uint32_t mask, uint32_t loc) {
return (x & mask) >> loc;
}
static inline bool get_bit(uint32_t x, uint32_t mask) {
return (x & mask) ? 1 : 0;
}
static inline void update_bits_u8(uint8_t *x, uint8_t mask, uint8_t loc, uint8_t val) {
*x &= ~mask;
*x |= ((val << loc) & mask);
}
static inline uint32_t get_bits_u8(uint8_t x, uint8_t mask, uint8_t loc) {
return (x & mask) >> loc;
}
static inline bool get_bit_u8(uint8_t x, uint8_t mask) {
return (x & mask) ? 1 : 0;
}