1 /* 2 * Copyright 2017 Rockchip Electronics Co., Ltd 3 * Frank Wang <frank.wang@rock-chips.com> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8 #ifndef __ROCKUSB_H__ 9 #define __ROCKUSB_H__ 10 11 #include <common.h> 12 #include <part.h> 13 #include <linux/usb/composite.h> 14 15 enum rkusb_cmd { 16 RKUSB_TEST_UNIT_READY = 0x00, 17 RKUSB_READ_FLASH_ID = 0x01, 18 RKUSB_SET_DEVICE_ID = 0x02, 19 RKUSB_TEST_BAD_BLOCK = 0x03, 20 RKUSB_READ_10 = 0x04, 21 RKUSB_WRITE_10 = 0x05, 22 RKUSB_ERASE_10 = 0x06, 23 RKUSB_WRITE_SPARE = 0x07, 24 RKUSB_READ_SPARE = 0x08, 25 RKUSB_ERASE_10_FORCE = 0x0B, 26 RKUSB_GET_VERSION = 0x0C, 27 RKUSB_LBA_READ_10 = 0x14, 28 RKUSB_LBA_WRITE_10 = 0x15, 29 RKUSB_ERASE_SYS_DISK = 0x16, 30 RKUSB_SDRAM_READ_10 = 0x17, 31 RKUSB_SDRAM_WRITE_10 = 0x18, 32 RKUSB_SDRAM_EXECUTE = 0x19, 33 RKUSB_READ_FLASH_INFO = 0x1A, 34 RKUSB_GET_CHIP_VER = 0x1B, 35 RKUSB_LOW_FORMAT = 0x1C, 36 RKUSB_SET_RESET_FLAG = 0x1E, 37 RKUSB_SPI_READ_10 = 0x21, 38 RKUSB_SPI_WRITE_10 = 0x22, 39 RKUSB_LBA_ERASE = 0x25, 40 RKUSB_VS_WRITE = 0x26, 41 RKUSB_VS_READ = 0x27, 42 RKUSB_UART_READ = 0x28, 43 RKUSB_SWITCH_STORAGE = 0x2A, 44 RKUSB_GET_STORAGE_MEDIA = 0x2B, 45 RKUSB_READ_OTP_DATA = 0x2C, 46 RKUSB_READ_CAPACITY = 0xAA, 47 RKUSB_SWITCH_USB3 = 0xBB, 48 RKUSB_RESET = 0xFF, 49 }; 50 51 enum rkusb_rc { 52 RKUSB_RC_ERROR = -1, 53 RKUSB_RC_CONTINUE = 0, 54 RKUSB_RC_FINISHED = 1, 55 RKUSB_RC_UNKNOWN_CMND = 2, 56 }; 57 58 struct fsg_common; 59 60 #ifdef CONFIG_CMD_ROCKUSB 61 #define IS_RKUSB_UMS_DNL(name) (!strncmp((name), "rkusb_ums_dnl", 13)) 62 63 int rkusb_do_check_parity(struct fsg_common *common); 64 void rkusb_force_to_usb2(bool enable); 65 bool rkusb_force_usb2_enabled(void); 66 void rkusb_switch_to_usb3_enable(bool enable); 67 bool rkusb_switch_usb3_enabled(void); 68 bool rkusb_usb3_capable(void); 69 70 #else 71 #define IS_RKUSB_UMS_DNL(name) 0 72 73 struct fsg_buffhd; 74 struct fsg_dev; 75 struct fsg_common; 76 struct fsg_config; 77 78 static struct usb_descriptor_header *rkusb_fs_function[]; 79 static struct usb_descriptor_header *rkusb_hs_function[]; 80 81 static inline int rkusb_cmd_process(struct fsg_common *common, 82 struct fsg_buffhd *bh, int *reply) 83 { 84 return -EPERM; 85 } 86 87 static inline int rkusb_do_check_parity(struct fsg_common *common) 88 { 89 return -EOPNOTSUPP; 90 } 91 92 static inline void rkusb_force_to_usb2(bool enable) 93 { 94 } 95 96 static inline bool rkusb_force_usb2_enabled(void) 97 { 98 return false; 99 } 100 101 static inline void rkusb_switch_to_usb3_enable(bool enable) 102 { 103 } 104 105 static inline bool rkusb_switch_usb3_enabled(void) 106 { 107 return false; 108 } 109 110 static inline bool rkusb_usb3_capable(void) 111 { 112 return false; 113 } 114 #endif 115 116 #ifdef CONFIG_USB_DWC3_GADGET 117 bool dwc3_gadget_is_connected(void); 118 #endif 119 120 /* Wait at maximum 60 seconds for cable connection */ 121 #define RKUSB_CABLE_READY_TIMEOUT 60 122 #define SECTOR_SIZE 0x200 123 124 #define RKUSB_READ_LIMIT_ADDR (32 * 2048) /* 32MB */ 125 126 struct rockusb { 127 struct ums *ums; 128 int ums_cnt; 129 bool force_usb2; 130 bool switch_usb3; 131 }; 132 133 #endif /* __ROCKUSB_H__ */ 134