1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * 4 * Bluetooth HCI Three-wire UART driver 5 * 6 * Copyright (C) 2012 Intel Corporation 7 */ 8 9 #include <linux/acpi.h> 10 #include <linux/errno.h> 11 #include <linux/gpio/consumer.h> 12 #include <linux/kernel.h> 13 #include <linux/mod_devicetable.h> 14 #include <linux/of_device.h> 15 #include <linux/serdev.h> 16 #include <linux/skbuff.h> 17 18 #include <net/bluetooth/bluetooth.h> 19 #include <net/bluetooth/hci_core.h> 20 21 #include "btrtl.h" 22 #include "hci_uart.h" 23 24 #define HCI_3WIRE_ACK_PKT 0 25 #define HCI_3WIRE_LINK_PKT 15 26 27 /* Sliding window size */ 28 #define H5_TX_WIN_MAX 4 29 30 #define H5_ACK_TIMEOUT msecs_to_jiffies(250) 31 #define H5_SYNC_TIMEOUT msecs_to_jiffies(100) 32 33 /* 34 * Maximum Three-wire packet: 35 * 4 byte header + max value for 12-bit length + 2 bytes for CRC 36 */ 37 #define H5_MAX_LEN (4 + 0xfff + 2) 38 39 /* Convenience macros for reading Three-wire header values */ 40 #define H5_HDR_SEQ(hdr) ((hdr)[0] & 0x07) 41 #define H5_HDR_ACK(hdr) (((hdr)[0] >> 3) & 0x07) 42 #define H5_HDR_CRC(hdr) (((hdr)[0] >> 6) & 0x01) 43 #define H5_HDR_RELIABLE(hdr) (((hdr)[0] >> 7) & 0x01) 44 #define H5_HDR_PKT_TYPE(hdr) ((hdr)[1] & 0x0f) 45 #define H5_HDR_LEN(hdr) ((((hdr)[1] >> 4) & 0x0f) + ((hdr)[2] << 4)) 46 47 #define SLIP_DELIMITER 0xc0 48 #define SLIP_ESC 0xdb 49 #define SLIP_ESC_DELIM 0xdc 50 #define SLIP_ESC_ESC 0xdd 51 52 /* H5 state flags */ 53 enum { 54 H5_RX_ESC, /* SLIP escape mode */ 55 H5_TX_ACK_REQ, /* Pending ack to send */ 56 }; 57 58 struct h5 { 59 /* Must be the first member, hci_serdev.c expects this. */ 60 struct hci_uart serdev_hu; 61 62 struct sk_buff_head unack; /* Unack'ed packets queue */ 63 struct sk_buff_head rel; /* Reliable packets queue */ 64 struct sk_buff_head unrel; /* Unreliable packets queue */ 65 66 unsigned long flags; 67 68 struct sk_buff *rx_skb; /* Receive buffer */ 69 size_t rx_pending; /* Expecting more bytes */ 70 u8 rx_ack; /* Last ack number received */ 71 72 int (*rx_func)(struct hci_uart *hu, u8 c); 73 74 struct timer_list timer; /* Retransmission timer */ 75 struct hci_uart *hu; /* Parent HCI UART */ 76 77 u8 tx_seq; /* Next seq number to send */ 78 u8 tx_ack; /* Next ack number to send */ 79 u8 tx_win; /* Sliding window size */ 80 81 enum { 82 H5_UNINITIALIZED, 83 H5_INITIALIZED, 84 H5_ACTIVE, 85 } state; 86 87 enum { 88 H5_AWAKE, 89 H5_SLEEPING, 90 H5_WAKING_UP, 91 } sleep; 92 93 const struct h5_vnd *vnd; 94 const char *id; 95 96 struct gpio_desc *enable_gpio; 97 struct gpio_desc *device_wake_gpio; 98 }; 99 100 struct h5_vnd { 101 int (*setup)(struct h5 *h5); 102 void (*open)(struct h5 *h5); 103 void (*close)(struct h5 *h5); 104 int (*suspend)(struct h5 *h5); 105 int (*resume)(struct h5 *h5); 106 const struct acpi_gpio_mapping *acpi_gpio_map; 107 }; 108 109 static void h5_reset_rx(struct h5 *h5); 110 111 static void h5_link_control(struct hci_uart *hu, const void *data, size_t len) 112 { 113 struct h5 *h5 = hu->priv; 114 struct sk_buff *nskb; 115 116 nskb = alloc_skb(3, GFP_ATOMIC); 117 if (!nskb) 118 return; 119 120 hci_skb_pkt_type(nskb) = HCI_3WIRE_LINK_PKT; 121 122 skb_put_data(nskb, data, len); 123 124 skb_queue_tail(&h5->unrel, nskb); 125 } 126 127 static u8 h5_cfg_field(struct h5 *h5) 128 { 129 /* Sliding window size (first 3 bits) */ 130 return h5->tx_win & 0x07; 131 } 132 133 static void h5_timed_event(struct timer_list *t) 134 { 135 const unsigned char sync_req[] = { 0x01, 0x7e }; 136 unsigned char conf_req[3] = { 0x03, 0xfc }; 137 struct h5 *h5 = from_timer(h5, t, timer); 138 struct hci_uart *hu = h5->hu; 139 struct sk_buff *skb; 140 unsigned long flags; 141 142 BT_DBG("%s", hu->hdev->name); 143 144 if (h5->state == H5_UNINITIALIZED) 145 h5_link_control(hu, sync_req, sizeof(sync_req)); 146 147 if (h5->state == H5_INITIALIZED) { 148 conf_req[2] = h5_cfg_field(h5); 149 h5_link_control(hu, conf_req, sizeof(conf_req)); 150 } 151 152 if (h5->state != H5_ACTIVE) { 153 mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT); 154 goto wakeup; 155 } 156 157 if (h5->sleep != H5_AWAKE) { 158 h5->sleep = H5_SLEEPING; 159 goto wakeup; 160 } 161 162 BT_DBG("hu %p retransmitting %u pkts", hu, h5->unack.qlen); 163 164 spin_lock_irqsave_nested(&h5->unack.lock, flags, SINGLE_DEPTH_NESTING); 165 166 while ((skb = __skb_dequeue_tail(&h5->unack)) != NULL) { 167 h5->tx_seq = (h5->tx_seq - 1) & 0x07; 168 skb_queue_head(&h5->rel, skb); 169 } 170 171 spin_unlock_irqrestore(&h5->unack.lock, flags); 172 173 wakeup: 174 hci_uart_tx_wakeup(hu); 175 } 176 177 static void h5_peer_reset(struct hci_uart *hu) 178 { 179 struct h5 *h5 = hu->priv; 180 181 bt_dev_err(hu->hdev, "Peer device has reset"); 182 183 h5->state = H5_UNINITIALIZED; 184 185 del_timer(&h5->timer); 186 187 skb_queue_purge(&h5->rel); 188 skb_queue_purge(&h5->unrel); 189 skb_queue_purge(&h5->unack); 190 191 h5->tx_seq = 0; 192 h5->tx_ack = 0; 193 194 /* Send reset request to upper stack */ 195 hci_reset_dev(hu->hdev); 196 } 197 198 static int h5_open(struct hci_uart *hu) 199 { 200 struct h5 *h5; 201 const unsigned char sync[] = { 0x01, 0x7e }; 202 203 BT_DBG("hu %p", hu); 204 205 if (hu->serdev) { 206 h5 = serdev_device_get_drvdata(hu->serdev); 207 } else { 208 h5 = kzalloc(sizeof(*h5), GFP_KERNEL); 209 if (!h5) 210 return -ENOMEM; 211 } 212 213 hu->priv = h5; 214 h5->hu = hu; 215 216 skb_queue_head_init(&h5->unack); 217 skb_queue_head_init(&h5->rel); 218 skb_queue_head_init(&h5->unrel); 219 220 h5_reset_rx(h5); 221 222 timer_setup(&h5->timer, h5_timed_event, 0); 223 224 h5->tx_win = H5_TX_WIN_MAX; 225 226 if (h5->vnd && h5->vnd->open) 227 h5->vnd->open(h5); 228 229 set_bit(HCI_UART_INIT_PENDING, &hu->hdev_flags); 230 231 /* Send initial sync request */ 232 h5_link_control(hu, sync, sizeof(sync)); 233 mod_timer(&h5->timer, jiffies + H5_SYNC_TIMEOUT); 234 235 return 0; 236 } 237 238 static int h5_close(struct hci_uart *hu) 239 { 240 struct h5 *h5 = hu->priv; 241 242 del_timer_sync(&h5->timer); 243 244 skb_queue_purge(&h5->unack); 245 skb_queue_purge(&h5->rel); 246 skb_queue_purge(&h5->unrel); 247 248 kfree_skb(h5->rx_skb); 249 h5->rx_skb = NULL; 250 251 if (h5->vnd && h5->vnd->close) 252 h5->vnd->close(h5); 253 254 if (!hu->serdev) 255 kfree(h5); 256 257 return 0; 258 } 259 260 static int h5_setup(struct hci_uart *hu) 261 { 262 struct h5 *h5 = hu->priv; 263 264 if (h5->vnd && h5->vnd->setup) 265 return h5->vnd->setup(h5); 266 267 return 0; 268 } 269 270 static void h5_pkt_cull(struct h5 *h5) 271 { 272 struct sk_buff *skb, *tmp; 273 unsigned long flags; 274 int i, to_remove; 275 u8 seq; 276 277 spin_lock_irqsave(&h5->unack.lock, flags); 278 279 to_remove = skb_queue_len(&h5->unack); 280 if (to_remove == 0) 281 goto unlock; 282 283 seq = h5->tx_seq; 284 285 while (to_remove > 0) { 286 if (h5->rx_ack == seq) 287 break; 288 289 to_remove--; 290 seq = (seq - 1) & 0x07; 291 } 292 293 if (seq != h5->rx_ack) 294 BT_ERR("Controller acked invalid packet"); 295 296 i = 0; 297 skb_queue_walk_safe(&h5->unack, skb, tmp) { 298 if (i++ >= to_remove) 299 break; 300 301 __skb_unlink(skb, &h5->unack); 302 kfree_skb(skb); 303 } 304 305 if (skb_queue_empty(&h5->unack)) 306 del_timer(&h5->timer); 307 308 unlock: 309 spin_unlock_irqrestore(&h5->unack.lock, flags); 310 } 311 312 static void h5_handle_internal_rx(struct hci_uart *hu) 313 { 314 struct h5 *h5 = hu->priv; 315 const unsigned char sync_req[] = { 0x01, 0x7e }; 316 const unsigned char sync_rsp[] = { 0x02, 0x7d }; 317 unsigned char conf_req[3] = { 0x03, 0xfc }; 318 const unsigned char conf_rsp[] = { 0x04, 0x7b }; 319 const unsigned char wakeup_req[] = { 0x05, 0xfa }; 320 const unsigned char woken_req[] = { 0x06, 0xf9 }; 321 const unsigned char sleep_req[] = { 0x07, 0x78 }; 322 const unsigned char *hdr = h5->rx_skb->data; 323 const unsigned char *data = &h5->rx_skb->data[4]; 324 325 BT_DBG("%s", hu->hdev->name); 326 327 if (H5_HDR_PKT_TYPE(hdr) != HCI_3WIRE_LINK_PKT) 328 return; 329 330 if (H5_HDR_LEN(hdr) < 2) 331 return; 332 333 conf_req[2] = h5_cfg_field(h5); 334 335 if (memcmp(data, sync_req, 2) == 0) { 336 if (h5->state == H5_ACTIVE) 337 h5_peer_reset(hu); 338 h5_link_control(hu, sync_rsp, 2); 339 } else if (memcmp(data, sync_rsp, 2) == 0) { 340 if (h5->state == H5_ACTIVE) 341 h5_peer_reset(hu); 342 h5->state = H5_INITIALIZED; 343 h5_link_control(hu, conf_req, 3); 344 } else if (memcmp(data, conf_req, 2) == 0) { 345 h5_link_control(hu, conf_rsp, 2); 346 h5_link_control(hu, conf_req, 3); 347 } else if (memcmp(data, conf_rsp, 2) == 0) { 348 if (H5_HDR_LEN(hdr) > 2) 349 h5->tx_win = (data[2] & 0x07); 350 BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win); 351 h5->state = H5_ACTIVE; 352 hci_uart_init_ready(hu); 353 return; 354 } else if (memcmp(data, sleep_req, 2) == 0) { 355 BT_DBG("Peer went to sleep"); 356 h5->sleep = H5_SLEEPING; 357 return; 358 } else if (memcmp(data, woken_req, 2) == 0) { 359 BT_DBG("Peer woke up"); 360 h5->sleep = H5_AWAKE; 361 } else if (memcmp(data, wakeup_req, 2) == 0) { 362 BT_DBG("Peer requested wakeup"); 363 h5_link_control(hu, woken_req, 2); 364 h5->sleep = H5_AWAKE; 365 } else { 366 BT_DBG("Link Control: 0x%02hhx 0x%02hhx", data[0], data[1]); 367 return; 368 } 369 370 hci_uart_tx_wakeup(hu); 371 } 372 373 static void h5_complete_rx_pkt(struct hci_uart *hu) 374 { 375 struct h5 *h5 = hu->priv; 376 const unsigned char *hdr = h5->rx_skb->data; 377 378 if (H5_HDR_RELIABLE(hdr)) { 379 h5->tx_ack = (h5->tx_ack + 1) % 8; 380 set_bit(H5_TX_ACK_REQ, &h5->flags); 381 hci_uart_tx_wakeup(hu); 382 } 383 384 h5->rx_ack = H5_HDR_ACK(hdr); 385 386 h5_pkt_cull(h5); 387 388 switch (H5_HDR_PKT_TYPE(hdr)) { 389 case HCI_EVENT_PKT: 390 case HCI_ACLDATA_PKT: 391 case HCI_SCODATA_PKT: 392 case HCI_ISODATA_PKT: 393 hci_skb_pkt_type(h5->rx_skb) = H5_HDR_PKT_TYPE(hdr); 394 395 /* Remove Three-wire header */ 396 skb_pull(h5->rx_skb, 4); 397 398 hci_recv_frame(hu->hdev, h5->rx_skb); 399 h5->rx_skb = NULL; 400 401 break; 402 403 default: 404 h5_handle_internal_rx(hu); 405 break; 406 } 407 408 h5_reset_rx(h5); 409 } 410 411 static int h5_rx_crc(struct hci_uart *hu, unsigned char c) 412 { 413 h5_complete_rx_pkt(hu); 414 415 return 0; 416 } 417 418 static int h5_rx_payload(struct hci_uart *hu, unsigned char c) 419 { 420 struct h5 *h5 = hu->priv; 421 const unsigned char *hdr = h5->rx_skb->data; 422 423 if (H5_HDR_CRC(hdr)) { 424 h5->rx_func = h5_rx_crc; 425 h5->rx_pending = 2; 426 } else { 427 h5_complete_rx_pkt(hu); 428 } 429 430 return 0; 431 } 432 433 static int h5_rx_3wire_hdr(struct hci_uart *hu, unsigned char c) 434 { 435 struct h5 *h5 = hu->priv; 436 const unsigned char *hdr = h5->rx_skb->data; 437 438 BT_DBG("%s rx: seq %u ack %u crc %u rel %u type %u len %u", 439 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr), 440 H5_HDR_CRC(hdr), H5_HDR_RELIABLE(hdr), H5_HDR_PKT_TYPE(hdr), 441 H5_HDR_LEN(hdr)); 442 443 if (((hdr[0] + hdr[1] + hdr[2] + hdr[3]) & 0xff) != 0xff) { 444 bt_dev_err(hu->hdev, "Invalid header checksum"); 445 h5_reset_rx(h5); 446 return 0; 447 } 448 449 if (H5_HDR_RELIABLE(hdr) && H5_HDR_SEQ(hdr) != h5->tx_ack) { 450 bt_dev_err(hu->hdev, "Out-of-order packet arrived (%u != %u)", 451 H5_HDR_SEQ(hdr), h5->tx_ack); 452 h5_reset_rx(h5); 453 return 0; 454 } 455 456 if (h5->state != H5_ACTIVE && 457 H5_HDR_PKT_TYPE(hdr) != HCI_3WIRE_LINK_PKT) { 458 bt_dev_err(hu->hdev, "Non-link packet received in non-active state"); 459 h5_reset_rx(h5); 460 return 0; 461 } 462 463 h5->rx_func = h5_rx_payload; 464 h5->rx_pending = H5_HDR_LEN(hdr); 465 466 return 0; 467 } 468 469 static int h5_rx_pkt_start(struct hci_uart *hu, unsigned char c) 470 { 471 struct h5 *h5 = hu->priv; 472 473 if (c == SLIP_DELIMITER) 474 return 1; 475 476 h5->rx_func = h5_rx_3wire_hdr; 477 h5->rx_pending = 4; 478 479 h5->rx_skb = bt_skb_alloc(H5_MAX_LEN, GFP_ATOMIC); 480 if (!h5->rx_skb) { 481 bt_dev_err(hu->hdev, "Can't allocate mem for new packet"); 482 h5_reset_rx(h5); 483 return -ENOMEM; 484 } 485 486 h5->rx_skb->dev = (void *)hu->hdev; 487 488 return 0; 489 } 490 491 static int h5_rx_delimiter(struct hci_uart *hu, unsigned char c) 492 { 493 struct h5 *h5 = hu->priv; 494 495 if (c == SLIP_DELIMITER) 496 h5->rx_func = h5_rx_pkt_start; 497 498 return 1; 499 } 500 501 static void h5_unslip_one_byte(struct h5 *h5, unsigned char c) 502 { 503 const u8 delim = SLIP_DELIMITER, esc = SLIP_ESC; 504 const u8 *byte = &c; 505 506 if (!test_bit(H5_RX_ESC, &h5->flags) && c == SLIP_ESC) { 507 set_bit(H5_RX_ESC, &h5->flags); 508 return; 509 } 510 511 if (test_and_clear_bit(H5_RX_ESC, &h5->flags)) { 512 switch (c) { 513 case SLIP_ESC_DELIM: 514 byte = &delim; 515 break; 516 case SLIP_ESC_ESC: 517 byte = &esc; 518 break; 519 default: 520 BT_ERR("Invalid esc byte 0x%02hhx", c); 521 h5_reset_rx(h5); 522 return; 523 } 524 } 525 526 skb_put_data(h5->rx_skb, byte, 1); 527 h5->rx_pending--; 528 529 BT_DBG("unslipped 0x%02hhx, rx_pending %zu", *byte, h5->rx_pending); 530 } 531 532 static void h5_reset_rx(struct h5 *h5) 533 { 534 if (h5->rx_skb) { 535 kfree_skb(h5->rx_skb); 536 h5->rx_skb = NULL; 537 } 538 539 h5->rx_func = h5_rx_delimiter; 540 h5->rx_pending = 0; 541 clear_bit(H5_RX_ESC, &h5->flags); 542 } 543 544 static int h5_recv(struct hci_uart *hu, const void *data, int count) 545 { 546 struct h5 *h5 = hu->priv; 547 const unsigned char *ptr = data; 548 549 BT_DBG("%s pending %zu count %d", hu->hdev->name, h5->rx_pending, 550 count); 551 552 while (count > 0) { 553 int processed; 554 555 if (h5->rx_pending > 0) { 556 if (*ptr == SLIP_DELIMITER) { 557 bt_dev_err(hu->hdev, "Too short H5 packet"); 558 h5_reset_rx(h5); 559 continue; 560 } 561 562 h5_unslip_one_byte(h5, *ptr); 563 564 ptr++; count--; 565 continue; 566 } 567 568 processed = h5->rx_func(hu, *ptr); 569 if (processed < 0) 570 return processed; 571 572 ptr += processed; 573 count -= processed; 574 } 575 576 return 0; 577 } 578 579 static int h5_enqueue(struct hci_uart *hu, struct sk_buff *skb) 580 { 581 struct h5 *h5 = hu->priv; 582 583 if (skb->len > 0xfff) { 584 bt_dev_err(hu->hdev, "Packet too long (%u bytes)", skb->len); 585 kfree_skb(skb); 586 return 0; 587 } 588 589 if (h5->state != H5_ACTIVE) { 590 bt_dev_err(hu->hdev, "Ignoring HCI data in non-active state"); 591 kfree_skb(skb); 592 return 0; 593 } 594 595 switch (hci_skb_pkt_type(skb)) { 596 case HCI_ACLDATA_PKT: 597 case HCI_COMMAND_PKT: 598 skb_queue_tail(&h5->rel, skb); 599 break; 600 601 case HCI_SCODATA_PKT: 602 case HCI_ISODATA_PKT: 603 skb_queue_tail(&h5->unrel, skb); 604 break; 605 606 default: 607 bt_dev_err(hu->hdev, "Unknown packet type %u", hci_skb_pkt_type(skb)); 608 kfree_skb(skb); 609 break; 610 } 611 612 return 0; 613 } 614 615 static void h5_slip_delim(struct sk_buff *skb) 616 { 617 const char delim = SLIP_DELIMITER; 618 619 skb_put_data(skb, &delim, 1); 620 } 621 622 static void h5_slip_one_byte(struct sk_buff *skb, u8 c) 623 { 624 const char esc_delim[2] = { SLIP_ESC, SLIP_ESC_DELIM }; 625 const char esc_esc[2] = { SLIP_ESC, SLIP_ESC_ESC }; 626 627 switch (c) { 628 case SLIP_DELIMITER: 629 skb_put_data(skb, &esc_delim, 2); 630 break; 631 case SLIP_ESC: 632 skb_put_data(skb, &esc_esc, 2); 633 break; 634 default: 635 skb_put_data(skb, &c, 1); 636 } 637 } 638 639 static bool valid_packet_type(u8 type) 640 { 641 switch (type) { 642 case HCI_ACLDATA_PKT: 643 case HCI_COMMAND_PKT: 644 case HCI_SCODATA_PKT: 645 case HCI_ISODATA_PKT: 646 case HCI_3WIRE_LINK_PKT: 647 case HCI_3WIRE_ACK_PKT: 648 return true; 649 default: 650 return false; 651 } 652 } 653 654 static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type, 655 const u8 *data, size_t len) 656 { 657 struct h5 *h5 = hu->priv; 658 struct sk_buff *nskb; 659 u8 hdr[4]; 660 int i; 661 662 if (!valid_packet_type(pkt_type)) { 663 bt_dev_err(hu->hdev, "Unknown packet type %u", pkt_type); 664 return NULL; 665 } 666 667 /* 668 * Max len of packet: (original len + 4 (H5 hdr) + 2 (crc)) * 2 669 * (because bytes 0xc0 and 0xdb are escaped, worst case is when 670 * the packet is all made of 0xc0 and 0xdb) + 2 (0xc0 671 * delimiters at start and end). 672 */ 673 nskb = alloc_skb((len + 6) * 2 + 2, GFP_ATOMIC); 674 if (!nskb) 675 return NULL; 676 677 hci_skb_pkt_type(nskb) = pkt_type; 678 679 h5_slip_delim(nskb); 680 681 hdr[0] = h5->tx_ack << 3; 682 clear_bit(H5_TX_ACK_REQ, &h5->flags); 683 684 /* Reliable packet? */ 685 if (pkt_type == HCI_ACLDATA_PKT || pkt_type == HCI_COMMAND_PKT) { 686 hdr[0] |= 1 << 7; 687 hdr[0] |= h5->tx_seq; 688 h5->tx_seq = (h5->tx_seq + 1) % 8; 689 } 690 691 hdr[1] = pkt_type | ((len & 0x0f) << 4); 692 hdr[2] = len >> 4; 693 hdr[3] = ~((hdr[0] + hdr[1] + hdr[2]) & 0xff); 694 695 BT_DBG("%s tx: seq %u ack %u crc %u rel %u type %u len %u", 696 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr), 697 H5_HDR_CRC(hdr), H5_HDR_RELIABLE(hdr), H5_HDR_PKT_TYPE(hdr), 698 H5_HDR_LEN(hdr)); 699 700 for (i = 0; i < 4; i++) 701 h5_slip_one_byte(nskb, hdr[i]); 702 703 for (i = 0; i < len; i++) 704 h5_slip_one_byte(nskb, data[i]); 705 706 h5_slip_delim(nskb); 707 708 return nskb; 709 } 710 711 static struct sk_buff *h5_dequeue(struct hci_uart *hu) 712 { 713 struct h5 *h5 = hu->priv; 714 unsigned long flags; 715 struct sk_buff *skb, *nskb; 716 717 if (h5->sleep != H5_AWAKE) { 718 const unsigned char wakeup_req[] = { 0x05, 0xfa }; 719 720 if (h5->sleep == H5_WAKING_UP) 721 return NULL; 722 723 h5->sleep = H5_WAKING_UP; 724 BT_DBG("Sending wakeup request"); 725 726 mod_timer(&h5->timer, jiffies + HZ / 100); 727 return h5_prepare_pkt(hu, HCI_3WIRE_LINK_PKT, wakeup_req, 2); 728 } 729 730 skb = skb_dequeue(&h5->unrel); 731 if (skb) { 732 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb), 733 skb->data, skb->len); 734 if (nskb) { 735 kfree_skb(skb); 736 return nskb; 737 } 738 739 skb_queue_head(&h5->unrel, skb); 740 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed"); 741 } 742 743 spin_lock_irqsave_nested(&h5->unack.lock, flags, SINGLE_DEPTH_NESTING); 744 745 if (h5->unack.qlen >= h5->tx_win) 746 goto unlock; 747 748 skb = skb_dequeue(&h5->rel); 749 if (skb) { 750 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb), 751 skb->data, skb->len); 752 if (nskb) { 753 __skb_queue_tail(&h5->unack, skb); 754 mod_timer(&h5->timer, jiffies + H5_ACK_TIMEOUT); 755 spin_unlock_irqrestore(&h5->unack.lock, flags); 756 return nskb; 757 } 758 759 skb_queue_head(&h5->rel, skb); 760 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed"); 761 } 762 763 unlock: 764 spin_unlock_irqrestore(&h5->unack.lock, flags); 765 766 if (test_bit(H5_TX_ACK_REQ, &h5->flags)) 767 return h5_prepare_pkt(hu, HCI_3WIRE_ACK_PKT, NULL, 0); 768 769 return NULL; 770 } 771 772 static int h5_flush(struct hci_uart *hu) 773 { 774 BT_DBG("hu %p", hu); 775 return 0; 776 } 777 778 static const struct hci_uart_proto h5p = { 779 .id = HCI_UART_3WIRE, 780 .name = "Three-wire (H5)", 781 .open = h5_open, 782 .close = h5_close, 783 .setup = h5_setup, 784 .recv = h5_recv, 785 .enqueue = h5_enqueue, 786 .dequeue = h5_dequeue, 787 .flush = h5_flush, 788 }; 789 790 static int h5_serdev_probe(struct serdev_device *serdev) 791 { 792 struct device *dev = &serdev->dev; 793 struct h5 *h5; 794 795 h5 = devm_kzalloc(dev, sizeof(*h5), GFP_KERNEL); 796 if (!h5) 797 return -ENOMEM; 798 799 h5->hu = &h5->serdev_hu; 800 h5->serdev_hu.serdev = serdev; 801 serdev_device_set_drvdata(serdev, h5); 802 803 if (has_acpi_companion(dev)) { 804 const struct acpi_device_id *match; 805 806 match = acpi_match_device(dev->driver->acpi_match_table, dev); 807 if (!match) 808 return -ENODEV; 809 810 h5->vnd = (const struct h5_vnd *)match->driver_data; 811 h5->id = (char *)match->id; 812 813 if (h5->vnd->acpi_gpio_map) 814 devm_acpi_dev_add_driver_gpios(dev, 815 h5->vnd->acpi_gpio_map); 816 } else { 817 const void *data; 818 819 data = of_device_get_match_data(dev); 820 if (!data) 821 return -ENODEV; 822 823 h5->vnd = (const struct h5_vnd *)data; 824 } 825 826 827 h5->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW); 828 if (IS_ERR(h5->enable_gpio)) 829 return PTR_ERR(h5->enable_gpio); 830 831 h5->device_wake_gpio = devm_gpiod_get_optional(dev, "device-wake", 832 GPIOD_OUT_LOW); 833 if (IS_ERR(h5->device_wake_gpio)) 834 return PTR_ERR(h5->device_wake_gpio); 835 836 return hci_uart_register_device(&h5->serdev_hu, &h5p); 837 } 838 839 static void h5_serdev_remove(struct serdev_device *serdev) 840 { 841 struct h5 *h5 = serdev_device_get_drvdata(serdev); 842 843 hci_uart_unregister_device(&h5->serdev_hu); 844 } 845 846 static int __maybe_unused h5_serdev_suspend(struct device *dev) 847 { 848 struct h5 *h5 = dev_get_drvdata(dev); 849 int ret = 0; 850 851 if (h5->vnd && h5->vnd->suspend) 852 ret = h5->vnd->suspend(h5); 853 854 return ret; 855 } 856 857 static int __maybe_unused h5_serdev_resume(struct device *dev) 858 { 859 struct h5 *h5 = dev_get_drvdata(dev); 860 int ret = 0; 861 862 if (h5->vnd && h5->vnd->resume) 863 ret = h5->vnd->resume(h5); 864 865 return ret; 866 } 867 868 #ifdef CONFIG_BT_HCIUART_RTL 869 static int h5_btrtl_setup(struct h5 *h5) 870 { 871 struct btrtl_device_info *btrtl_dev; 872 struct sk_buff *skb; 873 __le32 baudrate_data; 874 u32 device_baudrate; 875 unsigned int controller_baudrate; 876 bool flow_control; 877 int err; 878 879 btrtl_dev = btrtl_initialize(h5->hu->hdev, h5->id); 880 if (IS_ERR(btrtl_dev)) 881 return PTR_ERR(btrtl_dev); 882 883 err = btrtl_get_uart_settings(h5->hu->hdev, btrtl_dev, 884 &controller_baudrate, &device_baudrate, 885 &flow_control); 886 if (err) 887 goto out_free; 888 889 baudrate_data = cpu_to_le32(device_baudrate); 890 skb = __hci_cmd_sync(h5->hu->hdev, 0xfc17, sizeof(baudrate_data), 891 &baudrate_data, HCI_INIT_TIMEOUT); 892 if (IS_ERR(skb)) { 893 rtl_dev_err(h5->hu->hdev, "set baud rate command failed\n"); 894 err = PTR_ERR(skb); 895 goto out_free; 896 } else { 897 kfree_skb(skb); 898 } 899 /* Give the device some time to set up the new baudrate. */ 900 usleep_range(10000, 20000); 901 902 serdev_device_set_baudrate(h5->hu->serdev, controller_baudrate); 903 serdev_device_set_flow_control(h5->hu->serdev, flow_control); 904 905 err = btrtl_download_firmware(h5->hu->hdev, btrtl_dev); 906 /* Give the device some time before the hci-core sends it a reset */ 907 usleep_range(10000, 20000); 908 909 btrtl_set_quirks(h5->hu->hdev, btrtl_dev); 910 911 out_free: 912 btrtl_free(btrtl_dev); 913 914 return err; 915 } 916 917 static void h5_btrtl_open(struct h5 *h5) 918 { 919 /* Devices always start with these fixed parameters */ 920 serdev_device_set_flow_control(h5->hu->serdev, false); 921 serdev_device_set_parity(h5->hu->serdev, SERDEV_PARITY_EVEN); 922 serdev_device_set_baudrate(h5->hu->serdev, 115200); 923 924 /* The controller needs up to 500ms to wakeup */ 925 gpiod_set_value_cansleep(h5->enable_gpio, 1); 926 gpiod_set_value_cansleep(h5->device_wake_gpio, 1); 927 msleep(500); 928 } 929 930 static void h5_btrtl_close(struct h5 *h5) 931 { 932 gpiod_set_value_cansleep(h5->device_wake_gpio, 0); 933 gpiod_set_value_cansleep(h5->enable_gpio, 0); 934 } 935 936 /* Suspend/resume support. On many devices the RTL BT device loses power during 937 * suspend/resume, causing it to lose its firmware and all state. So we simply 938 * turn it off on suspend and reprobe on resume. This mirrors how RTL devices 939 * are handled in the USB driver, where the USB_QUIRK_RESET_RESUME is used which 940 * also causes a reprobe on resume. 941 */ 942 static int h5_btrtl_suspend(struct h5 *h5) 943 { 944 serdev_device_set_flow_control(h5->hu->serdev, false); 945 gpiod_set_value_cansleep(h5->device_wake_gpio, 0); 946 gpiod_set_value_cansleep(h5->enable_gpio, 0); 947 return 0; 948 } 949 950 struct h5_btrtl_reprobe { 951 struct device *dev; 952 struct work_struct work; 953 }; 954 955 static void h5_btrtl_reprobe_worker(struct work_struct *work) 956 { 957 struct h5_btrtl_reprobe *reprobe = 958 container_of(work, struct h5_btrtl_reprobe, work); 959 int ret; 960 961 ret = device_reprobe(reprobe->dev); 962 if (ret && ret != -EPROBE_DEFER) 963 dev_err(reprobe->dev, "Reprobe error %d\n", ret); 964 965 put_device(reprobe->dev); 966 kfree(reprobe); 967 module_put(THIS_MODULE); 968 } 969 970 static int h5_btrtl_resume(struct h5 *h5) 971 { 972 struct h5_btrtl_reprobe *reprobe; 973 974 reprobe = kzalloc(sizeof(*reprobe), GFP_KERNEL); 975 if (!reprobe) 976 return -ENOMEM; 977 978 __module_get(THIS_MODULE); 979 980 INIT_WORK(&reprobe->work, h5_btrtl_reprobe_worker); 981 reprobe->dev = get_device(&h5->hu->serdev->dev); 982 queue_work(system_long_wq, &reprobe->work); 983 return 0; 984 } 985 986 static const struct acpi_gpio_params btrtl_device_wake_gpios = { 0, 0, false }; 987 static const struct acpi_gpio_params btrtl_enable_gpios = { 1, 0, false }; 988 static const struct acpi_gpio_params btrtl_host_wake_gpios = { 2, 0, false }; 989 static const struct acpi_gpio_mapping acpi_btrtl_gpios[] = { 990 { "device-wake-gpios", &btrtl_device_wake_gpios, 1 }, 991 { "enable-gpios", &btrtl_enable_gpios, 1 }, 992 { "host-wake-gpios", &btrtl_host_wake_gpios, 1 }, 993 {}, 994 }; 995 996 static struct h5_vnd rtl_vnd = { 997 .setup = h5_btrtl_setup, 998 .open = h5_btrtl_open, 999 .close = h5_btrtl_close, 1000 .suspend = h5_btrtl_suspend, 1001 .resume = h5_btrtl_resume, 1002 .acpi_gpio_map = acpi_btrtl_gpios, 1003 }; 1004 #endif 1005 1006 #ifdef CONFIG_ACPI 1007 static const struct acpi_device_id h5_acpi_match[] = { 1008 #ifdef CONFIG_BT_HCIUART_RTL 1009 { "OBDA0623", (kernel_ulong_t)&rtl_vnd }, 1010 { "OBDA8723", (kernel_ulong_t)&rtl_vnd }, 1011 #endif 1012 { }, 1013 }; 1014 MODULE_DEVICE_TABLE(acpi, h5_acpi_match); 1015 #endif 1016 1017 static const struct dev_pm_ops h5_serdev_pm_ops = { 1018 SET_SYSTEM_SLEEP_PM_OPS(h5_serdev_suspend, h5_serdev_resume) 1019 }; 1020 1021 static const struct of_device_id rtl_bluetooth_of_match[] = { 1022 #ifdef CONFIG_BT_HCIUART_RTL 1023 { .compatible = "realtek,rtl8822cs-bt", 1024 .data = (const void *)&rtl_vnd }, 1025 { .compatible = "realtek,rtl8723bs-bt", 1026 .data = (const void *)&rtl_vnd }, 1027 { .compatible = "realtek,rtl8723ds-bt", 1028 .data = (const void *)&rtl_vnd }, 1029 #endif 1030 { }, 1031 }; 1032 MODULE_DEVICE_TABLE(of, rtl_bluetooth_of_match); 1033 1034 static struct serdev_device_driver h5_serdev_driver = { 1035 .probe = h5_serdev_probe, 1036 .remove = h5_serdev_remove, 1037 .driver = { 1038 .name = "hci_uart_h5", 1039 .acpi_match_table = ACPI_PTR(h5_acpi_match), 1040 .pm = &h5_serdev_pm_ops, 1041 .of_match_table = rtl_bluetooth_of_match, 1042 }, 1043 }; 1044 1045 int __init h5_init(void) 1046 { 1047 serdev_device_driver_register(&h5_serdev_driver); 1048 return hci_uart_register_proto(&h5p); 1049 } 1050 1051 int __exit h5_deinit(void) 1052 { 1053 serdev_device_driver_unregister(&h5_serdev_driver); 1054 return hci_uart_unregister_proto(&h5p); 1055 } 1056