btrtl.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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_chip_type_evt {
  14. __u8 status;
  15. __u8 type;
  16. } __packed;
  17. struct rtl_download_cmd {
  18. __u8 index;
  19. __u8 data[RTL_FRAG_LEN];
  20. } __packed;
  21. struct rtl_download_response {
  22. __u8 status;
  23. __u8 index;
  24. } __packed;
  25. struct rtl_rom_version_evt {
  26. __u8 status;
  27. __u8 version;
  28. } __packed;
  29. struct rtl_epatch_header {
  30. __u8 signature[8];
  31. __le32 fw_version;
  32. __le16 num_patches;
  33. } __packed;
  34. struct rtl_vendor_config_entry {
  35. __le16 offset;
  36. __u8 len;
  37. __u8 data[];
  38. } __packed;
  39. struct rtl_vendor_config {
  40. __le32 signature;
  41. __le16 total_len;
  42. struct rtl_vendor_config_entry entry[];
  43. } __packed;
  44. #if IS_ENABLED(CONFIG_BT_RTL)
  45. struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
  46. const char *postfix);
  47. void btrtl_free(struct btrtl_device_info *btrtl_dev);
  48. int btrtl_download_firmware(struct hci_dev *hdev,
  49. struct btrtl_device_info *btrtl_dev);
  50. void btrtl_set_quirks(struct hci_dev *hdev,
  51. struct btrtl_device_info *btrtl_dev);
  52. int btrtl_setup_realtek(struct hci_dev *hdev);
  53. int btrtl_shutdown_realtek(struct hci_dev *hdev);
  54. int btrtl_get_uart_settings(struct hci_dev *hdev,
  55. struct btrtl_device_info *btrtl_dev,
  56. unsigned int *controller_baudrate,
  57. u32 *device_baudrate, bool *flow_control);
  58. #else
  59. static inline struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
  60. const char *postfix)
  61. {
  62. return ERR_PTR(-EOPNOTSUPP);
  63. }
  64. static inline void btrtl_free(struct btrtl_device_info *btrtl_dev)
  65. {
  66. }
  67. static inline int btrtl_download_firmware(struct hci_dev *hdev,
  68. struct btrtl_device_info *btrtl_dev)
  69. {
  70. return -EOPNOTSUPP;
  71. }
  72. static inline void btrtl_set_quirks(struct hci_dev *hdev,
  73. struct btrtl_device_info *btrtl_dev)
  74. {
  75. }
  76. static inline int btrtl_setup_realtek(struct hci_dev *hdev)
  77. {
  78. return -EOPNOTSUPP;
  79. }
  80. static inline int btrtl_shutdown_realtek(struct hci_dev *hdev)
  81. {
  82. return -EOPNOTSUPP;
  83. }
  84. static inline int btrtl_get_uart_settings(struct hci_dev *hdev,
  85. struct btrtl_device_info *btrtl_dev,
  86. unsigned int *controller_baudrate,
  87. u32 *device_baudrate,
  88. bool *flow_control)
  89. {
  90. return -ENOENT;
  91. }
  92. #endif