Mercurial > flash_v2
annotate packages/devs/disk/synth/current/src/synthdisk.c @ 1476:f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
ChangeLogs for details.
| author | nickg |
|---|---|
| date | Mon, 19 Jan 2004 14:35:01 +0000 |
| parents | |
| children | 3cd6f4cd3db2 |
| rev | line source |
|---|---|
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
1 //========================================================================== |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
2 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
3 // synthdisk.c |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
4 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
5 // Disk device driver for the synthetic target |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
6 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
7 //========================================================================== |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
8 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
9 // ------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
11 // Copyright (C) 2003 Savin Zlobec. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
12 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
13 // eCos is free software; you can redistribute it and/or modify it under |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
14 // the terms of the GNU General Public License as published by the Free |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
15 // Software Foundation; either version 2 or (at your option) any later version. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
16 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
20 // for more details. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
21 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
22 // You should have received a copy of the GNU General Public License along |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
23 // with eCos; if not, write to the Free Software Foundation, Inc., |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
25 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
26 // As a special exception, if other files instantiate templates or use macros |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
27 // or inline functions from this file, or you compile this file and link it |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
28 // with other works to produce a work based on this file, this file does not |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
29 // by itself cause the resulting work to be covered by the GNU General Public |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
30 // License. However the source code for this file must still be made available |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
31 // in accordance with section (3) of the GNU General Public License. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
32 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
33 // This exception does not invalidate any other reasons why a work based on |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
34 // this file might be covered by the GNU General Public License. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
35 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
36 // ------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
37 //####ECOSGPLCOPYRIGHTEND#### |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
38 //========================================================================== |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
39 //#####DESCRIPTIONBEGIN#### |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
40 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
41 // Author(s): savin |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
42 // Contributors: |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
43 // Date: 2003-06-18 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
44 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
45 //####DESCRIPTIONEND#### |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
46 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
47 //========================================================================== |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
48 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
49 #include <pkgconf/devs_disk_ecosynth.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
50 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
51 #include <cyg/infra/cyg_type.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
52 #include <cyg/infra/cyg_ass.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
53 #include <cyg/infra/diag.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
54 #include <cyg/hal/hal_arch.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
55 #include <cyg/hal/hal_io.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
56 #include <cyg/hal/drv_api.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
57 #include <cyg/io/io.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
58 #include <cyg/io/devtab.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
59 #include <cyg/io/disk.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
60 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
61 #include <stdio.h> // sprintf |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
62 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
63 // ---------------------------------------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
64 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
65 //#define DEBUG 1 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
66 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
67 // ---------------------------------------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
68 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
69 typedef struct { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
70 int num; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
71 cyg_uint32 cylinders_num; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
72 cyg_uint32 heads_num; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
73 cyg_uint32 sectors_num; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
74 cyg_uint32 size; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
75 int filefd; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
76 char *filename; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
77 } synth_disk_info_t; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
78 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
79 // ---------------------------------------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
80 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
81 static cyg_bool synth_disk_init(struct cyg_devtab_entry *tab); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
82 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
83 static Cyg_ErrNo synth_disk_read(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
84 void *buf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
85 cyg_uint32 len, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
86 cyg_uint32 block_num); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
87 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
88 static Cyg_ErrNo synth_disk_write(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
89 const void *buf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
90 cyg_uint32 len, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
91 cyg_uint32 block_num); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
92 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
93 static Cyg_ErrNo synth_disk_get_config(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
94 cyg_uint32 key, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
95 const void *xbuf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
96 cyg_uint32 *len); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
97 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
98 static Cyg_ErrNo synth_disk_set_config(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
99 cyg_uint32 key, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
100 const void *xbuf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
101 cyg_uint32 *len); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
102 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
103 static Cyg_ErrNo synth_disk_lookup(struct cyg_devtab_entry **tab, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
104 struct cyg_devtab_entry *sub_tab, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
105 const char *name); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
106 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
107 static DISK_FUNS(synth_disk_funs, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
108 synth_disk_read, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
109 synth_disk_write, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
110 synth_disk_get_config, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
111 synth_disk_set_config |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
112 ); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
113 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
114 // ---------------------------------------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
115 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
116 #define SYNTH_DISK_INSTANCE(_number_,_mbr_supp_, _cyl_,_hpt_,_spt_) \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
117 static synth_disk_info_t synth_disk_info##_number_ = { \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
118 num: _number_, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
119 cylinders_num: _cyl_, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
120 heads_num: _hpt_, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
121 sectors_num: _spt_, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
122 size: CYGNUM_IO_DISK_ECOSYNTH_DISK##_number_##_SIZE, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
123 filefd: -1, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
124 filename: CYGDAT_IO_DISK_ECOSYNTH_DISK##_number_##_FILENAME \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
125 }; \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
126 static DISK_CHANNEL(synth_disk_channel##_number_, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
127 synth_disk_funs, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
128 synth_disk_info##_number_, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
129 _mbr_supp_ \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
130 ); \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
131 BLOCK_DEVTAB_ENTRY(synth_disk_io##_number_, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
132 CYGDAT_IO_DISK_ECOSYNTH_DISK##_number_##_NAME, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
133 0, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
134 &cyg_io_disk_devio, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
135 synth_disk_init, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
136 synth_disk_lookup, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
137 &synth_disk_channel##_number_ \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
138 ); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
139 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
140 // ---------------------------------------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
141 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
142 #ifdef CYGVAR_DEVS_DISK_ECOSYNTH_DISK0 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
143 # ifndef CYGIMP_IO_DISK_ECOSYNTH_DISK0_MBR |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
144 SYNTH_DISK_INSTANCE(0, false, 0, 0, 0); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
145 # else |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
146 SYNTH_DISK_INSTANCE(0, true, CYGIMP_IO_DISK_ECOSYNTH_DISK0_CYLINDERS, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
147 CYGIMP_IO_DISK_ECOSYNTH_DISK0_HEADS, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
148 CYGIMP_IO_DISK_ECOSYNTH_DISK0_SECTORS); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
149 # endif |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
150 #endif |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
151 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
152 // ---------------------------------------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
153 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
154 static cyg_bool |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
155 synth_disk_init(struct cyg_devtab_entry *tab) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
156 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
157 disk_channel *chan = (disk_channel *) tab->priv; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
158 synth_disk_info_t *synth_info = (synth_disk_info_t *) chan->dev_priv; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
159 bool result = true; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
160 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
161 if (chan->init) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
162 return true; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
163 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
164 #ifdef DEBUG |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
165 diag_printf("synth disk %d init size=%d\n", |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
166 synth_info->num, synth_info->size); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
167 #endif |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
168 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
169 synth_info->filefd = cyg_hal_sys_open(synth_info->filename, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
170 CYG_HAL_SYS_O_RDWR, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
171 CYG_HAL_SYS_S_IRWXU|CYG_HAL_SYS_S_IRWXG|CYG_HAL_SYS_S_IRWXO); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
172 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
173 if (-ENOENT == synth_info->filefd) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
174 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
175 synth_info->filefd = cyg_hal_sys_open(synth_info->filename, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
176 CYG_HAL_SYS_O_RDWR|CYG_HAL_SYS_O_CREAT, 0644); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
177 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
178 if (synth_info->filefd >= 0) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
179 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
180 unsigned char b = 0x00; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
181 int i; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
182 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
183 for (i = 0; i < synth_info->size; i++) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
184 cyg_hal_sys_write(synth_info->filefd, &b, 1); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
185 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
186 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
187 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
188 if (synth_info->filefd < 0) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
189 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
190 CYG_ASSERT(false, "Can't open/create disk image file"); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
191 return false; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
192 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
193 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
194 if (result) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
195 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
196 cyg_disk_identify_t ident; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
197 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
198 ident.serial[0] = '\0'; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
199 ident.firmware_rev[0] = '\0'; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
200 ident.model_num[0] = '\0'; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
201 ident.lba_sectors_num = synth_info->size / 512; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
202 ident.cylinders_num = synth_info->cylinders_num; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
203 ident.heads_num = synth_info->heads_num; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
204 ident.sectors_num = synth_info->sectors_num; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
205 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
206 if (!(chan->callbacks->disk_init)(tab)) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
207 return false; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
208 if (ENOERR != (chan->callbacks->disk_connected)(tab, &ident)) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
209 return false; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
210 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
211 return result; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
212 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
213 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
214 static Cyg_ErrNo |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
215 synth_disk_lookup(struct cyg_devtab_entry **tab, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
216 struct cyg_devtab_entry *sub_tab, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
217 const char *name) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
218 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
219 disk_channel *chan = (disk_channel *) (*tab)->priv; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
220 return (chan->callbacks->disk_lookup(tab, sub_tab, name)); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
221 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
222 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
223 static Cyg_ErrNo |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
224 synth_disk_read(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
225 void *buf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
226 cyg_uint32 len, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
227 cyg_uint32 block_num) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
228 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
229 synth_disk_info_t *synth_info = (synth_disk_info_t *)chan->dev_priv; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
230 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
231 #ifdef DEBUG |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
232 diag_printf("synth disk read block %d\n", block_num); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
233 #endif |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
234 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
235 if (synth_info->filefd >= 0) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
236 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
237 cyg_hal_sys_lseek(synth_info->filefd, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
238 block_num * chan->info->block_size, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
239 CYG_HAL_SYS_SEEK_SET); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
240 cyg_hal_sys_read(synth_info->filefd, buf, len); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
241 return ENOERR; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
242 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
243 return -EIO; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
244 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
245 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
246 static Cyg_ErrNo |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
247 synth_disk_write(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
248 const void *buf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
249 cyg_uint32 len, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
250 cyg_uint32 block_num) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
251 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
252 synth_disk_info_t *synth_info = (synth_disk_info_t *)chan->dev_priv; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
253 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
254 #ifdef DEBUG |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
255 diag_printf("synth disk write block %d\n", block_num); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
256 #endif |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
257 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
258 if (synth_info->filefd >= 0) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
259 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
260 cyg_hal_sys_lseek(synth_info->filefd, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
261 block_num * chan->info->block_size, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
262 CYG_HAL_SYS_SEEK_SET); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
263 cyg_hal_sys_write(synth_info->filefd, buf, len); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
264 // cyg_hal_sys_fdatasync(synth_info->filefd); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
265 return ENOERR; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
266 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
267 return -EIO; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
268 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
269 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
270 static Cyg_ErrNo |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
271 synth_disk_get_config(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
272 cyg_uint32 key, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
273 const void *xbuf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
274 cyg_uint32 *len) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
275 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
276 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
277 #ifdef DEBUG |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
278 diag_printf("synth disk get config\n"); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
279 #endif |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
280 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
281 return -EINVAL; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
282 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
283 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
284 static Cyg_ErrNo |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
285 synth_disk_set_config(disk_channel *chan, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
286 cyg_uint32 key, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
287 const void *xbuf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
288 cyg_uint32 *len) |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
289 { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
290 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
291 #ifdef DEBUG |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
292 diag_printf("synth disk set config\n"); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
293 #endif |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
294 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
295 return -EINVAL; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
296 } |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
297 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
298 // ---------------------------------------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
299 // EOF synthdisk.c |
