annotate packages/devs/flash/synth/current/src/flash_program_buf.c @ 2729:74dbf4c3f2e1 after-copyright-change-20090129

Update all copyright banners to reflect FSF ownership; fix and improve licence text.
author jlarmour
date Thu, 29 Jan 2009 17:47:46 +0000
parents 8d3a60779c64
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
202
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
1 //==========================================================================
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
2 //
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
3 // flash_program_buf.c
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
4 //
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
5 // Flash programming
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
6 //
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
7 //==========================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
8 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
9 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 202
diff changeset
12 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
14 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
16 // version.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 202
diff changeset
17 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
21 // for more details.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 202
diff changeset
22 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
23 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
24 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 202
diff changeset
26 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
27 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
28 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
29 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
30 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
31 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
32 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
33 // General Public License v2.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 202
diff changeset
34 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
35 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
36 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
37 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2699
diff changeset
38 // ####ECOSGPLCOPYRIGHTEND####
202
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
39 //==========================================================================
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
40 //#####DESCRIPTIONBEGIN####
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
41 //
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
42 // Author(s): Andrew.Lunn@ascom.ch
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
43 // Contributors: andrew.lunn
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
44 // Date: 2001-10-30
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
45 // Purpose:
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
46 // Description:
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
47 //
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
48 //####DESCRIPTIONEND####
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
49 //
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
50 //==========================================================================
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
51
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
52 #include "synth.h"
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
53
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
54 #include <pkgconf/devs_flash_synth.h>
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
55 #include <cyg/hal/hal_io.h>
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
56 #include <cyg/io/flash.h>
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
57
2699
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
58 #ifndef MIN
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
59 #define MIN(x,y) ((x)<(y) ? (x) : (y))
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
60 #endif
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
61
202
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
62 int
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
63 flash_program_buf(volatile flash_t *addr, flash_t *data, int len,
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
64 unsigned long block_mask, int buffer_size)
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
65 {
2699
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
66 unsigned int offset = (unsigned int) addr;
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
67 cyg_uint8 *buf = (cyg_uint8 *) data;
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
68
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
69 // This helps speed up the programming
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
70 static cyg_uint8 tmp[4096];
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
71
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
72 offset -= (unsigned int) cyg_dev_flash_synth_base;
202
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
73
2699
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
74 while (len > 0) {
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
75 int i;
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
76 int write_size = MIN(len, sizeof(tmp));
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
77 // Writing to NOR flash only sets bits from 1 to 0, not vice-versa
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
78 cyg_hal_sys_lseek(cyg_dev_flash_synth_flashfd, offset,
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
79 CYG_HAL_SYS_SEEK_SET);
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
80 cyg_hal_sys_read(cyg_dev_flash_synth_flashfd, tmp, write_size);
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
81 for (i = 0; i < write_size; i++)
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
82 tmp[i] = tmp[i] & buf[i];
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
83 cyg_hal_sys_lseek(cyg_dev_flash_synth_flashfd, offset,
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
84 CYG_HAL_SYS_SEEK_SET);
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
85 cyg_hal_sys_write(cyg_dev_flash_synth_flashfd, tmp, write_size);
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
86 // Process next chunk
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
87 buf += write_size;
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
88 offset += write_size;
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
89 len -= write_size;
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
90 }
8d3a60779c64 * src/flash_erase_block.c:
asl
parents: 210
diff changeset
91
202
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
92 return FLASH_ERR_OK;
353a011b23b8 Merge from eCos master repository on 2002-01-11-06:43:03-GMT
jlarmour
parents:
diff changeset
93 }