3 #define DFT_TAG "[CONN_MD_DMP]"
5 #include "conn_md_log.h"
6 #include "conn_md_dump.h"
9 P_CONN_MD_DMP_MSG_LOG
conn_md_dmp_init(void)
11 uint32 msg_log_size
= sizeof(CONN_MD_DMP_MSG_LOG
);
12 P_CONN_MD_DMP_MSG_LOG p_msg_log
= vmalloc(msg_log_size
);
13 if (NULL
!= p_msg_log
) {
14 CONN_MD_INFO_FUNC("alloc memory for msg log system done, size:0x%08x\n",
16 memset(p_msg_log
, 0, msg_log_size
);
18 mutex_init(&p_msg_log
->lock
);
21 CONN_MD_ERR_FUNC("alloc memory for msg log system failed\n");
26 int conn_md_dmp_deinit(P_CONN_MD_DMP_MSG_LOG p_log
)
30 CONN_MD_INFO_FUNC("vaild log buffer pointer:0x%08x, free it.\n", p_log
);
31 mutex_destroy(&p_log
->lock
);
35 CONN_MD_WARN_FUNC("invalid log buffer pointer\n");
36 i_ret
= CONN_MD_ERR_INVALID_PARAM
;
41 int __conn_md_dmp_in(ipc_ilm_t
*p_ilm
, CONN_MD_MSG_TYPE msg_type
, P_CONN_MD_DMP_MSG_LOG p_msg_log
)
44 P_CONN_MD_DMP_MSG_STR p_msg
= NULL
;
47 do_gettimeofday(&now
);
49 mutex_lock(&p_msg_log
->lock
);
51 p_msg
= &p_msg_log
->msg
[p_msg_log
->in
];
54 p_msg
->sec
= now
.tv_sec
;
55 p_msg
->usec
= now
.tv_usec
;
56 p_msg
->type
= msg_type
;
59 memcpy(&p_msg
->ilm
, p_ilm
, sizeof(ipc_ilm_t
));
62 p_msg
->msg_len
= p_ilm
->local_para_ptr
->msg_len
;
65 memcpy(&p_msg
->data
, p_ilm
->local_para_ptr
->data
,
66 p_msg
->msg_len
> LENGTH_PER_PACKAGE
? LENGTH_PER_PACKAGE
: p_msg
->msg_len
);
68 /*update in size and index */
70 if (NUMBER_OF_MSG_LOGGED
<= p_msg_log
->size
)
71 p_msg_log
->size
= NUMBER_OF_MSG_LOGGED
;
76 p_msg_log
->in
%= NUMBER_OF_MSG_LOGGED
;
78 mutex_unlock(&p_msg_log
->lock
);
79 CONN_MD_WARN_FUNC("msg type:%d enqueued succeed\n", msg_type
);
84 int conn_md_dmp_in(ipc_ilm_t
*p_ilm
, CONN_MD_MSG_TYPE msg_type
, P_CONN_MD_DMP_MSG_LOG p_msg_log
)
89 NULL
== p_ilm
->local_para_ptr
||
90 0 == p_ilm
->local_para_ptr
->msg_len
||
91 (msg_type
!= MSG_ENQUEUE
&& msg_type
!= MSG_DEQUEUE
)) {
92 CONN_MD_WARN_FUNC("invalid parameter\n");
93 i_ret
= CONN_MD_ERR_INVALID_PARAM
;
95 i_ret
= __conn_md_dmp_in(p_ilm
, msg_type
, p_msg_log
);
100 int __conn_md_dmp_msg_filter(P_CONN_MD_DMP_MSG_STR p_msg
, uint32 src_id
, uint32 dst_id
)
102 ipc_ilm_t
*p_ilm
= &p_msg
->ilm
;
105 if (((0 == src_id
) || (src_id
== p_ilm
->src_mod_id
)) &&
106 ((0 == dst_id
) || (dst_id
== p_ilm
->dest_mod_id
))) {
107 __conn_md_log_print(DFT_TAG
108 "%d.%d s, <%s> src_id:0x%08x, dst_id:0x%08x, msg_len:%d, dump_len:%d:\n",
109 p_msg
->sec
, p_msg
->usec
,
110 (MSG_ENQUEUE
== p_msg
->type
? "enqueue" : "dequeue"),
111 p_msg
->ilm
.src_mod_id
, p_msg
->ilm
.dest_mod_id
, p_msg
->msg_len
,
112 (LENGTH_PER_PACKAGE
>=
113 p_msg
->msg_len
? p_msg
->msg_len
: LENGTH_PER_PACKAGE
));
115 for (i
= 0; (i
< p_msg
->msg_len
) && (i
< LENGTH_PER_PACKAGE
); i
++) {
116 __conn_md_log_print("%02x ", p_msg
->data
[i
]);
118 __conn_md_log_print("\n");
120 __conn_md_log_print("\n");
126 int conn_md_dmp_out(P_CONN_MD_DMP_MSG_LOG p_msg_log
, uint32 src_id
, uint32 dst_id
)
132 P_CONN_MD_DMP_MSG_STR p_msg
= NULL
;
134 mutex_lock(&p_msg_log
->lock
);
136 size
= p_msg_log
->size
;
138 if (NULL
== p_msg_log
) {
139 mutex_unlock(&p_msg_log
->lock
);
141 CONN_MD_WARN_FUNC("invalid parameter, p_msg_log:0x%08x\n", p_msg_log
);
142 return CONN_MD_ERR_INVALID_PARAM
;
144 CONN_MD_INFO_FUNC("dump msg for <src_id:0x%08x, dst_id:0x%08x> start\n", src_id
, dst_id
);
145 if (NUMBER_OF_MSG_LOGGED
== size
) {
152 p_msg
= &p_msg_log
->msg
[out
];
154 __conn_md_dmp_msg_filter(p_msg
, src_id
, dst_id
);
157 out
%= NUMBER_OF_MSG_LOGGED
;
159 mutex_unlock(&p_msg_log
->lock
);
160 CONN_MD_INFO_FUNC("dump msg for <src_id:0x%08x, dst_id:0x%08x> finished\n", src_id
, dst_id
);