]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * blacklist.c | |
3 | * | |
4 | * Check to see if the given machine has a known bad ACPI BIOS | |
5 | * or if the BIOS is too old. | |
d4b7dc49 | 6 | * Check given machine against acpi_osi_dmi_table[]. |
1da177e4 LT |
7 | * |
8 | * Copyright (C) 2004 Len Brown <len.brown@intel.com> | |
9 | * Copyright (C) 2002 Andy Grover <andrew.grover@intel.com> | |
10 | * | |
11 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
12 | * | |
13 | * This program is free software; you can redistribute it and/or modify | |
14 | * it under the terms of the GNU General Public License as published by | |
15 | * the Free Software Foundation; either version 2 of the License, or (at | |
16 | * your option) any later version. | |
17 | * | |
18 | * This program is distributed in the hope that it will be useful, but | |
19 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
21 | * General Public License for more details. | |
22 | * | |
23 | * You should have received a copy of the GNU General Public License along | |
24 | * with this program; if not, write to the Free Software Foundation, Inc., | |
25 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | |
26 | * | |
27 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
28 | */ | |
29 | ||
1da177e4 LT |
30 | #include <linux/kernel.h> |
31 | #include <linux/module.h> | |
32 | #include <linux/init.h> | |
33 | #include <linux/acpi.h> | |
34 | #include <acpi/acpi_bus.h> | |
35 | #include <linux/dmi.h> | |
36 | ||
4be44fcd LB |
37 | enum acpi_blacklist_predicates { |
38 | all_versions, | |
39 | less_than_or_equal, | |
40 | equal, | |
41 | greater_than_or_equal, | |
1da177e4 LT |
42 | }; |
43 | ||
4be44fcd LB |
44 | struct acpi_blacklist_item { |
45 | char oem_id[7]; | |
46 | char oem_table_id[9]; | |
47 | u32 oem_revision; | |
ad71860a | 48 | char *table; |
4be44fcd LB |
49 | enum acpi_blacklist_predicates oem_revision_predicate; |
50 | char *reason; | |
51 | u32 is_critical_error; | |
1da177e4 LT |
52 | }; |
53 | ||
d4b7dc49 LB |
54 | static struct dmi_system_id acpi_osi_dmi_table[] __initdata; |
55 | ||
1da177e4 LT |
56 | /* |
57 | * POLICY: If *anything* doesn't work, put it on the blacklist. | |
58 | * If they are critical errors, mark it critical, and abort driver load. | |
59 | */ | |
4be44fcd | 60 | static struct acpi_blacklist_item acpi_blacklist[] __initdata = { |
1da177e4 | 61 | /* Compaq Presario 1700 */ |
ad71860a | 62 | {"PTLTD ", " DSDT ", 0x06040000, ACPI_SIG_DSDT, less_than_or_equal, |
4be44fcd | 63 | "Multiple problems", 1}, |
1da177e4 | 64 | /* Sony FX120, FX140, FX150? */ |
ad71860a | 65 | {"SONY ", "U0 ", 0x20010313, ACPI_SIG_DSDT, less_than_or_equal, |
4be44fcd | 66 | "ACPI driver problem", 1}, |
1da177e4 | 67 | /* Compaq Presario 800, Insyde BIOS */ |
ad71860a | 68 | {"INT440", "SYSFexxx", 0x00001001, ACPI_SIG_DSDT, less_than_or_equal, |
4be44fcd | 69 | "Does not use _REG to protect EC OpRegions", 1}, |
1da177e4 | 70 | /* IBM 600E - _ADR should return 7, but it returns 1 */ |
ad71860a | 71 | {"IBM ", "TP600E ", 0x00000105, ACPI_SIG_DSDT, less_than_or_equal, |
4be44fcd | 72 | "Incorrect _ADR", 1}, |
ad71860a | 73 | {"ASUS\0\0", "P2B-S ", 0, ACPI_SIG_DSDT, all_versions, |
4be44fcd | 74 | "Bogus PCI routing", 1}, |
1da177e4 LT |
75 | |
76 | {""} | |
77 | }; | |
78 | ||
1da177e4 LT |
79 | #if CONFIG_ACPI_BLACKLIST_YEAR |
80 | ||
4be44fcd | 81 | static int __init blacklist_by_year(void) |
1da177e4 | 82 | { |
f083a329 AK |
83 | int year = dmi_get_year(DMI_BIOS_DATE); |
84 | /* Doesn't exist? Likely an old system */ | |
5b27b176 AGACI |
85 | if (year == -1) { |
86 | printk(KERN_ERR PREFIX "no DMI BIOS year, " | |
87 | "acpi=force is required to enable ACPI\n" ); | |
f083a329 | 88 | return 1; |
5b27b176 | 89 | } |
f083a329 | 90 | /* 0? Likely a buggy new BIOS */ |
5b27b176 AGACI |
91 | if (year == 0) { |
92 | printk(KERN_ERR PREFIX "DMI BIOS year==0, " | |
93 | "assuming ACPI-capable machine\n" ); | |
1da177e4 | 94 | return 0; |
5b27b176 | 95 | } |
1da177e4 | 96 | if (year < CONFIG_ACPI_BLACKLIST_YEAR) { |
4be44fcd LB |
97 | printk(KERN_ERR PREFIX "BIOS age (%d) fails cutoff (%d), " |
98 | "acpi=force is required to enable ACPI\n", | |
99 | year, CONFIG_ACPI_BLACKLIST_YEAR); | |
1da177e4 LT |
100 | return 1; |
101 | } | |
102 | return 0; | |
103 | } | |
104 | #else | |
4be44fcd LB |
105 | static inline int blacklist_by_year(void) |
106 | { | |
107 | return 0; | |
108 | } | |
1da177e4 LT |
109 | #endif |
110 | ||
4be44fcd | 111 | int __init acpi_blacklisted(void) |
1da177e4 LT |
112 | { |
113 | int i = 0; | |
114 | int blacklisted = 0; | |
428f2112 | 115 | struct acpi_table_header table_header; |
1da177e4 | 116 | |
4be44fcd | 117 | while (acpi_blacklist[i].oem_id[0] != '\0') { |
ad71860a | 118 | if (acpi_get_table_header(acpi_blacklist[i].table, 0, &table_header)) { |
1da177e4 LT |
119 | i++; |
120 | continue; | |
121 | } | |
122 | ||
428f2112 | 123 | if (strncmp(acpi_blacklist[i].oem_id, table_header.oem_id, 6)) { |
1da177e4 LT |
124 | i++; |
125 | continue; | |
126 | } | |
127 | ||
4be44fcd | 128 | if (strncmp |
428f2112 | 129 | (acpi_blacklist[i].oem_table_id, table_header.oem_table_id, |
4be44fcd | 130 | 8)) { |
1da177e4 LT |
131 | i++; |
132 | continue; | |
133 | } | |
134 | ||
135 | if ((acpi_blacklist[i].oem_revision_predicate == all_versions) | |
4be44fcd LB |
136 | || (acpi_blacklist[i].oem_revision_predicate == |
137 | less_than_or_equal | |
428f2112 | 138 | && table_header.oem_revision <= |
4be44fcd LB |
139 | acpi_blacklist[i].oem_revision) |
140 | || (acpi_blacklist[i].oem_revision_predicate == | |
141 | greater_than_or_equal | |
428f2112 | 142 | && table_header.oem_revision >= |
4be44fcd | 143 | acpi_blacklist[i].oem_revision) |
1da177e4 | 144 | || (acpi_blacklist[i].oem_revision_predicate == equal |
428f2112 | 145 | && table_header.oem_revision == |
4be44fcd LB |
146 | acpi_blacklist[i].oem_revision)) { |
147 | ||
148 | printk(KERN_ERR PREFIX | |
149 | "Vendor \"%6.6s\" System \"%8.8s\" " | |
150 | "Revision 0x%x has a known ACPI BIOS problem.\n", | |
151 | acpi_blacklist[i].oem_id, | |
152 | acpi_blacklist[i].oem_table_id, | |
153 | acpi_blacklist[i].oem_revision); | |
154 | ||
155 | printk(KERN_ERR PREFIX | |
156 | "Reason: %s. This is a %s error\n", | |
157 | acpi_blacklist[i].reason, | |
158 | (acpi_blacklist[i]. | |
159 | is_critical_error ? "non-recoverable" : | |
160 | "recoverable")); | |
1da177e4 LT |
161 | |
162 | blacklisted = acpi_blacklist[i].is_critical_error; | |
163 | break; | |
4be44fcd | 164 | } else { |
1da177e4 LT |
165 | i++; |
166 | } | |
167 | } | |
168 | ||
169 | blacklisted += blacklist_by_year(); | |
170 | ||
d4b7dc49 LB |
171 | dmi_check_system(acpi_osi_dmi_table); |
172 | ||
1da177e4 LT |
173 | return blacklisted; |
174 | } | |
d4b7dc49 | 175 | #ifdef CONFIG_DMI |
98f1db22 LB |
176 | static int __init dmi_enable_osi_linux(const struct dmi_system_id *d) |
177 | { | |
178 | acpi_dmi_osi_linux(1, d); /* enable */ | |
179 | return 0; | |
180 | } | |
a1bd4e35 LB |
181 | static int __init dmi_disable_osi_linux(const struct dmi_system_id *d) |
182 | { | |
183 | acpi_dmi_osi_linux(0, d); /* disable */ | |
184 | return 0; | |
185 | } | |
186 | static int __init dmi_unknown_osi_linux(const struct dmi_system_id *d) | |
187 | { | |
188 | acpi_dmi_osi_linux(-1, d); /* unknown */ | |
189 | return 0; | |
190 | } | |
191 | ||
192 | /* | |
193 | * Most BIOS that invoke OSI(Linux) do nothing with it. | |
194 | * But some cause Linux to break. | |
195 | * Only a couple use it to make Linux run better. | |
196 | * | |
197 | * Thus, Linux should continue to disable OSI(Linux) by default, | |
198 | * should continue to discourage BIOS writers from using it, and | |
199 | * should whitelist the few existing systems that require it. | |
200 | * | |
201 | * If it appears clear a vendor isn't using OSI(Linux) | |
202 | * for anything constructive, blacklist them by name to disable | |
203 | * unnecessary dmesg warnings on all of their products. | |
204 | */ | |
98f1db22 | 205 | |
d4b7dc49 | 206 | static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { |
98f1db22 | 207 | /* |
a1bd4e35 LB |
208 | * Disable OSI(Linux) warnings on all "Acer, inc." |
209 | * | |
210 | * _OSI(Linux) disables the latest Windows BIOS code: | |
211 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5050"), | |
212 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5580"), | |
213 | * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 3010"), | |
214 | * _OSI(Linux) effect unknown: | |
215 | * DMI_MATCH(DMI_PRODUCT_NAME, "Ferrari 5000"), | |
216 | */ | |
217 | { | |
218 | .callback = dmi_disable_osi_linux, | |
219 | .ident = "Acer, inc.", | |
220 | .matches = { | |
221 | DMI_MATCH(DMI_SYS_VENDOR, "Acer, inc."), | |
222 | }, | |
223 | }, | |
224 | /* | |
225 | * Disable OSI(Linux) warnings on all "Acer" | |
226 | * | |
227 | * _OSI(Linux) effect unknown: | |
228 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"), | |
229 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"), | |
230 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720Z"), | |
231 | * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 5520"), | |
232 | * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 6460"), | |
233 | * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 7510"), | |
234 | * DMI_MATCH(DMI_PRODUCT_NAME, "Extensa 5220"), | |
235 | */ | |
236 | { | |
237 | .callback = dmi_unknown_osi_linux, | |
238 | .ident = "Acer", | |
239 | .matches = { | |
240 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | |
241 | }, | |
242 | }, | |
243 | /* | |
244 | * Disable OSI(Linux) warnings on all "Apple Computer, Inc." | |
245 | * | |
246 | * _OSI(Linux) confirmed to be a NOP: | |
247 | * DMI_MATCH(DMI_PRODUCT_NAME, "MacBook1,1"), | |
248 | * DMI_MATCH(DMI_PRODUCT_NAME, "MacBook2,1"), | |
249 | * DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,2"), | |
250 | * _OSI(Linux) effect unknown: | |
251 | * DMI_MATCH(DMI_PRODUCT_NAME, "MacPro2,1"), | |
252 | * DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro1,1"), | |
253 | * DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"), | |
254 | */ | |
255 | { | |
256 | .callback = dmi_disable_osi_linux, | |
257 | .ident = "Apple", | |
258 | .matches = { | |
259 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Computer, Inc."), | |
260 | }, | |
261 | }, | |
262 | /* | |
263 | * Disable OSI(Linux) warnings on all "BenQ" | |
264 | * | |
265 | * _OSI(Linux) confirmed to be a NOP: | |
266 | * DMI_MATCH(DMI_PRODUCT_NAME, "Joybook S31"), | |
267 | */ | |
268 | { | |
269 | .callback = dmi_disable_osi_linux, | |
270 | .ident = "BenQ", | |
271 | .matches = { | |
272 | DMI_MATCH(DMI_SYS_VENDOR, "BenQ"), | |
273 | }, | |
274 | }, | |
275 | /* | |
276 | * Disable OSI(Linux) warnings on all "Clevo Co." | |
277 | * | |
278 | * _OSI(Linux) confirmed to be a NOP: | |
279 | * DMI_MATCH(DMI_PRODUCT_NAME, "M570RU"), | |
280 | */ | |
281 | { | |
282 | .callback = dmi_disable_osi_linux, | |
283 | .ident = "Clevo", | |
284 | .matches = { | |
285 | DMI_MATCH(DMI_SYS_VENDOR, "Clevo Co."), | |
286 | }, | |
287 | }, | |
288 | /* | |
289 | * Disable OSI(Linux) warnings on all "COMPAL" | |
290 | * | |
291 | * _OSI(Linux) confirmed to be a NOP: | |
292 | * DMI_MATCH(DMI_BOARD_NAME, "HEL8X"), | |
293 | * _OSI(Linux) unknown effect: | |
294 | * DMI_MATCH(DMI_BOARD_NAME, "IFL91"), | |
295 | */ | |
296 | { | |
297 | .callback = dmi_unknown_osi_linux, | |
298 | .ident = "Compal", | |
299 | .matches = { | |
300 | DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"), | |
301 | }, | |
302 | }, | |
303 | { /* OSI(Linux) touches USB, breaks suspend to disk */ | |
304 | .callback = dmi_disable_osi_linux, | |
305 | .ident = "Dell Dimension 5150", | |
306 | .matches = { | |
307 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
308 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM051"), | |
309 | }, | |
310 | }, | |
311 | { /* OSI(Linux) is a NOP */ | |
312 | .callback = dmi_disable_osi_linux, | |
313 | .ident = "Dell", | |
314 | .matches = { | |
315 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
316 | DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1501"), | |
317 | }, | |
318 | }, | |
319 | { /* OSI(Linux) effect unknown */ | |
320 | .callback = dmi_unknown_osi_linux, | |
321 | .ident = "Dell", | |
322 | .matches = { | |
323 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
324 | DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D830"), | |
325 | }, | |
326 | }, | |
327 | { /* OSI(Linux) effect unknown */ | |
328 | .callback = dmi_unknown_osi_linux, | |
329 | .ident = "Dell", | |
330 | .matches = { | |
331 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
332 | DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex GX620"), | |
333 | }, | |
334 | }, | |
335 | { /* OSI(Linux) effect unknown */ | |
336 | .callback = dmi_unknown_osi_linux, | |
337 | .ident = "Dell", | |
338 | .matches = { | |
339 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
340 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1900"), | |
341 | }, | |
342 | }, | |
343 | { /* OSI(Linux) touches USB */ | |
344 | .callback = dmi_disable_osi_linux, | |
345 | .ident = "Dell", | |
346 | .matches = { | |
347 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
348 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation 390"), | |
349 | }, | |
350 | }, | |
351 | { /* OSI(Linux) is a NOP */ | |
352 | .callback = dmi_disable_osi_linux, | |
353 | .ident = "Dell Vostro 1000", | |
354 | .matches = { | |
355 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
356 | DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1000"), | |
357 | }, | |
358 | }, | |
359 | { /* OSI(Linux) effect unknown */ | |
360 | .callback = dmi_unknown_osi_linux, | |
361 | .ident = "Dell", | |
362 | .matches = { | |
363 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | |
364 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge SC440"), | |
365 | }, | |
366 | }, | |
367 | { /* OSI(Linux) effect unknown */ | |
368 | .callback = dmi_unknown_osi_linux, | |
369 | .ident = "Dialogue Flybook V5", | |
370 | .matches = { | |
371 | DMI_MATCH(DMI_SYS_VENDOR, "Dialogue Technology Corporation"), | |
372 | DMI_MATCH(DMI_PRODUCT_NAME, "Flybook V5"), | |
373 | }, | |
374 | }, | |
375 | /* | |
376 | * Disable OSI(Linux) warnings on all "FUJITSU SIEMENS" | |
377 | * | |
378 | * _OSI(Linux) disables latest Windows BIOS code: | |
379 | * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pa 2510"), | |
380 | * _OSI(Linux) confirmed to be a NOP: | |
381 | * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 1536"), | |
382 | * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 1556"), | |
383 | * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 1546"), | |
384 | * _OSI(Linux) unknown effect: | |
385 | * DMI_MATCH(DMI_PRODUCT_NAME, "Amilo M1425"), | |
386 | * DMI_MATCH(DMI_PRODUCT_NAME, "Amilo Si 1520"), | |
387 | * DMI_MATCH(DMI_PRODUCT_NAME, "ESPRIMO Mobile V5505"), | |
388 | */ | |
389 | { | |
390 | .callback = dmi_disable_osi_linux, | |
391 | .ident = "Fujitsu Siemens", | |
392 | .matches = { | |
393 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | |
394 | }, | |
395 | }, | |
396 | /* | |
397 | * Disable OSI(Linux) warnings on all "Hewlett-Packard" | |
398 | * | |
399 | * _OSI(Linux) confirmed to be a NOP: | |
400 | * .ident = "HP Pavilion tx 1000" | |
401 | * DMI_MATCH(DMI_BOARD_NAME, "30BF"), | |
402 | * .ident = "HP Pavilion dv2000" | |
403 | * DMI_MATCH(DMI_BOARD_NAME, "30B5"), | |
404 | * .ident = "HP Pavilion dv5000", | |
405 | * DMI_MATCH(DMI_BOARD_NAME, "30A7"), | |
406 | * .ident = "HP Pavilion dv6300 30BC", | |
407 | * DMI_MATCH(DMI_BOARD_NAME, "30BC"), | |
408 | * .ident = "HP Pavilion dv6000", | |
409 | * DMI_MATCH(DMI_BOARD_NAME, "30B7"), | |
410 | * DMI_MATCH(DMI_BOARD_NAME, "30B8"), | |
411 | * .ident = "HP Pavilion dv9000", | |
412 | * DMI_MATCH(DMI_BOARD_NAME, "30B9"), | |
413 | * .ident = "HP Pavilion dv9500", | |
414 | * DMI_MATCH(DMI_BOARD_NAME, "30CB"), | |
415 | * .ident = "HP/Compaq Presario C500", | |
416 | * DMI_MATCH(DMI_BOARD_NAME, "30C6"), | |
417 | * .ident = "HP/Compaq Presario F500", | |
418 | * DMI_MATCH(DMI_BOARD_NAME, "30D3"), | |
419 | * _OSI(Linux) unknown effect: | |
420 | * .ident = "HP Pavilion dv6500", | |
421 | * DMI_MATCH(DMI_BOARD_NAME, "30D0"), | |
422 | */ | |
423 | { | |
424 | .callback = dmi_disable_osi_linux, | |
425 | .ident = "Hewlett-Packard", | |
426 | .matches = { | |
427 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | |
428 | }, | |
429 | }, | |
430 | /* | |
431 | * Lenovo has a mix of systems OSI(Linux) situations | |
432 | * and thus we can not wildcard the vendor. | |
433 | * | |
98f1db22 LB |
434 | * _OSI(Linux) helps sound |
435 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad R61"), | |
436 | * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"), | |
a1bd4e35 LB |
437 | * _OSI(Linux) is a NOP: |
438 | * DMI_MATCH(DMI_PRODUCT_VERSION, "3000 N100"), | |
98f1db22 LB |
439 | */ |
440 | { | |
441 | .callback = dmi_enable_osi_linux, | |
442 | .ident = "Lenovo ThinkPad R61", | |
443 | .matches = { | |
444 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | |
445 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad R61"), | |
446 | }, | |
447 | }, | |
448 | { | |
449 | .callback = dmi_enable_osi_linux, | |
450 | .ident = "Lenovo ThinkPad T61", | |
451 | .matches = { | |
452 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | |
453 | DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"), | |
454 | }, | |
455 | }, | |
a1bd4e35 LB |
456 | { |
457 | .callback = dmi_unknown_osi_linux, | |
458 | .ident = "Lenovo 3000 V100", | |
459 | .matches = { | |
460 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | |
461 | DMI_MATCH(DMI_PRODUCT_VERSION, "LENOVO3000 V100"), | |
462 | }, | |
463 | }, | |
464 | { | |
465 | .callback = dmi_disable_osi_linux, | |
466 | .ident = "Lenovo 3000 N100", | |
467 | .matches = { | |
468 | DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | |
469 | DMI_MATCH(DMI_PRODUCT_VERSION, "3000 N100"), | |
470 | }, | |
471 | }, | |
472 | /* | |
473 | * Disable OSI(Linux) warnings on all "LG Electronics" | |
474 | * | |
475 | * _OSI(Linux) confirmed to be a NOP: | |
476 | * DMI_MATCH(DMI_PRODUCT_NAME, "P1-J150B"), | |
477 | */ | |
478 | { | |
479 | .callback = dmi_disable_osi_linux, | |
480 | .ident = "LG", | |
481 | .matches = { | |
482 | DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"), | |
483 | }, | |
484 | }, | |
485 | /* NEC - OSI(Linux) effect unknown */ | |
486 | { | |
487 | .callback = dmi_unknown_osi_linux, | |
488 | .ident = "NEC VERSA M360", | |
489 | .matches = { | |
490 | DMI_MATCH(DMI_SYS_VENDOR, "NEC Computers SAS"), | |
491 | DMI_MATCH(DMI_PRODUCT_NAME, "NEC VERSA M360"), | |
492 | }, | |
493 | }, | |
494 | /* | |
495 | * Disable OSI(Linux) warnings on all "Samsung Electronics" | |
496 | * | |
497 | * OSI(Linux) disables PNP0C32 and other BIOS code for Windows: | |
498 | * DMI_MATCH(DMI_PRODUCT_NAME, "R40P/R41P"), | |
499 | * DMI_MATCH(DMI_PRODUCT_NAME, "R59P/R60P/R61P"), | |
500 | */ | |
501 | { | |
502 | .callback = dmi_disable_osi_linux, | |
503 | .ident = "Samsung", | |
504 | .matches = { | |
505 | DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), | |
506 | }, | |
507 | }, | |
508 | /* | |
509 | * Disable OSI(Linux) warnings on all "Sony Corporation" | |
510 | * | |
511 | * _OSI(Linux) is a NOP: | |
512 | * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SZ650N"), | |
513 | * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SZ38GP_C"), | |
514 | * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-TZ21MN_N"), | |
515 | * _OSI(Linux) unknown effect: | |
516 | * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ11M"), | |
517 | */ | |
518 | { | |
519 | .callback = dmi_unknown_osi_linux, | |
520 | .ident = "Sony", | |
521 | .matches = { | |
522 | DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | |
523 | }, | |
524 | }, | |
525 | /* | |
526 | * Disable OSI(Linux) warnings on all "TOSHIBA" | |
527 | * | |
528 | * _OSI(Linux) breaks sound (bugzilla 7787): | |
529 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P100"), | |
530 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P105"), | |
531 | * _OSI(Linux) is a NOP: | |
532 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A100"), | |
533 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A210"), | |
534 | * _OSI(Linux) unknown effect: | |
535 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A135"), | |
536 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A200"), | |
537 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P205"), | |
538 | * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite U305"), | |
539 | */ | |
540 | { | |
541 | .callback = dmi_disable_osi_linux, | |
542 | .ident = "Toshiba", | |
543 | .matches = { | |
544 | DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | |
545 | }, | |
546 | }, | |
d4b7dc49 LB |
547 | {} |
548 | }; | |
549 | ||
550 | #endif /* CONFIG_DMI */ |