Mercurial > ecos
annotate packages/io/disk/current/include/disk.h @ 2300:654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
slot intended for entire disk's own devtab.
* src/disk.c (disk_lookup): Just access pdevs_dev directly
with no adjusted offset.
(disk_init): No longer set entry 0 from device devtab.
It's unnecessary.
* include/disk.h: Merge eCosCentric CVS with public eCos CVS.
This merges (and therefore changes) the API. ChangeLog
entries have been incorporated in the correct places below.
* include/diskio.h: Also merged.
* cdl/io_disk.cdl: Also merged.
* src/disk.c: Also merged.
* src/disk.c (read_partition): Switched to favour LBA partition
information in partition tables. This also means we don't now rely
on the driver reporting a correct CHS size for the disk.
(disk_bread, disk_bwrite): API changed to take length in sectors
rather than bytes. Also call hardware driver to transfer in
(up to) max_transfer sized chunks, rather than a sector at a
time. Call in to driver now made with DSR lock claimed, to avoid a
race condition between the DSR and the calling thread.
(disk_get_config): Added phys_block_size to channel info.
* include/diskio.h (struct cyg_disk_identify_t): Added
phys_block_size and max_transfer fields. These must be filled in
by the driver.
* include/disk.h (DISK_CHANNEL_INIT): New macro. Allows a
DISK_CHANNEL to be defined dynamically.
* src/disk.c (disk_bread, disk_bwrite): Made calls to
cyg_thread_yield() dependent on presence ok kernel.
* src/disk.c (disk_bwrite): Uncomment the cyg_thread_yield() at
the end to prevent thread starvation between threads at the same
priority.
(disk_bread): Ditto.
* src/disk.c (read_partition): Changed to account for very large
disks which report bogus CHS geometry. We can only use the LBA
partition parameters in such disks.
(disk_set_config): Added some extra debug output.
* src/disk.c:
Various changes to support disconnect/reconnect of changeable
media.
* include/diskio.h: Added mount counter to disk_info structure.
* include/disk.h: Changed disk_disconnected() function to take a
pointer to a struct disk_channel rather than a struct
cyg_devtab_entry. Added mount count to disk_channel structure.
Moved include of diskio.h to end to fix declaration problems.
* src/disk.c: Fixed bug in write routine where controller result
field was not being initialized. Added signals on controller queue
condition variable after setting controller busy flag to false.
* include/disk.h: Made controller result and busy fields
volatile. Just in case.
* include/disk.h:
* src/disk.c:
Many changes. Added additional disk_controller data structure to
better reflect hardware structure. Added support for serialization
of multithreaded accesses to a single controller. Added support
for asynchronous, interrupt driven, IO operations. Various
tidies.
| author | jlarmour |
|---|---|
| date | Thu, 21 Sep 2006 16:38:38 +0000 |
| parents | b1d2762b2eec |
| children | 21a641579915 |
| rev | line source |
|---|---|
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
1 #ifndef CYGONCE_DISK_H |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
2 #define CYGONCE_DISK_H |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
3 // ==================================================================== |
|
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.h |
|
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 // Device I/O |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
8 // |
|
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 //####ECOSGPLCOPYRIGHTBEGIN#### |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
11 // ------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
12 // 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
|
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
14 // Copyright (C) 2003 Savin Zlobec |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
15 // Copyright (C) 2004, 2005 eCosCentric Limited |
|
1476
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 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
|
18 // 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
|
19 // 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
|
20 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
21 // 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
|
22 // WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
23 // 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
|
24 // for more details. |
|
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 // 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
|
27 // 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
|
28 // 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
|
29 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
30 // 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
|
31 // 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
|
32 // 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
|
33 // 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
|
34 // 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
|
35 // 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
|
36 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
37 // 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
|
38 // 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
|
39 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
40 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
41 // at http://sources.redhat.com/ecos/ecos-license/ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
42 // ------------------------------------------- |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
43 //####ECOSGPLCOPYRIGHTEND#### |
|
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 //#####DESCRIPTIONBEGIN#### |
|
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 // Author(s): savin |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
48 // Original data: gthomas |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
49 // Date: 2003-06-09 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
50 // Purpose: Internal interfaces for disk I/O drivers |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
51 // Description: |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
52 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
53 //####DESCRIPTIONEND#### |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
54 // |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
55 // ==================================================================== |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
56 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
57 // Disk I/O interfaces |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
58 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
59 #include <pkgconf/system.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
60 #include <pkgconf/io_disk.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
61 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
62 #include <cyg/infra/cyg_type.h> |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
63 #include <cyg/io/devtab.h> |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
64 #include <cyg/io/io.h> |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
65 #include <cyg/hal/drv_api.h> |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
66 #include <string.h> /* memset() */ |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
67 |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
68 // --------------------------------------------------------------------------- |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
69 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
70 typedef struct cyg_disk_partition_t cyg_disk_partition_t; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
71 typedef struct cyg_disk_info_t cyg_disk_info_t; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
72 typedef struct cyg_disk_identify_t cyg_disk_identify_t; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
73 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
74 typedef struct disk_channel disk_channel; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
75 typedef struct disk_controller disk_controller; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
76 typedef struct disk_funs disk_funs; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
77 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
78 // --------------------------------------------------------------------------- |
|
1476
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 // Pointers into upper-level driver |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
81 typedef struct { |
|
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 // Initialize the disk |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
84 cyg_bool (*disk_init)(struct cyg_devtab_entry *tab); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
85 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
86 // Disk device has been connected |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
87 Cyg_ErrNo (*disk_connected)(struct cyg_devtab_entry *tab, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
88 cyg_disk_identify_t *ident); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
89 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
90 // Disk device has been disconnected |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
91 Cyg_ErrNo (*disk_disconnected)(struct disk_channel *chan); |
|
1476
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 // Lookup disk device |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
94 Cyg_ErrNo (*disk_lookup)(struct cyg_devtab_entry **tab, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
95 struct cyg_devtab_entry *sub_tab, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
96 const char *name); |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
97 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
98 // Asynchronous block transfer done |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
99 void (*disk_transfer_done)(struct disk_channel *chan, Cyg_ErrNo res); |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
100 |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
101 } disk_callbacks_t; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
102 |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
103 #define DISK_CALLBACKS(_l, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
104 _init, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
105 _connected, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
106 _disconnected, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
107 _lookup, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
108 _transfer_done) \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
109 disk_callbacks_t _l = { \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
110 _init, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
111 _connected, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
112 _disconnected, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
113 _lookup, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
114 _transfer_done \ |
|
1476
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 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
117 extern disk_callbacks_t cyg_io_disk_callbacks; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
118 |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
119 // --------------------------------------------------------------------------- |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
120 // Private data which describes a disk controller |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
121 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
122 struct disk_controller { |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
123 cyg_drv_mutex_t lock; // Per-controller lock |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
124 cyg_drv_cond_t queue; // Access wait list |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
125 cyg_drv_cond_t async; // Async transfer waits here |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
126 void *priv; // Private data |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
127 volatile Cyg_ErrNo result; // Last operation result |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
128 cyg_bool init; // Initialized? |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
129 volatile cyg_bool busy; // Busy? |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
130 }; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
131 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
132 #define DISK_CONTROLLER(_l, _priv) \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
133 static disk_controller _l = { \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
134 priv: &_priv, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
135 init: false, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
136 busy: false \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
137 }; |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
138 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
139 // --------------------------------------------------------------------------- |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
140 // Private data which describes this channel |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
141 |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
142 struct disk_channel { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
143 disk_funs *funs; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
144 disk_callbacks_t *callbacks; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
145 void *dev_priv; // device private data |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
146 disk_controller *controller; // pointer to controller |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
147 cyg_disk_info_t *info; // disk info |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
148 cyg_disk_partition_t *partition; // partition data |
| 1685 | 149 struct cyg_devtab_entry *pdevs_dev; // partition devs devtab ents |
| 150 disk_channel *pdevs_chan; // partition devs disk chans | |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
151 cyg_bool mbr_support; // true if disk has MBR |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
152 cyg_bool valid; // true if device valid |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
153 cyg_bool init; // true if initialized |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
154 cyg_ucount16 mounts; // count of number of mounts |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
155 }; |
|
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 // Initialization macro for disk channel |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
158 #define DISK_CHANNEL(_l, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
159 _funs, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
160 _dev_priv, \ |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
161 _controller, \ |
| 1685 | 162 _mbr_supp, \ |
| 163 _max_part_num) \ | |
| 164 static struct cyg_devtab_entry _l##_part_dev[_max_part_num]; \ | |
| 165 static disk_channel _l##_part_chan[_max_part_num]; \ | |
| 166 static cyg_disk_partition_t _l##_part_tab[_max_part_num]; \ | |
| 167 static cyg_disk_info_t _l##_disk_info = { \ | |
| 168 _l##_part_tab, \ | |
| 169 _max_part_num \ | |
| 170 }; \ | |
| 171 static disk_channel _l = { \ | |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
172 &(_funs), \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
173 &cyg_io_disk_callbacks, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
174 &(_dev_priv), \ |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
175 &(_controller), \ |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
176 &(_l##_disk_info), \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
177 NULL, \ |
| 1685 | 178 _l##_part_dev, \ |
| 179 _l##_part_chan, \ | |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
180 _mbr_supp, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
181 false, \ |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
182 false, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
183 0 \ |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
184 }; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
185 |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
186 // Initialization macro for disk channel allocated elsewhere. |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
187 #define DISK_CHANNEL_INIT(_dc, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
188 _funs, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
189 _dev_priv, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
190 _controller, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
191 _disk_info, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
192 _part_dev, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
193 _part_chan, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
194 _part_tab, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
195 _mbr_supp, \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
196 _max_part_num) \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
197 CYG_MACRO_START \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
198 memset((_disk_info), 0, sizeof(cyg_disk_info_t)); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
199 (_dc).funs = &(_funs); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
200 (_dc).callbacks = &cyg_io_disk_callbacks; \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
201 (_dc).dev_priv = (_dev_priv); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
202 (_dc).controller = &(_controller); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
203 (_dc).info = &(_disk_info); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
204 (_dc).info->partitions = (_part_tab); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
205 (_dc).pdevs_dev = (_part_dev); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
206 (_dc).pdevs_chan = (_part_chan); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
207 (_dc).partition = NULL; \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
208 (_dc).mbr_support = (_mbr_supp); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
209 (_dc).valid = false; \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
210 (_dc).init = false; \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
211 (_dc).mounts = 0; \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
212 (_dc).info->partitions_num = (_max_part_num); \ |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
213 CYG_MACRO_END |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
214 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
215 // --------------------------------------------------------------------------- |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
216 // Low level interface functions |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
217 |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
218 struct disk_funs { |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
219 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
220 // Read block data into buf |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
221 Cyg_ErrNo (*read)(disk_channel *priv, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
222 void *buf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
223 cyg_uint32 len, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
224 cyg_uint32 block_num); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
225 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
226 // Write block data from buf |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
227 Cyg_ErrNo (*write)(disk_channel *priv, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
228 const void *buf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
229 cyg_uint32 len, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
230 cyg_uint32 block_num); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
231 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
232 // Get hardware configuration |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
233 Cyg_ErrNo (*get_config)(disk_channel *priv, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
234 cyg_uint32 key, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
235 const void *xbuf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
236 cyg_uint32 *len); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
237 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
238 // Set hardware configuration |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
239 Cyg_ErrNo (*set_config)(disk_channel *priv, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
240 cyg_uint32 key, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
241 const void *xbuf, |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
242 cyg_uint32 *len); |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
243 }; |
|
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 #define DISK_FUNS(_l,_read,_write,_get_config,_set_config) \ |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
246 static disk_funs _l = { \ |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
247 _read, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
248 _write, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
249 _get_config, \ |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
250 _set_config \ |
|
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 |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
253 extern cyg_devio_table_t cyg_io_disk_devio; |
|
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
254 |
|
2300
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
255 // --------------------------------------------------------------------------- |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
256 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
257 #include <cyg/io/diskio.h> |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
258 |
|
654c837cc618
* include/disk.h (DISK_CHANNEL): No need for extra _part_dev
jlarmour
parents:
1685
diff
changeset
|
259 // --------------------------------------------------------------------------- |
|
1476
f2453fae08d4
Added support for FAT filesystem. Several packages, see the individual
nickg
parents:
diff
changeset
|
260 #endif // CYGONCE_DISK_H |
