00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _ata_h
00025 #define _ata_h 1
00026
00027 #include <tistdtypes.h>
00028
00029 #define ATA_MAX_LONG_NAME_SIZE 261
00030 #define ATA_MEDIA_ID_WORDS 16
00031
00032 #define ATA_ATTR_READ_ONLY 0x01
00033 #define ATA_ATTR_HIDDEN 0x02
00034 #define ATA_ATTR_SYSTEM 0x04
00035 #define ATA_ATTR_VOLUME 0x08
00036 #define ATA_ATTR_DIRECTORY 0x10
00037 #define ATA_ATTR_ARCHIVE 0x20
00038
00039 #define ATA_ERROR_NONE 0x0000
00040 #define ATA_ERROR_UNSUPPORTED 0x0001
00041 #define ATA_ERROR_NESTED 0x0002
00042 #define ATA_ERROR_TIMEOUT 0x0004
00043 #define ATA_ERROR_BAD_MEDIA 0x0008
00044 #define ATA_ERROR_EOF 0x0010
00045 #define ATA_ERROR_FILE_NOT_FOUND 0x0020
00046 #define ATA_ERROR_ID_NOT_FOUND 0x0040
00047 #define ATA_ERROR_MEDIA_NOT_FOUND 0x0080
00048 #define ATA_ERROR_MEDIA_REMOVED 0x0100
00049 #define ATA_ERROR_DISK_FULL 0x0200
00050
00051
00052 #define ATA_ERROR_INVALID_PARAM 0x0300
00053 #define ATA_ERROR_INVALID_MODE 0x0301
00054
00055
00056 #define MMC 1
00057 #define SD 2
00058 #define NAND 3
00059 #define CF 4
00060 #define IDE 5
00061 #define MEMSTICK 6
00062
00063
00064 #ifndef NULL
00065 #define NULL ((void*)0)
00066 #endif
00067
00068 #if 0
00069 typedef unsigned int AtaUint16;
00070 typedef unsigned long AtaUint32;
00071 typedef AtaUint32 AtaSector;
00072 typedef AtaUint32 AtaFileSize;
00073 #endif
00074
00075
00076 typedef Uint16 AtaUint16;
00077 typedef Uint32 AtaUint32;
00078 typedef Uint32 AtaSector;
00079 typedef Uint32 AtaFileSize;
00080
00081
00082 #ifndef DISABLE_FAT32
00083 typedef AtaUint32 AtaCluster;
00084 typedef AtaUint32 AtaDirEntry;
00085 #else
00086 typedef AtaUint16 AtaCluster;
00087 typedef AtaUint16 AtaDirEntry;
00088 #endif
00089
00090 typedef AtaUint16 AtaError;
00091 typedef AtaUint16 AtaSerialID[ATA_MEDIA_ID_WORDS];
00092
00093 #define ATA_FAT_TYPE_12 0x01
00094 #define ATA_FAT_TYPE_16 0x04
00095 #define ATA_FAT_TYPE_32 0x0B
00096
00097
00098 typedef struct AtaStateStruct
00099 {
00100 AtaSector BootPhySector;
00101 AtaUint16 FatType;
00102 AtaUint16 WordsPerLogSector;
00103 AtaUint16 LogSectorsPerCluster;
00104 AtaUint16 RootDirEntries;
00105 AtaUint32 LogSectorsPerFat;
00106 AtaSector FirstFatSector;
00107 AtaSector RootDirSector;
00108 AtaSector FirstDataSector;
00109 AtaSector TotalSectors;
00110 AtaUint16 Data;
00111 AtaUint16 CurrentWord;
00112 AtaSector CurrentPhySector;
00113 AtaUint16 WordsPerCluster;
00114 AtaUint16 NumberOfFats;
00115 AtaUint16 MFWFlag;
00116 AtaError Err_Status;
00117 #ifdef ATA_HDD
00118
00119 AtaUint16 Multi_block_Flag;
00120
00121 #endif
00122 void *pAtaMediaState;
00123 AtaError (*AtaReset)(void *pAtaMediaState);
00124 int (*AtaCommandReadyStatusCheck)(void *pAtaMediaState);
00125 AtaError (*AtaBusyStatusCheck)(void *pAtaMediaState);
00126 AtaUint16 (*AtaGetSerialID)(void *pAtaMediaState, AtaSerialID *pID);
00127 AtaError (*AtaIssueReadCommand)(AtaSector PhySector, void *pAtaMediaState, AtaUint16 SectorCount);
00128 AtaError (*AtaDataReadyStatusCheck)(void *pAtaMediaState);
00129 AtaError (*AtaReadNextWord)(void *pAtaMediaState, AtaUint16 *pWord);
00130
00131 AtaError (*AtaReadNextWord1)(void *pAtaMediaState, AtaUint16 *pWord,AtaUint16 word_delta);
00132
00133 AtaError (*AtaReadNextNWords)(void *pAtaMediaState, AtaUint16 *pWord, AtaUint16 Count);
00134 AtaError (*AtaWriteSector)(AtaSector PhySector, void *pAtaMediaState, AtaUint16 *pWord, int ByteSwap);
00135 AtaError (*AtaWriteSectorFlush)(void *pAtaMediaState);
00136 AtaError (*AtaInitAtaMediaState)(void *pAtaState1);
00137 AtaError (*AtaFlushFat)(void *pAtaMediaState);
00138 void (*AtaErrorCallback)(unsigned short Error);
00139
00140 AtaUint16 (*AtaFileSystemType)(void *pAtaMediaState);
00141
00142 #ifdef ATA_HDD
00143
00144 AtaError (*AtaReadSectorB)(AtaSector PhySector, void *pAtaMediaState, AtaUint16 *pWord, AtaUint16 ByteSwap);
00145 AtaError (*AtaWriteSectorB)(AtaSector PhySector, void *pAtaMediaState, AtaUint16 *pWord, AtaUint16 ByteSwap);
00146 AtaError (*AtaWriteFlushB)(void *pAtaMediaState);
00147 AtaUint16 (*AtaReadWordB)(AtaSector PhySector, void *pAtaMediaState, AtaUint16 ByteOffset);
00148
00149 #endif
00150
00151
00152
00153
00154
00155
00156
00157
00158 AtaUint16 (*get_mod_time)();
00159 AtaUint16 (*get_mod_date)();
00160 AtaUint16 (*get_time)();
00161 AtaUint16 (*get_date)();
00162 AtaUint16 *_AtaWriteBuffer;
00163 AtaSector _AtaWriteCurrentPhySector;
00164 } AtaState;
00165
00166
00167 typedef struct AtaFileStruct
00168 {
00169 char Filename[9];
00170
00171 char Ext[4];
00172
00173 AtaUint16 Attributes;
00174 AtaUint16 Time;
00175 AtaUint16 Date;
00176 AtaUint16 reserved1;
00177 AtaCluster StartCluster;
00178 AtaFileSize Size;
00179 AtaCluster Cluster;
00180 AtaUint16 WordInCluster;
00181 AtaCluster NextBrokenCluster;
00182 AtaCluster PrevBrokenCluster;
00183 AtaSector CurrentDirSector;
00184 AtaDirEntry CurrentDirEntry;
00185 AtaDirEntry CurrentDirSectorTag;
00186 AtaCluster StartDirCluster;
00187
00188
00189 AtaFileSize CurrentByte;
00190 AtaState *pDrive;
00191 } AtaFile;
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203 AtaError ATA_systemInit(AtaState *pAtaDrive, AtaUint16 disk_type);
00204
00205 AtaUint16 ATA_getSerialID(AtaState *pAtaDrive, AtaSerialID *pID);
00206
00207
00208
00209
00210 AtaError ATA_read(AtaFile *pAtaFile, AtaUint16 *Data, AtaUint16 Words);
00211 AtaError ATA_readLittleEndian(AtaFile *pAtaFile, AtaUint16 *Data, AtaUint16 Words);
00212
00213 AtaError ATA_seek(AtaFile *pAtaFile, AtaFileSize OffsetFromStart);
00214
00215 AtaError ATA_seek_relative(AtaFile *pAtaFile, long OffsetFromCurrent);
00216 AtaError ATA_sleep(AtaState *pAtaDrive);
00217
00218
00219
00220
00221 AtaError ATA_fileInit(AtaState *pAtaDrive, AtaFile *pAtaFile);
00222 AtaError ATA_cdRoot(AtaFile *pAtaFile);
00223 AtaError ATA_cd(AtaFile *pAtaFile);
00224 AtaError ATA_findFirst(AtaFile *pAtaFile);
00225 AtaError ATA_findNext(AtaFile *pAtaFile);
00226 int ATA_isDir(AtaFile *pAtaFile);
00227 void ATA_errorCallback(unsigned short Error);
00228
00229
00230
00231
00232 AtaError ATA_getLongName(AtaFile *pAtaFile, char *LongName, AtaUint16 StartOffset, AtaUint16 Length);
00233
00234
00235
00236
00237 AtaError ATA_tell(AtaFile *pAtaFile, AtaFileSize *pOffsetInFile);
00238
00239
00240
00241
00242 AtaError ATA_create(AtaFile *pAtaFile);
00243 AtaError ATA_createDirectory(AtaFile *pAtaFile);
00244 AtaError ATA_delete(AtaFile *pAtaFile);
00245 AtaError ATA_rename(AtaFile *pAtaFile);
00246 AtaError ATA_write(AtaFile *pAtaFile, AtaUint16 *Data, AtaUint16 Words);
00247 AtaError ATA_close(AtaFile *pAtaFile);
00248
00249
00250
00251
00252 AtaError ATA_format(AtaState *pDrive, int flag);
00253
00254
00255
00256
00257 AtaError ATA_setFileName(AtaFile *pAtaFile, char *name, char *ext);
00258 AtaError ATA_setDirectoryName(AtaFile *pAtaFile, char *dirname);
00259
00260 AtaUint32 ATA_diskSize(AtaState *pAtaState, AtaError *ret_stat);
00261 AtaUint32 ATA_diskUsed(AtaState *pAtaState, AtaError *ret_stat);
00262 AtaUint32 ATA_diskFree(AtaState *pAtaState, AtaError *ret_stat);
00263
00264
00265 AtaError ATA_setDateTime(AtaFile *pAtaFile);
00266 AtaError ATA_setAttr(AtaFile *pAtaFile, AtaUint16 Attr);
00267 AtaError ATA_vol(AtaState *pAtaDrive, char *volname);
00268 AtaError ATA_label(AtaState *pAtaDrive, char *volname);
00269 AtaError ATA_setLongFileName( AtaFile *pAtaFile, char *LongName );
00270 AtaError ATA_createLong(AtaFile *pAtaFile, char *longname);
00271 AtaError ATA_deleteLong(AtaFile *pAtaFile);
00272 AtaError ATA_renameLong(AtaFile *pAtaFile, char *longnamenew);
00273 AtaError ATA_setLongDirectoryName( AtaFile *pAtaFile, char *LongName );
00274 AtaError ATA_createDirectoryLong(AtaFile *pAtaFile, char *longname);
00275
00276
00277 AtaError ATA_readSector(AtaSector PhySector, AtaState* pAtaState, AtaUint16 *Word, int ByteSwap);
00278 AtaError ATA_writeSector(AtaSector PhySector, AtaState* pAtaState, AtaUint16 *Word, int ByteSwap);
00279
00280
00281 void ATA_enableMFW(AtaState *pAtaState);
00282 #ifdef ATA_HDD
00283 void ATA_enableMultiBlock(AtaState *pAtaState);
00284 #endif
00285
00286
00287 AtaError ATA_read_b(AtaFile *pAtaFile, AtaUint16 *Data, AtaUint16 bytes);
00288 AtaError ATA_seek_b(AtaFile *pAtaFile, AtaUint32 ByteOffsetFromStart);
00289 AtaError ATA_write_b(AtaFile *pAtaFile, AtaUint16 *Data, AtaUint16 bytes);
00290 AtaError ATA_tell_b(AtaFile *pAtaFile, AtaFileSize *pByteOffsetInFile);
00291
00292 #endif
00293