Date: Mon, 17 May 2021 14:00:21 -0600 From: John Nielsen <lists@jnielsen.net> To: "freebsd-acpi@freebsd.org" <freebsd-acpi@FreeBSD.org> Subject: How to properly locate/parse ACPI table from kernel module? Message-ID: <BCFCDCE9-F169-4C1C-AD0C-FDE511C0BC11@jnielsen.net>
next in thread | raw e-mail | index | archive | help
Hi all- I=E2=80=99m not much of a kernel programmer but I=E2=80=99m trying to = maintain/improve the isboot module, which allows booting directly from = iSCSI by reading the iSCSI Boot Firmware Table (iBFT), bringing up the = interface with the details specified therein and connecting to the = specified iSCSI target before trying to mount root. I=E2=80=99m not the original author but as the port maintainer I am = hosting the code here: https://github.com/jnielsendotnet/isboot I have a test system where the module loads but fails to find the iBFT. = I reviewed the iBFT code and realized it has a bunch of magic numbers = mixed in with some random memory diving. If I=E2=80=99m reading it right = (see https://github.com/jnielsendotnet/isboot/blob/master/src/ibft.h#L37 = and = https://github.com/jnielsendotnet/isboot/blob/master/src/ibft.c#L521), = it looks like it scans all of the (kernel?) memory between 512K and 1M = in 16-byte increments looking for one beginning with the string = =E2=80=9CiBFT=E2=80=9D, which if it finds will be used as the offset for = reading the table. I don=E2=80=99t know where the 512K and 1M values = came from or if they are correct, but I do have a system where that = method does not work. IIUC, the iBFT is an ACPI table, and it seems like using ACPI to find it = would be safer and more reliable. So my question is: how does one do = that? Are there other places in the kernel code that do this sort of = thing that I could use as a model? Any gotchas I should know about as a = (less-than) novice kernel programmer? Thanks! JN
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BCFCDCE9-F169-4C1C-AD0C-FDE511C0BC11>