1 /* 2 * Copyright 2022, Cypress Semiconductor Corporation (an Infineon company) 3 * SPDX-License-Identifier: Apache-2.0 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 #include <stdio.h> 19 #include <stdio.h> 20 #include <string.h> 21 #include "whd.h" 22 23 #ifndef INCLUDED_WHD_DEBUG_H 24 #define INCLUDED_WHD_DEBUG_H 25 26 #ifdef __cplusplus 27 extern "C" 28 { 29 #endif 30 31 /****************************************************** 32 * Macros 33 ******************************************************/ 34 #define WPRINT_ENABLE_WHD_ERROR 35 /* #define WPRINT_ENABLE_WHD_INFO */ 36 /* #define WPRINT_ENABLE_WHD_DEBUG */ 37 38 #define WHD_ENABLE_STATS 39 /*#define WHD_LOGGING_BUFFER_ENABLE*/ 40 41 #if defined (__GNUC__) 42 #define WHD_TRIGGER_BREAKPOINT( ) do { __asm__ ("bkpt"); } while (0) 43 44 #elif defined (__IAR_SYSTEMS_ICC__) 45 #define WHD_TRIGGER_BREAKPOINT( ) do { __asm("bkpt 0"); } while (0) 46 47 #else 48 #define WHD_TRIGGER_BREAKPOINT( ) 49 #endif 50 51 #ifdef WPRINT_ENABLE_ERROR 52 #define WPRINT_ERROR(args) do { WPRINT_MACRO(args); } while (0) 53 #define whd_assert(error_string, assertion) do { if (!(assertion) ){ WHD_TRIGGER_BREAKPOINT(); } } while (0) 54 #define whd_minor_assert(error_string, \ 55 assertion) do { if (!(assertion) ) WPRINT_MACRO( (error_string) ); } while (0) 56 #else 57 #define whd_assert(error_string, \ 58 assertion) do { if (!(assertion) ){ WPRINT_MACRO( (error_string) ); } } while (0) 59 #define whd_minor_assert(error_string, assertion) do { (void)(assertion); } while (0) 60 #endif 61 62 /****************************************************** 63 * Print declarations 64 ******************************************************/ 65 /* IF MFG TEST is enabled then disable all LOGGING VIA UART as 66 + * this interrupts communication between WL TOOL and MFG Test APP 67 + * via STDIO UART causing Wrong Message Exchange and failure. 68 + */ 69 #if defined(WLAN_MFG_FIRMWARE) || defined(WHD_PRINT_DISABLE) 70 #define WPRINT_MACRO(args) 71 #else 72 #if defined(WHD_LOGGING_BUFFER_ENABLE) 73 #define WPRINT_MACRO(args) do { whd_buffer_printf args; } while (0 == 1) 74 #else 75 #define WPRINT_MACRO(args) do { printf args;} while (0 == 1) 76 #endif 77 #endif 78 79 80 /* WICED printing macros for Wiced Wi-Fi Driver*/ 81 #ifdef WPRINT_ENABLE_WHD_INFO 82 #define WPRINT_WHD_INFO(args) WPRINT_MACRO(args) 83 #else 84 #define WPRINT_WHD_INFO(args) 85 #endif 86 87 #ifdef WPRINT_ENABLE_WHD_DEBUG 88 #define WPRINT_WHD_DEBUG(args) WPRINT_MACRO(args) 89 #else 90 #define WPRINT_WHD_DEBUG(args) 91 #endif 92 93 #ifdef WPRINT_ENABLE_WHD_ERROR 94 #define WPRINT_WHD_ERROR(args) WPRINT_MACRO(args); 95 #else 96 #define WPRINT_WHD_ERROR(args) 97 #endif 98 99 #ifdef WPRINT_ENABLE_WHD_DATA_LOG 100 #define WPRINT_WHD_DATA_LOG(args) WPRINT_MACRO(args) 101 #else 102 #define WPRINT_WHD_DATA_LOG(args) 103 #endif 104 105 #define WHD_STATS_INCREMENT_VARIABLE(whd_driver, var) \ 106 do { whd_driver->whd_stats.var++; } while (0) 107 108 #define WHD_STATS_CONDITIONAL_INCREMENT_VARIABLE(whd_driver, condition, var) \ 109 do { if (condition){ whd_driver->whd_stats.var++; }} while (0) 110 111 #if (defined(__GNUC__) && (__GNUC__ >= 6) ) 112 #define __FUNCTION__ __func__ 113 #endif 114 115 116 void whd_init_stats(whd_driver_t whd_driver); 117 void whd_print_logbuffer(void); 118 119 120 #ifdef WHD_LOGGING_BUFFER_ENABLE 121 #define LOGGING_BUFFER_SIZE (4 * 1024) 122 int whd_buffer_printf(const char *format, ...); 123 124 typedef struct 125 { 126 uint32_t buffer_write; 127 uint32_t buffer_read; 128 char buffer[LOGGING_BUFFER_SIZE + 1]; 129 whd_bool_t roll_over; 130 whd_bool_t over_write; 131 } whd_logging_t; 132 #else 133 #define whd_print_logbuffer() 134 #endif /* WHD_LOGGING_BUFFER_ENABLE */ 135 136 #ifdef WHD_IOCTL_LOG_ENABLE 137 #define WHD_IOCTL_LOG_ADD(x, y, z) whd_ioctl_log_add(x, y, z) 138 #define WHD_IOCTL_LOG_ADD_EVENT(w, x, y, z) whd_ioctl_log_add_event(w, x, y, z) 139 #define WHD_IOCTL_PRINT(x) whd_ioctl_print(x) 140 #else 141 #define WHD_IOCTL_LOG_ADD(x, y, z) 142 #define WHD_IOCTL_LOG_ADD_EVENT(w, x, y, z) 143 #define WHD_IOCTL_PRINT(x) 144 #endif 145 146 #ifdef __cplusplus 147 } /* extern "C" */ 148 #endif 149 #endif /* ifndef INCLUDED_WHD_DEBUG_H */ 150