Commit 75f5a0c4 authored by Finn Thain's avatar Finn Thain Committed by Martin K. Petersen

scsi: sym53c500_cs: Stop using struct scsi_pointer

This driver doesn't use SCp.ptr to save a SCSI command data pointer which
means "scsi pointer" is a complete misnomer here. Only a few members of
struct scsi_pointer are needed so move those to private command data.

Link: https://lore.kernel.org/r/accf71e293ba3aed6d18c8baeb405de8dfe7c935.1649235939.git.fthain@linux-m68k.org
Cc: Bart Van Assche <bvanassche@acm.org>
Cc: Christoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarFinn Thain <fthain@linux-m68k.org>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 4049f7ac
...@@ -192,10 +192,11 @@ struct sym53c500_data { ...@@ -192,10 +192,11 @@ struct sym53c500_data {
int fast_pio; int fast_pio;
}; };
static struct scsi_pointer *sym53c500_scsi_pointer(struct scsi_cmnd *cmd) struct sym53c500_cmd_priv {
{ int status;
return scsi_cmd_priv(cmd); int message;
} int phase;
};
enum Phase { enum Phase {
idle, idle,
...@@ -356,7 +357,7 @@ SYM53C500_intr(int irq, void *dev_id) ...@@ -356,7 +357,7 @@ SYM53C500_intr(int irq, void *dev_id)
struct sym53c500_data *data = struct sym53c500_data *data =
(struct sym53c500_data *)dev->hostdata; (struct sym53c500_data *)dev->hostdata;
struct scsi_cmnd *curSC = data->current_SC; struct scsi_cmnd *curSC = data->current_SC;
struct scsi_pointer *scsi_pointer = sym53c500_scsi_pointer(curSC); struct sym53c500_cmd_priv *scp = scsi_cmd_priv(curSC);
int fast_pio = data->fast_pio; int fast_pio = data->fast_pio;
spin_lock_irqsave(dev->host_lock, flags); spin_lock_irqsave(dev->host_lock, flags);
...@@ -403,12 +404,11 @@ SYM53C500_intr(int irq, void *dev_id) ...@@ -403,12 +404,11 @@ SYM53C500_intr(int irq, void *dev_id)
if (int_reg & 0x20) { /* Disconnect */ if (int_reg & 0x20) { /* Disconnect */
DEB(printk("SYM53C500: disconnect intr received\n")); DEB(printk("SYM53C500: disconnect intr received\n"));
if (scsi_pointer->phase != message_in) { /* Unexpected disconnect */ if (scp->phase != message_in) { /* Unexpected disconnect */
curSC->result = DID_NO_CONNECT << 16; curSC->result = DID_NO_CONNECT << 16;
} else { /* Command complete, return status and message */ } else { /* Command complete, return status and message */
curSC->result = (scsi_pointer->Status & 0xff) | curSC->result = (scp->status & 0xff) |
((scsi_pointer->Message & 0xff) << 8) | ((scp->message & 0xff) << 8) | (DID_OK << 16);
(DID_OK << 16);
} }
goto idle_out; goto idle_out;
} }
...@@ -419,7 +419,7 @@ SYM53C500_intr(int irq, void *dev_id) ...@@ -419,7 +419,7 @@ SYM53C500_intr(int irq, void *dev_id)
struct scatterlist *sg; struct scatterlist *sg;
int i; int i;
scsi_pointer->phase = data_out; scp->phase = data_out;
VDEB(printk("SYM53C500: Data-Out phase\n")); VDEB(printk("SYM53C500: Data-Out phase\n"));
outb(FLUSH_FIFO, port_base + CMD_REG); outb(FLUSH_FIFO, port_base + CMD_REG);
LOAD_DMA_COUNT(port_base, scsi_bufflen(curSC)); /* Max transfer size */ LOAD_DMA_COUNT(port_base, scsi_bufflen(curSC)); /* Max transfer size */
...@@ -438,7 +438,7 @@ SYM53C500_intr(int irq, void *dev_id) ...@@ -438,7 +438,7 @@ SYM53C500_intr(int irq, void *dev_id)
struct scatterlist *sg; struct scatterlist *sg;
int i; int i;
scsi_pointer->phase = data_in; scp->phase = data_in;
VDEB(printk("SYM53C500: Data-In phase\n")); VDEB(printk("SYM53C500: Data-In phase\n"));
outb(FLUSH_FIFO, port_base + CMD_REG); outb(FLUSH_FIFO, port_base + CMD_REG);
LOAD_DMA_COUNT(port_base, scsi_bufflen(curSC)); /* Max transfer size */ LOAD_DMA_COUNT(port_base, scsi_bufflen(curSC)); /* Max transfer size */
...@@ -453,12 +453,12 @@ SYM53C500_intr(int irq, void *dev_id) ...@@ -453,12 +453,12 @@ SYM53C500_intr(int irq, void *dev_id)
break; break;
case 0x02: /* COMMAND */ case 0x02: /* COMMAND */
scsi_pointer->phase = command_ph; scp->phase = command_ph;
printk("SYM53C500: Warning: Unknown interrupt occurred in command phase!\n"); printk("SYM53C500: Warning: Unknown interrupt occurred in command phase!\n");
break; break;
case 0x03: /* STATUS */ case 0x03: /* STATUS */
scsi_pointer->phase = status_ph; scp->phase = status_ph;
VDEB(printk("SYM53C500: Status phase\n")); VDEB(printk("SYM53C500: Status phase\n"));
outb(FLUSH_FIFO, port_base + CMD_REG); outb(FLUSH_FIFO, port_base + CMD_REG);
outb(INIT_CMD_COMPLETE, port_base + CMD_REG); outb(INIT_CMD_COMPLETE, port_base + CMD_REG);
...@@ -471,24 +471,22 @@ SYM53C500_intr(int irq, void *dev_id) ...@@ -471,24 +471,22 @@ SYM53C500_intr(int irq, void *dev_id)
case 0x06: /* MESSAGE-OUT */ case 0x06: /* MESSAGE-OUT */
DEB(printk("SYM53C500: Message-Out phase\n")); DEB(printk("SYM53C500: Message-Out phase\n"));
scsi_pointer->phase = message_out; scp->phase = message_out;
outb(SET_ATN, port_base + CMD_REG); /* Reject the message */ outb(SET_ATN, port_base + CMD_REG); /* Reject the message */
outb(MSG_ACCEPT, port_base + CMD_REG); outb(MSG_ACCEPT, port_base + CMD_REG);
break; break;
case 0x07: /* MESSAGE-IN */ case 0x07: /* MESSAGE-IN */
VDEB(printk("SYM53C500: Message-In phase\n")); VDEB(printk("SYM53C500: Message-In phase\n"));
scsi_pointer->phase = message_in; scp->phase = message_in;
scsi_pointer->Status = inb(port_base + SCSI_FIFO); scp->status = inb(port_base + SCSI_FIFO);
scsi_pointer->Message = inb(port_base + SCSI_FIFO); scp->message = inb(port_base + SCSI_FIFO);
VDEB(printk("SCSI FIFO size=%d\n", inb(port_base + FIFO_FLAGS) & 0x1f)); VDEB(printk("SCSI FIFO size=%d\n", inb(port_base + FIFO_FLAGS) & 0x1f));
DEB(printk("Status = %02x Message = %02x\n", DEB(printk("Status = %02x Message = %02x\n", scp->status, scp->message));
scsi_pointer->Status, scsi_pointer->Message));
if (scsi_pointer->Message == SAVE_POINTERS || if (scp->message == SAVE_POINTERS || scp->message == DISCONNECT) {
scsi_pointer->Message == DISCONNECT) {
outb(SET_ATN, port_base + CMD_REG); /* Reject message */ outb(SET_ATN, port_base + CMD_REG); /* Reject message */
DEB(printk("Discarding SAVE_POINTERS message\n")); DEB(printk("Discarding SAVE_POINTERS message\n"));
} }
...@@ -500,7 +498,7 @@ SYM53C500_intr(int irq, void *dev_id) ...@@ -500,7 +498,7 @@ SYM53C500_intr(int irq, void *dev_id)
return IRQ_HANDLED; return IRQ_HANDLED;
idle_out: idle_out:
scsi_pointer->phase = idle; scp->phase = idle;
scsi_done(curSC); scsi_done(curSC);
goto out; goto out;
} }
...@@ -548,7 +546,7 @@ SYM53C500_info(struct Scsi_Host *SChost) ...@@ -548,7 +546,7 @@ SYM53C500_info(struct Scsi_Host *SChost)
static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt) static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt)
{ {
struct scsi_pointer *scsi_pointer = sym53c500_scsi_pointer(SCpnt); struct sym53c500_cmd_priv *scp = scsi_cmd_priv(SCpnt);
int i; int i;
int port_base = SCpnt->device->host->io_port; int port_base = SCpnt->device->host->io_port;
struct sym53c500_data *data = struct sym53c500_data *data =
...@@ -565,9 +563,9 @@ static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt) ...@@ -565,9 +563,9 @@ static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt)
VDEB(printk("\n")); VDEB(printk("\n"));
data->current_SC = SCpnt; data->current_SC = SCpnt;
scsi_pointer->phase = command_ph; scp->phase = command_ph;
scsi_pointer->Status = 0; scp->status = 0;
scsi_pointer->Message = 0; scp->message = 0;
/* We are locked here already by the mid layer */ /* We are locked here already by the mid layer */
REG0(port_base); REG0(port_base);
...@@ -682,7 +680,7 @@ static struct scsi_host_template sym53c500_driver_template = { ...@@ -682,7 +680,7 @@ static struct scsi_host_template sym53c500_driver_template = {
.this_id = 7, .this_id = 7,
.sg_tablesize = 32, .sg_tablesize = 32,
.shost_groups = SYM53C500_shost_groups, .shost_groups = SYM53C500_shost_groups,
.cmd_size = sizeof(struct scsi_pointer), .cmd_size = sizeof(struct sym53c500_cmd_priv),
}; };
static int SYM53C500_config_check(struct pcmcia_device *p_dev, void *priv_data) static int SYM53C500_config_check(struct pcmcia_device *p_dev, void *priv_data)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment