Mercurial > ecos-v3_0-branch
annotate packages/devs/disk/ide/current/src/ide_disk.h @ 2863:7d8c61e6225c default tip
* Added execute permissions to files missed in conversion from CVS
| author | alexs |
|---|---|
| date | Thu, 26 Mar 2009 20:39:18 +0000 |
| parents | 74dbf4c3f2e1 |
| children |
| rev | line source |
|---|---|
| 1814 | 1 #ifndef CYGONCE_IDE_DISK_H |
| 2 #define CYGONCE_IDE_DISK_H | |
| 3 //========================================================================== | |
| 4 // | |
| 5 // ide_disk.h | |
| 6 // | |
| 7 // IDE polled mode disk driver defines | |
| 8 // | |
| 9 //========================================================================== | |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
10 // ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
11 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
12 // 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:
2299
diff
changeset
|
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc. |
| 1814 | 14 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
15 // 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:
2299
diff
changeset
|
16 // 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:
2299
diff
changeset
|
17 // 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:
2299
diff
changeset
|
18 // version. |
| 1814 | 19 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
20 // 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:
2299
diff
changeset
|
21 // 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:
2299
diff
changeset
|
22 // 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:
2299
diff
changeset
|
23 // for more details. |
| 1814 | 24 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
25 // 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:
2299
diff
changeset
|
26 // 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:
2299
diff
changeset
|
27 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| 1814 | 28 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
29 // 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:
2299
diff
changeset
|
30 // 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:
2299
diff
changeset
|
31 // 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:
2299
diff
changeset
|
32 // 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:
2299
diff
changeset
|
33 // 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:
2299
diff
changeset
|
34 // 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:
2299
diff
changeset
|
35 // General Public License v2. |
| 1814 | 36 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
37 // 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:
2299
diff
changeset
|
38 // 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:
2299
diff
changeset
|
39 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
2299
diff
changeset
|
40 // ####ECOSGPLCOPYRIGHTEND#### |
| 1814 | 41 //========================================================================== |
| 42 //#####DESCRIPTIONBEGIN#### | |
| 43 // | |
| 44 // Author(s): iz | |
| 45 // Contributors: | |
| 46 // Date: 2004-10-16 | |
| 47 // | |
| 48 //####DESCRIPTIONEND#### | |
| 49 // | |
| 50 //========================================================================== | |
| 51 | |
| 52 // IDE Register Indices | |
| 53 #define IDE_REG_DATA 0 | |
| 54 #define IDE_REG_ERROR 1 | |
| 55 #define IDE_REG_FEATURES 1 | |
| 56 #define IDE_REG_COUNT 2 | |
| 57 #define IDE_REG_REASON 2 // ATAPI | |
| 58 #define IDE_REG_LBALOW 3 | |
| 59 #define IDE_REG_LBAMID 4 | |
| 60 #define IDE_REG_LBAHI 5 | |
| 61 #define IDE_REG_DEVICE 6 | |
| 62 #define IDE_REG_STATUS 7 | |
| 63 #define IDE_REG_COMMAND 7 | |
| 64 | |
| 65 #define IDE_STAT_BSY 0x80 | |
| 66 #define IDE_STAT_DRDY 0x40 | |
| 67 #define IDE_STAT_SERVICE 0x10 | |
| 68 #define IDE_STAT_DRQ 0x08 | |
| 69 #define IDE_STAT_CORR 0x04 | |
| 70 #define IDE_STAT_ERR 0x01 | |
| 71 | |
| 72 #define IDE_REASON_REL 0x04 | |
| 73 #define IDE_REASON_IO 0x02 | |
| 74 #define IDE_REASON_COD 0x01 | |
| 75 | |
| 76 /* flag values */ | |
| 77 #define IDE_DEV_PRESENT 1 // Device is present | |
| 78 #define IDE_DEV_PACKET 2 // Supports packet interface | |
| 79 #define IDE_DEV_ADDR48 3 // Supports 48bit addressing | |
| 80 | |
| 81 typedef struct ide_identify_data_t_ { | |
| 82 cyg_uint16 general_conf; // 00 : general configuration | |
| 83 cyg_uint16 num_cylinders; // 01 : number of cylinders (default CHS trans) | |
| 84 cyg_uint16 reserved0; // 02 : reserved | |
| 85 cyg_uint16 num_heads; // 03 : number of heads (default CHS trans) | |
| 86 cyg_uint16 num_ub_per_track; // 04 : number of unformatted bytes per track | |
| 87 cyg_uint16 num_ub_per_sector; // 05 : number of unformatted bytes per sector | |
| 88 cyg_uint16 num_sectors; // 06 : number of sectors per track (default CHS trans) | |
| 89 cyg_uint16 num_card_sectors[2]; // 07-08 : number of sectors per card | |
| 90 cyg_uint16 reserved1; // 09 : reserved | |
| 91 cyg_uint16 serial[10]; // 10-19 : serial number (string) | |
| 92 cyg_uint16 buffer_type; // 20 : buffer type (dual ported) | |
| 93 cyg_uint16 buffer_size; // 21 : buffer size in 512 increments | |
| 94 cyg_uint16 num_ECC_bytes; // 22 : number of ECC bytes passed on R/W Long cmds | |
| 95 cyg_uint16 firmware_rev[4]; // 23-26 : firmware revision (string) | |
| 96 cyg_uint16 model_num[20]; // 27-46 : model number (string) | |
| 97 cyg_uint16 rw_mult_support; // 47 : max number of sectors on R/W multiple cmds | |
| 98 cyg_uint16 reserved2; // 48 : reserved | |
| 99 cyg_uint16 capabilities; // 49 : LBA, DMA, IORDY support indicator | |
| 100 cyg_uint16 reserved3; // 50 : reserved | |
| 101 cyg_uint16 pio_xferc_timing; // 51 : PIO data transfer cycle timing mode | |
| 102 cyg_uint16 dma_xferc_timing; // 52 : single word DMA data transfer cycle timing mode | |
| 103 cyg_uint16 cur_field_validity; // 53 : words 54-58 validity (0 == not valid) | |
| 104 cyg_uint16 cur_cylinders; // 54 : number of current cylinders | |
| 105 cyg_uint16 cur_heads; // 55 : number of current heads | |
| 106 cyg_uint16 cur_spt; // 56 : number of current sectors per track | |
| 107 cyg_uint16 cur_capacity[2]; // 57-58 : current capacity in sectors | |
| 108 cyg_uint16 mult_sectors; // 59 : multiple sector setting | |
| 109 cyg_uint16 lba_total_sectors[2]; // 60-61 : total sectors in LBA mode | |
| 110 cyg_uint16 sw_dma; // 62 : single word DMA support | |
| 111 cyg_uint16 mw_dma; // 63 : multi word DMA support | |
| 112 cyg_uint16 apio_modes; // 64 : advanced PIO transfer mode supported | |
| 113 cyg_uint16 min_dma_timing; // 65 : minimum multiword DMA transfer cycle | |
| 114 cyg_uint16 rec_dma_timing; // 66 : recommended multiword DMA cycle | |
| 115 cyg_uint16 min_pio_timing; // 67 : min PIO transfer time without flow control | |
| 116 cyg_uint16 min_pio_iordy_timing; // 68 : min PIO transfer time with IORDY flow control | |
| 117 // cyg_uint16 reserved4[187]; // 69-255: reserved | |
| 118 } ide_identify_data_t; | |
| 119 | |
| 120 | |
| 121 typedef struct ide_disk_info_t_ { | |
| 122 cyg_uint8 port; | |
| 123 cyg_uint8 chan; | |
| 124 } ide_disk_info_t; | |
| 125 | |
| 126 // ---------------------------------------------------------------------------- | |
| 127 | |
| 128 static cyg_bool ide_disk_init(struct cyg_devtab_entry *tab); | |
| 129 | |
| 130 static Cyg_ErrNo ide_disk_read(disk_channel *chan, | |
| 131 void *buf, | |
| 132 cyg_uint32 len, | |
| 133 cyg_uint32 block_num); | |
| 134 | |
| 135 | |
| 136 static Cyg_ErrNo ide_disk_write(disk_channel *chan, | |
| 137 const void *buf, | |
| 138 cyg_uint32 len, | |
| 139 cyg_uint32 block_num); | |
| 140 | |
| 141 static Cyg_ErrNo ide_disk_get_config(disk_channel *chan, | |
| 142 cyg_uint32 key, | |
| 143 const void *xbuf, | |
| 144 cyg_uint32 *len); | |
| 145 | |
| 146 static Cyg_ErrNo ide_disk_set_config(disk_channel *chan, | |
| 147 cyg_uint32 key, | |
| 148 const void *xbuf, | |
| 149 cyg_uint32 *len); | |
| 150 | |
| 151 static Cyg_ErrNo ide_disk_lookup(struct cyg_devtab_entry **tab, | |
| 152 struct cyg_devtab_entry *sub_tab, | |
| 153 const char *name); | |
| 154 | |
|
2299
04006a2b020d
* src/ide_disk.h: DISK_FUNS is now implicitly static.
jlarmour
parents:
1814
diff
changeset
|
155 DISK_FUNS(ide_disk_funs, |
|
04006a2b020d
* src/ide_disk.h: DISK_FUNS is now implicitly static.
jlarmour
parents:
1814
diff
changeset
|
156 ide_disk_read, |
|
04006a2b020d
* src/ide_disk.h: DISK_FUNS is now implicitly static.
jlarmour
parents:
1814
diff
changeset
|
157 ide_disk_write, |
|
04006a2b020d
* src/ide_disk.h: DISK_FUNS is now implicitly static.
jlarmour
parents:
1814
diff
changeset
|
158 ide_disk_get_config, |
|
04006a2b020d
* src/ide_disk.h: DISK_FUNS is now implicitly static.
jlarmour
parents:
1814
diff
changeset
|
159 ide_disk_set_config |
| 1814 | 160 ); |
| 161 | |
| 162 // ---------------------------------------------------------------------------- | |
| 163 | |
| 164 #define IDE_DISK_INSTANCE(_number_,_port_,_chan_,_mbr_supp_,_name_) \ | |
| 165 static ide_disk_info_t ide_disk_info##_number_ = { \ | |
| 166 port: (cyg_uint8) _port_, \ | |
| 167 chan: (cyg_uint8) _chan_ \ | |
| 168 }; \ | |
| 169 DISK_CHANNEL(ide_disk_channel##_number_, \ | |
| 170 ide_disk_funs, \ | |
| 171 ide_disk_info##_number_, \ | |
|
2299
04006a2b020d
* src/ide_disk.h: DISK_FUNS is now implicitly static.
jlarmour
parents:
1814
diff
changeset
|
172 ide_disk_controller, \ |
| 1814 | 173 _mbr_supp_, \ |
| 174 4 \ | |
| 175 ); \ | |
| 176 BLOCK_DEVTAB_ENTRY(ide_disk_io##_number_, \ | |
| 177 _name_, \ | |
| 178 0, \ | |
| 179 &cyg_io_disk_devio, \ | |
| 180 ide_disk_init, \ | |
| 181 ide_disk_lookup, \ | |
| 182 &ide_disk_channel##_number_ \ | |
| 183 ); | |
| 184 | |
| 185 // ---------------------------------------------------------------------------- | |
| 186 | |
| 187 #endif // CYGONCE_IDE_DISK_H |
