mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
floppy: cleanup: make fdc_specify() not rely on current_{fdc,drive} anymore
Now the fdc and drive are passed in argument so that the function does not use current_fdc nor current_drive anymore. Link: https://lore.kernel.org/r/20200331094054.24441-19-w@1wt.eu Signed-off-by: Willy Tarreau <w@1wt.eu> Signed-off-by: Denis Efremov <efremov@linux.com>
This commit is contained in:
parent
d5da6fa2b8
commit
3631a674a2
@ -1273,7 +1273,7 @@ static int fdc_configure(int fdc)
|
|||||||
*
|
*
|
||||||
* These values are rounded up to the next highest available delay time.
|
* These values are rounded up to the next highest available delay time.
|
||||||
*/
|
*/
|
||||||
static void fdc_specify(void)
|
static void fdc_specify(int fdc, int drive)
|
||||||
{
|
{
|
||||||
unsigned char spec1;
|
unsigned char spec1;
|
||||||
unsigned char spec2;
|
unsigned char spec2;
|
||||||
@ -1285,10 +1285,10 @@ static void fdc_specify(void)
|
|||||||
int hlt_max_code = 0x7f;
|
int hlt_max_code = 0x7f;
|
||||||
int hut_max_code = 0xf;
|
int hut_max_code = 0xf;
|
||||||
|
|
||||||
if (fdc_state[current_fdc].need_configure &&
|
if (fdc_state[fdc].need_configure &&
|
||||||
fdc_state[current_fdc].version >= FDC_82072A) {
|
fdc_state[fdc].version >= FDC_82072A) {
|
||||||
fdc_configure(current_fdc);
|
fdc_configure(fdc);
|
||||||
fdc_state[current_fdc].need_configure = 0;
|
fdc_state[fdc].need_configure = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (raw_cmd->rate & 0x03) {
|
switch (raw_cmd->rate & 0x03) {
|
||||||
@ -1297,13 +1297,13 @@ static void fdc_specify(void)
|
|||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
dtr = 300;
|
dtr = 300;
|
||||||
if (fdc_state[current_fdc].version >= FDC_82078) {
|
if (fdc_state[fdc].version >= FDC_82078) {
|
||||||
/* chose the default rate table, not the one
|
/* chose the default rate table, not the one
|
||||||
* where 1 = 2 Mbps */
|
* where 1 = 2 Mbps */
|
||||||
output_byte(current_fdc, FD_DRIVESPEC);
|
output_byte(fdc, FD_DRIVESPEC);
|
||||||
if (need_more_output(current_fdc) == MORE_OUTPUT) {
|
if (need_more_output(fdc) == MORE_OUTPUT) {
|
||||||
output_byte(current_fdc, UNIT(current_drive));
|
output_byte(fdc, UNIT(drive));
|
||||||
output_byte(current_fdc, 0xc0);
|
output_byte(fdc, 0xc0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1312,14 +1312,14 @@ static void fdc_specify(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fdc_state[current_fdc].version >= FDC_82072) {
|
if (fdc_state[fdc].version >= FDC_82072) {
|
||||||
scale_dtr = dtr;
|
scale_dtr = dtr;
|
||||||
hlt_max_code = 0x00; /* 0==256msec*dtr0/dtr (not linear!) */
|
hlt_max_code = 0x00; /* 0==256msec*dtr0/dtr (not linear!) */
|
||||||
hut_max_code = 0x0; /* 0==256msec*dtr0/dtr (not linear!) */
|
hut_max_code = 0x0; /* 0==256msec*dtr0/dtr (not linear!) */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert step rate from microseconds to milliseconds and 4 bits */
|
/* Convert step rate from microseconds to milliseconds and 4 bits */
|
||||||
srt = 16 - DIV_ROUND_UP(drive_params[current_drive].srt * scale_dtr / 1000,
|
srt = 16 - DIV_ROUND_UP(drive_params[drive].srt * scale_dtr / 1000,
|
||||||
NOMINAL_DTR);
|
NOMINAL_DTR);
|
||||||
if (slow_floppy)
|
if (slow_floppy)
|
||||||
srt = srt / 4;
|
srt = srt / 4;
|
||||||
@ -1327,14 +1327,14 @@ static void fdc_specify(void)
|
|||||||
SUPBOUND(srt, 0xf);
|
SUPBOUND(srt, 0xf);
|
||||||
INFBOUND(srt, 0);
|
INFBOUND(srt, 0);
|
||||||
|
|
||||||
hlt = DIV_ROUND_UP(drive_params[current_drive].hlt * scale_dtr / 2,
|
hlt = DIV_ROUND_UP(drive_params[drive].hlt * scale_dtr / 2,
|
||||||
NOMINAL_DTR);
|
NOMINAL_DTR);
|
||||||
if (hlt < 0x01)
|
if (hlt < 0x01)
|
||||||
hlt = 0x01;
|
hlt = 0x01;
|
||||||
else if (hlt > 0x7f)
|
else if (hlt > 0x7f)
|
||||||
hlt = hlt_max_code;
|
hlt = hlt_max_code;
|
||||||
|
|
||||||
hut = DIV_ROUND_UP(drive_params[current_drive].hut * scale_dtr / 16,
|
hut = DIV_ROUND_UP(drive_params[drive].hut * scale_dtr / 16,
|
||||||
NOMINAL_DTR);
|
NOMINAL_DTR);
|
||||||
if (hut < 0x1)
|
if (hut < 0x1)
|
||||||
hut = 0x1;
|
hut = 0x1;
|
||||||
@ -1345,12 +1345,12 @@ static void fdc_specify(void)
|
|||||||
spec2 = (hlt << 1) | (use_virtual_dma & 1);
|
spec2 = (hlt << 1) | (use_virtual_dma & 1);
|
||||||
|
|
||||||
/* If these parameters did not change, just return with success */
|
/* If these parameters did not change, just return with success */
|
||||||
if (fdc_state[current_fdc].spec1 != spec1 ||
|
if (fdc_state[fdc].spec1 != spec1 ||
|
||||||
fdc_state[current_fdc].spec2 != spec2) {
|
fdc_state[fdc].spec2 != spec2) {
|
||||||
/* Go ahead and set spec1 and spec2 */
|
/* Go ahead and set spec1 and spec2 */
|
||||||
output_byte(current_fdc, FD_SPECIFY);
|
output_byte(fdc, FD_SPECIFY);
|
||||||
output_byte(current_fdc, fdc_state[current_fdc].spec1 = spec1);
|
output_byte(fdc, fdc_state[fdc].spec1 = spec1);
|
||||||
output_byte(current_fdc, fdc_state[current_fdc].spec2 = spec2);
|
output_byte(fdc, fdc_state[fdc].spec2 = spec2);
|
||||||
}
|
}
|
||||||
} /* fdc_specify */
|
} /* fdc_specify */
|
||||||
|
|
||||||
@ -1946,12 +1946,12 @@ static void floppy_ready(void)
|
|||||||
|
|
||||||
if (raw_cmd->flags & (FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK)) {
|
if (raw_cmd->flags & (FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK)) {
|
||||||
perpendicular_mode(current_fdc);
|
perpendicular_mode(current_fdc);
|
||||||
fdc_specify(); /* must be done here because of hut, hlt ... */
|
fdc_specify(current_fdc, current_drive); /* must be done here because of hut, hlt ... */
|
||||||
seek_floppy();
|
seek_floppy();
|
||||||
} else {
|
} else {
|
||||||
if ((raw_cmd->flags & FD_RAW_READ) ||
|
if ((raw_cmd->flags & FD_RAW_READ) ||
|
||||||
(raw_cmd->flags & FD_RAW_WRITE))
|
(raw_cmd->flags & FD_RAW_WRITE))
|
||||||
fdc_specify();
|
fdc_specify(current_fdc, current_drive);
|
||||||
setup_rw_floppy();
|
setup_rw_floppy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user