199682Siwasaki/*- 299682Siwasaki * Copyright (c) 2002 Mitsaru Iwasaki 399682Siwasaki * All rights reserved. 499682Siwasaki * 599682Siwasaki * Redistribution and use in source and binary forms, with or without 699682Siwasaki * modification, are permitted provided that the following conditions 799682Siwasaki * are met: 899682Siwasaki * 1. Redistributions of source code must retain the above copyright 999682Siwasaki * notice, this list of conditions and the following disclaimer. 1099682Siwasaki * 2. Redistributions in binary form must reproduce the above copyright 1199682Siwasaki * notice, this list of conditions and the following disclaimer in the 1299682Siwasaki * documentation and/or other materials provided with the distribution. 1399682Siwasaki * 1499682Siwasaki * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1599682Siwasaki * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1699682Siwasaki * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1799682Siwasaki * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1899682Siwasaki * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1999682Siwasaki * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2099682Siwasaki * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2199682Siwasaki * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2299682Siwasaki * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2399682Siwasaki * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2499682Siwasaki * SUCH DAMAGE. 2599682Siwasaki */ 2699682Siwasaki 2799682Siwasaki/* 2899682Siwasaki * ACPI Table interfaces 2999682Siwasaki */ 3099682Siwasaki 31148318Snjl#include <sys/cdefs.h> 32148318Snjl__FBSDID("$FreeBSD: stable/11/sys/dev/acpica/Osd/OsdTable.c 316303 2017-03-30 20:18:34Z jkim $"); 33148318Snjl 34136161Snjl#include <sys/param.h> 35136161Snjl#include <sys/endian.h> 3699682Siwasaki#include <sys/kernel.h> 3799682Siwasaki#include <sys/linker.h> 3899682Siwasaki 39193530Sjkim#include <contrib/dev/acpica/include/acpi.h> 40316303Sjkim#include <contrib/dev/acpica/include/aclocal.h> 41193530Sjkim#include <contrib/dev/acpica/include/actables.h> 42136161Snjl 4399682Siwasaki#undef _COMPONENT 44167814Sjkim#define _COMPONENT ACPI_TABLES 4599682Siwasaki 46125795Snjlstatic char acpi_osname[128]; 47125795SnjlTUNABLE_STR("hw.acpi.osname", acpi_osname, sizeof(acpi_osname)); 48114246Snjl 4999682SiwasakiACPI_STATUS 50167814SjkimAcpiOsPredefinedOverride(const ACPI_PREDEFINED_NAMES *InitVal, 51167814Sjkim ACPI_STRING *NewVal) 52114246Snjl{ 53167814Sjkim 54250833Sjkim if (InitVal == NULL || NewVal == NULL) 55250833Sjkim return (AE_BAD_PARAMETER); 56114246Snjl 57250833Sjkim *NewVal = NULL; 58250834Sjkim if (ACPI_COMPARE_NAME(InitVal->Name, "_OS_") && 59250834Sjkim InitVal->Type == ACPI_TYPE_STRING && strlen(acpi_osname) > 0) { 60250833Sjkim printf("ACPI: Overriding _OS definition with \"%s\"\n", 61250833Sjkim acpi_osname); 62250833Sjkim *NewVal = acpi_osname; 63250833Sjkim } 64250833Sjkim return (AE_OK); 65114246Snjl} 66114246Snjl 67114246SnjlACPI_STATUS 68167814SjkimAcpiOsTableOverride(ACPI_TABLE_HEADER *ExistingTable, 69167814Sjkim ACPI_TABLE_HEADER **NewTable) 7099682Siwasaki{ 71250833Sjkim char modname[] = "acpi_dsdt"; 72250833Sjkim caddr_t acpi_table; 73250833Sjkim ACPI_TABLE_HEADER *hdr; 74250833Sjkim size_t sz; 7599682Siwasaki 76250833Sjkim if (ExistingTable == NULL || NewTable == NULL) 77250833Sjkim return (AE_BAD_PARAMETER); 7899682Siwasaki 79250833Sjkim *NewTable = NULL; 80250838Sjkim if (!ACPI_COMPARE_NAME(ExistingTable->Signature, ACPI_SIG_DSDT)) 81193530Sjkim#ifdef notyet 82250838Sjkim for (int i = 0; i < ACPI_NAME_SIZE; i++) 83250838Sjkim modname[i + 5] = tolower(ExistingTable->Signature[i]); 84193530Sjkim#else 85250834Sjkim return (AE_SUPPORT); 86193530Sjkim#endif 87250833Sjkim acpi_table = preload_search_by_type(modname); 88250833Sjkim if (acpi_table == NULL) 89250834Sjkim return (AE_NOT_FOUND); 90250833Sjkim hdr = preload_fetch_addr(acpi_table); 91250833Sjkim sz = preload_fetch_size(acpi_table); 92250834Sjkim if (hdr == NULL || sz == 0) 93250834Sjkim return (AE_ERROR); 94250838Sjkim#ifndef notyet 95272444Sjkim /* Assume SSDT is installed with DSDT. */ 96272444Sjkim AcpiGbl_DisableSsdtTableInstall = TRUE; 97250838Sjkim#endif 98250834Sjkim *NewTable = hdr; 99218660Smarcel return (AE_OK); 10099682Siwasaki} 101231844Sjkim 102231844SjkimACPI_STATUS 103231844SjkimAcpiOsPhysicalTableOverride(ACPI_TABLE_HEADER *ExistingTable, 104231844Sjkim ACPI_PHYSICAL_ADDRESS *NewAddress, UINT32 *NewTableLength) 105231844Sjkim{ 106231844Sjkim 107231844Sjkim return (AE_SUPPORT); 108231844Sjkim} 109