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