LCOV - code coverage report
Current view: top level - zephyr/drivers - mspi_emul.h Hit Total Coverage
Test: new.info Lines: 10 15 66.7 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright 2020 Google LLC
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_DRIVERS_MSPI_EMUL_H_
       8             : #define ZEPHYR_INCLUDE_DRIVERS_MSPI_EMUL_H_
       9             : 
      10             : #include <zephyr/device.h>
      11             : #include <zephyr/drivers/emul.h>
      12             : #include <zephyr/drivers/mspi.h>
      13             : #include <zephyr/sys/slist.h>
      14             : #include <zephyr/types.h>
      15             : 
      16             : /**
      17             :  * @file
      18             :  *
      19             :  * @brief Public APIs for the MSPI emulation drivers.
      20             :  */
      21             : 
      22             : /**
      23             :  * @brief MSPI Emulation Interface
      24             :  * @defgroup mspi_emul_interface MSPI Emulation Interface
      25             :  * @ingroup io_emulators
      26             :  * @{
      27             :  */
      28             : 
      29             : #ifdef __cplusplus
      30             : extern "C" {
      31             : #endif
      32             : 
      33             : struct mspi_emul;
      34             : 
      35             : /**
      36             :  * Find an emulator present on a MSPI bus
      37             :  *
      38             :  * At present the function is used only to find an emulator of the host
      39             :  * device. It may be useful in systems with the SPI flash chips.
      40             :  *
      41             :  * @param dev MSPI emulation controller device
      42             :  * @param dev_idx Device index from device tree.
      43             :  * @return mspi_emul to use
      44             :  * @return NULL if not found
      45             :  */
      46             : typedef struct mspi_emul *(*mspi_emul_find_emul)(const struct device *dev,
      47             :                                                  uint16_t dev_idx);
      48             : 
      49             : /**
      50             :  * Triggers an event on the emulator of MSPI controller side which causes
      51             :  * calling specific callbacks.
      52             :  *
      53             :  * @param dev MSPI emulation controller device
      54             :  * @param evt_type Event type to be triggered @see mspi_bus_event
      55             :  *
      56             :  * @retval 0 If successful.
      57             :  * @retval -EIO General input / output error.
      58             :  */
      59           1 : typedef int (*mspi_emul_trigger_event)(const struct device *dev,
      60             :                                        enum mspi_bus_event evt_type);
      61             : 
      62             : /**
      63             :  * Loopback MSPI transceive request to the device emulator
      64             :  * as no real hardware attached
      65             :  *
      66             :  * @param target The device Emulator instance
      67             :  * @param packets Pointer to the buffers of command, addr, data and etc.
      68             :  * @param num_packet The number of packets in packets.
      69             :  * @param async Indicate whether this is a asynchronous request.
      70             :  * @param timeout Maximum Time allowed for this request
      71             :  *
      72             :  * @retval 0 If successful.
      73             :  * @retval -EIO General input / output error.
      74             :  */
      75           1 : typedef int (*emul_mspi_dev_api_transceive)(const struct emul *target,
      76             :                                             const struct mspi_xfer_packet *packets,
      77             :                                             uint32_t num_packet,
      78             :                                             bool async,
      79             :                                             uint32_t timeout);
      80             : 
      81             : /** Definition of the MSPI device emulator API */
      82           1 : struct emul_mspi_device_api {
      83           0 :         emul_mspi_dev_api_transceive transceive;
      84             : };
      85             : 
      86             : /** Node in a linked list of emulators for MSPI devices */
      87           1 : struct mspi_emul {
      88           0 :         sys_snode_t                  node;
      89             :         /** Target emulator - REQUIRED for all emulated bus nodes of any type */
      90           1 :         const struct emul            *target;
      91             :         /** API provided for this device */
      92           1 :         const struct emul_mspi_device_api *api;
      93             :         /** device index */
      94           1 :         uint16_t                     dev_idx;
      95             : };
      96             : 
      97             : /** Definition of the MSPI controller emulator API */
      98           1 : struct emul_mspi_driver_api {
      99             :         /* The struct mspi_driver_api has to be first in
     100             :          * struct emul_mspi_driver_api to make pointer casting working
     101             :          */
     102           0 :         struct mspi_driver_api       mspi_api;
     103             :         /* The rest, emulator specific functions */
     104           0 :         mspi_emul_trigger_event      trigger_event;
     105           0 :         mspi_emul_find_emul          find_emul;
     106             : };
     107             : 
     108             : /**
     109             :  * Register an emulated device on the controller
     110             :  *
     111             :  * @param dev MSPI emulation controller device
     112             :  * @param emul MSPI device emulator to be registered
     113             :  * @return 0 indicating success (always)
     114             :  */
     115           1 : int mspi_emul_register(const struct device *dev, struct mspi_emul *emul);
     116             : 
     117             : #ifdef __cplusplus
     118             : }
     119             : #endif
     120             : 
     121             : /**
     122             :  * @}
     123             :  */
     124             : 
     125             : #endif /* ZEPHYR_INCLUDE_DRIVERS_MSPI_EMUL_H_ */

Generated by: LCOV version 1.14