Home | History | Annotate | Download | only in l2cap

Lines Matching full:p_buf

96 static void    process_s_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf, UINT16 ctrl_word);
97 static void process_i_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf, UINT16 ctrl_word, BOOLEAN delay_ack);
99 static void prepare_I_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf, BOOLEAN is_retransmission);
100 static void process_stream_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf);
101 static BOOLEAN do_sar_reassembly (tL2C_CCB *p_ccb, BT_HDR *p_buf, UINT16 ctrl_word);
140 static UINT16 l2c_fcr_tx_get_fcs (BT_HDR *p_buf)
142 UINT8 *p = ((UINT8 *) (p_buf + 1)) + p_buf->offset;
144 return (l2c_fcr_updcrc (L2CAP_FCR_INIT_CRC, p, p_buf->len));
156 static UINT16 l2c_fcr_rx_get_fcs (BT_HDR *p_buf)
158 UINT8 *p = ((UINT8 *) (p_buf + 1)) + p_buf->offset;
163 return (l2c_fcr_updcrc (L2CAP_FCR_INIT_CRC, p, p_buf->len + L2CAP_PKT_OVERHEAD));
326 BT_HDR *l2c_fcr_clone_buf(BT_HDR *p_buf, UINT16 new_offset, UINT16 no_of_bytes)
328 assert(p_buf != NULL);
346 ((UINT8 *)(p_buf + 1)) + p_buf->offset,
396 static void prepare_I_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf, BOOLEAN is_retransmission)
399 assert(p_buf != NULL);
411 p = ((UINT8 *) (p_buf+1)) + p_buf->offset + L2CAP_PKT_OVERHEAD;
419 p_buf->layer_specific & L2CAP_FCR_SEG_BITS; /* SAR bits */
439 p = ((UINT8 *) (p_buf+1)) + p_buf->offset + L2CAP_PKT_OVERHEAD;
447 p = ((UINT8 *) (p_buf+1)) + p_buf->offset;
448 UINT16_TO_STREAM (p, p_buf->len + L2CAP_FCS_LEN - L2CAP_PKT_OVERHEAD);
451 fcs = l2c_fcr_tx_get_fcs(p_buf);
458 p = ((UINT8 *) (p_buf+1)) + p_buf->offset + p_buf->len;
462 p_buf->len += L2CAP_FCS_LEN;
469 p_ccb->local_cid, p_buf->len,
478 p_ccb->local_cid, p_buf->len,
527 BT_HDR *p_buf = (BT_HDR *)osi_malloc(L2CAP_CMD_BUF_SIZE);
528 p_buf->offset = HCI_DATA_PREAMBLE_SIZE;
529 p_buf->len = L2CAP_PKT_OVERHEAD + L2CAP_FCR_OVERHEAD;
532 p = (UINT8 *)(p_buf + 1) + p_buf->offset;
541 fcs = l2c_fcr_tx_get_fcs (p_buf);
544 p_buf->len += L2CAP_FCS_LEN;
552 p_buf->layer_specific = L2CAP_NON_FLUSHABLE_PKT;
553 l2cu_set_acl_hci_header (p_buf, p_ccb);
564 L2CAP_TRACE_WARNING (" Buf Len: %u", p_buf->len);
572 L2CAP_TRACE_EVENT(" Buf Len: %u", p_buf->len);
576 l2c_link_check_send_pkts (p_ccb->p_lcb, NULL, p_buf);
594 void l2c_fcr_proc_pdu (tL2C_CCB *p_ccb, BT_HDR *p_buf)
597 assert(p_buf != NULL);
607 if (p_buf->len < min_pdu_len)
609 L2CAP_TRACE_WARNING ("Rx L2CAP PDU: CID: 0x%04x Len too short: %u", p_ccb->local_cid, p_buf->len);
610 osi_free(p_buf);
616 process_stream_frame (p_ccb, p_buf);
622 p = ((UINT8 *)(p_buf+1)) + p_buf->offset;
632 p_ccb->local_cid, p_buf->len,
641 p_ccb->local_cid, p_buf->len,
651 p_ccb->local_cid, p_buf->len,
670 p = ((UINT8 *)(p_buf+1)) + p_buf->offset + p_buf->len - L2CAP_FCS_LEN;
674 p_buf->len -= L2CAP_FCS_LEN;
676 if (l2c_fcr_rx_get_fcs(p_buf) != fcs)
679 osi_free(p_buf);
685 p = ((UINT8 *)(p_buf+1)) + p_buf->offset;
689 p_buf->len -= L2CAP_FCR_OVERHEAD;
690 p_buf->offset += L2CAP_FCR_OVERHEAD;
716 osi_free(p_buf);
740 osi_free(p_buf);
746 process_s_frame (p_ccb, p_buf, ctrl_word);
748 process_i_frame (p_ccb, p_buf, ctrl_word, FALSE);
761 while ((p_buf = (BT_HDR *)fixed_queue_try_dequeue(temp_q)) != NULL)
766 p = ((UINT8 *)(p_buf+1)) + p_buf->offset - L2CAP_FCR_OVERHEAD;
775 process_i_frame (p_ccb, p_buf, ctrl_word, TRUE);
778 osi_free(p_buf);
823 void l2c_lcc_proc_pdu(tL2C_CCB *p_ccb, BT_HDR *p_buf)
827 assert(p_buf != NULL);
828 UINT8 *p = (UINT8*)(p_buf + 1) + p_buf->offset;
833 if (p_buf->len > p_ccb->local_conn_cfg.mps)
836 osi_free(p_buf);
847 osi_free(p_buf);
854 osi_free(p_buf);
862 p_buf->len -= sizeof(sdu_length);
863 p_buf->offset += sizeof(sdu_length);
870 memcpy((UINT8*)(p_data + 1) + p_data->offset + p_data->len, (UINT8*)(p_buf + 1) + p_buf->offset, p_buf->len);
871 p_data->len += p_buf->len;
890 osi_free(p_buf);
1064 static void process_s_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf, UINT16 ctrl_word)
1067 assert(p_buf != NULL);
1074 if (p_buf->len != 0)
1076 L2CAP_TRACE_WARNING ("Incorrect S-frame Length (%d)", p_buf->len);
1137 osi_free(p_buf);
1150 static void process_i_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf, UINT16 ctrl_word, BOOLEAN delay_ack)
1153 assert(p_buf != NULL);
1163 osi_free(p_buf);
1170 p_ccb->fcrb.ertm_byte_counts[1] += p_buf->len;
1181 osi_free(p_buf);
1195 osi_free(p_buf);
1216 p_buf->offset -= L2CAP_FCR_OVERHEAD;
1217 p_buf->len += L2CAP_FCR_OVERHEAD;
1219 p_buf2 = l2c_fcr_clone_buf(p_buf, p_buf->offset, p_buf->len);
1223 osi_free(p_buf);
1224 p_buf = p_buf2;
1226 p_buf->offset += L2CAP_FCR_OVERHEAD;
1227 p_buf->len -= L2CAP_FCR_OVERHEAD;
1232 p_buf->layer_specific = tx_seq;
1233 fixed_queue_enqueue(p_fcrb->srej_rcv_hold_q, p_buf);
1241 osi_free(p_buf);
1250 osi_free(p_buf);
1260 osi_free(p_buf);
1271 p_buf->layer_specific = tx_seq;
1272 fixed_queue_enqueue(p_fcrb->srej_rcv_hold_q, p_buf);
1290 if (!do_sar_reassembly (p_ccb, p_buf, ctrl_word))
1339 static void process_stream_frame (tL2C_CCB *p_ccb, BT_HDR *p_buf)
1342 assert(p_buf != NULL);
1352 p = ((UINT8 *)(p_buf+1)) + p_buf->offset + p_buf->len - L2CAP_FCS_LEN;
1356 p_buf->len -= L2CAP_FCS_LEN;
1358 if (l2c_fcr_rx_get_fcs(p_buf) != fcs)
1361 osi_free(p_buf);
1367 p = ((UINT8 *)(p_buf+1)) + p_buf->offset;
1371 p_buf->len -= L2CAP_FCR_OVERHEAD;
1372 p_buf->offset += L2CAP_FCR_OVERHEAD;
1378 osi_free(p_buf);
1384 p_ccb->local_cid, p_buf->len,
1406 if (!do_sar_reassembly (p_ccb, p_buf, ctrl_word))
1423 static BOOLEAN do_sar_reassembly (tL2C_CCB *p_ccb, BT_HDR *p_buf, UINT16 ctrl_word)
1426 assert(p_buf != NULL);
1444 if ( (sar_type == L2CAP_FCR_START_SDU) && (p_buf->len < L2CAP_SDU_LEN_OVERHEAD) )
1446 L2CAP_TRACE_WARNING ("SAR start packet too short: %u", p_buf->len);
1461 p = ((UINT8 *)(p_buf + 1)) + p_buf->offset;
1468 p_buf->offset += 2;
1469 p_buf->len -= 2;
1484 if ((p_fcrb->p_rx_sdu->len + p_buf->len) > p_fcrb->rx_sdu_len)
1487 sar_type, p_fcrb->p_rx_sdu->len, p_buf->len, p_fcrb->rx_sdu_len);
1490 else if ( (sar_type == L2CAP_FCR_END_SDU) && ((p_fcrb->p_rx_sdu->len + p_buf->len) != p_fcrb->rx_sdu_len) )
1493 p_fcrb->p_rx_sdu->len, p_buf->len, p_fcrb->rx_sdu_len);
1498 memcpy (((UINT8 *) (p_fcrb->p_rx_sdu + 1)) + p_fcrb->p_rx_sdu->offset + p_fcrb->p_rx_sdu->len, p, p_buf->len);
1500 p_fcrb->p_rx_sdu->len += p_buf->len;
1502 osi_free(p_buf);
1503 p_buf = NULL;
1507 p_buf = p_fcrb->p_rx_sdu;
1516 osi_free(p_buf);
1518 else if (p_buf != NULL)
1526 (p_ccb->local_cid, p_ccb->p_lcb->remote_bd_addr, p_buf);
1530 l2c_csm_execute (p_ccb, L2CEVT_L2CAP_DATA, p_buf);
1550 BT_HDR *p_buf = NULL;
1580 p_buf = (BT_HDR *)list_node(node_ack);
1582 p = ((UINT8 *) (p_buf+1)) + p_buf->offset + L2CAP_PKT_OVERHEAD;
1595 if (!p_buf)
1630 p_buf = (BT_HDR *)list_node(node_ack);
1633 BT_HDR *p_buf2 = l2c_fcr_clone_buf(p_buf, p_buf->offset, p_buf->len);
1636 p_buf2->layer_specific = p_buf->layer_specific;
1675 BT_HDR *p_buf, *p_xmit;
1681 p_buf = (BT_HDR *)fixed_queue_try_dequeue(p_ccb->fcrb.retrans_q);
1682 if (p_buf != NULL)
1685 prepare_I_frame (p_ccb, p_buf, TRUE);
1687 p_buf->event = p_ccb->local_cid;
1692 p_ccb->fcrb.ertm_byte_counts[0] += (p_buf->len - 8);
1694 return (p_buf);
1705 p_buf = (BT_HDR *)fixed_queue_try_peek_first(p_ccb->xmit_hold_q);
1708 if (p_buf->len > max_pdu)
1711 if (p_buf->event == 0)
1714 sdu_len = p_buf->len;
1720 p_xmit = l2c_fcr_clone_buf(p_buf, L2CAP_MIN_OFFSET + L2CAP_SDU_LEN_OFFSET,
1725 p_buf->event = p_ccb->local_cid;
1728 p_buf->len -= max_pdu;
1729 p_buf->offset += max_pdu;
1732 p_xmit->layer_specific = p_buf->layer_specific;
1852 BT_HDR *p_buf, *p_xmit;
1856 p_buf = (BT_HDR *)fixed_queue_try_peek_first(p_ccb->xmit_hold_q);
1859 if (p_buf->event == 0)
1862 sdu_len = p_buf->len;
1863 if (p_buf->len <= (max_pdu - L2CAP_LCC_SDU_LENGTH))
1866 no_of_bytes_to_send = p_buf->len;
1871 else if (p_buf->len <= max_pdu)
1874 no_of_bytes_to_send = p_buf->len;
1884 p_xmit = l2c_fcr_clone_buf (p_buf, L2CAP_LCC_OFFSET,
1887 p_xmit = l2c_fcr_clone_buf (p_buf, L2CAP_MIN_OFFSET,
1892 p_buf->event = p_ccb->local_cid;
1903 p_buf->len -= no_of_bytes_to_send;
1904 p_buf->offset += no_of_bytes_to_send;
1907 p_xmit->layer_specific = p_buf->layer_specific;
1918 p_buf = (BT_HDR *)fixed_queue_try_dequeue(p_ccb->xmit_hold_q);
1919 osi_free(p_buf);
2432 BT_HDR *p_buf;
2458 p_buf = list_node(node);
2460 p_ccb->fcrb.throughput[index] += p_buf->len - 8;
2465 p = ((UINT8 *) (p_buf+1)) + p_buf->offset + p_buf->len;