diff options
Diffstat (limited to 'drivers/ide/ide-floppy.c')
-rw-r--r-- | drivers/ide/ide-floppy.c | 90 |
1 files changed, 38 insertions, 52 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index 011d72011cc4..3d8e6dd0f41e 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c | |||
@@ -125,26 +125,10 @@ typedef struct ide_floppy_obj { | |||
125 | int wp; | 125 | int wp; |
126 | /* Supports format progress report */ | 126 | /* Supports format progress report */ |
127 | int srfp; | 127 | int srfp; |
128 | /* Status/Action flags */ | ||
129 | unsigned long flags; | ||
130 | } idefloppy_floppy_t; | 128 | } idefloppy_floppy_t; |
131 | 129 | ||
132 | #define IDEFLOPPY_TICKS_DELAY HZ/20 /* default delay for ZIP 100 (50ms) */ | 130 | #define IDEFLOPPY_TICKS_DELAY HZ/20 /* default delay for ZIP 100 (50ms) */ |
133 | 131 | ||
134 | /* Floppy flag bits values. */ | ||
135 | enum { | ||
136 | /* DRQ interrupt device */ | ||
137 | IDEFLOPPY_FLAG_DRQ_INTERRUPT = (1 << 0), | ||
138 | /* Media may have changed */ | ||
139 | IDEFLOPPY_FLAG_MEDIA_CHANGED = (1 << 1), | ||
140 | /* Format in progress */ | ||
141 | IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS = (1 << 2), | ||
142 | /* Avoid commands not supported in Clik drive */ | ||
143 | IDEFLOPPY_FLAG_CLIK_DRIVE = (1 << 3), | ||
144 | /* Requires BH algorithm for packets */ | ||
145 | IDEFLOPPY_FLAG_ZIP_DRIVE = (1 << 4), | ||
146 | }; | ||
147 | |||
148 | /* Defines for the MODE SENSE command */ | 132 | /* Defines for the MODE SENSE command */ |
149 | #define MODE_SENSE_CURRENT 0x00 | 133 | #define MODE_SENSE_CURRENT 0x00 |
150 | #define MODE_SENSE_CHANGEABLE 0x01 | 134 | #define MODE_SENSE_CHANGEABLE 0x01 |
@@ -247,9 +231,9 @@ static void ide_floppy_io_buffers(ide_drive_t *drive, struct ide_atapi_pc *pc, | |||
247 | 231 | ||
248 | data = bvec_kmap_irq(bvec, &flags); | 232 | data = bvec_kmap_irq(bvec, &flags); |
249 | if (direction) | 233 | if (direction) |
250 | hwif->output_data(drive, NULL, data, count); | 234 | hwif->tp_ops->output_data(drive, NULL, data, count); |
251 | else | 235 | else |
252 | hwif->input_data(drive, NULL, data, count); | 236 | hwif->tp_ops->input_data(drive, NULL, data, count); |
253 | bvec_kunmap_irq(data, &flags); | 237 | bvec_kunmap_irq(data, &flags); |
254 | 238 | ||
255 | bcount -= count; | 239 | bcount -= count; |
@@ -291,6 +275,7 @@ static void idefloppy_queue_pc_head(ide_drive_t *drive, struct ide_atapi_pc *pc, | |||
291 | rq->cmd_type = REQ_TYPE_SPECIAL; | 275 | rq->cmd_type = REQ_TYPE_SPECIAL; |
292 | rq->cmd_flags |= REQ_PREEMPT; | 276 | rq->cmd_flags |= REQ_PREEMPT; |
293 | rq->rq_disk = floppy->disk; | 277 | rq->rq_disk = floppy->disk; |
278 | memcpy(rq->cmd, pc->c, 12); | ||
294 | ide_do_drive_cmd(drive, rq); | 279 | ide_do_drive_cmd(drive, rq); |
295 | } | 280 | } |
296 | 281 | ||
@@ -354,7 +339,6 @@ static void idefloppy_init_pc(struct ide_atapi_pc *pc) | |||
354 | memset(pc, 0, sizeof(*pc)); | 339 | memset(pc, 0, sizeof(*pc)); |
355 | pc->buf = pc->pc_buf; | 340 | pc->buf = pc->pc_buf; |
356 | pc->buf_size = IDEFLOPPY_PC_BUFFER_SIZE; | 341 | pc->buf_size = IDEFLOPPY_PC_BUFFER_SIZE; |
357 | pc->callback = ide_floppy_callback; | ||
358 | } | 342 | } |
359 | 343 | ||
360 | static void idefloppy_create_request_sense_cmd(struct ide_atapi_pc *pc) | 344 | static void idefloppy_create_request_sense_cmd(struct ide_atapi_pc *pc) |
@@ -402,7 +386,7 @@ static int idefloppy_transfer_pc(ide_drive_t *drive) | |||
402 | idefloppy_floppy_t *floppy = drive->driver_data; | 386 | idefloppy_floppy_t *floppy = drive->driver_data; |
403 | 387 | ||
404 | /* Send the actual packet */ | 388 | /* Send the actual packet */ |
405 | drive->hwif->output_data(drive, NULL, floppy->pc->c, 12); | 389 | drive->hwif->tp_ops->output_data(drive, NULL, floppy->pc->c, 12); |
406 | 390 | ||
407 | /* Timeout for the packet command */ | 391 | /* Timeout for the packet command */ |
408 | return IDEFLOPPY_WAIT_CMD; | 392 | return IDEFLOPPY_WAIT_CMD; |
@@ -429,7 +413,7 @@ static ide_startstop_t idefloppy_start_pc_transfer(ide_drive_t *drive) | |||
429 | * 40 and 50msec work well. idefloppy_pc_intr will not be actually | 413 | * 40 and 50msec work well. idefloppy_pc_intr will not be actually |
430 | * used until after the packet is moved in about 50 msec. | 414 | * used until after the packet is moved in about 50 msec. |
431 | */ | 415 | */ |
432 | if (pc->flags & PC_FLAG_ZIP_DRIVE) { | 416 | if (drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) { |
433 | timeout = floppy->ticks; | 417 | timeout = floppy->ticks; |
434 | expiry = &idefloppy_transfer_pc; | 418 | expiry = &idefloppy_transfer_pc; |
435 | } else { | 419 | } else { |
@@ -474,7 +458,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive, | |||
474 | pc->error = IDEFLOPPY_ERROR_GENERAL; | 458 | pc->error = IDEFLOPPY_ERROR_GENERAL; |
475 | 459 | ||
476 | floppy->failed_pc = NULL; | 460 | floppy->failed_pc = NULL; |
477 | pc->callback(drive); | 461 | drive->pc_callback(drive); |
478 | return ide_stopped; | 462 | return ide_stopped; |
479 | } | 463 | } |
480 | 464 | ||
@@ -574,6 +558,8 @@ static void idefloppy_create_rw_cmd(idefloppy_floppy_t *floppy, | |||
574 | put_unaligned(cpu_to_be16(blocks), (unsigned short *)&pc->c[7]); | 558 | put_unaligned(cpu_to_be16(blocks), (unsigned short *)&pc->c[7]); |
575 | put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[2]); | 559 | put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[2]); |
576 | 560 | ||
561 | memcpy(rq->cmd, pc->c, 12); | ||
562 | |||
577 | pc->rq = rq; | 563 | pc->rq = rq; |
578 | pc->b_count = cmd == READ ? 0 : rq->bio->bi_size; | 564 | pc->b_count = cmd == READ ? 0 : rq->bio->bi_size; |
579 | if (rq->cmd_flags & REQ_RW) | 565 | if (rq->cmd_flags & REQ_RW) |
@@ -647,12 +633,6 @@ static ide_startstop_t idefloppy_do_request(ide_drive_t *drive, | |||
647 | return ide_stopped; | 633 | return ide_stopped; |
648 | } | 634 | } |
649 | 635 | ||
650 | if (floppy->flags & IDEFLOPPY_FLAG_DRQ_INTERRUPT) | ||
651 | pc->flags |= PC_FLAG_DRQ_INTERRUPT; | ||
652 | |||
653 | if (floppy->flags & IDEFLOPPY_FLAG_ZIP_DRIVE) | ||
654 | pc->flags |= PC_FLAG_ZIP_DRIVE; | ||
655 | |||
656 | pc->rq = rq; | 636 | pc->rq = rq; |
657 | 637 | ||
658 | return idefloppy_issue_pc(drive, pc); | 638 | return idefloppy_issue_pc(drive, pc); |
@@ -671,6 +651,7 @@ static int idefloppy_queue_pc_tail(ide_drive_t *drive, struct ide_atapi_pc *pc) | |||
671 | rq = blk_get_request(drive->queue, READ, __GFP_WAIT); | 651 | rq = blk_get_request(drive->queue, READ, __GFP_WAIT); |
672 | rq->buffer = (char *) pc; | 652 | rq->buffer = (char *) pc; |
673 | rq->cmd_type = REQ_TYPE_SPECIAL; | 653 | rq->cmd_type = REQ_TYPE_SPECIAL; |
654 | memcpy(rq->cmd, pc->c, 12); | ||
674 | error = blk_execute_rq(drive->queue, floppy->disk, rq, 0); | 655 | error = blk_execute_rq(drive->queue, floppy->disk, rq, 0); |
675 | blk_put_request(rq); | 656 | blk_put_request(rq); |
676 | 657 | ||
@@ -795,7 +776,7 @@ static int ide_floppy_get_capacity(ide_drive_t *drive) | |||
795 | switch (pc.buf[desc_start + 4] & 0x03) { | 776 | switch (pc.buf[desc_start + 4] & 0x03) { |
796 | /* Clik! drive returns this instead of CAPACITY_CURRENT */ | 777 | /* Clik! drive returns this instead of CAPACITY_CURRENT */ |
797 | case CAPACITY_UNFORMATTED: | 778 | case CAPACITY_UNFORMATTED: |
798 | if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) | 779 | if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) |
799 | /* | 780 | /* |
800 | * If it is not a clik drive, break out | 781 | * If it is not a clik drive, break out |
801 | * (maintains previous driver behaviour) | 782 | * (maintains previous driver behaviour) |
@@ -841,7 +822,7 @@ static int ide_floppy_get_capacity(ide_drive_t *drive) | |||
841 | } | 822 | } |
842 | 823 | ||
843 | /* Clik! disk does not support get_flexible_disk_page */ | 824 | /* Clik! disk does not support get_flexible_disk_page */ |
844 | if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) | 825 | if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) |
845 | (void) ide_floppy_get_flexible_disk_page(drive); | 826 | (void) ide_floppy_get_flexible_disk_page(drive); |
846 | 827 | ||
847 | set_capacity(floppy->disk, floppy->blocks * floppy->bs_factor); | 828 | set_capacity(floppy->disk, floppy->blocks * floppy->bs_factor); |
@@ -949,11 +930,12 @@ static int idefloppy_get_format_progress(ide_drive_t *drive, int __user *arg) | |||
949 | 930 | ||
950 | /* Else assume format_unit has finished, and we're at 0x10000 */ | 931 | /* Else assume format_unit has finished, and we're at 0x10000 */ |
951 | } else { | 932 | } else { |
933 | ide_hwif_t *hwif = drive->hwif; | ||
952 | unsigned long flags; | 934 | unsigned long flags; |
953 | u8 stat; | 935 | u8 stat; |
954 | 936 | ||
955 | local_irq_save(flags); | 937 | local_irq_save(flags); |
956 | stat = ide_read_status(drive); | 938 | stat = hwif->tp_ops->read_status(hwif); |
957 | local_irq_restore(flags); | 939 | local_irq_restore(flags); |
958 | 940 | ||
959 | progress_indication = ((stat & SEEK_STAT) == 0) ? 0 : 0x10000; | 941 | progress_indication = ((stat & SEEK_STAT) == 0) ? 0 : 0x10000; |
@@ -1039,9 +1021,10 @@ static void idefloppy_setup(ide_drive_t *drive, idefloppy_floppy_t *floppy) | |||
1039 | 1021 | ||
1040 | *((u16 *) &gcw) = drive->id->config; | 1022 | *((u16 *) &gcw) = drive->id->config; |
1041 | floppy->pc = floppy->pc_stack; | 1023 | floppy->pc = floppy->pc_stack; |
1024 | drive->pc_callback = ide_floppy_callback; | ||
1042 | 1025 | ||
1043 | if (((gcw[0] & 0x60) >> 5) == 1) | 1026 | if (((gcw[0] & 0x60) >> 5) == 1) |
1044 | floppy->flags |= IDEFLOPPY_FLAG_DRQ_INTERRUPT; | 1027 | drive->atapi_flags |= IDE_AFLAG_DRQ_INTERRUPT; |
1045 | /* | 1028 | /* |
1046 | * We used to check revisions here. At this point however I'm giving up. | 1029 | * We used to check revisions here. At this point however I'm giving up. |
1047 | * Just assume they are all broken, its easier. | 1030 | * Just assume they are all broken, its easier. |
@@ -1052,7 +1035,7 @@ static void idefloppy_setup(ide_drive_t *drive, idefloppy_floppy_t *floppy) | |||
1052 | * we'll leave the limitation below for the 2.2.x tree. | 1035 | * we'll leave the limitation below for the 2.2.x tree. |
1053 | */ | 1036 | */ |
1054 | if (!strncmp(drive->id->model, "IOMEGA ZIP 100 ATAPI", 20)) { | 1037 | if (!strncmp(drive->id->model, "IOMEGA ZIP 100 ATAPI", 20)) { |
1055 | floppy->flags |= IDEFLOPPY_FLAG_ZIP_DRIVE; | 1038 | drive->atapi_flags |= IDE_AFLAG_ZIP_DRIVE; |
1056 | /* This value will be visible in the /proc/ide/hdx/settings */ | 1039 | /* This value will be visible in the /proc/ide/hdx/settings */ |
1057 | floppy->ticks = IDEFLOPPY_TICKS_DELAY; | 1040 | floppy->ticks = IDEFLOPPY_TICKS_DELAY; |
1058 | blk_queue_max_sectors(drive->queue, 64); | 1041 | blk_queue_max_sectors(drive->queue, 64); |
@@ -1064,7 +1047,7 @@ static void idefloppy_setup(ide_drive_t *drive, idefloppy_floppy_t *floppy) | |||
1064 | */ | 1047 | */ |
1065 | if (strncmp(drive->id->model, "IOMEGA Clik!", 11) == 0) { | 1048 | if (strncmp(drive->id->model, "IOMEGA Clik!", 11) == 0) { |
1066 | blk_queue_max_sectors(drive->queue, 64); | 1049 | blk_queue_max_sectors(drive->queue, 64); |
1067 | floppy->flags |= IDEFLOPPY_FLAG_CLIK_DRIVE; | 1050 | drive->atapi_flags |= IDE_AFLAG_CLIK_DRIVE; |
1068 | } | 1051 | } |
1069 | 1052 | ||
1070 | (void) ide_floppy_get_capacity(drive); | 1053 | (void) ide_floppy_get_capacity(drive); |
@@ -1153,7 +1136,7 @@ static int idefloppy_open(struct inode *inode, struct file *filp) | |||
1153 | floppy->openers++; | 1136 | floppy->openers++; |
1154 | 1137 | ||
1155 | if (floppy->openers == 1) { | 1138 | if (floppy->openers == 1) { |
1156 | floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS; | 1139 | drive->atapi_flags &= ~IDE_AFLAG_FORMAT_IN_PROGRESS; |
1157 | /* Just in case */ | 1140 | /* Just in case */ |
1158 | 1141 | ||
1159 | idefloppy_init_pc(&pc); | 1142 | idefloppy_init_pc(&pc); |
@@ -1180,14 +1163,14 @@ static int idefloppy_open(struct inode *inode, struct file *filp) | |||
1180 | ret = -EROFS; | 1163 | ret = -EROFS; |
1181 | goto out_put_floppy; | 1164 | goto out_put_floppy; |
1182 | } | 1165 | } |
1183 | floppy->flags |= IDEFLOPPY_FLAG_MEDIA_CHANGED; | 1166 | drive->atapi_flags |= IDE_AFLAG_MEDIA_CHANGED; |
1184 | /* IOMEGA Clik! drives do not support lock/unlock commands */ | 1167 | /* IOMEGA Clik! drives do not support lock/unlock commands */ |
1185 | if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) { | 1168 | if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) { |
1186 | idefloppy_create_prevent_cmd(&pc, 1); | 1169 | idefloppy_create_prevent_cmd(&pc, 1); |
1187 | (void) idefloppy_queue_pc_tail(drive, &pc); | 1170 | (void) idefloppy_queue_pc_tail(drive, &pc); |
1188 | } | 1171 | } |
1189 | check_disk_change(inode->i_bdev); | 1172 | check_disk_change(inode->i_bdev); |
1190 | } else if (floppy->flags & IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS) { | 1173 | } else if (drive->atapi_flags & IDE_AFLAG_FORMAT_IN_PROGRESS) { |
1191 | ret = -EBUSY; | 1174 | ret = -EBUSY; |
1192 | goto out_put_floppy; | 1175 | goto out_put_floppy; |
1193 | } | 1176 | } |
@@ -1210,12 +1193,12 @@ static int idefloppy_release(struct inode *inode, struct file *filp) | |||
1210 | 1193 | ||
1211 | if (floppy->openers == 1) { | 1194 | if (floppy->openers == 1) { |
1212 | /* IOMEGA Clik! drives do not support lock/unlock commands */ | 1195 | /* IOMEGA Clik! drives do not support lock/unlock commands */ |
1213 | if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) { | 1196 | if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) { |
1214 | idefloppy_create_prevent_cmd(&pc, 0); | 1197 | idefloppy_create_prevent_cmd(&pc, 0); |
1215 | (void) idefloppy_queue_pc_tail(drive, &pc); | 1198 | (void) idefloppy_queue_pc_tail(drive, &pc); |
1216 | } | 1199 | } |
1217 | 1200 | ||
1218 | floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS; | 1201 | drive->atapi_flags &= ~IDE_AFLAG_FORMAT_IN_PROGRESS; |
1219 | } | 1202 | } |
1220 | 1203 | ||
1221 | floppy->openers--; | 1204 | floppy->openers--; |
@@ -1236,15 +1219,17 @@ static int idefloppy_getgeo(struct block_device *bdev, struct hd_geometry *geo) | |||
1236 | return 0; | 1219 | return 0; |
1237 | } | 1220 | } |
1238 | 1221 | ||
1239 | static int ide_floppy_lockdoor(idefloppy_floppy_t *floppy, | 1222 | static int ide_floppy_lockdoor(ide_drive_t *drive, struct ide_atapi_pc *pc, |
1240 | struct ide_atapi_pc *pc, unsigned long arg, unsigned int cmd) | 1223 | unsigned long arg, unsigned int cmd) |
1241 | { | 1224 | { |
1225 | idefloppy_floppy_t *floppy = drive->driver_data; | ||
1226 | |||
1242 | if (floppy->openers > 1) | 1227 | if (floppy->openers > 1) |
1243 | return -EBUSY; | 1228 | return -EBUSY; |
1244 | 1229 | ||
1245 | /* The IOMEGA Clik! Drive doesn't support this command - | 1230 | /* The IOMEGA Clik! Drive doesn't support this command - |
1246 | * no room for an eject mechanism */ | 1231 | * no room for an eject mechanism */ |
1247 | if (!(floppy->flags & IDEFLOPPY_FLAG_CLIK_DRIVE)) { | 1232 | if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) { |
1248 | int prevent = arg ? 1 : 0; | 1233 | int prevent = arg ? 1 : 0; |
1249 | 1234 | ||
1250 | if (cmd == CDROMEJECT) | 1235 | if (cmd == CDROMEJECT) |
@@ -1265,16 +1250,17 @@ static int ide_floppy_lockdoor(idefloppy_floppy_t *floppy, | |||
1265 | static int ide_floppy_format_unit(idefloppy_floppy_t *floppy, | 1250 | static int ide_floppy_format_unit(idefloppy_floppy_t *floppy, |
1266 | int __user *arg) | 1251 | int __user *arg) |
1267 | { | 1252 | { |
1268 | int blocks, length, flags, err = 0; | ||
1269 | struct ide_atapi_pc pc; | 1253 | struct ide_atapi_pc pc; |
1254 | ide_drive_t *drive = floppy->drive; | ||
1255 | int blocks, length, flags, err = 0; | ||
1270 | 1256 | ||
1271 | if (floppy->openers > 1) { | 1257 | if (floppy->openers > 1) { |
1272 | /* Don't format if someone is using the disk */ | 1258 | /* Don't format if someone is using the disk */ |
1273 | floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS; | 1259 | drive->atapi_flags &= ~IDE_AFLAG_FORMAT_IN_PROGRESS; |
1274 | return -EBUSY; | 1260 | return -EBUSY; |
1275 | } | 1261 | } |
1276 | 1262 | ||
1277 | floppy->flags |= IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS; | 1263 | drive->atapi_flags |= IDE_AFLAG_FORMAT_IN_PROGRESS; |
1278 | 1264 | ||
1279 | /* | 1265 | /* |
1280 | * Send ATAPI_FORMAT_UNIT to the drive. | 1266 | * Send ATAPI_FORMAT_UNIT to the drive. |
@@ -1298,15 +1284,15 @@ static int ide_floppy_format_unit(idefloppy_floppy_t *floppy, | |||
1298 | goto out; | 1284 | goto out; |
1299 | } | 1285 | } |
1300 | 1286 | ||
1301 | (void) idefloppy_get_sfrp_bit(floppy->drive); | 1287 | (void) idefloppy_get_sfrp_bit(drive); |
1302 | idefloppy_create_format_unit_cmd(&pc, blocks, length, flags); | 1288 | idefloppy_create_format_unit_cmd(&pc, blocks, length, flags); |
1303 | 1289 | ||
1304 | if (idefloppy_queue_pc_tail(floppy->drive, &pc)) | 1290 | if (idefloppy_queue_pc_tail(drive, &pc)) |
1305 | err = -EIO; | 1291 | err = -EIO; |
1306 | 1292 | ||
1307 | out: | 1293 | out: |
1308 | if (err) | 1294 | if (err) |
1309 | floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS; | 1295 | drive->atapi_flags &= ~IDE_AFLAG_FORMAT_IN_PROGRESS; |
1310 | return err; | 1296 | return err; |
1311 | } | 1297 | } |
1312 | 1298 | ||
@@ -1325,7 +1311,7 @@ static int idefloppy_ioctl(struct inode *inode, struct file *file, | |||
1325 | case CDROMEJECT: | 1311 | case CDROMEJECT: |
1326 | /* fall through */ | 1312 | /* fall through */ |
1327 | case CDROM_LOCKDOOR: | 1313 | case CDROM_LOCKDOOR: |
1328 | return ide_floppy_lockdoor(floppy, &pc, arg, cmd); | 1314 | return ide_floppy_lockdoor(drive, &pc, arg, cmd); |
1329 | case IDEFLOPPY_IOCTL_FORMAT_SUPPORTED: | 1315 | case IDEFLOPPY_IOCTL_FORMAT_SUPPORTED: |
1330 | return 0; | 1316 | return 0; |
1331 | case IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY: | 1317 | case IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY: |
@@ -1366,8 +1352,8 @@ static int idefloppy_media_changed(struct gendisk *disk) | |||
1366 | drive->attach = 0; | 1352 | drive->attach = 0; |
1367 | return 0; | 1353 | return 0; |
1368 | } | 1354 | } |
1369 | ret = !!(floppy->flags & IDEFLOPPY_FLAG_MEDIA_CHANGED); | 1355 | ret = !!(drive->atapi_flags & IDE_AFLAG_MEDIA_CHANGED); |
1370 | floppy->flags &= ~IDEFLOPPY_FLAG_MEDIA_CHANGED; | 1356 | drive->atapi_flags &= ~IDE_AFLAG_MEDIA_CHANGED; |
1371 | return ret; | 1357 | return ret; |
1372 | } | 1358 | } |
1373 | 1359 | ||