// 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 #include 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; }