diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index 286c742d7c15..d91d991d126c 100644 --- a/hif/src/ce/ce_main.c +++ b/hif/src/ce/ce_main.c @@ -1445,8 +1445,8 @@ hif_send_head(struct hif_opaque_softc *hif_ctx, QDF_NBUF_UPDATE_TX_PKT_COUNT(nbuf, QDF_NBUF_TX_PKT_HIF); DPTRACE(qdf_dp_trace(nbuf, QDF_DP_TRACE_HIF_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(nbuf), - sizeof(qdf_nbuf_data(nbuf)), QDF_TX)); + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(nbuf), + sizeof(qdf_nbuf_data(nbuf)), QDF_TX)); status = ce_sendlist_send(ce_hdl, nbuf, &sendlist, transfer_id); QDF_ASSERT(status == QDF_STATUS_SUCCESS); diff --git a/hif/src/ce/ce_service.c b/hif/src/ce/ce_service.c index 136be8bd60c0..86cdcc8909d0 100644 --- a/hif/src/ce/ce_service.c +++ b/hif/src/ce/ce_service.c @@ -572,6 +572,7 @@ ce_sendlist_send_legacy(struct CE_handle *copyeng, QDF_NBUF_TX_PKT_CE); DPTRACE(qdf_dp_trace((qdf_nbuf_t)per_transfer_context, QDF_DP_TRACE_CE_PACKET_PTR_RECORD, + QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)&(((qdf_nbuf_t)per_transfer_context)->data), sizeof(((qdf_nbuf_t)per_transfer_context)->data), QDF_TX)); @@ -756,7 +757,7 @@ int ce_send_fast(struct CE_handle *copyeng, qdf_nbuf_t msdu, DPTRACE(qdf_dp_trace(msdu, QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(msdu), + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(msdu), sizeof(qdf_nbuf_data(msdu)), QDF_TX)); } diff --git a/hif/src/ce/ce_service_srng.c b/hif/src/ce/ce_service_srng.c index 51c841148573..c9e245831610 100644 --- a/hif/src/ce/ce_service_srng.c +++ b/hif/src/ce/ce_service_srng.c @@ -206,6 +206,7 @@ ce_sendlist_send_srng(struct CE_handle *copyeng, QDF_NBUF_TX_PKT_CE); DPTRACE(qdf_dp_trace((qdf_nbuf_t)per_transfer_context, QDF_DP_TRACE_CE_PACKET_PTR_RECORD, + QDF_TRACE_DEFAULT_PDEV_ID, (uint8_t *)(((qdf_nbuf_t)per_transfer_context)->data), sizeof(((qdf_nbuf_t)per_transfer_context)->data), QDF_TX)); } else { diff --git a/htc/htc_send.c b/htc/htc_send.c index 38e46a17e9f3..172a5c2a4d04 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -1636,8 +1636,8 @@ A_STATUS htc_send_data_pkt(HTC_HANDLE HTCHandle, qdf_nbuf_t netbuf, int Epid, QDF_NBUF_UPDATE_TX_PKT_COUNT(netbuf, QDF_NBUF_TX_PKT_HTC); DPTRACE(qdf_dp_trace(netbuf, QDF_DP_TRACE_HTC_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(netbuf), - sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(netbuf), + sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); status = hif_send_head(target->hif_dev, pEndpoint->UL_PipeID, pEndpoint->Id, ActualLength, netbuf, data_attr); @@ -1793,8 +1793,8 @@ A_STATUS htc_send_data_pkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket, } QDF_NBUF_UPDATE_TX_PKT_COUNT(netbuf, QDF_NBUF_TX_PKT_HTC); DPTRACE(qdf_dp_trace(netbuf, QDF_DP_TRACE_HTC_PACKET_PTR_RECORD, - qdf_nbuf_data_addr(netbuf), - sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); + QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(netbuf), + sizeof(qdf_nbuf_data(netbuf)), QDF_TX)); /* send what we can */ while (true) { diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 3eab871bbe62..19243d13826a 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -100,6 +100,7 @@ #define QDF_NBUF_TX_PKT_CE 8 #define QDF_NBUF_TX_PKT_FREE 9 #define QDF_NBUF_TX_PKT_STATE_MAX 10 +#define QDF_NBUF_TX_PKT_LI_DP 11 /* Enable flag to print TSO specific prints in datapath */ #ifdef TSO_DEBUG_LOG_ENABLE diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h index 81d2d64c5880..9f9f0e063ede 100644 --- a/qdf/inc/qdf_trace.h +++ b/qdf/inc/qdf_trace.h @@ -69,7 +69,17 @@ typedef int (qdf_abstract_print)(void *priv, const char *fmt, ...); #define QDF_DEBUG_ERROR 0x20 #define QDF_DEBUG_CFG 0x40 + +/* DP Trace Implementation */ +#ifdef CONFIG_DP_TRACE +#define DPTRACE(p) p +#else +#define DPTRACE(p) +#endif + #ifdef CONFIG_MCL +void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data); +#endif /* By default Data Path module will have all log levels enabled, except debug * log level. Debug level will be left up to the framework or user space modules @@ -84,6 +94,7 @@ typedef int (qdf_abstract_print)(void *priv, const char *fmt, ...); /* Preprocessor definitions and constants */ #define ASSERT_BUFFER_SIZE (512) +#define QDF_TRACE_DEFAULT_PDEV_ID 0xff #define MAX_QDF_TRACE_RECORDS 4000 #define INVALID_QDF_TRACE_ADDR 0xffffffff #define DEFAULT_QDF_TRACE_DUMP_COUNT 0 @@ -142,12 +153,6 @@ typedef struct s_qdf_trace_data { #define CASE_RETURN_STRING(str) case ((str)): return (uint8_t *)(# str); -/* DP Trace Implementation */ -#ifdef FEATURE_DP_TRACE -#define DPTRACE(p) p -#else -#define DPTRACE(p) -#endif #define MAX_QDF_DP_TRACE_RECORDS 4000 #define QDF_DP_TRACE_RECORD_SIZE 16 @@ -170,12 +175,14 @@ typedef struct s_qdf_trace_data { * @QDF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout * @QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT- SOFTAP HDD tx timeout * @QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD - HDD layer ptr record + * @QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD - Lithium DP layer ptr record * @QDF_DP_TRACE_CE_PACKET_PTR_RECORD - CE layer ptr record * @QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD- CE fastpath ptr record * @QDF_DP_TRACE_FREE_PACKET_PTR_RECORD - tx completion ptr record * @QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD - HTT RX record * @QDF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD- HTT RX offload record * @QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD - HDD RX record + * @QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD - Lithium DP RX record * @QDF_DP_TRACE_LOW_VERBOSITY - below this are part of low verbosity * @QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD -tx queue ptr record * @QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD - txrx packet ptr record @@ -187,6 +194,10 @@ typedef struct s_qdf_trace_data { * @QDF_DP_TRACE_MED_VERBOSITY - below this are part of med verbosity * @QDF_DP_TRACE_HDD_TX_PACKET_RECORD - record 32 bytes of tx pkt at HDD * @QDF_DP_TRACE_HDD_RX_PACKET_RECORD - record 32 bytes of rx pkt at HDD + * @QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD - record 32 bytes of tx pkt at LI_DP + * @QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD - record 32 bytes of rx pkt at LI_DP + * @QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD + * - record 32 bytes of rx null_queue pkt at LI_DP * @QDF_DP_TRACE_HIGH_VERBOSITY - below this are part of high verbosity */ enum QDF_DP_TRACE_ID { @@ -201,12 +212,14 @@ enum QDF_DP_TRACE_ID { QDF_DP_TRACE_HDD_TX_TIMEOUT, QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT, QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD, + QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD, QDF_DP_TRACE_CE_PACKET_PTR_RECORD, QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD, QDF_DP_TRACE_FREE_PACKET_PTR_RECORD, QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD, QDF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD, QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD, + QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD, QDF_DP_TRACE_LOW_VERBOSITY, QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD, QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD, @@ -218,6 +231,9 @@ enum QDF_DP_TRACE_ID { QDF_DP_TRACE_MED_VERBOSITY, QDF_DP_TRACE_HDD_TX_PACKET_RECORD, QDF_DP_TRACE_HDD_RX_PACKET_RECORD, + QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD, + QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD, + QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD, QDF_DP_TRACE_HIGH_VERBOSITY, QDF_DP_TRACE_MAX }; @@ -302,6 +318,7 @@ struct qdf_dp_trace_record_s { uint8_t data[QDF_DP_TRACE_RECORD_SIZE]; uint8_t size; uint32_t pid; + uint8_t pdev_id; }; /** @@ -371,7 +388,6 @@ void qdf_register_debug_callback(QDF_MODULE_ID module_id, tp_qdf_state_info_cb qdf_state_infocb); QDF_STATUS qdf_state_info_dump_all(char *buf, uint16_t size, uint16_t *driver_dump_size); -void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data); void qdf_trace_register(QDF_MODULE_ID, tp_qdf_trace_cb); QDF_STATUS qdf_trace_spin_lock_init(void); void qdf_trace_init(void); @@ -379,46 +395,56 @@ void qdf_trace_enable(uint32_t, uint8_t enable); void qdf_trace_dump_all(void *, uint8_t, uint8_t, uint32_t, uint32_t); -#ifdef FEATURE_DP_TRACE +#ifdef CONFIG_DP_TRACE +void qdf_dp_set_proto_bitmap(uint32_t val); +void qdf_dp_trace_set_verbosity(uint32_t val); +void qdf_dp_set_no_of_record(uint32_t val); void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir); + enum qdf_proto_dir dir, uint8_t pdev_id); void qdf_dp_trace_init(void); void qdf_dp_trace_spin_lock_init(void); void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records, uint8_t verbosity); void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir); -void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, +void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id, uint8_t *data, uint8_t size, enum qdf_proto_dir dir); -void qdf_dp_trace_dump_all(uint32_t count); -typedef void (*tp_qdf_dp_trace_cb)(struct qdf_dp_trace_record_s* , uint16_t); +void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id); +typedef void (*tp_qdf_dp_trace_cb)(struct qdf_dp_trace_record_s*, + uint16_t, uint8_t); void qdf_dp_display_record(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t status); + uint8_t pdev_id, uint8_t *data, uint8_t size, uint16_t msdu_id, + uint16_t status); void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *pRecord, - uint16_t recIndex); + uint16_t recIndex, uint8_t pdev_id); uint8_t qdf_dp_get_proto_bitmap(void); +uint8_t qdf_dp_get_verbosity(void); +uint8_t qdf_dp_get_no_of_record(void); void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - uint8_t *sa, uint8_t *da, enum qdf_proto_type type, - enum qdf_proto_subtype subtype, enum qdf_proto_dir dir); + uint8_t *sa, uint8_t *da, enum qdf_proto_type type, + enum qdf_proto_subtype subtype, enum qdf_proto_dir dir, + uint8_t pdev_id); void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_trace_enable_live_mode(void); void qdf_dp_trace_clear_buffer(void); void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype); + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype); void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record, - uint16_t index); + uint16_t index, uint8_t pdev_id); void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype); + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype); #else static inline void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { } static inline @@ -435,7 +461,7 @@ void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records, { } static inline -void qdf_dp_trace_dump_all(uint32_t count) +void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id) { } @@ -452,8 +478,6 @@ void qdf_dp_trace_clear_buffer(void) #endif -void qdf_trace_hex_dump(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, - void *data, int buf_len); void qdf_trace_display(void); @@ -467,14 +491,6 @@ void __printf(3, 4) qdf_snprintf(char *str_buffer, unsigned int size, #define QDF_SNPRINTF qdf_snprintf -#else - -#define DPTRACE(x) -#define qdf_trace_hex_dump(x, y, z, q) - -#endif /* CONFIG_MCL */ - - #ifdef TSOSEG_DEBUG static inline int qdf_tso_seg_dbg_record(struct qdf_tso_seg_elem_t *tsoseg, @@ -531,6 +547,9 @@ qdf_tso_seg_dbg_zero(struct qdf_tso_seg_elem_t *tsoseg) #endif /* TSOSEG_DEBUG */ +void qdf_trace_hex_dump(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, + void *data, int buf_len); + #define ERROR_CODE -1 #define QDF_MAX_NAME_SIZE 32 #define MAX_PRINT_CONFIG_SUPPORTED 32 diff --git a/qdf/inc/qdf_types.h b/qdf/inc/qdf_types.h index b217580ea9e1..c6ecefb89925 100644 --- a/qdf/inc/qdf_types.h +++ b/qdf/inc/qdf_types.h @@ -394,6 +394,7 @@ typedef enum { QDF_MODULE_ID_OFFCHAN_TXRX, QDF_MODULE_ID_SON, QDF_MODULE_ID_SPECTRAL, + QDF_MODULE_ID_OBJ_MGR, QDF_MODULE_ID_ANY, QDF_MODULE_ID_MAX, } QDF_MODULE_ID; diff --git a/qdf/linux/src/i_qdf_nbuf.h b/qdf/linux/src/i_qdf_nbuf.h index 727f96f58632..1812b8a2bd8e 100644 --- a/qdf/linux/src/i_qdf_nbuf.h +++ b/qdf/linux/src/i_qdf_nbuf.h @@ -177,10 +177,26 @@ struct qdf_nbuf_cb { } extra_frag; /* 19 bytes */ union { struct { - uint8_t ftype; - uint32_t submit_ts; + union { + struct { + uint8_t packet_state:7, + is_packet_priv:1; + uint8_t packet_track:4, + proto_type:4; + uint8_t dp_trace:1, + is_bcast:1, + is_mcast:1, + packet_type:3, + /* used only for hl*/ + htt2_frm:1, + print:1; + uint8_t vdev_id; + } trace; /* 4 bytes */ + uint32_t submit_ts; + } u; void *fctx; void *vdev_ctx; + uint8_t ftype; } win; /* 21 bytes*/ struct { uint32_t data_attr; /* 4 bytes */ @@ -281,6 +297,34 @@ struct qdf_nbuf_cb { ((skb)->cb))->u.tx.extra_frag.flags.bits.flag_nbuf) #define QDF_NBUF_CB_TX_DATA_ATTR(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.data_attr) +#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \ + qdf_nbuf_set_state(skb, PACKET_STATE) + + +#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.owned) + +#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.priv) + +#define QDF_NBUF_CB_TX_FTYPE(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ftype) + +#define QDF_NBUF_CB_TX_FCTX(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.fctx) + +#define QDF_NBUF_CB_TX_VDEV_CTX(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.vdev_ctx) + + +#ifndef CONFIG_WIN + +#define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.mcl.trace.is_packet_priv) + +#define QDF_NBUF_CB_TX_DESC_ID(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.desc_id) #define QDF_NBUF_CB_TX_PACKET_STATE(skb) \ (((struct qdf_nbuf_cb *) \ ((skb)->cb))->u.tx.dev.mcl.trace.packet_state) @@ -290,8 +334,6 @@ struct qdf_nbuf_cb { #define QDF_NBUF_CB_TX_PROTO_TYPE(skb) \ (((struct qdf_nbuf_cb *) \ ((skb)->cb))->u.tx.dev.mcl.trace.proto_type) -#define QDF_NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \ - qdf_nbuf_set_state(skb, PACKET_STATE) #define QDF_NBUF_GET_PACKET_TRACK(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_track) #define QDF_NBUF_CB_TX_DP_TRACE(skb) \ @@ -302,27 +344,77 @@ struct qdf_nbuf_cb { (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.htt2_frm) #define QDF_NBUF_CB_TX_VDEV_ID(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.vdev_id) + #define QDF_NBUF_CB_GET_IS_BCAST(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_bcast) #define QDF_NBUF_CB_GET_IS_MCAST(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.is_mcast) #define QDF_NBUF_CB_GET_PACKET_TYPE(skb) \ (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.trace.packet_type) -#define QDF_NBUF_CB_TX_IPA_OWNED(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.owned) -#define QDF_NBUF_CB_TX_IPA_PRIV(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.ipa.priv) -#define QDF_NBUF_CB_TX_DESC_ID(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.mcl.desc_id) -#define QDF_NBUF_CB_TX_FTYPE(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.ftype) -#define QDF_NBUF_CB_TX_SUBMIT_TS(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.submit_ts) -#define QDF_NBUF_CB_TX_FCTX(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.fctx) -#define QDF_NBUF_CB_TX_VDEV_CTX(skb) \ - (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.vdev_ctx) +#define QDF_NBUF_CB_SET_BCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.mcl.trace.is_bcast = true) +#define QDF_NBUF_CB_SET_MCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.mcl.trace.is_mcast = true) + +#else + +#define QDF_NBUF_CB_TX_DESC_ID(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.desc_id) + +#define QDF_NBUF_CB_TX_PACKET_STATE(skb)\ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.packet_state) + +#define QDF_NBUF_CB_TX_IS_PACKET_PRIV(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.is_packet_priv) + +#define QDF_NBUF_CB_TX_PACKET_TRACK(skb)\ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.packet_track) + +#define QDF_NBUF_CB_TX_SUBMIT_TS(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.submit_ts) + +#define QDF_NBUF_CB_TX_PROTO_TYPE(skb)\ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.proto_type) + +#define QDF_NBUF_GET_PACKET_TRACK(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.trace.packet_track) + +#define QDF_NBUF_CB_TX_DP_TRACE(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.dp_trace) + +#define QDF_NBUF_CB_DP_TRACE_PRINT(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.print) + +#define QDF_NBUF_CB_TX_HL_HTT2_FRM(skb) \ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.htt2_frm) + +#define QDF_NBUF_CB_TX_VDEV_ID(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.vdev_id) + +#define QDF_NBUF_CB_GET_IS_BCAST(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.is_bcast) + +#define QDF_NBUF_CB_GET_IS_MCAST(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.is_mcast) + +#define QDF_NBUF_CB_GET_PACKET_TYPE(skb)\ + (((struct qdf_nbuf_cb *)((skb)->cb))->u.tx.dev.win.u.trace.packet_type) + +#define QDF_NBUF_CB_SET_BCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.is_bcast = true) + +#define QDF_NBUF_CB_SET_MCAST(skb) \ + (((struct qdf_nbuf_cb *) \ + ((skb)->cb))->u.tx.dev.win.u.trace.is_mcast = true) +#endif /* assume the OS provides a single fragment */ #define __qdf_nbuf_get_num_frags(skb) \ @@ -538,6 +630,7 @@ void __qdf_nbuf_frag_info(struct sk_buff *skb, qdf_sglist_t *sg); QDF_STATUS __qdf_nbuf_frag_map( qdf_device_t osdev, __qdf_nbuf_t nbuf, int offset, qdf_dma_dir_t dir, int cur_frag); +void qdf_nbuf_classify_pkt(struct sk_buff *skb); bool __qdf_nbuf_is_ipv4_wapi_pkt(struct sk_buff *skb); bool __qdf_nbuf_data_is_ipv4_pkt(uint8_t *data); diff --git a/qdf/linux/src/i_qdf_trace.h b/qdf/linux/src/i_qdf_trace.h index 1ec827fe3927..5c53f1be1482 100644 --- a/qdf/linux/src/i_qdf_trace.h +++ b/qdf/linux/src/i_qdf_trace.h @@ -95,7 +95,8 @@ /* This code will be used for compilation if tracing is to be compiled out */ /* of the code so these functions/macros are 'do nothing' */ -static inline void qdf_trace_msg(QDF_MODULE_ID module, ...) +static inline void qdf_trace_msg(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, + char *str_format, ...) { } diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index 0ddc32058e62..88665521dc74 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -2788,3 +2788,35 @@ void __qdf_nbuf_reg_free_cb(qdf_nbuf_free_t cb_func_ptr) nbuf_free_cb = cb_func_ptr; return; } + +/** + * qdf_nbuf_classify_pkt() - classify packet + * @skb - sk buff + * + * Return: none + */ +void qdf_nbuf_classify_pkt(struct sk_buff *skb) +{ + struct ethhdr *eh = (struct ethhdr *)skb->data; + qdf_mem_set(skb->cb, sizeof(skb->cb), 0); + + /* check destination mac address is broadcast/multicast */ + if (is_broadcast_ether_addr((uint8_t *)eh)) + QDF_NBUF_CB_SET_BCAST(skb); + else if (is_multicast_ether_addr((uint8_t *)eh)) + QDF_NBUF_CB_SET_MCAST(skb); + + if (qdf_nbuf_is_ipv4_arp_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_ARP; + else if (qdf_nbuf_is_ipv4_dhcp_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_DHCP; + else if (qdf_nbuf_is_ipv4_eapol_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_EAPOL; + else if (qdf_nbuf_is_ipv4_wapi_pkt(skb)) + QDF_NBUF_CB_GET_PACKET_TYPE(skb) = + QDF_NBUF_CB_PACKET_TYPE_WAPI; +} +EXPORT_SYMBOL(qdf_nbuf_classify_pkt); diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index 62552a267adf..17b0495c71c2 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/qdf/linux/src/qdf_trace.c @@ -41,7 +41,6 @@ #include #include static int qdf_pidx = -1; -#ifdef CONFIG_MCL #include "qdf_time.h" #include "qdf_mc_timer.h" @@ -110,7 +109,7 @@ static tp_qdf_trace_cb qdf_trace_cb_table[QDF_MODULE_ID_MAX]; static tp_qdf_trace_cb qdf_trace_restore_cb_table[QDF_MODULE_ID_MAX]; static tp_qdf_state_info_cb qdf_state_info_table[QDF_MODULE_ID_MAX]; -#ifdef FEATURE_DP_TRACE +#ifdef CONFIG_DP_TRACE /* Static and Global variables */ static spinlock_t l_dp_trace_lock; @@ -441,6 +440,8 @@ void qdf_trace_init(void) } EXPORT_SYMBOL(qdf_trace_init); +#ifdef CONFIG_MCL + /** * qdf_trace() - puts the messages in to ring-buffer * @module: Enum of module, basically module id. @@ -510,6 +511,8 @@ void qdf_trace(uint8_t module, uint8_t code, uint16_t session, uint32_t data) } EXPORT_SYMBOL(qdf_trace); +#endif + /** * qdf_trace_spin_lock_init() - initializes the lock variable before use * @@ -567,7 +570,7 @@ EXPORT_SYMBOL(qdf_trace_register); * Return: None */ void qdf_trace_dump_all(void *p_mac, uint8_t code, uint8_t session, - uint32_t count, uint32_t bitmask_of_module) + uint32_t count, uint32_t bitmask_of_module) { qdf_trace_record_t p_record; int32_t i, tail; @@ -713,9 +716,9 @@ QDF_STATUS qdf_state_info_dump_all(char *buf, uint16_t size, } EXPORT_SYMBOL(qdf_state_info_dump_all); -#ifdef FEATURE_DP_TRACE +#ifdef CONFIG_DP_TRACE static void qdf_dp_unused(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { qdf_print("%s: QDF_DP_TRACE_MAX event should not be generated", __func__); @@ -784,6 +787,68 @@ void qdf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_record, } EXPORT_SYMBOL(qdf_dp_trace_set_value); +/** + * qdf_dp_trace_set_verbosity() - set verbosity value + * + * @val: Value to set + * + * Return: Null + */ +void qdf_dp_trace_set_verbosity(uint32_t val) +{ + g_qdf_dp_trace_data.verbosity = val; +} +EXPORT_SYMBOL(qdf_dp_trace_set_verbosity); + +/** + * qdf_dp_get_verbosity) - get verbosity value + * + * Return: int + */ +uint8_t qdf_dp_get_verbosity(void) +{ + return g_qdf_dp_trace_data.verbosity; +} +EXPORT_SYMBOL(qdf_dp_get_verbosity); + +/** + * qdf_dp_set_proto_bitmap() - set dp trace proto bitmap + * + * @val : unsigned bitmap to set + * + * Return: proto bitmap + */ +void qdf_dp_set_proto_bitmap(uint32_t val) +{ + g_qdf_dp_trace_data.proto_bitmap = val; +} +EXPORT_SYMBOL(qdf_dp_set_proto_bitmap); + +/** + * qdf_dp_set_no_of_record() - set dp trace no_of_record + * + * @val : unsigned no_of_record to set + * + * Return: null + */ +void qdf_dp_set_no_of_record(uint32_t val) +{ + g_qdf_dp_trace_data.no_of_record = val; +} +EXPORT_SYMBOL(qdf_dp_set_no_of_record); + +/** + * qdf_dp_get_no_of_record() - get dp trace no_of_record + * + * Return: number of records + */ +uint8_t qdf_dp_get_no_of_record(void) +{ + return g_qdf_dp_trace_data.no_of_record; +} +EXPORT_SYMBOL(qdf_dp_get_no_of_record); + + /** * qdf_dp_trace_enable_track() - enable the tracing for netbuf * @code: defines the event @@ -859,9 +924,13 @@ void qdf_dp_trace_set_track(qdf_nbuf_t nbuf, enum qdf_proto_dir dir) return; } EXPORT_SYMBOL(qdf_dp_trace_set_track); - +#if CONFIG_MCL #define DPTRACE_PRINT(args...) \ QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_INFO, ## args) +#else +#define DPTRACE_PRINT(args...) \ + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_NONE, ## args) +#endif /** * dump_hex_trace() - Display the data in buffer @@ -913,8 +982,12 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code) return "EVENT:"; case QDF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD: return "HDD: TX: PTR:"; + case QDF_DP_TRACE_LI_DP_TX_PACKET_PTR_RECORD: + return "LI_DP: TX: PTR:"; case QDF_DP_TRACE_HDD_TX_PACKET_RECORD: return "HDD: TX: DATA:"; + case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD: + return "LI_DP: TX: DATA:"; case QDF_DP_TRACE_CE_PACKET_PTR_RECORD: return "CE: TX: PTR:"; case QDF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD: @@ -927,8 +1000,14 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code) return "HTT: RX: OF: PTR:"; case QDF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD: return "HDD: RX: PTR:"; + case QDF_DP_TRACE_RX_LI_DP_PACKET_PTR_RECORD: + return "LI_DP: RX: PTR:"; case QDF_DP_TRACE_HDD_RX_PACKET_RECORD: return "HDD: RX: DATA:"; + case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD: + return "LI_DP: RX: DATA:"; + case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD: + return "LI_DP_NULL: RX: DATA:"; case QDF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD: return "TXRX: TX: Q: PTR:"; case QDF_DP_TRACE_TXRX_PACKET_PTR_RECORD: @@ -1081,12 +1160,13 @@ static bool qdf_dp_enable_check(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, * @code: dptrace code * @data: data pointer * @size: size of buffer + * @pdev_id: pdev_id * @print: true to print it in kmsg * * Return: none */ -static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, bool print) +static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, uint8_t *data, + uint8_t size, uint8_t pdev_id, bool print) { struct qdf_dp_trace_record_s *rec = NULL; int index; @@ -1119,6 +1199,7 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, rec = &g_qdf_dp_trace_tbl[g_qdf_dp_trace_data.tail]; index = g_qdf_dp_trace_data.tail; rec->code = code; + rec->pdev_id = pdev_id; rec->size = 0; if (data != NULL && size > 0) { if (size > QDF_DP_TRACE_RECORD_SIZE) @@ -1134,7 +1215,8 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, if ((g_qdf_dp_trace_data.live_mode || (print == true)) && (rec->code < QDF_DP_TRACE_MAX)) - qdf_dp_trace_cb_table[rec->code] (rec, index); + qdf_dp_trace_cb_table[rec->code] (rec, index, + QDF_TRACE_DEFAULT_PDEV_ID); } @@ -1143,11 +1225,12 @@ static void qdf_dp_add_record(enum QDF_DP_TRACE_ID code, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: true/false */ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { enum qdf_proto_subtype subtype; @@ -1160,7 +1243,7 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb, DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_EAPOL_PACKET_RECORD, session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET), (skb->data + QDF_NBUF_DEST_MAC_OFFSET), - QDF_PROTO_TYPE_EAPOL, subtype, dir)); + QDF_PROTO_TYPE_EAPOL, subtype, dir, pdev_id)); if (QDF_TX == dir) QDF_NBUF_CB_TX_DP_TRACE(skb) = 1; else if (QDF_RX == dir) @@ -1177,11 +1260,12 @@ static bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: true/false */ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { enum qdf_proto_subtype subtype = QDF_PROTO_INVALID; @@ -1194,7 +1278,7 @@ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb, DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_DHCP_PACKET_RECORD, session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET), (skb->data + QDF_NBUF_DEST_MAC_OFFSET), - QDF_PROTO_TYPE_DHCP, subtype, dir)); + QDF_PROTO_TYPE_DHCP, subtype, dir, pdev_id)); if (QDF_TX == dir) QDF_NBUF_CB_TX_DP_TRACE(skb) = 1; else if (QDF_RX == dir) @@ -1211,11 +1295,12 @@ static bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: true/false */ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { enum qdf_proto_subtype proto_subtype; @@ -1228,7 +1313,7 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb, DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ARP_PACKET_RECORD, session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET), (skb->data + QDF_NBUF_DEST_MAC_OFFSET), - QDF_PROTO_TYPE_ARP, proto_subtype, dir)); + QDF_PROTO_TYPE_ARP, proto_subtype, dir, pdev_id)); if (QDF_TX == dir) QDF_NBUF_CB_TX_DP_TRACE(skb) = 1; else if (QDF_RX == dir) @@ -1245,19 +1330,20 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb, * @session_id: vdev_id * @skb: skb pointer * @dir: direction + * @pdev_id: pdev_id * * Return: none */ void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, uint8_t pdev_id) { if (qdf_dp_get_proto_bitmap()) { if (qdf_log_arp_pkt(session_id, - skb, dir) == false) { + skb, dir, pdev_id) == false) { if (qdf_log_dhcp_pkt(session_id, - skb, dir) == false) { + skb, dir, pdev_id) == false) { if (qdf_log_eapol_pkt(session_id, - skb, dir) == false) { + skb, dir, pdev_id) == false) { return; } } @@ -1274,7 +1360,7 @@ EXPORT_SYMBOL(qdf_dp_trace_log_pkt); * Return: none */ void qdf_dp_display_mgmt_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_mgmt_buf *buf = (struct qdf_dp_trace_mgmt_buf *)record->data; @@ -1291,13 +1377,15 @@ EXPORT_SYMBOL(qdf_dp_display_mgmt_pkt); * qdf_dp_trace_mgmt_pkt() - record mgmt packet * @code: dptrace code * @vdev_id: vdev id + * @pdev_id: pdev_id * @type: proto type * @subtype: proto subtype * * Return: none */ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype) + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype) { struct qdf_dp_trace_mgmt_buf buf; int buf_size = sizeof(struct qdf_dp_trace_mgmt_buf); @@ -1311,7 +1399,7 @@ void qdf_dp_trace_mgmt_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, buf.type = type; buf.subtype = subtype; buf.vdev_id = vdev_id; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true); } EXPORT_SYMBOL(qdf_dp_trace_mgmt_pkt); @@ -1323,7 +1411,7 @@ EXPORT_SYMBOL(qdf_dp_trace_mgmt_pkt); * Return: none */ void qdf_dp_display_event_record(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_event_buf *buf = (struct qdf_dp_trace_event_buf *)record->data; @@ -1340,13 +1428,15 @@ EXPORT_SYMBOL(qdf_dp_display_event_record); * qdf_dp_trace_record_event() - record events * @code: dptrace code * @vdev_id: vdev id + * @pdev_id: pdev_id * @type: proto type * @subtype: proto subtype * * Return: none */ void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, - enum qdf_proto_type type, enum qdf_proto_subtype subtype) + uint8_t pdev_id, enum qdf_proto_type type, + enum qdf_proto_subtype subtype) { struct qdf_dp_trace_event_buf buf; int buf_size = sizeof(struct qdf_dp_trace_event_buf); @@ -1360,7 +1450,7 @@ void qdf_dp_trace_record_event(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, buf.type = type; buf.subtype = subtype; buf.vdev_id = vdev_id; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true); } EXPORT_SYMBOL(qdf_dp_trace_record_event); @@ -1372,7 +1462,7 @@ EXPORT_SYMBOL(qdf_dp_trace_record_event); * Return: none */ void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_proto_buf *buf = (struct qdf_dp_trace_proto_buf *)record->data; @@ -1398,12 +1488,14 @@ EXPORT_SYMBOL(qdf_dp_display_proto_pkt); * @type: proto type * @subtype: proto subtype * @dir: direction + * @pdev_id: pdev id * * Return: none */ void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, uint8_t *sa, uint8_t *da, enum qdf_proto_type type, - enum qdf_proto_subtype subtype, enum qdf_proto_dir dir) + enum qdf_proto_subtype subtype, enum qdf_proto_dir dir, + uint8_t pdev_id) { struct qdf_dp_trace_proto_buf buf; int buf_size = sizeof(struct qdf_dp_trace_ptr_buf); @@ -1420,7 +1512,7 @@ void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id, buf.type = type; buf.subtype = subtype; buf.vdev_id = vdev_id; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, true); } EXPORT_SYMBOL(qdf_dp_trace_proto_pkt); @@ -1432,7 +1524,7 @@ EXPORT_SYMBOL(qdf_dp_trace_proto_pkt); * Return: none */ void qdf_dp_display_ptr_record(struct qdf_dp_trace_record_s *record, - uint16_t index) + uint16_t index, uint8_t pdev_id) { struct qdf_dp_trace_ptr_buf *buf = (struct qdf_dp_trace_ptr_buf *)record->data; @@ -1454,6 +1546,7 @@ EXPORT_SYMBOL(qdf_dp_display_ptr_record); /** * qdf_dp_trace_ptr() - record dptrace * @code: dptrace code + * @pdev_id: pdev_id * @data: data * @size: size of data * @msdu_id: msdu_id @@ -1462,7 +1555,8 @@ EXPORT_SYMBOL(qdf_dp_display_ptr_record); * Return: none */ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t status) + uint8_t pdev_id, uint8_t *data, uint8_t size, + uint16_t msdu_id, uint16_t status) { struct qdf_dp_trace_ptr_buf buf; int buf_size = sizeof(struct qdf_dp_trace_ptr_buf); @@ -1476,7 +1570,7 @@ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, qdf_mem_copy(&buf.cookie, data, size); buf.msdu_id = msdu_id; buf.status = status; - qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, + qdf_dp_add_record(code, (uint8_t *)&buf, buf_size, pdev_id, QDF_NBUF_CB_DP_TRACE_PRINT(nbuf)); } EXPORT_SYMBOL(qdf_dp_trace_ptr); @@ -1489,23 +1583,31 @@ EXPORT_SYMBOL(qdf_dp_trace_ptr); * Return: None */ void qdf_dp_display_record(struct qdf_dp_trace_record_s *pRecord, - uint16_t recIndex) + uint16_t recIndex, uint8_t pdev_id) { - DPTRACE_PRINT("DPT: %04d: %s: %s", recIndex, - pRecord->time, qdf_dp_code_to_string(pRecord->code)); - switch (pRecord->code) { - case QDF_DP_TRACE_HDD_TX_TIMEOUT: - DPTRACE_PRINT("DPT: HDD TX Timeout\n"); - break; - case QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT: - DPTRACE_PRINT("DPT: HDD SoftAP TX Timeout\n"); - break; - case QDF_DP_TRACE_HDD_TX_PACKET_RECORD: - case QDF_DP_TRACE_HDD_RX_PACKET_RECORD: - dump_hex_trace("DATA", pRecord->data, pRecord->size); - break; - default: - dump_hex_trace("cookie", pRecord->data, pRecord->size); + if (pdev_id == QDF_TRACE_DEFAULT_PDEV_ID || + pdev_id == pRecord->pdev_id) { + + DPTRACE_PRINT("DPT: %04d: PDEV_ID = %d: %s: %s", recIndex, + pRecord->pdev_id, pRecord->time, + qdf_dp_code_to_string(pRecord->code)); + switch (pRecord->code) { + case QDF_DP_TRACE_HDD_TX_TIMEOUT: + DPTRACE_PRINT("DPT: HDD TX Timeout\n"); + break; + case QDF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT: + DPTRACE_PRINT("DPT: HDD SoftAP TX Timeout\n"); + break; + case QDF_DP_TRACE_HDD_TX_PACKET_RECORD: + case QDF_DP_TRACE_HDD_RX_PACKET_RECORD: + case QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD: + case QDF_DP_TRACE_LI_DP_RX_PACKET_RECORD: + case QDF_DP_TRACE_LI_DP_NULL_RX_PACKET_RECORD: + dump_hex_trace("DATA", pRecord->data, pRecord->size); + break; + default: + dump_hex_trace("cookie", pRecord->data, pRecord->size); + } } } EXPORT_SYMBOL(qdf_dp_display_record); @@ -1515,19 +1617,20 @@ EXPORT_SYMBOL(qdf_dp_display_record); * qdf_dp_trace() - Stores the data in buffer * @nbuf : defines the netbuf * @code : defines the event + * @pdev_id: pdev_id * @data : defines the data to be stored * @size : defines the size of the data record * * Return: None */ -void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, - uint8_t *data, uint8_t size, enum qdf_proto_dir dir) +void qdf_dp_trace(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id, + uint8_t *data, uint8_t size, enum qdf_proto_dir dir) { if (qdf_dp_enable_check(nbuf, code, dir) == false) return; - qdf_dp_add_record(code, data, size, + qdf_dp_add_record(code, data, size, pdev_id, (nbuf != NULL) ? QDF_NBUF_CB_DP_TRACE_PRINT(nbuf) : false); } EXPORT_SYMBOL(qdf_dp_trace); @@ -1587,12 +1690,12 @@ EXPORT_SYMBOL(qdf_dp_trace_clear_buffer); /** * qdf_dp_trace_dump_all() - Dump data from ring buffer via call back functions * registered with QDF - * @code: Reason code * @count: Number of lines to dump starting from tail to head + * @pdev_id: pdev_id * * Return: None */ -void qdf_dp_trace_dump_all(uint32_t count) +void qdf_dp_trace_dump_all(uint32_t count, uint8_t pdev_id) { struct qdf_dp_trace_record_s p_record; int32_t i, tail; @@ -1632,7 +1735,7 @@ void qdf_dp_trace_dump_all(uint32_t count) for (;; ) { qdf_dp_trace_cb_table[p_record. - code] (&p_record, (uint16_t)i); + code] (&p_record, (uint16_t)i, pdev_id); if (i == tail) break; i += 1; @@ -1652,26 +1755,6 @@ EXPORT_SYMBOL(qdf_dp_trace_dump_all); #endif -#else /* CONFIG_MCL */ - -void qdf_trace_msg(QDF_MODULE_ID module, QDF_TRACE_LEVEL level, - char *str_format, ...) -{ - va_list val; - - va_start(val, str_format); - /* - * TODO: remove this hack when modules start using the qdf_print_ctrl - * framework. - * Any newly added code that wishes to use QDF_TRACE needs to adapt - * to the framework, and using it this way is not encouraged. - */ - qdf_trace_msg_cmn(qdf_pidx, module, level, str_format, val); - va_end(val); -} -EXPORT_SYMBOL(qdf_trace_msg); -#endif /* CONFIG_MCL */ - struct qdf_print_ctrl print_ctrl_obj[MAX_PRINT_CONFIG_SUPPORTED]; struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = { @@ -1757,6 +1840,7 @@ struct category_name_info g_qdf_category_name[MAX_SUPPORTED_CATEGORY] = { [QDF_MODULE_ID_P2P] = {"P2P"}, [QDF_MODULE_ID_OFFCHAN_TXRX] = {"OFFCHAN"}, [QDF_MODULE_ID_REGULATORY] = {"REGULATORY"}, + [QDF_MODULE_ID_OBJ_MGR] = {"OBJMGR"}, [QDF_MODULE_ID_ANY] = {"ANY"}, }; EXPORT_SYMBOL(g_qdf_category_name); @@ -2173,6 +2257,7 @@ static void set_default_trace_levels(struct category_info *cinfo) [QDF_MODULE_ID_NAN] = QDF_TRACE_LEVEL_NONE, [QDF_MODULE_ID_P2P] = QDF_TRACE_LEVEL_NONE, [QDF_MODULE_ID_OFFCHAN_TXRX] = QDF_TRACE_LEVEL_NONE, + [QDF_MODULE_ID_OBJ_MGR] = QDF_TRACE_LEVEL_INFO, [QDF_MODULE_ID_ANY] = QDF_TRACE_LEVEL_NONE, }; diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h index 37315a69098b..06acabeb4fd5 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_cmn.h @@ -38,6 +38,28 @@ #define WLAN_PEER_HASH(addr) \ (((const uint8_t *)(addr))[WLAN_MACADDR_LEN - 1] % WLAN_PEER_HASHSIZE) +#define obj_mgr_log(level, args...) \ + QDF_TRACE(QDF_MODULE_ID_OBJ_MGR, level, ## args) + +#define obj_mgr_logfl(level, format, args...) \ + obj_mgr_log(level, FL(format), ## args) + +#define obj_mgr_alert(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_FATAL, format, ## args) + +#define obj_mgr_err(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_ERROR, format, ## args) + +#define obj_mgr_warn(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_WARN, format, ## args) + +#define obj_mgr_info(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_INFO, format, ## args) + +#define obj_mgr_debug(format, args...) \ + obj_mgr_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args) + + /** * enum WLAN_OBJ_STATE - State of Object * @WLAN_OBJ_STATE_CREATED: All component objects are created @@ -249,6 +271,8 @@ static inline char *string_from_dbgid(wlan_objmgr_ref_dbgid id) "WLAN_NAN_ID", "WLAN_REGULATORY_SB_ID", "WLAN_REGULATORY_NB_ID", + "WLAN_OFFCHAN_TXRX_ID", + "WLAN_POLICY_MGR_ID", "WLAN_SON_ID", "WLAN_SPECTRAL_ID", "WLAN_REF_ID_MAX" }; diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h index a7897160e19c..8d5e2da07403 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h @@ -762,12 +762,10 @@ static inline uint8_t *wlan_vdev_get_hw_macaddr(struct wlan_objmgr_vdev *vdev) struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev); /* This API is invoked with lock acquired, do not add log prints */ - if (pdev != NULL) { + if (pdev != NULL) return wlan_pdev_get_hw_macaddr(pdev); - } else { - qdf_print("%s:pdev is NULL\n", __func__); + else return NULL; - } } /** diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c index a65a0bb78b20..41faa1f23825 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c @@ -26,7 +26,7 @@ /* Global object, it is declared globally */ struct wlan_objmgr_global *g_umac_glb_obj; /* Component Name table */ -const char *wlan_umac_component_name[] = { +const char *wlan_umac_Component_name[] = { "MLME", "SCAN_MGR", "SCAN_CACHE", @@ -42,7 +42,7 @@ QDF_STATUS wlan_objmgr_global_obj_init(void) /* If it is already created, ignore */ if (g_umac_glb_obj != NULL) { - qdf_print("%s: Global object is already created\n", __func__); + obj_mgr_err("Global object is already created"); return QDF_STATUS_E_FAILURE; } @@ -50,8 +50,7 @@ QDF_STATUS wlan_objmgr_global_obj_init(void) umac_global_obj = (struct wlan_objmgr_global *)qdf_mem_malloc( sizeof(*umac_global_obj)); if (umac_global_obj == NULL) { - qdf_print("%s: Global object alloc failed due to malloc\n", - __func__); + obj_mgr_err("Global object alloc failed due to malloc"); return QDF_STATUS_E_NOMEM; } /* Store Global object pointer in Global variable */ @@ -67,7 +66,7 @@ QDF_STATUS wlan_objmgr_global_obj_deinit(void) { /* If it is already destroyed */ if (g_umac_glb_obj == NULL) { - qdf_print("%s: Global object is not allocated\n", __func__); + obj_mgr_err("Global object is not allocated"); return QDF_STATUS_E_FAILURE; } @@ -76,7 +75,7 @@ QDF_STATUS wlan_objmgr_global_obj_deinit(void) qdf_mem_free(g_umac_glb_obj); g_umac_glb_obj = NULL; } else { - qdf_print("PSOCs are leaked can't free global objmgr ctx\n"); + obj_mgr_err("PSOCs are leaked can't free global objmgr ctx"); WLAN_OBJMGR_BUG(0); } @@ -94,7 +93,7 @@ QDF_STATUS wlan_objmgr_register_psoc_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } @@ -102,8 +101,7 @@ QDF_STATUS wlan_objmgr_register_psoc_create_handler( /* If there is a valid entry, return failure */ if (g_umac_glb_obj->psoc_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -122,15 +120,14 @@ QDF_STATUS wlan_objmgr_unregister_psoc_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->psoc_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -149,15 +146,14 @@ QDF_STATUS wlan_objmgr_register_psoc_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->psoc_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -176,15 +172,14 @@ QDF_STATUS wlan_objmgr_unregister_psoc_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->psoc_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -203,15 +198,14 @@ QDF_STATUS wlan_objmgr_register_psoc_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->psoc_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -229,15 +223,14 @@ QDF_STATUS wlan_objmgr_unregister_psoc_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->psoc_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -256,15 +249,14 @@ QDF_STATUS wlan_objmgr_register_pdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->pdev_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -283,15 +275,14 @@ QDF_STATUS wlan_objmgr_unregister_pdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->pdev_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -310,15 +301,14 @@ QDF_STATUS wlan_objmgr_register_pdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->pdev_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -337,15 +327,14 @@ QDF_STATUS wlan_objmgr_unregister_pdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->pdev_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for component %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for Component %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -364,15 +353,14 @@ QDF_STATUS wlan_objmgr_register_pdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->pdev_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -390,15 +378,14 @@ QDF_STATUS wlan_objmgr_unregister_pdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->pdev_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for component %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for Component %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -417,15 +404,14 @@ QDF_STATUS wlan_objmgr_register_vdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->vdev_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -443,15 +429,14 @@ QDF_STATUS wlan_objmgr_unregister_vdev_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->vdev_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -469,15 +454,14 @@ QDF_STATUS wlan_objmgr_register_vdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->vdev_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -495,15 +479,14 @@ QDF_STATUS wlan_objmgr_unregister_vdev_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->vdev_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -521,15 +504,14 @@ QDF_STATUS wlan_objmgr_register_vdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->vdev_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -547,15 +529,14 @@ QDF_STATUS wlan_objmgr_unregister_vdev_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->vdev_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for component %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for Component %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -574,15 +555,14 @@ QDF_STATUS wlan_objmgr_register_peer_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->peer_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -601,15 +581,14 @@ QDF_STATUS wlan_objmgr_unregister_peer_create_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->peer_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -627,15 +606,14 @@ QDF_STATUS wlan_objmgr_register_peer_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->peer_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -653,15 +631,14 @@ QDF_STATUS wlan_objmgr_unregister_peer_destroy_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->peer_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -679,15 +656,14 @@ QDF_STATUS wlan_objmgr_register_peer_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is a valid entry, return failure */ if (g_umac_glb_obj->peer_status_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is already registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is already registered", id); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -705,15 +681,14 @@ QDF_STATUS wlan_objmgr_unregister_peer_status_handler( { /* If id is not within valid range, return */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component %d is out of range\n", __func__, id); + obj_mgr_err("Component %d is out of range", id); return QDF_STATUS_MAXCOMP_FAIL; } qdf_spin_lock_bh(&g_umac_glb_obj->global_lock); /* If there is an invalid entry, return failure */ if (g_umac_glb_obj->peer_status_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); - qdf_print("%s:callback for comp %d is not registered\n", - __func__, id); + obj_mgr_err("Callback for comp %d is not registered", id); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -789,12 +764,11 @@ void wlan_objmgr_print_ref_ids(qdf_atomic_t *id) uint32_t i; uint32_t pending_ref; - qdf_print(" Pending references of object\n"); + obj_mgr_info("Pending references of object"); for (i = 0; i < WLAN_REF_ID_MAX; i++) { pending_ref = qdf_atomic_read(&id[i]); if (pending_ref) - qdf_print(" %s -- %d\n", string_from_dbgid(i), pending_ref); + obj_mgr_info("%s -- %d", string_from_dbgid(i), pending_ref); } - return; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c index a9e49ec40cb6..67a0a1c1cf0d 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c @@ -66,10 +66,21 @@ static QDF_STATUS wlan_objmgr_pdev_object_status( static QDF_STATUS wlan_objmgr_pdev_obj_free(struct wlan_objmgr_pdev *pdev) { + + uint8_t pdev_id; + + if (pdev == NULL) { + obj_mgr_err("pdev obj is NULL"); + QDF_ASSERT(0); + return QDF_STATUS_E_FAILURE; + } + + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); + /* Detach PDEV from PSOC PDEV's list */ if (wlan_objmgr_psoc_pdev_detach(pdev->pdev_objmgr.wlan_psoc, pdev) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PSOC PDEV detach failed\n", __func__); + obj_mgr_err("PSOC PDEV detach failed: pdev-id: %d", pdev_id); return QDF_STATUS_E_FAILURE; } qdf_spinlock_destroy(&pdev->pdev_lock); @@ -90,19 +101,19 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create( QDF_STATUS obj_status; if (psoc == NULL) { - qdf_print("%s:psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL"); return NULL; } /* Allocate PDEV object's memory */ pdev = qdf_mem_malloc(sizeof(*pdev)); if (pdev == NULL) { - qdf_print("%s:pdev alloc failed\n", __func__); + obj_mgr_err("pdev alloc failed"); return NULL; } /* Attach PDEV with PSOC */ if (wlan_objmgr_psoc_pdev_attach(psoc, pdev) != QDF_STATUS_SUCCESS) { - qdf_print("%s:pdev psoc attach failed\n", __func__); + obj_mgr_err("pdev psoc attach failed"); qdf_mem_free(pdev); return NULL; } @@ -150,8 +161,7 @@ struct wlan_objmgr_pdev *wlan_objmgr_pdev_obj_create( /* Component object failed to be created, clean up the object */ } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Clean up the psoc */ - qdf_print("%s: PDEV component objects allocation failed\n", - __func__); + obj_mgr_err("PDEV component objects allocation failed"); wlan_objmgr_pdev_obj_delete(pdev); return NULL; } @@ -165,14 +175,17 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev) wlan_objmgr_pdev_destroy_handler handler; QDF_STATUS obj_status; void *arg; + uint8_t pdev_id; if (pdev == NULL) { - qdf_print("%s:pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL"); return QDF_STATUS_E_FAILURE; } + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); + if (pdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:pdev object delete is not invoked\n", __func__); + obj_mgr_err("pdev object delete is not invoked: pdev-id:%d", pdev_id); WLAN_OBJMGR_BUG(0); } @@ -189,8 +202,8 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev) obj_status = wlan_objmgr_pdev_object_status(pdev); if (obj_status == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PDEV component objects destroy failed\n", - __func__); + obj_mgr_err("PDEV component objects destroy failed: pdev-id:%d", + pdev_id); /* Ideally should not happen */ /* This leads to memleak ??? how to handle */ QDF_BUG(0); @@ -209,7 +222,7 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev) QDF_STATUS wlan_objmgr_pdev_obj_delete(struct wlan_objmgr_pdev *pdev) { if (pdev == NULL) { - qdf_print("%s:pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -241,15 +254,13 @@ QDF_STATUS wlan_objmgr_pdev_component_obj_attach( /* component id is invalid */ if (id >= WLAN_UMAC_MAX_COMPONENTS) { - qdf_print("%s: component-id %d is not supported\n", - __func__, id); + obj_mgr_err("component-id %d is not supported", id); return QDF_STATUS_MAXCOMP_FAIL; } wlan_pdev_obj_lock(pdev); /* If there is a valid entry, return failure */ if (pdev->pdev_comp_priv_obj[id] != NULL) { - qdf_print("%s: component-%d already have valid pointer\n", - __func__, id); + obj_mgr_err("component-%d already have valid pointer", id); wlan_pdev_obj_unlock(pdev); return QDF_STATUS_E_FAILURE; } @@ -776,7 +787,7 @@ void wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev, wlan_objmgr_ref_dbgid id) { if (pdev == NULL) { - qdf_print("%s: pdev obj is NULL\n", __func__); + obj_mgr_err("pdev obj is NULL"); QDF_ASSERT(0); return; } @@ -790,17 +801,20 @@ EXPORT_SYMBOL(wlan_objmgr_pdev_get_ref); QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev, wlan_objmgr_ref_dbgid id) { + uint8_t pdev_id; + if (pdev == NULL) { - qdf_print("%s: pdev obj is NULL\n", __func__); + obj_mgr_err("pdev obj is NULL"); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } wlan_pdev_obj_lock(pdev); + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); if (pdev->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_pdev_obj_unlock(pdev); - qdf_print("%s: pdev obj is in Deletion Progress state\n", - __func__); + obj_mgr_err("pdev obj is in Deletion Progress state: pdev-id: %d", + pdev_id) ; return QDF_STATUS_E_RESOURCES; } @@ -814,21 +828,24 @@ EXPORT_SYMBOL(wlan_objmgr_pdev_try_get_ref); void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev, wlan_objmgr_ref_dbgid id) { + uint8_t pdev_id; + if (pdev == NULL) { - qdf_print("%s: pdev obj is NULL\n", __func__); + obj_mgr_err("pdev obj is NULL"); QDF_ASSERT(0); return; } + pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); + if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_id_dbg[id])) { - qdf_print("%s: pdev ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("pdev (id:%d)ref cnt was not taken by %d", pdev_id, id); wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_cnt)) { - qdf_print("%s: pdev ref cnt is 0\n", __func__); + obj_mgr_err("pdev ref cnt is 0: pdev-id:%d", pdev_id); WLAN_OBJMGR_BUG(0); return; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c index 7eb5692dd337..c59760accd03 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c @@ -69,17 +69,32 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer) { struct wlan_objmgr_psoc *psoc; struct wlan_objmgr_vdev *vdev; + uint8_t *macaddr; + uint8_t vdev_id; + + if (peer == NULL) { + obj_mgr_err("PEER is NULL"); + return QDF_STATUS_E_FAILURE; + } + + macaddr = wlan_peer_get_macaddr(peer); vdev = wlan_peer_get_vdev(peer); if (vdev == NULL) { - qdf_print("%s: VDEV is NULL\n", __func__); + obj_mgr_err("VDEV is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_FAILURE; } + vdev_id = wlan_vdev_get_id(vdev); + /* get PSOC from VDEV, if it is NULL, return */ psoc = wlan_vdev_get_psoc(vdev); if (psoc == NULL) { - qdf_print("%s: PSOC is NULL\n", __func__); + obj_mgr_err("PSOC is NULL for peer(%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_FAILURE; } @@ -91,12 +106,17 @@ static QDF_STATUS wlan_objmgr_peer_obj_free(struct wlan_objmgr_peer *peer) /* Detach peer from VDEV's peer list */ if (wlan_objmgr_vdev_peer_detach(vdev, peer) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: Peer VDEV detach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) VDEV detach failure \ + for vdev-id: %d", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5], vdev_id); return QDF_STATUS_E_FAILURE; } /* Detach peer from PSOC's peer list */ if (wlan_objmgr_psoc_peer_detach(psoc, peer) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: Peer PSOC detach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) PSOC detach failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_FAILURE; } qdf_spinlock_destroy(&peer->peer_lock); @@ -120,19 +140,25 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create( uint8_t id; if (vdev == NULL) { - qdf_print("%s: VDEV is NULL\n", __func__); + obj_mgr_err("VDEV is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return NULL; } /* Get psoc, if psoc is NULL, return */ psoc = wlan_vdev_get_psoc(vdev); if (psoc == NULL) { - qdf_print("%s: PSOC is NULL\n", __func__); + obj_mgr_err("PSOC is NULL for peer (%02x:%02x:%02x:%02x:%02x:%02x)", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return NULL; } /* Allocate memory for peer object */ peer = qdf_mem_malloc(sizeof(*peer)); if (peer == NULL) { - qdf_print("%s: Peer allocation failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) allocation failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return NULL; } /* set vdev to peer */ @@ -148,14 +174,20 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create( /* Attach peer to psoc, psoc maintains the node table for the device */ if (wlan_objmgr_psoc_peer_attach(psoc, peer) != QDF_STATUS_SUCCESS) { - qdf_print("%s: Peer PSOC attach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + PSOC attach failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); qdf_mem_free(peer); return NULL; } /* Attach peer to vdev peer table */ if (wlan_objmgr_vdev_peer_attach(vdev, peer) != QDF_STATUS_SUCCESS) { - qdf_print("%s: Peer VDEV attach failure\n", __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + VDEV attach failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); /* if attach fails, detach from psoc table before free */ wlan_objmgr_psoc_peer_detach(psoc, peer); qdf_mem_free(peer); @@ -196,8 +228,10 @@ struct wlan_objmgr_peer *wlan_objmgr_peer_obj_create( peer->obj_state = WLAN_OBJ_STATE_PARTIALLY_CREATED; } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Clean up the peer */ - qdf_print("%s: Peer component object alloc failure\n", - __func__); + obj_mgr_err("Peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + component object alloc failure", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); wlan_objmgr_peer_obj_delete(peer); return NULL; } @@ -210,14 +244,20 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer) wlan_objmgr_peer_destroy_handler handler; QDF_STATUS obj_status; void *arg; + uint8_t *macaddr; if (peer == NULL) { - qdf_print("%s: PEER is NULL\n", __func__); + obj_mgr_err("PEER is NULL"); return QDF_STATUS_E_FAILURE; } + macaddr = wlan_peer_get_macaddr(peer); + if (peer->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:peer object delete is not invoked\n", __func__); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + object delete is not invoked", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); WLAN_OBJMGR_BUG(0); } @@ -250,7 +290,7 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer) QDF_STATUS wlan_objmgr_peer_obj_delete(struct wlan_objmgr_peer *peer) { if (peer == NULL) { - qdf_print("%s: PEER is NULL\n", __func__); + obj_mgr_err("PEER is NULL"); return QDF_STATUS_E_FAILURE; } @@ -501,7 +541,7 @@ void wlan_objmgr_peer_get_ref(struct wlan_objmgr_peer *peer, wlan_objmgr_ref_dbgid id) { if (peer == NULL) { - qdf_print("%s: peer obj is NULL\n", __func__); + obj_mgr_err("peer obj is NULL for %d", id); QDF_ASSERT(0); return; } @@ -516,17 +556,23 @@ EXPORT_SYMBOL(wlan_objmgr_peer_get_ref); QDF_STATUS wlan_objmgr_peer_try_get_ref(struct wlan_objmgr_peer *peer, wlan_objmgr_ref_dbgid id) { + + uint8_t *macaddr; + if (peer == NULL) { - qdf_print("%s: peer obj is NULL\n", __func__); + obj_mgr_err("peer obj is NULL for %d", id); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } wlan_peer_obj_lock(peer); + macaddr = wlan_peer_get_macaddr(peer); if (peer->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_peer_obj_unlock(peer); - qdf_print("%s: peer obj is in Deletion Progress state\n", - __func__); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) obj \ + is in Deletion Progress state", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); return QDF_STATUS_E_RESOURCES; } @@ -540,21 +586,30 @@ EXPORT_SYMBOL(wlan_objmgr_peer_try_get_ref); void wlan_objmgr_peer_release_ref(struct wlan_objmgr_peer *peer, wlan_objmgr_ref_dbgid id) { + + uint8_t *macaddr; + if (peer == NULL) { - qdf_print("%s: peer obj is NULL\n", __func__); + obj_mgr_err("peer obj is NULL for %d", id); QDF_ASSERT(0); return; } + macaddr = wlan_peer_get_macaddr(peer); + if (!qdf_atomic_read(&peer->peer_objmgr.ref_id_dbg[id])) { - qdf_print("%s: peer ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) \ + ref cnt was not taken by %d", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5], id); wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&peer->peer_objmgr.ref_cnt)) { - qdf_print("%s: peer ref cnt is 0\n", __func__); + obj_mgr_err("peer(%02x:%02x:%02x:%02x:%02x:%02x) ref cnt is 0", + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); WLAN_OBJMGR_BUG(0); return; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c index baca628a1605..8f99154e62ec 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c @@ -95,7 +95,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_free(struct wlan_objmgr_psoc *psoc) /* Detach PSOC from global object's psoc list */ if (wlan_objmgr_psoc_object_detach(psoc) == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PSOC object detach failed\n", __func__); + obj_mgr_err("PSOC object detach failed"); return QDF_STATUS_E_FAILURE; } wlan_objmgr_psoc_peer_list_deinit(&psoc->soc_objmgr.peer_list); @@ -120,7 +120,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, psoc = qdf_mem_malloc(sizeof(*psoc)); if (psoc == NULL) { - qdf_print("%s: PSOC allocation failed\n", __func__); + obj_mgr_err("PSOC allocation failed"); return NULL; } qdf_spinlock_create(&psoc->psoc_lock); @@ -167,8 +167,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, psoc->obj_state = WLAN_OBJ_STATE_PARTIALLY_CREATED; } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Component object failed to be created, clean up the object */ - qdf_print("%s: PSOC component objects allocation failed\n", - __func__); + obj_mgr_err("PSOC component objects allocation failed"); /* Clean up the psoc */ wlan_objmgr_psoc_obj_delete(psoc); return NULL; @@ -176,7 +175,7 @@ struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version, if (wlan_objmgr_psoc_object_attach(psoc) != QDF_STATUS_SUCCESS) { - qdf_print("%s: PSOC object attach failed\n", __func__); + obj_mgr_err("PSOC object attach failed"); wlan_objmgr_psoc_obj_delete(psoc); return NULL; } @@ -193,12 +192,12 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc) void *arg; if (psoc == NULL) { - qdf_print("%s:psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL"); return QDF_STATUS_E_FAILURE; } if (psoc->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:psoc object delete is not invoked\n", __func__); + obj_mgr_err("psoc object delete is not invoked"); WLAN_OBJMGR_BUG(0); } @@ -215,7 +214,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc) obj_status = wlan_objmgr_psoc_object_status(psoc); if (obj_status == QDF_STATUS_E_FAILURE) { - qdf_print("%s: PSOC component object free failed\n", __func__); + obj_mgr_err("PSOC component object free failed"); /* Ideally should not happen * This leads to memleak, BUG_ON to find which component * delete notification failed and fix it. @@ -237,7 +236,7 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc) QDF_STATUS wlan_objmgr_psoc_obj_delete(struct wlan_objmgr_psoc *psoc) { if (psoc == NULL) { - qdf_print("%s:psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -1353,7 +1352,7 @@ QDF_STATUS wlan_objmgr_psoc_peer_detach(struct wlan_objmgr_psoc *psoc, QDF_STATUS_E_FAILURE) { qdf_spin_unlock_bh(&peer_list->peer_list_lock); wlan_psoc_obj_unlock(psoc); - qdf_print("%s: Failed to detach peer\n", __func__); + obj_mgr_err("Failed to detach peer"); return QDF_STATUS_E_FAILURE; } qdf_spin_unlock_bh(&peer_list->peer_list_lock); @@ -1622,7 +1621,7 @@ void wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc, wlan_objmgr_ref_dbgid id) { if (psoc == NULL) { - qdf_print("%s: psoc obj is NULL\n", __func__); + obj_mgr_err("psoc obj is NULL for id:%d", id); QDF_ASSERT(0); return; } @@ -1637,7 +1636,7 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc, wlan_objmgr_ref_dbgid id) { if (psoc == NULL) { - qdf_print("%s: psoc obj is NULL\n", __func__); + obj_mgr_err("psoc obj is NULL for id:%d", id); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } @@ -1645,8 +1644,7 @@ QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc, wlan_psoc_obj_lock(psoc); if (psoc->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_psoc_obj_unlock(psoc); - qdf_print("%s: psoc obj is in Deletion Progress staet\n", - __func__); + obj_mgr_err("Called by %d, psoc obj is in Deletion Progress state", id); return QDF_STATUS_E_RESOURCES; } @@ -1662,20 +1660,19 @@ void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc, wlan_objmgr_ref_dbgid id) { if (psoc == NULL) { - qdf_print("%s: psoc obj is NULL\n", __func__); + obj_mgr_err("psoc obj is NULLi for id:%d", id); QDF_ASSERT(0); return; } if (!qdf_atomic_read(&psoc->soc_objmgr.ref_id_dbg[id])) { - qdf_print("%s: psoc ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("psoc ref cnt was not taken by %d", id); wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&psoc->soc_objmgr.ref_cnt)) { - qdf_print("%s: psoc ref cnt is 0\n", __func__); + obj_mgr_err("psoc ref cnt is 0"); WLAN_OBJMGR_BUG(0); return; } @@ -1699,7 +1696,7 @@ static void wlan_objmgr_psoc_peer_ref_print(struct wlan_objmgr_psoc *psoc, macaddr = wlan_peer_get_macaddr(peer); wlan_peer_obj_unlock(peer); - qdf_print(" Peer MAC is %02x:%02x:%02x:%02x:%02x:%02x\n", + obj_mgr_info("Peer MAC is %02x:%02x:%02x:%02x:%02x:%02x", macaddr[0], macaddr[1], macaddr[2], macaddr[3], macaddr[4], macaddr[5]); wlan_objmgr_print_ref_ids(peer->peer_objmgr.ref_id_dbg); @@ -1714,7 +1711,7 @@ static void wlan_objmgr_psoc_vdev_ref_print(struct wlan_objmgr_psoc *psoc, wlan_vdev_obj_lock(vdev); id = wlan_vdev_get_id(vdev); wlan_vdev_obj_unlock(vdev); - qdf_print(" Vdev ID is %d\n", id); + obj_mgr_info("Vdev ID is %d", id); wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg); } @@ -1726,9 +1723,9 @@ static void wlan_objmgr_psoc_pdev_ref_print(struct wlan_objmgr_psoc *psoc, uint8_t id; wlan_pdev_obj_lock(pdev); - id = pdev->pdev_objmgr.wlan_pdev_id; + id = wlan_objmgr_pdev_get_pdev_id(pdev); wlan_pdev_obj_unlock(pdev); - qdf_print(" pdev ID is %d\n", id); + obj_mgr_info("pdev ID is %d", id); wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg); } @@ -1736,20 +1733,20 @@ static void wlan_objmgr_psoc_pdev_ref_print(struct wlan_objmgr_psoc *psoc, QDF_STATUS wlan_objmgr_print_ref_all_objects_per_psoc( struct wlan_objmgr_psoc *psoc) { - qdf_print(" Ref counts of PEER\n"); - wlan_objmgr_iterate_obj_list_all(psoc, WLAN_PEER_OP, - wlan_objmgr_psoc_peer_ref_print, NULL, 1, - WLAN_OBJMGR_ID); - qdf_print(" Ref counts of VDEV\n"); - wlan_objmgr_iterate_obj_list_all(psoc, WLAN_VDEV_OP, - wlan_objmgr_psoc_vdev_ref_print, NULL, 1, - WLAN_OBJMGR_ID); - qdf_print(" Ref counts of PDEV\n"); - wlan_objmgr_iterate_obj_list_all(psoc, WLAN_PDEV_OP, - wlan_objmgr_psoc_pdev_ref_print, NULL, 1, - WLAN_OBJMGR_ID); + obj_mgr_info("Ref counts of PEER"); + wlan_objmgr_iterate_obj_list(psoc, WLAN_PEER_OP, + wlan_objmgr_psoc_peer_ref_print, NULL, 1, + WLAN_OBJMGR_ID); + obj_mgr_info("Ref counts of VDEV"); + wlan_objmgr_iterate_obj_list(psoc, WLAN_VDEV_OP, + wlan_objmgr_psoc_vdev_ref_print, NULL, 1, + WLAN_OBJMGR_ID); + obj_mgr_info("Ref counts of PDEV"); + wlan_objmgr_iterate_obj_list(psoc, WLAN_PDEV_OP, + wlan_objmgr_psoc_pdev_ref_print, NULL, 1, + WLAN_OBJMGR_ID); - qdf_print(" Ref counts of PSOC\n"); + obj_mgr_info(" Ref counts of PSOC"); wlan_objmgr_print_ref_ids(psoc->soc_objmgr.ref_id_dbg); return QDF_STATUS_SUCCESS; @@ -1760,7 +1757,7 @@ QDF_STATUS wlan_objmgr_psoc_set_user_config(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_psoc_user_config *user_config_data) { if (user_config_data == NULL) { - qdf_print("%s:user_config_data is NULL\n", __func__); + obj_mgr_err("user_config_data is NULL"); QDF_BUG(0); return QDF_STATUS_E_FAILURE; } diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c index 510610a42c93..0e07247c0d96 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c @@ -75,10 +75,15 @@ static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev) { struct wlan_objmgr_pdev *pdev; + if (vdev == NULL) { + obj_mgr_err("vdev is NULL"); + return QDF_STATUS_E_FAILURE; + } /* if PDEV is NULL, return */ pdev = wlan_vdev_get_pdev(vdev); if (pdev == NULL) { - qdf_print("%s:pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL for vdev-id: %d", + vdev->vdev_objmgr.vdev_id); return QDF_STATUS_E_FAILURE; } @@ -113,26 +118,28 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create( QDF_STATUS obj_status; if (pdev == NULL) { - qdf_print("%s: pdev is NULL\n", __func__); + obj_mgr_err("pdev is NULL"); return NULL; } psoc = wlan_pdev_get_psoc(pdev); /* PSOC is NULL */ if (psoc == NULL) { - qdf_print("%s: psoc is NULL\n", __func__); + obj_mgr_err("psoc is NULL for pdev-id:%d", + pdev->pdev_objmgr.wlan_pdev_id); return NULL; } /* Allocate vdev object memory */ vdev = qdf_mem_malloc(sizeof(*vdev)); if (vdev == NULL) { - qdf_print("%s: Memory allocation failure\n", __func__); + obj_mgr_err("Memory allocation failure"); return NULL; } /* Attach VDEV to PSOC VDEV's list */ if (wlan_objmgr_psoc_vdev_attach(psoc, vdev) != QDF_STATUS_SUCCESS) { + obj_mgr_err("psoc vdev attach failed for vdev-id:%d", + vdev->vdev_objmgr.vdev_id); qdf_mem_free(vdev); - qdf_print("%s: psoc vdev attach failed\n", __func__); return NULL; } /* Store pdev in vdev */ @@ -140,7 +147,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create( /* Attach vdev to PDEV */ if (wlan_objmgr_pdev_vdev_attach(pdev, vdev) != QDF_STATUS_SUCCESS) { - qdf_print("%s: pdev vdev attach failed\n", __func__); + obj_mgr_err("pdev vdev attach failed for vdev-id:%d", + vdev->vdev_objmgr.vdev_id); wlan_objmgr_psoc_vdev_detach(psoc, vdev); qdf_mem_free(vdev); return NULL; @@ -207,8 +215,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create( } else if (obj_status == QDF_STATUS_E_FAILURE) { /* Clean up the psoc */ wlan_objmgr_vdev_obj_delete(vdev); - qdf_print("%s:VDEV component objects creation failed\n", - __func__); + obj_mgr_err("VDEV component objects creation failed for vdev-id:%d", + vdev->vdev_objmgr.vdev_id); return NULL; } return vdev; @@ -221,14 +229,18 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev) wlan_objmgr_vdev_destroy_handler handler; QDF_STATUS obj_status; void *arg; + uint8_t vdev_id; if (vdev == NULL) { - qdf_print("%s:vdev is NULL\n", __func__); + obj_mgr_err("vdev is NULL"); return QDF_STATUS_E_FAILURE; } + vdev_id = wlan_vdev_get_id(vdev); + if (vdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) { - qdf_print("%s:vdev object delete is not invoked\n", __func__); + obj_mgr_err("vdev object delete is not invoked: vdev-id:%d", + wlan_vdev_get_id(vdev)); WLAN_OBJMGR_BUG(0); } @@ -245,7 +257,7 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev) obj_status = wlan_objmgr_vdev_object_status(vdev); if (obj_status == QDF_STATUS_E_FAILURE) { - qdf_print("%s: VDEV object deletion failed\n", __func__); + obj_mgr_err("VDEV object deletion failed: vdev-id: %d", vdev_id); /* Ideally should not happen */ /* This leads to memleak ??? how to handle */ QDF_BUG(0); @@ -265,7 +277,7 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev) QDF_STATUS wlan_objmgr_vdev_obj_delete(struct wlan_objmgr_vdev *vdev) { if (vdev == NULL) { - qdf_print("%s:vdev is NULL\n", __func__); + obj_mgr_err("vdev is NULL"); return QDF_STATUS_E_FAILURE; } /* @@ -424,17 +436,19 @@ QDF_STATUS wlan_objmgr_iterate_peerobj_list( qdf_list_t *peer_list = NULL; struct wlan_objmgr_peer *peer = NULL; struct wlan_objmgr_peer *peer_next = NULL; + uint8_t vdev_id; if (vdev == NULL) { - qdf_print("%s: VDEV NULL\n", __func__); + obj_mgr_err("VDEV is NULL"); return QDF_STATUS_E_FAILURE; } wlan_vdev_obj_lock(vdev); + vdev_id = wlan_vdev_get_id(vdev); if (vdev->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_vdev_obj_unlock(vdev); - qdf_print("%s: VDEV is in delete progress\n", __func__); + obj_mgr_err("VDEV is in delete progress: vdev-id:%d", vdev_id); return QDF_STATUS_E_FAILURE; } wlan_objmgr_vdev_get_ref(vdev, dbg_id); @@ -684,7 +698,7 @@ void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev, wlan_objmgr_ref_dbgid id) { if (vdev == NULL) { - qdf_print("%s: vdev obj is NULL\n", __func__); + obj_mgr_err("vdev obj is NULL for id:%d", id); QDF_ASSERT(0); return; } @@ -699,17 +713,20 @@ EXPORT_SYMBOL(wlan_objmgr_vdev_get_ref); QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev, wlan_objmgr_ref_dbgid id) { + uint8_t vdev_id; + if (vdev == NULL) { - qdf_print("%s: vdev obj is NULL\n", __func__); + obj_mgr_err("vdev obj is NULL for id:%d", id); QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } wlan_vdev_obj_lock(vdev); + vdev_id = wlan_vdev_get_id(vdev); if (vdev->obj_state == WLAN_OBJ_STATE_LOGICALLY_DELETED) { wlan_vdev_obj_unlock(vdev); - qdf_print("%s: vdev obj is in Deletion Progress state\n", - __func__); + obj_mgr_err("called by %d, vdev obj is in Deletion Progress state: \ + vdev-id:%d", id, vdev_id); return QDF_STATUS_E_RESOURCES; } @@ -724,21 +741,24 @@ EXPORT_SYMBOL(wlan_objmgr_vdev_try_get_ref); void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev, wlan_objmgr_ref_dbgid id) { + uint8_t vdev_id; + if (vdev == NULL) { - qdf_print("%s: vdev obj is NULL\n", __func__); + obj_mgr_err("vdev obj is NULL for id:%d", id); QDF_ASSERT(0); return; } + vdev_id = wlan_vdev_get_id(vdev); + if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_id_dbg[id])) { - qdf_print("%s: vdev ref cnt was not taken by %d\n", - __func__, id); + obj_mgr_err("vdev (id:%d)ref cnt was not taken by %d", vdev_id, id); wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg); WLAN_OBJMGR_BUG(0); } if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_cnt)) { - qdf_print("%s: vdev ref cnt is 0\n", __func__); + obj_mgr_err("vdev ref cnt is 0"); WLAN_OBJMGR_BUG(0); return; } diff --git a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h index 84f837896d06..d413547b7dfe 100644 --- a/umac/scan/dispatcher/inc/wlan_scan_public_structs.h +++ b/umac/scan/dispatcher/inc/wlan_scan_public_structs.h @@ -47,7 +47,7 @@ typedef uint32_t wlan_scan_id; #define SCM_BSS_CAP_VALUE_5GHZ 2 #define SCM_CANCEL_SCAN_WAIT_TIME 50 -#define SCM_CANCEL_SCAN_WAIT_ITERATION 100 +#define SCM_CANCEL_SCAN_WAIT_ITERATION 600 #define INVAL_SCAN_ID 0xFFFFFFFF #define INVAL_VDEV_ID 0xFFFFFFFF