1 /* 2 * Copyright (c) 2017, Nordic Semiconductor ASA 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, this 11 * list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its 18 * contributors may be used to endorse or promote products derived from this 19 * software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 * 33 */ 34 35 #ifndef NRF_802154_STATS_H_ 36 #define NRF_802154_STATS_H_ 37 38 #include "nrf_802154_types.h" 39 #include "nrf_802154_utils.h" 40 41 #if !defined(TEST) 42 // Don't use directly. Use provided nrf_802154_stat_xxxx API macros. 43 extern volatile nrf_802154_stats_t g_nrf_802154_stats; 44 45 /**@brief Increment one of the @ref nrf_802154_stat_counters_t fields. 46 * 47 * @param field_name Identifier of struct member to increment 48 */ 49 #define nrf_802154_stat_counter_increment(field_name) \ 50 do \ 51 { \ 52 nrf_802154_mcu_critical_state_t mcu_cs; \ 53 \ 54 nrf_802154_mcu_critical_enter(mcu_cs); \ 55 (g_nrf_802154_stats.counters.field_name)++; \ 56 nrf_802154_mcu_critical_exit(mcu_cs); \ 57 } \ 58 while (0) 59 60 /**@brief Write one of the @ref nrf_802154_stat_timestamps_t fields. 61 * 62 * @param field_name Identifier of struct member to write 63 * @param value Value to write 64 */ 65 #define nrf_802154_stat_timestamp_write(field_name, value) \ 66 do \ 67 { \ 68 nrf_802154_mcu_critical_state_t mcu_cs; \ 69 \ 70 nrf_802154_mcu_critical_enter(mcu_cs); \ 71 (g_nrf_802154_stats.timestamps.field_name) = (value); \ 72 nrf_802154_mcu_critical_exit(mcu_cs); \ 73 } \ 74 while (0) 75 76 /**@brief Read one of the @ref nrf_802154_stat_timestamps_t fields. */ 77 #define nrf_802154_stat_timestamp_read(variable, field_name) \ 78 do \ 79 { \ 80 nrf_802154_mcu_critical_state_t mcu_cs; \ 81 \ 82 nrf_802154_mcu_critical_enter(mcu_cs); \ 83 *(variable) = g_nrf_802154_stats.timestamps.field_name; \ 84 nrf_802154_mcu_critical_exit(mcu_cs); \ 85 } \ 86 while (0) 87 88 #else // !defined(TEST) 89 90 #define nrf_802154_stat_counter_increment(field_name) \ 91 nrf_802154_stat_counter_increment_func(offsetof(nrf_802154_stat_counters_t, field_name)) 92 93 #define nrf_802154_stat_timestamp_write(field_name, value) \ 94 nrf_802154_stat_timestamp_write_func(offsetof(nrf_802154_stat_timestamps_t, field_name), \ 95 (value)) 96 97 #define nrf_802154_stat_timestamp_read(variable, field_name) \ 98 *(variable) = nrf_802154_stat_timestamp_read_func(offsetof(nrf_802154_stat_timestamps_t, \ 99 field_name)) 100 101 // Functions for which mocks are generated. 102 void nrf_802154_stat_counter_increment_func(size_t field_offset); 103 void nrf_802154_stat_timestamp_write_func(size_t field_offset, uint64_t value); 104 uint64_t nrf_802154_stat_timestamp_read_func(size_t field_offset); 105 106 #endif // !defined(TEST) 107 108 #endif /* NRF_802154_STATS_H_ */ 109