From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=66.187.233.73; helo=mx1.redhat.com; envelope-from=lersek@redhat.com; receiver=edk2-devel@lists.01.org Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B3B1C207E53E0 for ; Tue, 8 May 2018 07:47:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6B58D7D843; Tue, 8 May 2018 14:47:18 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-124-13.rdu2.redhat.com [10.10.124.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id EC45C2023272; Tue, 8 May 2018 14:47:17 +0000 (UTC) To: Guy Raviv References: From: Laszlo Ersek Cc: edk2-devel@lists.01.org Message-ID: Date: Tue, 8 May 2018 16:47:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 08 May 2018 14:47:18 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Tue, 08 May 2018 14:47:18 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lersek@redhat.com' RCPT:'' Subject: Re: Dynamic Pci configuration devices X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 May 2018 14:47:20 -0000 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit On 05/08/18 16:16, Guy Raviv wrote: > Hi all, > > currently in > > \Vlv2DeviceRefCodePkg\AcpiTablesPCAT\HOST_BUS.ASL > > The PCI devices are declared statically. > > i want to make this declaration dynamic - so that the device number can change > > according according to my hardware setup. Is it possible? There are generally two ways for this. One is to write the bulk of the ASL like seen here, statically, but all the customizable values are referenced as external objects / fields. Then, a platform ACPI DXE driver in the firmware computes those values, and installs a small SSDT with just those objects. The AML is generated manually by the firmware, which is super awkward, but due to the small size of the integer objects etc, it is tolerable. A similar approach can be seen e.g. in "OvmfPkg/AcpiPlatformDxe/Qemu.c", function QemuInstallAcpiSsdtTable(). And the referring ASL code is in "OvmfPkg/AcpiTables/Dsdt.asl". (Search both for "FWDT".) (Note however that said function is not used nowadays on QEMU, because now QEMU generates *all* of the AML dynamically.) The other approach is to process the (static) AML before installing it with EFI_ACPI_TABLE_PROTOCOL.InstallAcpiTable(). If you know the exact path to / structure of the AML node that you want to modify, the EFI_ACPI_SDT_PROTOCOL lets you navigate to the node, and patch it in-place, in a memory array. Then you can install the modified table blob with EFI_ACPI_TABLE_PROTOCOL. (Important: do not modify a table *after* it is installed.) One example for the 2nd approach should be "QuarkPlatformPkg/Acpi/Dxe/AcpiPlatform/AcpiPciUpdate.c". Thanks Laszlo