Lines Matching refs:h5

847 static RT_U16 h5_get_crc(rtk_hw_cfg_t * h5)  in h5_get_crc()  argument
850 RT_U8 *data = h5->rx_skb->data + h5->rx_skb->data_len - 2; in h5_get_crc()
920 static void h5_unslip_one_byte(rtk_hw_cfg_t * h5, unsigned char byte) in h5_unslip_one_byte() argument
925 if (H5_ESCSTATE_NOESC == h5->rx_esc_state) { in h5_unslip_one_byte()
927 h5->rx_esc_state = H5_ESCSTATE_ESC; in h5_unslip_one_byte()
929 memcpy(skb_put(h5->rx_skb, 1), &byte, 1); in h5_unslip_one_byte()
931 if ((h5->rx_skb->data[0] & 0x40) != 0 in h5_unslip_one_byte()
932 && h5->rx_state != H5_W4_CRC) { in h5_unslip_one_byte()
933 h5_crc_update(&h5->message_crc, byte); in h5_unslip_one_byte()
935 h5->rx_count--; in h5_unslip_one_byte()
937 } else if (H5_ESCSTATE_ESC == h5->rx_esc_state) { in h5_unslip_one_byte()
940 memcpy(skb_put(h5->rx_skb, 1), &c0, 1); in h5_unslip_one_byte()
941 if ((h5->rx_skb->data[0] & 0x40) != 0 in h5_unslip_one_byte()
942 && h5->rx_state != H5_W4_CRC) in h5_unslip_one_byte()
943 h5_crc_update(&h5->message_crc, 0xc0); in h5_unslip_one_byte()
944 h5->rx_esc_state = H5_ESCSTATE_NOESC; in h5_unslip_one_byte()
945 h5->rx_count--; in h5_unslip_one_byte()
949 memcpy(skb_put(h5->rx_skb, 1), &db, 1); in h5_unslip_one_byte()
950 if ((h5->rx_skb->data[0] & 0x40) != 0 in h5_unslip_one_byte()
951 && h5->rx_state != H5_W4_CRC) in h5_unslip_one_byte()
952 h5_crc_update(&h5->message_crc, 0xdb); in h5_unslip_one_byte()
953 h5->rx_esc_state = H5_ESCSTATE_NOESC; in h5_unslip_one_byte()
954 h5->rx_count--; in h5_unslip_one_byte()
958 memcpy(skb_put(h5->rx_skb, 1), &oof1, 1); in h5_unslip_one_byte()
959 if ((h5->rx_skb->data[0] & 0x40) != 0 in h5_unslip_one_byte()
960 && h5->rx_state != H5_W4_CRC) in h5_unslip_one_byte()
961 h5_crc_update(&h5->message_crc, oof1); in h5_unslip_one_byte()
962 h5->rx_esc_state = H5_ESCSTATE_NOESC; in h5_unslip_one_byte()
963 h5->rx_count--; in h5_unslip_one_byte()
967 memcpy(skb_put(h5->rx_skb, 1), &oof2, 1); in h5_unslip_one_byte()
968 if ((h5->rx_skb->data[0] & 0x40) != 0 in h5_unslip_one_byte()
969 && h5->rx_state != H5_W4_CRC) in h5_unslip_one_byte()
970 h5_crc_update(&h5->message_crc, oof2); in h5_unslip_one_byte()
971 h5->rx_esc_state = H5_ESCSTATE_NOESC; in h5_unslip_one_byte()
972 h5->rx_count--; in h5_unslip_one_byte()
977 skb_free(h5->rx_skb); in h5_unslip_one_byte()
978 h5->rx_skb = NULL; in h5_unslip_one_byte()
979 h5->rx_state = H5_W4_PKT_DELIMITER; in h5_unslip_one_byte()
980 h5->rx_count = 0; in h5_unslip_one_byte()
1003 static struct sk_buff *h5_prepare_pkt(rtk_hw_cfg_t * h5, RT_U8 * data, in h5_prepare_pkt() argument
1041 hdr[0] = h5->rxseq_txack << 3; in h5_prepare_pkt()
1042 h5->is_txack_req = 0; in h5_prepare_pkt()
1048 hdr[0] |= 0x80 + h5->msgq_txseq; in h5_prepare_pkt()
1050 ++(h5->msgq_txseq); in h5_prepare_pkt()
1051 h5->msgq_txseq = (h5->msgq_txseq) & 0x07; in h5_prepare_pkt()
1054 if (h5->use_crc) in h5_prepare_pkt()
1067 if (h5->use_crc) in h5_prepare_pkt()
1075 if (h5->use_crc) in h5_prepare_pkt()
1080 if (h5->use_crc) { in h5_prepare_pkt()
1095 static void h5_remove_acked_pkt(rtk_hw_cfg_t * h5) in h5_remove_acked_pkt() argument
1101 seqno = h5->msgq_txseq; in h5_remove_acked_pkt()
1105 if (h5->rxack == seqno) in h5_remove_acked_pkt()
1112 if (h5->rxack != seqno) { in h5_remove_acked_pkt()
1333 static void h5_complete_rx_pkt(rtk_hw_cfg_t * h5) in h5_complete_rx_pkt() argument
1338 h5_hdr = (uint8_t *) (h5->rx_skb->data); in h5_complete_rx_pkt()
1340 RS_DBG("Received reliable seqno %u from card", h5->rxseq_txack); in h5_complete_rx_pkt()
1341 h5->rxseq_txack = H5_HDR_SEQ(h5_hdr) + 1; in h5_complete_rx_pkt()
1342 h5->rxseq_txack %= 8; in h5_complete_rx_pkt()
1343 h5->is_txack_req = 1; in h5_complete_rx_pkt()
1346 h5->rxack = H5_HDR_ACK(h5_hdr); in h5_complete_rx_pkt()
1362 h5_remove_acked_pkt(h5); in h5_complete_rx_pkt()
1365 skb_pull(h5->rx_skb, H5_HDR_SIZE); in h5_complete_rx_pkt()
1366 hci_recv_frame(h5->rx_skb); in h5_complete_rx_pkt()
1368 skb_free(h5->rx_skb); in h5_complete_rx_pkt()
1371 h5->rx_state = H5_W4_PKT_DELIMITER; in h5_complete_rx_pkt()
1372 h5->rx_skb = NULL; in h5_complete_rx_pkt()
1383 static int h5_recv(rtk_hw_cfg_t * h5, void *data, int count) in h5_recv() argument
1390 if (h5->rx_count) { in h5_recv()
1393 skb_free(h5->rx_skb); in h5_recv()
1394 h5->rx_state = H5_W4_PKT_START; in h5_recv()
1395 h5->rx_count = 0; in h5_recv()
1397 h5_unslip_one_byte(h5, *ptr); in h5_recv()
1404 switch (h5->rx_state) { in h5_recv()
1408 (h5->rx_skb->data[0] + h5->rx_skb->data[1] + in h5_recv()
1409 h5->rx_skb->data[2])) != h5->rx_skb->data[3]) { in h5_recv()
1411 skb_free(h5->rx_skb); in h5_recv()
1412 h5->rx_state = H5_W4_PKT_DELIMITER; in h5_recv()
1413 h5->rx_count = 0; in h5_recv()
1418 if (h5->rx_skb->data[0] & 0x80 in h5_recv()
1419 && (h5->rx_skb->data[0] & 0x07) != in h5_recv()
1420 h5->rxseq_txack) { in h5_recv()
1423 h5->rx_skb->data[0] & 0x07, in h5_recv()
1424 h5->rxseq_txack); in h5_recv()
1425 h5->is_txack_req = 1; in h5_recv()
1427 skb_free(h5->rx_skb); in h5_recv()
1428 h5->rx_state = H5_W4_PKT_DELIMITER; in h5_recv()
1429 h5->rx_count = 0; in h5_recv()
1434 h5->rx_skb->data[0] & 0x07; in h5_recv()
1438 h5->rx_state = H5_W4_DATA; in h5_recv()
1439 h5->rx_count = in h5_recv()
1440 (h5->rx_skb->data[1] >> 4) + in h5_recv()
1441 (h5->rx_skb->data[2] << 4); in h5_recv()
1446 if (h5->rx_skb->data[0] & 0x40) { in h5_recv()
1447 h5->rx_state = H5_W4_CRC; in h5_recv()
1448 h5->rx_count = 2; in h5_recv()
1450 h5_complete_rx_pkt(h5); in h5_recv()
1456 if (bit_rev16(h5->message_crc) != h5_get_crc(h5)) { in h5_recv()
1459 bit_rev16(h5->message_crc), in h5_recv()
1460 h5_get_crc(h5)); in h5_recv()
1461 skb_free(h5->rx_skb); in h5_recv()
1462 h5->rx_state = H5_W4_PKT_DELIMITER; in h5_recv()
1463 h5->rx_count = 0; in h5_recv()
1466 skb_trim(h5->rx_skb, h5->rx_skb->data_len - 2); in h5_recv()
1467 h5_complete_rx_pkt(h5); in h5_recv()
1473 h5->rx_state = H5_W4_PKT_START; in h5_recv()
1491 h5->rx_state = H5_W4_HDR; in h5_recv()
1492 h5->rx_count = 4; in h5_recv()
1493 h5->rx_esc_state = H5_ESCSTATE_NOESC; in h5_recv()
1494 H5_CRC_INIT(h5->message_crc); in h5_recv()
1499 h5->rx_skb = skb_alloc(0x1005); in h5_recv()
1500 if (!h5->rx_skb) { in h5_recv()
1501 h5->rx_state = H5_W4_PKT_DELIMITER; in h5_recv()
1502 h5->rx_count = 0; in h5_recv()