#[cfg(all(feature = "dma", feature = "pio"))]
compile_error!("can't enable feature dma and pio at the same time!");
use crate::mci::constants::MCIId;
use super::sd::constants::{SD_BLOCK_SIZE, SD_CLOCK_50MHZ, SD_MAX_RW_BLK};
#[allow(unused)]
pub struct MCIHostConfig {
pub(crate) host_id: MCIId,
pub(crate) host_type: MCIHostType,
pub(crate) card_type: MCIHostCardType,
pub(crate) enable_irq: bool,
pub(crate) enable_dma: bool,
pub(crate) endian_mode: MCIHostEndianMode,
pub(crate) max_trans_size: usize,
pub(crate) def_block_size: usize,
pub(crate) card_clock: u32,
pub(crate) is_uhs_card: bool,
}
#[allow(unused)]
impl MCIHostConfig {
#[cfg(feature = "dma")]
pub fn new() -> Self {
Self {
host_id: MCIId::MCI1,
host_type: MCIHostType::SDIF,
card_type: MCIHostCardType::MicroSD,
enable_irq: false, enable_dma: true,
endian_mode: MCIHostEndianMode::Little,
max_trans_size: SD_MAX_RW_BLK * SD_BLOCK_SIZE,
def_block_size: SD_BLOCK_SIZE,
card_clock: SD_CLOCK_50MHZ,
is_uhs_card: false, }
}
#[cfg(feature = "pio")]
pub fn new() -> Self {
Self {
host_id: MCIId::MCI0,
host_type: MCIHostType::SDIF,
card_type: MCIHostCardType::MicroSD,
enable_irq: false, enable_dma: false,
endian_mode: MCIHostEndianMode::Little,
max_trans_size: SD_MAX_RW_BLK * SD_BLOCK_SIZE,
def_block_size: SD_BLOCK_SIZE,
card_clock: SD_CLOCK_50MHZ,
is_uhs_card: false,
}
}
}
#[allow(unused)]
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum MCIHostType {
SDMMC,
SDIF,
}
#[allow(unused)]
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum MCIHostCardType {
StandardSD,
MicroSD,
EMMC,
SDIO,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum MCIHostEndianMode {
Big = 0,
HalfWordBig = 1,
Little = 2,
}