xref: /linux/drivers/net/wireless/realtek/rtw88/usb.c (revision ab93e0dd72c37d378dd936f031ffb83ff2bd87ce)
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright(c) 2018-2019  Realtek Corporation
3  */
4 
5 #include <linux/module.h>
6 #include <linux/usb.h>
7 #include <linux/mutex.h>
8 #include "main.h"
9 #include "debug.h"
10 #include "mac.h"
11 #include "reg.h"
12 #include "tx.h"
13 #include "rx.h"
14 #include "fw.h"
15 #include "ps.h"
16 #include "usb.h"
17 
18 static bool rtw_switch_usb_mode = true;
19 module_param_named(switch_usb_mode, rtw_switch_usb_mode, bool, 0644);
20 MODULE_PARM_DESC(switch_usb_mode,
21 		 "Set to N to disable switching to USB 3 mode to avoid potential interference in the 2.4 GHz band (default: Y)");
22 
23 #define RTW_USB_MAX_RXQ_LEN	512
24 
25 struct rtw_usb_txcb {
26 	struct rtw_dev *rtwdev;
27 	struct sk_buff_head tx_ack_queue;
28 };
29 
rtw_usb_fill_tx_checksum(struct rtw_usb * rtwusb,struct sk_buff * skb,int agg_num)30 static void rtw_usb_fill_tx_checksum(struct rtw_usb *rtwusb,
31 				     struct sk_buff *skb, int agg_num)
32 {
33 	struct rtw_tx_desc *tx_desc = (struct rtw_tx_desc *)skb->data;
34 	struct rtw_dev *rtwdev = rtwusb->rtwdev;
35 	struct rtw_tx_pkt_info pkt_info;
36 
37 	le32p_replace_bits(&tx_desc->w7, agg_num, RTW_TX_DESC_W7_DMA_TXAGG_NUM);
38 	pkt_info.pkt_offset = le32_get_bits(tx_desc->w1, RTW_TX_DESC_W1_PKT_OFFSET);
39 	rtw_tx_fill_txdesc_checksum(rtwdev, &pkt_info, skb->data);
40 }
41 
rtw_usb_reg_sec(struct rtw_dev * rtwdev,u32 addr,__le32 * data)42 static void rtw_usb_reg_sec(struct rtw_dev *rtwdev, u32 addr, __le32 *data)
43 {
44 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
45 	struct usb_device *udev = rtwusb->udev;
46 	bool reg_on_section = false;
47 	u16 t_reg = 0x4e0;
48 	u8 t_len = 1;
49 	int status;
50 
51 	/* There are three sections:
52 	 * 1. on (0x00~0xFF; 0x1000~0x10FF): this section is always powered on
53 	 * 2. off (< 0xFE00, excluding "on" section): this section could be
54 	 *    powered off
55 	 * 3. local (>= 0xFE00): usb specific registers section
56 	 */
57 	if (addr <= 0xff || (addr >= 0x1000 && addr <= 0x10ff))
58 		reg_on_section = true;
59 
60 	if (!reg_on_section)
61 		return;
62 
63 	status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
64 				 RTW_USB_CMD_REQ, RTW_USB_CMD_WRITE,
65 				 t_reg, 0, data, t_len, 500);
66 
67 	if (status != t_len && status != -ENODEV)
68 		rtw_err(rtwdev, "%s: reg 0x%x, usb write %u fail, status: %d\n",
69 			__func__, t_reg, t_len, status);
70 }
71 
rtw_usb_read(struct rtw_dev * rtwdev,u32 addr,u16 len)72 static u32 rtw_usb_read(struct rtw_dev *rtwdev, u32 addr, u16 len)
73 {
74 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
75 	struct usb_device *udev = rtwusb->udev;
76 	__le32 *data;
77 	unsigned long flags;
78 	int idx, ret;
79 	static int count;
80 
81 	spin_lock_irqsave(&rtwusb->usb_lock, flags);
82 
83 	idx = rtwusb->usb_data_index;
84 	rtwusb->usb_data_index = (idx + 1) & (RTW_USB_MAX_RXTX_COUNT - 1);
85 
86 	spin_unlock_irqrestore(&rtwusb->usb_lock, flags);
87 
88 	data = &rtwusb->usb_data[idx];
89 
90 	ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
91 			      RTW_USB_CMD_REQ, RTW_USB_CMD_READ, addr,
92 			      RTW_USB_VENQT_CMD_IDX, data, len, 1000);
93 	if (ret < 0 && ret != -ENODEV && count++ < 4)
94 		rtw_err(rtwdev, "read register 0x%x failed with %d\n",
95 			addr, ret);
96 
97 	if (rtwdev->chip->id == RTW_CHIP_TYPE_8822C ||
98 	    rtwdev->chip->id == RTW_CHIP_TYPE_8822B ||
99 	    rtwdev->chip->id == RTW_CHIP_TYPE_8821C)
100 		rtw_usb_reg_sec(rtwdev, addr, data);
101 
102 	return le32_to_cpu(*data);
103 }
104 
rtw_usb_read8(struct rtw_dev * rtwdev,u32 addr)105 static u8 rtw_usb_read8(struct rtw_dev *rtwdev, u32 addr)
106 {
107 	return (u8)rtw_usb_read(rtwdev, addr, 1);
108 }
109 
rtw_usb_read16(struct rtw_dev * rtwdev,u32 addr)110 static u16 rtw_usb_read16(struct rtw_dev *rtwdev, u32 addr)
111 {
112 	return (u16)rtw_usb_read(rtwdev, addr, 2);
113 }
114 
rtw_usb_read32(struct rtw_dev * rtwdev,u32 addr)115 static u32 rtw_usb_read32(struct rtw_dev *rtwdev, u32 addr)
116 {
117 	return (u32)rtw_usb_read(rtwdev, addr, 4);
118 }
119 
rtw_usb_write(struct rtw_dev * rtwdev,u32 addr,u32 val,int len)120 static void rtw_usb_write(struct rtw_dev *rtwdev, u32 addr, u32 val, int len)
121 {
122 	struct rtw_usb *rtwusb = (struct rtw_usb *)rtwdev->priv;
123 	struct usb_device *udev = rtwusb->udev;
124 	unsigned long flags;
125 	__le32 *data;
126 	int idx, ret;
127 	static int count;
128 
129 	spin_lock_irqsave(&rtwusb->usb_lock, flags);
130 
131 	idx = rtwusb->usb_data_index;
132 	rtwusb->usb_data_index = (idx + 1) & (RTW_USB_MAX_RXTX_COUNT - 1);
133 
134 	spin_unlock_irqrestore(&rtwusb->usb_lock, flags);
135 
136 	data = &rtwusb->usb_data[idx];
137 
138 	*data = cpu_to_le32(val);
139 
140 	ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
141 			      RTW_USB_CMD_REQ, RTW_USB_CMD_WRITE,
142 			      addr, 0, data, len, 500);
143 	if (ret < 0 && ret != -ENODEV && count++ < 4)
144 		rtw_err(rtwdev, "write register 0x%x failed with %d\n",
145 			addr, ret);
146 
147 	if (rtwdev->chip->id == RTW_CHIP_TYPE_8822C ||
148 	    rtwdev->chip->id == RTW_CHIP_TYPE_8822B ||
149 	    rtwdev->chip->id == RTW_CHIP_TYPE_8821C)
150 		rtw_usb_reg_sec(rtwdev, addr, data);
151 }
152 
rtw_usb_write8(struct rtw_dev * rtwdev,u32 addr,u8 val)153 static void rtw_usb_write8(struct rtw_dev *rtwdev, u32 addr, u8 val)
154 {
155 	rtw_usb_write(rtwdev, addr, val, 1);
156 }
157 
rtw_usb_write16(struct rtw_dev * rtwdev,u32 addr,u16 val)158 static void rtw_usb_write16(struct rtw_dev *rtwdev, u32 addr, u16 val)
159 {
160 	rtw_usb_write(rtwdev, addr, val, 2);
161 }
162 
rtw_usb_write32(struct rtw_dev * rtwdev,u32 addr,u32 val)163 static void rtw_usb_write32(struct rtw_dev *rtwdev, u32 addr, u32 val)
164 {
165 	rtw_usb_write(rtwdev, addr, val, 4);
166 }
167 
rtw_usb_write_firmware_page(struct rtw_dev * rtwdev,u32 page,const u8 * data,u32 size)168 static void rtw_usb_write_firmware_page(struct rtw_dev *rtwdev, u32 page,
169 					const u8 *data, u32 size)
170 {
171 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
172 	struct usb_device *udev = rtwusb->udev;
173 	u32 addr = FW_START_ADDR_LEGACY;
174 	u8 *data_dup, *buf;
175 	u32 n, block_size;
176 	int ret;
177 
178 	switch (rtwdev->chip->id) {
179 	case RTW_CHIP_TYPE_8723D:
180 		block_size = 254;
181 		break;
182 	default:
183 		block_size = 196;
184 		break;
185 	}
186 
187 	data_dup = kmemdup(data, size, GFP_KERNEL);
188 	if (!data_dup)
189 		return;
190 
191 	buf = data_dup;
192 
193 	rtw_write32_mask(rtwdev, REG_MCUFW_CTRL, BIT_ROM_PGE, page);
194 
195 	while (size > 0) {
196 		if (size >= block_size)
197 			n = block_size;
198 		else if (size >= 8)
199 			n = 8;
200 		else
201 			n = 1;
202 
203 		ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
204 				      RTW_USB_CMD_REQ, RTW_USB_CMD_WRITE,
205 				      addr, 0, buf, n, 500);
206 		if (ret != n) {
207 			if (ret != -ENODEV)
208 				rtw_err(rtwdev,
209 					"write 0x%x len %d failed: %d\n",
210 					addr, n, ret);
211 			break;
212 		}
213 
214 		addr += n;
215 		buf += n;
216 		size -= n;
217 	}
218 
219 	kfree(data_dup);
220 }
221 
dma_mapping_to_ep(enum rtw_dma_mapping dma_mapping)222 static int dma_mapping_to_ep(enum rtw_dma_mapping dma_mapping)
223 {
224 	switch (dma_mapping) {
225 	case RTW_DMA_MAPPING_HIGH:
226 		return 0;
227 	case RTW_DMA_MAPPING_NORMAL:
228 		return 1;
229 	case RTW_DMA_MAPPING_LOW:
230 		return 2;
231 	case RTW_DMA_MAPPING_EXTRA:
232 		return 3;
233 	default:
234 		return -EINVAL;
235 	}
236 }
237 
rtw_usb_parse(struct rtw_dev * rtwdev,struct usb_interface * interface)238 static int rtw_usb_parse(struct rtw_dev *rtwdev,
239 			 struct usb_interface *interface)
240 {
241 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
242 	struct usb_host_interface *host_interface = &interface->altsetting[0];
243 	struct usb_interface_descriptor *interface_desc = &host_interface->desc;
244 	struct usb_endpoint_descriptor *endpoint;
245 	int num_out_pipes = 0;
246 	int i;
247 	u8 num;
248 	const struct rtw_chip_info *chip = rtwdev->chip;
249 	const struct rtw_rqpn *rqpn;
250 
251 	for (i = 0; i < interface_desc->bNumEndpoints; i++) {
252 		endpoint = &host_interface->endpoint[i].desc;
253 		num = usb_endpoint_num(endpoint);
254 
255 		if (usb_endpoint_dir_in(endpoint) &&
256 		    usb_endpoint_xfer_bulk(endpoint)) {
257 			if (rtwusb->pipe_in) {
258 				rtw_err(rtwdev, "IN pipes overflow\n");
259 				return -EINVAL;
260 			}
261 
262 			rtwusb->pipe_in = num;
263 		}
264 
265 		if (usb_endpoint_dir_in(endpoint) &&
266 		    usb_endpoint_xfer_int(endpoint)) {
267 			if (rtwusb->pipe_interrupt) {
268 				rtw_err(rtwdev, "INT pipes overflow\n");
269 				return -EINVAL;
270 			}
271 
272 			rtwusb->pipe_interrupt = num;
273 		}
274 
275 		if (usb_endpoint_dir_out(endpoint) &&
276 		    usb_endpoint_xfer_bulk(endpoint)) {
277 			if (num_out_pipes >= ARRAY_SIZE(rtwusb->out_ep)) {
278 				rtw_err(rtwdev, "OUT pipes overflow\n");
279 				return -EINVAL;
280 			}
281 
282 			rtwusb->out_ep[num_out_pipes++] = num;
283 		}
284 	}
285 
286 	rtwdev->hci.bulkout_num = num_out_pipes;
287 
288 	if (num_out_pipes < 1 || num_out_pipes > 4) {
289 		rtw_err(rtwdev, "invalid number of endpoints %d\n", num_out_pipes);
290 		return -EINVAL;
291 	}
292 
293 	rqpn = &chip->rqpn_table[num_out_pipes];
294 
295 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID0] = dma_mapping_to_ep(rqpn->dma_map_be);
296 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID1] = dma_mapping_to_ep(rqpn->dma_map_bk);
297 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID2] = dma_mapping_to_ep(rqpn->dma_map_bk);
298 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID3] = dma_mapping_to_ep(rqpn->dma_map_be);
299 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID4] = dma_mapping_to_ep(rqpn->dma_map_vi);
300 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID5] = dma_mapping_to_ep(rqpn->dma_map_vi);
301 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID6] = dma_mapping_to_ep(rqpn->dma_map_vo);
302 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID7] = dma_mapping_to_ep(rqpn->dma_map_vo);
303 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID8] = -EINVAL;
304 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID9] = -EINVAL;
305 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID10] = -EINVAL;
306 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID11] = -EINVAL;
307 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID12] = -EINVAL;
308 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID13] = -EINVAL;
309 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID14] = -EINVAL;
310 	rtwusb->qsel_to_ep[TX_DESC_QSEL_TID15] = -EINVAL;
311 	rtwusb->qsel_to_ep[TX_DESC_QSEL_BEACON] = dma_mapping_to_ep(rqpn->dma_map_hi);
312 	rtwusb->qsel_to_ep[TX_DESC_QSEL_HIGH] = dma_mapping_to_ep(rqpn->dma_map_hi);
313 	rtwusb->qsel_to_ep[TX_DESC_QSEL_MGMT] = dma_mapping_to_ep(rqpn->dma_map_mg);
314 	rtwusb->qsel_to_ep[TX_DESC_QSEL_H2C] = dma_mapping_to_ep(rqpn->dma_map_hi);
315 
316 	return 0;
317 }
318 
rtw_usb_write_port_tx_complete(struct urb * urb)319 static void rtw_usb_write_port_tx_complete(struct urb *urb)
320 {
321 	struct rtw_usb_txcb *txcb = urb->context;
322 	struct rtw_dev *rtwdev = txcb->rtwdev;
323 	struct ieee80211_hw *hw = rtwdev->hw;
324 
325 	while (true) {
326 		struct sk_buff *skb = skb_dequeue(&txcb->tx_ack_queue);
327 		struct ieee80211_tx_info *info;
328 		struct rtw_usb_tx_data *tx_data;
329 
330 		if (!skb)
331 			break;
332 
333 		info = IEEE80211_SKB_CB(skb);
334 		tx_data = rtw_usb_get_tx_data(skb);
335 
336 		skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz);
337 
338 		/* enqueue to wait for tx report */
339 		if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) {
340 			rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn);
341 			continue;
342 		}
343 
344 		/* always ACK for others, then they won't be marked as drop */
345 		ieee80211_tx_info_clear_status(info);
346 		if (info->flags & IEEE80211_TX_CTL_NO_ACK)
347 			info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED;
348 		else
349 			info->flags |= IEEE80211_TX_STAT_ACK;
350 
351 		ieee80211_tx_status_irqsafe(hw, skb);
352 	}
353 
354 	kfree(txcb);
355 }
356 
qsel_to_ep(struct rtw_usb * rtwusb,unsigned int qsel)357 static int qsel_to_ep(struct rtw_usb *rtwusb, unsigned int qsel)
358 {
359 	if (qsel >= ARRAY_SIZE(rtwusb->qsel_to_ep))
360 		return -EINVAL;
361 
362 	return rtwusb->qsel_to_ep[qsel];
363 }
364 
rtw_usb_write_port(struct rtw_dev * rtwdev,u8 qsel,struct sk_buff * skb,usb_complete_t cb,void * context)365 static int rtw_usb_write_port(struct rtw_dev *rtwdev, u8 qsel, struct sk_buff *skb,
366 			      usb_complete_t cb, void *context)
367 {
368 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
369 	struct usb_device *usbd = rtwusb->udev;
370 	struct urb *urb;
371 	unsigned int pipe;
372 	int ret;
373 	int ep = qsel_to_ep(rtwusb, qsel);
374 
375 	if (ep < 0)
376 		return ep;
377 
378 	pipe = usb_sndbulkpipe(usbd, rtwusb->out_ep[ep]);
379 	urb = usb_alloc_urb(0, GFP_ATOMIC);
380 	if (!urb)
381 		return -ENOMEM;
382 
383 	usb_fill_bulk_urb(urb, usbd, pipe, skb->data, skb->len, cb, context);
384 	urb->transfer_flags |= URB_ZERO_PACKET;
385 	ret = usb_submit_urb(urb, GFP_ATOMIC);
386 
387 	usb_free_urb(urb);
388 
389 	return ret;
390 }
391 
rtw_usb_tx_agg_skb(struct rtw_usb * rtwusb,struct sk_buff_head * list)392 static bool rtw_usb_tx_agg_skb(struct rtw_usb *rtwusb, struct sk_buff_head *list)
393 {
394 	struct rtw_dev *rtwdev = rtwusb->rtwdev;
395 	struct rtw_tx_desc *tx_desc;
396 	struct rtw_usb_txcb *txcb;
397 	struct sk_buff *skb_head;
398 	struct sk_buff *skb_iter;
399 	int agg_num = 0;
400 	unsigned int align_next = 0;
401 	u8 qsel;
402 
403 	if (skb_queue_empty(list))
404 		return false;
405 
406 	txcb = kmalloc(sizeof(*txcb), GFP_ATOMIC);
407 	if (!txcb)
408 		return false;
409 
410 	txcb->rtwdev = rtwdev;
411 	skb_queue_head_init(&txcb->tx_ack_queue);
412 
413 	skb_iter = skb_dequeue(list);
414 
415 	if (skb_queue_empty(list)) {
416 		skb_head = skb_iter;
417 		goto queue;
418 	}
419 
420 	skb_head = dev_alloc_skb(RTW_USB_MAX_XMITBUF_SZ);
421 	if (!skb_head) {
422 		skb_head = skb_iter;
423 		goto queue;
424 	}
425 
426 	while (skb_iter) {
427 		unsigned long flags;
428 
429 		skb_put(skb_head, align_next);
430 		skb_put_data(skb_head, skb_iter->data, skb_iter->len);
431 
432 		align_next = ALIGN(skb_iter->len, 8) - skb_iter->len;
433 
434 		agg_num++;
435 
436 		skb_queue_tail(&txcb->tx_ack_queue, skb_iter);
437 
438 		spin_lock_irqsave(&list->lock, flags);
439 
440 		skb_iter = skb_peek(list);
441 
442 		if (skb_iter &&
443 		    skb_iter->len + skb_head->len <= RTW_USB_MAX_XMITBUF_SZ &&
444 		    agg_num < rtwdev->chip->usb_tx_agg_desc_num)
445 			__skb_unlink(skb_iter, list);
446 		else
447 			skb_iter = NULL;
448 		spin_unlock_irqrestore(&list->lock, flags);
449 	}
450 
451 	if (agg_num > 1)
452 		rtw_usb_fill_tx_checksum(rtwusb, skb_head, agg_num);
453 
454 queue:
455 	skb_queue_tail(&txcb->tx_ack_queue, skb_head);
456 	tx_desc = (struct rtw_tx_desc *)skb_head->data;
457 	qsel = le32_get_bits(tx_desc->w1, RTW_TX_DESC_W1_QSEL);
458 
459 	rtw_usb_write_port(rtwdev, qsel, skb_head, rtw_usb_write_port_tx_complete, txcb);
460 
461 	return true;
462 }
463 
rtw_usb_tx_handler(struct work_struct * work)464 static void rtw_usb_tx_handler(struct work_struct *work)
465 {
466 	struct rtw_usb *rtwusb = container_of(work, struct rtw_usb, tx_work);
467 	int i, limit;
468 
469 	for (i = ARRAY_SIZE(rtwusb->tx_queue) - 1; i >= 0; i--) {
470 		for (limit = 0; limit < 200; limit++) {
471 			struct sk_buff_head *list = &rtwusb->tx_queue[i];
472 
473 			if (!rtw_usb_tx_agg_skb(rtwusb, list))
474 				break;
475 		}
476 	}
477 }
478 
rtw_usb_tx_queue_purge(struct rtw_usb * rtwusb)479 static void rtw_usb_tx_queue_purge(struct rtw_usb *rtwusb)
480 {
481 	struct rtw_dev *rtwdev = rtwusb->rtwdev;
482 	int i;
483 
484 	for (i = 0; i < ARRAY_SIZE(rtwusb->tx_queue); i++)
485 		ieee80211_purge_tx_queue(rtwdev->hw, &rtwusb->tx_queue[i]);
486 }
487 
rtw_usb_write_port_complete(struct urb * urb)488 static void rtw_usb_write_port_complete(struct urb *urb)
489 {
490 	struct sk_buff *skb = urb->context;
491 
492 	dev_kfree_skb_any(skb);
493 }
494 
rtw_usb_write_data(struct rtw_dev * rtwdev,struct rtw_tx_pkt_info * pkt_info,u8 * buf)495 static int rtw_usb_write_data(struct rtw_dev *rtwdev,
496 			      struct rtw_tx_pkt_info *pkt_info,
497 			      u8 *buf)
498 {
499 	const struct rtw_chip_info *chip = rtwdev->chip;
500 	struct sk_buff *skb;
501 	unsigned int size;
502 	u8 qsel;
503 	int ret = 0;
504 
505 	size = pkt_info->tx_pkt_size;
506 	qsel = pkt_info->qsel;
507 
508 	skb = dev_alloc_skb(chip->tx_pkt_desc_sz + size);
509 	if (unlikely(!skb))
510 		return -ENOMEM;
511 
512 	skb_reserve(skb, chip->tx_pkt_desc_sz);
513 	skb_put_data(skb, buf, size);
514 	skb_push(skb, chip->tx_pkt_desc_sz);
515 	memset(skb->data, 0, chip->tx_pkt_desc_sz);
516 	rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
517 	rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
518 
519 	ret = rtw_usb_write_port(rtwdev, qsel, skb,
520 				 rtw_usb_write_port_complete, skb);
521 	if (unlikely(ret))
522 		rtw_err(rtwdev, "failed to do USB write, ret=%d\n", ret);
523 
524 	return ret;
525 }
526 
rtw_usb_write_data_rsvd_page(struct rtw_dev * rtwdev,u8 * buf,u32 size)527 static int rtw_usb_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf,
528 					u32 size)
529 {
530 	const struct rtw_chip_info *chip = rtwdev->chip;
531 	struct rtw_tx_pkt_info pkt_info = {0};
532 
533 	pkt_info.tx_pkt_size = size;
534 	pkt_info.qsel = TX_DESC_QSEL_BEACON;
535 	pkt_info.offset = chip->tx_pkt_desc_sz;
536 	pkt_info.ls = true;
537 
538 	return rtw_usb_write_data(rtwdev, &pkt_info, buf);
539 }
540 
rtw_usb_write_data_h2c(struct rtw_dev * rtwdev,u8 * buf,u32 size)541 static int rtw_usb_write_data_h2c(struct rtw_dev *rtwdev, u8 *buf, u32 size)
542 {
543 	struct rtw_tx_pkt_info pkt_info = {0};
544 
545 	pkt_info.tx_pkt_size = size;
546 	pkt_info.qsel = TX_DESC_QSEL_H2C;
547 
548 	return rtw_usb_write_data(rtwdev, &pkt_info, buf);
549 }
550 
rtw_usb_tx_queue_mapping_to_qsel(struct sk_buff * skb)551 static u8 rtw_usb_tx_queue_mapping_to_qsel(struct sk_buff *skb)
552 {
553 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
554 	__le16 fc = hdr->frame_control;
555 	u8 qsel;
556 
557 	if (unlikely(ieee80211_is_mgmt(fc) || ieee80211_is_ctl(fc)))
558 		qsel = TX_DESC_QSEL_MGMT;
559 	else if (is_broadcast_ether_addr(hdr->addr1) ||
560 		 is_multicast_ether_addr(hdr->addr1))
561 		qsel = TX_DESC_QSEL_HIGH;
562 	else if (skb_get_queue_mapping(skb) <= IEEE80211_AC_BK)
563 		qsel = skb->priority;
564 	else
565 		qsel = TX_DESC_QSEL_BEACON;
566 
567 	return qsel;
568 }
569 
rtw_usb_tx_write(struct rtw_dev * rtwdev,struct rtw_tx_pkt_info * pkt_info,struct sk_buff * skb)570 static int rtw_usb_tx_write(struct rtw_dev *rtwdev,
571 			    struct rtw_tx_pkt_info *pkt_info,
572 			    struct sk_buff *skb)
573 {
574 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
575 	const struct rtw_chip_info *chip = rtwdev->chip;
576 	struct rtw_usb_tx_data *tx_data;
577 	u8 *pkt_desc;
578 	int ep;
579 
580 	pkt_info->qsel = rtw_usb_tx_queue_mapping_to_qsel(skb);
581 	pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
582 	memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
583 	ep = qsel_to_ep(rtwusb, pkt_info->qsel);
584 	rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
585 	rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
586 	tx_data = rtw_usb_get_tx_data(skb);
587 	tx_data->sn = pkt_info->sn;
588 
589 	skb_queue_tail(&rtwusb->tx_queue[ep], skb);
590 
591 	return 0;
592 }
593 
rtw_usb_tx_kick_off(struct rtw_dev * rtwdev)594 static void rtw_usb_tx_kick_off(struct rtw_dev *rtwdev)
595 {
596 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
597 
598 	queue_work(rtwusb->txwq, &rtwusb->tx_work);
599 }
600 
rtw_usb_rx_handler(struct work_struct * work)601 static void rtw_usb_rx_handler(struct work_struct *work)
602 {
603 	struct rtw_usb *rtwusb = container_of(work, struct rtw_usb, rx_work);
604 	struct rtw_dev *rtwdev = rtwusb->rtwdev;
605 	struct ieee80211_rx_status rx_status;
606 	struct rtw_rx_pkt_stat pkt_stat;
607 	struct sk_buff *rx_skb;
608 	struct sk_buff *skb;
609 	u32 pkt_desc_sz = rtwdev->chip->rx_pkt_desc_sz;
610 	u32 max_skb_len = pkt_desc_sz + PHY_STATUS_SIZE * 8 +
611 			  IEEE80211_MAX_MPDU_LEN_VHT_11454;
612 	u32 pkt_offset, next_pkt, skb_len;
613 	u8 *rx_desc;
614 	int limit;
615 
616 	for (limit = 0; limit < 200; limit++) {
617 		rx_skb = skb_dequeue(&rtwusb->rx_queue);
618 		if (!rx_skb)
619 			break;
620 
621 		if (skb_queue_len(&rtwusb->rx_queue) >= RTW_USB_MAX_RXQ_LEN) {
622 			dev_dbg_ratelimited(rtwdev->dev, "failed to get rx_queue, overflow\n");
623 			dev_kfree_skb_any(rx_skb);
624 			continue;
625 		}
626 
627 		rx_desc = rx_skb->data;
628 
629 		do {
630 			rtw_rx_query_rx_desc(rtwdev, rx_desc, &pkt_stat,
631 					     &rx_status);
632 			pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
633 				     pkt_stat.shift;
634 
635 			skb_len = pkt_stat.pkt_len + pkt_offset;
636 			if (skb_len > max_skb_len) {
637 				rtw_dbg(rtwdev, RTW_DBG_USB,
638 					"skipping too big packet: %u\n",
639 					skb_len);
640 				goto skip_packet;
641 			}
642 
643 			skb = alloc_skb(skb_len, GFP_ATOMIC);
644 			if (!skb) {
645 				rtw_dbg(rtwdev, RTW_DBG_USB,
646 					"failed to allocate RX skb of size %u\n",
647 					skb_len);
648 				goto skip_packet;
649 			}
650 
651 			skb_put_data(skb, rx_desc, skb_len);
652 
653 			if (pkt_stat.is_c2h) {
654 				rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb);
655 			} else {
656 				skb_pull(skb, pkt_offset);
657 				rtw_update_rx_freq_for_invalid(rtwdev, skb,
658 							       &rx_status,
659 							       &pkt_stat);
660 				rtw_rx_stats(rtwdev, pkt_stat.vif, skb);
661 				memcpy(skb->cb, &rx_status, sizeof(rx_status));
662 				ieee80211_rx_irqsafe(rtwdev->hw, skb);
663 			}
664 
665 skip_packet:
666 			next_pkt = round_up(skb_len, 8);
667 			rx_desc += next_pkt;
668 		} while (rx_desc + pkt_desc_sz < rx_skb->data + rx_skb->len);
669 
670 		if (skb_queue_len(&rtwusb->rx_free_queue) >= RTW_USB_RX_SKB_NUM)
671 			dev_kfree_skb_any(rx_skb);
672 		else
673 			skb_queue_tail(&rtwusb->rx_free_queue, rx_skb);
674 	}
675 }
676 
677 static void rtw_usb_read_port_complete(struct urb *urb);
678 
rtw_usb_rx_resubmit(struct rtw_usb * rtwusb,struct rx_usb_ctrl_block * rxcb,gfp_t gfp)679 static void rtw_usb_rx_resubmit(struct rtw_usb *rtwusb,
680 				struct rx_usb_ctrl_block *rxcb,
681 				gfp_t gfp)
682 {
683 	struct rtw_dev *rtwdev = rtwusb->rtwdev;
684 	struct sk_buff *rx_skb;
685 	int error;
686 
687 	rx_skb = skb_dequeue(&rtwusb->rx_free_queue);
688 	if (!rx_skb)
689 		rx_skb = alloc_skb(RTW_USB_MAX_RECVBUF_SZ, gfp);
690 
691 	if (!rx_skb)
692 		goto try_later;
693 
694 	skb_reset_tail_pointer(rx_skb);
695 	rx_skb->len = 0;
696 
697 	rxcb->rx_skb = rx_skb;
698 
699 	usb_fill_bulk_urb(rxcb->rx_urb, rtwusb->udev,
700 			  usb_rcvbulkpipe(rtwusb->udev, rtwusb->pipe_in),
701 			  rxcb->rx_skb->data, RTW_USB_MAX_RECVBUF_SZ,
702 			  rtw_usb_read_port_complete, rxcb);
703 
704 	error = usb_submit_urb(rxcb->rx_urb, gfp);
705 	if (error) {
706 		skb_queue_tail(&rtwusb->rx_free_queue, rxcb->rx_skb);
707 
708 		if (error != -ENODEV)
709 			rtw_err(rtwdev, "Err sending rx data urb %d\n",
710 				error);
711 
712 		if (error == -ENOMEM)
713 			goto try_later;
714 	}
715 
716 	return;
717 
718 try_later:
719 	rxcb->rx_skb = NULL;
720 	queue_work(rtwusb->rxwq, &rtwusb->rx_urb_work);
721 }
722 
rtw_usb_rx_resubmit_work(struct work_struct * work)723 static void rtw_usb_rx_resubmit_work(struct work_struct *work)
724 {
725 	struct rtw_usb *rtwusb = container_of(work, struct rtw_usb, rx_urb_work);
726 	struct rx_usb_ctrl_block *rxcb;
727 	int i;
728 
729 	for (i = 0; i < RTW_USB_RXCB_NUM; i++) {
730 		rxcb = &rtwusb->rx_cb[i];
731 
732 		if (!rxcb->rx_skb)
733 			rtw_usb_rx_resubmit(rtwusb, rxcb, GFP_ATOMIC);
734 	}
735 }
736 
rtw_usb_read_port_complete(struct urb * urb)737 static void rtw_usb_read_port_complete(struct urb *urb)
738 {
739 	struct rx_usb_ctrl_block *rxcb = urb->context;
740 	struct rtw_dev *rtwdev = rxcb->rtwdev;
741 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
742 	struct sk_buff *skb = rxcb->rx_skb;
743 
744 	if (urb->status == 0) {
745 		if (urb->actual_length >= RTW_USB_MAX_RECVBUF_SZ ||
746 		    urb->actual_length < 24) {
747 			rtw_err(rtwdev, "failed to get urb length:%d\n",
748 				urb->actual_length);
749 			skb_queue_tail(&rtwusb->rx_free_queue, skb);
750 		} else {
751 			skb_put(skb, urb->actual_length);
752 			skb_queue_tail(&rtwusb->rx_queue, skb);
753 			queue_work(rtwusb->rxwq, &rtwusb->rx_work);
754 		}
755 		rtw_usb_rx_resubmit(rtwusb, rxcb, GFP_ATOMIC);
756 	} else {
757 		skb_queue_tail(&rtwusb->rx_free_queue, skb);
758 
759 		switch (urb->status) {
760 		case -EINVAL:
761 		case -EPIPE:
762 		case -ENODEV:
763 		case -ESHUTDOWN:
764 		case -ENOENT:
765 		case -EPROTO:
766 		case -EILSEQ:
767 		case -ETIME:
768 		case -ECOMM:
769 		case -EOVERFLOW:
770 		case -EINPROGRESS:
771 			break;
772 		default:
773 			rtw_err(rtwdev, "status %d\n", urb->status);
774 			break;
775 		}
776 	}
777 }
778 
rtw_usb_cancel_rx_bufs(struct rtw_usb * rtwusb)779 static void rtw_usb_cancel_rx_bufs(struct rtw_usb *rtwusb)
780 {
781 	struct rx_usb_ctrl_block *rxcb;
782 	int i;
783 
784 	for (i = 0; i < RTW_USB_RXCB_NUM; i++) {
785 		rxcb = &rtwusb->rx_cb[i];
786 		usb_kill_urb(rxcb->rx_urb);
787 	}
788 }
789 
rtw_usb_free_rx_bufs(struct rtw_usb * rtwusb)790 static void rtw_usb_free_rx_bufs(struct rtw_usb *rtwusb)
791 {
792 	struct rx_usb_ctrl_block *rxcb;
793 	int i;
794 
795 	for (i = 0; i < RTW_USB_RXCB_NUM; i++) {
796 		rxcb = &rtwusb->rx_cb[i];
797 		usb_kill_urb(rxcb->rx_urb);
798 		usb_free_urb(rxcb->rx_urb);
799 	}
800 }
801 
rtw_usb_alloc_rx_bufs(struct rtw_usb * rtwusb)802 static int rtw_usb_alloc_rx_bufs(struct rtw_usb *rtwusb)
803 {
804 	int i;
805 
806 	for (i = 0; i < RTW_USB_RXCB_NUM; i++) {
807 		struct rx_usb_ctrl_block *rxcb = &rtwusb->rx_cb[i];
808 
809 		rxcb->rtwdev = rtwusb->rtwdev;
810 		rxcb->rx_urb = usb_alloc_urb(0, GFP_KERNEL);
811 		if (!rxcb->rx_urb)
812 			goto err;
813 	}
814 
815 	return 0;
816 err:
817 	rtw_usb_free_rx_bufs(rtwusb);
818 	return -ENOMEM;
819 }
820 
rtw_usb_setup(struct rtw_dev * rtwdev)821 static int rtw_usb_setup(struct rtw_dev *rtwdev)
822 {
823 	/* empty function for rtw_hci_ops */
824 	return 0;
825 }
826 
rtw_usb_start(struct rtw_dev * rtwdev)827 static int rtw_usb_start(struct rtw_dev *rtwdev)
828 {
829 	return 0;
830 }
831 
rtw_usb_stop(struct rtw_dev * rtwdev)832 static void rtw_usb_stop(struct rtw_dev *rtwdev)
833 {
834 }
835 
rtw_usb_deep_ps(struct rtw_dev * rtwdev,bool enter)836 static void rtw_usb_deep_ps(struct rtw_dev *rtwdev, bool enter)
837 {
838 	/* empty function for rtw_hci_ops */
839 }
840 
rtw_usb_link_ps(struct rtw_dev * rtwdev,bool enter)841 static void rtw_usb_link_ps(struct rtw_dev *rtwdev, bool enter)
842 {
843 	/* empty function for rtw_hci_ops */
844 }
845 
rtw_usb_init_burst_pkt_len(struct rtw_dev * rtwdev)846 static void rtw_usb_init_burst_pkt_len(struct rtw_dev *rtwdev)
847 {
848 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
849 	enum usb_device_speed speed = rtwusb->udev->speed;
850 	u8 rxdma, burst_size;
851 
852 	rxdma = BIT_DMA_BURST_CNT | BIT_DMA_MODE;
853 
854 	if (speed == USB_SPEED_SUPER)
855 		burst_size = BIT_DMA_BURST_SIZE_1024;
856 	else if (speed == USB_SPEED_HIGH)
857 		burst_size = BIT_DMA_BURST_SIZE_512;
858 	else
859 		burst_size = BIT_DMA_BURST_SIZE_64;
860 
861 	u8p_replace_bits(&rxdma, burst_size, BIT_DMA_BURST_SIZE);
862 
863 	rtw_write8(rtwdev, REG_RXDMA_MODE, rxdma);
864 	rtw_write16_set(rtwdev, REG_TXDMA_OFFSET_CHK, BIT_DROP_DATA_EN);
865 }
866 
rtw_usb_interface_cfg(struct rtw_dev * rtwdev)867 static void rtw_usb_interface_cfg(struct rtw_dev *rtwdev)
868 {
869 	rtw_usb_init_burst_pkt_len(rtwdev);
870 }
871 
rtw_usb_dynamic_rx_agg_v1(struct rtw_dev * rtwdev,bool enable)872 static void rtw_usb_dynamic_rx_agg_v1(struct rtw_dev *rtwdev, bool enable)
873 {
874 	u8 size, timeout;
875 	u16 val16;
876 
877 	rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
878 	rtw_write8_clr(rtwdev, REG_RXDMA_AGG_PG_TH + 3, BIT(7));
879 
880 	if (enable) {
881 		size = 0x5;
882 		timeout = 0x20;
883 	} else {
884 		size = 0x0;
885 		timeout = 0x1;
886 	}
887 	val16 = u16_encode_bits(size, BIT_RXDMA_AGG_PG_TH) |
888 		u16_encode_bits(timeout, BIT_DMA_AGG_TO_V1);
889 
890 	rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
891 }
892 
rtw_usb_dynamic_rx_agg_v2(struct rtw_dev * rtwdev,bool enable)893 static void rtw_usb_dynamic_rx_agg_v2(struct rtw_dev *rtwdev, bool enable)
894 {
895 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
896 	u8 size, timeout;
897 	u16 val16;
898 
899 	if (!enable) {
900 		size = 0x0;
901 		timeout = 0x1;
902 	} else if (rtwusb->udev->speed == USB_SPEED_SUPER) {
903 		size = 0x6;
904 		timeout = 0x1a;
905 	} else {
906 		size = 0x5;
907 		timeout = 0x20;
908 	}
909 
910 	val16 = u16_encode_bits(size, BIT_RXDMA_AGG_PG_TH) |
911 		u16_encode_bits(timeout, BIT_DMA_AGG_TO_V1);
912 
913 	rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
914 	rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
915 }
916 
rtw_usb_dynamic_rx_agg(struct rtw_dev * rtwdev,bool enable)917 static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
918 {
919 	switch (rtwdev->chip->id) {
920 	case RTW_CHIP_TYPE_8822C:
921 	case RTW_CHIP_TYPE_8822B:
922 	case RTW_CHIP_TYPE_8821C:
923 	case RTW_CHIP_TYPE_8814A:
924 		rtw_usb_dynamic_rx_agg_v1(rtwdev, enable);
925 		break;
926 	case RTW_CHIP_TYPE_8821A:
927 	case RTW_CHIP_TYPE_8812A:
928 		rtw_usb_dynamic_rx_agg_v2(rtwdev, enable);
929 		break;
930 	case RTW_CHIP_TYPE_8723D:
931 		/* Doesn't like aggregation. */
932 		break;
933 	case RTW_CHIP_TYPE_8703B:
934 		/* Likely not found in USB devices. */
935 		break;
936 	}
937 }
938 
939 static const struct rtw_hci_ops rtw_usb_ops = {
940 	.tx_write = rtw_usb_tx_write,
941 	.tx_kick_off = rtw_usb_tx_kick_off,
942 	.setup = rtw_usb_setup,
943 	.start = rtw_usb_start,
944 	.stop = rtw_usb_stop,
945 	.deep_ps = rtw_usb_deep_ps,
946 	.link_ps = rtw_usb_link_ps,
947 	.interface_cfg = rtw_usb_interface_cfg,
948 	.dynamic_rx_agg = rtw_usb_dynamic_rx_agg,
949 	.write_firmware_page = rtw_usb_write_firmware_page,
950 
951 	.write8  = rtw_usb_write8,
952 	.write16 = rtw_usb_write16,
953 	.write32 = rtw_usb_write32,
954 	.read8	= rtw_usb_read8,
955 	.read16 = rtw_usb_read16,
956 	.read32 = rtw_usb_read32,
957 
958 	.write_data_rsvd_page = rtw_usb_write_data_rsvd_page,
959 	.write_data_h2c = rtw_usb_write_data_h2c,
960 };
961 
rtw_usb_init_rx(struct rtw_dev * rtwdev)962 static int rtw_usb_init_rx(struct rtw_dev *rtwdev)
963 {
964 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
965 	struct sk_buff *rx_skb;
966 	int i;
967 
968 	rtwusb->rxwq = alloc_workqueue("rtw88_usb: rx wq", WQ_BH, 0);
969 	if (!rtwusb->rxwq) {
970 		rtw_err(rtwdev, "failed to create RX work queue\n");
971 		return -ENOMEM;
972 	}
973 
974 	skb_queue_head_init(&rtwusb->rx_queue);
975 	skb_queue_head_init(&rtwusb->rx_free_queue);
976 
977 	INIT_WORK(&rtwusb->rx_work, rtw_usb_rx_handler);
978 	INIT_WORK(&rtwusb->rx_urb_work, rtw_usb_rx_resubmit_work);
979 
980 	for (i = 0; i < RTW_USB_RX_SKB_NUM; i++) {
981 		rx_skb = alloc_skb(RTW_USB_MAX_RECVBUF_SZ, GFP_KERNEL);
982 		if (rx_skb)
983 			skb_queue_tail(&rtwusb->rx_free_queue, rx_skb);
984 	}
985 
986 	return 0;
987 }
988 
rtw_usb_setup_rx(struct rtw_dev * rtwdev)989 static void rtw_usb_setup_rx(struct rtw_dev *rtwdev)
990 {
991 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
992 	int i;
993 
994 	for (i = 0; i < RTW_USB_RXCB_NUM; i++) {
995 		struct rx_usb_ctrl_block *rxcb = &rtwusb->rx_cb[i];
996 
997 		rtw_usb_rx_resubmit(rtwusb, rxcb, GFP_KERNEL);
998 	}
999 }
1000 
rtw_usb_deinit_rx(struct rtw_dev * rtwdev)1001 static void rtw_usb_deinit_rx(struct rtw_dev *rtwdev)
1002 {
1003 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
1004 
1005 	skb_queue_purge(&rtwusb->rx_queue);
1006 
1007 	destroy_workqueue(rtwusb->rxwq);
1008 
1009 	skb_queue_purge(&rtwusb->rx_free_queue);
1010 }
1011 
rtw_usb_init_tx(struct rtw_dev * rtwdev)1012 static int rtw_usb_init_tx(struct rtw_dev *rtwdev)
1013 {
1014 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
1015 	int i;
1016 
1017 	rtwusb->txwq = create_singlethread_workqueue("rtw88_usb: tx wq");
1018 	if (!rtwusb->txwq) {
1019 		rtw_err(rtwdev, "failed to create TX work queue\n");
1020 		return -ENOMEM;
1021 	}
1022 
1023 	for (i = 0; i < ARRAY_SIZE(rtwusb->tx_queue); i++)
1024 		skb_queue_head_init(&rtwusb->tx_queue[i]);
1025 
1026 	INIT_WORK(&rtwusb->tx_work, rtw_usb_tx_handler);
1027 
1028 	return 0;
1029 }
1030 
rtw_usb_deinit_tx(struct rtw_dev * rtwdev)1031 static void rtw_usb_deinit_tx(struct rtw_dev *rtwdev)
1032 {
1033 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
1034 
1035 	destroy_workqueue(rtwusb->txwq);
1036 	rtw_usb_tx_queue_purge(rtwusb);
1037 }
1038 
rtw_usb_intf_init(struct rtw_dev * rtwdev,struct usb_interface * intf)1039 static int rtw_usb_intf_init(struct rtw_dev *rtwdev,
1040 			     struct usb_interface *intf)
1041 {
1042 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
1043 	struct usb_device *udev = usb_get_dev(interface_to_usbdev(intf));
1044 	int ret;
1045 
1046 	rtwusb->udev = udev;
1047 	ret = rtw_usb_parse(rtwdev, intf);
1048 	if (ret)
1049 		return ret;
1050 
1051 	rtwusb->usb_data = kcalloc(RTW_USB_MAX_RXTX_COUNT, sizeof(u32),
1052 				   GFP_KERNEL);
1053 	if (!rtwusb->usb_data)
1054 		return -ENOMEM;
1055 
1056 	usb_set_intfdata(intf, rtwdev->hw);
1057 
1058 	SET_IEEE80211_DEV(rtwdev->hw, &intf->dev);
1059 	spin_lock_init(&rtwusb->usb_lock);
1060 
1061 	return 0;
1062 }
1063 
rtw_usb_intf_deinit(struct rtw_dev * rtwdev,struct usb_interface * intf)1064 static void rtw_usb_intf_deinit(struct rtw_dev *rtwdev,
1065 				struct usb_interface *intf)
1066 {
1067 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
1068 
1069 	usb_put_dev(rtwusb->udev);
1070 	kfree(rtwusb->usb_data);
1071 	usb_set_intfdata(intf, NULL);
1072 }
1073 
rtw_usb_switch_mode_old(struct rtw_dev * rtwdev)1074 static int rtw_usb_switch_mode_old(struct rtw_dev *rtwdev)
1075 {
1076 	struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
1077 	enum usb_device_speed cur_speed = rtwusb->udev->speed;
1078 	u8 hci_opt;
1079 
1080 	if (cur_speed == USB_SPEED_HIGH) {
1081 		hci_opt = rtw_read8(rtwdev, REG_HCI_OPT_CTRL);
1082 
1083 		if ((hci_opt & (BIT(2) | BIT(3))) != BIT(3)) {
1084 			rtw_write8(rtwdev, REG_HCI_OPT_CTRL, 0x8);
1085 			rtw_write8(rtwdev, REG_SYS_SDIO_CTRL, 0x2);
1086 			rtw_write8(rtwdev, REG_ACLK_MON, 0x1);
1087 			rtw_write8(rtwdev, 0x3d, 0x3);
1088 			/* usb disconnect */
1089 			rtw_write8(rtwdev, REG_SYS_PW_CTRL + 1, 0x80);
1090 			return 1;
1091 		}
1092 	} else if (cur_speed == USB_SPEED_SUPER) {
1093 		rtw_write8_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT(1));
1094 		rtw_write8_clr(rtwdev, REG_ACLK_MON, BIT(0));
1095 	}
1096 
1097 	return 0;
1098 }
1099 
rtw_usb_switch_mode_new(struct rtw_dev * rtwdev)1100 static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
1101 {
1102 	enum usb_device_speed cur_speed;
1103 	u8 id = rtwdev->chip->id;
1104 	bool can_switch;
1105 	u32 pad_ctrl2;
1106 
1107 	if (rtw_read8(rtwdev, REG_SYS_CFG2 + 3) == 0x20)
1108 		cur_speed = USB_SPEED_SUPER;
1109 	else
1110 		cur_speed = USB_SPEED_HIGH;
1111 
1112 	if (cur_speed == USB_SPEED_SUPER)
1113 		return 0;
1114 
1115 	pad_ctrl2 = rtw_read32(rtwdev, REG_PAD_CTRL2);
1116 
1117 	can_switch = !!(pad_ctrl2 & (BIT_MASK_USB23_SW_MODE_V1 |
1118 				     BIT_USB3_USB2_TRANSITION));
1119 
1120 	if (!can_switch) {
1121 		rtw_dbg(rtwdev, RTW_DBG_USB,
1122 			"Switching to USB 3 mode unsupported by the chip\n");
1123 		return 0;
1124 	}
1125 
1126 	/* At this point cur_speed is USB_SPEED_HIGH. If we already tried
1127 	 * to switch don't try again - it's a USB 2 port.
1128 	 */
1129 	if (u32_get_bits(pad_ctrl2, BIT_MASK_USB23_SW_MODE_V1) == BIT_USB_MODE_U3)
1130 		return 0;
1131 
1132 	/* Enable IO wrapper timeout */
1133 	if (id == RTW_CHIP_TYPE_8822B || id == RTW_CHIP_TYPE_8821C)
1134 		rtw_write8_clr(rtwdev, REG_SW_MDIO + 3, BIT(0));
1135 
1136 	u32p_replace_bits(&pad_ctrl2, BIT_USB_MODE_U3, BIT_MASK_USB23_SW_MODE_V1);
1137 	pad_ctrl2 |= BIT_RSM_EN_V1;
1138 
1139 	rtw_write32(rtwdev, REG_PAD_CTRL2, pad_ctrl2);
1140 	rtw_write8(rtwdev, REG_PAD_CTRL2 + 1, 4);
1141 
1142 	rtw_write16_set(rtwdev, REG_SYS_PW_CTRL, BIT_APFM_OFFMAC);
1143 	usleep_range(1000, 1001);
1144 	rtw_write32_set(rtwdev, REG_PAD_CTRL2, BIT_NO_PDN_CHIPOFF_V1);
1145 
1146 	return 1;
1147 }
1148 
rtw_usb3_chip_old(u8 chip_id)1149 static bool rtw_usb3_chip_old(u8 chip_id)
1150 {
1151 	return chip_id == RTW_CHIP_TYPE_8812A ||
1152 	       chip_id == RTW_CHIP_TYPE_8814A;
1153 }
1154 
rtw_usb3_chip_new(u8 chip_id)1155 static bool rtw_usb3_chip_new(u8 chip_id)
1156 {
1157 	return chip_id == RTW_CHIP_TYPE_8822C ||
1158 	       chip_id == RTW_CHIP_TYPE_8822B;
1159 }
1160 
rtw_usb_switch_mode(struct rtw_dev * rtwdev)1161 static int rtw_usb_switch_mode(struct rtw_dev *rtwdev)
1162 {
1163 	u8 id = rtwdev->chip->id;
1164 
1165 	if (!rtw_usb3_chip_new(id) && !rtw_usb3_chip_old(id))
1166 		return 0;
1167 
1168 	if (!rtwdev->efuse.usb_mode_switch) {
1169 		rtw_dbg(rtwdev, RTW_DBG_USB,
1170 			"Switching to USB 3 mode disabled by chip's efuse\n");
1171 		return 0;
1172 	}
1173 
1174 	if (!rtw_switch_usb_mode) {
1175 		rtw_dbg(rtwdev, RTW_DBG_USB,
1176 			"Switching to USB 3 mode disabled by module parameter\n");
1177 		return 0;
1178 	}
1179 
1180 	if (rtw_usb3_chip_old(id))
1181 		return rtw_usb_switch_mode_old(rtwdev);
1182 	else
1183 		return rtw_usb_switch_mode_new(rtwdev);
1184 }
1185 
1186 #define USB_REG_PAGE	0xf4
1187 #define USB_PHY_PAGE0	0x9b
1188 #define USB_PHY_PAGE1	0xbb
1189 
rtw_usb_phy_write(struct rtw_dev * rtwdev,u8 addr,u16 data,enum usb_device_speed speed)1190 static void rtw_usb_phy_write(struct rtw_dev *rtwdev, u8 addr, u16 data,
1191 			      enum usb_device_speed speed)
1192 {
1193 	if (speed == USB_SPEED_SUPER) {
1194 		rtw_write8(rtwdev, REG_USB3_PHY_DAT_L, data & 0xff);
1195 		rtw_write8(rtwdev, REG_USB3_PHY_DAT_H, data >> 8);
1196 		rtw_write8(rtwdev, REG_USB3_PHY_ADR, addr | BIT_USB3_PHY_ADR_WR);
1197 	} else if (speed == USB_SPEED_HIGH) {
1198 		rtw_write8(rtwdev, REG_USB2_PHY_DAT, data);
1199 		rtw_write8(rtwdev, REG_USB2_PHY_ADR, addr);
1200 		rtw_write8(rtwdev, REG_USB2_PHY_CMD, BIT_USB2_PHY_CMD_TRG);
1201 	}
1202 }
1203 
rtw_usb_page_switch(struct rtw_dev * rtwdev,enum usb_device_speed speed,u8 page)1204 static void rtw_usb_page_switch(struct rtw_dev *rtwdev,
1205 				enum usb_device_speed speed, u8 page)
1206 {
1207 	if (speed == USB_SPEED_SUPER)
1208 		return;
1209 
1210 	rtw_usb_phy_write(rtwdev, USB_REG_PAGE, page, speed);
1211 }
1212 
rtw_usb_phy_cfg(struct rtw_dev * rtwdev,enum usb_device_speed speed)1213 static void rtw_usb_phy_cfg(struct rtw_dev *rtwdev,
1214 			    enum usb_device_speed speed)
1215 {
1216 	const struct rtw_intf_phy_para *para = NULL;
1217 	u16 offset;
1218 
1219 	if (!rtwdev->chip->intf_table)
1220 		return;
1221 
1222 	if (speed == USB_SPEED_SUPER)
1223 		para = rtwdev->chip->intf_table->usb3_para;
1224 	else if (speed == USB_SPEED_HIGH)
1225 		para = rtwdev->chip->intf_table->usb2_para;
1226 
1227 	if (!para)
1228 		return;
1229 
1230 	for ( ; para->offset != 0xffff; para++) {
1231 		if (!(para->cut_mask & BIT(rtwdev->hal.cut_version)))
1232 			continue;
1233 
1234 		offset = para->offset;
1235 
1236 		if (para->ip_sel == RTW_IP_SEL_MAC) {
1237 			rtw_write8(rtwdev, offset, para->value);
1238 		} else {
1239 			if (offset > 0x100)
1240 				rtw_usb_page_switch(rtwdev, speed, USB_PHY_PAGE1);
1241 			else
1242 				rtw_usb_page_switch(rtwdev, speed, USB_PHY_PAGE0);
1243 
1244 			offset &= 0xff;
1245 
1246 			rtw_usb_phy_write(rtwdev, offset, para->value, speed);
1247 		}
1248 	}
1249 }
1250 
rtw_usb_probe(struct usb_interface * intf,const struct usb_device_id * id)1251 int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1252 {
1253 	struct rtw_dev *rtwdev;
1254 	struct ieee80211_hw *hw;
1255 	struct rtw_usb *rtwusb;
1256 	int drv_data_size;
1257 	int ret;
1258 
1259 	drv_data_size = sizeof(struct rtw_dev) + sizeof(struct rtw_usb);
1260 	hw = ieee80211_alloc_hw(drv_data_size, &rtw_ops);
1261 	if (!hw)
1262 		return -ENOMEM;
1263 
1264 	rtwdev = hw->priv;
1265 	rtwdev->hw = hw;
1266 	rtwdev->dev = &intf->dev;
1267 	rtwdev->chip = (struct rtw_chip_info *)id->driver_info;
1268 	rtwdev->hci.ops = &rtw_usb_ops;
1269 	rtwdev->hci.type = RTW_HCI_TYPE_USB;
1270 
1271 	rtwusb = rtw_get_usb_priv(rtwdev);
1272 	rtwusb->rtwdev = rtwdev;
1273 
1274 	ret = rtw_usb_alloc_rx_bufs(rtwusb);
1275 	if (ret)
1276 		goto err_release_hw;
1277 
1278 	ret = rtw_core_init(rtwdev);
1279 	if (ret)
1280 		goto err_free_rx_bufs;
1281 
1282 	ret = rtw_usb_intf_init(rtwdev, intf);
1283 	if (ret) {
1284 		rtw_err(rtwdev, "failed to init USB interface\n");
1285 		goto err_deinit_core;
1286 	}
1287 
1288 	ret = rtw_usb_init_tx(rtwdev);
1289 	if (ret) {
1290 		rtw_err(rtwdev, "failed to init USB TX\n");
1291 		goto err_destroy_usb;
1292 	}
1293 
1294 	ret = rtw_usb_init_rx(rtwdev);
1295 	if (ret) {
1296 		rtw_err(rtwdev, "failed to init USB RX\n");
1297 		goto err_destroy_txwq;
1298 	}
1299 
1300 	ret = rtw_chip_info_setup(rtwdev);
1301 	if (ret) {
1302 		rtw_err(rtwdev, "failed to setup chip information\n");
1303 		goto err_destroy_rxwq;
1304 	}
1305 
1306 	rtw_usb_phy_cfg(rtwdev, USB_SPEED_HIGH);
1307 	rtw_usb_phy_cfg(rtwdev, USB_SPEED_SUPER);
1308 
1309 	ret = rtw_usb_switch_mode(rtwdev);
1310 	if (ret) {
1311 		/* Not a fail, but we do need to skip rtw_register_hw. */
1312 		rtw_dbg(rtwdev, RTW_DBG_USB, "switching to USB 3 mode\n");
1313 		ret = 0;
1314 		goto err_destroy_rxwq;
1315 	}
1316 
1317 	ret = rtw_register_hw(rtwdev, rtwdev->hw);
1318 	if (ret) {
1319 		rtw_err(rtwdev, "failed to register hw\n");
1320 		goto err_destroy_rxwq;
1321 	}
1322 
1323 	rtw_usb_setup_rx(rtwdev);
1324 
1325 	return 0;
1326 
1327 err_destroy_rxwq:
1328 	rtw_usb_deinit_rx(rtwdev);
1329 
1330 err_destroy_txwq:
1331 	rtw_usb_deinit_tx(rtwdev);
1332 
1333 err_destroy_usb:
1334 	rtw_usb_intf_deinit(rtwdev, intf);
1335 
1336 err_deinit_core:
1337 	rtw_core_deinit(rtwdev);
1338 
1339 err_free_rx_bufs:
1340 	rtw_usb_free_rx_bufs(rtwusb);
1341 
1342 err_release_hw:
1343 	ieee80211_free_hw(hw);
1344 
1345 	return ret;
1346 }
1347 EXPORT_SYMBOL(rtw_usb_probe);
1348 
rtw_usb_disconnect(struct usb_interface * intf)1349 void rtw_usb_disconnect(struct usb_interface *intf)
1350 {
1351 	struct ieee80211_hw *hw = usb_get_intfdata(intf);
1352 	struct rtw_dev *rtwdev;
1353 	struct rtw_usb *rtwusb;
1354 
1355 	if (!hw)
1356 		return;
1357 
1358 	rtwdev = hw->priv;
1359 	rtwusb = rtw_get_usb_priv(rtwdev);
1360 
1361 	rtw_usb_cancel_rx_bufs(rtwusb);
1362 
1363 	rtw_unregister_hw(rtwdev, hw);
1364 	rtw_usb_deinit_tx(rtwdev);
1365 	rtw_usb_deinit_rx(rtwdev);
1366 
1367 	if (rtwusb->udev->state != USB_STATE_NOTATTACHED)
1368 		usb_reset_device(rtwusb->udev);
1369 
1370 	rtw_usb_free_rx_bufs(rtwusb);
1371 
1372 	rtw_usb_intf_deinit(rtwdev, intf);
1373 	rtw_core_deinit(rtwdev);
1374 	ieee80211_free_hw(hw);
1375 }
1376 EXPORT_SYMBOL(rtw_usb_disconnect);
1377 
1378 MODULE_AUTHOR("Realtek Corporation");
1379 MODULE_DESCRIPTION("Realtek USB 802.11ac wireless driver");
1380 MODULE_LICENSE("Dual BSD/GPL");
1381