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