diff options
| -rw-r--r-- | drivers/ide/ide-floppy.c | 4 | ||||
| -rw-r--r-- | drivers/ide/ide-floppy.h | 3 | ||||
| -rw-r--r-- | drivers/ide/ide-tape.c | 7 | ||||
| -rw-r--r-- | include/linux/ide.h | 134 |
4 files changed, 72 insertions, 76 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index 49e702670b8..6a1ade8ca9f 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c | |||
| @@ -208,8 +208,8 @@ void ide_floppy_create_request_sense_cmd(struct ide_atapi_pc *pc) | |||
| 208 | static void idefloppy_retry_pc(ide_drive_t *drive) | 208 | static void idefloppy_retry_pc(ide_drive_t *drive) |
| 209 | { | 209 | { |
| 210 | struct ide_floppy_obj *floppy = drive->driver_data; | 210 | struct ide_floppy_obj *floppy = drive->driver_data; |
| 211 | struct request *rq = &floppy->request_sense_rq; | 211 | struct request *rq = &drive->request_sense_rq; |
| 212 | struct ide_atapi_pc *pc = &floppy->request_sense_pc; | 212 | struct ide_atapi_pc *pc = &drive->request_sense_pc; |
| 213 | 213 | ||
| 214 | (void)ide_read_error(drive); | 214 | (void)ide_read_error(drive); |
| 215 | ide_floppy_create_request_sense_cmd(pc); | 215 | ide_floppy_create_request_sense_cmd(pc); |
diff --git a/drivers/ide/ide-floppy.h b/drivers/ide/ide-floppy.h index 6eee8d3a724..e9e14c30fed 100644 --- a/drivers/ide/ide-floppy.h +++ b/drivers/ide/ide-floppy.h | |||
| @@ -18,9 +18,6 @@ typedef struct ide_floppy_obj { | |||
| 18 | /* used for blk_{fs,pc}_request() requests */ | 18 | /* used for blk_{fs,pc}_request() requests */ |
| 19 | struct ide_atapi_pc queued_pc; | 19 | struct ide_atapi_pc queued_pc; |
| 20 | 20 | ||
| 21 | struct ide_atapi_pc request_sense_pc; | ||
| 22 | struct request request_sense_rq; | ||
| 23 | |||
| 24 | /* Last error information */ | 21 | /* Last error information */ |
| 25 | u8 sense_key, asc, ascq; | 22 | u8 sense_key, asc, ascq; |
| 26 | /* delay this long before sending packet command */ | 23 | /* delay this long before sending packet command */ |
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index fe8502afd2e..72ecc5657db 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c | |||
| @@ -182,9 +182,6 @@ typedef struct ide_tape_obj { | |||
| 182 | /* used by REQ_IDETAPE_{READ,WRITE} requests */ | 182 | /* used by REQ_IDETAPE_{READ,WRITE} requests */ |
| 183 | struct ide_atapi_pc queued_pc; | 183 | struct ide_atapi_pc queued_pc; |
| 184 | 184 | ||
| 185 | struct ide_atapi_pc request_sense_pc; | ||
| 186 | struct request request_sense_rq; | ||
| 187 | |||
| 188 | /* | 185 | /* |
| 189 | * DSC polling variables. | 186 | * DSC polling variables. |
| 190 | * | 187 | * |
| @@ -600,8 +597,8 @@ static void idetape_create_request_sense_cmd(struct ide_atapi_pc *pc) | |||
| 600 | static void idetape_retry_pc(ide_drive_t *drive) | 597 | static void idetape_retry_pc(ide_drive_t *drive) |
| 601 | { | 598 | { |
| 602 | struct ide_tape_obj *tape = drive->driver_data; | 599 | struct ide_tape_obj *tape = drive->driver_data; |
| 603 | struct request *rq = &tape->request_sense_rq; | 600 | struct request *rq = &drive->request_sense_rq; |
| 604 | struct ide_atapi_pc *pc = &tape->request_sense_pc; | 601 | struct ide_atapi_pc *pc = &drive->request_sense_pc; |
| 605 | 602 | ||
| 606 | (void)ide_read_error(drive); | 603 | (void)ide_read_error(drive); |
| 607 | idetape_create_request_sense_cmd(pc); | 604 | idetape_create_request_sense_cmd(pc); |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 3bf2bf0a56d..908b4fc9772 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -322,7 +322,71 @@ typedef enum { | |||
| 322 | ide_started, /* a drive operation was started, handler was set */ | 322 | ide_started, /* a drive operation was started, handler was set */ |
| 323 | } ide_startstop_t; | 323 | } ide_startstop_t; |
| 324 | 324 | ||
| 325 | struct ide_atapi_pc; | 325 | /* ATAPI packet command flags */ |
| 326 | enum { | ||
| 327 | /* set when an error is considered normal - no retry (ide-tape) */ | ||
| 328 | PC_FLAG_ABORT = (1 << 0), | ||
| 329 | PC_FLAG_SUPPRESS_ERROR = (1 << 1), | ||
| 330 | PC_FLAG_WAIT_FOR_DSC = (1 << 2), | ||
| 331 | PC_FLAG_DMA_OK = (1 << 3), | ||
| 332 | PC_FLAG_DMA_IN_PROGRESS = (1 << 4), | ||
| 333 | PC_FLAG_DMA_ERROR = (1 << 5), | ||
| 334 | PC_FLAG_WRITING = (1 << 6), | ||
| 335 | /* command timed out */ | ||
| 336 | PC_FLAG_TIMEDOUT = (1 << 7), | ||
| 337 | }; | ||
| 338 | |||
| 339 | /* | ||
| 340 | * With each packet command, we allocate a buffer of IDE_PC_BUFFER_SIZE bytes. | ||
| 341 | * This is used for several packet commands (not for READ/WRITE commands). | ||
| 342 | */ | ||
| 343 | #define IDE_PC_BUFFER_SIZE 256 | ||
| 344 | |||
| 345 | struct ide_atapi_pc { | ||
| 346 | /* actual packet bytes */ | ||
| 347 | u8 c[12]; | ||
| 348 | /* incremented on each retry */ | ||
| 349 | int retries; | ||
| 350 | int error; | ||
| 351 | |||
| 352 | /* bytes to transfer */ | ||
| 353 | int req_xfer; | ||
| 354 | /* bytes actually transferred */ | ||
| 355 | int xferred; | ||
| 356 | |||
| 357 | /* data buffer */ | ||
| 358 | u8 *buf; | ||
| 359 | /* current buffer position */ | ||
| 360 | u8 *cur_pos; | ||
| 361 | int buf_size; | ||
| 362 | /* missing/available data on the current buffer */ | ||
| 363 | int b_count; | ||
| 364 | |||
| 365 | /* the corresponding request */ | ||
| 366 | struct request *rq; | ||
| 367 | |||
| 368 | unsigned long flags; | ||
| 369 | |||
| 370 | /* | ||
| 371 | * those are more or less driver-specific and some of them are subject | ||
| 372 | * to change/removal later. | ||
| 373 | */ | ||
| 374 | u8 pc_buf[IDE_PC_BUFFER_SIZE]; | ||
| 375 | |||
| 376 | /* idetape only */ | ||
| 377 | struct idetape_bh *bh; | ||
| 378 | char *b_data; | ||
| 379 | |||
| 380 | /* idescsi only for now */ | ||
| 381 | struct scatterlist *sg; | ||
| 382 | unsigned int sg_cnt; | ||
| 383 | |||
| 384 | struct scsi_cmnd *scsi_cmd; | ||
| 385 | void (*done) (struct scsi_cmnd *); | ||
| 386 | |||
| 387 | unsigned long timeout; | ||
| 388 | }; | ||
| 389 | |||
| 326 | struct ide_devset; | 390 | struct ide_devset; |
| 327 | struct ide_driver_s; | 391 | struct ide_driver_s; |
| 328 | 392 | ||
| @@ -492,6 +556,9 @@ struct ide_drive_s { | |||
| 492 | void (*pc_callback)(struct ide_drive_s *, int); | 556 | void (*pc_callback)(struct ide_drive_s *, int); |
| 493 | 557 | ||
| 494 | unsigned long atapi_flags; | 558 | unsigned long atapi_flags; |
| 559 | |||
| 560 | struct ide_atapi_pc request_sense_pc; | ||
| 561 | struct request request_sense_rq; | ||
| 495 | }; | 562 | }; |
| 496 | 563 | ||
| 497 | typedef struct ide_drive_s ide_drive_t; | 564 | typedef struct ide_drive_s ide_drive_t; |
| @@ -768,71 +835,6 @@ ide_decl_devset(pio_mode); | |||
| 768 | ide_decl_devset(unmaskirq); | 835 | ide_decl_devset(unmaskirq); |
| 769 | ide_decl_devset(using_dma); | 836 | ide_decl_devset(using_dma); |
| 770 | 837 | ||
| 771 | /* ATAPI packet command flags */ | ||
| 772 | enum { | ||
| 773 | /* set when an error is considered normal - no retry (ide-tape) */ | ||
| 774 | PC_FLAG_ABORT = (1 << 0), | ||
| 775 | PC_FLAG_SUPPRESS_ERROR = (1 << 1), | ||
| 776 | PC_FLAG_WAIT_FOR_DSC = (1 << 2), | ||
| 777 | PC_FLAG_DMA_OK = (1 << 3), | ||
| 778 | PC_FLAG_DMA_IN_PROGRESS = (1 << 4), | ||
| 779 | PC_FLAG_DMA_ERROR = (1 << 5), | ||
| 780 | PC_FLAG_WRITING = (1 << 6), | ||
| 781 | /* command timed out */ | ||
| 782 | PC_FLAG_TIMEDOUT = (1 << 7), | ||
| 783 | }; | ||
| 784 | |||
| 785 | /* | ||
| 786 | * With each packet command, we allocate a buffer of IDE_PC_BUFFER_SIZE bytes. | ||
| 787 | * This is used for several packet commands (not for READ/WRITE commands). | ||
| 788 | */ | ||
| 789 | #define IDE_PC_BUFFER_SIZE 256 | ||
| 790 | |||
| 791 | struct ide_atapi_pc { | ||
| 792 | /* actual packet bytes */ | ||
| 793 | u8 c[12]; | ||
| 794 | /* incremented on each retry */ | ||
| 795 | int retries; | ||
| 796 | int error; | ||
| 797 | |||
| 798 | /* bytes to transfer */ | ||
| 799 | int req_xfer; | ||
| 800 | /* bytes actually transferred */ | ||
| 801 | int xferred; | ||
| 802 | |||
| 803 | /* data buffer */ | ||
| 804 | u8 *buf; | ||
| 805 | /* current buffer position */ | ||
| 806 | u8 *cur_pos; | ||
| 807 | int buf_size; | ||
| 808 | /* missing/available data on the current buffer */ | ||
| 809 | int b_count; | ||
| 810 | |||
| 811 | /* the corresponding request */ | ||
| 812 | struct request *rq; | ||
| 813 | |||
| 814 | unsigned long flags; | ||
| 815 | |||
| 816 | /* | ||
| 817 | * those are more or less driver-specific and some of them are subject | ||
| 818 | * to change/removal later. | ||
| 819 | */ | ||
| 820 | u8 pc_buf[IDE_PC_BUFFER_SIZE]; | ||
| 821 | |||
| 822 | /* idetape only */ | ||
| 823 | struct idetape_bh *bh; | ||
| 824 | char *b_data; | ||
| 825 | |||
| 826 | /* idescsi only for now */ | ||
| 827 | struct scatterlist *sg; | ||
| 828 | unsigned int sg_cnt; | ||
| 829 | |||
| 830 | struct scsi_cmnd *scsi_cmd; | ||
| 831 | void (*done) (struct scsi_cmnd *); | ||
| 832 | |||
| 833 | unsigned long timeout; | ||
| 834 | }; | ||
| 835 | |||
| 836 | #ifdef CONFIG_IDE_PROC_FS | 838 | #ifdef CONFIG_IDE_PROC_FS |
| 837 | /* | 839 | /* |
| 838 | * /proc/ide interface | 840 | * /proc/ide interface |
