struct fsc_state *state = (struct fsc_state *) dev_id;
        struct mac53c94_regs __iomem *regs = state->regs;
        struct dbdma_regs __iomem *dma = state->dma;
-       struct scsi_cmnd *cmd = state->current_req;
+       struct scsi_cmnd *const cmd = state->current_req;
+       struct scsi_pointer *const scsi_pointer = mac53c94_scsi_pointer(cmd);
        int nb, stat, seq, intr;
        static int mac53c94_errors;
 
                /* set DMA controller going if any data to transfer */
                if ((stat & (STAT_MSG|STAT_CD)) == 0
                    && (scsi_sg_count(cmd) > 0 || scsi_bufflen(cmd))) {
-                       nb = cmd->SCp.this_residual;
+                       nb = scsi_pointer->this_residual;
                        if (nb > 0xfff0)
                                nb = 0xfff0;
-                       cmd->SCp.this_residual -= nb;
+                       scsi_pointer->this_residual -= nb;
                        writeb(nb, ®s->count_lo);
                        writeb(nb >> 8, ®s->count_mid);
                        writeb(CMD_DMA_MODE + CMD_NOP, ®s->command);
                        cmd_done(state, DID_ERROR << 16);
                        return;
                }
-               if (cmd->SCp.this_residual != 0
+               if (scsi_pointer->this_residual != 0
                    && (stat & (STAT_MSG|STAT_CD)) == 0) {
                        /* Set up the count regs to transfer more */
-                       nb = cmd->SCp.this_residual;
+                       nb = scsi_pointer->this_residual;
                        if (nb > 0xfff0)
                                nb = 0xfff0;
-                       cmd->SCp.this_residual -= nb;
+                       scsi_pointer->this_residual -= nb;
                        writeb(nb, ®s->count_lo);
                        writeb(nb >> 8, ®s->count_mid);
                        writeb(CMD_DMA_MODE + CMD_NOP, ®s->command);
                        cmd_done(state, DID_ERROR << 16);
                        return;
                }
-               cmd->SCp.Status = readb(®s->fifo);
-               cmd->SCp.Message = readb(®s->fifo);
+               scsi_pointer->Status = readb(®s->fifo);
+               scsi_pointer->Message = readb(®s->fifo);
                writeb(CMD_ACCEPT_MSG, ®s->command);
                state->phase = busfreeing;
                break;
                if (intr != INTR_DISCONNECT) {
                        printk(KERN_DEBUG "got intr %x when expected disconnect\n", intr);
                }
-               cmd_done(state, (DID_OK << 16) + (cmd->SCp.Message << 8)
-                        + cmd->SCp.Status);
+               cmd_done(state, (DID_OK << 16) + (scsi_pointer->Message << 8)
+                        + scsi_pointer->Status);
                break;
        default:
                printk(KERN_DEBUG "don't know about phase %d\n", state->phase);
        dma_cmd += OUTPUT_LAST - OUTPUT_MORE;
        dcmds[-1].command = cpu_to_le16(dma_cmd);
        dcmds->command = cpu_to_le16(DBDMA_STOP);
-       cmd->SCp.this_residual = total;
+       mac53c94_scsi_pointer(cmd)->this_residual = total;
 }
 
 static struct scsi_host_template mac53c94_template = {
        .this_id        = 7,
        .sg_tablesize   = SG_ALL,
        .max_segment_size = 65535,
+       .cmd_size       = sizeof(struct mac53c94_cmd_priv),
 };
 
 static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *match)