aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-floppy.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/ide-floppy.c')
-rw-r--r--drivers/ide/ide-floppy.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index b3689437269f..011d72011cc4 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -351,10 +351,7 @@ static void ide_floppy_callback(ide_drive_t *drive)
351 351
352static void idefloppy_init_pc(struct ide_atapi_pc *pc) 352static void idefloppy_init_pc(struct ide_atapi_pc *pc)
353{ 353{
354 memset(pc->c, 0, 12); 354 memset(pc, 0, sizeof(*pc));
355 pc->retries = 0;
356 pc->flags = 0;
357 pc->req_xfer = 0;
358 pc->buf = pc->pc_buf; 355 pc->buf = pc->pc_buf;
359 pc->buf_size = IDEFLOPPY_PC_BUFFER_SIZE; 356 pc->buf_size = IDEFLOPPY_PC_BUFFER_SIZE;
360 pc->callback = ide_floppy_callback; 357 pc->callback = ide_floppy_callback;
@@ -561,12 +558,6 @@ static void idefloppy_create_start_stop_cmd(struct ide_atapi_pc *pc, int start)
561 pc->c[4] = start; 558 pc->c[4] = start;
562} 559}
563 560
564static void idefloppy_create_test_unit_ready_cmd(struct ide_atapi_pc *pc)
565{
566 idefloppy_init_pc(pc);
567 pc->c[0] = GPCMD_TEST_UNIT_READY;
568}
569
570static void idefloppy_create_rw_cmd(idefloppy_floppy_t *floppy, 561static void idefloppy_create_rw_cmd(idefloppy_floppy_t *floppy,
571 struct ide_atapi_pc *pc, struct request *rq, 562 struct ide_atapi_pc *pc, struct request *rq,
572 unsigned long sector) 563 unsigned long sector)
@@ -711,10 +702,10 @@ static int ide_floppy_get_flexible_disk_page(ide_drive_t *drive)
711 set_disk_ro(floppy->disk, floppy->wp); 702 set_disk_ro(floppy->disk, floppy->wp);
712 page = &pc.buf[8]; 703 page = &pc.buf[8];
713 704
714 transfer_rate = be16_to_cpu(*(u16 *)&pc.buf[8 + 2]); 705 transfer_rate = be16_to_cpup((__be16 *)&pc.buf[8 + 2]);
715 sector_size = be16_to_cpu(*(u16 *)&pc.buf[8 + 6]); 706 sector_size = be16_to_cpup((__be16 *)&pc.buf[8 + 6]);
716 cyls = be16_to_cpu(*(u16 *)&pc.buf[8 + 8]); 707 cyls = be16_to_cpup((__be16 *)&pc.buf[8 + 8]);
717 rpm = be16_to_cpu(*(u16 *)&pc.buf[8 + 28]); 708 rpm = be16_to_cpup((__be16 *)&pc.buf[8 + 28]);
718 heads = pc.buf[8 + 4]; 709 heads = pc.buf[8 + 4];
719 sectors = pc.buf[8 + 5]; 710 sectors = pc.buf[8 + 5];
720 711
@@ -789,8 +780,8 @@ static int ide_floppy_get_capacity(ide_drive_t *drive)
789 for (i = 0; i < desc_cnt; i++) { 780 for (i = 0; i < desc_cnt; i++) {
790 unsigned int desc_start = 4 + i*8; 781 unsigned int desc_start = 4 + i*8;
791 782
792 blocks = be32_to_cpu(*(u32 *)&pc.buf[desc_start]); 783 blocks = be32_to_cpup((__be32 *)&pc.buf[desc_start]);
793 length = be16_to_cpu(*(u16 *)&pc.buf[desc_start + 6]); 784 length = be16_to_cpup((__be16 *)&pc.buf[desc_start + 6]);
794 785
795 debug_log("Descriptor %d: %dkB, %d blocks, %d sector size\n", 786 debug_log("Descriptor %d: %dkB, %d blocks, %d sector size\n",
796 i, blocks * length / 1024, blocks, length); 787 i, blocks * length / 1024, blocks, length);
@@ -911,8 +902,8 @@ static int ide_floppy_get_format_capacities(ide_drive_t *drive, int __user *arg)
911 if (u_index >= u_array_size) 902 if (u_index >= u_array_size)
912 break; /* User-supplied buffer too small */ 903 break; /* User-supplied buffer too small */
913 904
914 blocks = be32_to_cpu(*(u32 *)&pc.buf[desc_start]); 905 blocks = be32_to_cpup((__be32 *)&pc.buf[desc_start]);
915 length = be16_to_cpu(*(u16 *)&pc.buf[desc_start + 6]); 906 length = be16_to_cpup((__be16 *)&pc.buf[desc_start + 6]);
916 907
917 if (put_user(blocks, argp)) 908 if (put_user(blocks, argp))
918 return(-EFAULT); 909 return(-EFAULT);
@@ -1138,7 +1129,6 @@ static ide_driver_t idefloppy_driver = {
1138 .do_request = idefloppy_do_request, 1129 .do_request = idefloppy_do_request,
1139 .end_request = idefloppy_end_request, 1130 .end_request = idefloppy_end_request,
1140 .error = __ide_error, 1131 .error = __ide_error,
1141 .abort = __ide_abort,
1142#ifdef CONFIG_IDE_PROC_FS 1132#ifdef CONFIG_IDE_PROC_FS
1143 .proc = idefloppy_proc, 1133 .proc = idefloppy_proc,
1144#endif 1134#endif
@@ -1166,7 +1156,9 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
1166 floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS; 1156 floppy->flags &= ~IDEFLOPPY_FLAG_FORMAT_IN_PROGRESS;
1167 /* Just in case */ 1157 /* Just in case */
1168 1158
1169 idefloppy_create_test_unit_ready_cmd(&pc); 1159 idefloppy_init_pc(&pc);
1160 pc.c[0] = GPCMD_TEST_UNIT_READY;
1161
1170 if (idefloppy_queue_pc_tail(drive, &pc)) { 1162 if (idefloppy_queue_pc_tail(drive, &pc)) {
1171 idefloppy_create_start_stop_cmd(&pc, 1); 1163 idefloppy_create_start_stop_cmd(&pc, 1);
1172 (void) idefloppy_queue_pc_tail(drive, &pc); 1164 (void) idefloppy_queue_pc_tail(drive, &pc);