xref: /linux/drivers/net/wireless/mediatek/mt7601u/usb.h (revision 91a4855d6c03e770e42f17c798a36a3c46e63de2)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
4  */
5 
6 #ifndef __MT7601U_USB_H
7 #define __MT7601U_USB_H
8 
9 #include "mt7601u.h"
10 
11 #define MT7601U_FIRMWARE	"mt7601u.bin"
12 #define MT7601U_FIRMWARE_PATHS	ARRAY_SIZE(mt7601u_fw_paths)
13 
14 #define MT_VEND_REQ_MAX_RETRY	10
15 #define MT_VEND_REQ_TOUT_MS	300
16 
17 #define MT_VEND_DEV_MODE_RESET	1
18 
19 #define MT_VEND_BUF		sizeof(__le32)
20 
21 enum mt_vendor_req {
22 	MT_VEND_DEV_MODE = 1,
23 	MT_VEND_WRITE = 2,
24 	MT_VEND_MULTI_READ = 7,
25 	MT_VEND_WRITE_FCE = 0x42,
26 };
27 
28 enum mt_usb_ep_in {
29 	MT_EP_IN_PKT_RX,
30 	MT_EP_IN_CMD_RESP,
31 	__MT_EP_IN_MAX,
32 };
33 
34 enum mt_usb_ep_out {
35 	MT_EP_OUT_INBAND_CMD,
36 	MT_EP_OUT_AC_BK,
37 	MT_EP_OUT_AC_BE,
38 	MT_EP_OUT_AC_VI,
39 	MT_EP_OUT_AC_VO,
40 	MT_EP_OUT_HCCA,
41 	__MT_EP_OUT_MAX,
42 };
43 
44 static inline struct usb_device *mt7601u_to_usb_dev(struct mt7601u_dev *mt7601u)
45 {
46 	return interface_to_usbdev(to_usb_interface(mt7601u->dev));
47 }
48 
49 static inline bool mt7601u_urb_has_error(struct urb *urb)
50 {
51 	return urb->status &&
52 		urb->status != -ENOENT &&
53 		urb->status != -ECONNRESET &&
54 		urb->status != -ESHUTDOWN;
55 }
56 
57 bool mt7601u_usb_alloc_buf(struct mt7601u_dev *dev, size_t len,
58 			   struct mt7601u_dma_buf *buf);
59 void mt7601u_usb_free_buf(struct mt7601u_dev *dev, struct mt7601u_dma_buf *buf);
60 int mt7601u_usb_submit_buf(struct mt7601u_dev *dev, int dir, int ep_idx,
61 			   struct mt7601u_dma_buf *buf, gfp_t gfp,
62 			   usb_complete_t complete_fn, void *context);
63 void mt7601u_complete_urb(struct urb *urb);
64 
65 int mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req,
66 			   const u8 direction, const u16 val, const u16 offset,
67 			   void *buf, const size_t buflen);
68 void mt7601u_vendor_reset(struct mt7601u_dev *dev);
69 int mt7601u_vendor_single_wr(struct mt7601u_dev *dev, const u8 req,
70 			     const u16 offset, const u32 val);
71 
72 #endif
73