Blame view

include/dfu.h 3.8 KB
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
1
2
3
4
5
6
7
  /*
   * dfu.h - DFU flashable area description
   *
   * Copyright (C) 2012 Samsung Electronics
   * authors: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
   *	    Lukasz Majewski <l.majewski@samsung.com>
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
8
   * SPDX-License-Identifier:	GPL-2.0+
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
9
10
11
12
13
14
15
16
   */
  
  #ifndef __DFU_ENTITY_H_
  #define __DFU_ENTITY_H_
  
  #include <common.h>
  #include <linux/list.h>
  #include <mmc.h>
a6921adcf   Lukasz Majewski   usb:g_dnl:dfu: Do...
17
  #include <linux/usb/composite.h>
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
18
19
20
21
22
  
  enum dfu_device_type {
  	DFU_DEV_MMC = 1,
  	DFU_DEV_ONENAND,
  	DFU_DEV_NAND,
a9479f043   Afzal Mohammed   dfu: ram support
23
  	DFU_DEV_RAM,
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
24
25
26
27
28
29
30
31
  };
  
  enum dfu_layout {
  	DFU_RAW_ADDR = 1,
  	DFU_FS_FAT,
  	DFU_FS_EXT2,
  	DFU_FS_EXT3,
  	DFU_FS_EXT4,
a9479f043   Afzal Mohammed   dfu: ram support
32
  	DFU_RAM_ADDR,
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
33
  };
5a127c843   Afzal Mohammed   dfu: unify mmc/na...
34
35
36
37
  enum dfu_op {
  	DFU_OP_READ = 1,
  	DFU_OP_WRITE,
  };
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
38
39
40
41
42
43
44
45
46
47
  struct mmc_internal_data {
  	/* RAW programming */
  	unsigned int lba_start;
  	unsigned int lba_size;
  	unsigned int lba_blk_size;
  
  	/* FAT/EXT */
  	unsigned int dev;
  	unsigned int part;
  };
c6631764c   Pantelis Antoniou   dfu: NAND specifi...
48
49
50
51
52
53
54
  struct nand_internal_data {
  	/* RAW programming */
  	u64 start;
  	u64 size;
  
  	unsigned int dev;
  	unsigned int part;
815c30b2b   Heiko Schocher   dfu, nand, ubi: a...
55
56
  	/* for nand/ubi use */
  	unsigned int ubi;
c6631764c   Pantelis Antoniou   dfu: NAND specifi...
57
  };
a9479f043   Afzal Mohammed   dfu: ram support
58
59
60
61
  struct ram_internal_data {
  	void		*start;
  	unsigned int	size;
  };
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
62
63
64
65
  static inline unsigned int get_mmc_blk_size(int dev)
  {
  	return find_mmc_device(dev)->read_bl_len;
  }
a24c3155d   Tom Rini   dfu: Change inden...
66
67
  #define DFU_NAME_SIZE			32
  #define DFU_CMD_BUF_SIZE		128
e7e75c70c   Heiko Schocher   dfu: make data bu...
68
69
70
  #ifndef CONFIG_SYS_DFU_DATA_BUF_SIZE
  #define CONFIG_SYS_DFU_DATA_BUF_SIZE		(1024*1024*8)	/* 8 MiB */
  #endif
ea2453d56   Pantelis Antoniou   dfu: Support larg...
71
  #ifndef CONFIG_SYS_DFU_MAX_FILE_SIZE
7a813d5b7   Lukasz Majewski   dfu: Make maximum...
72
  #define CONFIG_SYS_DFU_MAX_FILE_SIZE CONFIG_SYS_DFU_DATA_BUF_SIZE
ea2453d56   Pantelis Antoniou   dfu: Support larg...
73
  #endif
