167754Smsmith/******************************************************************************* 267754Smsmith * 377424Smsmith * Module Name: rsirq - IRQ resource descriptors 467754Smsmith * 567754Smsmith ******************************************************************************/ 667754Smsmith 7217365Sjkim/* 8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp. 970243Smsmith * All rights reserved. 1067754Smsmith * 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. 2567754Smsmith * 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. 2967754Smsmith * 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 */ 4367754Smsmith 44193341Sjkim#include <contrib/dev/acpica/include/acpi.h> 45193341Sjkim#include <contrib/dev/acpica/include/accommon.h> 46193341Sjkim#include <contrib/dev/acpica/include/acresrc.h> 4767754Smsmith 4877424Smsmith#define _COMPONENT ACPI_RESOURCES 4991116Smsmith ACPI_MODULE_NAME ("rsirq") 5067754Smsmith 5167754Smsmith 5267754Smsmith/******************************************************************************* 5367754Smsmith * 54151937Sjkim * AcpiRsGetIrq 5567754Smsmith * 5667754Smsmith ******************************************************************************/ 5767754Smsmith 58245582SjkimACPI_RSCONVERT_INFO AcpiRsGetIrq[9] = 5967754Smsmith{ 60151937Sjkim {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IRQ, 61151937Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_IRQ), 62151937Sjkim ACPI_RSC_TABLE_SIZE (AcpiRsGetIrq)}, 6367754Smsmith 64151937Sjkim /* Get the IRQ mask (bytes 1:2) */ 6567754Smsmith 66151937Sjkim {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), 67151937Sjkim AML_OFFSET (Irq.IrqMask), 68151937Sjkim ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, 6967754Smsmith 70151937Sjkim /* Set default flags (others are zero) */ 7177424Smsmith 72151937Sjkim {ACPI_RSC_SET8, ACPI_RS_OFFSET (Data.Irq.Triggering), 73151937Sjkim ACPI_EDGE_SENSITIVE, 74151937Sjkim 1}, 7567754Smsmith 76193267Sjkim /* Get the descriptor length (2 or 3 for IRQ descriptor) */ 77193267Sjkim 78193267Sjkim {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Irq.DescriptorLength), 79193267Sjkim AML_OFFSET (Irq.DescriptorType), 80193267Sjkim 0}, 81193267Sjkim 82151937Sjkim /* All done if no flag byte present in descriptor */ 8367754Smsmith 84151937Sjkim {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 3}, 8567754Smsmith 86245582Sjkim /* Get flags: Triggering[0], Polarity[3], Sharing[4], Wake[5] */ 8767754Smsmith 88151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), 89151937Sjkim AML_OFFSET (Irq.Flags), 90151937Sjkim 0}, 9199679Siwasaki 92151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), 93151937Sjkim AML_OFFSET (Irq.Flags), 94151937Sjkim 3}, 95100966Siwasaki 96151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Sharable), 97151937Sjkim AML_OFFSET (Irq.Flags), 98245582Sjkim 4}, 99245582Sjkim 100245582Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.WakeCapable), 101245582Sjkim AML_OFFSET (Irq.Flags), 102245582Sjkim 5} 103151937Sjkim}; 10467754Smsmith 10567754Smsmith 10667754Smsmith/******************************************************************************* 10767754Smsmith * 108151937Sjkim * AcpiRsSetIrq 10967754Smsmith * 11067754Smsmith ******************************************************************************/ 11167754Smsmith 112245582SjkimACPI_RSCONVERT_INFO AcpiRsSetIrq[14] = 11367754Smsmith{ 114193267Sjkim /* Start with a default descriptor of length 3 */ 115193267Sjkim 116151937Sjkim {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IRQ, 117151937Sjkim sizeof (AML_RESOURCE_IRQ), 118151937Sjkim ACPI_RSC_TABLE_SIZE (AcpiRsSetIrq)}, 11967754Smsmith 120151937Sjkim /* Convert interrupt list to 16-bit IRQ bitmask */ 12167754Smsmith 122151937Sjkim {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), 123151937Sjkim AML_OFFSET (Irq.IrqMask), 124151937Sjkim ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, 12567754Smsmith 126245582Sjkim /* Set flags: Triggering[0], Polarity[3], Sharing[4], Wake[5] */ 12767754Smsmith 128151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), 129151937Sjkim AML_OFFSET (Irq.Flags), 130151937Sjkim 0}, 13167754Smsmith 132151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), 133151937Sjkim AML_OFFSET (Irq.Flags), 134151937Sjkim 3}, 13567754Smsmith 136151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Sharable), 137151937Sjkim AML_OFFSET (Irq.Flags), 138151937Sjkim 4}, 139193267Sjkim 140245582Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.WakeCapable), 141245582Sjkim AML_OFFSET (Irq.Flags), 142245582Sjkim 5}, 143245582Sjkim 14467754Smsmith /* 145193267Sjkim * All done if the output descriptor length is required to be 3 146193267Sjkim * (i.e., optimization to 2 bytes cannot be attempted) 147193267Sjkim */ 148193267Sjkim {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, 149193267Sjkim ACPI_RS_OFFSET(Data.Irq.DescriptorLength), 150193267Sjkim 3}, 151193267Sjkim 152193267Sjkim /* Set length to 2 bytes (no flags byte) */ 153193267Sjkim 154193267Sjkim {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)}, 155193267Sjkim 156193267Sjkim /* 157193267Sjkim * All done if the output descriptor length is required to be 2. 158193267Sjkim * 159193267Sjkim * TBD: Perhaps we should check for error if input flags are not 160193267Sjkim * compatible with a 2-byte descriptor. 161193267Sjkim */ 162193267Sjkim {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, 163193267Sjkim ACPI_RS_OFFSET(Data.Irq.DescriptorLength), 164193267Sjkim 2}, 165193267Sjkim 166193267Sjkim /* Reset length to 3 bytes (descriptor with flags byte) */ 167193267Sjkim 168193267Sjkim {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ)}, 169193267Sjkim 170193267Sjkim /* 171151937Sjkim * Check if the flags byte is necessary. Not needed if the flags are: 172151937Sjkim * ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_HIGH, ACPI_EXCLUSIVE 17367754Smsmith */ 174151937Sjkim {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, 175151937Sjkim ACPI_RS_OFFSET (Data.Irq.Triggering), 176151937Sjkim ACPI_EDGE_SENSITIVE}, 17767754Smsmith 178151937Sjkim {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, 179151937Sjkim ACPI_RS_OFFSET (Data.Irq.Polarity), 180151937Sjkim ACPI_ACTIVE_HIGH}, 18167754Smsmith 182151937Sjkim {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, 183151937Sjkim ACPI_RS_OFFSET (Data.Irq.Sharable), 184151937Sjkim ACPI_EXCLUSIVE}, 18567754Smsmith 186193267Sjkim /* We can optimize to a 2-byte IrqNoFlags() descriptor */ 18767754Smsmith 188151937Sjkim {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)} 189151937Sjkim}; 19067754Smsmith 19167754Smsmith 19267754Smsmith/******************************************************************************* 19367754Smsmith * 194151937Sjkim * AcpiRsConvertExtIrq 19567754Smsmith * 19667754Smsmith ******************************************************************************/ 19767754Smsmith 198245582SjkimACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[10] = 19967754Smsmith{ 200151937Sjkim {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_IRQ, 201151937Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ), 202151937Sjkim ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtIrq)}, 20367754Smsmith 204151937Sjkim {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_IRQ, 205151937Sjkim sizeof (AML_RESOURCE_EXTENDED_IRQ), 206151937Sjkim 0}, 20767754Smsmith 208245582Sjkim /* 209245582Sjkim * Flags: Producer/Consumer[0], Triggering[1], Polarity[2], 210245582Sjkim * Sharing[3], Wake[4] 211245582Sjkim */ 212151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.ProducerConsumer), 213151937Sjkim AML_OFFSET (ExtendedIrq.Flags), 214151937Sjkim 0}, 21577424Smsmith 216151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Triggering), 217151937Sjkim AML_OFFSET (ExtendedIrq.Flags), 218151937Sjkim 1}, 21967754Smsmith 220151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Polarity), 221151937Sjkim AML_OFFSET (ExtendedIrq.Flags), 222151937Sjkim 2}, 223123315Snjl 224151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Sharable), 225151937Sjkim AML_OFFSET (ExtendedIrq.Flags), 226151937Sjkim 3}, 227123315Snjl 228245582Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.WakeCapable), 229245582Sjkim AML_OFFSET (ExtendedIrq.Flags), 230245582Sjkim 4}, 231245582Sjkim 232151937Sjkim /* IRQ Table length (Byte4) */ 23367754Smsmith 234151937Sjkim {ACPI_RSC_COUNT, ACPI_RS_OFFSET (Data.ExtendedIrq.InterruptCount), 235151937Sjkim AML_OFFSET (ExtendedIrq.InterruptCount), 236151937Sjkim sizeof (UINT32)}, 23767754Smsmith 238151937Sjkim /* Copy every IRQ in the table, each is 32 bits */ 23967754Smsmith 240151937Sjkim {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), 241151937Sjkim AML_OFFSET (ExtendedIrq.Interrupts[0]), 242151937Sjkim 0}, 24367754Smsmith 244151937Sjkim /* Optional ResourceSource (Index and String) */ 24591116Smsmith 246151937Sjkim {ACPI_RSC_SOURCEX, ACPI_RS_OFFSET (Data.ExtendedIrq.ResourceSource), 247151937Sjkim ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), 248151937Sjkim sizeof (AML_RESOURCE_EXTENDED_IRQ)} 249151937Sjkim}; 25067754Smsmith 25167754Smsmith 25267754Smsmith/******************************************************************************* 25367754Smsmith * 254151937Sjkim * AcpiRsConvertDma 25567754Smsmith * 25667754Smsmith ******************************************************************************/ 25767754Smsmith 258151937SjkimACPI_RSCONVERT_INFO AcpiRsConvertDma[6] = 25967754Smsmith{ 260151937Sjkim {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_DMA, 261151937Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_DMA), 262151937Sjkim ACPI_RSC_TABLE_SIZE (AcpiRsConvertDma)}, 26367754Smsmith 264151937Sjkim {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_DMA, 265151937Sjkim sizeof (AML_RESOURCE_DMA), 266151937Sjkim 0}, 26767754Smsmith 268151937Sjkim /* Flags: transfer preference, bus mastering, channel speed */ 26967754Smsmith 270151937Sjkim {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Transfer), 271151937Sjkim AML_OFFSET (Dma.Flags), 272151937Sjkim 0}, 27367754Smsmith 274151937Sjkim {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Dma.BusMaster), 275151937Sjkim AML_OFFSET (Dma.Flags), 276151937Sjkim 2}, 27767754Smsmith 278151937Sjkim {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Type), 279151937Sjkim AML_OFFSET (Dma.Flags), 280151937Sjkim 5}, 28167754Smsmith 282151937Sjkim /* DMA channel mask bits */ 28367754Smsmith 284151937Sjkim {ACPI_RSC_BITMASK, ACPI_RS_OFFSET (Data.Dma.Channels[0]), 285151937Sjkim AML_OFFSET (Dma.DmaChannelMask), 286151937Sjkim ACPI_RS_OFFSET (Data.Dma.ChannelCount)} 287151937Sjkim}; 28867754Smsmith 289228110Sjkim 290228110Sjkim/******************************************************************************* 291228110Sjkim * 292228110Sjkim * AcpiRsConvertFixedDma 293228110Sjkim * 294228110Sjkim ******************************************************************************/ 295228110Sjkim 296228110SjkimACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[4] = 297228110Sjkim{ 298228110Sjkim {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_DMA, 299228110Sjkim ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_DMA), 300228110Sjkim ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedDma)}, 301228110Sjkim 302228110Sjkim {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_DMA, 303228110Sjkim sizeof (AML_RESOURCE_FIXED_DMA), 304228110Sjkim 0}, 305228110Sjkim 306228110Sjkim /* 307228110Sjkim * These fields are contiguous in both the source and destination: 308228110Sjkim * RequestLines 309228110Sjkim * Channels 310228110Sjkim */ 311228110Sjkim {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.FixedDma.RequestLines), 312228110Sjkim AML_OFFSET (FixedDma.RequestLines), 313228110Sjkim 2}, 314228110Sjkim 315228110Sjkim {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.FixedDma.Width), 316228110Sjkim AML_OFFSET (FixedDma.Width), 317228110Sjkim 1}, 318228110Sjkim}; 319