This patch is needed on some Thinkpads when searching 'short' name
paths (\_SB.PCI0.xxxx instead of \_SB_.PCI0.xxx)
Please test and report.
Index: dsdt.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/dsdt.c,v
retrieving revision 1.172
diff -u -p -u -p -b -r1.172 dsdt.c
--- dsdt.c 22 Jul 2010 14:19:47 -0000 1.172
+++ dsdt.c 22 Jul 2010 17:05:39 -0000
@@ -4101,6 +4101,8 @@ struct aml_node *
aml_searchname(struct aml_node *root, const void *vname)
{
char *name = (char *)vname;
+ char nseg[5];
+ int i;
dnprintf(25,"Searchname: %s:%s = ", aml_nodename(root), vname);
if (*name == AMLOP_ROOTCHAR) {
@@ -4108,8 +4110,13 @@ aml_searchname(struct aml_node *root, co
name++;
}
while (*name != 0) {
- root = __aml_search(root, name, 0);
- name += (name[4] == '.') ? 5 : 4;
+ /* Ugh.. we can have short names here: append '_' */
+ strlcpy(nseg, "____", sizeof(nseg));
+ for (i=0; i < 4 && *name && *name != '.'; i++)
+ nseg[i] = *name++;
+ if (*name == '.')
+ name++;
+ root = __aml_search(root, nseg, 0);
}
dnprintf(25,"%p %s\n", root, aml_nodename(root));
return root;