rsinfo.c revision 228110
1151937Sjkim/******************************************************************************* 2151937Sjkim * 3151937Sjkim * Module Name: rsinfo - Dispatch and Info tables 4151937Sjkim * 5151937Sjkim ******************************************************************************/ 6151937Sjkim 7217365Sjkim/* 8217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp. 9151937Sjkim * All rights reserved. 10151937Sjkim * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 25151937Sjkim * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 29151937Sjkim * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 43151937Sjkim 44151937Sjkim#define __RSINFO_C__ 45151937Sjkim 46193341Sjkim#include <contrib/dev/acpica/include/acpi.h> 47193341Sjkim#include <contrib/dev/acpica/include/accommon.h> 48193341Sjkim#include <contrib/dev/acpica/include/acresrc.h> 49151937Sjkim 50151937Sjkim#define _COMPONENT ACPI_RESOURCES 51151937Sjkim ACPI_MODULE_NAME ("rsinfo") 52151937Sjkim 53151937Sjkim/* 54151937Sjkim * Resource dispatch and information tables. Any new resource types (either 55151937Sjkim * Large or Small) must be reflected in each of these tables, so they are here 56151937Sjkim * in one place. 57151937Sjkim * 58151937Sjkim * The tables for Large descriptors are indexed by bits 6:0 of the AML 59151937Sjkim * descriptor type byte. The tables for Small descriptors are indexed by 60151937Sjkim * bits 6:3 of the descriptor byte. The tables for internal resource 61151937Sjkim * descriptors are indexed by the ACPI_RESOURCE_TYPE field. 62151937Sjkim */ 63151937Sjkim 64151937Sjkim 65151937Sjkim/* Dispatch table for resource-to-AML (Set Resource) conversion functions */ 66151937Sjkim 67151937SjkimACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[] = 68151937Sjkim{ 69151937Sjkim AcpiRsSetIrq, /* 0x00, ACPI_RESOURCE_TYPE_IRQ */ 70151937Sjkim AcpiRsConvertDma, /* 0x01, ACPI_RESOURCE_TYPE_DMA */ 71151937Sjkim AcpiRsSetStartDpf, /* 0x02, ACPI_RESOURCE_TYPE_START_DEPENDENT */ 72151937Sjkim AcpiRsConvertEndDpf, /* 0x03, ACPI_RESOURCE_TYPE_END_DEPENDENT */ 73151937Sjkim AcpiRsConvertIo, /* 0x04, ACPI_RESOURCE_TYPE_IO */ 74151937Sjkim AcpiRsConvertFixedIo, /* 0x05, ACPI_RESOURCE_TYPE_FIXED_IO */ 75151937Sjkim AcpiRsSetVendor, /* 0x06, ACPI_RESOURCE_TYPE_VENDOR */ 76151937Sjkim AcpiRsConvertEndTag, /* 0x07, ACPI_RESOURCE_TYPE_END_TAG */ 77151937Sjkim AcpiRsConvertMemory24, /* 0x08, ACPI_RESOURCE_TYPE_MEMORY24 */ 78151937Sjkim AcpiRsConvertMemory32, /* 0x09, ACPI_RESOURCE_TYPE_MEMORY32 */ 79151937Sjkim AcpiRsConvertFixedMemory32, /* 0x0A, ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ 80151937Sjkim AcpiRsConvertAddress16, /* 0x0B, ACPI_RESOURCE_TYPE_ADDRESS16 */ 81151937Sjkim AcpiRsConvertAddress32, /* 0x0C, ACPI_RESOURCE_TYPE_ADDRESS32 */ 82151937Sjkim AcpiRsConvertAddress64, /* 0x0D, ACPI_RESOURCE_TYPE_ADDRESS64 */ 83151937Sjkim AcpiRsConvertExtAddress64, /* 0x0E, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ 84151937Sjkim AcpiRsConvertExtIrq, /* 0x0F, ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ 85228110Sjkim AcpiRsConvertGenericReg, /* 0x10, ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ 86228110Sjkim AcpiRsConvertGpio, /* 0x11, ACPI_RESOURCE_TYPE_GPIO */ 87228110Sjkim AcpiRsConvertFixedDma, /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */ 88228110Sjkim NULL, /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */ 89151937Sjkim}; 90151937Sjkim 91151937Sjkim/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */ 92151937Sjkim 93167802SjkimACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[] = 94151937Sjkim{ 95167802Sjkim /* Small descriptors */ 96167802Sjkim 97151937Sjkim NULL, /* 0x00, Reserved */ 98151937Sjkim NULL, /* 0x01, Reserved */ 99151937Sjkim NULL, /* 0x02, Reserved */ 100151937Sjkim NULL, /* 0x03, Reserved */ 101151937Sjkim AcpiRsGetIrq, /* 0x04, ACPI_RESOURCE_NAME_IRQ */ 102151937Sjkim AcpiRsConvertDma, /* 0x05, ACPI_RESOURCE_NAME_DMA */ 103151937Sjkim AcpiRsGetStartDpf, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */ 104151937Sjkim AcpiRsConvertEndDpf, /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */ 105151937Sjkim AcpiRsConvertIo, /* 0x08, ACPI_RESOURCE_NAME_IO */ 106151937Sjkim AcpiRsConvertFixedIo, /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO */ 107228110Sjkim AcpiRsConvertFixedDma, /* 0x0A, ACPI_RESOURCE_NAME_FIXED_DMA */ 108151937Sjkim NULL, /* 0x0B, Reserved */ 109151937Sjkim NULL, /* 0x0C, Reserved */ 110151937Sjkim NULL, /* 0x0D, Reserved */ 111151937Sjkim AcpiRsGetVendorSmall, /* 0x0E, ACPI_RESOURCE_NAME_VENDOR_SMALL */ 112167802Sjkim AcpiRsConvertEndTag, /* 0x0F, ACPI_RESOURCE_NAME_END_TAG */ 113151937Sjkim 114167802Sjkim /* Large descriptors */ 115167802Sjkim 116151937Sjkim NULL, /* 0x00, Reserved */ 117151937Sjkim AcpiRsConvertMemory24, /* 0x01, ACPI_RESOURCE_NAME_MEMORY24 */ 118151937Sjkim AcpiRsConvertGenericReg, /* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */ 119151937Sjkim NULL, /* 0x03, Reserved */ 120151937Sjkim AcpiRsGetVendorLarge, /* 0x04, ACPI_RESOURCE_NAME_VENDOR_LARGE */ 121151937Sjkim AcpiRsConvertMemory32, /* 0x05, ACPI_RESOURCE_NAME_MEMORY32 */ 122151937Sjkim AcpiRsConvertFixedMemory32, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY32 */ 123151937Sjkim AcpiRsConvertAddress32, /* 0x07, ACPI_RESOURCE_NAME_ADDRESS32 */ 124151937Sjkim AcpiRsConvertAddress16, /* 0x08, ACPI_RESOURCE_NAME_ADDRESS16 */ 125151937Sjkim AcpiRsConvertExtIrq, /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_IRQ */ 126151937Sjkim AcpiRsConvertAddress64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */ 127228110Sjkim AcpiRsConvertExtAddress64, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */ 128228110Sjkim AcpiRsConvertGpio, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */ 129228110Sjkim NULL, /* 0x0D, Reserved */ 130228110Sjkim NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */ 131151937Sjkim}; 132151937Sjkim 133228110Sjkim/* Subtype table for SerialBus -- I2C, SPI, and UART */ 134151937Sjkim 135228110SjkimACPI_RSCONVERT_INFO *AcpiGbl_ConvertResourceSerialBusDispatch[] = 136228110Sjkim{ 137228110Sjkim NULL, 138228110Sjkim AcpiRsConvertI2cSerialBus, 139228110Sjkim AcpiRsConvertSpiSerialBus, 140228110Sjkim AcpiRsConvertUartSerialBus, 141228110Sjkim}; 142228110Sjkim 143228110Sjkim 144151937Sjkim#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 145151937Sjkim 146151937Sjkim/* Dispatch table for resource dump functions */ 147151937Sjkim 148151937SjkimACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[] = 149151937Sjkim{ 150151937Sjkim AcpiRsDumpIrq, /* ACPI_RESOURCE_TYPE_IRQ */ 151151937Sjkim AcpiRsDumpDma, /* ACPI_RESOURCE_TYPE_DMA */ 152151937Sjkim AcpiRsDumpStartDpf, /* ACPI_RESOURCE_TYPE_START_DEPENDENT */ 153151937Sjkim AcpiRsDumpEndDpf, /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ 154151937Sjkim AcpiRsDumpIo, /* ACPI_RESOURCE_TYPE_IO */ 155151937Sjkim AcpiRsDumpFixedIo, /* ACPI_RESOURCE_TYPE_FIXED_IO */ 156151937Sjkim AcpiRsDumpVendor, /* ACPI_RESOURCE_TYPE_VENDOR */ 157151937Sjkim AcpiRsDumpEndTag, /* ACPI_RESOURCE_TYPE_END_TAG */ 158151937Sjkim AcpiRsDumpMemory24, /* ACPI_RESOURCE_TYPE_MEMORY24 */ 159151937Sjkim AcpiRsDumpMemory32, /* ACPI_RESOURCE_TYPE_MEMORY32 */ 160151937Sjkim AcpiRsDumpFixedMemory32, /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ 161151937Sjkim AcpiRsDumpAddress16, /* ACPI_RESOURCE_TYPE_ADDRESS16 */ 162151937Sjkim AcpiRsDumpAddress32, /* ACPI_RESOURCE_TYPE_ADDRESS32 */ 163151937Sjkim AcpiRsDumpAddress64, /* ACPI_RESOURCE_TYPE_ADDRESS64 */ 164151937Sjkim AcpiRsDumpExtAddress64, /* ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ 165151937Sjkim AcpiRsDumpExtIrq, /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ 166151937Sjkim AcpiRsDumpGenericReg, /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ 167228110Sjkim AcpiRsDumpGpio, /* ACPI_RESOURCE_TYPE_GPIO */ 168228110Sjkim AcpiRsDumpFixedDma, /* ACPI_RESOURCE_TYPE_FIXED_DMA */ 169228110Sjkim NULL, /* ACPI_RESOURCE_TYPE_SERIAL_BUS */ 170151937Sjkim}; 171228110Sjkim 172228110SjkimACPI_RSDUMP_INFO *AcpiGbl_DumpSerialBusDispatch[] = 173228110Sjkim{ 174228110Sjkim NULL, 175228110Sjkim AcpiRsDumpI2cSerialBus, /* AML_RESOURCE_I2C_BUS_TYPE */ 176228110Sjkim AcpiRsDumpSpiSerialBus, /* AML_RESOURCE_SPI_BUS_TYPE */ 177228110Sjkim AcpiRsDumpUartSerialBus, /* AML_RESOURCE_UART_BUS_TYPE */ 178228110Sjkim}; 179151937Sjkim#endif 180151937Sjkim 181151937Sjkim 182151937Sjkim/* 183151937Sjkim * Base sizes for external AML resource descriptors, indexed by internal type. 184151937Sjkim * Includes size of the descriptor header (1 byte for small descriptors, 185151937Sjkim * 3 bytes for large descriptors) 186151937Sjkim */ 187151937Sjkimconst UINT8 AcpiGbl_AmlResourceSizes[] = 188151937Sjkim{ 189151937Sjkim sizeof (AML_RESOURCE_IRQ), /* ACPI_RESOURCE_TYPE_IRQ (optional Byte 3 always created) */ 190151937Sjkim sizeof (AML_RESOURCE_DMA), /* ACPI_RESOURCE_TYPE_DMA */ 191151937Sjkim sizeof (AML_RESOURCE_START_DEPENDENT), /* ACPI_RESOURCE_TYPE_START_DEPENDENT (optional Byte 1 always created) */ 192151937Sjkim sizeof (AML_RESOURCE_END_DEPENDENT), /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ 193151937Sjkim sizeof (AML_RESOURCE_IO), /* ACPI_RESOURCE_TYPE_IO */ 194151937Sjkim sizeof (AML_RESOURCE_FIXED_IO), /* ACPI_RESOURCE_TYPE_FIXED_IO */ 195151937Sjkim sizeof (AML_RESOURCE_VENDOR_SMALL), /* ACPI_RESOURCE_TYPE_VENDOR */ 196151937Sjkim sizeof (AML_RESOURCE_END_TAG), /* ACPI_RESOURCE_TYPE_END_TAG */ 197151937Sjkim sizeof (AML_RESOURCE_MEMORY24), /* ACPI_RESOURCE_TYPE_MEMORY24 */ 198151937Sjkim sizeof (AML_RESOURCE_MEMORY32), /* ACPI_RESOURCE_TYPE_MEMORY32 */ 199151937Sjkim sizeof (AML_RESOURCE_FIXED_MEMORY32), /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ 200151937Sjkim sizeof (AML_RESOURCE_ADDRESS16), /* ACPI_RESOURCE_TYPE_ADDRESS16 */ 201151937Sjkim sizeof (AML_RESOURCE_ADDRESS32), /* ACPI_RESOURCE_TYPE_ADDRESS32 */ 202151937Sjkim sizeof (AML_RESOURCE_ADDRESS64), /* ACPI_RESOURCE_TYPE_ADDRESS64 */ 203151937Sjkim sizeof (AML_RESOURCE_EXTENDED_ADDRESS64),/*ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ 204151937Sjkim sizeof (AML_RESOURCE_EXTENDED_IRQ), /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ 205228110Sjkim sizeof (AML_RESOURCE_GENERIC_REGISTER), /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ 206228110Sjkim sizeof (AML_RESOURCE_GPIO), /* ACPI_RESOURCE_TYPE_GPIO */ 207228110Sjkim sizeof (AML_RESOURCE_FIXED_DMA), /* ACPI_RESOURCE_TYPE_FIXED_DMA */ 208228110Sjkim sizeof (AML_RESOURCE_COMMON_SERIALBUS), /* ACPI_RESOURCE_TYPE_SERIAL_BUS */ 209151937Sjkim}; 210151937Sjkim 211151937Sjkim 212167802Sjkimconst UINT8 AcpiGbl_ResourceStructSizes[] = 213167802Sjkim{ 214167802Sjkim /* Small descriptors */ 215151937Sjkim 216167802Sjkim 0, 217167802Sjkim 0, 218167802Sjkim 0, 219167802Sjkim 0, 220167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_IRQ), 221167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_DMA), 222167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_START_DEPENDENT), 223167802Sjkim ACPI_RS_SIZE_MIN, 224167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_IO), 225167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_IO), 226228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_DMA), 227167802Sjkim 0, 228167802Sjkim 0, 229167802Sjkim 0, 230167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), 231167802Sjkim ACPI_RS_SIZE_MIN, 232151937Sjkim 233167802Sjkim /* Large descriptors */ 234151937Sjkim 235167802Sjkim 0, 236167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY24), 237167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_GENERIC_REGISTER), 238167802Sjkim 0, 239167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR), 240167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY32), 241167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_MEMORY32), 242167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS32), 243167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16), 244167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ), 245167802Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64), 246228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64), 247228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_GPIO), 248228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_COMMON_SERIALBUS) 249151937Sjkim}; 250151937Sjkim 251228110Sjkimconst UINT8 AcpiGbl_AmlResourceSerialBusSizes[] = 252228110Sjkim{ 253228110Sjkim 0, 254228110Sjkim sizeof (AML_RESOURCE_I2C_SERIALBUS), 255228110Sjkim sizeof (AML_RESOURCE_SPI_SERIALBUS), 256228110Sjkim sizeof (AML_RESOURCE_UART_SERIALBUS), 257228110Sjkim}; 258228110Sjkim 259228110Sjkimconst UINT8 AcpiGbl_ResourceStructSerialBusSizes[] = 260228110Sjkim{ 261228110Sjkim 0, 262228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_I2C_SERIALBUS), 263228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_SPI_SERIALBUS), 264228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_UART_SERIALBUS), 265228110Sjkim}; 266