btrtl.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Bluetooth support for Realtek devices
  4. *
  5. * Copyright (C) 2015 Endless Mobile, Inc.
  6. */
  7. #define RTL_FRAG_LEN 252
  8. #define rtl_dev_err(dev, fmt, ...) bt_dev_err(dev, "RTL: " fmt, ##__VA_ARGS__)
  9. #define rtl_dev_warn(dev, fmt, ...) bt_dev_warn(dev, "RTL: " fmt, ##__VA_ARGS__)
  10. #define rtl_dev_info(dev, fmt, ...) bt_dev_info(dev, "RTL: " fmt, ##__VA_ARGS__)
  11. #define rtl_dev_dbg(dev, fmt, ...) bt_dev_dbg(dev, "RTL: " fmt, ##__VA_ARGS__)
  12. struct btrtl_device_info;
  13. struct rtl_download_cmd {
  14. __u8 index;
  15. __u8 data[RTL_FRAG_LEN];
  16. } __packed;
  17. struct rtl_download_response {
  18. __u8 status;
  19. __u8 index;
  20. } __packed;
  21. struct rtl_rom_version_evt {
  22. __u8 status;
  23. __u8 version;
  24. } __packed;
  25. struct rtl_epatch_header {
  26. __u8 signature[8];
  27. __le32 fw_version;
  28. __le16 num_patches;
  29. } __packed;
  30. struct rtl_vendor_config_entry {
  31. __le16 offset;
  32. __u8 len;
  33. __u8 data[];
  34. } __packed;
  35. struct rtl_vendor_config {
  36. __le32 signature;
  37. __le16 total_len;
  38. struct rtl_vendor_config_entry entry[];
  39. } __packed;
  40. #if IS_ENABLED(CONFIG_BT_RTL)
  41. struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
  42. const char *postfix);
  43. void btrtl_free(struct btrtl_device_info *btrtl_dev);
  44. int btrtl_download_firmware(struct hci_dev *hdev,
  45. struct btrtl_device_info *btrtl_dev);
  46. int btrtl_setup_realtek(struct hci_dev *hdev);
  47. int btrtl_shutdown_realtek(struct hci_dev *hdev);
  48. int btrtl_get_uart_settings(struct hci_dev *hdev,
  49. struct btrtl_device_info *btrtl_dev,
  50. unsigned int *controller_baudrate,
  51. u32 *device_baudrate, bool *flow_control);
  52. #else
  53. static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
  54. const char *postfix)
  55. {
  56. return ERR_PTR(-EOPNOTSUPP);
  57. }
  58. static inline void btrtl_free(struct btrtl_device_info *btrtl_dev)
  59. {
  60. }
  61. static inline int btrtl_download_firmware(struct hci_dev *hdev,
  62. struct btrtl_device_info *btrtl_dev)
  63. {
  64. return -EOPNOTSUPP;
  65. }
  66. static inline int btrtl_setup_realtek(struct hci_dev *hdev)
  67. {
  68. return -EOPNOTSUPP;
  69. }
  70. static inline int btrtl_shutdown_realtek(struct hci_dev *hdev)
  71. {
  72. return -EOPNOTSUPP;
  73. }
  74. static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
  75. struct btrtl_device_info *btrtl_dev,
  76. unsigned int *controller_baudrate,
  77. u32 *device_baudrate,
  78. bool *flow_control)
  79. {
  80. return -ENOENT;
  81. }
  82. #endif