| #ifndef _DHD_BUZZZ_H_INCLUDED_ |
| #define _DHD_BUZZZ_H_INCLUDED_ |
| |
| /* |
| * Copyright (C) 2022, Broadcom. |
| * |
| * Unless you and Broadcom execute a separate written software license |
| * agreement governing use of this software, this software is licensed to you |
| * under the terms of the GNU General Public License version 2 (the "GPL"), |
| * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
| * following added to such license: |
| * |
| * As a special exception, the copyright holders of this software give you |
| * permission to link this software with independent modules, and to copy and |
| * distribute the resulting executable under terms of your choice, provided that |
| * you also meet, for each linked independent module, the terms and conditions of |
| * the license of that module. An independent module is a module which is not |
| * derived from this software. The special exception does not apply to any |
| * modifications of the software. |
| * |
| * |
| * <<Broadcom-WL-IPTag/Open:>> |
| * |
| * $Id$ |
| */ |
| |
| #if defined(DHD_BUZZZ_LOG_ENABLED) |
| /* |
| * Broadcom proprietary logging system. Deleted performance counters. |
| */ |
| void dhd_buzzz_attach(void); |
| void dhd_buzzz_detach(void); |
| void dhd_buzzz_panic(uint32 crash); |
| void dhd_buzzz_dump(void); |
| void dhd_buzzz_log_disable(void); |
| void dhd_buzzz_crash(void); |
| |
| void dhd_buzzz_log0(uint32 evt_id); |
| void dhd_buzzz_log1(uint32 evt_id, uint32 arg1); |
| void dhd_buzzz_log2(uint32 evt_id, uint32 arg1, uintptr arg2); |
| |
| void dhd_buzzz_fmt_reg(uint32 id, char * fmt); |
| |
| extern void* dhd_os_create_buzzz_thread(void); |
| extern void dhd_os_destroy_buzzz_thread(void *thr_hdl); |
| extern void dhd_os_sched_buzzz_thread(void *thr_hdl); |
| |
| #undef BUZZZ_EVT |
| #define BUZZZ_EVT(ID) BUZZZ_EVT__## ID, |
| |
| #undef BUZZZ_FMT |
| #define BUZZZ_FMT(ID, format) \ |
| dhd_buzzz_fmt_reg(BUZZZ_EVT__## ID, "\t" format); |
| |
| typedef enum buzzz_evt_id |
| { |
| BUZZZ_EVT__DHD = 100, /* BUZZZ_EVT(DHD) */ |
| BUZZZ_EVT(GENERAL_LOCK) |
| BUZZZ_EVT(GENERAL_UNLOCK) |
| BUZZZ_EVT(FLOWRING_LOCK) |
| BUZZZ_EVT(FLOWRING_UNLOCK) |
| BUZZZ_EVT(FLOWID_LOCK) |
| BUZZZ_EVT(FLOWID_UNLOCK) |
| |
| BUZZZ_EVT(START_XMIT_BGN) |
| BUZZZ_EVT(START_XMIT_END) |
| BUZZZ_EVT(PROCESS_CTRL_BGN) |
| BUZZZ_EVT(PROCESS_CTRL_END) |
| BUZZZ_EVT(UPDATE_TXFLOWRINGS_BGN) |
| BUZZZ_EVT(UPDATE_TXFLOWRINGS_END) |
| BUZZZ_EVT(PROCESS_TXCPL_BGN) |
| BUZZZ_EVT(PROCESS_TXCPL_END) |
| BUZZZ_EVT(PROCESS_RXCPL_BGN) |
| BUZZZ_EVT(PROCESS_RXCPL_END) |
| |
| BUZZZ_EVT(GET_SRC_ADDR) |
| BUZZZ_EVT(WRITE_COMPLETE) |
| BUZZZ_EVT(ALLOC_RING_SPACE) |
| BUZZZ_EVT(ALLOC_RING_SPACE_RET) |
| BUZZZ_EVT(ALLOC_RING_SPACE_FAIL) |
| |
| BUZZZ_EVT(PKTID_MAP_CLEAR) |
| BUZZZ_EVT(PKTID_NOT_AVAILABLE) |
| BUZZZ_EVT(PKTID_MAP_RSV) |
| BUZZZ_EVT(PKTID_MAP_SAVE) |
| BUZZZ_EVT(PKTID_MAP_ALLOC) |
| BUZZZ_EVT(PKTID_MAP_FREE) |
| BUZZZ_EVT(LOCKER_INUSE_ABORT) |
| BUZZZ_EVT(BUFFER_TYPE_ABORT1) |
| BUZZZ_EVT(BUFFER_TYPE_ABORT2) |
| |
| BUZZZ_EVT(UPD_READ_IDX) |
| BUZZZ_EVT(STORE_RXCPLN_RD) |
| BUZZZ_EVT(EARLY_UPD_RXCPLN_RD) |
| |
| BUZZZ_EVT(POST_TXDATA) |
| BUZZZ_EVT(RETURN_RXBUF) |
| BUZZZ_EVT(RXBUF_POST) |
| BUZZZ_EVT(RXBUF_POST_EVENT) |
| BUZZZ_EVT(RXBUF_POST_IOCTL) |
| BUZZZ_EVT(RXBUF_POST_CTRL_PKTGET_FAIL) |
| BUZZZ_EVT(RXBUF_POST_PKTGET_FAIL) |
| BUZZZ_EVT(RXBUF_POST_PKTID_FAIL) |
| |
| BUZZZ_EVT(DHD_DUPLICATE_ALLOC) |
| BUZZZ_EVT(DHD_DUPLICATE_FREE) |
| BUZZZ_EVT(DHD_TEST_IS_ALLOC) |
| BUZZZ_EVT(DHD_TEST_IS_FREE) |
| |
| BUZZZ_EVT(DHD_PROT_IOCT_BGN) |
| BUZZZ_EVT(DHDMSGBUF_CMPLT_BGN) |
| BUZZZ_EVT(DHDMSGBUF_CMPLT_END) |
| BUZZZ_EVT(DHD_PROT_IOCT_END) |
| BUZZZ_EVT(DHD_FILLUP_IOCT_REQST_BGN) |
| BUZZZ_EVT(DHD_FILLUP_IOCT_REQST_END) |
| BUZZZ_EVT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_BGN) |
| BUZZZ_EVT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_END) |
| BUZZZ_EVT(DHD_PROT_IOCTCMPLT_PROCESS_ONE) |
| BUZZZ_EVT(DHD_PROT_IOCTCMPLT_PROCESS_TWO) |
| BUZZZ_EVT(DHD_PROT_EVENT_PROCESS_BGN) |
| BUZZZ_EVT(DHD_PROT_EVENT_PROCESS_END) |
| BUZZZ_EVT(DHD_PROT_D2H_SYNC_LIVELOCK) |
| BUZZZ_EVT(DHD_IOCTL_BUFPOST) |
| BUZZZ_EVT(DHD_EVENT_BUFPOST) |
| BUZZZ_EVT(DHD_PROC_MSG_TYPE) |
| BUZZZ_EVT(DHD_BUS_RXCTL_ONE) |
| BUZZZ_EVT(DHD_BUS_RXCTL_TWO) |
| } buzzz_evt_id_t; |
| |
| static inline void dhd_buzzz_fmt_init(void) |
| { |
| BUZZZ_FMT(DHD, "DHD events") |
| BUZZZ_FMT(GENERAL_LOCK, "+++LOCK GENERAL flags<0x%08x>") |
| BUZZZ_FMT(GENERAL_UNLOCK, "---UNLK GENERAL flags<0x%08x>") |
| BUZZZ_FMT(FLOWRING_LOCK, "+++LOCK FLOWRING flags<0x%08x>") |
| BUZZZ_FMT(FLOWRING_UNLOCK, "---UNLK FLOWRING flags<0x%08x>") |
| BUZZZ_FMT(FLOWID_LOCK, "+++LOCK FLOWID flags<0x%08x>") |
| BUZZZ_FMT(FLOWID_UNLOCK, "---UNLK FLOWID flags<0x%08x>") |
| |
| BUZZZ_FMT(START_XMIT_BGN, "{ dhd_start_xmit() ifidx<%u> skb<0x%p>") |
| BUZZZ_FMT(START_XMIT_END, "} dhd_start_xmit()") |
| BUZZZ_FMT(PROCESS_CTRL_BGN, "{ dhd_prot_process_ctrlbuf()") |
| BUZZZ_FMT(PROCESS_CTRL_END, "} dhd_prot_process_ctrlbuf()") |
| BUZZZ_FMT(UPDATE_TXFLOWRINGS_BGN, "{ dhd_update_txflowrings()"); |
| BUZZZ_FMT(UPDATE_TXFLOWRINGS_END, "} dhd_update_txflowrings()"); |
| BUZZZ_FMT(PROCESS_TXCPL_BGN, "{ dhd_prot_process_msgbuf_txcpl()") |
| BUZZZ_FMT(PROCESS_TXCPL_END, "} dhd_prot_process_msgbuf_txcpl()") |
| BUZZZ_FMT(PROCESS_RXCPL_BGN, "{ dhd_prot_process_msgbuf_rxcpl()") |
| BUZZZ_FMT(PROCESS_RXCPL_END, "} dhd_prot_process_msgbuf_rxcpl()") |
| |
| BUZZZ_FMT(GET_SRC_ADDR, "bytes<%u> @<0x%p> prot_get_src_addr()") |
| BUZZZ_FMT(WRITE_COMPLETE, "WR<%u> prot_ring_write_complete") |
| BUZZZ_FMT(ALLOC_RING_SPACE, "{ dhd_alloc_ring_space nitems<%d>") |
| BUZZZ_FMT(ALLOC_RING_SPACE_RET, "} dhd_alloc_ring_space() alloc<%d> @<0x%p>") |
| BUZZZ_FMT(ALLOC_RING_SPACE_FAIL, "FAILURE } dhd_alloc_ring_space() alloc<%d>") |
| |
| BUZZZ_FMT(PKTID_MAP_CLEAR, "pktid map clear") |
| BUZZZ_FMT(PKTID_NOT_AVAILABLE, "FAILURE pktid pool depletion failures<%u>") |
| BUZZZ_FMT(PKTID_MAP_RSV, "pktid<%u> pkt<0x%p> dhd_pktid_map_reserve()") |
| BUZZZ_FMT(PKTID_MAP_SAVE, "pktid<%u> pkt<0x%p> dhd_pktid_map_save()") |
| BUZZZ_FMT(PKTID_MAP_ALLOC, "pktid<%u> pkt<0x%p> dhd_pktid_map_alloc()") |
| BUZZZ_FMT(PKTID_MAP_FREE, "pktid<%u> pkt<0x%p> dhd_pktid_map_free()") |
| BUZZZ_FMT(LOCKER_INUSE_ABORT, "ASSERT pktid<%u> pkt<0x%p> locker->inuse") |
| BUZZZ_FMT(BUFFER_TYPE_ABORT1, "ASSERT pktid<%u> pkt<0x%p> locker->dma") |
| BUZZZ_FMT(BUFFER_TYPE_ABORT2, "ASSERT locker->dma<%u> buf_type<%u>") |
| |
| BUZZZ_FMT(UPD_READ_IDX, "RD<%u> prot_upd_read_idx()") |
| BUZZZ_FMT(STORE_RXCPLN_RD, "RD<%u> prot_store_rxcpln_read_idx()") |
| BUZZZ_FMT(EARLY_UPD_RXCPLN_RD, "RD<%u> prot_early_upd_rxcpln_read_idx()") |
| |
| BUZZZ_FMT(POST_TXDATA, "flr<%u> pkt<0x%p> dhd_prot_txdata()") |
| BUZZZ_FMT(RETURN_RXBUF, "cnt<%u> dhd_prot_return_rxbuf()"); |
| BUZZZ_FMT(RXBUF_POST, "cnt<%u> dhd_prot_rxbufpost()"); |
| BUZZZ_FMT(RXBUF_POST_EVENT, "event dhd_prot_rxbufpost_ctrl()"); |
| BUZZZ_FMT(RXBUF_POST_IOCTL, "ioctl dhd_prot_rxbufpost_ctrl()"); |
| BUZZZ_FMT(RXBUF_POST_CTRL_PKTGET_FAIL, "FAILURE pktget dhd_prot_rxbufpost_ctrl()"); |
| BUZZZ_FMT(RXBUF_POST_PKTGET_FAIL, "FAILURE pktget loop<%u> dhd_prot_rxbufpost()") |
| BUZZZ_FMT(RXBUF_POST_PKTID_FAIL, "FAILURE pktid loop<%u> dhd_prot_rxbufpost()") |
| |
| BUZZZ_FMT(DHD_DUPLICATE_ALLOC, "ASSERT dhd_pktid_audit(%u) DHD_DUPLICATE_ALLOC") |
| BUZZZ_FMT(DHD_DUPLICATE_FREE, "ASSERT dhd_pktid_audit(%u) DHD_DUPLICATE_FREE") |
| BUZZZ_FMT(DHD_TEST_IS_ALLOC, "ASSERT dhd_pktid_audit(%u) DHD_TEST_IS_ALLOC") |
| BUZZZ_FMT(DHD_TEST_IS_FREE, "ASSERT dhd_pktid_audit(%u) DHD_TEST_IS_FREE") |
| |
| BUZZZ_FMT(DHD_PROT_IOCT_BGN, "{ dhd_prot_ioct pending<%u> thread<0x%p>") |
| BUZZZ_FMT(DHDMSGBUF_CMPLT_BGN, "{ dhdmsgbuf_cmplt bus::retlen<%u> bus::pktid<%u>") |
| BUZZZ_FMT(DHDMSGBUF_CMPLT_END, "} dhdmsgbuf_cmplt resp_len<%d> pktid<%u>") |
| BUZZZ_FMT(DHD_PROT_IOCT_END, "} dhd_prot_ioct pending<%u> thread<0x%p>") |
| BUZZZ_FMT(DHD_FILLUP_IOCT_REQST_BGN, "{ dhd_fillup_ioct_reqst_ptrbased cmd<%u> transid<%u>") |
| BUZZZ_FMT(DHD_FILLUP_IOCT_REQST_END, |
| "} dhd_fillup_ioct_reqst_ptrbased transid<%u> bus::pktid<%u>") |
| BUZZZ_FMT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_BGN, |
| "{ dhd_msgbuf_rxbuf_post_ioctlresp_bufs cur_posted<%u> bus::pktid<%u>") |
| BUZZZ_FMT(DHD_MSGBUF_RXBUF_POST_IOCTLRESP_BUFS_END, |
| "} dhd_msgbuf_rxbuf_post_ioctlresp_bufs cur_posted<%u> bus::pktid<%u>") |
| BUZZZ_FMT(DHD_PROT_IOCTCMPLT_PROCESS_ONE, |
| "{ dhd_prot_ioctlcmplt_process cmd<%d> transid<%d>") |
| BUZZZ_FMT(DHD_PROT_IOCTCMPLT_PROCESS_TWO, |
| "} dhd_prot_ioctlcmplt_process resplen<%u> pktid<%u>") |
| BUZZZ_FMT(DHD_PROT_EVENT_PROCESS_BGN, "{ dhd_prot_event_process pktid<%u>") |
| BUZZZ_FMT(DHD_PROT_EVENT_PROCESS_END, "} dhd_prot_event_process buflen<%u> pkt<0x%p>") |
| BUZZZ_FMT(DHD_PROT_D2H_SYNC_LIVELOCK, " dhd_prot_d2h_sync_livelock seqnum<%u>") |
| BUZZZ_FMT(DHD_IOCTL_BUFPOST, " dhd_prot_rxbufpost_ctrl ioctl pktid<%u> phyaddr<0x%x>") |
| BUZZZ_FMT(DHD_EVENT_BUFPOST, " dhd_prot_rxbufpost_ctrl event pktid<%u> phyaddr<0x%x>") |
| BUZZZ_FMT(DHD_PROC_MSG_TYPE, " dhd_process_msgtype msg<0x%x> epoch<%u>") |
| BUZZZ_FMT(DHD_BUS_RXCTL_ONE, "dhd_bus_rxctl prev resplen<%u> pktid<%u>") |
| BUZZZ_FMT(DHD_BUS_RXCTL_TWO, "dhd_bus_rxctl cur resplen<%u> pktid<%u>") |
| } |
| |
| #define BUZZZ_LOG(ID, N, ARG...) dhd_buzzz_log ##N(BUZZZ_EVT__ ##ID, ##ARG) |
| |
| #else /* DHD_BUZZZ_LOG_ENABLED */ |
| /* |
| * Broadcom logging system - Empty implementaiton |
| */ |
| |
| #define dhd_buzzz_attach() do { /* noop */ } while (0) |
| #define dhd_buzzz_detach() do { /* noop */ } while (0) |
| #define dhd_buzzz_panic(x) do { /* noop */ } while (0) |
| #define BUZZZ_LOG(ID, N, ARG...) do { /* noop */ } while (0) |
| |
| #endif /* DHD_BUZZZ_LOG_ENABLED */ |
| |
| #endif /* _DHD_BUZZZ_H_INCLUDED_ */ |