1193267Sjkim/******************************************************************************
2193267Sjkim *
3193267Sjkim * Name: acrestyp.h - Defines, types, and structures for resource descriptors
4193267Sjkim *
5193267Sjkim *****************************************************************************/
6193267Sjkim
7217365Sjkim/*
8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
9193267Sjkim * All rights reserved.
10193267Sjkim *
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.
25193267Sjkim *
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.
29193267Sjkim *
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 */
43193267Sjkim
44193267Sjkim#ifndef __ACRESTYP_H__
45193267Sjkim#define __ACRESTYP_H__
46193267Sjkim
47193267Sjkim
48193267Sjkim/*
49193267Sjkim * Definitions for Resource Attributes
50193267Sjkim */
51193267Sjkimtypedef UINT16                          ACPI_RS_LENGTH;    /* Resource Length field is fixed at 16 bits */
52193267Sjkimtypedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */
53193267Sjkim
54193267Sjkim/*
55193267Sjkim * Memory Attributes
56193267Sjkim */
57193267Sjkim#define ACPI_READ_ONLY_MEMORY           (UINT8) 0x00
58193267Sjkim#define ACPI_READ_WRITE_MEMORY          (UINT8) 0x01
59193267Sjkim
60193267Sjkim#define ACPI_NON_CACHEABLE_MEMORY       (UINT8) 0x00
61193267Sjkim#define ACPI_CACHABLE_MEMORY            (UINT8) 0x01
62193267Sjkim#define ACPI_WRITE_COMBINING_MEMORY     (UINT8) 0x02
63193267Sjkim#define ACPI_PREFETCHABLE_MEMORY        (UINT8) 0x03
64193267Sjkim
65228110Sjkim/*! [Begin] no source code translation */
66193267Sjkim/*
67193267Sjkim * IO Attributes
68193267Sjkim * The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
69193267Sjkim * The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
70193267Sjkim */
71228110Sjkim/*! [End] no source code translation !*/
72228110Sjkim
73193267Sjkim#define ACPI_NON_ISA_ONLY_RANGES        (UINT8) 0x01
74193267Sjkim#define ACPI_ISA_ONLY_RANGES            (UINT8) 0x02
75193267Sjkim#define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
76193267Sjkim
77193267Sjkim/* Type of translation - 1=Sparse, 0=Dense */
78193267Sjkim
79193267Sjkim#define ACPI_SPARSE_TRANSLATION         (UINT8) 0x01
80193267Sjkim
81193267Sjkim/*
82193267Sjkim * IO Port Descriptor Decode
83193267Sjkim */
84193267Sjkim#define ACPI_DECODE_10                  (UINT8) 0x00    /* 10-bit IO address decode */
85193267Sjkim#define ACPI_DECODE_16                  (UINT8) 0x01    /* 16-bit IO address decode */
86193267Sjkim
87193267Sjkim/*
88228110Sjkim * Interrupt attributes - used in multiple descriptors
89193267Sjkim */
90228110Sjkim
91228110Sjkim/* Triggering */
92228110Sjkim
93193267Sjkim#define ACPI_LEVEL_SENSITIVE            (UINT8) 0x00
94193267Sjkim#define ACPI_EDGE_SENSITIVE             (UINT8) 0x01
95193267Sjkim
96228110Sjkim/* Polarity */
97228110Sjkim
98193267Sjkim#define ACPI_ACTIVE_HIGH                (UINT8) 0x00
99193267Sjkim#define ACPI_ACTIVE_LOW                 (UINT8) 0x01
100228110Sjkim#define ACPI_ACTIVE_BOTH                (UINT8) 0x02
101193267Sjkim
102228110Sjkim/* Sharing */
103228110Sjkim
104193267Sjkim#define ACPI_EXCLUSIVE                  (UINT8) 0x00
105193267Sjkim#define ACPI_SHARED                     (UINT8) 0x01
106193267Sjkim
107245582Sjkim/* Wake */
108245582Sjkim
109245582Sjkim#define ACPI_NOT_WAKE_CAPABLE           (UINT8) 0x00
110245582Sjkim#define ACPI_WAKE_CAPABLE               (UINT8) 0x01
111245582Sjkim
112193267Sjkim/*
113193267Sjkim * DMA Attributes
114193267Sjkim */
115193267Sjkim#define ACPI_COMPATIBILITY              (UINT8) 0x00
116193267Sjkim#define ACPI_TYPE_A                     (UINT8) 0x01
117193267Sjkim#define ACPI_TYPE_B                     (UINT8) 0x02
118193267Sjkim#define ACPI_TYPE_F                     (UINT8) 0x03
119193267Sjkim
120193267Sjkim#define ACPI_NOT_BUS_MASTER             (UINT8) 0x00
121193267Sjkim#define ACPI_BUS_MASTER                 (UINT8) 0x01
122193267Sjkim
123193267Sjkim#define ACPI_TRANSFER_8                 (UINT8) 0x00
124193267Sjkim#define ACPI_TRANSFER_8_16              (UINT8) 0x01
125193267Sjkim#define ACPI_TRANSFER_16                (UINT8) 0x02
126193267Sjkim
127193267Sjkim/*
128193267Sjkim * Start Dependent Functions Priority definitions
129193267Sjkim */
130193267Sjkim#define ACPI_GOOD_CONFIGURATION         (UINT8) 0x00
131193267Sjkim#define ACPI_ACCEPTABLE_CONFIGURATION   (UINT8) 0x01
132193267Sjkim#define ACPI_SUB_OPTIMAL_CONFIGURATION  (UINT8) 0x02
133193267Sjkim
134193267Sjkim/*
135193267Sjkim * 16, 32 and 64-bit Address Descriptor resource types
136193267Sjkim */
137193267Sjkim#define ACPI_MEMORY_RANGE               (UINT8) 0x00
138193267Sjkim#define ACPI_IO_RANGE                   (UINT8) 0x01
139193267Sjkim#define ACPI_BUS_NUMBER_RANGE           (UINT8) 0x02
140193267Sjkim
141193267Sjkim#define ACPI_ADDRESS_NOT_FIXED          (UINT8) 0x00
142193267Sjkim#define ACPI_ADDRESS_FIXED              (UINT8) 0x01
143193267Sjkim
144193267Sjkim#define ACPI_POS_DECODE                 (UINT8) 0x00
145193267Sjkim#define ACPI_SUB_DECODE                 (UINT8) 0x01
146193267Sjkim
147228110Sjkim/* Producer/Consumer */
148228110Sjkim
149193267Sjkim#define ACPI_PRODUCER                   (UINT8) 0x00
150193267Sjkim#define ACPI_CONSUMER                   (UINT8) 0x01
151193267Sjkim
152193267Sjkim
153193267Sjkim/*
154193267Sjkim * If possible, pack the following structures to byte alignment
155193267Sjkim */
156193267Sjkim#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
157193267Sjkim#pragma pack(1)
158193267Sjkim#endif
159193267Sjkim
160193267Sjkim/* UUID data structures for use in vendor-defined resource descriptors */
161193267Sjkim
162193267Sjkimtypedef struct acpi_uuid
163193267Sjkim{
164193267Sjkim    UINT8                           Data[ACPI_UUID_LENGTH];
165193267Sjkim} ACPI_UUID;
166193267Sjkim
167193267Sjkimtypedef struct acpi_vendor_uuid
168193267Sjkim{
169193267Sjkim    UINT8                           Subtype;
170193267Sjkim    UINT8                           Data[ACPI_UUID_LENGTH];
171193267Sjkim
172193267Sjkim} ACPI_VENDOR_UUID;
173193267Sjkim
174193267Sjkim/*
175193267Sjkim * Structures used to describe device resources
176193267Sjkim */
177193267Sjkimtypedef struct acpi_resource_irq
178193267Sjkim{
179193267Sjkim    UINT8                           DescriptorLength;
180193267Sjkim    UINT8                           Triggering;
181193267Sjkim    UINT8                           Polarity;
182193267Sjkim    UINT8                           Sharable;
183245582Sjkim    UINT8                           WakeCapable;
184193267Sjkim    UINT8                           InterruptCount;
185193267Sjkim    UINT8                           Interrupts[1];
186193267Sjkim
187193267Sjkim} ACPI_RESOURCE_IRQ;
188193267Sjkim
189228110Sjkimtypedef struct acpi_resource_dma
190193267Sjkim{
191193267Sjkim    UINT8                           Type;
192193267Sjkim    UINT8                           BusMaster;
193193267Sjkim    UINT8                           Transfer;
194193267Sjkim    UINT8                           ChannelCount;
195193267Sjkim    UINT8                           Channels[1];
196193267Sjkim
197193267Sjkim} ACPI_RESOURCE_DMA;
198193267Sjkim
199193267Sjkimtypedef struct acpi_resource_start_dependent
200193267Sjkim{
201193267Sjkim    UINT8                           DescriptorLength;
202193267Sjkim    UINT8                           CompatibilityPriority;
203193267Sjkim    UINT8                           PerformanceRobustness;
204193267Sjkim
205193267Sjkim} ACPI_RESOURCE_START_DEPENDENT;
206193267Sjkim
207193267Sjkim
208193267Sjkim/*
209193267Sjkim * The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
210193267Sjkim * needed because it has no fields
211193267Sjkim */
212193267Sjkim
213193267Sjkim
214193267Sjkimtypedef struct acpi_resource_io
215193267Sjkim{
216193267Sjkim    UINT8                           IoDecode;
217193267Sjkim    UINT8                           Alignment;
218193267Sjkim    UINT8                           AddressLength;
219193267Sjkim    UINT16                          Minimum;
220193267Sjkim    UINT16                          Maximum;
221193267Sjkim
222193267Sjkim} ACPI_RESOURCE_IO;
223193267Sjkim
224193267Sjkimtypedef struct acpi_resource_fixed_io
225193267Sjkim{
226193267Sjkim    UINT16                          Address;
227193267Sjkim    UINT8                           AddressLength;
228193267Sjkim
229193267Sjkim} ACPI_RESOURCE_FIXED_IO;
230193267Sjkim
231228110Sjkimtypedef struct acpi_resource_fixed_dma
232228110Sjkim{
233228110Sjkim    UINT16                          RequestLines;
234228110Sjkim    UINT16                          Channels;
235228110Sjkim    UINT8                           Width;
236228110Sjkim
237228110Sjkim} ACPI_RESOURCE_FIXED_DMA;
238228110Sjkim
239228110Sjkim/* Values for Width field above */
240228110Sjkim
241228110Sjkim#define ACPI_DMA_WIDTH8                         0
242228110Sjkim#define ACPI_DMA_WIDTH16                        1
243228110Sjkim#define ACPI_DMA_WIDTH32                        2
244228110Sjkim#define ACPI_DMA_WIDTH64                        3
245228110Sjkim#define ACPI_DMA_WIDTH128                       4
246228110Sjkim#define ACPI_DMA_WIDTH256                       5
247228110Sjkim
248228110Sjkim
249193267Sjkimtypedef struct acpi_resource_vendor
250193267Sjkim{
251193267Sjkim    UINT16                          ByteLength;
252193267Sjkim    UINT8                           ByteData[1];
253193267Sjkim
254193267Sjkim} ACPI_RESOURCE_VENDOR;
255193267Sjkim
256193267Sjkim/* Vendor resource with UUID info (introduced in ACPI 3.0) */
257193267Sjkim
258193267Sjkimtypedef struct acpi_resource_vendor_typed
259193267Sjkim{
260193267Sjkim    UINT16                          ByteLength;
261193267Sjkim    UINT8                           UuidSubtype;
262193267Sjkim    UINT8                           Uuid[ACPI_UUID_LENGTH];
263193267Sjkim    UINT8                           ByteData[1];
264193267Sjkim
265193267Sjkim} ACPI_RESOURCE_VENDOR_TYPED;
266193267Sjkim
267193267Sjkimtypedef struct acpi_resource_end_tag
268193267Sjkim{
269193267Sjkim    UINT8                           Checksum;
270193267Sjkim
271193267Sjkim} ACPI_RESOURCE_END_TAG;
272193267Sjkim
273193267Sjkimtypedef struct acpi_resource_memory24
274193267Sjkim{
275193267Sjkim    UINT8                           WriteProtect;
276193267Sjkim    UINT16                          Minimum;
277193267Sjkim    UINT16                          Maximum;
278193267Sjkim    UINT16                          Alignment;
279193267Sjkim    UINT16                          AddressLength;
280193267Sjkim
281193267Sjkim} ACPI_RESOURCE_MEMORY24;
282193267Sjkim
283193267Sjkimtypedef struct acpi_resource_memory32
284193267Sjkim{
285193267Sjkim    UINT8                           WriteProtect;
286193267Sjkim    UINT32                          Minimum;
287193267Sjkim    UINT32                          Maximum;
288193267Sjkim    UINT32                          Alignment;
289193267Sjkim    UINT32                          AddressLength;
290193267Sjkim
291193267Sjkim} ACPI_RESOURCE_MEMORY32;
292193267Sjkim
293193267Sjkimtypedef struct acpi_resource_fixed_memory32
294193267Sjkim{
295193267Sjkim    UINT8                           WriteProtect;
296193267Sjkim    UINT32                          Address;
297193267Sjkim    UINT32                          AddressLength;
298193267Sjkim
299193267Sjkim} ACPI_RESOURCE_FIXED_MEMORY32;
300193267Sjkim
301193267Sjkimtypedef struct acpi_memory_attribute
302193267Sjkim{
303193267Sjkim    UINT8                           WriteProtect;
304193267Sjkim    UINT8                           Caching;
305193267Sjkim    UINT8                           RangeType;
306193267Sjkim    UINT8                           Translation;
307193267Sjkim
308193267Sjkim} ACPI_MEMORY_ATTRIBUTE;
309193267Sjkim
310193267Sjkimtypedef struct acpi_io_attribute
311193267Sjkim{
312193267Sjkim    UINT8                           RangeType;
313193267Sjkim    UINT8                           Translation;
314193267Sjkim    UINT8                           TranslationType;
315193267Sjkim    UINT8                           Reserved1;
316193267Sjkim
317193267Sjkim} ACPI_IO_ATTRIBUTE;
318193267Sjkim
319193267Sjkimtypedef union acpi_resource_attribute
320193267Sjkim{
321193267Sjkim    ACPI_MEMORY_ATTRIBUTE           Mem;
322193267Sjkim    ACPI_IO_ATTRIBUTE               Io;
323193267Sjkim
324193267Sjkim    /* Used for the *WordSpace macros */
325193267Sjkim
326193267Sjkim    UINT8                           TypeSpecific;
327193267Sjkim
328193267Sjkim} ACPI_RESOURCE_ATTRIBUTE;
329193267Sjkim
330193267Sjkimtypedef struct acpi_resource_source
331193267Sjkim{
332193267Sjkim    UINT8                           Index;
333193267Sjkim    UINT16                          StringLength;
334193267Sjkim    char                            *StringPtr;
335193267Sjkim
336193267Sjkim} ACPI_RESOURCE_SOURCE;
337193267Sjkim
338193267Sjkim/* Fields common to all address descriptors, 16/32/64 bit */
339193267Sjkim
340193267Sjkim#define ACPI_RESOURCE_ADDRESS_COMMON \
341193267Sjkim    UINT8                           ResourceType; \
342193267Sjkim    UINT8                           ProducerConsumer; \
343193267Sjkim    UINT8                           Decode; \
344193267Sjkim    UINT8                           MinAddressFixed; \
345193267Sjkim    UINT8                           MaxAddressFixed; \
346193267Sjkim    ACPI_RESOURCE_ATTRIBUTE         Info;
347193267Sjkim
348281687Sjkimtypedef struct acpi_address16_attribute
349281687Sjkim{
350281687Sjkim    UINT16                          Granularity;
351281687Sjkim    UINT16                          Minimum;
352281687Sjkim    UINT16                          Maximum;
353281687Sjkim    UINT16                          TranslationOffset;
354281687Sjkim    UINT16                          AddressLength;
355281687Sjkim
356281687Sjkim} ACPI_ADDRESS16_ATTRIBUTE;
357281687Sjkim
358281687Sjkimtypedef struct acpi_address32_attribute
359281687Sjkim{
360281687Sjkim    UINT32                          Granularity;
361281687Sjkim    UINT32                          Minimum;
362281687Sjkim    UINT32                          Maximum;
363281687Sjkim    UINT32                          TranslationOffset;
364281687Sjkim    UINT32                          AddressLength;
365281687Sjkim
366281687Sjkim} ACPI_ADDRESS32_ATTRIBUTE;
367281687Sjkim
368281687Sjkimtypedef struct acpi_address64_attribute
369281687Sjkim{
370281687Sjkim    UINT64                          Granularity;
371281687Sjkim    UINT64                          Minimum;
372281687Sjkim    UINT64                          Maximum;
373281687Sjkim    UINT64                          TranslationOffset;
374281687Sjkim    UINT64                          AddressLength;
375281687Sjkim
376281687Sjkim} ACPI_ADDRESS64_ATTRIBUTE;
377281687Sjkim
378193267Sjkimtypedef struct acpi_resource_address
379193267Sjkim{
380193267Sjkim    ACPI_RESOURCE_ADDRESS_COMMON
381193267Sjkim
382193267Sjkim} ACPI_RESOURCE_ADDRESS;
383193267Sjkim
384193267Sjkimtypedef struct acpi_resource_address16
385193267Sjkim{
386193267Sjkim    ACPI_RESOURCE_ADDRESS_COMMON
387281687Sjkim    ACPI_ADDRESS16_ATTRIBUTE        Address;
388193267Sjkim    ACPI_RESOURCE_SOURCE            ResourceSource;
389193267Sjkim
390193267Sjkim} ACPI_RESOURCE_ADDRESS16;
391193267Sjkim
392193267Sjkimtypedef struct acpi_resource_address32
393193267Sjkim{
394193267Sjkim    ACPI_RESOURCE_ADDRESS_COMMON
395281687Sjkim    ACPI_ADDRESS32_ATTRIBUTE        Address;
396193267Sjkim    ACPI_RESOURCE_SOURCE            ResourceSource;
397193267Sjkim
398193267Sjkim} ACPI_RESOURCE_ADDRESS32;
399193267Sjkim
400193267Sjkimtypedef struct acpi_resource_address64
401193267Sjkim{
402193267Sjkim    ACPI_RESOURCE_ADDRESS_COMMON
403281687Sjkim    ACPI_ADDRESS64_ATTRIBUTE        Address;
404193267Sjkim    ACPI_RESOURCE_SOURCE            ResourceSource;
405193267Sjkim
406193267Sjkim} ACPI_RESOURCE_ADDRESS64;
407193267Sjkim
408193267Sjkimtypedef struct acpi_resource_extended_address64
409193267Sjkim{
410193267Sjkim    ACPI_RESOURCE_ADDRESS_COMMON
411193267Sjkim    UINT8                           RevisionID;
412281687Sjkim    ACPI_ADDRESS64_ATTRIBUTE        Address;
413193267Sjkim    UINT64                          TypeSpecific;
414193267Sjkim
415193267Sjkim} ACPI_RESOURCE_EXTENDED_ADDRESS64;
416193267Sjkim
417193267Sjkimtypedef struct acpi_resource_extended_irq
418193267Sjkim{
419193267Sjkim    UINT8                           ProducerConsumer;
420193267Sjkim    UINT8                           Triggering;
421193267Sjkim    UINT8                           Polarity;
422193267Sjkim    UINT8                           Sharable;
423245582Sjkim    UINT8                           WakeCapable;
424193267Sjkim    UINT8                           InterruptCount;
425193267Sjkim    ACPI_RESOURCE_SOURCE            ResourceSource;
426193267Sjkim    UINT32                          Interrupts[1];
427193267Sjkim
428193267Sjkim} ACPI_RESOURCE_EXTENDED_IRQ;
429193267Sjkim
430193267Sjkimtypedef struct acpi_resource_generic_register
431193267Sjkim{
432193267Sjkim    UINT8                           SpaceId;
433193267Sjkim    UINT8                           BitWidth;
434193267Sjkim    UINT8                           BitOffset;
435193267Sjkim    UINT8                           AccessSize;
436193267Sjkim    UINT64                          Address;
437193267Sjkim
438193267Sjkim} ACPI_RESOURCE_GENERIC_REGISTER;
439193267Sjkim
440228110Sjkimtypedef struct acpi_resource_gpio
441228110Sjkim{
442228110Sjkim    UINT8                           RevisionId;
443228110Sjkim    UINT8                           ConnectionType;
444228110Sjkim    UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
445228110Sjkim    UINT8                           PinConfig;
446228110Sjkim    UINT8                           Sharable;           /* For values, see Interrupt Attributes above */
447245582Sjkim    UINT8                           WakeCapable;        /* For values, see Interrupt Attributes above */
448228110Sjkim    UINT8                           IoRestriction;
449228110Sjkim    UINT8                           Triggering;         /* For values, see Interrupt Attributes above */
450228110Sjkim    UINT8                           Polarity;           /* For values, see Interrupt Attributes above */
451228110Sjkim    UINT16                          DriveStrength;
452228110Sjkim    UINT16                          DebounceTimeout;
453228110Sjkim    UINT16                          PinTableLength;
454228110Sjkim    UINT16                          VendorLength;
455228110Sjkim    ACPI_RESOURCE_SOURCE            ResourceSource;
456228110Sjkim    UINT16                          *PinTable;
457228110Sjkim    UINT8                           *VendorData;
458193267Sjkim
459228110Sjkim} ACPI_RESOURCE_GPIO;
460228110Sjkim
461228110Sjkim/* Values for GPIO ConnectionType field above */
462228110Sjkim
463228110Sjkim#define ACPI_RESOURCE_GPIO_TYPE_INT             0
464228110Sjkim#define ACPI_RESOURCE_GPIO_TYPE_IO              1
465228110Sjkim
466228110Sjkim/* Values for PinConfig field above */
467228110Sjkim
468228110Sjkim#define ACPI_PIN_CONFIG_DEFAULT                 0
469228110Sjkim#define ACPI_PIN_CONFIG_PULLUP                  1
470228110Sjkim#define ACPI_PIN_CONFIG_PULLDOWN                2
471228110Sjkim#define ACPI_PIN_CONFIG_NOPULL                  3
472228110Sjkim
473228110Sjkim/* Values for IoRestriction field above */
474228110Sjkim
475228110Sjkim#define ACPI_IO_RESTRICT_NONE                   0
476228110Sjkim#define ACPI_IO_RESTRICT_INPUT                  1
477228110Sjkim#define ACPI_IO_RESTRICT_OUTPUT                 2
478228110Sjkim#define ACPI_IO_RESTRICT_NONE_PRESERVE          3
479228110Sjkim
480228110Sjkim
481228110Sjkim/* Common structure for I2C, SPI, and UART serial descriptors */
482228110Sjkim
483228110Sjkim#define ACPI_RESOURCE_SERIAL_COMMON \
484228110Sjkim    UINT8                           RevisionId; \
485228110Sjkim    UINT8                           Type; \
486228110Sjkim    UINT8                           ProducerConsumer;    /* For values, see Producer/Consumer above */\
487228110Sjkim    UINT8                           SlaveMode; \
488306536Sjkim    UINT8                           ConnectionSharing; \
489228110Sjkim    UINT8                           TypeRevisionId; \
490228110Sjkim    UINT16                          TypeDataLength; \
491228110Sjkim    UINT16                          VendorLength; \
492228110Sjkim    ACPI_RESOURCE_SOURCE            ResourceSource; \
493228110Sjkim    UINT8                           *VendorData;
494228110Sjkim
495228110Sjkimtypedef struct acpi_resource_common_serialbus
496228110Sjkim{
497228110Sjkim    ACPI_RESOURCE_SERIAL_COMMON
498228110Sjkim
499228110Sjkim} ACPI_RESOURCE_COMMON_SERIALBUS;
500228110Sjkim
501228110Sjkim/* Values for the Type field above */
502228110Sjkim
503228110Sjkim#define ACPI_RESOURCE_SERIAL_TYPE_I2C           1
504228110Sjkim#define ACPI_RESOURCE_SERIAL_TYPE_SPI           2
505228110Sjkim#define ACPI_RESOURCE_SERIAL_TYPE_UART          3
506228110Sjkim
507228110Sjkim/* Values for SlaveMode field above */
508228110Sjkim
509228110Sjkim#define ACPI_CONTROLLER_INITIATED               0
510228110Sjkim#define ACPI_DEVICE_INITIATED                   1
511228110Sjkim
512228110Sjkim
513228110Sjkimtypedef struct acpi_resource_i2c_serialbus
514228110Sjkim{
515228110Sjkim    ACPI_RESOURCE_SERIAL_COMMON
516228110Sjkim    UINT8                           AccessMode;
517228110Sjkim    UINT16                          SlaveAddress;
518228110Sjkim    UINT32                          ConnectionSpeed;
519228110Sjkim
520228110Sjkim} ACPI_RESOURCE_I2C_SERIALBUS;
521228110Sjkim
522228110Sjkim/* Values for AccessMode field above */
523228110Sjkim
524228110Sjkim#define ACPI_I2C_7BIT_MODE                      0
525228110Sjkim#define ACPI_I2C_10BIT_MODE                     1
526228110Sjkim
527228110Sjkim
528228110Sjkimtypedef struct acpi_resource_spi_serialbus
529228110Sjkim{
530228110Sjkim    ACPI_RESOURCE_SERIAL_COMMON
531228110Sjkim    UINT8                           WireMode;
532228110Sjkim    UINT8                           DevicePolarity;
533228110Sjkim    UINT8                           DataBitLength;
534228110Sjkim    UINT8                           ClockPhase;
535228110Sjkim    UINT8                           ClockPolarity;
536228110Sjkim    UINT16                          DeviceSelection;
537228110Sjkim    UINT32                          ConnectionSpeed;
538228110Sjkim
539228110Sjkim} ACPI_RESOURCE_SPI_SERIALBUS;
540228110Sjkim
541228110Sjkim/* Values for WireMode field above */
542228110Sjkim
543228110Sjkim#define ACPI_SPI_4WIRE_MODE                     0
544228110Sjkim#define ACPI_SPI_3WIRE_MODE                     1
545228110Sjkim
546228110Sjkim/* Values for DevicePolarity field above */
547228110Sjkim
548228110Sjkim#define ACPI_SPI_ACTIVE_LOW                     0
549228110Sjkim#define ACPI_SPI_ACTIVE_HIGH                    1
550228110Sjkim
551228110Sjkim/* Values for ClockPhase field above */
552228110Sjkim
553228110Sjkim#define ACPI_SPI_FIRST_PHASE                    0
554228110Sjkim#define ACPI_SPI_SECOND_PHASE                   1
555228110Sjkim
556228110Sjkim/* Values for ClockPolarity field above */
557228110Sjkim
558228110Sjkim#define ACPI_SPI_START_LOW                      0
559228110Sjkim#define ACPI_SPI_START_HIGH                     1
560228110Sjkim
561228110Sjkim
562228110Sjkimtypedef struct acpi_resource_uart_serialbus
563228110Sjkim{
564228110Sjkim    ACPI_RESOURCE_SERIAL_COMMON
565228110Sjkim    UINT8                           Endian;
566228110Sjkim    UINT8                           DataBits;
567228110Sjkim    UINT8                           StopBits;
568228110Sjkim    UINT8                           FlowControl;
569228110Sjkim    UINT8                           Parity;
570228110Sjkim    UINT8                           LinesEnabled;
571228110Sjkim    UINT16                          RxFifoSize;
572228110Sjkim    UINT16                          TxFifoSize;
573228110Sjkim    UINT32                          DefaultBaudRate;
574228110Sjkim
575228110Sjkim} ACPI_RESOURCE_UART_SERIALBUS;
576228110Sjkim
577228110Sjkim/* Values for Endian field above */
578228110Sjkim
579228110Sjkim#define ACPI_UART_LITTLE_ENDIAN                 0
580228110Sjkim#define ACPI_UART_BIG_ENDIAN                    1
581228110Sjkim
582228110Sjkim/* Values for DataBits field above */
583228110Sjkim
584228110Sjkim#define ACPI_UART_5_DATA_BITS                   0
585228110Sjkim#define ACPI_UART_6_DATA_BITS                   1
586228110Sjkim#define ACPI_UART_7_DATA_BITS                   2
587228110Sjkim#define ACPI_UART_8_DATA_BITS                   3
588228110Sjkim#define ACPI_UART_9_DATA_BITS                   4
589228110Sjkim
590228110Sjkim/* Values for StopBits field above */
591228110Sjkim
592228110Sjkim#define ACPI_UART_NO_STOP_BITS                  0
593228110Sjkim#define ACPI_UART_1_STOP_BIT                    1
594228110Sjkim#define ACPI_UART_1P5_STOP_BITS                 2
595228110Sjkim#define ACPI_UART_2_STOP_BITS                   3
596228110Sjkim
597228110Sjkim/* Values for FlowControl field above */
598228110Sjkim
599228110Sjkim#define ACPI_UART_FLOW_CONTROL_NONE             0
600228110Sjkim#define ACPI_UART_FLOW_CONTROL_HW               1
601228110Sjkim#define ACPI_UART_FLOW_CONTROL_XON_XOFF         2
602228110Sjkim
603228110Sjkim/* Values for Parity field above */
604228110Sjkim
605228110Sjkim#define ACPI_UART_PARITY_NONE                   0
606228110Sjkim#define ACPI_UART_PARITY_EVEN                   1
607228110Sjkim#define ACPI_UART_PARITY_ODD                    2
608228110Sjkim#define ACPI_UART_PARITY_MARK                   3
609228110Sjkim#define ACPI_UART_PARITY_SPACE                  4
610228110Sjkim
611228110Sjkim/* Values for LinesEnabled bitfield above */
612228110Sjkim
613228110Sjkim#define ACPI_UART_CARRIER_DETECT                (1<<2)
614228110Sjkim#define ACPI_UART_RING_INDICATOR                (1<<3)
615228110Sjkim#define ACPI_UART_DATA_SET_READY                (1<<4)
616228110Sjkim#define ACPI_UART_DATA_TERMINAL_READY           (1<<5)
617228110Sjkim#define ACPI_UART_CLEAR_TO_SEND                 (1<<6)
618228110Sjkim#define ACPI_UART_REQUEST_TO_SEND               (1<<7)
619228110Sjkim
620228110Sjkim
621193267Sjkim/* ACPI_RESOURCE_TYPEs */
622193267Sjkim
623193267Sjkim#define ACPI_RESOURCE_TYPE_IRQ                  0
624193267Sjkim#define ACPI_RESOURCE_TYPE_DMA                  1
625193267Sjkim#define ACPI_RESOURCE_TYPE_START_DEPENDENT      2
626193267Sjkim#define ACPI_RESOURCE_TYPE_END_DEPENDENT        3
627193267Sjkim#define ACPI_RESOURCE_TYPE_IO                   4
628193267Sjkim#define ACPI_RESOURCE_TYPE_FIXED_IO             5
629193267Sjkim#define ACPI_RESOURCE_TYPE_VENDOR               6
630193267Sjkim#define ACPI_RESOURCE_TYPE_END_TAG              7
631193267Sjkim#define ACPI_RESOURCE_TYPE_MEMORY24             8
632193267Sjkim#define ACPI_RESOURCE_TYPE_MEMORY32             9
633193267Sjkim#define ACPI_RESOURCE_TYPE_FIXED_MEMORY32       10
634193267Sjkim#define ACPI_RESOURCE_TYPE_ADDRESS16            11
635193267Sjkim#define ACPI_RESOURCE_TYPE_ADDRESS32            12
636193267Sjkim#define ACPI_RESOURCE_TYPE_ADDRESS64            13
637193267Sjkim#define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14  /* ACPI 3.0 */
638193267Sjkim#define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15
639193267Sjkim#define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16
640228110Sjkim#define ACPI_RESOURCE_TYPE_GPIO                 17  /* ACPI 5.0 */
641228110Sjkim#define ACPI_RESOURCE_TYPE_FIXED_DMA            18  /* ACPI 5.0 */
642228110Sjkim#define ACPI_RESOURCE_TYPE_SERIAL_BUS           19  /* ACPI 5.0 */
643228110Sjkim#define ACPI_RESOURCE_TYPE_MAX                  19
644193267Sjkim
645193267Sjkim/* Master union for resource descriptors */
646193267Sjkim
647193267Sjkimtypedef union acpi_resource_data
648193267Sjkim{
649193267Sjkim    ACPI_RESOURCE_IRQ                       Irq;
650193267Sjkim    ACPI_RESOURCE_DMA                       Dma;
651193267Sjkim    ACPI_RESOURCE_START_DEPENDENT           StartDpf;
652193267Sjkim    ACPI_RESOURCE_IO                        Io;
653193267Sjkim    ACPI_RESOURCE_FIXED_IO                  FixedIo;
654228110Sjkim    ACPI_RESOURCE_FIXED_DMA                 FixedDma;
655193267Sjkim    ACPI_RESOURCE_VENDOR                    Vendor;
656193267Sjkim    ACPI_RESOURCE_VENDOR_TYPED              VendorTyped;
657193267Sjkim    ACPI_RESOURCE_END_TAG                   EndTag;
658193267Sjkim    ACPI_RESOURCE_MEMORY24                  Memory24;
659193267Sjkim    ACPI_RESOURCE_MEMORY32                  Memory32;
660193267Sjkim    ACPI_RESOURCE_FIXED_MEMORY32            FixedMemory32;
661193267Sjkim    ACPI_RESOURCE_ADDRESS16                 Address16;
662193267Sjkim    ACPI_RESOURCE_ADDRESS32                 Address32;
663193267Sjkim    ACPI_RESOURCE_ADDRESS64                 Address64;
664193267Sjkim    ACPI_RESOURCE_EXTENDED_ADDRESS64        ExtAddress64;
665193267Sjkim    ACPI_RESOURCE_EXTENDED_IRQ              ExtendedIrq;
666193267Sjkim    ACPI_RESOURCE_GENERIC_REGISTER          GenericReg;
667228110Sjkim    ACPI_RESOURCE_GPIO                      Gpio;
668228110Sjkim    ACPI_RESOURCE_I2C_SERIALBUS             I2cSerialBus;
669228110Sjkim    ACPI_RESOURCE_SPI_SERIALBUS             SpiSerialBus;
670228110Sjkim    ACPI_RESOURCE_UART_SERIALBUS            UartSerialBus;
671228110Sjkim    ACPI_RESOURCE_COMMON_SERIALBUS          CommonSerialBus;
672193267Sjkim
673193267Sjkim    /* Common fields */
674193267Sjkim
675193267Sjkim    ACPI_RESOURCE_ADDRESS                   Address;        /* Common 16/32/64 address fields */
676193267Sjkim
677193267Sjkim} ACPI_RESOURCE_DATA;
678193267Sjkim
679193267Sjkim
680193267Sjkim/* Common resource header */
681193267Sjkim
682193267Sjkimtypedef struct acpi_resource
683193267Sjkim{
684193267Sjkim    UINT32                          Type;
685193267Sjkim    UINT32                          Length;
686193267Sjkim    ACPI_RESOURCE_DATA              Data;
687193267Sjkim
688193267Sjkim} ACPI_RESOURCE;
689193267Sjkim
690193267Sjkim/* restore default alignment */
691193267Sjkim
692193267Sjkim#pragma pack()
693193267Sjkim
694193267Sjkim
695193267Sjkim#define ACPI_RS_SIZE_NO_DATA                8       /* Id + Length fields */
696193267Sjkim#define ACPI_RS_SIZE_MIN                    (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
697193267Sjkim#define ACPI_RS_SIZE(Type)                  (UINT32) (ACPI_RS_SIZE_NO_DATA + sizeof (Type))
698193267Sjkim
699243347Sjkim/* Macro for walking resource templates with multiple descriptors */
700193267Sjkim
701243347Sjkim#define ACPI_NEXT_RESOURCE(Res) \
702243347Sjkim    ACPI_ADD_PTR (ACPI_RESOURCE, (Res), (Res)->Length)
703193267Sjkim
704243347Sjkim
705193267Sjkimtypedef struct acpi_pci_routing_table
706193267Sjkim{
707193267Sjkim    UINT32                          Length;
708193267Sjkim    UINT32                          Pin;
709202771Sjkim    UINT64                          Address;        /* here for 64-bit alignment */
710193267Sjkim    UINT32                          SourceIndex;
711193267Sjkim    char                            Source[4];      /* pad to 64 bits so sizeof() works in all cases */
712193267Sjkim
713193267Sjkim} ACPI_PCI_ROUTING_TABLE;
714193267Sjkim
715193267Sjkim#endif /* __ACRESTYP_H__ */
716