1ae115bc7Smrj /******************************************************************************* 2ae115bc7Smrj * 3ae115bc7Smrj * Module Name: rsirq - IRQ resource descriptors 4ae115bc7Smrj * 5ae115bc7Smrj ******************************************************************************/ 6ae115bc7Smrj 726f3cdf0SGordon Ross /* 8*385cc6b4SJerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp. 9ae115bc7Smrj * All rights reserved. 10ae115bc7Smrj * 1126f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 1226f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 1326f3cdf0SGordon Ross * are met: 1426f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 1526f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 1626f3cdf0SGordon Ross * without modification. 1726f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1826f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 1926f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 2026f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 2126f3cdf0SGordon Ross * binary redistribution. 2226f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 2326f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 2426f3cdf0SGordon Ross * from this software without specific prior written permission. 25ae115bc7Smrj * 2626f3cdf0SGordon Ross * Alternatively, this software may be distributed under the terms of the 2726f3cdf0SGordon Ross * GNU General Public License ("GPL") version 2 as published by the Free 2826f3cdf0SGordon Ross * Software Foundation. 29ae115bc7Smrj * 3026f3cdf0SGordon Ross * NO WARRANTY 3126f3cdf0SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3226f3cdf0SGordon Ross * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3326f3cdf0SGordon Ross * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 3426f3cdf0SGordon Ross * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3526f3cdf0SGordon Ross * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3626f3cdf0SGordon Ross * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3726f3cdf0SGordon Ross * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3826f3cdf0SGordon Ross * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3926f3cdf0SGordon Ross * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4026f3cdf0SGordon Ross * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 4126f3cdf0SGordon Ross * POSSIBILITY OF SUCH DAMAGES. 4226f3cdf0SGordon Ross */ 43ae115bc7Smrj 44ae115bc7Smrj #include "acpi.h" 45aa2aa9a6SDana Myers #include "accommon.h" 46ae115bc7Smrj #include "acresrc.h" 47ae115bc7Smrj 48ae115bc7Smrj #define _COMPONENT ACPI_RESOURCES 49ae115bc7Smrj ACPI_MODULE_NAME ("rsirq") 50ae115bc7Smrj 51ae115bc7Smrj 52ae115bc7Smrj /******************************************************************************* 53ae115bc7Smrj * 54ae115bc7Smrj * AcpiRsGetIrq 55ae115bc7Smrj * 56ae115bc7Smrj ******************************************************************************/ 57ae115bc7Smrj 58*385cc6b4SJerry Jelinek ACPI_RSCONVERT_INFO AcpiRsGetIrq[9] = 59ae115bc7Smrj { 60ae115bc7Smrj {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IRQ, 61ae115bc7Smrj ACPI_RS_SIZE (ACPI_RESOURCE_IRQ), 62ae115bc7Smrj ACPI_RSC_TABLE_SIZE (AcpiRsGetIrq)}, 63ae115bc7Smrj 64ae115bc7Smrj /* Get the IRQ mask (bytes 1:2) */ 65ae115bc7Smrj 66ae115bc7Smrj {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), 67ae115bc7Smrj AML_OFFSET (Irq.IrqMask), 68ae115bc7Smrj ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, 69ae115bc7Smrj 70ae115bc7Smrj /* Set default flags (others are zero) */ 71ae115bc7Smrj 72ae115bc7Smrj {ACPI_RSC_SET8, ACPI_RS_OFFSET (Data.Irq.Triggering), 73ae115bc7Smrj ACPI_EDGE_SENSITIVE, 74ae115bc7Smrj 1}, 75ae115bc7Smrj 76db2bae30SDana Myers /* Get the descriptor length (2 or 3 for IRQ descriptor) */ 77db2bae30SDana Myers 78db2bae30SDana Myers {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Irq.DescriptorLength), 79db2bae30SDana Myers AML_OFFSET (Irq.DescriptorType), 80db2bae30SDana Myers 0}, 81db2bae30SDana Myers 82ae115bc7Smrj /* All done if no flag byte present in descriptor */ 83ae115bc7Smrj 84ae115bc7Smrj {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 3}, 85ae115bc7Smrj 86*385cc6b4SJerry Jelinek /* Get flags: Triggering[0], Polarity[3], Sharing[4], Wake[5] */ 87ae115bc7Smrj 88ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), 89ae115bc7Smrj AML_OFFSET (Irq.Flags), 90ae115bc7Smrj 0}, 91ae115bc7Smrj 92ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), 93ae115bc7Smrj AML_OFFSET (Irq.Flags), 94ae115bc7Smrj 3}, 95ae115bc7Smrj 96ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Sharable), 97ae115bc7Smrj AML_OFFSET (Irq.Flags), 98*385cc6b4SJerry Jelinek 4}, 99*385cc6b4SJerry Jelinek 100*385cc6b4SJerry Jelinek {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.WakeCapable), 101*385cc6b4SJerry Jelinek AML_OFFSET (Irq.Flags), 102*385cc6b4SJerry Jelinek 5} 103ae115bc7Smrj }; 104ae115bc7Smrj 105ae115bc7Smrj 106ae115bc7Smrj /******************************************************************************* 107ae115bc7Smrj * 108ae115bc7Smrj * AcpiRsSetIrq 109ae115bc7Smrj * 110ae115bc7Smrj ******************************************************************************/ 111ae115bc7Smrj 112*385cc6b4SJerry Jelinek ACPI_RSCONVERT_INFO AcpiRsSetIrq[14] = 113ae115bc7Smrj { 114db2bae30SDana Myers /* Start with a default descriptor of length 3 */ 115db2bae30SDana Myers 116ae115bc7Smrj {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IRQ, 117ae115bc7Smrj sizeof (AML_RESOURCE_IRQ), 118ae115bc7Smrj ACPI_RSC_TABLE_SIZE (AcpiRsSetIrq)}, 119ae115bc7Smrj 120ae115bc7Smrj /* Convert interrupt list to 16-bit IRQ bitmask */ 121ae115bc7Smrj 122ae115bc7Smrj {ACPI_RSC_BITMASK16,ACPI_RS_OFFSET (Data.Irq.Interrupts[0]), 123ae115bc7Smrj AML_OFFSET (Irq.IrqMask), 124ae115bc7Smrj ACPI_RS_OFFSET (Data.Irq.InterruptCount)}, 125ae115bc7Smrj 126*385cc6b4SJerry Jelinek /* Set flags: Triggering[0], Polarity[3], Sharing[4], Wake[5] */ 127ae115bc7Smrj 128ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Triggering), 129ae115bc7Smrj AML_OFFSET (Irq.Flags), 130ae115bc7Smrj 0}, 131ae115bc7Smrj 132ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Polarity), 133ae115bc7Smrj AML_OFFSET (Irq.Flags), 134ae115bc7Smrj 3}, 135ae115bc7Smrj 136ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.Sharable), 137ae115bc7Smrj AML_OFFSET (Irq.Flags), 138ae115bc7Smrj 4}, 139db2bae30SDana Myers 140*385cc6b4SJerry Jelinek {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Irq.WakeCapable), 141*385cc6b4SJerry Jelinek AML_OFFSET (Irq.Flags), 142*385cc6b4SJerry Jelinek 5}, 143*385cc6b4SJerry Jelinek 144db2bae30SDana Myers /* 145db2bae30SDana Myers * All done if the output descriptor length is required to be 3 146db2bae30SDana Myers * (i.e., optimization to 2 bytes cannot be attempted) 147db2bae30SDana Myers */ 148db2bae30SDana Myers {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, 149db2bae30SDana Myers ACPI_RS_OFFSET(Data.Irq.DescriptorLength), 150db2bae30SDana Myers 3}, 151db2bae30SDana Myers 152db2bae30SDana Myers /* Set length to 2 bytes (no flags byte) */ 153db2bae30SDana Myers 154db2bae30SDana Myers {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)}, 155db2bae30SDana Myers 156db2bae30SDana Myers /* 157db2bae30SDana Myers * All done if the output descriptor length is required to be 2. 158db2bae30SDana Myers * 159db2bae30SDana Myers * TBD: Perhaps we should check for error if input flags are not 160db2bae30SDana Myers * compatible with a 2-byte descriptor. 161db2bae30SDana Myers */ 162db2bae30SDana Myers {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, 163db2bae30SDana Myers ACPI_RS_OFFSET(Data.Irq.DescriptorLength), 164db2bae30SDana Myers 2}, 165db2bae30SDana Myers 166db2bae30SDana Myers /* Reset length to 3 bytes (descriptor with flags byte) */ 167db2bae30SDana Myers 168db2bae30SDana Myers {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ)}, 169db2bae30SDana Myers 170ae115bc7Smrj /* 171ae115bc7Smrj * Check if the flags byte is necessary. Not needed if the flags are: 172ae115bc7Smrj * ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_HIGH, ACPI_EXCLUSIVE 173ae115bc7Smrj */ 174ae115bc7Smrj {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, 175ae115bc7Smrj ACPI_RS_OFFSET (Data.Irq.Triggering), 176ae115bc7Smrj ACPI_EDGE_SENSITIVE}, 177ae115bc7Smrj 178ae115bc7Smrj {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, 179ae115bc7Smrj ACPI_RS_OFFSET (Data.Irq.Polarity), 180ae115bc7Smrj ACPI_ACTIVE_HIGH}, 181ae115bc7Smrj 182ae115bc7Smrj {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, 183ae115bc7Smrj ACPI_RS_OFFSET (Data.Irq.Sharable), 184ae115bc7Smrj ACPI_EXCLUSIVE}, 185ae115bc7Smrj 186db2bae30SDana Myers /* We can optimize to a 2-byte IrqNoFlags() descriptor */ 187ae115bc7Smrj 188ae115bc7Smrj {ACPI_RSC_LENGTH, 0, 0, sizeof (AML_RESOURCE_IRQ_NOFLAGS)} 189ae115bc7Smrj }; 190ae115bc7Smrj 191ae115bc7Smrj 192ae115bc7Smrj /******************************************************************************* 193ae115bc7Smrj * 194ae115bc7Smrj * AcpiRsConvertExtIrq 195ae115bc7Smrj * 196ae115bc7Smrj ******************************************************************************/ 197ae115bc7Smrj 198*385cc6b4SJerry Jelinek ACPI_RSCONVERT_INFO AcpiRsConvertExtIrq[10] = 199ae115bc7Smrj { 200ae115bc7Smrj {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_IRQ, 201ae115bc7Smrj ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_IRQ), 202ae115bc7Smrj ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtIrq)}, 203ae115bc7Smrj 204ae115bc7Smrj {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_IRQ, 205ae115bc7Smrj sizeof (AML_RESOURCE_EXTENDED_IRQ), 206ae115bc7Smrj 0}, 207ae115bc7Smrj 208*385cc6b4SJerry Jelinek /* 209*385cc6b4SJerry Jelinek * Flags: Producer/Consumer[0], Triggering[1], Polarity[2], 210*385cc6b4SJerry Jelinek * Sharing[3], Wake[4] 211*385cc6b4SJerry Jelinek */ 212ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.ProducerConsumer), 213ae115bc7Smrj AML_OFFSET (ExtendedIrq.Flags), 214ae115bc7Smrj 0}, 215ae115bc7Smrj 216ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Triggering), 217ae115bc7Smrj AML_OFFSET (ExtendedIrq.Flags), 218ae115bc7Smrj 1}, 219ae115bc7Smrj 220ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Polarity), 221ae115bc7Smrj AML_OFFSET (ExtendedIrq.Flags), 222ae115bc7Smrj 2}, 223ae115bc7Smrj 224ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.Sharable), 225ae115bc7Smrj AML_OFFSET (ExtendedIrq.Flags), 226ae115bc7Smrj 3}, 227ae115bc7Smrj 228*385cc6b4SJerry Jelinek {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.ExtendedIrq.WakeCapable), 229*385cc6b4SJerry Jelinek AML_OFFSET (ExtendedIrq.Flags), 230*385cc6b4SJerry Jelinek 4}, 231*385cc6b4SJerry Jelinek 232ae115bc7Smrj /* IRQ Table length (Byte4) */ 233ae115bc7Smrj 234ae115bc7Smrj {ACPI_RSC_COUNT, ACPI_RS_OFFSET (Data.ExtendedIrq.InterruptCount), 235ae115bc7Smrj AML_OFFSET (ExtendedIrq.InterruptCount), 236ae115bc7Smrj sizeof (UINT32)}, 237ae115bc7Smrj 238ae115bc7Smrj /* Copy every IRQ in the table, each is 32 bits */ 239ae115bc7Smrj 240ae115bc7Smrj {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), 241ae115bc7Smrj AML_OFFSET (ExtendedIrq.Interrupts[0]), 242ae115bc7Smrj 0}, 243ae115bc7Smrj 244ae115bc7Smrj /* Optional ResourceSource (Index and String) */ 245ae115bc7Smrj 246ae115bc7Smrj {ACPI_RSC_SOURCEX, ACPI_RS_OFFSET (Data.ExtendedIrq.ResourceSource), 247ae115bc7Smrj ACPI_RS_OFFSET (Data.ExtendedIrq.Interrupts[0]), 248ae115bc7Smrj sizeof (AML_RESOURCE_EXTENDED_IRQ)} 249ae115bc7Smrj }; 250ae115bc7Smrj 251ae115bc7Smrj 252ae115bc7Smrj /******************************************************************************* 253ae115bc7Smrj * 254ae115bc7Smrj * AcpiRsConvertDma 255ae115bc7Smrj * 256ae115bc7Smrj ******************************************************************************/ 257ae115bc7Smrj 258ae115bc7Smrj ACPI_RSCONVERT_INFO AcpiRsConvertDma[6] = 259ae115bc7Smrj { 260ae115bc7Smrj {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_DMA, 261ae115bc7Smrj ACPI_RS_SIZE (ACPI_RESOURCE_DMA), 262ae115bc7Smrj ACPI_RSC_TABLE_SIZE (AcpiRsConvertDma)}, 263ae115bc7Smrj 264ae115bc7Smrj {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_DMA, 265ae115bc7Smrj sizeof (AML_RESOURCE_DMA), 266ae115bc7Smrj 0}, 267ae115bc7Smrj 268ae115bc7Smrj /* Flags: transfer preference, bus mastering, channel speed */ 269ae115bc7Smrj 270ae115bc7Smrj {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Transfer), 271ae115bc7Smrj AML_OFFSET (Dma.Flags), 272ae115bc7Smrj 0}, 273ae115bc7Smrj 274ae115bc7Smrj {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Dma.BusMaster), 275ae115bc7Smrj AML_OFFSET (Dma.Flags), 276ae115bc7Smrj 2}, 277ae115bc7Smrj 278ae115bc7Smrj {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Dma.Type), 279ae115bc7Smrj AML_OFFSET (Dma.Flags), 280ae115bc7Smrj 5}, 281ae115bc7Smrj 282ae115bc7Smrj /* DMA channel mask bits */ 283ae115bc7Smrj 284ae115bc7Smrj {ACPI_RSC_BITMASK, ACPI_RS_OFFSET (Data.Dma.Channels[0]), 285ae115bc7Smrj AML_OFFSET (Dma.DmaChannelMask), 286ae115bc7Smrj ACPI_RS_OFFSET (Data.Dma.ChannelCount)} 287ae115bc7Smrj }; 288ae115bc7Smrj 289*385cc6b4SJerry Jelinek 290*385cc6b4SJerry Jelinek /******************************************************************************* 291*385cc6b4SJerry Jelinek * 292*385cc6b4SJerry Jelinek * AcpiRsConvertFixedDma 293*385cc6b4SJerry Jelinek * 294*385cc6b4SJerry Jelinek ******************************************************************************/ 295*385cc6b4SJerry Jelinek 296*385cc6b4SJerry Jelinek ACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[4] = 297*385cc6b4SJerry Jelinek { 298*385cc6b4SJerry Jelinek {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_DMA, 299*385cc6b4SJerry Jelinek ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_DMA), 300*385cc6b4SJerry Jelinek ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedDma)}, 301*385cc6b4SJerry Jelinek 302*385cc6b4SJerry Jelinek {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_DMA, 303*385cc6b4SJerry Jelinek sizeof (AML_RESOURCE_FIXED_DMA), 304*385cc6b4SJerry Jelinek 0}, 305*385cc6b4SJerry Jelinek 306*385cc6b4SJerry Jelinek /* 307*385cc6b4SJerry Jelinek * These fields are contiguous in both the source and destination: 308*385cc6b4SJerry Jelinek * RequestLines 309*385cc6b4SJerry Jelinek * Channels 310*385cc6b4SJerry Jelinek */ 311*385cc6b4SJerry Jelinek {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.FixedDma.RequestLines), 312*385cc6b4SJerry Jelinek AML_OFFSET (FixedDma.RequestLines), 313*385cc6b4SJerry Jelinek 2}, 314*385cc6b4SJerry Jelinek 315*385cc6b4SJerry Jelinek {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.FixedDma.Width), 316*385cc6b4SJerry Jelinek AML_OFFSET (FixedDma.Width), 317*385cc6b4SJerry Jelinek 1}, 318*385cc6b4SJerry Jelinek }; 319