mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-20 00:11:22 +00:00
ide: add request_sense_{pc,rq} to ide_drive_t
Add 'struct ide_atapi_pc request_sense_pc' and 'request request_sense_rq' to ide_drive_t and use them instead of fields in struct ide_{floppy,tape}_obj. There should be no functional changes caused by this patch. Cc: Borislav Petkov <petkovbb@gmail.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
844b946852
commit
67c56364df
@ -208,8 +208,8 @@ void ide_floppy_create_request_sense_cmd(struct ide_atapi_pc *pc)
|
|||||||
static void idefloppy_retry_pc(ide_drive_t *drive)
|
static void idefloppy_retry_pc(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
struct ide_floppy_obj *floppy = drive->driver_data;
|
struct ide_floppy_obj *floppy = drive->driver_data;
|
||||||
struct request *rq = &floppy->request_sense_rq;
|
struct request *rq = &drive->request_sense_rq;
|
||||||
struct ide_atapi_pc *pc = &floppy->request_sense_pc;
|
struct ide_atapi_pc *pc = &drive->request_sense_pc;
|
||||||
|
|
||||||
(void)ide_read_error(drive);
|
(void)ide_read_error(drive);
|
||||||
ide_floppy_create_request_sense_cmd(pc);
|
ide_floppy_create_request_sense_cmd(pc);
|
||||||
|
@ -18,9 +18,6 @@ typedef struct ide_floppy_obj {
|
|||||||
/* used for blk_{fs,pc}_request() requests */
|
/* used for blk_{fs,pc}_request() requests */
|
||||||
struct ide_atapi_pc queued_pc;
|
struct ide_atapi_pc queued_pc;
|
||||||
|
|
||||||
struct ide_atapi_pc request_sense_pc;
|
|
||||||
struct request request_sense_rq;
|
|
||||||
|
|
||||||
/* Last error information */
|
/* Last error information */
|
||||||
u8 sense_key, asc, ascq;
|
u8 sense_key, asc, ascq;
|
||||||
/* delay this long before sending packet command */
|
/* delay this long before sending packet command */
|
||||||
|
@ -182,9 +182,6 @@ typedef struct ide_tape_obj {
|
|||||||
/* used by REQ_IDETAPE_{READ,WRITE} requests */
|
/* used by REQ_IDETAPE_{READ,WRITE} requests */
|
||||||
struct ide_atapi_pc queued_pc;
|
struct ide_atapi_pc queued_pc;
|
||||||
|
|
||||||
struct ide_atapi_pc request_sense_pc;
|
|
||||||
struct request request_sense_rq;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DSC polling variables.
|
* DSC polling variables.
|
||||||
*
|
*
|
||||||
@ -600,8 +597,8 @@ static void idetape_create_request_sense_cmd(struct ide_atapi_pc *pc)
|
|||||||
static void idetape_retry_pc(ide_drive_t *drive)
|
static void idetape_retry_pc(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
struct ide_tape_obj *tape = drive->driver_data;
|
struct ide_tape_obj *tape = drive->driver_data;
|
||||||
struct request *rq = &tape->request_sense_rq;
|
struct request *rq = &drive->request_sense_rq;
|
||||||
struct ide_atapi_pc *pc = &tape->request_sense_pc;
|
struct ide_atapi_pc *pc = &drive->request_sense_pc;
|
||||||
|
|
||||||
(void)ide_read_error(drive);
|
(void)ide_read_error(drive);
|
||||||
idetape_create_request_sense_cmd(pc);
|
idetape_create_request_sense_cmd(pc);
|
||||||
|
@ -322,7 +322,71 @@ typedef enum {
|
|||||||
ide_started, /* a drive operation was started, handler was set */
|
ide_started, /* a drive operation was started, handler was set */
|
||||||
} ide_startstop_t;
|
} ide_startstop_t;
|
||||||
|
|
||||||
struct ide_atapi_pc;
|
/* ATAPI packet command flags */
|
||||||
|
enum {
|
||||||
|
/* set when an error is considered normal - no retry (ide-tape) */
|
||||||
|
PC_FLAG_ABORT = (1 << 0),
|
||||||
|
PC_FLAG_SUPPRESS_ERROR = (1 << 1),
|
||||||
|
PC_FLAG_WAIT_FOR_DSC = (1 << 2),
|
||||||
|
PC_FLAG_DMA_OK = (1 << 3),
|
||||||
|
PC_FLAG_DMA_IN_PROGRESS = (1 << 4),
|
||||||
|
PC_FLAG_DMA_ERROR = (1 << 5),
|
||||||
|
PC_FLAG_WRITING = (1 << 6),
|
||||||
|
/* command timed out */
|
||||||
|
PC_FLAG_TIMEDOUT = (1 << 7),
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* With each packet command, we allocate a buffer of IDE_PC_BUFFER_SIZE bytes.
|
||||||
|
* This is used for several packet commands (not for READ/WRITE commands).
|
||||||
|
*/
|
||||||
|
#define IDE_PC_BUFFER_SIZE 256
|
||||||
|
|
||||||
|
struct ide_atapi_pc {
|
||||||
|
/* actual packet bytes */
|
||||||
|
u8 c[12];
|
||||||
|
/* incremented on each retry */
|
||||||
|
int retries;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
/* bytes to transfer */
|
||||||
|
int req_xfer;
|
||||||
|
/* bytes actually transferred */
|
||||||
|
int xferred;
|
||||||
|
|
||||||
|
/* data buffer */
|
||||||
|
u8 *buf;
|
||||||
|
/* current buffer position */
|
||||||
|
u8 *cur_pos;
|
||||||
|
int buf_size;
|
||||||
|
/* missing/available data on the current buffer */
|
||||||
|
int b_count;
|
||||||
|
|
||||||
|
/* the corresponding request */
|
||||||
|
struct request *rq;
|
||||||
|
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* those are more or less driver-specific and some of them are subject
|
||||||
|
* to change/removal later.
|
||||||
|
*/
|
||||||
|
u8 pc_buf[IDE_PC_BUFFER_SIZE];
|
||||||
|
|
||||||
|
/* idetape only */
|
||||||
|
struct idetape_bh *bh;
|
||||||
|
char *b_data;
|
||||||
|
|
||||||
|
/* idescsi only for now */
|
||||||
|
struct scatterlist *sg;
|
||||||
|
unsigned int sg_cnt;
|
||||||
|
|
||||||
|
struct scsi_cmnd *scsi_cmd;
|
||||||
|
void (*done) (struct scsi_cmnd *);
|
||||||
|
|
||||||
|
unsigned long timeout;
|
||||||
|
};
|
||||||
|
|
||||||
struct ide_devset;
|
struct ide_devset;
|
||||||
struct ide_driver_s;
|
struct ide_driver_s;
|
||||||
|
|
||||||
@ -492,6 +556,9 @@ struct ide_drive_s {
|
|||||||
void (*pc_callback)(struct ide_drive_s *, int);
|
void (*pc_callback)(struct ide_drive_s *, int);
|
||||||
|
|
||||||
unsigned long atapi_flags;
|
unsigned long atapi_flags;
|
||||||
|
|
||||||
|
struct ide_atapi_pc request_sense_pc;
|
||||||
|
struct request request_sense_rq;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct ide_drive_s ide_drive_t;
|
typedef struct ide_drive_s ide_drive_t;
|
||||||
@ -768,71 +835,6 @@ ide_decl_devset(pio_mode);
|
|||||||
ide_decl_devset(unmaskirq);
|
ide_decl_devset(unmaskirq);
|
||||||
ide_decl_devset(using_dma);
|
ide_decl_devset(using_dma);
|
||||||
|
|
||||||
/* ATAPI packet command flags */
|
|
||||||
enum {
|
|
||||||
/* set when an error is considered normal - no retry (ide-tape) */
|
|
||||||
PC_FLAG_ABORT = (1 << 0),
|
|
||||||
PC_FLAG_SUPPRESS_ERROR = (1 << 1),
|
|
||||||
PC_FLAG_WAIT_FOR_DSC = (1 << 2),
|
|
||||||
PC_FLAG_DMA_OK = (1 << 3),
|
|
||||||
PC_FLAG_DMA_IN_PROGRESS = (1 << 4),
|
|
||||||
PC_FLAG_DMA_ERROR = (1 << 5),
|
|
||||||
PC_FLAG_WRITING = (1 << 6),
|
|
||||||
/* command timed out */
|
|
||||||
PC_FLAG_TIMEDOUT = (1 << 7),
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* With each packet command, we allocate a buffer of IDE_PC_BUFFER_SIZE bytes.
|
|
||||||
* This is used for several packet commands (not for READ/WRITE commands).
|
|
||||||
*/
|
|
||||||
#define IDE_PC_BUFFER_SIZE 256
|
|
||||||
|
|
||||||
struct ide_atapi_pc {
|
|
||||||
/* actual packet bytes */
|
|
||||||
u8 c[12];
|
|
||||||
/* incremented on each retry */
|
|
||||||
int retries;
|
|
||||||
int error;
|
|
||||||
|
|
||||||
/* bytes to transfer */
|
|
||||||
int req_xfer;
|
|
||||||
/* bytes actually transferred */
|
|
||||||
int xferred;
|
|
||||||
|
|
||||||
/* data buffer */
|
|
||||||
u8 *buf;
|
|
||||||
/* current buffer position */
|
|
||||||
u8 *cur_pos;
|
|
||||||
int buf_size;
|
|
||||||
/* missing/available data on the current buffer */
|
|
||||||
int b_count;
|
|
||||||
|
|
||||||
/* the corresponding request */
|
|
||||||
struct request *rq;
|
|
||||||
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* those are more or less driver-specific and some of them are subject
|
|
||||||
* to change/removal later.
|
|
||||||
*/
|
|
||||||
u8 pc_buf[IDE_PC_BUFFER_SIZE];
|
|
||||||
|
|
||||||
/* idetape only */
|
|
||||||
struct idetape_bh *bh;
|
|
||||||
char *b_data;
|
|
||||||
|
|
||||||
/* idescsi only for now */
|
|
||||||
struct scatterlist *sg;
|
|
||||||
unsigned int sg_cnt;
|
|
||||||
|
|
||||||
struct scsi_cmnd *scsi_cmd;
|
|
||||||
void (*done) (struct scsi_cmnd *);
|
|
||||||
|
|
||||||
unsigned long timeout;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_IDE_PROC_FS
|
#ifdef CONFIG_IDE_PROC_FS
|
||||||
/*
|
/*
|
||||||
* /proc/ide interface
|
* /proc/ide interface
|
||||||
|
Loading…
Reference in New Issue
Block a user