LCOV - code coverage report
Current view: top level - zephyr/drivers - coredump.h Hit Total Coverage
Test: new.info Lines: 9 9 100.0 %
Date: 2024-12-21 18:13:37

          Line data    Source code
       1           1 : /*
       2             :  * Copyright Meta Platforms, Inc. and its affiliates.
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /**
       8             :  * @file
       9             :  * @brief Public APIs for coredump pseudo-device driver
      10             :  */
      11             : 
      12             : #ifndef INCLUDE_ZEPHYR_DRIVERS_COREDUMP_H_
      13             : #define INCLUDE_ZEPHYR_DRIVERS_COREDUMP_H_
      14             : 
      15             : #include <zephyr/device.h>
      16             : #include <zephyr/sys/slist.h>
      17             : 
      18             : #ifdef __cplusplus
      19             : extern "C" {
      20             : #endif
      21             : 
      22             : /**
      23             :  * @brief Coredump pseudo-device driver APIs
      24             :  * @defgroup coredump_device_interface Coredump pseudo-device driver APIs
      25             :  * @ingroup io_interfaces
      26             :  * @{
      27             :  */
      28             : 
      29             : /**
      30             :  * @brief Structure describing a region in memory that may be
      31             :  * stored in core dump at the time it is generated
      32             :  *
      33             :  * Instances of this are passed to the coredump_device_register_memory() and
      34             :  * coredump_device_unregister_memory() functions to indicate addition and removal
      35             :  * of memory regions to be captured
      36             :  */
      37           1 : struct coredump_mem_region_node {
      38             :         /** Node of single-linked list, do not modify */
      39           1 :         sys_snode_t node;
      40             : 
      41             :         /** Address of start of memory region */
      42           1 :         uintptr_t start;
      43             : 
      44             :         /** Size of memory region */
      45           1 :         size_t size;
      46             : };
      47             : 
      48             : /**
      49             :  * @brief Callback that occurs at dump time, data copied into dump_area will
      50             :  * be included in the dump that is generated
      51             :  *
      52             :  * @param dump_area      Pointer to area to copy data into for inclusion in dump
      53             :  * @param dump_area_size Size of available memory at dump_area
      54             :  */
      55           1 : typedef void (*coredump_dump_callback_t)(uintptr_t dump_area, size_t dump_area_size);
      56             : 
      57             : /**
      58             :  * @cond INTERNAL_HIDDEN
      59             :  *
      60             :  * For internal use only, skip these in public documentation.
      61             :  */
      62             : 
      63             : /*
      64             :  * Type definition of coredump API function for adding specified
      65             :  * data into coredump
      66             :  */
      67             : typedef void (*coredump_device_dump_t)(const struct device *dev);
      68             : 
      69             : /*
      70             :  * Type definition of coredump API function for registering a memory
      71             :  * region
      72             :  */
      73             : typedef bool (*coredump_device_register_memory_t)(const struct device *dev,
      74             :         struct coredump_mem_region_node *region);
      75             : 
      76             : /*
      77             :  * Type definition of coredump API function for unregistering a memory
      78             :  * region
      79             :  */
      80             : typedef bool (*coredump_device_unregister_memory_t)(const struct device *dev,
      81             :         struct coredump_mem_region_node *region);
      82             : 
      83             : /*
      84             :  * Type definition of coredump API function for registering a dump
      85             :  * callback
      86             :  */
      87             : typedef bool (*coredump_device_register_callback_t)(const struct device *dev,
      88             :         coredump_dump_callback_t callback);
      89             : 
      90             : /*
      91             :  * API which a coredump pseudo-device driver should expose
      92             :  */
      93             : __subsystem struct coredump_driver_api {
      94             :         coredump_device_dump_t              dump;
      95             :         coredump_device_register_memory_t   register_memory;
      96             :         coredump_device_unregister_memory_t unregister_memory;
      97             :         coredump_device_register_callback_t register_callback;
      98             : };
      99             : 
     100             : /**
     101             :  * @endcond
     102             :  */
     103             : 
     104             : /**
     105             :  * @brief Register a region of memory to be stored in core dump at the
     106             :  * time it is generated
     107             :  *
     108             :  * @param dev    Pointer to the device structure for the driver instance.
     109             :  * @param region Struct describing memory to be collected
     110             :  *
     111             :  * @return true if registration succeeded
     112             :  * @return false if registration failed
     113             :  */
     114           1 : static inline bool coredump_device_register_memory(const struct device *dev,
     115             :         struct coredump_mem_region_node *region)
     116             : {
     117             :         const struct coredump_driver_api *api =
     118             :                 (const struct coredump_driver_api *)dev->api;
     119             : 
     120             :         return api->register_memory(dev, region);
     121             : }
     122             : 
     123             : /**
     124             :  * @brief Unregister a region of memory to be stored in core dump at the
     125             :  * time it is generated
     126             :  *
     127             :  * @param dev    Pointer to the device structure for the driver instance.
     128             :  * @param region Struct describing memory to be collected
     129             :  *
     130             :  * @return true if unregistration succeeded
     131             :  * @return false if unregistration failed
     132             :  */
     133           1 : static inline bool coredump_device_unregister_memory(const struct device *dev,
     134             :         struct coredump_mem_region_node *region)
     135             : {
     136             :         const struct coredump_driver_api *api =
     137             :                 (const struct coredump_driver_api *)dev->api;
     138             : 
     139             :         return api->unregister_memory(dev, region);
     140             : }
     141             : 
     142             : /**
     143             :  * @brief Register a callback to be invoked at dump time
     144             :  *
     145             :  * @param dev      Pointer to the device structure for the driver instance.
     146             :  * @param callback Callback to be invoked at dump time
     147             :  *
     148             :  * @return true if registration succeeded
     149             :  * @return false if registration failed
     150             :  */
     151           1 : static inline bool coredump_device_register_callback(const struct device *dev,
     152             :         coredump_dump_callback_t callback)
     153             : {
     154             :         const struct coredump_driver_api *api =
     155             :                 (const struct coredump_driver_api *)dev->api;
     156             : 
     157             :         return api->register_callback(dev, callback);
     158             : }
     159             : 
     160             : /**
     161             :  * @}
     162             :  */
     163             : 
     164             : #ifdef __cplusplus
     165             : }
     166             : #endif
     167             : 
     168             : #endif /* INCLUDE_ZEPHYR_DRIVERS_COREDUMP_H_ */

Generated by: LCOV version 1.14