OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [acpi/] [blacklist.c] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 *  blacklist.c
3
 *
4
 *  Check to see if the given machine has a known bad ACPI BIOS
5
 *
6
 *  Copyright (C) 2002 Andy Grover <andrew.grover@intel.com>
7
 *
8
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9
 *
10
 *  This program is free software; you can redistribute it and/or modify
11
 *  it under the terms of the GNU General Public License as published by
12
 *  the Free Software Foundation; either version 2 of the License, or (at
13
 *  your option) any later version.
14
 *
15
 *  This program is distributed in the hope that it will be useful, but
16
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
17
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18
 *  General Public License for more details.
19
 *
20
 *  You should have received a copy of the GNU General Public License along
21
 *  with this program; if not, write to the Free Software Foundation, Inc.,
22
 *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
23
 *
24
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25
 */
26
 
27
 
28
#include <linux/kernel.h>
29
#include <linux/module.h>
30
#include <linux/init.h>
31
#include <linux/acpi.h>
32
#include <acpi/acpi_bus.h>
33
 
34
#define PREFIX                  "ACPI: "
35
 
36
enum acpi_blacklist_predicates
37
{
38
        all_versions,
39
        less_than_or_equal,
40
        equal,
41
        greater_than_or_equal,
42
};
43
 
44
struct acpi_blacklist_item
45
{
46
        char            oem_id[7];
47
        char            oem_table_id[9];
48
        u32             oem_revision;
49
        acpi_table_type table;
50
        enum acpi_blacklist_predicates oem_revision_predicate;
51
        char            *reason;
52
        u32             is_critical_error;
53
};
54
 
55
/*
56
 * POLICY: If *anything* doesn't work, put it on the blacklist.
57
 *         If they are critical errors, mark it critical, and abort driver load.
58
 */
59
static struct acpi_blacklist_item acpi_blacklist[] __initdata =
60
{
61
        /* Portege 7020, BIOS 8.10 */
62
        {"TOSHIB", "7020CT  ", 0x19991112, ACPI_DSDT, all_versions, "Implicit Return", 0},
63
        /* Portege 4030 */
64
        {"TOSHIB", "4030    ", 0x19991112, ACPI_DSDT, all_versions, "Implicit Return", 0},
65
        /* Portege 310/320, BIOS 7.1 */
66
        {"TOSHIB", "310     ", 0x19990511, ACPI_DSDT, all_versions, "Implicit Return", 0},
67
        /* Seattle 2, old bios rev. */
68
        {"INTEL ", "440BX   ", 0x00001000, ACPI_DSDT, less_than_or_equal, "Field beyond end of region", 0},
69
        /* ASUS K7M */
70
        {"ASUS  ", "K7M     ", 0x00001000, ACPI_DSDT, less_than_or_equal, "Field beyond end of region", 0},
71
        /* Intel 810 Motherboard? */
72
        {"MNTRAL", "MO81010A", 0x00000012, ACPI_DSDT, less_than_or_equal, "Field beyond end of region", 0},
73
        /* Compaq Presario 711FR */
74
        {"COMAPQ", "EAGLES", 0x06040000, ACPI_DSDT, less_than_or_equal, "SCI issues (C2 disabled)", 0},
75
        /* Compaq Presario 1700 */
76
        {"PTLTD ", "  DSDT  ", 0x06040000, ACPI_DSDT, less_than_or_equal, "Multiple problems", 1},
77
        /* Sony FX120, FX140, FX150? */
78
        {"SONY  ", "U0      ", 0x20010313, ACPI_DSDT, less_than_or_equal, "ACPI driver problem", 1},
79
        /* Compaq Presario 800, Insyde BIOS */
80
        {"INT440", "SYSFexxx", 0x00001001, ACPI_DSDT, less_than_or_equal, "Does not use _REG to protect EC OpRegions", 1},
81
        /* IBM 600E - _ADR should return 7, but it returns 1 */
82
        {"IBM   ", "TP600E  ", 0x00000105, ACPI_DSDT, less_than_or_equal, "Incorrect _ADR", 1},
83
        {"ASUS\0\0", "P2B-S   ", 0, ACPI_DSDT, all_versions, "Bogus PCI routing", 1},
84
 
85
        {""}
86
};
87
 
88
 
89
int __init
90
acpi_blacklisted(void)
91
{
92
        int i = 0;
93
        int blacklisted = 0;
94
        struct acpi_table_header *table_header;
95
 
96
        while (acpi_blacklist[i].oem_id[0] != '\0')
97
        {
98
                if (acpi_get_table_header_early(acpi_blacklist[i].table, &table_header)) {
99
                        i++;
100
                        continue;
101
                }
102
 
103
                if (strncmp(acpi_blacklist[i].oem_id, table_header->oem_id, 6)) {
104
                        i++;
105
                        continue;
106
                }
107
 
108
                if (strncmp(acpi_blacklist[i].oem_table_id, table_header->oem_table_id, 8)) {
109
                        i++;
110
                        continue;
111
                }
112
 
113
                if ((acpi_blacklist[i].oem_revision_predicate == all_versions)
114
                    || (acpi_blacklist[i].oem_revision_predicate == less_than_or_equal
115
                        && table_header->oem_revision <= acpi_blacklist[i].oem_revision)
116
                    || (acpi_blacklist[i].oem_revision_predicate == greater_than_or_equal
117
                        && table_header->oem_revision >= acpi_blacklist[i].oem_revision)
118
                    || (acpi_blacklist[i].oem_revision_predicate == equal
119
                        && table_header->oem_revision == acpi_blacklist[i].oem_revision)) {
120
 
121
                        printk(KERN_ERR PREFIX "Vendor \"%6.6s\" System \"%8.8s\" "
122
                                "Revision 0x%x has a known ACPI BIOS problem.\n",
123
                                acpi_blacklist[i].oem_id,
124
                                acpi_blacklist[i].oem_table_id,
125
                                acpi_blacklist[i].oem_revision);
126
 
127
                        printk(KERN_ERR PREFIX "Reason: %s. This is a %s error\n",
128
                                acpi_blacklist[i].reason,
129
                                (acpi_blacklist[i].is_critical_error ? "non-recoverable" : "recoverable"));
130
 
131
                        blacklisted = acpi_blacklist[i].is_critical_error;
132
                        break;
133
                }
134
                else {
135
                        i++;
136
                }
137
        }
138
 
139
        return blacklisted;
140
}
141
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.