1e3037485SYan-Hsuan Chuang /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2e3037485SYan-Hsuan Chuang /* Copyright(c) 2018-2019 Realtek Corporation
3e3037485SYan-Hsuan Chuang */
4e3037485SYan-Hsuan Chuang
5e3037485SYan-Hsuan Chuang #ifndef __RTW_HCI_H__
6e3037485SYan-Hsuan Chuang #define __RTW_HCI_H__
7e3037485SYan-Hsuan Chuang
8e3037485SYan-Hsuan Chuang /* ops for PCI, USB and SDIO */
9e3037485SYan-Hsuan Chuang struct rtw_hci_ops {
10aaab5d0eSYan-Hsuan Chuang int (*tx_write)(struct rtw_dev *rtwdev,
11e3037485SYan-Hsuan Chuang struct rtw_tx_pkt_info *pkt_info,
12e3037485SYan-Hsuan Chuang struct sk_buff *skb);
13aaab5d0eSYan-Hsuan Chuang void (*tx_kick_off)(struct rtw_dev *rtwdev);
147b33ec8bSZong-Zhe Yang void (*flush_queues)(struct rtw_dev *rtwdev, u32 queues, bool drop);
15e3037485SYan-Hsuan Chuang int (*setup)(struct rtw_dev *rtwdev);
16e3037485SYan-Hsuan Chuang int (*start)(struct rtw_dev *rtwdev);
17e3037485SYan-Hsuan Chuang void (*stop)(struct rtw_dev *rtwdev);
1827e117e4SYan-Hsuan Chuang void (*deep_ps)(struct rtw_dev *rtwdev, bool enter);
193dff7c6eSYan-Hsuan Chuang void (*link_ps)(struct rtw_dev *rtwdev, bool enter);
2078622104SYan-Hsuan Chuang void (*interface_cfg)(struct rtw_dev *rtwdev);
21002a5db9SBitterblue Smith void (*dynamic_rx_agg)(struct rtw_dev *rtwdev, bool enable);
22*80fe0bc1SBitterblue Smith void (*write_firmware_page)(struct rtw_dev *rtwdev, u32 page,
23*80fe0bc1SBitterblue Smith const u8 *data, u32 size);
24e3037485SYan-Hsuan Chuang
25e3037485SYan-Hsuan Chuang int (*write_data_rsvd_page)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
26e3037485SYan-Hsuan Chuang int (*write_data_h2c)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
27e3037485SYan-Hsuan Chuang
28e3037485SYan-Hsuan Chuang u8 (*read8)(struct rtw_dev *rtwdev, u32 addr);
29e3037485SYan-Hsuan Chuang u16 (*read16)(struct rtw_dev *rtwdev, u32 addr);
30e3037485SYan-Hsuan Chuang u32 (*read32)(struct rtw_dev *rtwdev, u32 addr);
31e3037485SYan-Hsuan Chuang void (*write8)(struct rtw_dev *rtwdev, u32 addr, u8 val);
32e3037485SYan-Hsuan Chuang void (*write16)(struct rtw_dev *rtwdev, u32 addr, u16 val);
33e3037485SYan-Hsuan Chuang void (*write32)(struct rtw_dev *rtwdev, u32 addr, u32 val);
34e3037485SYan-Hsuan Chuang };
35e3037485SYan-Hsuan Chuang
rtw_hci_tx_write(struct rtw_dev * rtwdev,struct rtw_tx_pkt_info * pkt_info,struct sk_buff * skb)36aaab5d0eSYan-Hsuan Chuang static inline int rtw_hci_tx_write(struct rtw_dev *rtwdev,
37e3037485SYan-Hsuan Chuang struct rtw_tx_pkt_info *pkt_info,
38e3037485SYan-Hsuan Chuang struct sk_buff *skb)
39e3037485SYan-Hsuan Chuang {
40aaab5d0eSYan-Hsuan Chuang return rtwdev->hci.ops->tx_write(rtwdev, pkt_info, skb);
41aaab5d0eSYan-Hsuan Chuang }
42aaab5d0eSYan-Hsuan Chuang
rtw_hci_tx_kick_off(struct rtw_dev * rtwdev)43aaab5d0eSYan-Hsuan Chuang static inline void rtw_hci_tx_kick_off(struct rtw_dev *rtwdev)
44aaab5d0eSYan-Hsuan Chuang {
45aaab5d0eSYan-Hsuan Chuang return rtwdev->hci.ops->tx_kick_off(rtwdev);
46e3037485SYan-Hsuan Chuang }
47e3037485SYan-Hsuan Chuang
rtw_hci_setup(struct rtw_dev * rtwdev)48e3037485SYan-Hsuan Chuang static inline int rtw_hci_setup(struct rtw_dev *rtwdev)
49e3037485SYan-Hsuan Chuang {
50e3037485SYan-Hsuan Chuang return rtwdev->hci.ops->setup(rtwdev);
51e3037485SYan-Hsuan Chuang }
52e3037485SYan-Hsuan Chuang
rtw_hci_start(struct rtw_dev * rtwdev)53e3037485SYan-Hsuan Chuang static inline int rtw_hci_start(struct rtw_dev *rtwdev)
54e3037485SYan-Hsuan Chuang {
55e3037485SYan-Hsuan Chuang return rtwdev->hci.ops->start(rtwdev);
56e3037485SYan-Hsuan Chuang }
57e3037485SYan-Hsuan Chuang
rtw_hci_stop(struct rtw_dev * rtwdev)58e3037485SYan-Hsuan Chuang static inline void rtw_hci_stop(struct rtw_dev *rtwdev)
59e3037485SYan-Hsuan Chuang {
60e3037485SYan-Hsuan Chuang rtwdev->hci.ops->stop(rtwdev);
61e3037485SYan-Hsuan Chuang }
62e3037485SYan-Hsuan Chuang
rtw_hci_deep_ps(struct rtw_dev * rtwdev,bool enter)6327e117e4SYan-Hsuan Chuang static inline void rtw_hci_deep_ps(struct rtw_dev *rtwdev, bool enter)
6427e117e4SYan-Hsuan Chuang {
6527e117e4SYan-Hsuan Chuang rtwdev->hci.ops->deep_ps(rtwdev, enter);
6627e117e4SYan-Hsuan Chuang }
6727e117e4SYan-Hsuan Chuang
rtw_hci_link_ps(struct rtw_dev * rtwdev,bool enter)683dff7c6eSYan-Hsuan Chuang static inline void rtw_hci_link_ps(struct rtw_dev *rtwdev, bool enter)
693dff7c6eSYan-Hsuan Chuang {
703dff7c6eSYan-Hsuan Chuang rtwdev->hci.ops->link_ps(rtwdev, enter);
713dff7c6eSYan-Hsuan Chuang }
723dff7c6eSYan-Hsuan Chuang
rtw_hci_interface_cfg(struct rtw_dev * rtwdev)7378622104SYan-Hsuan Chuang static inline void rtw_hci_interface_cfg(struct rtw_dev *rtwdev)
7478622104SYan-Hsuan Chuang {
7578622104SYan-Hsuan Chuang rtwdev->hci.ops->interface_cfg(rtwdev);
7678622104SYan-Hsuan Chuang }
7778622104SYan-Hsuan Chuang
rtw_hci_dynamic_rx_agg(struct rtw_dev * rtwdev,bool enable)78002a5db9SBitterblue Smith static inline void rtw_hci_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
79002a5db9SBitterblue Smith {
80002a5db9SBitterblue Smith if (rtwdev->hci.ops->dynamic_rx_agg)
81002a5db9SBitterblue Smith rtwdev->hci.ops->dynamic_rx_agg(rtwdev, enable);
82002a5db9SBitterblue Smith }
83002a5db9SBitterblue Smith
rtw_hci_write_firmware_page(struct rtw_dev * rtwdev,u32 page,const u8 * data,u32 size)84*80fe0bc1SBitterblue Smith static inline void rtw_hci_write_firmware_page(struct rtw_dev *rtwdev, u32 page,
85*80fe0bc1SBitterblue Smith const u8 *data, u32 size)
86*80fe0bc1SBitterblue Smith {
87*80fe0bc1SBitterblue Smith rtwdev->hci.ops->write_firmware_page(rtwdev, page, data, size);
88*80fe0bc1SBitterblue Smith }
89*80fe0bc1SBitterblue Smith
90e3037485SYan-Hsuan Chuang static inline int
rtw_hci_write_data_rsvd_page(struct rtw_dev * rtwdev,u8 * buf,u32 size)91e3037485SYan-Hsuan Chuang rtw_hci_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf, u32 size)
92e3037485SYan-Hsuan Chuang {
93e3037485SYan-Hsuan Chuang return rtwdev->hci.ops->write_data_rsvd_page(rtwdev, buf, size);
94e3037485SYan-Hsuan Chuang }
95e3037485SYan-Hsuan Chuang
96e3037485SYan-Hsuan Chuang static inline int
rtw_hci_write_data_h2c(struct rtw_dev * rtwdev,u8 * buf,u32 size)97e3037485SYan-Hsuan Chuang rtw_hci_write_data_h2c(struct rtw_dev *rtwdev, u8 *buf, u32 size)
98e3037485SYan-Hsuan Chuang {
99e3037485SYan-Hsuan Chuang return rtwdev->hci.ops->write_data_h2c(rtwdev, buf, size);
100e3037485SYan-Hsuan Chuang }
101e3037485SYan-Hsuan Chuang
rtw_read8(struct rtw_dev * rtwdev,u32 addr)102e3037485SYan-Hsuan Chuang static inline u8 rtw_read8(struct rtw_dev *rtwdev, u32 addr)
103e3037485SYan-Hsuan Chuang {
104e3037485SYan-Hsuan Chuang return rtwdev->hci.ops->read8(rtwdev, addr);
105e3037485SYan-Hsuan Chuang }
106e3037485SYan-Hsuan Chuang
rtw_read16(struct rtw_dev * rtwdev,u32 addr)107e3037485SYan-Hsuan Chuang static inline u16 rtw_read16(struct rtw_dev *rtwdev, u32 addr)
108e3037485SYan-Hsuan Chuang {
109e3037485SYan-Hsuan Chuang return rtwdev->hci.ops->read16(rtwdev, addr);
110e3037485SYan-Hsuan Chuang }
111e3037485SYan-Hsuan Chuang
rtw_read32(struct rtw_dev * rtwdev,u32 addr)112e3037485SYan-Hsuan Chuang static inline u32 rtw_read32(struct rtw_dev *rtwdev, u32 addr)
113e3037485SYan-Hsuan Chuang {
114e3037485SYan-Hsuan Chuang return rtwdev->hci.ops->read32(rtwdev, addr);
115e3037485SYan-Hsuan Chuang }
116e3037485SYan-Hsuan Chuang
rtw_write8(struct rtw_dev * rtwdev,u32 addr,u8 val)117e3037485SYan-Hsuan Chuang static inline void rtw_write8(struct rtw_dev *rtwdev, u32 addr, u8 val)
118e3037485SYan-Hsuan Chuang {
119e3037485SYan-Hsuan Chuang rtwdev->hci.ops->write8(rtwdev, addr, val);
120e3037485SYan-Hsuan Chuang }
121e3037485SYan-Hsuan Chuang
rtw_write16(struct rtw_dev * rtwdev,u32 addr,u16 val)122e3037485SYan-Hsuan Chuang static inline void rtw_write16(struct rtw_dev *rtwdev, u32 addr, u16 val)
123e3037485SYan-Hsuan Chuang {
124e3037485SYan-Hsuan Chuang rtwdev->hci.ops->write16(rtwdev, addr, val);
125e3037485SYan-Hsuan Chuang }
126e3037485SYan-Hsuan Chuang
rtw_write32(struct rtw_dev * rtwdev,u32 addr,u32 val)127e3037485SYan-Hsuan Chuang static inline void rtw_write32(struct rtw_dev *rtwdev, u32 addr, u32 val)
128e3037485SYan-Hsuan Chuang {
129e3037485SYan-Hsuan Chuang rtwdev->hci.ops->write32(rtwdev, addr, val);
130e3037485SYan-Hsuan Chuang }
131e3037485SYan-Hsuan Chuang
rtw_write8_set(struct rtw_dev * rtwdev,u32 addr,u8 bit)132e3037485SYan-Hsuan Chuang static inline void rtw_write8_set(struct rtw_dev *rtwdev, u32 addr, u8 bit)
133e3037485SYan-Hsuan Chuang {
134e3037485SYan-Hsuan Chuang u8 val;
135e3037485SYan-Hsuan Chuang
136e3037485SYan-Hsuan Chuang val = rtw_read8(rtwdev, addr);
137e3037485SYan-Hsuan Chuang rtw_write8(rtwdev, addr, val | bit);
138e3037485SYan-Hsuan Chuang }
139e3037485SYan-Hsuan Chuang
rtw_write16_set(struct rtw_dev * rtwdev,u32 addr,u16 bit)1404a36de39STzu-En Huang static inline void rtw_write16_set(struct rtw_dev *rtwdev, u32 addr, u16 bit)
141e3037485SYan-Hsuan Chuang {
142e3037485SYan-Hsuan Chuang u16 val;
143e3037485SYan-Hsuan Chuang
144e3037485SYan-Hsuan Chuang val = rtw_read16(rtwdev, addr);
145e3037485SYan-Hsuan Chuang rtw_write16(rtwdev, addr, val | bit);
146e3037485SYan-Hsuan Chuang }
147e3037485SYan-Hsuan Chuang
rtw_write32_set(struct rtw_dev * rtwdev,u32 addr,u32 bit)148e3037485SYan-Hsuan Chuang static inline void rtw_write32_set(struct rtw_dev *rtwdev, u32 addr, u32 bit)
149e3037485SYan-Hsuan Chuang {
150e3037485SYan-Hsuan Chuang u32 val;
151e3037485SYan-Hsuan Chuang
152e3037485SYan-Hsuan Chuang val = rtw_read32(rtwdev, addr);
153e3037485SYan-Hsuan Chuang rtw_write32(rtwdev, addr, val | bit);
154e3037485SYan-Hsuan Chuang }
155e3037485SYan-Hsuan Chuang
rtw_write8_clr(struct rtw_dev * rtwdev,u32 addr,u8 bit)156e3037485SYan-Hsuan Chuang static inline void rtw_write8_clr(struct rtw_dev *rtwdev, u32 addr, u8 bit)
157e3037485SYan-Hsuan Chuang {
158e3037485SYan-Hsuan Chuang u8 val;
159e3037485SYan-Hsuan Chuang
160e3037485SYan-Hsuan Chuang val = rtw_read8(rtwdev, addr);
161e3037485SYan-Hsuan Chuang rtw_write8(rtwdev, addr, val & ~bit);
162e3037485SYan-Hsuan Chuang }
163e3037485SYan-Hsuan Chuang
rtw_write16_clr(struct rtw_dev * rtwdev,u32 addr,u16 bit)164e3037485SYan-Hsuan Chuang static inline void rtw_write16_clr(struct rtw_dev *rtwdev, u32 addr, u16 bit)
165e3037485SYan-Hsuan Chuang {
166e3037485SYan-Hsuan Chuang u16 val;
167e3037485SYan-Hsuan Chuang
168e3037485SYan-Hsuan Chuang val = rtw_read16(rtwdev, addr);
169e3037485SYan-Hsuan Chuang rtw_write16(rtwdev, addr, val & ~bit);
170e3037485SYan-Hsuan Chuang }
171e3037485SYan-Hsuan Chuang
rtw_write32_clr(struct rtw_dev * rtwdev,u32 addr,u32 bit)172e3037485SYan-Hsuan Chuang static inline void rtw_write32_clr(struct rtw_dev *rtwdev, u32 addr, u32 bit)
173e3037485SYan-Hsuan Chuang {
174e3037485SYan-Hsuan Chuang u32 val;
175e3037485SYan-Hsuan Chuang
176e3037485SYan-Hsuan Chuang val = rtw_read32(rtwdev, addr);
177e3037485SYan-Hsuan Chuang rtw_write32(rtwdev, addr, val & ~bit);
178e3037485SYan-Hsuan Chuang }
179e3037485SYan-Hsuan Chuang
180e3037485SYan-Hsuan Chuang static inline u32
rtw_read_rf(struct rtw_dev * rtwdev,enum rtw_rf_path rf_path,u32 addr,u32 mask)181e3037485SYan-Hsuan Chuang rtw_read_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
182e3037485SYan-Hsuan Chuang u32 addr, u32 mask)
183e3037485SYan-Hsuan Chuang {
184e3037485SYan-Hsuan Chuang u32 val;
185e3037485SYan-Hsuan Chuang
186d57ca103SSascha Hauer lockdep_assert_held(&rtwdev->mutex);
187d57ca103SSascha Hauer
188e3037485SYan-Hsuan Chuang val = rtwdev->chip->ops->read_rf(rtwdev, rf_path, addr, mask);
189e3037485SYan-Hsuan Chuang
190e3037485SYan-Hsuan Chuang return val;
191e3037485SYan-Hsuan Chuang }
192e3037485SYan-Hsuan Chuang
193e3037485SYan-Hsuan Chuang static inline void
rtw_write_rf(struct rtw_dev * rtwdev,enum rtw_rf_path rf_path,u32 addr,u32 mask,u32 data)194e3037485SYan-Hsuan Chuang rtw_write_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path,
195e3037485SYan-Hsuan Chuang u32 addr, u32 mask, u32 data)
196e3037485SYan-Hsuan Chuang {
197d57ca103SSascha Hauer lockdep_assert_held(&rtwdev->mutex);
198e3037485SYan-Hsuan Chuang
199e3037485SYan-Hsuan Chuang rtwdev->chip->ops->write_rf(rtwdev, rf_path, addr, mask, data);
200e3037485SYan-Hsuan Chuang }
201e3037485SYan-Hsuan Chuang
202e3037485SYan-Hsuan Chuang static inline u32
rtw_read32_mask(struct rtw_dev * rtwdev,u32 addr,u32 mask)203e3037485SYan-Hsuan Chuang rtw_read32_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask)
204e3037485SYan-Hsuan Chuang {
205e3037485SYan-Hsuan Chuang u32 shift = __ffs(mask);
206e3037485SYan-Hsuan Chuang u32 orig;
207e3037485SYan-Hsuan Chuang u32 ret;
208e3037485SYan-Hsuan Chuang
209e3037485SYan-Hsuan Chuang orig = rtw_read32(rtwdev, addr);
210e3037485SYan-Hsuan Chuang ret = (orig & mask) >> shift;
211e3037485SYan-Hsuan Chuang
212e3037485SYan-Hsuan Chuang return ret;
213e3037485SYan-Hsuan Chuang }
214e3037485SYan-Hsuan Chuang
2159e01c070SYan-Hsuan Chuang static inline u16
rtw_read16_mask(struct rtw_dev * rtwdev,u32 addr,u32 mask)2169e01c070SYan-Hsuan Chuang rtw_read16_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask)
2179e01c070SYan-Hsuan Chuang {
2189e01c070SYan-Hsuan Chuang u32 shift = __ffs(mask);
2199e01c070SYan-Hsuan Chuang u32 orig;
2209e01c070SYan-Hsuan Chuang u32 ret;
2219e01c070SYan-Hsuan Chuang
2229e01c070SYan-Hsuan Chuang orig = rtw_read16(rtwdev, addr);
2239e01c070SYan-Hsuan Chuang ret = (orig & mask) >> shift;
2249e01c070SYan-Hsuan Chuang
2259e01c070SYan-Hsuan Chuang return ret;
2269e01c070SYan-Hsuan Chuang }
2279e01c070SYan-Hsuan Chuang
2289e01c070SYan-Hsuan Chuang static inline u8
rtw_read8_mask(struct rtw_dev * rtwdev,u32 addr,u32 mask)2299e01c070SYan-Hsuan Chuang rtw_read8_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask)
2309e01c070SYan-Hsuan Chuang {
2319e01c070SYan-Hsuan Chuang u32 shift = __ffs(mask);
2329e01c070SYan-Hsuan Chuang u32 orig;
2339e01c070SYan-Hsuan Chuang u32 ret;
2349e01c070SYan-Hsuan Chuang
2359e01c070SYan-Hsuan Chuang orig = rtw_read8(rtwdev, addr);
2369e01c070SYan-Hsuan Chuang ret = (orig & mask) >> shift;
2379e01c070SYan-Hsuan Chuang
2389e01c070SYan-Hsuan Chuang return ret;
2399e01c070SYan-Hsuan Chuang }
2409e01c070SYan-Hsuan Chuang
241e3037485SYan-Hsuan Chuang static inline void
rtw_write32_mask(struct rtw_dev * rtwdev,u32 addr,u32 mask,u32 data)242e3037485SYan-Hsuan Chuang rtw_write32_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
243e3037485SYan-Hsuan Chuang {
244e3037485SYan-Hsuan Chuang u32 shift = __ffs(mask);
245e3037485SYan-Hsuan Chuang u32 orig;
246e3037485SYan-Hsuan Chuang u32 set;
247e3037485SYan-Hsuan Chuang
248e3037485SYan-Hsuan Chuang WARN(addr & 0x3, "should be 4-byte aligned, addr = 0x%08x\n", addr);
249e3037485SYan-Hsuan Chuang
250e3037485SYan-Hsuan Chuang orig = rtw_read32(rtwdev, addr);
251e3037485SYan-Hsuan Chuang set = (orig & ~mask) | ((data << shift) & mask);
252e3037485SYan-Hsuan Chuang rtw_write32(rtwdev, addr, set);
253e3037485SYan-Hsuan Chuang }
254e3037485SYan-Hsuan Chuang
255e3037485SYan-Hsuan Chuang static inline void
rtw_write8_mask(struct rtw_dev * rtwdev,u32 addr,u32 mask,u8 data)256e3037485SYan-Hsuan Chuang rtw_write8_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u8 data)
257e3037485SYan-Hsuan Chuang {
258e3037485SYan-Hsuan Chuang u32 shift;
259e3037485SYan-Hsuan Chuang u8 orig, set;
260e3037485SYan-Hsuan Chuang
261e3037485SYan-Hsuan Chuang mask &= 0xff;
262e3037485SYan-Hsuan Chuang shift = __ffs(mask);
263e3037485SYan-Hsuan Chuang
264e3037485SYan-Hsuan Chuang orig = rtw_read8(rtwdev, addr);
265e3037485SYan-Hsuan Chuang set = (orig & ~mask) | ((data << shift) & mask);
266e3037485SYan-Hsuan Chuang rtw_write8(rtwdev, addr, set);
267e3037485SYan-Hsuan Chuang }
268e3037485SYan-Hsuan Chuang
rtw_hci_type(struct rtw_dev * rtwdev)269e3037485SYan-Hsuan Chuang static inline enum rtw_hci_type rtw_hci_type(struct rtw_dev *rtwdev)
270e3037485SYan-Hsuan Chuang {
271e3037485SYan-Hsuan Chuang return rtwdev->hci.type;
272e3037485SYan-Hsuan Chuang }
273e3037485SYan-Hsuan Chuang
rtw_hci_flush_queues(struct rtw_dev * rtwdev,u32 queues,bool drop)2747b33ec8bSZong-Zhe Yang static inline void rtw_hci_flush_queues(struct rtw_dev *rtwdev, u32 queues,
2757b33ec8bSZong-Zhe Yang bool drop)
2767b33ec8bSZong-Zhe Yang {
2777b33ec8bSZong-Zhe Yang if (rtwdev->hci.ops->flush_queues)
2787b33ec8bSZong-Zhe Yang rtwdev->hci.ops->flush_queues(rtwdev, queues, drop);
2797b33ec8bSZong-Zhe Yang }
2807b33ec8bSZong-Zhe Yang
rtw_hci_flush_all_queues(struct rtw_dev * rtwdev,bool drop)2817b33ec8bSZong-Zhe Yang static inline void rtw_hci_flush_all_queues(struct rtw_dev *rtwdev, bool drop)
2827b33ec8bSZong-Zhe Yang {
2837b33ec8bSZong-Zhe Yang if (rtwdev->hci.ops->flush_queues)
2847b33ec8bSZong-Zhe Yang rtwdev->hci.ops->flush_queues(rtwdev,
2857b33ec8bSZong-Zhe Yang BIT(rtwdev->hw->queues) - 1,
2867b33ec8bSZong-Zhe Yang drop);
2877b33ec8bSZong-Zhe Yang }
2887b33ec8bSZong-Zhe Yang
289e3037485SYan-Hsuan Chuang #endif
290