1 /* SPDX-License-Identifier: ISC */
2 /* Copyright (C) 2021 MediaTek Inc. */
4 #define FIRMWARE_MT7622 "/*(DEBLOBBED)*/"
5 #define FIRMWARE_MT7663 "/*(DEBLOBBED)*/"
6 #define FIRMWARE_MT7668 "/*(DEBLOBBED)*/"
7 #define FIRMWARE_MT7922 "/*(DEBLOBBED)*/"
8 #define FIRMWARE_MT7961 "/*(DEBLOBBED)*/"
9 #define FIRMWARE_MT7925 "/*(DEBLOBBED)*/"
11 #define HCI_EV_WMT 0xe4
12 #define HCI_WMT_MAX_EVENT_SIZE 64
14 #define BTMTK_WMT_REG_WRITE 0x1
15 #define BTMTK_WMT_REG_READ 0x2
17 #define MT7921_BTSYS_RST 0x70002610
18 #define MT7921_BTSYS_RST_WITH_GPIO BIT(7)
20 #define MT7921_PINMUX_0 0x70005050
21 #define MT7921_PINMUX_1 0x70005054
23 #define MT7921_DLSTATUS 0x7c053c10
24 #define BT_DL_STATE BIT(1)
26 #define MTK_COREDUMP_SIZE (1024 * 1000)
27 #define MTK_COREDUMP_END "coredump end"
28 #define MTK_COREDUMP_END_LEN (sizeof(MTK_COREDUMP_END))
29 #define MTK_COREDUMP_NUM 255
32 BTMTK_WMT_PATCH_DWNLD = 0x1,
34 BTMTK_WMT_WAKEUP = 0x3,
36 BTMTK_WMT_FUNC_CTRL = 0x6,
38 BTMTK_WMT_REGISTER = 0x8,
39 BTMTK_WMT_SEMAPHORE = 0x17,
44 BTMTK_WMT_PATCH_UNDONE,
45 BTMTK_WMT_PATCH_PROGRESS,
49 BTMTK_WMT_ON_PROGRESS,
52 struct btmtk_wmt_hdr {
59 struct btmtk_hci_wmt_cmd {
60 struct btmtk_wmt_hdr hdr;
64 struct btmtk_hci_wmt_evt {
65 struct hci_event_hdr hhdr;
66 struct btmtk_wmt_hdr whdr;
69 struct btmtk_hci_wmt_evt_funcc {
70 struct btmtk_hci_wmt_evt hwhdr;
74 struct btmtk_hci_wmt_evt_reg {
75 struct btmtk_hci_wmt_evt hwhdr;
82 struct btmtk_tci_sleep {
100 u8 transmit_format_config;
101 u8 channel_format_config;
102 u8 channel_select_config;
105 struct reg_read_cmd {
112 struct reg_write_cmd {
121 struct btmtk_hci_wmt_params {
129 typedef int (*btmtk_reset_sync_func_t)(struct hci_dev *, void *);
131 struct btmtk_coredump_info {
132 const char *driver_name;
138 struct btmediatek_data {
140 btmtk_reset_sync_func_t reset_sync;
141 struct btmtk_coredump_info cd_info;
144 typedef int (*wmt_cmd_sync_func_t)(struct hci_dev *,
145 struct btmtk_hci_wmt_params *);
147 #if IS_ENABLED(CONFIG_BT_MTK)
149 int btmtk_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
151 int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
152 wmt_cmd_sync_func_t wmt_cmd_sync);
154 int btmtk_setup_firmware(struct hci_dev *hdev, const char *fwname,
155 wmt_cmd_sync_func_t wmt_cmd_sync);
157 void btmtk_reset_sync(struct hci_dev *hdev);
159 int btmtk_register_coredump(struct hci_dev *hdev, const char *name,
162 int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb);
165 static inline int btmtk_set_bdaddr(struct hci_dev *hdev,
166 const bdaddr_t *bdaddr)
171 static int btmtk_setup_firmware_79xx(struct hci_dev *hdev, const char *fwname,
172 wmt_cmd_sync_func_t wmt_cmd_sync)
177 static int btmtk_setup_firmware(struct hci_dev *hdev, const char *fwname,
178 wmt_cmd_sync_func_t wmt_cmd_sync)
183 static void btmtk_reset_sync(struct hci_dev *hdev)
187 static int btmtk_register_coredump(struct hci_dev *hdev, const char *name,
193 static int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb)