183{
187
188 ASSERT(drive == 0 || drive == 1);
189
190 if (drive == 0)
191 driveCode = 0xA0;
192 else
193 driveCode = 0xB0;
194
196
199 Log(ide,
"Error selecting drive %d\n", drive);
200 return;
201 }
203
209
211 if (status == 0) {
212 Log(ide,
"Drive %d not present\n", drive);
213 return;
214 }
215
216
217 while (1) {
219 break;
221 }
222
224 Log(ide,
"Error trying to identify drive %d\n", drive);
225 return;
226 }
227
228 insw(ide->
base, (
void *)&ident, 256);
229
230
231 char model[41];
232 char serial[21];
233
235 model[40] = '\0';
237
239 serial[20] = '\0';
241
242 Log(ide,
"Drive %d Model: %s Serial: %s\n", drive, model, serial);
243 Log(ide,
"Drive %d %llu Sectors (%llu MBs)\n",
245
250
251
253 if (!disk) {
254 Panic(
"IDE: No memory!\n");
255 }
256
266
268}
void Disk_AddDisk(Disk *disk)
int IDE_Write(Disk *disk, void *buf, SGArray *sga, DiskCB, void *arg)
IDEDrive primaryDrives[2]
int IDE_Flush(Disk *disk, void *buf, SGArray *sga, DiskCB, void *arg)
int IDE_Read(Disk *disk, void *buf, SGArray *sga, DiskCB, void *arg)
void IDE_SwapAndTruncateString(char *str, int len)
static __inline__ void insw(int port, void *buf, int cnt)
#define Log(_module, _format,...)
void * PAlloc_AllocPage()
void * memcpy(void *dst, const void *src, size_t len)
int(* write)(Disk *, void *, SGArray *, DiskCB, void *)
int(* flush)(Disk *, void *, SGArray *, DiskCB, void *)
int(* read)(Disk *, void *, SGArray *, DiskCB, void *)
void Panic(const char *str)