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 if (h5->vnd && h5->vnd->close) 249 h5->vnd->close(h5); 250 251 if (!hu->serdev) 252 kfree(h5); 253 254 return 0; 255 } 256 257 static int h5_setup(struct hci_uart *hu) 258 { 259 struct h5 *h5 = hu->priv; 260 261 if (h5->vnd && h5->vnd->setup) 262 return h5->vnd->setup(h5); 263 264 return 0; 265 } 266 267 static void h5_pkt_cull(struct h5 *h5) 268 { 269 struct sk_buff *skb, *tmp; 270 unsigned long flags; 271 int i, to_remove; 272 u8 seq; 273 274 spin_lock_irqsave(&h5->unack.lock, flags); 275 276 to_remove = skb_queue_len(&h5->unack); 277 if (to_remove == 0) 278 goto unlock; 279 280 seq = h5->tx_seq; 281 282 while (to_remove > 0) { 283 if (h5->rx_ack == seq) 284 break; 285 286 to_remove--; 287 seq = (seq - 1) & 0x07; 288 } 289 290 if (seq != h5->rx_ack) 291 BT_ERR("Controller acked invalid packet"); 292 293 i = 0; 294 skb_queue_walk_safe(&h5->unack, skb, tmp) { 295 if (i++ >= to_remove) 296 break; 297 298 __skb_unlink(skb, &h5->unack); 299 kfree_skb(skb); 300 } 301 302 if (skb_queue_empty(&h5->unack)) 303 del_timer(&h5->timer); 304 305 unlock: 306 spin_unlock_irqrestore(&h5->unack.lock, flags); 307 } 308 309 static void h5_handle_internal_rx(struct hci_uart *hu) 310 { 311 struct h5 *h5 = hu->priv; 312 const unsigned char sync_req[] = { 0x01, 0x7e }; 313 const unsigned char sync_rsp[] = { 0x02, 0x7d }; 314 unsigned char conf_req[3] = { 0x03, 0xfc }; 315 const unsigned char conf_rsp[] = { 0x04, 0x7b }; 316 const unsigned char wakeup_req[] = { 0x05, 0xfa }; 317 const unsigned char woken_req[] = { 0x06, 0xf9 }; 318 const unsigned char sleep_req[] = { 0x07, 0x78 }; 319 const unsigned char *hdr = h5->rx_skb->data; 320 const unsigned char *data = &h5->rx_skb->data[4]; 321 322 BT_DBG("%s", hu->hdev->name); 323 324 if (H5_HDR_PKT_TYPE(hdr) != HCI_3WIRE_LINK_PKT) 325 return; 326 327 if (H5_HDR_LEN(hdr) < 2) 328 return; 329 330 conf_req[2] = h5_cfg_field(h5); 331 332 if (memcmp(data, sync_req, 2) == 0) { 333 if (h5->state == H5_ACTIVE) 334 h5_peer_reset(hu); 335 h5_link_control(hu, sync_rsp, 2); 336 } else if (memcmp(data, sync_rsp, 2) == 0) { 337 if (h5->state == H5_ACTIVE) 338 h5_peer_reset(hu); 339 h5->state = H5_INITIALIZED; 340 h5_link_control(hu, conf_req, 3); 341 } else if (memcmp(data, conf_req, 2) == 0) { 342 h5_link_control(hu, conf_rsp, 2); 343 h5_link_control(hu, conf_req, 3); 344 } else if (memcmp(data, conf_rsp, 2) == 0) { 345 if (H5_HDR_LEN(hdr) > 2) 346 h5->tx_win = (data[2] & 0x07); 347 BT_DBG("Three-wire init complete. tx_win %u", h5->tx_win); 348 h5->state = H5_ACTIVE; 349 hci_uart_init_ready(hu); 350 return; 351 } else if (memcmp(data, sleep_req, 2) == 0) { 352 BT_DBG("Peer went to sleep"); 353 h5->sleep = H5_SLEEPING; 354 return; 355 } else if (memcmp(data, woken_req, 2) == 0) { 356 BT_DBG("Peer woke up"); 357 h5->sleep = H5_AWAKE; 358 } else if (memcmp(data, wakeup_req, 2) == 0) { 359 BT_DBG("Peer requested wakeup"); 360 h5_link_control(hu, woken_req, 2); 361 h5->sleep = H5_AWAKE; 362 } else { 363 BT_DBG("Link Control: 0x%02hhx 0x%02hhx", data[0], data[1]); 364 return; 365 } 366 367 hci_uart_tx_wakeup(hu); 368 } 369 370 static void h5_complete_rx_pkt(struct hci_uart *hu) 371 { 372 struct h5 *h5 = hu->priv; 373 const unsigned char *hdr = h5->rx_skb->data; 374 375 if (H5_HDR_RELIABLE(hdr)) { 376 h5->tx_ack = (h5->tx_ack + 1) % 8; 377 set_bit(H5_TX_ACK_REQ, &h5->flags); 378 hci_uart_tx_wakeup(hu); 379 } 380 381 h5->rx_ack = H5_HDR_ACK(hdr); 382 383 h5_pkt_cull(h5); 384 385 switch (H5_HDR_PKT_TYPE(hdr)) { 386 case HCI_EVENT_PKT: 387 case HCI_ACLDATA_PKT: 388 case HCI_SCODATA_PKT: 389 case HCI_ISODATA_PKT: 390 hci_skb_pkt_type(h5->rx_skb) = H5_HDR_PKT_TYPE(hdr); 391 392 /* Remove Three-wire header */ 393 skb_pull(h5->rx_skb, 4); 394 395 hci_recv_frame(hu->hdev, h5->rx_skb); 396 h5->rx_skb = NULL; 397 398 break; 399 400 default: 401 h5_handle_internal_rx(hu); 402 break; 403 } 404 405 h5_reset_rx(h5); 406 } 407 408 static int h5_rx_crc(struct hci_uart *hu, unsigned char c) 409 { 410 h5_complete_rx_pkt(hu); 411 412 return 0; 413 } 414 415 static int h5_rx_payload(struct hci_uart *hu, unsigned char c) 416 { 417 struct h5 *h5 = hu->priv; 418 const unsigned char *hdr = h5->rx_skb->data; 419 420 if (H5_HDR_CRC(hdr)) { 421 h5->rx_func = h5_rx_crc; 422 h5->rx_pending = 2; 423 } else { 424 h5_complete_rx_pkt(hu); 425 } 426 427 return 0; 428 } 429 430 static int h5_rx_3wire_hdr(struct hci_uart *hu, unsigned char c) 431 { 432 struct h5 *h5 = hu->priv; 433 const unsigned char *hdr = h5->rx_skb->data; 434 435 BT_DBG("%s rx: seq %u ack %u crc %u rel %u type %u len %u", 436 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr), 437 H5_HDR_CRC(hdr), H5_HDR_RELIABLE(hdr), H5_HDR_PKT_TYPE(hdr), 438 H5_HDR_LEN(hdr)); 439 440 if (((hdr[0] + hdr[1] + hdr[2] + hdr[3]) & 0xff) != 0xff) { 441 bt_dev_err(hu->hdev, "Invalid header checksum"); 442 h5_reset_rx(h5); 443 return 0; 444 } 445 446 if (H5_HDR_RELIABLE(hdr) && H5_HDR_SEQ(hdr) != h5->tx_ack) { 447 bt_dev_err(hu->hdev, "Out-of-order packet arrived (%u != %u)", 448 H5_HDR_SEQ(hdr), h5->tx_ack); 449 h5_reset_rx(h5); 450 return 0; 451 } 452 453 if (h5->state != H5_ACTIVE && 454 H5_HDR_PKT_TYPE(hdr) != HCI_3WIRE_LINK_PKT) { 455 bt_dev_err(hu->hdev, "Non-link packet received in non-active state"); 456 h5_reset_rx(h5); 457 return 0; 458 } 459 460 h5->rx_func = h5_rx_payload; 461 h5->rx_pending = H5_HDR_LEN(hdr); 462 463 return 0; 464 } 465 466 static int h5_rx_pkt_start(struct hci_uart *hu, unsigned char c) 467 { 468 struct h5 *h5 = hu->priv; 469 470 if (c == SLIP_DELIMITER) 471 return 1; 472 473 h5->rx_func = h5_rx_3wire_hdr; 474 h5->rx_pending = 4; 475 476 h5->rx_skb = bt_skb_alloc(H5_MAX_LEN, GFP_ATOMIC); 477 if (!h5->rx_skb) { 478 bt_dev_err(hu->hdev, "Can't allocate mem for new packet"); 479 h5_reset_rx(h5); 480 return -ENOMEM; 481 } 482 483 h5->rx_skb->dev = (void *)hu->hdev; 484 485 return 0; 486 } 487 488 static int h5_rx_delimiter(struct hci_uart *hu, unsigned char c) 489 { 490 struct h5 *h5 = hu->priv; 491 492 if (c == SLIP_DELIMITER) 493 h5->rx_func = h5_rx_pkt_start; 494 495 return 1; 496 } 497 498 static void h5_unslip_one_byte(struct h5 *h5, unsigned char c) 499 { 500 const u8 delim = SLIP_DELIMITER, esc = SLIP_ESC; 501 const u8 *byte = &c; 502 503 if (!test_bit(H5_RX_ESC, &h5->flags) && c == SLIP_ESC) { 504 set_bit(H5_RX_ESC, &h5->flags); 505 return; 506 } 507 508 if (test_and_clear_bit(H5_RX_ESC, &h5->flags)) { 509 switch (c) { 510 case SLIP_ESC_DELIM: 511 byte = &delim; 512 break; 513 case SLIP_ESC_ESC: 514 byte = &esc; 515 break; 516 default: 517 BT_ERR("Invalid esc byte 0x%02hhx", c); 518 h5_reset_rx(h5); 519 return; 520 } 521 } 522 523 skb_put_data(h5->rx_skb, byte, 1); 524 h5->rx_pending--; 525 526 BT_DBG("unslipped 0x%02hhx, rx_pending %zu", *byte, h5->rx_pending); 527 } 528 529 static void h5_reset_rx(struct h5 *h5) 530 { 531 if (h5->rx_skb) { 532 kfree_skb(h5->rx_skb); 533 h5->rx_skb = NULL; 534 } 535 536 h5->rx_func = h5_rx_delimiter; 537 h5->rx_pending = 0; 538 clear_bit(H5_RX_ESC, &h5->flags); 539 } 540 541 static int h5_recv(struct hci_uart *hu, const void *data, int count) 542 { 543 struct h5 *h5 = hu->priv; 544 const unsigned char *ptr = data; 545 546 BT_DBG("%s pending %zu count %d", hu->hdev->name, h5->rx_pending, 547 count); 548 549 while (count > 0) { 550 int processed; 551 552 if (h5->rx_pending > 0) { 553 if (*ptr == SLIP_DELIMITER) { 554 bt_dev_err(hu->hdev, "Too short H5 packet"); 555 h5_reset_rx(h5); 556 continue; 557 } 558 559 h5_unslip_one_byte(h5, *ptr); 560 561 ptr++; count--; 562 continue; 563 } 564 565 processed = h5->rx_func(hu, *ptr); 566 if (processed < 0) 567 return processed; 568 569 ptr += processed; 570 count -= processed; 571 } 572 573 return 0; 574 } 575 576 static int h5_enqueue(struct hci_uart *hu, struct sk_buff *skb) 577 { 578 struct h5 *h5 = hu->priv; 579 580 if (skb->len > 0xfff) { 581 bt_dev_err(hu->hdev, "Packet too long (%u bytes)", skb->len); 582 kfree_skb(skb); 583 return 0; 584 } 585 586 if (h5->state != H5_ACTIVE) { 587 bt_dev_err(hu->hdev, "Ignoring HCI data in non-active state"); 588 kfree_skb(skb); 589 return 0; 590 } 591 592 switch (hci_skb_pkt_type(skb)) { 593 case HCI_ACLDATA_PKT: 594 case HCI_COMMAND_PKT: 595 skb_queue_tail(&h5->rel, skb); 596 break; 597 598 case HCI_SCODATA_PKT: 599 case HCI_ISODATA_PKT: 600 skb_queue_tail(&h5->unrel, skb); 601 break; 602 603 default: 604 bt_dev_err(hu->hdev, "Unknown packet type %u", hci_skb_pkt_type(skb)); 605 kfree_skb(skb); 606 break; 607 } 608 609 return 0; 610 } 611 612 static void h5_slip_delim(struct sk_buff *skb) 613 { 614 const char delim = SLIP_DELIMITER; 615 616 skb_put_data(skb, &delim, 1); 617 } 618 619 static void h5_slip_one_byte(struct sk_buff *skb, u8 c) 620 { 621 const char esc_delim[2] = { SLIP_ESC, SLIP_ESC_DELIM }; 622 const char esc_esc[2] = { SLIP_ESC, SLIP_ESC_ESC }; 623 624 switch (c) { 625 case SLIP_DELIMITER: 626 skb_put_data(skb, &esc_delim, 2); 627 break; 628 case SLIP_ESC: 629 skb_put_data(skb, &esc_esc, 2); 630 break; 631 default: 632 skb_put_data(skb, &c, 1); 633 } 634 } 635 636 static bool valid_packet_type(u8 type) 637 { 638 switch (type) { 639 case HCI_ACLDATA_PKT: 640 case HCI_COMMAND_PKT: 641 case HCI_SCODATA_PKT: 642 case HCI_ISODATA_PKT: 643 case HCI_3WIRE_LINK_PKT: 644 case HCI_3WIRE_ACK_PKT: 645 return true; 646 default: 647 return false; 648 } 649 } 650 651 static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type, 652 const u8 *data, size_t len) 653 { 654 struct h5 *h5 = hu->priv; 655 struct sk_buff *nskb; 656 u8 hdr[4]; 657 int i; 658 659 if (!valid_packet_type(pkt_type)) { 660 bt_dev_err(hu->hdev, "Unknown packet type %u", pkt_type); 661 return NULL; 662 } 663 664 /* 665 * Max len of packet: (original len + 4 (H5 hdr) + 2 (crc)) * 2 666 * (because bytes 0xc0 and 0xdb are escaped, worst case is when 667 * the packet is all made of 0xc0 and 0xdb) + 2 (0xc0 668 * delimiters at start and end). 669 */ 670 nskb = alloc_skb((len + 6) * 2 + 2, GFP_ATOMIC); 671 if (!nskb) 672 return NULL; 673 674 hci_skb_pkt_type(nskb) = pkt_type; 675 676 h5_slip_delim(nskb); 677 678 hdr[0] = h5->tx_ack << 3; 679 clear_bit(H5_TX_ACK_REQ, &h5->flags); 680 681 /* Reliable packet? */ 682 if (pkt_type == HCI_ACLDATA_PKT || pkt_type == HCI_COMMAND_PKT) { 683 hdr[0] |= 1 << 7; 684 hdr[0] |= h5->tx_seq; 685 h5->tx_seq = (h5->tx_seq + 1) % 8; 686 } 687 688 hdr[1] = pkt_type | ((len & 0x0f) << 4); 689 hdr[2] = len >> 4; 690 hdr[3] = ~((hdr[0] + hdr[1] + hdr[2]) & 0xff); 691 692 BT_DBG("%s tx: seq %u ack %u crc %u rel %u type %u len %u", 693 hu->hdev->name, H5_HDR_SEQ(hdr), H5_HDR_ACK(hdr), 694 H5_HDR_CRC(hdr), H5_HDR_RELIABLE(hdr), H5_HDR_PKT_TYPE(hdr), 695 H5_HDR_LEN(hdr)); 696 697 for (i = 0; i < 4; i++) 698 h5_slip_one_byte(nskb, hdr[i]); 699 700 for (i = 0; i < len; i++) 701 h5_slip_one_byte(nskb, data[i]); 702 703 h5_slip_delim(nskb); 704 705 return nskb; 706 } 707 708 static struct sk_buff *h5_dequeue(struct hci_uart *hu) 709 { 710 struct h5 *h5 = hu->priv; 711 unsigned long flags; 712 struct sk_buff *skb, *nskb; 713 714 if (h5->sleep != H5_AWAKE) { 715 const unsigned char wakeup_req[] = { 0x05, 0xfa }; 716 717 if (h5->sleep == H5_WAKING_UP) 718 return NULL; 719 720 h5->sleep = H5_WAKING_UP; 721 BT_DBG("Sending wakeup request"); 722 723 mod_timer(&h5->timer, jiffies + HZ / 100); 724 return h5_prepare_pkt(hu, HCI_3WIRE_LINK_PKT, wakeup_req, 2); 725 } 726 727 skb = skb_dequeue(&h5->unrel); 728 if (skb) { 729 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb), 730 skb->data, skb->len); 731 if (nskb) { 732 kfree_skb(skb); 733 return nskb; 734 } 735 736 skb_queue_head(&h5->unrel, skb); 737 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed"); 738 } 739 740 spin_lock_irqsave_nested(&h5->unack.lock, flags, SINGLE_DEPTH_NESTING); 741 742 if (h5->unack.qlen >= h5->tx_win) 743 goto unlock; 744 745 skb = skb_dequeue(&h5->rel); 746 if (skb) { 747 nskb = h5_prepare_pkt(hu, hci_skb_pkt_type(skb), 748 skb->data, skb->len); 749 if (nskb) { 750 __skb_queue_tail(&h5->unack, skb); 751 mod_timer(&h5->timer, jiffies + H5_ACK_TIMEOUT); 752 spin_unlock_irqrestore(&h5->unack.lock, flags); 753 return nskb; 754 } 755 756 skb_queue_head(&h5->rel, skb); 757 bt_dev_err(hu->hdev, "Could not dequeue pkt because alloc_skb failed"); 758 } 759 760 unlock: 761 spin_unlock_irqrestore(&h5->unack.lock, flags); 762 763 if (test_bit(H5_TX_ACK_REQ, &h5->flags)) 764 return h5_prepare_pkt(hu, HCI_3WIRE_ACK_PKT, NULL, 0); 765 766 return NULL; 767 } 768 769 static int h5_flush(struct hci_uart *hu) 770 { 771 BT_DBG("hu %p", hu); 772 return 0; 773 } 774 775 static const struct hci_uart_proto h5p = { 776 .id = HCI_UART_3WIRE, 777 .name = "Three-wire (H5)", 778 .open = h5_open, 779 .close = h5_close, 780 .setup = h5_setup, 781 .recv = h5_recv, 782 .enqueue = h5_enqueue, 783 .dequeue = h5_dequeue, 784 .flush = h5_flush, 785 }; 786 787 static int h5_serdev_probe(struct serdev_device *serdev) 788 { 789 struct device *dev = &serdev->dev; 790 struct h5 *h5; 791 792 h5 = devm_kzalloc(dev, sizeof(*h5), GFP_KERNEL); 793 if (!h5) 794 return -ENOMEM; 795 796 h5->hu = &h5->serdev_hu; 797 h5->serdev_hu.serdev = serdev; 798 serdev_device_set_drvdata(serdev, h5); 799 800 if (has_acpi_companion(dev)) { 801 const struct acpi_device_id *match; 802 803 match = acpi_match_device(dev->driver->acpi_match_table, dev); 804 if (!match) 805 return -ENODEV; 806 807 h5->vnd = (const struct h5_vnd *)match->driver_data; 808 h5->id = (char *)match->id; 809 810 if (h5->vnd->acpi_gpio_map) 811 devm_acpi_dev_add_driver_gpios(dev, 812 h5->vnd->acpi_gpio_map); 813 } else { 814 const void *data; 815 816 data = of_device_get_match_data(dev); 817 if (!data) 818 return -ENODEV; 819 820 h5->vnd = (const struct h5_vnd *)data; 821 } 822 823 824 h5->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW); 825 if (IS_ERR(h5->enable_gpio)) 826 return PTR_ERR(h5->enable_gpio); 827 828 h5->device_wake_gpio = devm_gpiod_get_optional(dev, "device-wake", 829 GPIOD_OUT_LOW); 830 if (IS_ERR(h5->device_wake_gpio)) 831 return PTR_ERR(h5->device_wake_gpio); 832 833 return hci_uart_register_device(&h5->serdev_hu, &h5p); 834 } 835 836 static void h5_serdev_remove(struct serdev_device *serdev) 837 { 838 struct h5 *h5 = serdev_device_get_drvdata(serdev); 839 840 hci_uart_unregister_device(&h5->serdev_hu); 841 } 842 843 static int __maybe_unused h5_serdev_suspend(struct device *dev) 844 { 845 struct h5 *h5 = dev_get_drvdata(dev); 846 int ret = 0; 847 848 if (h5->vnd && h5->vnd->suspend) 849 ret = h5->vnd->suspend(h5); 850 851 return ret; 852 } 853 854 static int __maybe_unused h5_serdev_resume(struct device *dev) 855 { 856 struct h5 *h5 = dev_get_drvdata(dev); 857 int ret = 0; 858 859 if (h5->vnd && h5->vnd->resume) 860 ret = h5->vnd->resume(h5); 861 862 return ret; 863 } 864 865 #ifdef CONFIG_BT_HCIUART_RTL 866 static int h5_btrtl_setup(struct h5 *h5) 867 { 868 struct btrtl_device_info *btrtl_dev; 869 struct sk_buff *skb; 870 __le32 baudrate_data; 871 u32 device_baudrate; 872 unsigned int controller_baudrate; 873 bool flow_control; 874 int err; 875 876 btrtl_dev = btrtl_initialize(h5->hu->hdev, h5->id); 877 if (IS_ERR(btrtl_dev)) 878 return PTR_ERR(btrtl_dev); 879 880 err = btrtl_get_uart_settings(h5->hu->hdev, btrtl_dev, 881 &controller_baudrate, &device_baudrate, 882 &flow_control); 883 if (err) 884 goto out_free; 885 886 baudrate_data = cpu_to_le32(device_baudrate); 887 skb = __hci_cmd_sync(h5->hu->hdev, 0xfc17, sizeof(baudrate_data), 888 &baudrate_data, HCI_INIT_TIMEOUT); 889 if (IS_ERR(skb)) { 890 rtl_dev_err(h5->hu->hdev, "set baud rate command failed\n"); 891 err = PTR_ERR(skb); 892 goto out_free; 893 } else { 894 kfree_skb(skb); 895 } 896 /* Give the device some time to set up the new baudrate. */ 897 usleep_range(10000, 20000); 898 899 serdev_device_set_baudrate(h5->hu->serdev, controller_baudrate); 900 serdev_device_set_flow_control(h5->hu->serdev, flow_control); 901 902 err = btrtl_download_firmware(h5->hu->hdev, btrtl_dev); 903 /* Give the device some time before the hci-core sends it a reset */ 904 usleep_range(10000, 20000); 905 906 out_free: 907 btrtl_free(btrtl_dev); 908 909 return err; 910 } 911 912 static void h5_btrtl_open(struct h5 *h5) 913 { 914 /* Devices always start with these fixed parameters */ 915 serdev_device_set_flow_control(h5->hu->serdev, false); 916 serdev_device_set_parity(h5->hu->serdev, SERDEV_PARITY_EVEN); 917 serdev_device_set_baudrate(h5->hu->serdev, 115200); 918 919 /* The controller needs up to 500ms to wakeup */ 920 gpiod_set_value_cansleep(h5->enable_gpio, 1); 921 gpiod_set_value_cansleep(h5->device_wake_gpio, 1); 922 msleep(500); 923 } 924 925 static void h5_btrtl_close(struct h5 *h5) 926 { 927 gpiod_set_value_cansleep(h5->device_wake_gpio, 0); 928 gpiod_set_value_cansleep(h5->enable_gpio, 0); 929 } 930 931 /* Suspend/resume support. On many devices the RTL BT device loses power during 932 * suspend/resume, causing it to lose its firmware and all state. So we simply 933 * turn it off on suspend and reprobe on resume. This mirrors how RTL devices 934 * are handled in the USB driver, where the USB_QUIRK_RESET_RESUME is used which 935 * also causes a reprobe on resume. 936 */ 937 static int h5_btrtl_suspend(struct h5 *h5) 938 { 939 serdev_device_set_flow_control(h5->hu->serdev, false); 940 gpiod_set_value_cansleep(h5->device_wake_gpio, 0); 941 gpiod_set_value_cansleep(h5->enable_gpio, 0); 942 return 0; 943 } 944 945 struct h5_btrtl_reprobe { 946 struct device *dev; 947 struct work_struct work; 948 }; 949 950 static void h5_btrtl_reprobe_worker(struct work_struct *work) 951 { 952 struct h5_btrtl_reprobe *reprobe = 953 container_of(work, struct h5_btrtl_reprobe, work); 954 int ret; 955 956 ret = device_reprobe(reprobe->dev); 957 if (ret && ret != -EPROBE_DEFER) 958 dev_err(reprobe->dev, "Reprobe error %d\n", ret); 959 960 put_device(reprobe->dev); 961 kfree(reprobe); 962 module_put(THIS_MODULE); 963 } 964 965 static int h5_btrtl_resume(struct h5 *h5) 966 { 967 struct h5_btrtl_reprobe *reprobe; 968 969 reprobe = kzalloc(sizeof(*reprobe), GFP_KERNEL); 970 if (!reprobe) 971 return -ENOMEM; 972 973 __module_get(THIS_MODULE); 974 975 INIT_WORK(&reprobe->work, h5_btrtl_reprobe_worker); 976 reprobe->dev = get_device(&h5->hu->serdev->dev); 977 queue_work(system_long_wq, &reprobe->work); 978 return 0; 979 } 980 981 static const struct acpi_gpio_params btrtl_device_wake_gpios = { 0, 0, false }; 982 static const struct acpi_gpio_params btrtl_enable_gpios = { 1, 0, false }; 983 static const struct acpi_gpio_params btrtl_host_wake_gpios = { 2, 0, false }; 984 static const struct acpi_gpio_mapping acpi_btrtl_gpios[] = { 985 { "device-wake-gpios", &btrtl_device_wake_gpios, 1 }, 986 { "enable-gpios", &btrtl_enable_gpios, 1 }, 987 { "host-wake-gpios", &btrtl_host_wake_gpios, 1 }, 988 {}, 989 }; 990 991 static struct h5_vnd rtl_vnd = { 992 .setup = h5_btrtl_setup, 993 .open = h5_btrtl_open, 994 .close = h5_btrtl_close, 995 .suspend = h5_btrtl_suspend, 996 .resume = h5_btrtl_resume, 997 .acpi_gpio_map = acpi_btrtl_gpios, 998 }; 999 #endif 1000 1001 #ifdef CONFIG_ACPI 1002 static const struct acpi_device_id h5_acpi_match[] = { 1003 #ifdef CONFIG_BT_HCIUART_RTL 1004 { "OBDA8723", (kernel_ulong_t)&rtl_vnd }, 1005 #endif 1006 { }, 1007 }; 1008 MODULE_DEVICE_TABLE(acpi, h5_acpi_match); 1009 #endif 1010 1011 static const struct dev_pm_ops h5_serdev_pm_ops = { 1012 SET_SYSTEM_SLEEP_PM_OPS(h5_serdev_suspend, h5_serdev_resume) 1013 }; 1014 1015 static const struct of_device_id rtl_bluetooth_of_match[] = { 1016 #ifdef CONFIG_BT_HCIUART_RTL 1017 { .compatible = "realtek,rtl8822cs-bt", 1018 .data = (const void *)&rtl_vnd }, 1019 { .compatible = "realtek,rtl8723bs-bt", 1020 .data = (const void *)&rtl_vnd }, 1021 #endif 1022 { }, 1023 }; 1024 MODULE_DEVICE_TABLE(of, rtl_bluetooth_of_match); 1025 1026 static struct serdev_device_driver h5_serdev_driver = { 1027 .probe = h5_serdev_probe, 1028 .remove = h5_serdev_remove, 1029 .driver = { 1030 .name = "hci_uart_h5", 1031 .acpi_match_table = ACPI_PTR(h5_acpi_match), 1032 .pm = &h5_serdev_pm_ops, 1033 .of_match_table = rtl_bluetooth_of_match, 1034 }, 1035 }; 1036 1037 int __init h5_init(void) 1038 { 1039 serdev_device_driver_register(&h5_serdev_driver); 1040 return hci_uart_register_proto(&h5p); 1041 } 1042 1043 int __exit h5_deinit(void) 1044 { 1045 serdev_device_driver_unregister(&h5_serdev_driver); 1046 return hci_uart_unregister_proto(&h5p); 1047 } 1048