LCOV - code coverage report
Current view: top level - zephyr/sip_svc - sip_svc_controller.h Coverage Total Hit
Test: new.info Lines: 50.0 % 2 1
Test Date: 2025-09-05 20:47:19

            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 2.0-1