LCOV - code coverage report
Current view: top level - zephyr/sd - sd.h Hit Total Coverage
Test: new.info Lines: 30 31 96.8 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright 2022 NXP
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /**
       8             :  * @file
       9             :  * @brief Public API for SD subsystem
      10             :  */
      11             : 
      12             : #ifndef ZEPHYR_INCLUDE_SD_SD_H_
      13             : #define ZEPHYR_INCLUDE_SD_SD_H_
      14             : 
      15             : #include <zephyr/device.h>
      16             : #include <zephyr/drivers/sdhc.h>
      17             : #include <zephyr/kernel.h>
      18             : 
      19             : #ifdef __cplusplus
      20             : extern "C" {
      21             : #endif
      22             : 
      23             : /**
      24             :  * @brief card status. Used internally by subsystem.
      25             :  */
      26           1 : enum card_status {
      27             :         CARD_UNINITIALIZED = 0, /*!< card has not been initialized */
      28             :         CARD_ERROR = 1, /*!< card state is error */
      29             :         CARD_INITIALIZED = 2, /*!< card is in valid state */
      30             : };
      31             : 
      32             : /**
      33             :  * @brief card type. Used internally by subsystem.
      34             :  */
      35           1 : enum card_type {
      36             :         CARD_SDMMC = 0, /*!< SD memory card */
      37             :         CARD_SDIO = 1, /*!< SD I/O card */
      38             :         CARD_COMBO = 2, /*!< SD memory and I/O card */
      39             :         CARD_MMC = 3, /*!< MMC memory card */
      40             : };
      41             : 
      42             : /**
      43             :  * @brief SDIO function definition
      44             :  *
      45             :  * SDIO function definition. Used to store function information
      46             :  * per each SDIO function
      47             :  */
      48           1 : struct sdio_func {
      49           1 :         enum sdio_func_num num; /*!< Function number */
      50           1 :         struct sd_card *card; /*!< Card this function is present on */
      51           1 :         struct sdio_cis cis; /*!< CIS tuple data for this function */
      52           1 :         uint16_t block_size; /*!< Current block size for this function */
      53             : };
      54             : 
      55             : 
      56             : /**
      57             :  * @brief SD card structure
      58             :  *
      59             :  * This structure is used by the subsystem to track an individual SD
      60             :  * device connected to the system. The application may access these
      61             :  * fields, but use caution when changing values.
      62             :  */
      63           1 : struct sd_card {
      64           1 :         const struct device *sdhc; /*!< SD host controller for card */
      65           1 :         struct sdhc_io bus_io; /*!< Current bus I/O props for SDHC */
      66           1 :         enum sd_voltage card_voltage; /*!< Card signal voltage */
      67           1 :         struct k_mutex lock; /*!< card mutex */
      68           1 :         struct sdhc_host_props host_props; /*!< SDHC host properties */
      69           1 :         uint32_t ocr; /*!< Raw card OCR content */
      70           1 :         struct sd_switch_caps switch_caps; /*!< SD switch capabilities */
      71           1 :         unsigned int num_io: 3; /*!< I/O function count. 0 for SD cards */
      72           1 :         uint16_t relative_addr; /*!< Card relative address */
      73           1 :         uint32_t block_count; /*!< Number of blocks in SD card */
      74           1 :         uint16_t block_size; /*!< SD block size */
      75           1 :         uint8_t sd_version; /*!< SD specification version */
      76           1 :         uint8_t card_speed; /*!< Card timing mode */
      77           1 :         enum card_status status; /*!< Card status */
      78           1 :         enum card_type type; /*!< Card type */
      79           1 :         uint16_t flags; /*!< Card flags */
      80           1 :         uint8_t bus_width; /*!< Desired bus width */
      81           1 :         uint32_t cccr_flags; /*!< SDIO CCCR data */
      82           1 :         struct sdio_func func0; /*!< Function 0 common card data */
      83             : 
      84             :         /* NOTE: The buffer is accessed as a uint32_t* by the SD subsystem, so must be
      85             :          * aligned to 4 bytes for platforms that don't support unaligned access...
      86             :          * Systems where the buffer is accessed by DMA may require wider alignment, in
      87             :          * which case, use CONFIG_SDHC_BUFFER_ALIGNMENT.
      88             :          */
      89           0 :         uint8_t card_buffer[CONFIG_SD_BUFFER_SIZE]
      90             :                 __aligned(MAX(4, CONFIG_SDHC_BUFFER_ALIGNMENT)); /* Card internal buffer */
      91             : };
      92             : 
      93             : /**
      94             :  * @brief Initialize an SD device
      95             :  *
      96             :  * Initializes an SD device to use with the subsystem. After this call,
      97             :  * only the SD card structure is required to access the card.
      98             :  * @param sdhc_dev SD host controller device for this card
      99             :  * @param card SD card structure for this card
     100             :  * @retval 0 card was initialized
     101             :  * @retval -ETIMEDOUT: card initialization timed out
     102             :  * @retval -EBUSY: card is busy
     103             :  * @retval -EIO: IO error while starting card
     104             :  */
     105           1 : int sd_init(const struct device *sdhc_dev, struct sd_card *card);
     106             : 
     107             : /**
     108             :  * @brief checks to see if card is present in the SD slot
     109             :  *
     110             :  * @param sdhc_dev SD host controller to check for card presence on
     111             :  * @retval true card is present
     112             :  * @retval false card is not present
     113             :  */
     114           1 : bool sd_is_card_present(const struct device *sdhc_dev);
     115             : 
     116             : 
     117             : #ifdef __cplusplus
     118             : }
     119             : #endif
     120             : 
     121             : #endif /* ZEPHYR_INCLUDE_SD_SD_H_ */

Generated by: LCOV version 1.14