struct brcmf_msgbuf_pktid *pktid;
        struct sk_buff *skb;
 
-       if (idx >= pktids->array_size) {
+       if (idx < 0 || idx >= pktids->array_size) {
                brcmf_err("Invalid packet id %d (max %d)\n", idx,
                          pktids->array_size);
                return NULL;
                tx_msghdr = (struct msgbuf_tx_msghdr *)ret_ptr;
 
                tx_msghdr->msg.msgtype = MSGBUF_TYPE_TX_POST;
-               tx_msghdr->msg.request_id = cpu_to_le32(pktid);
+               tx_msghdr->msg.request_id = cpu_to_le32(pktid + 1);
                tx_msghdr->msg.ifidx = brcmf_flowring_ifidx_get(flow, flowid);
                tx_msghdr->flags = BRCMF_MSGBUF_PKT_FLAGS_FRAME_802_3;
                tx_msghdr->flags |= (skb->priority & 0x07) <<
        u16 flowid;
 
        tx_status = (struct msgbuf_tx_status *)buf;
-       idx = le32_to_cpu(tx_status->msg.request_id);
+       idx = le32_to_cpu(tx_status->msg.request_id) - 1;
        flowid = le16_to_cpu(tx_status->compl_hdr.flow_ring_id);
        flowid -= BRCMF_H2D_MSGRING_FLOWRING_IDSTART;
        skb = brcmf_msgbuf_get_pktid(msgbuf->drvr->bus_if->dev,