1 /* 2 * Copyright (c) 2013, 2016-2018 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2002-2010, Atheros Communications Inc. 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 */ 15 16 /** 17 * DOC: It contains useful print functions that can be used for debug. 18 * Add all debug related functionality into this file. 19 */ 20 #include "../dfs.h" 21 #include "wlan_dfs_lmac_api.h" 22 23 void dfs_print_delayline(struct wlan_dfs *dfs, struct dfs_delayline *dl) 24 { 25 int i = 0, index; 26 struct dfs_delayelem *de; 27 28 index = dl->dl_firstelem; 29 for (i = 0; i < dl->dl_numelems; i++) { 30 de = &dl->dl_elems[index]; 31 dfs_debug(dfs, WLAN_DEBUG_DFS2, 32 "Elem %u: ts=%llu diff_ts=%u (0x%x) dur=%u, seg_id=%d sidx=%d delta_peak=%d psidx_diff=%d seq_num=%d", 33 i, de->de_ts, de->de_time, de->de_time, 34 de->de_dur, de->de_seg_id, de->de_sidx, 35 de->de_delta_peak, de->de_psidx_diff, 36 de->de_seq_num); 37 38 index = (index + 1) & DFS_MAX_DL_MASK; 39 } 40 } 41 42 void dfs_print_filter(struct wlan_dfs *dfs, struct dfs_filter *rf) 43 { 44 dfs_debug(dfs, WLAN_DEBUG_DFS1, 45 "filterID[%d] rf_numpulses=%u; rf->rf_minpri=%u; rf->rf_maxpri=%u; rf->rf_threshold=%u; rf->rf_filterlen=%u; rf->rf_mindur=%u; rf->rf_maxdur=%u", 46 rf->rf_pulseid, rf->rf_numpulses, rf->rf_minpri, rf->rf_maxpri, 47 rf->rf_threshold, rf->rf_filterlen, rf->rf_mindur, 48 rf->rf_maxdur); 49 } 50 51 /** 52 * dfs_print_filtertype() - Print the filtertype 53 * @dfs: Pointer to wlan_dfs structure. 54 * @ft: Pointer to dfs_filtertype structure. 55 */ 56 static void dfs_print_filtertype( 57 struct wlan_dfs *dfs, 58 struct dfs_filtertype *ft) 59 { 60 uint32_t j; 61 struct dfs_filter *rf; 62 63 for (j = 0; j < ft->ft_numfilters; j++) { 64 rf = &(ft->ft_filters[j]); 65 dfs_debug(dfs, WLAN_DEBUG_DFS2, 66 "filter[%d] filterID = %d rf_numpulses=%u; rf->rf_minpri=%u; rf->rf_maxpri=%u; rf->rf_threshold=%u; rf->rf_filterlen=%u; rf->rf_mindur=%u; rf->rf_maxdur=%u", 67 j, rf->rf_pulseid, rf->rf_numpulses, 68 rf->rf_minpri, rf->rf_maxpri, 69 rf->rf_threshold, rf->rf_filterlen, 70 rf->rf_mindur, rf->rf_maxdur); 71 } 72 } 73 74 void dfs_print_filters(struct wlan_dfs *dfs) 75 { 76 struct dfs_filtertype *ft = NULL; 77 uint8_t i; 78 79 if (!dfs) { 80 dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "dfs is NULL"); 81 return; 82 } 83 84 for (i = 0; i < DFS_MAX_RADAR_TYPES; i++) { 85 if (dfs->dfs_radarf[i] != NULL) { 86 ft = dfs->dfs_radarf[i]; 87 if ((ft->ft_numfilters > DFS_MAX_NUM_RADAR_FILTERS) || 88 (!ft->ft_numfilters)) { 89 continue; 90 } 91 dfs_debug(dfs, WLAN_DEBUG_DFS2, 92 "===========ft->ft_numfilters = %u===========", 93 ft->ft_numfilters); 94 dfs_print_filtertype(dfs, ft); 95 } 96 } 97 } 98