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 13 #define MT_VEND_REQ_MAX_RETRY 10 14 #define MT_VEND_REQ_TOUT_MS 300 15 16 #define MT_VEND_DEV_MODE_RESET 1 17 18 #define MT_VEND_BUF sizeof(__le32) 19 20 enum mt_vendor_req { 21 MT_VEND_DEV_MODE = 1, 22 MT_VEND_WRITE = 2, 23 MT_VEND_MULTI_READ = 7, 24 MT_VEND_WRITE_FCE = 0x42, 25 }; 26 27 enum mt_usb_ep_in { 28 MT_EP_IN_PKT_RX, 29 MT_EP_IN_CMD_RESP, 30 __MT_EP_IN_MAX, 31 }; 32 33 enum mt_usb_ep_out { 34 MT_EP_OUT_INBAND_CMD, 35 MT_EP_OUT_AC_BK, 36 MT_EP_OUT_AC_BE, 37 MT_EP_OUT_AC_VI, 38 MT_EP_OUT_AC_VO, 39 MT_EP_OUT_HCCA, 40 __MT_EP_OUT_MAX, 41 }; 42 43 static inline struct usb_device *mt7601u_to_usb_dev(struct mt7601u_dev *mt7601u) 44 { 45 return interface_to_usbdev(to_usb_interface(mt7601u->dev)); 46 } 47 48 static inline bool mt7601u_urb_has_error(struct urb *urb) 49 { 50 return urb->status && 51 urb->status != -ENOENT && 52 urb->status != -ECONNRESET && 53 urb->status != -ESHUTDOWN; 54 } 55 56 bool mt7601u_usb_alloc_buf(struct mt7601u_dev *dev, size_t len, 57 struct mt7601u_dma_buf *buf); 58 void mt7601u_usb_free_buf(struct mt7601u_dev *dev, struct mt7601u_dma_buf *buf); 59 int mt7601u_usb_submit_buf(struct mt7601u_dev *dev, int dir, int ep_idx, 60 struct mt7601u_dma_buf *buf, gfp_t gfp, 61 usb_complete_t complete_fn, void *context); 62 void mt7601u_complete_urb(struct urb *urb); 63 64 int mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req, 65 const u8 direction, const u16 val, const u16 offset, 66 void *buf, const size_t buflen); 67 void mt7601u_vendor_reset(struct mt7601u_dev *dev); 68 int mt7601u_vendor_single_wr(struct mt7601u_dev *dev, const u8 req, 69 const u16 offset, const u32 val); 70 71 #endif 72