33fac4a6a   Lukasz Majewski   usb: dfu: f_dfu: ...
74
75
76
  #ifndef DFU_DEFAULT_POLL_TIMEOUT
  #define DFU_DEFAULT_POLL_TIMEOUT 0
  #endif
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
77
78
79
80
81
82
83
84
85
86
87
  
  struct dfu_entity {
  	char			name[DFU_NAME_SIZE];
  	int                     alt;
  	void                    *dev_private;
  	int                     dev_num;
  	enum dfu_device_type    dev_type;
  	enum dfu_layout         layout;
  
  	union {
  		struct mmc_internal_data mmc;
c6631764c   Pantelis Antoniou   dfu: NAND specifi...
88
  		struct nand_internal_data nand;
a9479f043   Afzal Mohammed   dfu: ram support
89
  		struct ram_internal_data ram;
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
90
  	} data;
ea2453d56   Pantelis Antoniou   dfu: Support larg...
91
92
93
94
95
96
97
  	int (*read_medium)(struct dfu_entity *dfu,
  			u64 offset, void *buf, long *len);
  
  	int (*write_medium)(struct dfu_entity *dfu,
  			u64 offset, void *buf, long *len);
  
  	int (*flush_medium)(struct dfu_entity *dfu);
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
98
99
  
  	struct list_head list;
ea2453d56   Pantelis Antoniou   dfu: Support larg...
100
101
102
103
104
105
106
107
108
109
  
  	/* on the fly state */
  	u32 crc;
  	u64 offset;
  	int i_blk_seq_num;
  	u8 *i_buf;
  	u8 *i_buf_start;
  	u8 *i_buf_end;
  	long r_left;
  	long b_left;
c6631764c   Pantelis Antoniou   dfu: NAND specifi...
110
  	u32 bad_skip;	/* for nand use */
ea2453d56   Pantelis Antoniou   dfu: Support larg...
111
  	unsigned int inited:1;
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
112
113
114
115
116
117
118
119
120
121
  };
  
  int dfu_config_entities(char *s, char *interface, int num);
  void dfu_free_entities(void);
  void dfu_show_entities(void);
  int dfu_get_alt_number(void);
  const char *dfu_get_dev_type(enum dfu_device_type t);
  const char *dfu_get_layout(enum dfu_layout l);
  struct dfu_entity *dfu_get_entity(int alt);
  char *dfu_extract_token(char** e, int *n);
6bed7ce56   Lukasz Majewski   dfu: Implementati...
122
  void dfu_trigger_reset(void);
fed936ed8   Lukasz Majewski   dfu:core: Find DF...
123
  int dfu_get_alt(char *name);
6bed7ce56   Lukasz Majewski   dfu: Implementati...
124
  bool dfu_reset(void);
765c5ae5b   Lukasz Majewski   dfu: Extract comm...
125
  int dfu_init_env_entities(char *interface, int dev);
d42782631   Lukasz Majewski   dfu:core: Export ...
126
127
  unsigned char *dfu_get_buf(void);
  unsigned char *dfu_free_buf(void);
4fb127898   Lukasz Majewski   dfu: Export alloc...
128
  unsigned long dfu_get_buf_size(void);
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
129
130
131
132
133
134
135
136
137
138
139
140
141
142
  
  int dfu_read(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
  int dfu_write(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
  /* Device specific */
  #ifdef CONFIG_DFU_MMC
  extern int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *s);
  #else
  static inline int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *s)
  {
  	puts("MMC support not available!
  ");
  	return -1;
  }
  #endif
c6631764c   Pantelis Antoniou   dfu: NAND specifi...
143
144
145
146
147
148
149
150
151
152
153
  
  #ifdef CONFIG_DFU_NAND
  extern int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s);
  #else
  static inline int dfu_fill_entity_nand(struct dfu_entity *dfu, char *s)
  {
  	puts("NAND support not available!
  ");
  	return -1;
  }
  #endif
a9479f043   Afzal Mohammed   dfu: ram support
154
155
156
157
158
159
160
161
162
163
  #ifdef CONFIG_DFU_RAM
  extern int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s);
  #else
  static inline int dfu_fill_entity_ram(struct dfu_entity *dfu, char *s)
  {
  	puts("RAM support not available!
  ");
  	return -1;
  }
  #endif
a6921adcf   Lukasz Majewski   usb:g_dnl:dfu: Do...
164
165
166
167
168
169
170
171
  #ifdef CONFIG_DFU_FUNCTION
  int dfu_add(struct usb_configuration *c);
  #else
  int dfu_add(struct usb_configuration *c)
  {
  	return 0;
  }
  #endif
f22b11c10   Lukasz Majewski   dfu: DFU backend ...
172
  #endif /* __DFU_ENTITY_H_ */