Commit 4f431960976661fc60c5e7e05df6550cc592bceb
1 parent
d8f699cb
No functional changes: remove dead code and fix indentation & wrapping lines.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3535 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
196 additions
and
199 deletions
hw/fdc.c
... | ... | @@ -106,7 +106,7 @@ static void fd_init (fdrive_t *drv, BlockDriverState *bs) |
106 | 106 | } |
107 | 107 | |
108 | 108 | static int _fd_sector (uint8_t head, uint8_t track, |
109 | - uint8_t sect, uint8_t last_sect) | |
109 | + uint8_t sect, uint8_t last_sect) | |
110 | 110 | { |
111 | 111 | return (((track * 2) + head) * last_sect) + sect - 1; |
112 | 112 | } |
... | ... | @@ -124,7 +124,7 @@ static int fd_seek (fdrive_t *drv, uint8_t head, uint8_t track, uint8_t sect, |
124 | 124 | int ret; |
125 | 125 | |
126 | 126 | if (track > drv->max_track || |
127 | - (head != 0 && (drv->flags & FDISK_DBL_SIDES) == 0)) { | |
127 | + (head != 0 && (drv->flags & FDISK_DBL_SIDES) == 0)) { | |
128 | 128 | FLOPPY_DPRINTF("try to read %d %02x %02x (max=%d %d %02x %02x)\n", |
129 | 129 | head, track, sect, 1, |
130 | 130 | (drv->flags & FDISK_DBL_SIDES) == 0 ? 0 : 1, |
... | ... | @@ -149,8 +149,8 @@ static int fd_seek (fdrive_t *drv, uint8_t head, uint8_t track, uint8_t sect, |
149 | 149 | } |
150 | 150 | #endif |
151 | 151 | drv->head = head; |
152 | - if (drv->track != track) | |
153 | - ret = 1; | |
152 | + if (drv->track != track) | |
153 | + ret = 1; | |
154 | 154 | drv->track = track; |
155 | 155 | drv->sect = sect; |
156 | 156 | } |
... | ... | @@ -236,58 +236,58 @@ static void fd_revalidate (fdrive_t *drv) |
236 | 236 | |
237 | 237 | FLOPPY_DPRINTF("revalidate\n"); |
238 | 238 | if (drv->bs != NULL && bdrv_is_inserted(drv->bs)) { |
239 | - ro = bdrv_is_read_only(drv->bs); | |
240 | - bdrv_get_geometry_hint(drv->bs, &nb_heads, &max_track, &last_sect); | |
241 | - if (nb_heads != 0 && max_track != 0 && last_sect != 0) { | |
242 | - FLOPPY_DPRINTF("User defined disk (%d %d %d)", | |
239 | + ro = bdrv_is_read_only(drv->bs); | |
240 | + bdrv_get_geometry_hint(drv->bs, &nb_heads, &max_track, &last_sect); | |
241 | + if (nb_heads != 0 && max_track != 0 && last_sect != 0) { | |
242 | + FLOPPY_DPRINTF("User defined disk (%d %d %d)", | |
243 | 243 | nb_heads - 1, max_track, last_sect); |
244 | - } else { | |
245 | - bdrv_get_geometry(drv->bs, &nb_sectors); | |
246 | - match = -1; | |
247 | - first_match = -1; | |
248 | - for (i = 0;; i++) { | |
249 | - parse = &fd_formats[i]; | |
250 | - if (parse->drive == FDRIVE_DRV_NONE) | |
251 | - break; | |
252 | - if (drv->drive == parse->drive || | |
253 | - drv->drive == FDRIVE_DRV_NONE) { | |
254 | - size = (parse->max_head + 1) * parse->max_track * | |
255 | - parse->last_sect; | |
256 | - if (nb_sectors == size) { | |
257 | - match = i; | |
258 | - break; | |
259 | - } | |
260 | - if (first_match == -1) | |
261 | - first_match = i; | |
262 | - } | |
263 | - } | |
264 | - if (match == -1) { | |
265 | - if (first_match == -1) | |
266 | - match = 1; | |
267 | - else | |
268 | - match = first_match; | |
269 | - parse = &fd_formats[match]; | |
270 | - } | |
271 | - nb_heads = parse->max_head + 1; | |
272 | - max_track = parse->max_track; | |
273 | - last_sect = parse->last_sect; | |
274 | - drv->drive = parse->drive; | |
275 | - FLOPPY_DPRINTF("%s floppy disk (%d h %d t %d s) %s\n", parse->str, | |
244 | + } else { | |
245 | + bdrv_get_geometry(drv->bs, &nb_sectors); | |
246 | + match = -1; | |
247 | + first_match = -1; | |
248 | + for (i = 0;; i++) { | |
249 | + parse = &fd_formats[i]; | |
250 | + if (parse->drive == FDRIVE_DRV_NONE) | |
251 | + break; | |
252 | + if (drv->drive == parse->drive || | |
253 | + drv->drive == FDRIVE_DRV_NONE) { | |
254 | + size = (parse->max_head + 1) * parse->max_track * | |
255 | + parse->last_sect; | |
256 | + if (nb_sectors == size) { | |
257 | + match = i; | |
258 | + break; | |
259 | + } | |
260 | + if (first_match == -1) | |
261 | + first_match = i; | |
262 | + } | |
263 | + } | |
264 | + if (match == -1) { | |
265 | + if (first_match == -1) | |
266 | + match = 1; | |
267 | + else | |
268 | + match = first_match; | |
269 | + parse = &fd_formats[match]; | |
270 | + } | |
271 | + nb_heads = parse->max_head + 1; | |
272 | + max_track = parse->max_track; | |
273 | + last_sect = parse->last_sect; | |
274 | + drv->drive = parse->drive; | |
275 | + FLOPPY_DPRINTF("%s floppy disk (%d h %d t %d s) %s\n", parse->str, | |
276 | 276 | nb_heads, max_track, last_sect, ro ? "ro" : "rw"); |
277 | - } | |
278 | - if (nb_heads == 1) { | |
279 | - drv->flags &= ~FDISK_DBL_SIDES; | |
280 | - } else { | |
281 | - drv->flags |= FDISK_DBL_SIDES; | |
282 | - } | |
283 | - drv->max_track = max_track; | |
284 | - drv->last_sect = last_sect; | |
285 | - drv->ro = ro; | |
277 | + } | |
278 | + if (nb_heads == 1) { | |
279 | + drv->flags &= ~FDISK_DBL_SIDES; | |
280 | + } else { | |
281 | + drv->flags |= FDISK_DBL_SIDES; | |
282 | + } | |
283 | + drv->max_track = max_track; | |
284 | + drv->last_sect = last_sect; | |
285 | + drv->ro = ro; | |
286 | 286 | } else { |
287 | - FLOPPY_DPRINTF("No disk in drive\n"); | |
287 | + FLOPPY_DPRINTF("No disk in drive\n"); | |
288 | 288 | drv->last_sect = 0; |
289 | - drv->max_track = 0; | |
290 | - drv->flags &= ~FDISK_DBL_SIDES; | |
289 | + drv->max_track = 0; | |
290 | + drv->flags &= ~FDISK_DBL_SIDES; | |
291 | 291 | } |
292 | 292 | } |
293 | 293 | |
... | ... | @@ -414,28 +414,28 @@ static uint32_t fdctrl_read (void *opaque, uint32_t reg) |
414 | 414 | } else { |
415 | 415 | retval = (uint32_t)(-1); |
416 | 416 | } |
417 | - break; | |
417 | + break; | |
418 | 418 | case 0x01: |
419 | - retval = fdctrl_read_statusB(fdctrl); | |
420 | - break; | |
419 | + retval = fdctrl_read_statusB(fdctrl); | |
420 | + break; | |
421 | 421 | case 0x02: |
422 | - retval = fdctrl_read_dor(fdctrl); | |
423 | - break; | |
422 | + retval = fdctrl_read_dor(fdctrl); | |
423 | + break; | |
424 | 424 | case 0x03: |
425 | 425 | retval = fdctrl_read_tape(fdctrl); |
426 | - break; | |
426 | + break; | |
427 | 427 | case 0x04: |
428 | 428 | retval = fdctrl_read_main_status(fdctrl); |
429 | - break; | |
429 | + break; | |
430 | 430 | case 0x05: |
431 | 431 | retval = fdctrl_read_data(fdctrl); |
432 | - break; | |
432 | + break; | |
433 | 433 | case 0x07: |
434 | 434 | retval = fdctrl_read_dir(fdctrl); |
435 | - break; | |
435 | + break; | |
436 | 436 | default: |
437 | - retval = (uint32_t)(-1); | |
438 | - break; | |
437 | + retval = (uint32_t)(-1); | |
438 | + break; | |
439 | 439 | } |
440 | 440 | FLOPPY_DPRINTF("read reg%d: 0x%02x\n", reg & 7, retval); |
441 | 441 | |
... | ... | @@ -450,19 +450,19 @@ static void fdctrl_write (void *opaque, uint32_t reg, uint32_t value) |
450 | 450 | |
451 | 451 | switch (reg & 0x07) { |
452 | 452 | case 0x02: |
453 | - fdctrl_write_dor(fdctrl, value); | |
454 | - break; | |
453 | + fdctrl_write_dor(fdctrl, value); | |
454 | + break; | |
455 | 455 | case 0x03: |
456 | 456 | fdctrl_write_tape(fdctrl, value); |
457 | - break; | |
457 | + break; | |
458 | 458 | case 0x04: |
459 | 459 | fdctrl_write_rate(fdctrl, value); |
460 | - break; | |
460 | + break; | |
461 | 461 | case 0x05: |
462 | 462 | fdctrl_write_data(fdctrl, value); |
463 | - break; | |
463 | + break; | |
464 | 464 | default: |
465 | - break; | |
465 | + break; | |
466 | 466 | } |
467 | 467 | } |
468 | 468 | |
... | ... | @@ -615,7 +615,8 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped, |
615 | 615 | fdctrl_reset(fdctrl, 0); |
616 | 616 | fdctrl->state = FD_CTRL_ACTIVE; |
617 | 617 | if (mem_mapped) { |
618 | - io_mem = cpu_register_io_memory(0, fdctrl_mem_read, fdctrl_mem_write, fdctrl); | |
618 | + io_mem = cpu_register_io_memory(0, fdctrl_mem_read, fdctrl_mem_write, | |
619 | + fdctrl); | |
619 | 620 | cpu_register_physical_memory(io_base, 0x08, io_mem); |
620 | 621 | } else { |
621 | 622 | register_ioport_read((uint32_t)io_base + 0x01, 5, 1, &fdctrl_read, |
... | ... | @@ -665,9 +666,9 @@ static void fdctrl_raise_irq (fdctrl_t *fdctrl, uint8_t status) |
665 | 666 | { |
666 | 667 | // Sparc mutation |
667 | 668 | if (fdctrl->sun4m && !fdctrl->dma_en) { |
668 | - fdctrl->state &= ~FD_CTRL_BUSY; | |
669 | - fdctrl->int_status = status; | |
670 | - return; | |
669 | + fdctrl->state &= ~FD_CTRL_BUSY; | |
670 | + fdctrl->int_status = status; | |
671 | + return; | |
671 | 672 | } |
672 | 673 | if (~(fdctrl->state & FD_CTRL_INTR)) { |
673 | 674 | qemu_set_irq(fdctrl->irq, 1); |
... | ... | @@ -727,9 +728,9 @@ static uint32_t fdctrl_read_dor (fdctrl_t *fdctrl) |
727 | 728 | |
728 | 729 | /* Drive motors state indicators */ |
729 | 730 | if (drv0(fdctrl)->drflags & FDRIVE_MOTOR_ON) |
730 | - retval |= 1 << 5; | |
731 | + retval |= 1 << 5; | |
731 | 732 | if (drv1(fdctrl)->drflags & FDRIVE_MOTOR_ON) |
732 | - retval |= 1 << 4; | |
733 | + retval |= 1 << 4; | |
733 | 734 | /* DMA enable */ |
734 | 735 | retval |= fdctrl->dma_en << 3; |
735 | 736 | /* Reset indicator */ |
... | ... | @@ -836,9 +837,9 @@ static void fdctrl_write_rate (fdctrl_t *fdctrl, uint32_t value) |
836 | 837 | { |
837 | 838 | /* Reset mode */ |
838 | 839 | if (fdctrl->state & FD_CTRL_RESET) { |
839 | - FLOPPY_DPRINTF("Floppy controller in RESET state !\n"); | |
840 | - return; | |
841 | - } | |
840 | + FLOPPY_DPRINTF("Floppy controller in RESET state !\n"); | |
841 | + return; | |
842 | + } | |
842 | 843 | FLOPPY_DPRINTF("select rate register set to 0x%02x\n", value); |
843 | 844 | /* Reset: autoclear */ |
844 | 845 | if (value & 0x80) { |
... | ... | @@ -856,6 +857,7 @@ static void fdctrl_write_rate (fdctrl_t *fdctrl, uint32_t value) |
856 | 857 | static int fdctrl_media_changed(fdrive_t *drv) |
857 | 858 | { |
858 | 859 | int ret; |
860 | + | |
859 | 861 | if (!drv->bs) |
860 | 862 | return 0; |
861 | 863 | ret = bdrv_media_changed(drv->bs); |
... | ... | @@ -871,7 +873,7 @@ static uint32_t fdctrl_read_dir (fdctrl_t *fdctrl) |
871 | 873 | uint32_t retval = 0; |
872 | 874 | |
873 | 875 | if (fdctrl_media_changed(drv0(fdctrl)) || |
874 | - fdctrl_media_changed(drv1(fdctrl))) | |
876 | + fdctrl_media_changed(drv1(fdctrl))) | |
875 | 877 | retval |= 0x80; |
876 | 878 | if (retval != 0) |
877 | 879 | FLOPPY_DPRINTF("Floppy digital input register: 0x%02x\n", retval); |
... | ... | @@ -918,7 +920,7 @@ static void fdctrl_unimplemented (fdctrl_t *fdctrl) |
918 | 920 | |
919 | 921 | /* Callback for transfer end (stop or abort) */ |
920 | 922 | static void fdctrl_stop_transfer (fdctrl_t *fdctrl, uint8_t status0, |
921 | - uint8_t status1, uint8_t status2) | |
923 | + uint8_t status1, uint8_t status2) | |
922 | 924 | { |
923 | 925 | fdrive_t *cur_drv; |
924 | 926 | |
... | ... | @@ -1000,12 +1002,12 @@ static void fdctrl_start_transfer (fdctrl_t *fdctrl, int direction) |
1000 | 1002 | if (fdctrl->fifo[5] == 00) { |
1001 | 1003 | fdctrl->data_len = fdctrl->fifo[8]; |
1002 | 1004 | } else { |
1003 | - int tmp; | |
1005 | + int tmp; | |
1004 | 1006 | fdctrl->data_len = 128 << (fdctrl->fifo[5] > 7 ? 7 : fdctrl->fifo[5]); |
1005 | 1007 | tmp = (cur_drv->last_sect - ks + 1); |
1006 | 1008 | if (fdctrl->fifo[0] & 0x80) |
1007 | 1009 | tmp += cur_drv->last_sect; |
1008 | - fdctrl->data_len *= tmp; | |
1010 | + fdctrl->data_len *= tmp; | |
1009 | 1011 | } |
1010 | 1012 | fdctrl->eot = fdctrl->fifo[6]; |
1011 | 1013 | if (fdctrl->dma_en) { |
... | ... | @@ -1014,9 +1016,9 @@ static void fdctrl_start_transfer (fdctrl_t *fdctrl, int direction) |
1014 | 1016 | dma_mode = DMA_get_channel_mode(fdctrl->dma_chann); |
1015 | 1017 | dma_mode = (dma_mode >> 2) & 3; |
1016 | 1018 | FLOPPY_DPRINTF("dma_mode=%d direction=%d (%d - %d)\n", |
1017 | - dma_mode, direction, | |
1019 | + dma_mode, direction, | |
1018 | 1020 | (128 << fdctrl->fifo[5]) * |
1019 | - (cur_drv->last_sect - ks + 1), fdctrl->data_len); | |
1021 | + (cur_drv->last_sect - ks + 1), fdctrl->data_len); | |
1020 | 1022 | if (((direction == FD_DIR_SCANE || direction == FD_DIR_SCANL || |
1021 | 1023 | direction == FD_DIR_SCANH) && dma_mode == 0) || |
1022 | 1024 | (direction == FD_DIR_WRITE && dma_mode == 2) || |
... | ... | @@ -1030,7 +1032,7 @@ static void fdctrl_start_transfer (fdctrl_t *fdctrl, int direction) |
1030 | 1032 | DMA_schedule(fdctrl->dma_chann); |
1031 | 1033 | return; |
1032 | 1034 | } else { |
1033 | - FLOPPY_ERROR("dma_mode=%d direction=%d\n", dma_mode, direction); | |
1035 | + FLOPPY_ERROR("dma_mode=%d direction=%d\n", dma_mode, direction); | |
1034 | 1036 | } |
1035 | 1037 | } |
1036 | 1038 | FLOPPY_DPRINTF("start non-DMA transfer\n"); |
... | ... | @@ -1070,11 +1072,11 @@ static int fdctrl_transfer_handler (void *opaque, int nchan, |
1070 | 1072 | if (dma_len > fdctrl->data_len) |
1071 | 1073 | dma_len = fdctrl->data_len; |
1072 | 1074 | if (cur_drv->bs == NULL) { |
1073 | - if (fdctrl->data_dir == FD_DIR_WRITE) | |
1074 | - fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00); | |
1075 | - else | |
1076 | - fdctrl_stop_transfer(fdctrl, 0x40, 0x00, 0x00); | |
1077 | - len = 0; | |
1075 | + if (fdctrl->data_dir == FD_DIR_WRITE) | |
1076 | + fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00); | |
1077 | + else | |
1078 | + fdctrl_stop_transfer(fdctrl, 0x40, 0x00, 0x00); | |
1079 | + len = 0; | |
1078 | 1080 | goto transfer_error; |
1079 | 1081 | } |
1080 | 1082 | rel_pos = fdctrl->data_pos % FD_SECTOR_LEN; |
... | ... | @@ -1088,45 +1090,39 @@ static int fdctrl_transfer_handler (void *opaque, int nchan, |
1088 | 1090 | cur_drv->track, cur_drv->sect, fd_sector(cur_drv), |
1089 | 1091 | fd_sector(cur_drv) * 512); |
1090 | 1092 | if (fdctrl->data_dir != FD_DIR_WRITE || |
1091 | - len < FD_SECTOR_LEN || rel_pos != 0) { | |
1093 | + len < FD_SECTOR_LEN || rel_pos != 0) { | |
1092 | 1094 | /* READ & SCAN commands and realign to a sector for WRITE */ |
1093 | 1095 | if (bdrv_read(cur_drv->bs, fd_sector(cur_drv), |
1094 | - fdctrl->fifo, 1) < 0) { | |
1096 | + fdctrl->fifo, 1) < 0) { | |
1095 | 1097 | FLOPPY_DPRINTF("Floppy: error getting sector %d\n", |
1096 | 1098 | fd_sector(cur_drv)); |
1097 | 1099 | /* Sure, image size is too small... */ |
1098 | 1100 | memset(fdctrl->fifo, 0, FD_SECTOR_LEN); |
1099 | 1101 | } |
1100 | 1102 | } |
1101 | - switch (fdctrl->data_dir) { | |
1102 | - case FD_DIR_READ: | |
1103 | - /* READ commands */ | |
1103 | + switch (fdctrl->data_dir) { | |
1104 | + case FD_DIR_READ: | |
1105 | + /* READ commands */ | |
1104 | 1106 | DMA_write_memory (nchan, fdctrl->fifo + rel_pos, |
1105 | 1107 | fdctrl->data_pos, len); |
1106 | -/* cpu_physical_memory_write(addr + fdctrl->data_pos, */ | |
1107 | -/* fdctrl->fifo + rel_pos, len); */ | |
1108 | - break; | |
1109 | - case FD_DIR_WRITE: | |
1108 | + break; | |
1109 | + case FD_DIR_WRITE: | |
1110 | 1110 | /* WRITE commands */ |
1111 | 1111 | DMA_read_memory (nchan, fdctrl->fifo + rel_pos, |
1112 | 1112 | fdctrl->data_pos, len); |
1113 | -/* cpu_physical_memory_read(addr + fdctrl->data_pos, */ | |
1114 | -/* fdctrl->fifo + rel_pos, len); */ | |
1115 | 1113 | if (bdrv_write(cur_drv->bs, fd_sector(cur_drv), |
1116 | - fdctrl->fifo, 1) < 0) { | |
1114 | + fdctrl->fifo, 1) < 0) { | |
1117 | 1115 | FLOPPY_ERROR("writting sector %d\n", fd_sector(cur_drv)); |
1118 | 1116 | fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00); |
1119 | 1117 | goto transfer_error; |
1120 | 1118 | } |
1121 | - break; | |
1122 | - default: | |
1123 | - /* SCAN commands */ | |
1119 | + break; | |
1120 | + default: | |
1121 | + /* SCAN commands */ | |
1124 | 1122 | { |
1125 | - uint8_t tmpbuf[FD_SECTOR_LEN]; | |
1123 | + uint8_t tmpbuf[FD_SECTOR_LEN]; | |
1126 | 1124 | int ret; |
1127 | 1125 | DMA_read_memory (nchan, tmpbuf, fdctrl->data_pos, len); |
1128 | -/* cpu_physical_memory_read(addr + fdctrl->data_pos, */ | |
1129 | -/* tmpbuf, len); */ | |
1130 | 1126 | ret = memcmp(tmpbuf, fdctrl->fifo + rel_pos, len); |
1131 | 1127 | if (ret == 0) { |
1132 | 1128 | status2 = 0x08; |
... | ... | @@ -1138,47 +1134,47 @@ static int fdctrl_transfer_handler (void *opaque, int nchan, |
1138 | 1134 | goto end_transfer; |
1139 | 1135 | } |
1140 | 1136 | } |
1141 | - break; | |
1137 | + break; | |
1142 | 1138 | } |
1143 | - fdctrl->data_pos += len; | |
1144 | - rel_pos = fdctrl->data_pos % FD_SECTOR_LEN; | |
1139 | + fdctrl->data_pos += len; | |
1140 | + rel_pos = fdctrl->data_pos % FD_SECTOR_LEN; | |
1145 | 1141 | if (rel_pos == 0) { |
1146 | 1142 | /* Seek to next sector */ |
1147 | - FLOPPY_DPRINTF("seek to next sector (%d %02x %02x => %d) (%d)\n", | |
1148 | - cur_drv->head, cur_drv->track, cur_drv->sect, | |
1149 | - fd_sector(cur_drv), | |
1150 | - fdctrl->data_pos - len); | |
1143 | + FLOPPY_DPRINTF("seek to next sector (%d %02x %02x => %d) (%d)\n", | |
1144 | + cur_drv->head, cur_drv->track, cur_drv->sect, | |
1145 | + fd_sector(cur_drv), | |
1146 | + fdctrl->data_pos - len); | |
1151 | 1147 | /* XXX: cur_drv->sect >= cur_drv->last_sect should be an |
1152 | 1148 | error in fact */ |
1153 | 1149 | if (cur_drv->sect >= cur_drv->last_sect || |
1154 | 1150 | cur_drv->sect == fdctrl->eot) { |
1155 | - cur_drv->sect = 1; | |
1156 | - if (FD_MULTI_TRACK(fdctrl->data_state)) { | |
1157 | - if (cur_drv->head == 0 && | |
1158 | - (cur_drv->flags & FDISK_DBL_SIDES) != 0) { | |
1151 | + cur_drv->sect = 1; | |
1152 | + if (FD_MULTI_TRACK(fdctrl->data_state)) { | |
1153 | + if (cur_drv->head == 0 && | |
1154 | + (cur_drv->flags & FDISK_DBL_SIDES) != 0) { | |
1159 | 1155 | cur_drv->head = 1; |
1160 | 1156 | } else { |
1161 | 1157 | cur_drv->head = 0; |
1162 | - cur_drv->track++; | |
1163 | - if ((cur_drv->flags & FDISK_DBL_SIDES) == 0) | |
1164 | - break; | |
1158 | + cur_drv->track++; | |
1159 | + if ((cur_drv->flags & FDISK_DBL_SIDES) == 0) | |
1160 | + break; | |
1165 | 1161 | } |
1166 | 1162 | } else { |
1167 | 1163 | cur_drv->track++; |
1168 | 1164 | break; |
1169 | 1165 | } |
1170 | - FLOPPY_DPRINTF("seek to next track (%d %02x %02x => %d)\n", | |
1171 | - cur_drv->head, cur_drv->track, | |
1172 | - cur_drv->sect, fd_sector(cur_drv)); | |
1166 | + FLOPPY_DPRINTF("seek to next track (%d %02x %02x => %d)\n", | |
1167 | + cur_drv->head, cur_drv->track, | |
1168 | + cur_drv->sect, fd_sector(cur_drv)); | |
1173 | 1169 | } else { |
1174 | 1170 | cur_drv->sect++; |
1175 | 1171 | } |
1176 | 1172 | } |
1177 | 1173 | } |
1178 | -end_transfer: | |
1174 | + end_transfer: | |
1179 | 1175 | len = fdctrl->data_pos - start_pos; |
1180 | 1176 | FLOPPY_DPRINTF("end transfer %d %d %d\n", |
1181 | - fdctrl->data_pos, len, fdctrl->data_len); | |
1177 | + fdctrl->data_pos, len, fdctrl->data_len); | |
1182 | 1178 | if (fdctrl->data_dir == FD_DIR_SCANE || |
1183 | 1179 | fdctrl->data_dir == FD_DIR_SCANL || |
1184 | 1180 | fdctrl->data_dir == FD_DIR_SCANH) |
... | ... | @@ -1188,7 +1184,7 @@ end_transfer: |
1188 | 1184 | fdctrl->data_len -= len; |
1189 | 1185 | // if (fdctrl->data_len == 0) |
1190 | 1186 | fdctrl_stop_transfer(fdctrl, status0, status1, status2); |
1191 | -transfer_error: | |
1187 | + transfer_error: | |
1192 | 1188 | |
1193 | 1189 | return len; |
1194 | 1190 | } |
... | ... | @@ -1284,18 +1280,18 @@ static void fdctrl_format_sector (fdctrl_t *fdctrl) |
1284 | 1280 | FLOPPY_ERROR("formatting sector %d\n", fd_sector(cur_drv)); |
1285 | 1281 | fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00); |
1286 | 1282 | } else { |
1287 | - if (cur_drv->sect == cur_drv->last_sect) { | |
1288 | - fdctrl->data_state &= ~FD_STATE_FORMAT; | |
1289 | - /* Last sector done */ | |
1290 | - if (FD_DID_SEEK(fdctrl->data_state)) | |
1291 | - fdctrl_stop_transfer(fdctrl, 0x20, 0x00, 0x00); | |
1292 | - else | |
1293 | - fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); | |
1294 | - } else { | |
1295 | - /* More to do */ | |
1296 | - fdctrl->data_pos = 0; | |
1297 | - fdctrl->data_len = 4; | |
1298 | - } | |
1283 | + if (cur_drv->sect == cur_drv->last_sect) { | |
1284 | + fdctrl->data_state &= ~FD_STATE_FORMAT; | |
1285 | + /* Last sector done */ | |
1286 | + if (FD_DID_SEEK(fdctrl->data_state)) | |
1287 | + fdctrl_stop_transfer(fdctrl, 0x20, 0x00, 0x00); | |
1288 | + else | |
1289 | + fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); | |
1290 | + } else { | |
1291 | + /* More to do */ | |
1292 | + fdctrl->data_pos = 0; | |
1293 | + fdctrl->data_len = 4; | |
1294 | + } | |
1299 | 1295 | } |
1300 | 1296 | } |
1301 | 1297 | |
... | ... | @@ -1423,8 +1419,8 @@ static void fdctrl_write_data (fdctrl_t *fdctrl, uint32_t value) |
1423 | 1419 | #endif |
1424 | 1420 | fdctrl->fifo[1] = cur_drv->track; |
1425 | 1421 | fdctrl_set_fifo(fdctrl, 2, 0); |
1426 | - fdctrl_reset_irq(fdctrl); | |
1427 | - fdctrl->int_status = 0xC0; | |
1422 | + fdctrl_reset_irq(fdctrl); | |
1423 | + fdctrl->int_status = 0xC0; | |
1428 | 1424 | return; |
1429 | 1425 | case 0x0E: |
1430 | 1426 | /* DUMPREG */ |
... | ... | @@ -1439,7 +1435,7 @@ static void fdctrl_write_data (fdctrl_t *fdctrl, uint32_t value) |
1439 | 1435 | fdctrl->fifo[5] = (fdctrl->timer1 << 1) | fdctrl->dma_en; |
1440 | 1436 | fdctrl->fifo[6] = cur_drv->last_sect; |
1441 | 1437 | fdctrl->fifo[7] = (fdctrl->lock << 7) | |
1442 | - (cur_drv->perpendicular << 2); | |
1438 | + (cur_drv->perpendicular << 2); | |
1443 | 1439 | fdctrl->fifo[8] = fdctrl->config; |
1444 | 1440 | fdctrl->fifo[9] = fdctrl->precomp_trk; |
1445 | 1441 | fdctrl_set_fifo(fdctrl, 10, 0); |
... | ... | @@ -1507,7 +1503,7 @@ static void fdctrl_write_data (fdctrl_t *fdctrl, uint32_t value) |
1507 | 1503 | fdctrl->fifo[7] = fdctrl->timer1; |
1508 | 1504 | fdctrl->fifo[8] = cur_drv->last_sect; |
1509 | 1505 | fdctrl->fifo[9] = (fdctrl->lock << 7) | |
1510 | - (cur_drv->perpendicular << 2); | |
1506 | + (cur_drv->perpendicular << 2); | |
1511 | 1507 | fdctrl->fifo[10] = fdctrl->config; |
1512 | 1508 | fdctrl->fifo[11] = fdctrl->precomp_trk; |
1513 | 1509 | fdctrl->fifo[12] = fdctrl->pwrd; |
... | ... | @@ -1584,25 +1580,25 @@ static void fdctrl_write_data (fdctrl_t *fdctrl, uint32_t value) |
1584 | 1580 | return; |
1585 | 1581 | } |
1586 | 1582 | } |
1587 | -enqueue: | |
1583 | + enqueue: | |
1588 | 1584 | FLOPPY_DPRINTF("%s: %02x\n", __func__, value); |
1589 | 1585 | fdctrl->fifo[fdctrl->data_pos] = value; |
1590 | 1586 | if (++fdctrl->data_pos == fdctrl->data_len) { |
1591 | 1587 | /* We now have all parameters |
1592 | 1588 | * and will be able to treat the command |
1593 | 1589 | */ |
1594 | - if (fdctrl->data_state & FD_STATE_FORMAT) { | |
1595 | - fdctrl_format_sector(fdctrl); | |
1596 | - return; | |
1597 | - } | |
1598 | - switch (fdctrl->fifo[0] & 0x1F) { | |
1599 | - case 0x06: | |
1600 | - { | |
1601 | - /* READ variants */ | |
1602 | - FLOPPY_DPRINTF("treat READ command\n"); | |
1603 | - fdctrl_start_transfer(fdctrl, FD_DIR_READ); | |
1590 | + if (fdctrl->data_state & FD_STATE_FORMAT) { | |
1591 | + fdctrl_format_sector(fdctrl); | |
1604 | 1592 | return; |
1605 | 1593 | } |
1594 | + switch (fdctrl->fifo[0] & 0x1F) { | |
1595 | + case 0x06: | |
1596 | + { | |
1597 | + /* READ variants */ | |
1598 | + FLOPPY_DPRINTF("treat READ command\n"); | |
1599 | + fdctrl_start_transfer(fdctrl, FD_DIR_READ); | |
1600 | + return; | |
1601 | + } | |
1606 | 1602 | case 0x0C: |
1607 | 1603 | /* READ_DELETED variants */ |
1608 | 1604 | // FLOPPY_DPRINTF("treat READ_DELETED command\n"); |
... | ... | @@ -1657,7 +1653,7 @@ enqueue: |
1657 | 1653 | FLOPPY_DPRINTF("treat SPECIFY command\n"); |
1658 | 1654 | fdctrl->timer0 = (fdctrl->fifo[1] >> 4) & 0xF; |
1659 | 1655 | fdctrl->timer1 = fdctrl->fifo[2] >> 1; |
1660 | - fdctrl->dma_en = 1 - (fdctrl->fifo[2] & 1) ; | |
1656 | + fdctrl->dma_en = 1 - (fdctrl->fifo[2] & 1) ; | |
1661 | 1657 | /* No result back */ |
1662 | 1658 | fdctrl_reset_fifo(fdctrl); |
1663 | 1659 | break; |
... | ... | @@ -1665,7 +1661,7 @@ enqueue: |
1665 | 1661 | /* SENSE_DRIVE_STATUS */ |
1666 | 1662 | FLOPPY_DPRINTF("treat SENSE_DRIVE_STATUS command\n"); |
1667 | 1663 | fdctrl->cur_drv = fdctrl->fifo[1] & 1; |
1668 | - cur_drv = get_cur_drv(fdctrl); | |
1664 | + cur_drv = get_cur_drv(fdctrl); | |
1669 | 1665 | cur_drv->head = (fdctrl->fifo[1] >> 2) & 1; |
1670 | 1666 | /* 1 Byte status back */ |
1671 | 1667 | fdctrl->fifo[0] = (cur_drv->ro << 6) | |
... | ... | @@ -1679,23 +1675,23 @@ enqueue: |
1679 | 1675 | /* RECALIBRATE */ |
1680 | 1676 | FLOPPY_DPRINTF("treat RECALIBRATE command\n"); |
1681 | 1677 | fdctrl->cur_drv = fdctrl->fifo[1] & 1; |
1682 | - cur_drv = get_cur_drv(fdctrl); | |
1678 | + cur_drv = get_cur_drv(fdctrl); | |
1683 | 1679 | fd_recalibrate(cur_drv); |
1684 | - fdctrl_reset_fifo(fdctrl); | |
1680 | + fdctrl_reset_fifo(fdctrl); | |
1685 | 1681 | /* Raise Interrupt */ |
1686 | - fdctrl_raise_irq(fdctrl, 0x20); | |
1682 | + fdctrl_raise_irq(fdctrl, 0x20); | |
1687 | 1683 | break; |
1688 | 1684 | case 0x0F: |
1689 | 1685 | /* SEEK */ |
1690 | 1686 | FLOPPY_DPRINTF("treat SEEK command\n"); |
1691 | 1687 | fdctrl->cur_drv = fdctrl->fifo[1] & 1; |
1692 | - cur_drv = get_cur_drv(fdctrl); | |
1693 | - fd_start(cur_drv); | |
1688 | + cur_drv = get_cur_drv(fdctrl); | |
1689 | + fd_start(cur_drv); | |
1694 | 1690 | if (fdctrl->fifo[2] <= cur_drv->track) |
1695 | 1691 | cur_drv->dir = 1; |
1696 | 1692 | else |
1697 | 1693 | cur_drv->dir = 0; |
1698 | - fdctrl_reset_fifo(fdctrl); | |
1694 | + fdctrl_reset_fifo(fdctrl); | |
1699 | 1695 | if (fdctrl->fifo[2] > cur_drv->max_track) { |
1700 | 1696 | fdctrl_raise_irq(fdctrl, 0x60); |
1701 | 1697 | } else { |
... | ... | @@ -1740,7 +1736,7 @@ enqueue: |
1740 | 1736 | fdctrl_start_transfer(fdctrl, FD_DIR_READ); |
1741 | 1737 | break; |
1742 | 1738 | case 0x4A: |
1743 | - /* READ_ID */ | |
1739 | + /* READ_ID */ | |
1744 | 1740 | FLOPPY_DPRINTF("treat READ_ID command\n"); |
1745 | 1741 | /* XXX: should set main status register to busy */ |
1746 | 1742 | cur_drv->head = (fdctrl->fifo[1] >> 2) & 1; |
... | ... | @@ -1766,30 +1762,30 @@ enqueue: |
1766 | 1762 | break; |
1767 | 1763 | case 0x4D: |
1768 | 1764 | /* FORMAT_TRACK */ |
1769 | - FLOPPY_DPRINTF("treat FORMAT_TRACK command\n"); | |
1770 | - fdctrl->cur_drv = fdctrl->fifo[1] & 1; | |
1771 | - cur_drv = get_cur_drv(fdctrl); | |
1772 | - fdctrl->data_state |= FD_STATE_FORMAT; | |
1773 | - if (fdctrl->fifo[0] & 0x80) | |
1774 | - fdctrl->data_state |= FD_STATE_MULTI; | |
1775 | - else | |
1776 | - fdctrl->data_state &= ~FD_STATE_MULTI; | |
1777 | - fdctrl->data_state &= ~FD_STATE_SEEK; | |
1778 | - cur_drv->bps = | |
1779 | - fdctrl->fifo[2] > 7 ? 16384 : 128 << fdctrl->fifo[2]; | |
1765 | + FLOPPY_DPRINTF("treat FORMAT_TRACK command\n"); | |
1766 | + fdctrl->cur_drv = fdctrl->fifo[1] & 1; | |
1767 | + cur_drv = get_cur_drv(fdctrl); | |
1768 | + fdctrl->data_state |= FD_STATE_FORMAT; | |
1769 | + if (fdctrl->fifo[0] & 0x80) | |
1770 | + fdctrl->data_state |= FD_STATE_MULTI; | |
1771 | + else | |
1772 | + fdctrl->data_state &= ~FD_STATE_MULTI; | |
1773 | + fdctrl->data_state &= ~FD_STATE_SEEK; | |
1774 | + cur_drv->bps = | |
1775 | + fdctrl->fifo[2] > 7 ? 16384 : 128 << fdctrl->fifo[2]; | |
1780 | 1776 | #if 0 |
1781 | - cur_drv->last_sect = | |
1782 | - cur_drv->flags & FDISK_DBL_SIDES ? fdctrl->fifo[3] : | |
1783 | - fdctrl->fifo[3] / 2; | |
1777 | + cur_drv->last_sect = | |
1778 | + cur_drv->flags & FDISK_DBL_SIDES ? fdctrl->fifo[3] : | |
1779 | + fdctrl->fifo[3] / 2; | |
1784 | 1780 | #else |
1785 | - cur_drv->last_sect = fdctrl->fifo[3]; | |
1781 | + cur_drv->last_sect = fdctrl->fifo[3]; | |
1786 | 1782 | #endif |
1787 | - /* TODO: implement format using DMA expected by the Bochs BIOS | |
1788 | - * and Linux fdformat (read 3 bytes per sector via DMA and fill | |
1789 | - * the sector with the specified fill byte | |
1790 | - */ | |
1791 | - fdctrl->data_state &= ~FD_STATE_FORMAT; | |
1792 | - fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); | |
1783 | + /* TODO: implement format using DMA expected by the Bochs BIOS | |
1784 | + * and Linux fdformat (read 3 bytes per sector via DMA and fill | |
1785 | + * the sector with the specified fill byte | |
1786 | + */ | |
1787 | + fdctrl->data_state &= ~FD_STATE_FORMAT; | |
1788 | + fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); | |
1793 | 1789 | break; |
1794 | 1790 | case 0x8E: |
1795 | 1791 | /* DRIVE_SPECIFICATION_COMMAND */ |
... | ... | @@ -1815,16 +1811,16 @@ enqueue: |
1815 | 1811 | /* RELATIVE_SEEK_OUT */ |
1816 | 1812 | FLOPPY_DPRINTF("treat RELATIVE_SEEK_OUT command\n"); |
1817 | 1813 | fdctrl->cur_drv = fdctrl->fifo[1] & 1; |
1818 | - cur_drv = get_cur_drv(fdctrl); | |
1819 | - fd_start(cur_drv); | |
1820 | - cur_drv->dir = 0; | |
1814 | + cur_drv = get_cur_drv(fdctrl); | |
1815 | + fd_start(cur_drv); | |
1816 | + cur_drv->dir = 0; | |
1821 | 1817 | if (fdctrl->fifo[2] + cur_drv->track >= cur_drv->max_track) { |
1822 | - cur_drv->track = cur_drv->max_track - 1; | |
1818 | + cur_drv->track = cur_drv->max_track - 1; | |
1823 | 1819 | } else { |
1824 | 1820 | cur_drv->track += fdctrl->fifo[2]; |
1825 | 1821 | } |
1826 | - fdctrl_reset_fifo(fdctrl); | |
1827 | - fdctrl_raise_irq(fdctrl, 0x20); | |
1822 | + fdctrl_reset_fifo(fdctrl); | |
1823 | + fdctrl_raise_irq(fdctrl, 0x20); | |
1828 | 1824 | break; |
1829 | 1825 | case 0xCD: |
1830 | 1826 | /* FORMAT_AND_WRITE */ |
... | ... | @@ -1833,20 +1829,20 @@ enqueue: |
1833 | 1829 | fdctrl_unimplemented(fdctrl); |
1834 | 1830 | break; |
1835 | 1831 | case 0xCF: |
1836 | - /* RELATIVE_SEEK_IN */ | |
1832 | + /* RELATIVE_SEEK_IN */ | |
1837 | 1833 | FLOPPY_DPRINTF("treat RELATIVE_SEEK_IN command\n"); |
1838 | 1834 | fdctrl->cur_drv = fdctrl->fifo[1] & 1; |
1839 | - cur_drv = get_cur_drv(fdctrl); | |
1840 | - fd_start(cur_drv); | |
1841 | - cur_drv->dir = 1; | |
1835 | + cur_drv = get_cur_drv(fdctrl); | |
1836 | + fd_start(cur_drv); | |
1837 | + cur_drv->dir = 1; | |
1842 | 1838 | if (fdctrl->fifo[2] > cur_drv->track) { |
1843 | - cur_drv->track = 0; | |
1839 | + cur_drv->track = 0; | |
1844 | 1840 | } else { |
1845 | 1841 | cur_drv->track -= fdctrl->fifo[2]; |
1846 | 1842 | } |
1847 | - fdctrl_reset_fifo(fdctrl); | |
1848 | - /* Raise Interrupt */ | |
1849 | - fdctrl_raise_irq(fdctrl, 0x20); | |
1843 | + fdctrl_reset_fifo(fdctrl); | |
1844 | + /* Raise Interrupt */ | |
1845 | + fdctrl_raise_irq(fdctrl, 0x20); | |
1850 | 1846 | break; |
1851 | 1847 | } |
1852 | 1848 | } |
... | ... | @@ -1856,6 +1852,7 @@ static void fdctrl_result_timer(void *opaque) |
1856 | 1852 | { |
1857 | 1853 | fdctrl_t *fdctrl = opaque; |
1858 | 1854 | fdrive_t *cur_drv = get_cur_drv(fdctrl); |
1855 | + | |
1859 | 1856 | /* Pretend we are spinning. |
1860 | 1857 | * This is needed for Coherent, which uses READ ID to check for |
1861 | 1858 | * sector interleaving. | ... | ... |