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