1b819ddbfSLukasz Majewski /* 2b819ddbfSLukasz Majewski * f_dfu.h -- Device Firmware Update gadget 3b819ddbfSLukasz Majewski * 4b819ddbfSLukasz Majewski * Copyright (C) 2011-2012 Samsung Electronics 5b819ddbfSLukasz Majewski * author: Andrzej Pietrasiewicz <andrzej.p@samsung.com> 6b819ddbfSLukasz Majewski * 71a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 8b819ddbfSLukasz Majewski */ 9b819ddbfSLukasz Majewski 10b819ddbfSLukasz Majewski #ifndef __F_DFU_H_ 11b819ddbfSLukasz Majewski #define __F_DFU_H_ 12b819ddbfSLukasz Majewski 13b819ddbfSLukasz Majewski #include <linux/compiler.h> 14b819ddbfSLukasz Majewski #include <linux/usb/composite.h> 15b819ddbfSLukasz Majewski 16b819ddbfSLukasz Majewski #define DFU_CONFIG_VAL 1 17b819ddbfSLukasz Majewski #define DFU_DT_FUNC 0x21 18b819ddbfSLukasz Majewski 19b819ddbfSLukasz Majewski #define DFU_BIT_WILL_DETACH (0x1 << 3) 20b819ddbfSLukasz Majewski #define DFU_BIT_MANIFESTATION_TOLERANT (0x1 << 2) 21b819ddbfSLukasz Majewski #define DFU_BIT_CAN_UPLOAD (0x1 << 1) 22b819ddbfSLukasz Majewski #define DFU_BIT_CAN_DNLOAD 0x1 23b819ddbfSLukasz Majewski 24b819ddbfSLukasz Majewski /* big enough to hold our biggest descriptor */ 25b819ddbfSLukasz Majewski #define DFU_USB_BUFSIZ 4096 26b819ddbfSLukasz Majewski 27b819ddbfSLukasz Majewski #define USB_REQ_DFU_DETACH 0x00 28b819ddbfSLukasz Majewski #define USB_REQ_DFU_DNLOAD 0x01 29b819ddbfSLukasz Majewski #define USB_REQ_DFU_UPLOAD 0x02 30b819ddbfSLukasz Majewski #define USB_REQ_DFU_GETSTATUS 0x03 31b819ddbfSLukasz Majewski #define USB_REQ_DFU_CLRSTATUS 0x04 32b819ddbfSLukasz Majewski #define USB_REQ_DFU_GETSTATE 0x05 33b819ddbfSLukasz Majewski #define USB_REQ_DFU_ABORT 0x06 34b819ddbfSLukasz Majewski 35b819ddbfSLukasz Majewski #define DFU_STATUS_OK 0x00 36b819ddbfSLukasz Majewski #define DFU_STATUS_errTARGET 0x01 37b819ddbfSLukasz Majewski #define DFU_STATUS_errFILE 0x02 38b819ddbfSLukasz Majewski #define DFU_STATUS_errWRITE 0x03 39b819ddbfSLukasz Majewski #define DFU_STATUS_errERASE 0x04 40b819ddbfSLukasz Majewski #define DFU_STATUS_errCHECK_ERASED 0x05 41b819ddbfSLukasz Majewski #define DFU_STATUS_errPROG 0x06 42b819ddbfSLukasz Majewski #define DFU_STATUS_errVERIFY 0x07 43b819ddbfSLukasz Majewski #define DFU_STATUS_errADDRESS 0x08 44b819ddbfSLukasz Majewski #define DFU_STATUS_errNOTDONE 0x09 45b819ddbfSLukasz Majewski #define DFU_STATUS_errFIRMWARE 0x0a 46b819ddbfSLukasz Majewski #define DFU_STATUS_errVENDOR 0x0b 47b819ddbfSLukasz Majewski #define DFU_STATUS_errUSBR 0x0c 48b819ddbfSLukasz Majewski #define DFU_STATUS_errPOR 0x0d 49b819ddbfSLukasz Majewski #define DFU_STATUS_errUNKNOWN 0x0e 50b819ddbfSLukasz Majewski #define DFU_STATUS_errSTALLEDPKT 0x0f 51b819ddbfSLukasz Majewski 52b819ddbfSLukasz Majewski #define RET_STALL -1 53b819ddbfSLukasz Majewski #define RET_ZLP 0 54b819ddbfSLukasz Majewski 55b819ddbfSLukasz Majewski enum dfu_state { 56b819ddbfSLukasz Majewski DFU_STATE_appIDLE = 0, 57b819ddbfSLukasz Majewski DFU_STATE_appDETACH = 1, 58b819ddbfSLukasz Majewski DFU_STATE_dfuIDLE = 2, 59b819ddbfSLukasz Majewski DFU_STATE_dfuDNLOAD_SYNC = 3, 60b819ddbfSLukasz Majewski DFU_STATE_dfuDNBUSY = 4, 61b819ddbfSLukasz Majewski DFU_STATE_dfuDNLOAD_IDLE = 5, 62b819ddbfSLukasz Majewski DFU_STATE_dfuMANIFEST_SYNC = 6, 63b819ddbfSLukasz Majewski DFU_STATE_dfuMANIFEST = 7, 64b819ddbfSLukasz Majewski DFU_STATE_dfuMANIFEST_WAIT_RST = 8, 65b819ddbfSLukasz Majewski DFU_STATE_dfuUPLOAD_IDLE = 9, 66b819ddbfSLukasz Majewski DFU_STATE_dfuERROR = 10, 67b819ddbfSLukasz Majewski }; 68b819ddbfSLukasz Majewski 69b819ddbfSLukasz Majewski struct dfu_status { 70b819ddbfSLukasz Majewski __u8 bStatus; 71b819ddbfSLukasz Majewski __u8 bwPollTimeout[3]; 72b819ddbfSLukasz Majewski __u8 bState; 73b819ddbfSLukasz Majewski __u8 iString; 74b819ddbfSLukasz Majewski } __packed; 75b819ddbfSLukasz Majewski 76b819ddbfSLukasz Majewski struct dfu_function_descriptor { 77b819ddbfSLukasz Majewski __u8 bLength; 78b819ddbfSLukasz Majewski __u8 bDescriptorType; 79b819ddbfSLukasz Majewski __u8 bmAttributes; 80b819ddbfSLukasz Majewski __le16 wDetachTimeOut; 81b819ddbfSLukasz Majewski __le16 wTransferSize; 82b819ddbfSLukasz Majewski __le16 bcdDFUVersion; 83b819ddbfSLukasz Majewski } __packed; 84*33fac4a6SLukasz Majewski 85*33fac4a6SLukasz Majewski #define DFU_POLL_TIMEOUT_MASK (0xFFFFFFUL) 86b819ddbfSLukasz Majewski #endif /* __F_DFU_H_ */ 87