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