}
static bool check_mbox_seq_id_and_seg_len(struct hinic_recv_mbox *recv_mbox,
- u8 seq_id, u8 seg_len)
+ u8 seq_id, u8 seg_len, u8 msg_id)
{
if (seq_id > HINIC_SEQ_ID_MAX_VAL || seg_len > HINIC_MSG_SEG_LEN)
return false;
if (seq_id == 0) {
- recv_mbox->sed_id = seq_id;
+ recv_mbox->seq_id = seq_id;
+ recv_mbox->msg_info.msg_id = msg_id;
} else {
- if (seq_id != recv_mbox->sed_id + 1) {
- recv_mbox->sed_id = 0;
+ if ((seq_id != recv_mbox->seq_id + 1) ||
+ msg_id != recv_mbox->msg_info.msg_id) {
+ recv_mbox->seq_id = 0;
return false;
}
- recv_mbox->sed_id = seq_id;
+ recv_mbox->seq_id = seq_id;
}
return true;
u16 src_func_idx;
enum hinic_hwif_direction_type direction;
u8 seq_id, seg_len;
+ u8 msg_id;
+ u8 front_id;
seq_id = HINIC_MBOX_HEADER_GET(mbox_header, SEQID);
seg_len = HINIC_MBOX_HEADER_GET(mbox_header, SEG_LEN);
direction = HINIC_MBOX_HEADER_GET(mbox_header, DIRECTION);
src_func_idx = HINIC_MBOX_HEADER_GET(mbox_header, SRC_GLB_FUNC_IDX);
+ msg_id = HINIC_MBOX_HEADER_GET(mbox_header, MSG_ID);
+ front_id = recv_mbox->seq_id;
- if (!check_mbox_seq_id_and_seg_len(recv_mbox, seq_id, seg_len)) {
+ if (!check_mbox_seq_id_and_seg_len(recv_mbox, seq_id, seg_len,
+ msg_id)) {
PMD_DRV_LOG(ERR,
- "Mailbox sequence and segment check failed, src func id: 0x%x, front id: 0x%x, current id: 0x%x, seg len: 0x%x\n",
- src_func_idx, recv_mbox->sed_id, seq_id, seg_len);
+ "Mailbox sequence and segment check failed, src func id: 0x%x, "
+ "front id: 0x%x, current id: 0x%x, seg len: 0x%x "
+ "front msg_id: %d, cur msg_id: %d",
+ src_func_idx, front_id, seq_id, seg_len,
+ recv_mbox->msg_info.msg_id, msg_id);
return HINIC_ERROR;
}
if (!HINIC_MBOX_HEADER_GET(mbox_header, LAST))
return HINIC_ERROR;
- recv_mbox->sed_id = 0;
+ recv_mbox->seq_id = 0;
recv_mbox->cmd = HINIC_MBOX_HEADER_GET(mbox_header, CMD);
recv_mbox->mod = HINIC_MBOX_HEADER_GET(mbox_header, MODULE);
recv_mbox->mbox_len = HINIC_MBOX_HEADER_GET(mbox_header, MSG_LEN);
}
static bool check_mgmt_seq_id_and_seg_len(struct hinic_recv_msg *recv_msg,
- u8 seq_id, u8 seg_len)
+ u8 seq_id, u8 seg_len, u16 msg_id)
{
if (seq_id > HINIC_SEQ_ID_MAX_VAL || seg_len > HINIC_MSG_SEG_LEN)
return false;
if (seq_id == 0) {
- recv_msg->sed_id = seq_id;
+ recv_msg->seq_id = seq_id;
+ recv_msg->msg_id = msg_id;
} else {
- if (seq_id != recv_msg->sed_id + 1) {
- recv_msg->sed_id = 0;
+ if ((seq_id != recv_msg->seq_id + 1) ||
+ msg_id != recv_msg->msg_id) {
+ recv_msg->seq_id = 0;
return false;
}
- recv_msg->sed_id = seq_id;
+ recv_msg->seq_id = seq_id;
}
return true;
u8 seq_id, seq_len;
u32 msg_buf_max = MAX_PF_MGMT_BUF_SIZE;
u8 front_id;
+ u16 msg_id;
seq_id = HINIC_MSG_HEADER_GET(msg_header, SEQID);
seq_len = HINIC_MSG_HEADER_GET(msg_header, SEG_LEN);
- front_id = recv_msg->sed_id;
+ front_id = recv_msg->seq_id;
+ msg_id = HINIC_MSG_HEADER_GET(msg_header, MSG_ID);
- if (!check_mgmt_seq_id_and_seg_len(recv_msg, seq_id, seq_len)) {
+ if (!check_mgmt_seq_id_and_seg_len(recv_msg, seq_id, seq_len, msg_id)) {
PMD_DRV_LOG(ERR,
"Mgmt msg sequence and segment check failed, "
- "func id: 0x%x, front id: 0x%x, current id: 0x%x, seg len: 0x%x",
+ "func id: 0x%x, front id: 0x%x, current id: 0x%x, seg len: 0x%x "
+ "front msg_id: %d, cur msg_id: %d",
hinic_global_func_id(pf_to_mgmt->hwdev),
- front_id, seq_id, seq_len);
+ front_id, seq_id, seq_len, recv_msg->msg_id, msg_id);
return HINIC_ERROR;
}