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