On Sat, Jun 02, 2001 at 07:07:46PM +0200, Geert Uytterhoeven wrote:
> Hi,
>
> Anyone who can explain these changes? Here the MIPS tree differs from Linus'
> (and the m68k) tree.
>
> According to the CVS logs, this change entered in revision 1.7 due to a sync
> with Linus' tree (which introduced other formatting changes) somewhere in
> 1998.
> In Linus' tree it must have changed afterwards a long time ago (before 2.2.0).
>
> --- linux-2.4.5/drivers/scsi/wd33c93.c Tue Dec 5 21:43:48 2000
> +++ linux-mips/drivers/scsi/wd33c93.c Mon Mar 26 02:38:20 2001
> @@ -614,7 +614,6 @@
> (is_dir_out(cmd))?DATA_OUT_DIR:DATA_IN_DIR))
> write_wd33c93_count(regp,0); /* guarantee a DATA_PHASE interrupt
> */
> else {
> - write_wd33c93_count(regp, cmd->SCp.this_residual);
> write_wd33c93(regp,WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA);
> hostdata->dma = D_DMA_RUNNING;
> }
> @@ -735,7 +734,6 @@
> hostdata->dma_cnt++;
> #endif
> write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA);
> - write_wd33c93_count(regp,cmd->SCp.this_residual);
>
> if ((hostdata->level2 >= L2_DATA) ||
> (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) {
I guess this is due to the fact that the HPC on the Indy/Indigo2 does
the scatter gather alread so we let the HPC DMA controller do the scatter
gather and just let the SCSI controller run the whole request.
The corresponding codelines should be in
drivers/scsi/sgiwd93.c
113 if(cmd->SCp.buffers_residual) {
114 struct scatterlist *slp = cmd->SCp.buffer;
115 int i, totlen = 0;
116
117 #ifdef DEBUG_DMA
118 printk("SCLIST<");
119 #endif
120 for(i = 0; i <= cmd->SCp.buffers_residual; i++) {
121 #ifdef DEBUG_DMA
122 printk("[%p,%d]", slp[i].address,
slp[i].length);
123 #endif
124 fill_hpc_entries (&hcp, slp[i].address,
slp[i].length);
125 totlen += slp[i].length;
126 }
127 #ifdef DEBUG_DMA
128 printk(">tlen<%d>", totlen);
129 #endif
130 hdata->dma_bounce_len = totlen; /* a trick... */
131 write_wd33c93_count(regp, totlen);
132 } else {
133 /* Non-scattered dma. */
134 #ifdef DEBUG_DMA
135 printk("ONEBUF<%p,%d>", cmd->SCp.ptr,
cmd->SCp.this_residual);
136 #endif
137 /*
138 * wd33c93 shouldn't pass us bogus dma_setups, but
139 * it does:-( The other wd33c93 drivers deal with
140 * it the same way (which isn't that obvious).
141 * IMHO a better fix would be, not to do these
142 * dma setups in the first place
143 */
144 if (cmd->SCp.ptr == NULL)
145 return 1;
146 fill_hpc_entries (&hcp,
cmd->SCp.ptr,cmd->SCp.this_residual);
147 write_wd33c93_count(regp, cmd->SCp.this_residual);
148 }
So we have an incompatibility with the sgiwd93.c from the mips tree
and the wd33c93.c from the linus tree where we dont want the generic part
of the wd33c93.c to (re)write the length of the current transfer block
(scatter gather part) as we want it to do the whole transfer in one
part (From the generic wd33c93.c we dont do scatter gather).
Flo
--
Florian Lohoff flo@rfc822.org +49-5201-669912
Why is it called "common sense" when nobody seems to have any?
|