1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 23 */ 24 25 #include <sys/acpica.h> 26 #include <sys/kmem.h> 27 #include <sys/types.h> 28 29 /* 30 * For historical reasons certain ISA or onboard devices have their name in 31 * the device tree altered and other changes made. 32 * 33 * If a device ID matches here, we will create the devi node name, model, and 34 * (if set) compatible property. The compatible property should already be in 35 * 1275 form, and _overwrites_ any identifier from enumeration. 36 * 37 * In most cases, ISA-like devices not present in this table _will not be 38 * enumerated_. Serial ports are a special case handled because of bugs in 39 * old ACPI tables, see enumerate_BIOS_serial() in the isa(4D) nexus. 40 */ 41 static const isapnp_desc_t isapnp_descs[] = { 42 /* 43 * This wildcard entry catches anything in the PNP keyboard class, and 44 * sets it compatible with the IBM Enhanced 101/102-key, to which 45 * kb8042 actually binds 46 */ 47 { "PNP03", B_TRUE, "keyboard", "pnpPNP,303", "System keyboard" }, 48 49 /* ecpp(4D) binds to "lp" */ 50 { "PNP0400", B_FALSE, "lp", NULL, "Standard LPT printer port" }, 51 { "PNP0401", B_FALSE, "lp", NULL, "ECP printer port" }, 52 { "ISY0060", B_FALSE, "lp", NULL, "Parallel port" }, 53 54 /* asy(4D) binds to "asy" */ 55 { "PNP0500", B_FALSE, "asy", NULL, "Standard PC COM port" }, 56 { "PNP0501", B_FALSE, "asy", NULL, "16550A-compatible COM port" }, 57 { "ISY0020", B_FALSE, "asy", NULL, "Serial port" }, 58 59 /* fdc(4D) binds to "fdc" */ 60 { "PNP0700", B_FALSE, "fdc", NULL, 61 "PC standard floppy disk controller" }, 62 { "PNP0701", B_FALSE, "fdc", NULL, 63 "Standard floppy controller supporting MS Device Bay Spec" }, 64 { "ISY0050", B_FALSE, "fdc", NULL, 65 "Floppy disk controller" }, 66 67 /* tpm(4D) binds to "tpm" */ 68 { "PNP0C31", B_FALSE, "tpm", NULL, "Generic Trusted Platform Module" }, 69 { "ATM1200", B_FALSE, "tpm", NULL, "Generic Trusted Platform Module" }, 70 { "IFX0102", B_FALSE, "tpm", NULL, "Generic Trusted Platform Module" }, 71 { "BCM0101", B_FALSE, "tpm", NULL, "Generic Trusted Platform Module" }, 72 { "NSC1200", B_FALSE, "tpm", NULL, "Generic Trusted Platform Module" }, 73 74 /* 75 * This wildcard entry catches anything in the PNP mouse class, and 76 * sets it compatible with the Microsoft PS/2-style, to which 77 * mouse8042 actually binds. 78 */ 79 { "PNP0F", B_TRUE, "mouse", "pnpPNP,f03", "System mouse" }, 80 81 { "ISY0030", B_FALSE, "mouse", "pnpPNP,f03", "System mouse" }, 82 { "SYN010B", B_FALSE, "mouse", "pnpPNP,f03", "Synaptics mouse pad" }, 83 84 { NULL, B_FALSE, NULL, NULL, NULL }, 85 }; 86 87 /* 88 * Return the first record found matching the pnpid list 89 */ 90 const isapnp_desc_t * 91 isapnp_desc_lookup(const device_id_t *pnpid) 92 { 93 const device_id_t *d; 94 const isapnp_desc_t *m; 95 96 while (pnpid != NULL) { 97 for (m = isapnp_descs; m->ipnp_id != NULL; m++) { 98 if (m->ipnp_prefix) { 99 if (strncmp(pnpid->id, m->ipnp_id, 100 strlen(m->ipnp_id)) == 0) { 101 return (m); 102 } 103 } else if (strcmp(pnpid->id, m->ipnp_id) == 0) { 104 return (m); 105 } 106 } 107 pnpid = pnpid->next; 108 } 109 110 return (NULL); 111 } 112