From: Ducrot Bruno <ducrot-kk6yZipjEM5g9hUCZPvPmw@public.gmane.org>
To: x545 <x545-hi6Y0CQ0nG0@public.gmane.org>
Cc: Ducrot Bruno <ducrot-kk6yZipjEM5g9hUCZPvPmw@public.gmane.org>,
Dominik Bartenstein <dom-K271P2BsTd0@public.gmane.org>,
acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: thinkpad workaround v2.
Date: Mon, 20 Jan 2003 15:09:26 +0100 [thread overview]
Message-ID: <20030120140926.GA11487@poup.poupinou.org> (raw)
In-Reply-To: <200301201442.27358.x545-hi6Y0CQ0nG0@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 782 bytes --]
On Mon, Jan 20, 2003 at 02:42:27PM +0100, x545 wrote:
> I get many Errors, all the same in osl.c, line
> 234,241,243,244,248,250,251,266,290: dereferencing pointer to incomplete
> type
> Can you please give short instructions what's wrong or send a complete
> working diff?
in short, 'struct acpi_table_ecdt' is now in include/linux/acpi.h
Then replace
#include "acpi.h"
by
#include <linux/acpi.h>
(which include drivers/acpi/include/acpi.h btw)
in the file drivers/acpi/osl.c
Here goes the complete patch to be make things cleaner.
my big apologies for this mistake by me..
A final note though: I don't have a thinkpad to play with
so that I can not test myself this workaround.
--
Ducrot Bruno
-- Which is worse: ignorance or apathy?
-- Don't know. Don't care.
[-- Attachment #2: thinkpad_ecdt_workaround-v2.diff --]
[-- Type: text/plain, Size: 2928 bytes --]
--- linux-2.4/drivers/acpi/osl.c 2003/01/20 11:26:31 1.1
+++ linux-2.4/drivers/acpi/osl.c 2003/01/20 12:40:54
@@ -25,6 +25,9 @@
*
*/
+/* Define this if you are a Thinkpad owner. */
+/* #define CONFIG_ACPI_IBM_ECDT_WORKAROUND */
+
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/slab.h>
@@ -35,7 +38,11 @@
#include <linux/delay.h>
#include <asm/io.h>
#include "acpi_bus.h"
+#ifdef CONFIG_ACPI_IBM_ECDT_WORKAROUND
+#include <linux/acpi.h>
+#else
#include "acpi.h"
+#endif
#ifdef CONFIG_ACPI_EFI
#include <linux/efi.h>
@@ -201,6 +208,94 @@
return AE_OK;
}
+#ifdef CONFIG_ACPI_IBM_ECDT_WORKAROUND
+static u8
+compute_checksum(struct acpi_table_header * h)
+{
+ int i;
+ u8 *p;
+ u8 cs;
+
+ p = (u8 *) h;
+ cs = 0;
+ for (i = 0; i < h->length; i++)
+ cs += *p++;
+ return cs;
+}
+
+static acpi_status
+try_to_replace_ibm_ecdt(struct acpi_table_ecdt * old,
+ struct acpi_table_ecdt ** new)
+{
+ u32 len;
+ u8 *p;
+ struct acpi_table_ecdt *ecdt;
+
+ *new = NULL;
+
+ len = old->header.length;
+ ecdt = kmalloc(len + 1, GFP_KERNEL);
+ if (!ecdt)
+ return AE_NO_MEMORY;
+
+ memcpy(ecdt, old, len);
+
+ ecdt->header.length = len + 1;
+
+ for (p = (u8 *) ecdt + ecdt->header.length - 1;
+ p != (u8 *) & ecdt->ec_id;
+ --p) {
+ *p = *(p - 1);
+ }
+ ecdt->ec_id[1] = '_';
+
+ ecdt->header.checksum = 0;
+ ecdt->header.checksum = -compute_checksum((struct acpi_table_header *) ecdt);
+
+ *new = ecdt;
+
+ printk(KERN_WARNING "acpi: IBM's ECDT TABLE sucessfully replaced by a corrected one.\n");
+
+ return AE_OK;
+}
+
+
+static acpi_status
+verify_ibm_ecdt(struct acpi_table_ecdt * existing_table,
+ struct acpi_table_ecdt ** new_table)
+{
+ const char *const ec_id =
+ ((struct acpi_table_ecdt *) existing_table)->ec_id;
+
+ if (ec_id[0] == '\\' && ec_id[1] == 'S') {
+ printk(KERN_WARNING "acpi: Found bad ACPI ECDT table from IBM in the firmware\n");
+ return (try_to_replace_ibm_ecdt(existing_table, new_table));
+ }
+ return AE_OK;
+}
+
+
+
+acpi_status
+acpi_os_table_override(struct acpi_table_header * existing_table,
+ struct acpi_table_header ** new_table)
+{
+ if (!existing_table || !new_table)
+ return AE_BAD_PARAMETER;
+
+ *new_table = NULL;
+
+ if (!memcmp(existing_table->signature, "ECDT", 4)) {
+ struct acpi_table_ecdt *old = (struct acpi_table_ecdt *) existing_table;
+ struct acpi_table_ecdt **new = (struct acpi_table_ecdt **) new_table;
+
+ if (!memcmp(old->header.oem_id, "IBM", 3))
+ return (verify_ibm_ecdt(old, new));
+ }
+ return AE_OK;
+}
+
+#else /* CONFIG_ACPI_IBM_ECDT_WORKAROUND */
acpi_status
acpi_os_table_override (struct acpi_table_header *existing_table,
struct acpi_table_header **new_table)
@@ -211,6 +306,7 @@
*new_table = NULL;
return AE_OK;
}
+#endif
static void
acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
next prev parent reply other threads:[~2003-01-20 14:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-17 18:47 IBM Thinkpad A31 | News Dominik Bartenstein
[not found] ` <200301172111.15037.dom@wahuu.at>
[not found] ` <20030117210321.GC12516@poup.poupinou.org>
[not found] ` <200301172204.52963.dom@wahuu.at>
[not found] ` <200301172204.52963.dom-K271P2BsTd0@public.gmane.org>
2003-01-18 16:45 ` Ducrot Bruno
[not found] ` <20030118164525.GD12516-j6u/t2rXLliUoIHC/UFpr9i2O/JbrIOy@public.gmane.org>
2003-01-18 17:08 ` WARN: please read if you applyied 00_thinkpad_workaround.diff (Re: IBM Thinkpad A31 | News) Ducrot Bruno
[not found] ` <20030118170844.GE12516-j6u/t2rXLliUoIHC/UFpr9i2O/JbrIOy@public.gmane.org>
2003-01-20 13:42 ` x545
[not found] ` <200301201442.27358.x545-hi6Y0CQ0nG0@public.gmane.org>
2003-01-20 14:09 ` Ducrot Bruno [this message]
[not found] ` <20030120140926.GA11487-j6u/t2rXLliUoIHC/UFpr9i2O/JbrIOy@public.gmane.org>
2003-01-20 14:30 ` thinkpad workaround v2 Dominik Bartenstein
[not found] ` <20030120144413.GD11487@poup.poupinou.org>
[not found] ` <200301201554.13984.dom@wahuu.at>
[not found] ` <200301201554.13984.dom-K271P2BsTd0@public.gmane.org>
2003-01-20 15:40 ` Ducrot Bruno
[not found] ` <20030120154043.GI11487-j6u/t2rXLliUoIHC/UFpr9i2O/JbrIOy@public.gmane.org>
2003-01-20 17:15 ` apologizes (was Re: Re: thinkpad workaround v2.) Ducrot Bruno
2003-01-20 15:17 ` thinkpad workaround v2 x545
[not found] ` <200301171947.54174.dom-K271P2BsTd0@public.gmane.org>
2003-01-21 7:25 ` IBM Thinkpad A31 | News Christian Zoz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030120140926.GA11487@poup.poupinou.org \
--to=ducrot-kk6yzipjem5g9huczpvpmw@public.gmane.org \
--cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=dom-K271P2BsTd0@public.gmane.org \
--cc=x545-hi6Y0CQ0nG0@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox