summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdc
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2009-12-14 22:28:32 +0000
committerjkim <jkim@FreeBSD.org>2009-12-14 22:28:32 +0000
commit35587cc7ff3dfa99d99b269953e8f4d5a09e204f (patch)
treef7edccbcec2b8fb459b3b64c1ff630ccc75827b8 /sys/dev/fdc
parentef51d3ef199b7961f1e241610a377dda0c59f630 (diff)
downloadFreeBSD-src-35587cc7ff3dfa99d99b269953e8f4d5a09e204f.zip
FreeBSD-src-35587cc7ff3dfa99d99b269953e8f4d5a09e204f.tar.gz
Remove _FDE quirk handling as these quirks are automatically repaired
by ACPICA layer since ACPICA 20091214.
Diffstat (limited to 'sys/dev/fdc')
-rw-r--r--sys/dev/fdc/fdc_acpi.c61
1 files changed, 4 insertions, 57 deletions
diff --git a/sys/dev/fdc/fdc_acpi.c b/sys/dev/fdc/fdc_acpi.c
index 79fa66b..97ec9cb 100644
--- a/sys/dev/fdc/fdc_acpi.c
+++ b/sys/dev/fdc/fdc_acpi.c
@@ -97,9 +97,7 @@ fdc_acpi_attach(device_t dev)
struct fdc_data *sc;
ACPI_BUFFER buf;
device_t bus;
- int error, fde_count, i;
- ACPI_OBJECT *obj, *pkg;
- uint32_t fde[ACPI_FDC_MAXDEVS];
+ int error;
/* Get our softc and use the same accessor as ISA. */
sc = device_get_softc(dev);
@@ -128,63 +126,12 @@ fdc_acpi_attach(device_t dev)
*/
bus = device_get_parent(dev);
if (ACPI_FAILURE(ACPI_EVALUATE_OBJECT(bus, dev, "_FDE", NULL, &buf))) {
- error = ENXIO;
- goto out_hintsprobe;
- }
-
- /* Parse the output of _FDE in various ways. */
- obj = pkg = (ACPI_OBJECT *)buf.Pointer;
- switch (obj->Type) {
- case ACPI_TYPE_BUFFER:
- /*
- * The spec says _FDE should be a buffer of five 32-bit
- * integers. In violation of the spec, some systems use
- * five bytes instead.
- */
- switch (obj->Buffer.Length) {
- case ACPI_FDC_FDE_LEN:
- bcopy(obj->Buffer.Pointer, fde, ACPI_FDC_FDE_LEN);
- break;
- case ACPI_FDC_MAXDEVS:
- for (i = 0; i < ACPI_FDC_MAXDEVS; i++)
- fde[i] = ((uint8_t *)obj->Buffer.Pointer)[i];
- break;
- default:
- device_printf(dev, "_FDE wrong length: %d\n",
- obj->Buffer.Length);
- error = ENXIO;
- goto out_hintsprobe;
- }
- break;
- case ACPI_TYPE_PACKAGE:
- /*
- * In violation of the spec, systems including the ASUS
- * K8V return a package of five integers instead of a
- * buffer of five 32-bit integers.
- */
- fde_count = min(ACPI_FDC_MAXDEVS, pkg->Package.Count);
- for (i = 0; i < fde_count; i++) {
- obj = &pkg->Package.Elements[i];
- if (obj->Type == ACPI_TYPE_INTEGER)
- fde[i] = (uint32_t)obj->Integer.Value;
- }
- break;
- default:
- device_printf(dev, "invalid _FDE type %d\n", obj->Type);
- error = ENXIO;
- goto out_hintsprobe;
+ error = fdc_hints_probe(dev);
+ goto out;
}
/* Add fd child devices as specified. */
- error = fdc_acpi_probe_children(bus, dev, fde);
-
-out_hintsprobe:
- /*
- * If there was a problem with the _FDE drive enumeration, fall
- * back to the hints-based probe.
- */
- if (error)
- error = fdc_hints_probe(dev);
+ error = fdc_acpi_probe_children(bus, dev, buf.Pointer);
out:
if (buf.Pointer)
OpenPOWER on IntegriCloud