mirror of https://gitee.com/openkylin/linux.git
floppy: cleanup: make output_byte() not rely on current_fdc anymore
Now the fdc is passed in argument so that the function does not use current_fdc anymore. Link: https://lore.kernel.org/r/20200331094054.24441-14-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
5ea00bfc52
commit
f8a8e0f7a8
|
@ -1128,26 +1128,26 @@ static int wait_til_ready(int fdc)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sends a command byte to the fdc */
|
/* sends a command byte to the fdc */
|
||||||
static int output_byte(char byte)
|
static int output_byte(int fdc, char byte)
|
||||||
{
|
{
|
||||||
int status = wait_til_ready(current_fdc);
|
int status = wait_til_ready(fdc);
|
||||||
|
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (is_ready_state(status)) {
|
if (is_ready_state(status)) {
|
||||||
fdc_outb(byte, current_fdc, FD_DATA);
|
fdc_outb(byte, fdc, FD_DATA);
|
||||||
output_log[output_log_pos].data = byte;
|
output_log[output_log_pos].data = byte;
|
||||||
output_log[output_log_pos].status = status;
|
output_log[output_log_pos].status = status;
|
||||||
output_log[output_log_pos].jiffies = jiffies;
|
output_log[output_log_pos].jiffies = jiffies;
|
||||||
output_log_pos = (output_log_pos + 1) % OLOGSIZE;
|
output_log_pos = (output_log_pos + 1) % OLOGSIZE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
fdc_state[current_fdc].reset = 1;
|
fdc_state[fdc].reset = 1;
|
||||||
if (initialized) {
|
if (initialized) {
|
||||||
DPRINT("Unable to send byte %x to FDC. Fdc=%x Status=%x\n",
|
DPRINT("Unable to send byte %x to FDC. Fdc=%x Status=%x\n",
|
||||||
byte, current_fdc, status);
|
byte, fdc, status);
|
||||||
show_floppy(current_fdc);
|
show_floppy(fdc);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -1229,8 +1229,8 @@ static void perpendicular_mode(void)
|
||||||
if (fdc_state[current_fdc].perp_mode == perp_mode)
|
if (fdc_state[current_fdc].perp_mode == perp_mode)
|
||||||
return;
|
return;
|
||||||
if (fdc_state[current_fdc].version >= FDC_82077_ORIG) {
|
if (fdc_state[current_fdc].version >= FDC_82077_ORIG) {
|
||||||
output_byte(FD_PERPENDICULAR);
|
output_byte(current_fdc, FD_PERPENDICULAR);
|
||||||
output_byte(perp_mode);
|
output_byte(current_fdc, perp_mode);
|
||||||
fdc_state[current_fdc].perp_mode = perp_mode;
|
fdc_state[current_fdc].perp_mode = perp_mode;
|
||||||
} else if (perp_mode) {
|
} else if (perp_mode) {
|
||||||
DPRINT("perpendicular mode not supported by this FDC.\n");
|
DPRINT("perpendicular mode not supported by this FDC.\n");
|
||||||
|
@ -1243,12 +1243,12 @@ static int no_fifo;
|
||||||
static int fdc_configure(void)
|
static int fdc_configure(void)
|
||||||
{
|
{
|
||||||
/* Turn on FIFO */
|
/* Turn on FIFO */
|
||||||
output_byte(FD_CONFIGURE);
|
output_byte(current_fdc, FD_CONFIGURE);
|
||||||
if (need_more_output() != MORE_OUTPUT)
|
if (need_more_output() != MORE_OUTPUT)
|
||||||
return 0;
|
return 0;
|
||||||
output_byte(0);
|
output_byte(current_fdc, 0);
|
||||||
output_byte(0x10 | (no_fifo & 0x20) | (fifo_depth & 0xf));
|
output_byte(current_fdc, 0x10 | (no_fifo & 0x20) | (fifo_depth & 0xf));
|
||||||
output_byte(0); /* pre-compensation from track
|
output_byte(current_fdc, 0); /* pre-compensation from track
|
||||||
0 upwards */
|
0 upwards */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -1301,10 +1301,10 @@ static void fdc_specify(void)
|
||||||
if (fdc_state[current_fdc].version >= FDC_82078) {
|
if (fdc_state[current_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(FD_DRIVESPEC);
|
output_byte(current_fdc, FD_DRIVESPEC);
|
||||||
if (need_more_output() == MORE_OUTPUT) {
|
if (need_more_output() == MORE_OUTPUT) {
|
||||||
output_byte(UNIT(current_drive));
|
output_byte(current_fdc, UNIT(current_drive));
|
||||||
output_byte(0xc0);
|
output_byte(current_fdc, 0xc0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1349,9 +1349,9 @@ static void fdc_specify(void)
|
||||||
if (fdc_state[current_fdc].spec1 != spec1 ||
|
if (fdc_state[current_fdc].spec1 != spec1 ||
|
||||||
fdc_state[current_fdc].spec2 != spec2) {
|
fdc_state[current_fdc].spec2 != spec2) {
|
||||||
/* Go ahead and set spec1 and spec2 */
|
/* Go ahead and set spec1 and spec2 */
|
||||||
output_byte(FD_SPECIFY);
|
output_byte(current_fdc, FD_SPECIFY);
|
||||||
output_byte(fdc_state[current_fdc].spec1 = spec1);
|
output_byte(current_fdc, fdc_state[current_fdc].spec1 = spec1);
|
||||||
output_byte(fdc_state[current_fdc].spec2 = spec2);
|
output_byte(current_fdc, fdc_state[current_fdc].spec2 = spec2);
|
||||||
}
|
}
|
||||||
} /* fdc_specify */
|
} /* fdc_specify */
|
||||||
|
|
||||||
|
@ -1513,7 +1513,7 @@ static void setup_rw_floppy(void)
|
||||||
|
|
||||||
r = 0;
|
r = 0;
|
||||||
for (i = 0; i < raw_cmd->cmd_count; i++)
|
for (i = 0; i < raw_cmd->cmd_count; i++)
|
||||||
r |= output_byte(raw_cmd->cmd[i]);
|
r |= output_byte(current_fdc, raw_cmd->cmd[i]);
|
||||||
|
|
||||||
debugt(__func__, "rw_command");
|
debugt(__func__, "rw_command");
|
||||||
|
|
||||||
|
@ -1566,8 +1566,8 @@ static void check_wp(void)
|
||||||
{
|
{
|
||||||
if (test_bit(FD_VERIFY_BIT, &drive_state[current_drive].flags)) {
|
if (test_bit(FD_VERIFY_BIT, &drive_state[current_drive].flags)) {
|
||||||
/* check write protection */
|
/* check write protection */
|
||||||
output_byte(FD_GETSTATUS);
|
output_byte(current_fdc, FD_GETSTATUS);
|
||||||
output_byte(UNIT(current_drive));
|
output_byte(current_fdc, UNIT(current_drive));
|
||||||
if (result() != 1) {
|
if (result() != 1) {
|
||||||
fdc_state[current_fdc].reset = 1;
|
fdc_state[current_fdc].reset = 1;
|
||||||
return;
|
return;
|
||||||
|
@ -1639,9 +1639,9 @@ static void seek_floppy(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
do_floppy = seek_interrupt;
|
do_floppy = seek_interrupt;
|
||||||
output_byte(FD_SEEK);
|
output_byte(current_fdc, FD_SEEK);
|
||||||
output_byte(UNIT(current_drive));
|
output_byte(current_fdc, UNIT(current_drive));
|
||||||
if (output_byte(track) < 0) {
|
if (output_byte(current_fdc, track) < 0) {
|
||||||
reset_fdc();
|
reset_fdc();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1748,7 +1748,7 @@ irqreturn_t floppy_interrupt(int irq, void *dev_id)
|
||||||
if (inr == 0) {
|
if (inr == 0) {
|
||||||
int max_sensei = 4;
|
int max_sensei = 4;
|
||||||
do {
|
do {
|
||||||
output_byte(FD_SENSEI);
|
output_byte(current_fdc, FD_SENSEI);
|
||||||
inr = result();
|
inr = result();
|
||||||
if (do_print)
|
if (do_print)
|
||||||
print_result("sensei", inr);
|
print_result("sensei", inr);
|
||||||
|
@ -1771,8 +1771,8 @@ static void recalibrate_floppy(void)
|
||||||
{
|
{
|
||||||
debugt(__func__, "");
|
debugt(__func__, "");
|
||||||
do_floppy = recal_interrupt;
|
do_floppy = recal_interrupt;
|
||||||
output_byte(FD_RECALIBRATE);
|
output_byte(current_fdc, FD_RECALIBRATE);
|
||||||
if (output_byte(UNIT(current_drive)) < 0)
|
if (output_byte(current_fdc, UNIT(current_drive)) < 0)
|
||||||
reset_fdc();
|
reset_fdc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4302,7 +4302,7 @@ static char __init get_fdc_version(void)
|
||||||
{
|
{
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
output_byte(FD_DUMPREGS); /* 82072 and better know DUMPREGS */
|
output_byte(current_fdc, FD_DUMPREGS); /* 82072 and better know DUMPREGS */
|
||||||
if (fdc_state[current_fdc].reset)
|
if (fdc_state[current_fdc].reset)
|
||||||
return FDC_NONE;
|
return FDC_NONE;
|
||||||
r = result();
|
r = result();
|
||||||
|
@ -4323,15 +4323,15 @@ static char __init get_fdc_version(void)
|
||||||
return FDC_82072; /* 82072 doesn't know CONFIGURE */
|
return FDC_82072; /* 82072 doesn't know CONFIGURE */
|
||||||
}
|
}
|
||||||
|
|
||||||
output_byte(FD_PERPENDICULAR);
|
output_byte(current_fdc, FD_PERPENDICULAR);
|
||||||
if (need_more_output() == MORE_OUTPUT) {
|
if (need_more_output() == MORE_OUTPUT) {
|
||||||
output_byte(0);
|
output_byte(current_fdc, 0);
|
||||||
} else {
|
} else {
|
||||||
pr_info("FDC %d is an 82072A\n", current_fdc);
|
pr_info("FDC %d is an 82072A\n", current_fdc);
|
||||||
return FDC_82072A; /* 82072A as found on Sparcs. */
|
return FDC_82072A; /* 82072A as found on Sparcs. */
|
||||||
}
|
}
|
||||||
|
|
||||||
output_byte(FD_UNLOCK);
|
output_byte(current_fdc, FD_UNLOCK);
|
||||||
r = result();
|
r = result();
|
||||||
if ((r == 1) && (reply_buffer[0] == 0x80)) {
|
if ((r == 1) && (reply_buffer[0] == 0x80)) {
|
||||||
pr_info("FDC %d is a pre-1991 82077\n", current_fdc);
|
pr_info("FDC %d is a pre-1991 82077\n", current_fdc);
|
||||||
|
@ -4343,7 +4343,7 @@ static char __init get_fdc_version(void)
|
||||||
current_fdc, r);
|
current_fdc, r);
|
||||||
return FDC_UNKNOWN;
|
return FDC_UNKNOWN;
|
||||||
}
|
}
|
||||||
output_byte(FD_PARTID);
|
output_byte(current_fdc, FD_PARTID);
|
||||||
r = result();
|
r = result();
|
||||||
if (r != 1) {
|
if (r != 1) {
|
||||||
pr_info("FDC %d init: PARTID: unexpected return of %d bytes.\n",
|
pr_info("FDC %d init: PARTID: unexpected return of %d bytes.\n",
|
||||||
|
|
Loading…
Reference in New Issue