1c5279377SLukasz Majewski /* 2c5279377SLukasz Majewski * f_thor.h - USB TIZEN THOR - internal gadget definitions 3c5279377SLukasz Majewski * 4c5279377SLukasz Majewski * Copyright (C) 2013 Samsung Electronics 5c5279377SLukasz Majewski * Lukasz Majewski <l.majewski@samsung.com> 6c5279377SLukasz Majewski * 7c5279377SLukasz Majewski * SPDX-License-Identifier: GPL-2.0+ 8c5279377SLukasz Majewski */ 9c5279377SLukasz Majewski 10c5279377SLukasz Majewski #ifndef _USB_THOR_H_ 11c5279377SLukasz Majewski #define _USB_THOR_H_ 12c5279377SLukasz Majewski 13c5279377SLukasz Majewski #include <linux/compiler.h> 141ace4022SAlexey Brodkin #include <linux/sizes.h> 15c5279377SLukasz Majewski 16c5279377SLukasz Majewski /* THOR Composite Gadget */ 17c5279377SLukasz Majewski #define STRING_MANUFACTURER_IDX 0 18c5279377SLukasz Majewski #define STRING_PRODUCT_IDX 1 19c5279377SLukasz Majewski #define STRING_SERIAL_IDX 2 20c5279377SLukasz Majewski 21c5279377SLukasz Majewski /* ********************************************************** */ 22c5279377SLukasz Majewski /* THOR protocol definitions */ 23c5279377SLukasz Majewski /* ********************************************************** */ 24c5279377SLukasz Majewski 25c5279377SLukasz Majewski /* 26c5279377SLukasz Majewski * Attribute Vendor descriptor - necessary to prevent ZLP transmission 27c5279377SLukasz Majewski * from Windows XP HOST PC 28c5279377SLukasz Majewski */ 29c5279377SLukasz Majewski struct usb_cdc_attribute_vendor_descriptor { 30c5279377SLukasz Majewski __u8 bLength; 31c5279377SLukasz Majewski __u8 bDescriptorType; 32c5279377SLukasz Majewski __u8 bDescriptorSubType; 33c5279377SLukasz Majewski __u16 DAUType; 34c5279377SLukasz Majewski __u16 DAULength; 35c5279377SLukasz Majewski __u8 DAUValue; 36c5279377SLukasz Majewski } __packed; 37c5279377SLukasz Majewski 38*667c2255SSeung-Woo Kim #define VER_PROTOCOL_MAJOR 5 39c5279377SLukasz Majewski #define VER_PROTOCOL_MINOR 0 40c5279377SLukasz Majewski 41c5279377SLukasz Majewski enum rqt { 42c5279377SLukasz Majewski RQT_INFO = 200, 43c5279377SLukasz Majewski RQT_CMD, 44c5279377SLukasz Majewski RQT_DL, 45c5279377SLukasz Majewski RQT_UL, 46c5279377SLukasz Majewski }; 47c5279377SLukasz Majewski 48c5279377SLukasz Majewski enum rqt_data { 49c5279377SLukasz Majewski /* RQT_INFO */ 50c5279377SLukasz Majewski RQT_INFO_VER_PROTOCOL = 1, 51c5279377SLukasz Majewski RQT_INIT_VER_HW, 52c5279377SLukasz Majewski RQT_INIT_VER_BOOT, 53c5279377SLukasz Majewski RQT_INIT_VER_KERNEL, 54c5279377SLukasz Majewski RQT_INIT_VER_PLATFORM, 55c5279377SLukasz Majewski RQT_INIT_VER_CSC, 56c5279377SLukasz Majewski 57c5279377SLukasz Majewski /* RQT_CMD */ 58c5279377SLukasz Majewski RQT_CMD_REBOOT = 1, 59c5279377SLukasz Majewski RQT_CMD_POWEROFF, 60c5279377SLukasz Majewski RQT_CMD_EFSCLEAR, 61c5279377SLukasz Majewski 62c5279377SLukasz Majewski /* RQT_DL */ 63c5279377SLukasz Majewski RQT_DL_INIT = 1, 64c5279377SLukasz Majewski RQT_DL_FILE_INFO, 65c5279377SLukasz Majewski RQT_DL_FILE_START, 66c5279377SLukasz Majewski RQT_DL_FILE_END, 67c5279377SLukasz Majewski RQT_DL_EXIT, 68c5279377SLukasz Majewski 69c5279377SLukasz Majewski /* RQT_UL */ 70c5279377SLukasz Majewski RQT_UL_INIT = 1, 71c5279377SLukasz Majewski RQT_UL_START, 72c5279377SLukasz Majewski RQT_UL_END, 73c5279377SLukasz Majewski RQT_UL_EXIT, 74c5279377SLukasz Majewski }; 75c5279377SLukasz Majewski 76c5279377SLukasz Majewski struct rqt_box { /* total: 256B */ 77c5279377SLukasz Majewski s32 rqt; /* request id */ 78c5279377SLukasz Majewski s32 rqt_data; /* request data id */ 79c5279377SLukasz Majewski s32 int_data[14]; /* int data */ 80c5279377SLukasz Majewski char str_data[5][32]; /* string data */ 81c5279377SLukasz Majewski char md5[32]; /* md5 checksum */ 82c5279377SLukasz Majewski } __packed; 83c5279377SLukasz Majewski 84c5279377SLukasz Majewski struct rsp_box { /* total: 128B */ 85c5279377SLukasz Majewski s32 rsp; /* response id (= request id) */ 86c5279377SLukasz Majewski s32 rsp_data; /* response data id */ 87c5279377SLukasz Majewski s32 ack; /* ack */ 88c5279377SLukasz Majewski s32 int_data[5]; /* int data */ 89c5279377SLukasz Majewski char str_data[3][32]; /* string data */ 90c5279377SLukasz Majewski } __packed; 91c5279377SLukasz Majewski 92c5279377SLukasz Majewski struct data_rsp_box { /* total: 8B */ 93c5279377SLukasz Majewski s32 ack; /* response id (= request id) */ 94c5279377SLukasz Majewski s32 count; /* response data id */ 95c5279377SLukasz Majewski } __packed; 96c5279377SLukasz Majewski 97c5279377SLukasz Majewski enum { 98c5279377SLukasz Majewski FILE_TYPE_NORMAL, 99c5279377SLukasz Majewski FILE_TYPE_PIT, 100c5279377SLukasz Majewski }; 101c5279377SLukasz Majewski 102c5279377SLukasz Majewski struct thor_dev { 103c5279377SLukasz Majewski struct usb_gadget *gadget; 104c5279377SLukasz Majewski struct usb_request *req; /* EP0 -> control responses */ 105c5279377SLukasz Majewski 106c5279377SLukasz Majewski /* IN/OUT EP's and correspoinding requests */ 107c5279377SLukasz Majewski struct usb_ep *in_ep, *out_ep, *int_ep; 108c5279377SLukasz Majewski struct usb_request *in_req, *out_req; 109c5279377SLukasz Majewski 110c5279377SLukasz Majewski /* Control flow variables */ 111c5279377SLukasz Majewski unsigned char configuration_done; 112c5279377SLukasz Majewski unsigned char rxdata; 113c5279377SLukasz Majewski unsigned char txdata; 114c5279377SLukasz Majewski }; 115c5279377SLukasz Majewski 116c5279377SLukasz Majewski struct f_thor { 117c5279377SLukasz Majewski struct usb_function usb_function; 118c5279377SLukasz Majewski struct thor_dev *dev; 119c5279377SLukasz Majewski }; 120c5279377SLukasz Majewski 121c5279377SLukasz Majewski #define F_NAME_BUF_SIZE 32 122c5279377SLukasz Majewski #define THOR_PACKET_SIZE SZ_1M /* 1 MiB */ 123c5279377SLukasz Majewski #define THOR_STORE_UNIT_SIZE SZ_32M /* 32 MiB */ 12441d237deSSiva Durga Prasad Paladugu #ifdef CONFIG_THOR_RESET_OFF 12541d237deSSiva Durga Prasad Paladugu #define RESET_DONE 0xFFFFFFFF 12641d237deSSiva Durga Prasad Paladugu #endif 127c5279377SLukasz Majewski #endif /* _USB_THOR_H_ */ 128