LCOV - code coverage report
Current view: top level - zephyr/sip_svc - sip_svc_controller.h Hit Total Coverage
Test: new.info Lines: 1 2 50.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2023, Intel Corporation.
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_SIP_SVC_CONTROLLER_H_
       8             : #define ZEPHYR_SIP_SVC_CONTROLLER_H_
       9             : 
      10             : /**
      11             :  * @note This file should only be included by sip_svc driver.
      12             :  */
      13             : 
      14             : #ifdef CONFIG_ARM_SIP_SVC_SUBSYS
      15             : 
      16             : #include <zephyr/sys/atomic.h>
      17             : 
      18             : /**
      19             :  * @brief Length of SVC conduit name in sip svc subsystem.
      20             :  *
      21             :  */
      22             : #define SIP_SVC_SUBSYS_CONDUIT_NAME_LENGTH (4U)
      23             : 
      24             : /**
      25             :  * @brief Open lock states in sip_svc atomic variable
      26             :  */
      27             : enum open_state {
      28             :         SIP_SVC_OPEN_UNLOCKED = 0,
      29             :         SIP_SVC_OPEN_LOCKED
      30             : };
      31             : 
      32             : /**
      33             :  *  @brief Arm SiP Service client data.
      34             :  *
      35             :  */
      36             : struct sip_svc_client {
      37             : 
      38             :         /* Client id internal to sip_svc*/
      39             :         uint32_t id;
      40             :         /* Client's token id provided back to client during sip_svc_register() */
      41             :         uint32_t token;
      42             :         /* Client's state */
      43             :         uint32_t state;
      44             :         /* Total Number of on-going transaction  of the client */
      45             :         uint32_t active_trans_cnt;
      46             :         /* Private data of each client , Provided during sip_svc_register() */
      47             :         void *priv_data;
      48             :         /* Transaction id pool for each client */
      49             :         struct sip_svc_id_pool *trans_idx_pool;
      50             : };
      51             : 
      52             : /**
      53             :  * @brief Arm SiP Services controller data.
      54             :  *
      55             :  */
      56             : struct sip_svc_controller {
      57             : 
      58             :         /* Initialization status*/
      59             :         bool init;
      60             :         /* Total number of clients*/
      61             :         const uint32_t num_clients;
      62             :         /* Maximum allowable transactions in the system per controller*/
      63             :         const uint32_t max_transactions;
      64             :         /* Response size of buffer used for ASYNC transaction*/
      65             :         const uint32_t resp_size;
      66             :         /* Total Number of active transactions */
      67             :         uint32_t active_job_cnt;
      68             :         /* Active ASYNC transactions */
      69             :         uint32_t active_async_job_cnt;
      70             :         /* Supervisory call name , got from dts entry */
      71             :         char method[SIP_SVC_SUBSYS_CONDUIT_NAME_LENGTH];
      72             :         /* Pointer to driver instance */
      73             :         const struct device *dev;
      74             :         /* Pointer to client id pool */
      75             :         struct sip_svc_id_pool *client_id_pool;
      76             :         /* Pointer to database for storing arguments from sip_svc_send() */
      77             :         struct sip_svc_id_map *trans_id_map;
      78             :         /* Pointer to client array */
      79             :         struct sip_svc_client *clients;
      80             :         /* Pointer to Buffer used for storing response from lower layers */
      81             :         uint8_t *async_resp_data;
      82             :         /* Thread id of sip_svc thread */
      83             :         k_tid_t tid;
      84             : 
      85             : #if CONFIG_ARM_SIP_SVC_SUBSYS_SINGLY_OPEN
      86             :         /* Atomic variable to restrict one client access */
      87             :         atomic_t open_lock;
      88             : #endif
      89             :         /* Mutex for protecting database access */
      90             :         struct k_mutex data_mutex;
      91             :         /* msgq for sending sip_svc_request to sip_svc thread */
      92             :         struct k_msgq req_msgq;
      93             :         /* sip_svc thread object */
      94             :         struct k_thread thread;
      95             :         /* Stack object of sip_svc thread */
      96             :         K_KERNEL_STACK_MEMBER(stack, CONFIG_ARM_SIP_SVC_SUBSYS_THREAD_STACK_SIZE);
      97             : };
      98             : 
      99             : /**
     100             :  * @brief Controller define used by sip_svc driver to instantiate each controller.
     101             :  * Each sip_svc driver will use this API to instantiate a controller for sip_svc
     102             :  * subsystem to consume, for more details check @ref ITERABLE_SECTION_RAM()
     103             :  */
     104             : #define SIP_SVC_CONTROLLER_DEFINE(inst, conduit_name, sip_dev, sip_num_clients,                    \
     105             :                                   sip_max_transactions, sip_resp_size)                             \
     106             :         BUILD_ASSERT(                                                                              \
     107             :                 ((sip_num_clients <= CONFIG_ARM_SIP_SVC_SUBSYS_MAX_CLIENT_COUNT) &&                \
     108             :                  (sip_num_clients > 0)),                                                           \
     109             :                 "Number of client should be within 1 and ARM_SIP_SVC_SUBSYS_MAX_CLIENT_COUNT");    \
     110             :         static STRUCT_SECTION_ITERABLE(sip_svc_controller, sip_svc_##inst) = {                     \
     111             :                 .method = conduit_name,                                                            \
     112             :                 .dev = sip_dev,                                                                    \
     113             :                 .num_clients = sip_num_clients,                                                    \
     114             :                 .max_transactions = sip_max_transactions,                                          \
     115             :                 .resp_size = sip_resp_size,                                                        \
     116             :         }
     117             : 
     118             : #else
     119             : #define SIP_SVC_CONTROLLER_DEFINE(inst, conduit_name, sip_dev, sip_num_clients,                    \
     120           1 :                                   sip_max_transactions, sip_resp_size)
     121             : #endif
     122             : 
     123             : #endif /* ZEPHYR_SIP_SVC_CONTROLLER_H_ */

Generated by: LCOV version 1.14