Commit e5a9c95f authored by Willy Tarreau's avatar Willy Tarreau Committed by Denis Efremov

floppy: cleanup: make get_fdc_version() 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-22-w@1wt.euSigned-off-by: default avatarWilly Tarreau <w@1wt.eu>
Signed-off-by: default avatarDenis Efremov <efremov@linux.com>
parent 43d81bb6
...@@ -4297,79 +4297,79 @@ static const struct block_device_operations floppy_fops = { ...@@ -4297,79 +4297,79 @@ static const struct block_device_operations floppy_fops = {
/* Determine the floppy disk controller type */ /* Determine the floppy disk controller type */
/* This routine was written by David C. Niemi */ /* This routine was written by David C. Niemi */
static char __init get_fdc_version(void) static char __init get_fdc_version(int fdc)
{ {
int r; int r;
output_byte(current_fdc, FD_DUMPREGS); /* 82072 and better know DUMPREGS */ output_byte(fdc, FD_DUMPREGS); /* 82072 and better know DUMPREGS */
if (fdc_state[current_fdc].reset) if (fdc_state[fdc].reset)
return FDC_NONE; return FDC_NONE;
r = result(current_fdc); r = result(fdc);
if (r <= 0x00) if (r <= 0x00)
return FDC_NONE; /* No FDC present ??? */ return FDC_NONE; /* No FDC present ??? */
if ((r == 1) && (reply_buffer[0] == 0x80)) { if ((r == 1) && (reply_buffer[0] == 0x80)) {
pr_info("FDC %d is an 8272A\n", current_fdc); pr_info("FDC %d is an 8272A\n", fdc);
return FDC_8272A; /* 8272a/765 don't know DUMPREGS */ return FDC_8272A; /* 8272a/765 don't know DUMPREGS */
} }
if (r != 10) { if (r != 10) {
pr_info("FDC %d init: DUMPREGS: unexpected return of %d bytes.\n", pr_info("FDC %d init: DUMPREGS: unexpected return of %d bytes.\n",
current_fdc, r); fdc, r);
return FDC_UNKNOWN; return FDC_UNKNOWN;
} }
if (!fdc_configure(current_fdc)) { if (!fdc_configure(fdc)) {
pr_info("FDC %d is an 82072\n", current_fdc); pr_info("FDC %d is an 82072\n", fdc);
return FDC_82072; /* 82072 doesn't know CONFIGURE */ return FDC_82072; /* 82072 doesn't know CONFIGURE */
} }
output_byte(current_fdc, FD_PERPENDICULAR); output_byte(fdc, FD_PERPENDICULAR);
if (need_more_output(current_fdc) == MORE_OUTPUT) { if (need_more_output(fdc) == MORE_OUTPUT) {
output_byte(current_fdc, 0); output_byte(fdc, 0);
} else { } else {
pr_info("FDC %d is an 82072A\n", current_fdc); pr_info("FDC %d is an 82072A\n", fdc);
return FDC_82072A; /* 82072A as found on Sparcs. */ return FDC_82072A; /* 82072A as found on Sparcs. */
} }
output_byte(current_fdc, FD_UNLOCK); output_byte(fdc, FD_UNLOCK);
r = result(current_fdc); r = result(fdc);
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", fdc);
return FDC_82077_ORIG; /* Pre-1991 82077, doesn't know return FDC_82077_ORIG; /* Pre-1991 82077, doesn't know
* LOCK/UNLOCK */ * LOCK/UNLOCK */
} }
if ((r != 1) || (reply_buffer[0] != 0x00)) { if ((r != 1) || (reply_buffer[0] != 0x00)) {
pr_info("FDC %d init: UNLOCK: unexpected return of %d bytes.\n", pr_info("FDC %d init: UNLOCK: unexpected return of %d bytes.\n",
current_fdc, r); fdc, r);
return FDC_UNKNOWN; return FDC_UNKNOWN;
} }
output_byte(current_fdc, FD_PARTID); output_byte(fdc, FD_PARTID);
r = result(current_fdc); r = result(fdc);
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",
current_fdc, r); fdc, r);
return FDC_UNKNOWN; return FDC_UNKNOWN;
} }
if (reply_buffer[0] == 0x80) { if (reply_buffer[0] == 0x80) {
pr_info("FDC %d is a post-1991 82077\n", current_fdc); pr_info("FDC %d is a post-1991 82077\n", fdc);
return FDC_82077; /* Revised 82077AA passes all the tests */ return FDC_82077; /* Revised 82077AA passes all the tests */
} }
switch (reply_buffer[0] >> 5) { switch (reply_buffer[0] >> 5) {
case 0x0: case 0x0:
/* Either a 82078-1 or a 82078SL running at 5Volt */ /* Either a 82078-1 or a 82078SL running at 5Volt */
pr_info("FDC %d is an 82078.\n", current_fdc); pr_info("FDC %d is an 82078.\n", fdc);
return FDC_82078; return FDC_82078;
case 0x1: case 0x1:
pr_info("FDC %d is a 44pin 82078\n", current_fdc); pr_info("FDC %d is a 44pin 82078\n", fdc);
return FDC_82078; return FDC_82078;
case 0x2: case 0x2:
pr_info("FDC %d is a S82078B\n", current_fdc); pr_info("FDC %d is a S82078B\n", fdc);
return FDC_S82078B; return FDC_S82078B;
case 0x3: case 0x3:
pr_info("FDC %d is a National Semiconductor PC87306\n", current_fdc); pr_info("FDC %d is a National Semiconductor PC87306\n", fdc);
return FDC_87306; return FDC_87306;
default: default:
pr_info("FDC %d init: 82078 variant with unknown PARTID=%d.\n", pr_info("FDC %d init: 82078 variant with unknown PARTID=%d.\n",
current_fdc, reply_buffer[0] >> 5); fdc, reply_buffer[0] >> 5);
return FDC_82078_UNKN; return FDC_82078_UNKN;
} }
} /* get_fdc_version */ } /* get_fdc_version */
...@@ -4711,7 +4711,7 @@ static int __init do_floppy_init(void) ...@@ -4711,7 +4711,7 @@ static int __init do_floppy_init(void)
continue; continue;
} }
/* Try to determine the floppy controller type */ /* Try to determine the floppy controller type */
fdc_state[current_fdc].version = get_fdc_version(); fdc_state[current_fdc].version = get_fdc_version(current_fdc);
if (fdc_state[current_fdc].version == FDC_NONE) { if (fdc_state[current_fdc].version == FDC_NONE) {
/* free ioports reserved by floppy_grab_irq_and_dma() */ /* free ioports reserved by floppy_grab_irq_and_dma() */
floppy_release_regions(current_fdc); floppy_release_regions(current_fdc);
......
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