The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 1 | /****************************************************************************** |
| 2 | * |
Jakub Pawlowski | 5b790fe | 2017-09-18 09:00:20 -0700 | [diff] [blame] | 3 | * Copyright 2001-2012 Broadcom Corporation |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 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 | |
Marie Janssen | 49a8670 | 2015-07-08 11:48:57 -0700 | [diff] [blame] | 19 | #define LOG_TAG "bt_bte" |
Marie Janssen | 49120dc | 2015-07-07 16:47:20 -0700 | [diff] [blame] | 20 | |
Jack He | f2af1c4 | 2016-12-13 01:59:12 -0800 | [diff] [blame] | 21 | #include <base/logging.h> |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 22 | #include <stdarg.h> |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 23 | #include <stdio.h> |
| 24 | #include <stdlib.h> |
| 25 | #include <string.h> |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 26 | #include <sys/time.h> |
| 27 | #include <time.h> |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 28 | |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 29 | #include "avrc_api.h" |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 30 | #include "bt_common.h" |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 31 | #include "bta_api.h" |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 32 | #include "bte.h" |
| 33 | #include "btm_api.h" |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 34 | #include "btu.h" |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 35 | #include "l2c_api.h" |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 36 | #include "main_int.h" |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 37 | #include "osi/include/config.h" |
Sharvil Nanavati | 4480276 | 2014-12-23 23:08:58 -0800 | [diff] [blame] | 38 | #include "osi/include/log.h" |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 39 | #include "port_api.h" |
| 40 | #include "sdp_api.h" |
Zach Johnson | 9891f32 | 2014-09-22 22:11:55 -0700 | [diff] [blame] | 41 | #include "stack_config.h" |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 42 | |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 43 | #include "avdt_api.h" |
Pavlin Radoslavov | f66f4e9 | 2016-10-14 15:14:37 -0700 | [diff] [blame] | 44 | #include "a2dp_api.h" |
Marie Janssen | d19e078 | 2016-07-15 12:48:27 -0700 | [diff] [blame] | 45 | #if (BNEP_INCLUDED == TRUE) |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 46 | #include "bnep_api.h" |
| 47 | #endif |
Marie Janssen | d19e078 | 2016-07-15 12:48:27 -0700 | [diff] [blame] | 48 | #if (PAN_INCLUDED == TRUE) |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 49 | #include "pan_api.h" |
| 50 | #endif |
Hemant Gupta | 8843cc8 | 2014-04-18 12:34:55 +0530 | [diff] [blame] | 51 | #if (HID_HOST_INCLUDED == TRUE) |
| 52 | #include "hidh_api.h" |
| 53 | #endif |
| 54 | #if (HID_DEV_INCLUDED == TRUE) |
| 55 | #include "hidd_api.h" |
| 56 | #endif |
| 57 | |
Ganesh Ganapathi Batta | ead3cde | 2013-02-05 15:22:31 -0800 | [diff] [blame] | 58 | #include "smp_api.h" |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 59 | |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 60 | #ifndef DEFAULT_CONF_TRACE_LEVEL |
| 61 | #define DEFAULT_CONF_TRACE_LEVEL BT_TRACE_LEVEL_WARNING |
| 62 | #endif |
| 63 | |
| 64 | #ifndef BTE_LOG_BUF_SIZE |
Gurpreet Ghai | 7a3819f | 2017-08-07 11:35:22 +0530 | [diff] [blame] | 65 | #define BTE_LOG_BUF_SIZE 256 |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 66 | #endif |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 67 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 68 | #define BTE_LOG_MAX_SIZE (BTE_LOG_BUF_SIZE - 12) |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 69 | |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 70 | #define MSG_BUFFER_OFFSET 0 |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 71 | |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 72 | /* LayerIDs for BTA, currently everything maps onto appl_trace_level */ |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 73 | static const char* const bt_layer_tags[] = { |
Jack He | 238f835 | 2019-01-03 17:11:24 -0800 | [diff] [blame] | 74 | "bt_btif", |
| 75 | "bt_usb", |
| 76 | "bt_serial", |
| 77 | "bt_socket", |
| 78 | "bt_rs232", |
| 79 | "bt_lc", |
| 80 | "bt_lm", |
| 81 | "bt_hci", |
| 82 | "bt_l2cap", |
| 83 | "bt_rfcomm", |
| 84 | "bt_sdp", |
| 85 | "bt_tcs", |
| 86 | "bt_obex", |
| 87 | "bt_btm", |
| 88 | "bt_gap", |
| 89 | "UNUSED", |
| 90 | "UNUSED", |
| 91 | "bt_icp", |
| 92 | "bt_hsp2", |
| 93 | "bt_spp", |
| 94 | "bt_ctp", |
| 95 | "bt_bpp", |
| 96 | "bt_hcrp", |
| 97 | "bt_ftp", |
| 98 | "bt_opp", |
| 99 | "bt_btu", |
| 100 | "bt_gki_deprecated", |
| 101 | "bt_bnep", |
| 102 | "bt_pan", |
| 103 | "bt_hfp", |
| 104 | "bt_hid", |
| 105 | "bt_bip", |
| 106 | "bt_avp", |
| 107 | "bt_a2d", |
| 108 | "bt_sap", |
| 109 | "bt_amp", |
| 110 | "bt_mca_deprecated", |
| 111 | "bt_att", |
| 112 | "bt_smp", |
| 113 | "bt_nfc", |
| 114 | "bt_nci", |
| 115 | "bt_idep", |
| 116 | "bt_ndep", |
| 117 | "bt_llcp", |
| 118 | "bt_rw", |
| 119 | "bt_ce", |
| 120 | "bt_snep", |
| 121 | "bt_ndef", |
| 122 | "bt_nfa", |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 123 | }; |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 124 | static uint8_t BTAPP_SetTraceLevel(uint8_t new_level); |
| 125 | static uint8_t BTIF_SetTraceLevel(uint8_t new_level); |
| 126 | static uint8_t BTU_SetTraceLevel(uint8_t new_level); |
| 127 | |
| 128 | /* make sure list is order by increasing layer id!!! */ |
| 129 | static tBTTRC_FUNC_MAP bttrc_set_level_map[] = { |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 130 | {BTTRC_ID_STK_BTU, BTTRC_ID_STK_HCI, BTU_SetTraceLevel, "TRC_HCI", |
| 131 | DEFAULT_CONF_TRACE_LEVEL}, |
| 132 | {BTTRC_ID_STK_L2CAP, BTTRC_ID_STK_L2CAP, L2CA_SetTraceLevel, "TRC_L2CAP", |
| 133 | DEFAULT_CONF_TRACE_LEVEL}, |
| 134 | {BTTRC_ID_STK_RFCOMM, BTTRC_ID_STK_RFCOMM_DATA, PORT_SetTraceLevel, |
| 135 | "TRC_RFCOMM", DEFAULT_CONF_TRACE_LEVEL}, |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 136 | {BTTRC_ID_STK_AVDT, BTTRC_ID_STK_AVDT, AVDT_SetTraceLevel, "TRC_AVDT", |
| 137 | DEFAULT_CONF_TRACE_LEVEL}, |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 138 | {BTTRC_ID_STK_AVRC, BTTRC_ID_STK_AVRC, AVRC_SetTraceLevel, "TRC_AVRC", |
| 139 | DEFAULT_CONF_TRACE_LEVEL}, |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 140 | {BTTRC_ID_STK_A2DP, BTTRC_ID_STK_A2DP, A2DP_SetTraceLevel, "TRC_A2D", |
| 141 | DEFAULT_CONF_TRACE_LEVEL}, |
Marie Janssen | d19e078 | 2016-07-15 12:48:27 -0700 | [diff] [blame] | 142 | #if (BNEP_INCLUDED == TRUE) |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 143 | {BTTRC_ID_STK_BNEP, BTTRC_ID_STK_BNEP, BNEP_SetTraceLevel, "TRC_BNEP", |
| 144 | DEFAULT_CONF_TRACE_LEVEL}, |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 145 | #endif |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 146 | {BTTRC_ID_STK_BTM_ACL, BTTRC_ID_STK_BTM_SEC, BTM_SetTraceLevel, "TRC_BTM", |
| 147 | DEFAULT_CONF_TRACE_LEVEL}, |
Hemant Gupta | 8843cc8 | 2014-04-18 12:34:55 +0530 | [diff] [blame] | 148 | #if (HID_HOST_INCLUDED == TRUE) |
| 149 | {BTTRC_ID_STK_HID, BTTRC_ID_STK_HID, HID_HostSetTraceLevel, "TRC_HID_HOST", |
| 150 | DEFAULT_CONF_TRACE_LEVEL}, |
| 151 | #endif |
Marie Janssen | d19e078 | 2016-07-15 12:48:27 -0700 | [diff] [blame] | 152 | #if (PAN_INCLUDED == TRUE) |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 153 | {BTTRC_ID_STK_PAN, BTTRC_ID_STK_PAN, PAN_SetTraceLevel, "TRC_PAN", |
| 154 | DEFAULT_CONF_TRACE_LEVEL}, |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 155 | #endif |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 156 | {BTTRC_ID_STK_SDP, BTTRC_ID_STK_SDP, SDP_SetTraceLevel, "TRC_SDP", |
| 157 | DEFAULT_CONF_TRACE_LEVEL}, |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 158 | {BTTRC_ID_STK_SMP, BTTRC_ID_STK_SMP, SMP_SetTraceLevel, "TRC_SMP", |
| 159 | DEFAULT_CONF_TRACE_LEVEL}, |
Hemant Gupta | 8843cc8 | 2014-04-18 12:34:55 +0530 | [diff] [blame] | 160 | #if (HID_DEV_INCLUDED == TRUE) |
| 161 | {BTTRC_ID_STK_HIDD, BTTRC_ID_STK_HIDD, HID_DevSetTraceLevel, "TRC_HID_DEV", |
| 162 | DEFAULT_CONF_TRACE_LEVEL}, |
| 163 | #endif |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 164 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 165 | /* LayerIDs for BTA, currently everything maps onto appl_trace_level. |
| 166 | */ |
| 167 | {BTTRC_ID_BTA_ACC, BTTRC_ID_BTAPP, BTAPP_SetTraceLevel, "TRC_BTAPP", |
| 168 | DEFAULT_CONF_TRACE_LEVEL}, |
| 169 | {BTTRC_ID_BTA_ACC, BTTRC_ID_BTAPP, BTIF_SetTraceLevel, "TRC_BTIF", |
| 170 | DEFAULT_CONF_TRACE_LEVEL}, |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 171 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 172 | {0, 0, NULL, NULL, DEFAULT_CONF_TRACE_LEVEL}}; |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 173 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 174 | void LogMsg(uint32_t trace_set_mask, const char* fmt_str, ...) { |
Gurpreet Ghai | 7a3819f | 2017-08-07 11:35:22 +0530 | [diff] [blame] | 175 | char buffer[BTE_LOG_BUF_SIZE]; |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 176 | int trace_layer = TRACE_GET_LAYER(trace_set_mask); |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 177 | if (trace_layer >= TRACE_LAYER_MAX_NUM) trace_layer = 0; |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 178 | |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 179 | va_list ap; |
| 180 | va_start(ap, fmt_str); |
| 181 | vsnprintf(&buffer[MSG_BUFFER_OFFSET], BTE_LOG_MAX_SIZE, fmt_str, ap); |
| 182 | va_end(ap); |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 183 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 184 | switch (TRACE_GET_TYPE(trace_set_mask)) { |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 185 | case TRACE_TYPE_ERROR: |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 186 | LOG_ERROR(bt_layer_tags[trace_layer], "%s", buffer); |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 187 | break; |
| 188 | case TRACE_TYPE_WARNING: |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 189 | LOG_WARN(bt_layer_tags[trace_layer], "%s", buffer); |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 190 | break; |
| 191 | case TRACE_TYPE_API: |
| 192 | case TRACE_TYPE_EVENT: |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 193 | LOG_INFO(bt_layer_tags[trace_layer], "%s", buffer); |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 194 | break; |
| 195 | case TRACE_TYPE_DEBUG: |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 196 | LOG_DEBUG(bt_layer_tags[trace_layer], "%s", buffer); |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 197 | break; |
| 198 | default: |
Myles Watson | 9ca0709 | 2016-11-28 16:41:53 -0800 | [diff] [blame] | 199 | /* we should never get this */ |
Myles Watson | 5d700dd | 2017-03-21 10:24:20 -0700 | [diff] [blame] | 200 | LOG_ERROR(bt_layer_tags[trace_layer], "!BAD TRACE TYPE! %s", buffer); |
| 201 | CHECK(TRACE_GET_TYPE(trace_set_mask) == TRACE_TYPE_ERROR); |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 202 | break; |
| 203 | } |
| 204 | } |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 205 | |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 206 | /* this function should go into BTAPP_DM for example */ |
| 207 | static uint8_t BTAPP_SetTraceLevel(uint8_t new_level) { |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 208 | if (new_level != 0xFF) appl_trace_level = new_level; |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 209 | |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 210 | return appl_trace_level; |
| 211 | } |
| 212 | |
| 213 | static uint8_t BTIF_SetTraceLevel(uint8_t new_level) { |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 214 | if (new_level != 0xFF) btif_trace_level = new_level; |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 215 | |
| 216 | return btif_trace_level; |
| 217 | } |
| 218 | |
| 219 | static uint8_t BTU_SetTraceLevel(uint8_t new_level) { |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 220 | if (new_level != 0xFF) btu_trace_level = new_level; |
Chris Manton | aa0f6ec | 2014-09-24 15:18:41 -0700 | [diff] [blame] | 221 | |
Pavlin Radoslavov | 78bcff7 | 2015-12-04 17:36:34 -0800 | [diff] [blame] | 222 | return btu_trace_level; |
The Android Open Source Project | 5738f83 | 2012-12-12 16:00:35 -0800 | [diff] [blame] | 223 | } |
Zach Johnson | 9891f32 | 2014-09-22 22:11:55 -0700 | [diff] [blame] | 224 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 225 | static void load_levels_from_config(const config_t* config) { |
Jack He | f2af1c4 | 2016-12-13 01:59:12 -0800 | [diff] [blame] | 226 | CHECK(config != NULL); |
Zach Johnson | 9891f32 | 2014-09-22 22:11:55 -0700 | [diff] [blame] | 227 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 228 | for (tBTTRC_FUNC_MAP* functions = &bttrc_set_level_map[0]; |
| 229 | functions->trc_name; ++functions) { |
Jakub Pawlowski | f3fb316 | 2017-10-06 00:04:27 -0700 | [diff] [blame] | 230 | int value = config_get_int(*config, CONFIG_DEFAULT_SECTION, |
| 231 | functions->trc_name, -1); |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 232 | if (value != -1) functions->trace_level = value; |
Eagle Kang | 95f6f1b | 2017-04-13 14:50:53 +0800 | [diff] [blame] | 233 | LOG_INFO(LOG_TAG, "BTE_InitTraceLevels -- %s : Level %d", |
| 234 | functions->trc_name, functions->trace_level); |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 235 | if (functions->p_f) functions->p_f(functions->trace_level); |
Zach Johnson | 9891f32 | 2014-09-22 22:11:55 -0700 | [diff] [blame] | 236 | } |
| 237 | } |
| 238 | |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 239 | static future_t* init(void) { |
| 240 | const stack_config_t* stack_config = stack_config_get_interface(); |
Zach Johnson | 9891f32 | 2014-09-22 22:11:55 -0700 | [diff] [blame] | 241 | if (!stack_config->get_trace_config_enabled()) { |
Marie Janssen | db55458 | 2015-06-26 14:53:46 -0700 | [diff] [blame] | 242 | LOG_INFO(LOG_TAG, "using compile default trace settings"); |
Zach Johnson | 9891f32 | 2014-09-22 22:11:55 -0700 | [diff] [blame] | 243 | return NULL; |
| 244 | } |
| 245 | |
Jakub Pawlowski | 75b8366 | 2016-09-27 18:24:59 -0700 | [diff] [blame] | 246 | init_cpp_logging(stack_config->get_all()); |
| 247 | |
Zach Johnson | 9891f32 | 2014-09-22 22:11:55 -0700 | [diff] [blame] | 248 | load_levels_from_config(stack_config->get_all()); |
| 249 | return NULL; |
| 250 | } |
| 251 | |
Pavlin Radoslavov | b2a292b | 2016-10-14 19:34:48 -0700 | [diff] [blame] | 252 | EXPORT_SYMBOL extern const module_t bte_logmsg_module = { |
Myles Watson | 911d1ae | 2016-11-28 16:44:40 -0800 | [diff] [blame] | 253 | .name = BTE_LOGMSG_MODULE, |
| 254 | .init = init, |
| 255 | .start_up = NULL, |
| 256 | .shut_down = NULL, |
| 257 | .clean_up = NULL, |
| 258 | .dependencies = {STACK_CONFIG_MODULE, NULL}}; |