struct msgr_client_desc{
/
/
全局msgr_client结构描述
uint32 umids_registered;
uint16 msgr_client_reg_type;
/
/
1
-
>msgrq_sig
type
,
2
-
> rexq_sig
uint16 tech_mod_id;
/
/
union
*
msg_sig_p{
/
/
offset
0x10
struct msgrq_sig
*
msgq_p;
/
/
msgr reg
type
1
,
4G
及以后使用的mailbox消息传递系统
struct rexq_sig
*
rexq_p;
/
/
msgr reg
type
2
,兼容
2G
/
3G
时代使用的Rex IPC消息传递系统
}
struct msgrq
*
msgrq_p;
/
/
offset
0x14
,
if
reg
type
1
struct msgr_client_obj
*
msgr_client_obj_ptr;
/
/
offset
0x30
}
struct msgr_client_obj{
/
/
msgr_client结构体
unsigned
int
msgr_client_reg_type;
/
/
1
-
> msgrq aka mailbox,
2
-
>rex_q,接受消息的方式
unsigned
int
register_umid_counts;
/
/
offset
8
,消息接受器注册的umid的总数
unsigned
int
total_reged_recv_signal_counts;
/
/
offset
0x0c
,注册的接受消息的signal的个数
union sig_recv_obj{
msgrq_sig
*
msgrq_signal_obj;
/
/
offset
0x10
msgrq_sig
type
,
4
/
5G
未来的主流类型
rexq_sig
*
rex_signal_obj;
/
/
offset
0x10
rexq_sig
type
,这个主要是为了兼容之前
2
/
3G
的系统的数据结构
}
unsigned
int
task_recv_signal_set_mask;
/
/
offset
0x14
,注册的接受消息的signal号的掩码
uint32 err_counts;
/
/
offset
0x18
unsigned
int
recvd_signal_id;
/
/
offset
0x1c
,当前接受到的signal
id
,msgr_client_reg_type为
1
struct msgrq
*
recvd_msgrq_ptr;
/
/
offset
0x20
,当前接受消息承载的msgrq对象,msgr_client_reg_type为
1
struct msgrq
*
msgrq_first_entry;
/
/
offset
0x24
,接受msgrq消息链表结构指针,msgr_client_reg_type为
1
unsigned
int
total_msgrq_counts;
/
/
offset
0x28
, 可以接受msgrq消息的总数,通过可以task_recv_signal_set_mask来确定,msgr_client_reg_type为
1
}
struct msgrq_sig{
uint32 sig_ready_flag;
/
/
must be
1
struct sig_def{
uint32 signal_id_for_recv;
/
/
offset
8
uint32 signal_reged_wait_mask;
/
/
offset
0xc
void
*
kernel_msg_queue;
unsigned
int
attribute;
};
}
struct rexq_sig{
/
/
size
0x1c
, 兼容
2
/
3G
系统的数据结构
utcb
*
msgr_client_utcb_ptr;
/
/
offset
0
任务接受消息使用的utcb标识
uint32 msgr_client_signal_id;
/
/
offset
4
接受消息使用的signal
id
msg_queue
*
msgr_out_msg_q;
/
/
offset
0x8
msg_queue
*
rex_msg_in_q;
/
/
offset
0xc
uint16 msg_data_q_used_size;
/
/
offset
0x10
uint16 rexq_id;
/
/
offset
0x12
uint16 msg_data_q_size;
/
/
offset
0x14
}
struct msg_data_q{
struct msg_data_q
*
prev_q;
struct msg_data_q
*
next_q;
char data[msg_data_q_size
-
8
];
}
struct msg_queue{
struct msg_data_q
*
headp;
struct msg_data_q
*
tailp;
uint32 total_q_counts;
}
struct msgrq{
void
*
msg_recv_buf_header;
/
/
offset
0
void
*
msg_recv_end_buf;
/
/
offset
4
char msgrq_name[
16
];
/
/
offset
0x10
int
msgrq_recvd_seq;
/
/
ofset
0x18
unsigned
int
reged_recv_signal_id_mask;
/
/
offset
0x1c
,可供接受消息signal的掩码
void
*
msgr_buf_remain_ptr;
/
/
offset
0x20
,可供接受消息的剩余空间起始地址
void
*
msgr_recv_buf;
/
/
offset
0x24
,当前接受到消息的buf地址
uint32 msgr_buf_remain_size;
/
/
offset
0x28
unsigned
int
total_msg_recv_buf_size;
/
/
offset
0x30
int8 is_buf_in_use;
/
/
offset
0x70
,
0
-
>
in
use,
1
-
>
not
in
use
uint32 recvd_msg_blocks;
/
/
offset
0x58
,收到的消息次数总和
struct msgrq
*
next_msgrq;
/
/
offset
0x74
}