1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 2019 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef __USB_OPS_H_ 16*4882a593Smuzhiyun #define __USB_OPS_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define REALTEK_USB_VENQT_READ 0xC0 20*4882a593Smuzhiyun #define REALTEK_USB_VENQT_WRITE 0x40 21*4882a593Smuzhiyun #define REALTEK_USB_VENQT_CMD_REQ 0x05 22*4882a593Smuzhiyun #define REALTEK_USB_VENQT_CMD_IDX 0x00 23*4882a593Smuzhiyun #define REALTEK_USB_BULK_IN_EP_IDX 0 24*4882a593Smuzhiyun #define REALTEK_USB_IN_INT_EP_IDX 1 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun enum { 27*4882a593Smuzhiyun VENDOR_WRITE = 0x00, 28*4882a593Smuzhiyun VENDOR_READ = 0x01, 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun #define ALIGNMENT_UNIT 16 31*4882a593Smuzhiyun #define MAX_VENDOR_REQ_CMD_SIZE 254 /* 8188cu SIE Support */ 32*4882a593Smuzhiyun #define MAX_USB_IO_CTL_SIZE (MAX_VENDOR_REQ_CMD_SIZE + ALIGNMENT_UNIT) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #ifdef PLATFORM_LINUX 35*4882a593Smuzhiyun #include <usb_ops_linux.h> 36*4882a593Smuzhiyun #endif /* PLATFORM_LINUX */ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define IS_FULL_SPEED_USB(_dvobj) (dvobj_to_usb(_dvobj)->usb_speed == RTW_USB_SPEED_FULL) 39*4882a593Smuzhiyun #define IS_HIGH_SPEED_USB(_dvobj) (dvobj_to_usb(_dvobj)->usb_speed == RTW_USB_SPEED_HIGH) 40*4882a593Smuzhiyun #define IS_SUPER_SPEED_USB(_dvobj) (dvobj_to_usb(_dvobj)->usb_speed == RTW_USB_SPEED_SUPER) 41*4882a593Smuzhiyun #define IS_SUPER_PLUS_SPEED_USB(_dvobj) (dvobj_to_usb(_dvobj)->usb_speed == RTW_USB_SPEED_SUPER_10G) 42*4882a593Smuzhiyun rtw_usb_bulkout_size(struct dvobj_priv * dvobj)43*4882a593Smuzhiyunstatic inline u16 rtw_usb_bulkout_size(struct dvobj_priv *dvobj) 44*4882a593Smuzhiyun { 45*4882a593Smuzhiyun if (IS_SUPER_SPEED_USB(dvobj)) 46*4882a593Smuzhiyun return USB_SUPER_SPEED_BULK_SIZE; 47*4882a593Smuzhiyun else if (IS_HIGH_SPEED_USB(dvobj)) 48*4882a593Smuzhiyun return USB_HIGH_SPEED_BULK_SIZE; 49*4882a593Smuzhiyun else 50*4882a593Smuzhiyun return USB_FULL_SPEED_BULK_SIZE; 51*4882a593Smuzhiyun } 52*4882a593Smuzhiyun rtw_usb_bulkout_size_boundary(struct dvobj_priv * dvobj,int buf_len)53*4882a593Smuzhiyunstatic inline u8 rtw_usb_bulkout_size_boundary(struct dvobj_priv *dvobj, int buf_len) 54*4882a593Smuzhiyun { 55*4882a593Smuzhiyun u8 rst = _TRUE; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun if (IS_SUPER_SPEED_USB(dvobj)) 58*4882a593Smuzhiyun rst = (0 == (buf_len) % USB_SUPER_SPEED_BULK_SIZE) ? _TRUE : _FALSE; 59*4882a593Smuzhiyun else if (IS_HIGH_SPEED_USB(dvobj)) 60*4882a593Smuzhiyun rst = (0 == (buf_len) % USB_HIGH_SPEED_BULK_SIZE) ? _TRUE : _FALSE; 61*4882a593Smuzhiyun else 62*4882a593Smuzhiyun rst = (0 == (buf_len) % USB_FULL_SPEED_BULK_SIZE) ? _TRUE : _FALSE; 63*4882a593Smuzhiyun return rst; 64*4882a593Smuzhiyun } 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun #endif /* __USB_OPS_H_ */ 68