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, 42*d4cce25eSYifeng Zhao RKUSB_GET_STORAGE_MEDIA = 0x2B, 43f16e43f8SFrank Wang RKUSB_SESSION = 0x30, 44f16e43f8SFrank Wang RKUSB_READ_CAPACITY = 0xAA, 45f16e43f8SFrank Wang RKUSB_RESET = 0xFF, 46f16e43f8SFrank Wang }; 47f16e43f8SFrank Wang 48f16e43f8SFrank Wang enum rkusb_rc { 49f16e43f8SFrank Wang RKUSB_RC_ERROR = -1, 50f16e43f8SFrank Wang RKUSB_RC_CONTINUE = 0, 51f16e43f8SFrank Wang RKUSB_RC_FINISHED = 1, 52f16e43f8SFrank Wang RKUSB_RC_UNKNOWN_CMND = 2, 53f16e43f8SFrank Wang }; 54f16e43f8SFrank Wang 55f16e43f8SFrank Wang #ifdef CONFIG_CMD_ROCKUSB 56f16e43f8SFrank Wang #define IS_RKUSB_UMS_DNL(name) (!strncmp((name), "rkusb_ums_dnl", 13)) 57f16e43f8SFrank Wang #else 58f16e43f8SFrank Wang #define IS_RKUSB_UMS_DNL(name) 0 59f16e43f8SFrank Wang 60f16e43f8SFrank Wang struct fsg_buffhd; 61f16e43f8SFrank Wang struct fsg_dev; 62f16e43f8SFrank Wang struct fsg_common; 63f16e43f8SFrank Wang struct fsg_config; 64f16e43f8SFrank Wang 65f16e43f8SFrank Wang static struct usb_descriptor_header *rkusb_fs_function[]; 66f16e43f8SFrank Wang static struct usb_descriptor_header *rkusb_hs_function[]; 67f16e43f8SFrank Wang 68f16e43f8SFrank Wang static inline int rkusb_cmd_process(struct fsg_common *common, 69f16e43f8SFrank Wang struct fsg_buffhd *bh, int *reply) 70f16e43f8SFrank Wang { 71f16e43f8SFrank Wang return -EPERM; 72f16e43f8SFrank Wang } 73f16e43f8SFrank Wang #endif 74f16e43f8SFrank Wang 75aa9b1b59SFrank Wang /* Wait at maximum 60 seconds for cable connection */ 76aa9b1b59SFrank Wang #define RKUSB_CABLE_READY_TIMEOUT 60 77aa9b1b59SFrank Wang #define SECTOR_SIZE 0x200 78aa9b1b59SFrank Wang 79628c8271SJason Zhu #define RKUSB_READ_LIMIT_ADDR (32 * 2048) /* 32MB */ 80628c8271SJason Zhu 81aa9b1b59SFrank Wang struct rockusb { 82aa9b1b59SFrank Wang struct ums *ums; 83aa9b1b59SFrank Wang int ums_cnt; 84aa9b1b59SFrank Wang }; 85aa9b1b59SFrank Wang 86f16e43f8SFrank Wang #endif /* __ROCKUSB_H__ */ 87