flash.h 4.25 KB
Newer Older
oharboe's avatar
oharboe committed
1
2
3
4
/***************************************************************************
 *   Copyright (C) 2005 by Dominic Rath                                    *
 *   Dominic.Rath@gmx.de                                                   *
 *                                                                         *
5
 *   Copyright (C) 2007,2008 yvind Harboe                                 *
6
7
 *   oyvind.harboe@zylin.com                                               *
 *                                                                         *
8
9
10
 *   Copyright (C) 2008 by Spencer Oliver                                  *
 *   spen@spen-soft.co.uk                                                  *
 *                                                                         *
oharboe's avatar
oharboe committed
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef FLASH_H
#define FLASH_H

#include "target.h"
#include "image.h"

#define FLASH_MAX_ERROR_STR	(128)

typedef struct flash_sector_s
{
	u32 offset;
	u32 size;
	int is_erased;
	int is_protected;
} flash_sector_t;

struct flash_bank_s;

typedef struct flash_driver_s
{
	char *name;
	int (*register_commands)(struct command_context_s *cmd_ctx);
	int (*flash_bank_command)(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank);
49
50

	/* use flash_driver_erase() wrapper to invoke */
oharboe's avatar
oharboe committed
51
	int (*erase)(struct flash_bank_s *bank, int first, int last);
52
53

	/* use flash_driver_protect() wrapper to invoke */
oharboe's avatar
oharboe committed
54
	int (*protect)(struct flash_bank_s *bank, int set, int first, int last);
55
56

	/* use the flash_driver_write() wrapper to invoke. */
oharboe's avatar
oharboe committed
57
	int (*write)(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count);
58

oharboe's avatar
oharboe committed
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
	int (*probe)(struct flash_bank_s *bank);
	int (*erase_check)(struct flash_bank_s *bank);
	int (*protect_check)(struct flash_bank_s *bank);
	int (*info)(struct flash_bank_s *bank, char *buf, int buf_size);
	int (*auto_probe)(struct flash_bank_s *bank);
} flash_driver_t;

typedef struct flash_bank_s
{
	target_t *target;
	flash_driver_t *driver;
	void *driver_priv;
	u32 base;
	u32 size;
	int chip_width;
	int bus_width;
	int num_sectors;
	flash_sector_t *sectors;
	struct flash_bank_s *next;
} flash_bank_t;

extern int flash_register_commands(struct command_context_s *cmd_ctx);
extern int flash_init_drivers(struct command_context_s *cmd_ctx);

extern int flash_erase_address_range(target_t *target, u32 addr, u32 length);
extern int flash_write(target_t *target, image_t *image, u32 *written, int erase);
extern void flash_set_dirty(void);
oharboe's avatar
oharboe committed
86
extern int flash_get_bank_count(void);
87
88
extern int default_flash_blank_check(struct flash_bank_s *bank);
extern int default_flash_mem_blank_check(struct flash_bank_s *bank);
oharboe's avatar
oharboe committed
89
90

extern flash_bank_t *get_flash_bank_by_num(int num);
91
extern flash_bank_t *get_flash_bank_by_num_noprobe(int num);
oharboe's avatar
oharboe committed
92
93
94
95
96
97
98
99
100
101
102
103
extern flash_bank_t *get_flash_bank_by_addr(target_t *target, u32 addr);

#define		ERROR_FLASH_BANK_INVALID		(-900)
#define		ERROR_FLASH_SECTOR_INVALID		(-901)
#define		ERROR_FLASH_OPERATION_FAILED	(-902)
#define		ERROR_FLASH_DST_OUT_OF_BANK		(-903)
#define		ERROR_FLASH_DST_BREAKS_ALIGNMENT (-904)
#define		ERROR_FLASH_BUSY				(-905)
#define		ERROR_FLASH_SECTOR_NOT_ERASED	(-906)
#define		ERROR_FLASH_BANK_NOT_PROBED		(-907)

#endif /* FLASH_H */