Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/acpi/actbl2.h
Line
Count
Source (jump to first uncovered line)
1
/******************************************************************************
2
 *
3
 * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
4
 *
5
 *****************************************************************************/
6
7
/*
8
 * Copyright (C) 2000 - 2011, Intel Corp.
9
 * All rights reserved.
10
 *
11
 * Redistribution and use in source and binary forms, with or without
12
 * modification, are permitted provided that the following conditions
13
 * are met:
14
 * 1. Redistributions of source code must retain the above copyright
15
 *    notice, this list of conditions, and the following disclaimer,
16
 *    without modification.
17
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18
 *    substantially similar to the "NO WARRANTY" disclaimer below
19
 *    ("Disclaimer") and any redistribution must be conditioned upon
20
 *    including a substantially similar Disclaimer requirement for further
21
 *    binary redistribution.
22
 * 3. Neither the names of the above-listed copyright holders nor the names
23
 *    of any contributors may be used to endorse or promote products derived
24
 *    from this software without specific prior written permission.
25
 *
26
 * Alternatively, this software may be distributed under the terms of the
27
 * GNU General Public License ("GPL") version 2 as published by the Free
28
 * Software Foundation.
29
 *
30
 * NO WARRANTY
31
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41
 * POSSIBILITY OF SUCH DAMAGES.
42
 */
43
44
#ifndef __ACTBL2_H__
45
#define __ACTBL2_H__
46
47
/*******************************************************************************
48
 *
49
 * Additional ACPI Tables (2)
50
 *
51
 * These tables are not consumed directly by the ACPICA subsystem, but are
52
 * included here to support device drivers and the AML disassembler.
53
 *
54
 * The tables in this file are defined by third-party specifications, and are
55
 * not defined directly by the ACPI specification itself.
56
 *
57
 ******************************************************************************/
58
59
/*
60
 * Values for description table header signatures for tables defined in this
61
 * file. Useful because they make it more difficult to inadvertently type in
62
 * the wrong signature.
63
 */
64
#define ACPI_SIG_ASF            "ASF!"  /* Alert Standard Format table */
65
#define ACPI_SIG_BOOT           "BOOT"  /* Simple Boot Flag Table */
66
#define ACPI_SIG_DBG2           "DBG2"  /* Debug Port table type 2 */
67
#define ACPI_SIG_DBGP           "DBGP"  /* Debug Port table */
68
1
#define ACPI_SIG_DMAR           "DMAR"  /* DMA Remapping table */
69
#define ACPI_SIG_HPET           "HPET"  /* High Precision Event Timer table */
70
#define ACPI_SIG_IBFT           "IBFT"  /* i_sCSI Boot Firmware Table */
71
#define ACPI_SIG_IORT           "IORT"  /* IO Remapping Table */
72
#define ACPI_SIG_IVRS           "IVRS"  /* I/O Virtualization Reporting Structure */
73
1
#define ACPI_SIG_MCFG           "MCFG"  /* PCI Memory Mapped Configuration table */
74
#define ACPI_SIG_MCHI           "MCHI"  /* Management Controller Host Interface table */
75
#define ACPI_SIG_SLIC           "SLIC"  /* Software Licensing Description Table */
76
#define ACPI_SIG_SPCR           "SPCR"  /* Serial Port Console Redirection table */
77
#define ACPI_SIG_SPMI           "SPMI"  /* Server Platform Management Interface table */
78
#define ACPI_SIG_TCPA           "TCPA"  /* Trusted Computing Platform Alliance table */
79
#define ACPI_SIG_UEFI           "UEFI"  /* Uefi Boot Optimization Table */
80
#define ACPI_SIG_WAET           "WAET"  /* Windows ACPI Emulated devices Table */
81
#define ACPI_SIG_WDAT           "WDAT"  /* Watchdog Action Table */
82
#define ACPI_SIG_WDDT           "WDDT"  /* Watchdog Timer Description Table */
83
#define ACPI_SIG_WDRT           "WDRT"  /* Watchdog Resource Table */
84
85
#ifdef ACPI_UNDEFINED_TABLES
86
/*
87
 * These tables have been seen in the field, but no definition has been found
88
 */
89
#define ACPI_SIG_ATKG           "ATKG"
90
#define ACPI_SIG_GSCI           "GSCI"  /* GMCH SCI table */
91
#define ACPI_SIG_IEIT           "IEIT"
92
#endif
93
94
/*
95
 * All tables must be byte-packed to match the ACPI specification, since
96
 * the tables are provided by the system BIOS.
97
 */
98
#pragma pack(1)
99
100
/*
101
 * Note about bitfields: The u8 type is used for bitfields in ACPI tables.
102
 * This is the only type that is even remotely portable. Anything else is not
103
 * portable, so do not use any other bitfield types.
104
 */
105
106
/*******************************************************************************
107
 *
108
 * ASF - Alert Standard Format table (Signature "ASF!")
109
 *       Revision 0x10
110
 *
111
 * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003
112
 *
113
 ******************************************************************************/
114
115
struct acpi_table_asf {
116
  struct acpi_table_header header;  /* Common ACPI table header */
117
};
118
119
/* ASF subtable header */
120
121
struct acpi_asf_header {
122
  u8 type;
123
  u8 reserved;
124
  u16 length;
125
};
126
127
/* Values for Type field above */
128
129
enum acpi_asf_type {
130
  ACPI_ASF_TYPE_INFO = 0,
131
  ACPI_ASF_TYPE_ALERT = 1,
132
  ACPI_ASF_TYPE_CONTROL = 2,
133
  ACPI_ASF_TYPE_BOOT = 3,
134
  ACPI_ASF_TYPE_ADDRESS = 4,
135
  ACPI_ASF_TYPE_RESERVED = 5
136
};
137
138
/*
139
 * ASF subtables
140
 */
141
142
/* 0: ASF Information */
143
144
struct acpi_asf_info {
145
  struct acpi_asf_header header;
146
  u8 min_reset_value;
147
  u8 min_poll_interval;
148
  u16 system_id;
149
  u32 mfg_id;
150
  u8 flags;
151
  u8 reserved2[3];
152
};
153
154
/* Masks for Flags field above */
155
156
#define ACPI_ASF_SMBUS_PROTOCOLS    (1)
157
158
/* 1: ASF Alerts */
159
160
struct acpi_asf_alert {
161
  struct acpi_asf_header header;
162
  u8 assert_mask;
163
  u8 deassert_mask;
164
  u8 alerts;
165
  u8 data_length;
166
};
167
168
struct acpi_asf_alert_data {
169
  u8 address;
170
  u8 command;
171
  u8 mask;
172
  u8 value;
173
  u8 sensor_type;
174
  u8 type;
175
  u8 offset;
176
  u8 source_type;
177
  u8 severity;
178
  u8 sensor_number;
179
  u8 entity;
180
  u8 instance;
181
};
182
183
/* 2: ASF Remote Control */
184
185
struct acpi_asf_remote {
186
  struct acpi_asf_header header;
187
  u8 controls;
188
  u8 data_length;
189
  u16 reserved2;
190
};
191
192
struct acpi_asf_control_data {
193
  u8 function;
194
  u8 address;
195
  u8 command;
196
  u8 value;
197
};
198
199
/* 3: ASF RMCP Boot Options */
200
201
struct acpi_asf_rmcp {
202
  struct acpi_asf_header header;
203
  u8 capabilities[7];
204
  u8 completion_code;
205
  u32 enterprise_id;
206
  u8 command;
207
  u16 parameter;
208
  u16 boot_options;
209
  u16 oem_parameters;
210
};
211
212
/* 4: ASF Address */
213
214
struct acpi_asf_address {
215
  struct acpi_asf_header header;
216
  u8 eprom_address;
217
  u8 devices;
218
};
219
220
/*******************************************************************************
221
 *
222
 * BOOT - Simple Boot Flag Table
223
 *        Version 1
224
 *
225
 * Conforms to the "Simple Boot Flag Specification", Version 2.1
226
 *
227
 ******************************************************************************/
228
229
struct acpi_table_boot {
230
  struct acpi_table_header header;  /* Common ACPI table header */
231
  u8 cmos_index;    /* Index in CMOS RAM for the boot register */
232
  u8 reserved[3];
233
};
234
235
/*******************************************************************************
236
 *
237
 * DBG2 - Debug Port Table 2
238
 *        Version 0 (Both main table and subtables)
239
 *
240
 * Conforms to "Microsoft Debug Port Table 2 (DBG2)", May 22 2012.
241
 *
242
 ******************************************************************************/
243
244
struct acpi_table_dbg2 {
245
  struct acpi_table_header header;  /* Common ACPI table header */
246
  u32 info_offset;
247
  u32 info_count;
248
};
249
250
/* Debug Device Information Subtable */
251
252
struct acpi_dbg2_device {
253
  u8 revision;
254
  u16 length;
255
  u8 register_count;  /* Number of base_address registers */
256
  u16 namepath_length;
257
  u16 namepath_offset;
258
  u16 oem_data_length;
259
  u16 oem_data_offset;
260
  u16 port_type;
261
  u16 port_subtype;
262
  u16 reserved;
263
  u16 base_address_offset;
264
  u16 address_size_offset;
265
  /*
266
   * Data that follows:
267
   *    base_address (required) - Each in 12-byte Generic Address Structure format.
268
   *    address_size (required) - Array of u32 sizes corresponding to each base_address register.
269
   *    Namepath    (required) - Null terminated string. Single dot if not supported.
270
   *    oem_data    (optional) - Length is oem_data_length.
271
   */
272
};
273
274
/* Types for port_type field above */
275
276
#define ACPI_DBG2_SERIAL_PORT       0x8000
277
#define ACPI_DBG2_1394_PORT         0x8001
278
#define ACPI_DBG2_USB_PORT          0x8002
279
#define ACPI_DBG2_NET_PORT          0x8003
280
281
/* Subtypes for port_subtype field above */
282
283
#define ACPI_DBG2_16550_COMPATIBLE  0x0000
284
#define ACPI_DBG2_16550_SUBSET      0x0001
285
#define ACPI_DBG2_PL011             0x0003
286
#define ACPI_DBG2_SBSA_32           0x000d
287
#define ACPI_DBG2_SBSA              0x000e
288
#define ACPI_DBG2_DCC               0x000f
289
#define ACPI_DBG2_BCM2835           0x0010
290
291
#define ACPI_DBG2_1394_STANDARD     0x0000
292
293
#define ACPI_DBG2_USB_XHCI          0x0000
294
#define ACPI_DBG2_USB_EHCI          0x0001
295
296
/*******************************************************************************
297
 *
298
 * DBGP - Debug Port table
299
 *        Version 1
300
 *
301
 * Conforms to the "Debug Port Specification", Version 1.00, 2/9/2000
302
 *
303
 ******************************************************************************/
304
305
struct acpi_table_dbgp {
306
  struct acpi_table_header header;  /* Common ACPI table header */
307
  u8 type;    /* 0=full 16550, 1=subset of 16550 */
308
  u8 reserved[3];
309
  struct acpi_generic_address debug_port;
310
};
311
312
/*******************************************************************************
313
 *
314
 * DMAR - DMA Remapping table
315
 *        Version 1
316
 *
317
 * Conforms to "Intel Virtualization Technology for Directed I/O",
318
 * Version 1.2, Sept. 2008
319
 *
320
 ******************************************************************************/
321
322
struct acpi_table_dmar {
323
  struct acpi_table_header header;  /* Common ACPI table header */
324
  u8 width;   /* Host Address Width */
325
  u8 flags;
326
  u8 reserved[10];
327
};
328
329
/* Masks for Flags field above */
330
331
6
#define ACPI_DMAR_INTR_REMAP        (1)
332
1
#define ACPI_DMAR_X2APIC_OPT_OUT    (1<<1)
333
334
/* DMAR subtable header */
335
336
struct acpi_dmar_header {
337
  u16 type;
338
  u16 length;
339
};
340
341
/* Values for subtable type in struct acpi_dmar_header */
342
343
enum acpi_dmar_type {
344
  ACPI_DMAR_TYPE_HARDWARE_UNIT = 0,
345
  ACPI_DMAR_TYPE_RESERVED_MEMORY = 1,
346
  ACPI_DMAR_TYPE_ATSR = 2,
347
  ACPI_DMAR_HARDWARE_AFFINITY = 3,
348
  ACPI_DMAR_TYPE_RESERVED = 4 /* 4 and greater are reserved */
349
};
350
351
/* DMAR Device Scope structure */
352
353
struct acpi_dmar_device_scope {
354
  u8 entry_type;
355
  u8 length;
356
  u16 reserved;
357
  u8 enumeration_id;
358
  u8 bus;
359
};
360
361
/* Values for entry_type in struct acpi_dmar_device_scope */
362
363
enum acpi_dmar_scope_type {
364
  ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,
365
  ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,
366
  ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,
367
  ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,
368
  ACPI_DMAR_SCOPE_TYPE_HPET = 4,
369
};
370
371
struct acpi_dmar_pci_path {
372
  u8 dev;
373
  u8 fn;
374
};
375
376
/*
377
 * DMAR Sub-tables, correspond to Type in struct acpi_dmar_header
378
 */
379
380
/* 0: Hardware Unit Definition */
381
382
struct acpi_dmar_hardware_unit {
383
  struct acpi_dmar_header header;
384
  u8 flags;
385
  u8 reserved;
386
  u16 segment;
387
  u64 address;    /* Register Base Address */
388
};
389
390
/* Masks for Flags field above */
391
392
1
#define ACPI_DMAR_INCLUDE_ALL       (1)
393
394
/* 1: Reserved Memory Defininition */
395
396
struct acpi_dmar_reserved_memory {
397
  struct acpi_dmar_header header;
398
  u16 reserved;
399
  u16 segment;
400
  u64 base_address; /* 4_k aligned base address */
401
  u64 end_address;  /* 4_k aligned limit address */
402
};
403
404
/* Masks for Flags field above */
405
406
#define ACPI_DMAR_ALLOW_ALL         (1)
407
408
/* 2: Root Port ATS Capability Reporting Structure */
409
410
struct acpi_dmar_atsr {
411
  struct acpi_dmar_header header;
412
  u8 flags;
413
  u8 reserved;
414
  u16 segment;
415
};
416
417
/* Masks for Flags field above */
418
419
1
#define ACPI_DMAR_ALL_PORTS         (1)
420
421
/* 3: Remapping Hardware Static Affinity Structure */
422
423
struct acpi_dmar_rhsa {
424
  struct acpi_dmar_header header;
425
  u32 reserved;
426
  u64 base_address;
427
  u32 proximity_domain;
428
};
429
430
/*******************************************************************************
431
 *
432
 * HPET - High Precision Event Timer table
433
 *        Version 1
434
 *
435
 * Conforms to "IA-PC HPET (High Precision Event Timers) Specification",
436
 * Version 1.0a, October 2004
437
 *
438
 ******************************************************************************/
439
440
struct acpi_table_hpet {
441
  struct acpi_table_header header;  /* Common ACPI table header */
442
  u32 id;     /* Hardware ID of event timer block */
443
  struct acpi_generic_address address;  /* Address of event timer block */
444
  u8 sequence;    /* HPET sequence number */
445
  u16 minimum_tick; /* Main counter min tick, periodic mode */
446
  u8 flags;
447
};
448
449
/* Masks for Flags field above */
450
451
#define ACPI_HPET_PAGE_PROTECT_MASK (3)
452
453
/* Values for Page Protect flags */
454
455
enum acpi_hpet_page_protect {
456
  ACPI_HPET_NO_PAGE_PROTECT = 0,
457
  ACPI_HPET_PAGE_PROTECT4 = 1,
458
  ACPI_HPET_PAGE_PROTECT64 = 2
459
};
460
461
/*******************************************************************************
462
 *
463
 * IBFT - Boot Firmware Table
464
 *        Version 1
465
 *
466
 * Conforms to "iSCSI Boot Firmware Table (iBFT) as Defined in ACPI 3.0b
467
 * Specification", Version 1.01, March 1, 2007
468
 *
469
 * Note: It appears that this table is not intended to appear in the RSDT/XSDT.
470
 * Therefore, it is not currently supported by the disassembler.
471
 *
472
 ******************************************************************************/
473
474
struct acpi_table_ibft {
475
  struct acpi_table_header header;  /* Common ACPI table header */
476
  u8 reserved[12];
477
};
478
479
/* IBFT common subtable header */
480
481
struct acpi_ibft_header {
482
  u8 type;
483
  u8 version;
484
  u16 length;
485
  u8 index;
486
  u8 flags;
487
};
488
489
/* Values for Type field above */
490
491
enum acpi_ibft_type {
492
  ACPI_IBFT_TYPE_NOT_USED = 0,
493
  ACPI_IBFT_TYPE_CONTROL = 1,
494
  ACPI_IBFT_TYPE_INITIATOR = 2,
495
  ACPI_IBFT_TYPE_NIC = 3,
496
  ACPI_IBFT_TYPE_TARGET = 4,
497
  ACPI_IBFT_TYPE_EXTENSIONS = 5,
498
  ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */
499
};
500
501
/* IBFT subtables */
502
503
struct acpi_ibft_control {
504
  struct acpi_ibft_header header;
505
  u16 extensions;
506
  u16 initiator_offset;
507
  u16 nic0_offset;
508
  u16 target0_offset;
509
  u16 nic1_offset;
510
  u16 target1_offset;
511
};
512
513
struct acpi_ibft_initiator {
514
  struct acpi_ibft_header header;
515
  u8 sns_server[16];
516
  u8 slp_server[16];
517
  u8 primary_server[16];
518
  u8 secondary_server[16];
519
  u16 name_length;
520
  u16 name_offset;
521
};
522
523
struct acpi_ibft_nic {
524
  struct acpi_ibft_header header;
525
  u8 ip_address[16];
526
  u8 subnet_mask_prefix;
527
  u8 origin;
528
  u8 gateway[16];
529
  u8 primary_dns[16];
530
  u8 secondary_dns[16];
531
  u8 dhcp[16];
532
  u16 vlan;
533
  u8 mac_address[6];
534
  u16 pci_address;
535
  u16 name_length;
536
  u16 name_offset;
537
};
538
539
struct acpi_ibft_target {
540
  struct acpi_ibft_header header;
541
  u8 target_ip_address[16];
542
  u16 target_ip_socket;
543
  u8 target_boot_lun[8];
544
  u8 chap_type;
545
  u8 nic_association;
546
  u16 target_name_length;
547
  u16 target_name_offset;
548
  u16 chap_name_length;
549
  u16 chap_name_offset;
550
  u16 chap_secret_length;
551
  u16 chap_secret_offset;
552
  u16 reverse_chap_name_length;
553
  u16 reverse_chap_name_offset;
554
  u16 reverse_chap_secret_length;
555
  u16 reverse_chap_secret_offset;
556
};
557
558
/*******************************************************************************
559
 *
560
 * IORT - IO Remapping Table
561
 *
562
 * Conforms to "IO Remapping Table System Software on ARM Platforms",
563
 * Document number: ARM DEN 0049B, October 2015
564
 *
565
 ******************************************************************************/
566
567
struct acpi_table_iort {
568
  struct acpi_table_header header;
569
  u32 node_count;
570
  u32 node_offset;
571
  u32 reserved;
572
};
573
574
/*
575
 * IORT subtables
576
 */
577
struct acpi_iort_node {
578
  u8 type;
579
  u16 length;
580
  u8 revision;
581
  u32 reserved;
582
  u32 mapping_count;
583
  u32 mapping_offset;
584
  char node_data[1];
585
};
586
587
/* Values for subtable Type above */
588
589
enum acpi_iort_node_type {
590
  ACPI_IORT_NODE_ITS_GROUP = 0x00,
591
  ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
592
  ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
593
  ACPI_IORT_NODE_SMMU = 0x03,
594
  ACPI_IORT_NODE_SMMU_V3 = 0x04
595
};
596
597
struct acpi_iort_id_mapping {
598
  u32 input_base;   /* Lowest value in input range */
599
  u32 id_count;   /* Number of IDs */
600
  u32 output_base;  /* Lowest value in output range */
601
  u32 output_reference; /* A reference to the output node */
602
  u32 flags;
603
};
604
605
/* Masks for Flags field above for IORT subtable */
606
607
#define ACPI_IORT_ID_SINGLE_MAPPING (1)
608
609
struct acpi_iort_memory_access {
610
  u32 cache_coherency;
611
  u8 hints;
612
  u16 reserved;
613
  u8 memory_flags;
614
};
615
616
/* Values for cache_coherency field above */
617
618
#define ACPI_IORT_NODE_COHERENT         0x00000001  /* The device node is fully coherent */
619
#define ACPI_IORT_NODE_NOT_COHERENT     0x00000000  /* The device node is not coherent */
620
621
/* Masks for Hints field above */
622
623
#define ACPI_IORT_HT_TRANSIENT          (1)
624
#define ACPI_IORT_HT_WRITE              (1<<1)
625
#define ACPI_IORT_HT_READ               (1<<2)
626
#define ACPI_IORT_HT_OVERRIDE           (1<<3)
627
628
/* Masks for memory_flags field above */
629
630
#define ACPI_IORT_MF_COHERENCY          (1)
631
#define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
632
633
/*
634
 * IORT node specific subtables
635
 */
636
struct acpi_iort_its_group {
637
  u32 its_count;
638
  u32 identifiers[1]; /* GIC ITS identifier arrary */
639
};
640
641
struct acpi_iort_named_component {
642
  u32 node_flags;
643
  u64 memory_properties;  /* Memory access properties */
644
  u8 memory_address_limit;  /* Memory address size limit */
645
  char device_name[1];  /* Path of namespace object */
646
};
647
648
struct acpi_iort_root_complex {
649
  u64 memory_properties;  /* Memory access properties */
650
  u32 ats_attribute;
651
  u32 pci_segment_number;
652
};
653
654
/* Values for ats_attribute field above */
655
656
#define ACPI_IORT_ATS_SUPPORTED         0x00000001  /* The root complex supports ATS */
657
#define ACPI_IORT_ATS_UNSUPPORTED       0x00000000  /* The root complex doesn't support ATS */
658
659
struct acpi_iort_smmu {
660
  u64 base_address; /* SMMU base address */
661
  u64 span;   /* Length of memory range */
662
  u32 model;
663
  u32 flags;
664
  u32 global_interrupt_offset;
665
  u32 context_interrupt_count;
666
  u32 context_interrupt_offset;
667
  u32 pmu_interrupt_count;
668
  u32 pmu_interrupt_offset;
669
  u64 interrupts[1];  /* Interrupt array */
670
};
671
672
/* Values for Model field above */
673
674
#define ACPI_IORT_SMMU_V1               0x00000000  /* Generic SMMUv1 */
675
#define ACPI_IORT_SMMU_V2               0x00000001  /* Generic SMMUv2 */
676
#define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002  /* ARM Corelink MMU-400 */
677
#define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003  /* ARM Corelink MMU-500 */
678
679
/* Masks for Flags field above */
680
681
#define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
682
#define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
683
684
struct acpi_iort_smmu_v3 {
685
  u64 base_address; /* SMMUv3 base address */
686
  u32 flags;
687
  u32 reserved;
688
  u64 vatos_address;
689
  u32 model;    /* O: generic SMMUv3 */
690
  u32 event_gsiv;
691
  u32 pri_gsiv;
692
  u32 gerr_gsiv;
693
  u32 sync_gsiv;
694
};
695
696
/* Masks for Flags field above */
697
698
#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
699
#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (1<<1)
700
701
/*******************************************************************************
702
 *
703
 * IVRS - I/O Virtualization Reporting Structure
704
 *        Version 1
705
 *
706
 * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
707
 * Revision 1.26, February 2009.
708
 *
709
 ******************************************************************************/
710
711
struct acpi_table_ivrs {
712
  struct acpi_table_header header;  /* Common ACPI table header */
713
  u32 info;   /* Common virtualization info */
714
  u64 reserved;
715
};
716
717
/* Values for Info field above */
718
719
#define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00  /* 7 bits, physical address size */
720
#define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000  /* 7 bits, virtual address size */
721
#define ACPI_IVRS_ATS_RESERVED      0x00400000  /* ATS address translation range reserved */
722
723
/* IVRS subtable header */
724
725
struct acpi_ivrs_header {
726
  u8 type;    /* Subtable type */
727
  u8 flags;
728
  u16 length;   /* Subtable length */
729
  u16 device_id;    /* ID of IOMMU */
730
};
731
732
/* Values for subtable Type above */
733
734
enum acpi_ivrs_type {
735
  ACPI_IVRS_TYPE_HARDWARE = 0x10,
736
  ACPI_IVRS_TYPE_HARDWARE_11H = 0x11,
737
  ACPI_IVRS_TYPE_MEMORY_ALL /* _MEMORY1 */ = 0x20,
738
  ACPI_IVRS_TYPE_MEMORY_ONE /* _MEMORY2 */ = 0x21,
739
  ACPI_IVRS_TYPE_MEMORY_RANGE /* _MEMORY3 */ = 0x22,
740
  ACPI_IVRS_TYPE_MEMORY_IOMMU = 0x23
741
};
742
743
/* Masks for Flags field above for IVHD subtable */
744
745
0
#define ACPI_IVHD_TT_ENABLE         (1)
746
0
#define ACPI_IVHD_PASS_PW           (1<<1)
747
0
#define ACPI_IVHD_RES_PASS_PW       (1<<2)
748
0
#define ACPI_IVHD_ISOC              (1<<3)
749
#define ACPI_IVHD_IOTLB             (1<<4)
750
751
/* Masks for Flags field above for IVMD subtable */
752
753
#define ACPI_IVMD_UNITY             (1)
754
#define ACPI_IVMD_READ              (1<<1)
755
#define ACPI_IVMD_WRITE             (1<<2)
756
#define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
757
758
/*
759
 * IVRS subtables, correspond to Type in struct acpi_ivrs_header
760
 */
761
762
/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
763
764
struct acpi_ivrs_hardware {
765
  struct acpi_ivrs_header header;
766
  u16 capability_offset;  /* Offset for IOMMU control fields */
767
  u64 base_address; /* IOMMU control registers */
768
  u16 pci_segment_group;
769
  u16 info;   /* MSI number and unit ID */
770
  u32 iommu_attr;
771
  u64 efr_image;    /* Extd feature register */
772
  u64 reserved;
773
};
774
775
/* Masks for Info field above */
776
777
#define ACPI_IVHD_MSI_NUMBER_MASK   0x001F  /* 5 bits, MSI message number */
778
#define ACPI_IVHD_UNIT_ID_MASK      0x1F00  /* 5 bits, unit_iD */
779
780
/*
781
 * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
782
 * Upper two bits of the Type field are the (encoded) length of the structure.
783
 * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
784
 * are reserved for future use but not defined.
785
 */
786
struct acpi_ivrs_de_header {
787
  u8 type;
788
  u16 id;
789
  u8 data_setting;
790
};
791
792
/* Length of device entry is in the top two bits of Type field above */
793
794
#define ACPI_IVHD_ENTRY_LENGTH      0xC0
795
796
/* Values for device entry Type field above */
797
798
enum acpi_ivrs_device_entry_type {
799
  /* 4-byte device entries, all use struct acpi_ivrs_device4 */
800
801
  ACPI_IVRS_TYPE_PAD4 = 0,
802
  ACPI_IVRS_TYPE_ALL = 1,
803
  ACPI_IVRS_TYPE_SELECT = 2,
804
  ACPI_IVRS_TYPE_START = 3,
805
  ACPI_IVRS_TYPE_END = 4,
806
807
  /* 8-byte device entries */
808
809
  ACPI_IVRS_TYPE_PAD8 = 64,
810
  ACPI_IVRS_TYPE_NOT_USED = 65,
811
  ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */
812
  ACPI_IVRS_TYPE_ALIAS_START = 67,  /* Uses struct acpi_ivrs_device8a */
813
  ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */
814
  ACPI_IVRS_TYPE_EXT_START = 71,  /* Uses struct acpi_ivrs_device8b */
815
  ACPI_IVRS_TYPE_SPECIAL = 72 /* Uses struct acpi_ivrs_device8c */
816
};
817
818
/* Values for Data field above */
819
820
#define ACPI_IVHD_INIT_PASS         (1)
821
#define ACPI_IVHD_EINT_PASS         (1<<1)
822
#define ACPI_IVHD_NMI_PASS          (1<<2)
823
0
#define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
824
#define ACPI_IVHD_LINT0_PASS        (1<<6)
825
#define ACPI_IVHD_LINT1_PASS        (1<<7)
826
827
/* Types 0-4: 4-byte device entry */
828
829
struct acpi_ivrs_device4 {
830
  struct acpi_ivrs_de_header header;
831
};
832
833
/* Types 66-67: 8-byte device entry */
834
835
struct acpi_ivrs_device8a {
836
  struct acpi_ivrs_de_header header;
837
  u8 reserved1;
838
  u16 used_id;
839
  u8 reserved2;
840
};
841
842
/* Types 70-71: 8-byte device entry */
843
844
struct acpi_ivrs_device8b {
845
  struct acpi_ivrs_de_header header;
846
  u32 extended_data;
847
};
848
849
/* Values for extended_data above */
850
851
#define ACPI_IVHD_ATS_DISABLED      (1<<31)
852
853
/* Type 72: 8-byte device entry */
854
855
struct acpi_ivrs_device8c {
856
  struct acpi_ivrs_de_header header;
857
  u8 handle;
858
  u16 used_id;
859
  u8 variety;
860
};
861
862
/* Values for Variety field above */
863
864
#define ACPI_IVHD_IOAPIC            1
865
#define ACPI_IVHD_HPET              2
866
867
/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
868
869
struct acpi_ivrs_memory {
870
  struct acpi_ivrs_header header;
871
  u16 aux_data;
872
  u64 reserved;
873
  u64 start_address;
874
  u64 memory_length;
875
};
876
877
/*******************************************************************************
878
 *
879
 * MCFG - PCI Memory Mapped Configuration table and sub-table
880
 *        Version 1
881
 *
882
 * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
883
 *
884
 ******************************************************************************/
885
886
struct acpi_table_mcfg {
887
  struct acpi_table_header header;  /* Common ACPI table header */
888
  u8 reserved[8];
889
};
890
891
/* Subtable */
892
893
struct acpi_mcfg_allocation {
894
  u64 address;    /* Base address, processor-relative */
895
  u16 pci_segment;  /* PCI segment group number */
896
  u8 start_bus_number;  /* Starting PCI Bus number */
897
  u8 end_bus_number;  /* Final PCI Bus number */
898
  u32 reserved;
899
};
900
901
/*******************************************************************************
902
 *
903
 * MCHI - Management Controller Host Interface Table
904
 *        Version 1
905
 *
906
 * Conforms to "Management Component Transport Protocol (MCTP) Host
907
 * Interface Specification", Revision 1.0.0a, October 13, 2009
908
 *
909
 ******************************************************************************/
910
911
struct acpi_table_mchi {
912
  struct acpi_table_header header;  /* Common ACPI table header */
913
  u8 interface_type;
914
  u8 protocol;
915
  u64 protocol_data;
916
  u8 interrupt_type;
917
  u8 gpe;
918
  u8 pci_device_flag;
919
  u32 global_interrupt;
920
  struct acpi_generic_address control_register;
921
  u8 pci_segment;
922
  u8 pci_bus;
923
  u8 pci_device;
924
  u8 pci_function;
925
};
926
927
/*******************************************************************************
928
 *
929
 * SLIC - Software Licensing Description Table
930
 *        Version 1
931
 *
932
 * Conforms to "OEM Activation 2.0 for Windows Vista Operating Systems",
933
 * Copyright 2006
934
 *
935
 ******************************************************************************/
936
937
/* Basic SLIC table is only the common ACPI header */
938
939
struct acpi_table_slic {
940
  struct acpi_table_header header;  /* Common ACPI table header */
941
};
942
943
/* Common SLIC subtable header */
944
945
struct acpi_slic_header {
946
  u32 type;
947
  u32 length;
948
};
949
950
/* Values for Type field above */
951
952
enum acpi_slic_type {
953
  ACPI_SLIC_TYPE_PUBLIC_KEY = 0,
954
  ACPI_SLIC_TYPE_WINDOWS_MARKER = 1,
955
  ACPI_SLIC_TYPE_RESERVED = 2 /* 2 and greater are reserved */
956
};
957
958
/*
959
 * SLIC Sub-tables, correspond to Type in struct acpi_slic_header
960
 */
961
962
/* 0: Public Key Structure */
963
964
struct acpi_slic_key {
965
  struct acpi_slic_header header;
966
  u8 key_type;
967
  u8 version;
968
  u16 reserved;
969
  u32 algorithm;
970
  char magic[4];
971
  u32 bit_length;
972
  u32 exponent;
973
  u8 modulus[128];
974
};
975
976
/* 1: Windows Marker Structure */
977
978
struct acpi_slic_marker {
979
  struct acpi_slic_header header;
980
  u32 version;
981
  char oem_id[ACPI_OEM_ID_SIZE];  /* ASCII OEM identification */
982
  char oem_table_id[ACPI_OEM_TABLE_ID_SIZE];  /* ASCII OEM table identification */
983
  char windows_flag[8];
984
  u32 slic_version;
985
  u8 reserved[16];
986
  u8 signature[128];
987
};
988
989
/*******************************************************************************
990
 *
991
 * SPCR - Serial Port Console Redirection table
992
 *        Version 1
993
 *
994
 * Conforms to "Serial Port Console Redirection Table",
995
 * Version 1.00, January 11, 2002
996
 *
997
 ******************************************************************************/
998
999
struct acpi_table_spcr {
1000
  struct acpi_table_header header;  /* Common ACPI table header */
1001
  u8 interface_type;  /* 0=full 16550, 1=subset of 16550 */
1002
  u8 reserved[3];
1003
  struct acpi_generic_address serial_port;
1004
  u8 interrupt_type;
1005
  u8 pc_interrupt;
1006
  u32 interrupt;
1007
  u8 baud_rate;
1008
  u8 parity;
1009
  u8 stop_bits;
1010
  u8 flow_control;
1011
  u8 terminal_type;
1012
  u8 reserved1;
1013
  u16 pci_device_id;
1014
  u16 pci_vendor_id;
1015
  u8 pci_bus;
1016
  u8 pci_device;
1017
  u8 pci_function;
1018
  u32 pci_flags;
1019
  u8 pci_segment;
1020
  u32 reserved2;
1021
};
1022
1023
/* Masks for pci_flags field above */
1024
1025
#define ACPI_SPCR_DO_NOT_DISABLE    (1)
1026
1027
/*******************************************************************************
1028
 *
1029
 * SPMI - Server Platform Management Interface table
1030
 *        Version 5
1031
 *
1032
 * Conforms to "Intelligent Platform Management Interface Specification
1033
 * Second Generation v2.0", Document Revision 1.0, February 12, 2004 with
1034
 * June 12, 2009 markup.
1035
 *
1036
 ******************************************************************************/
1037
1038
struct acpi_table_spmi {
1039
  struct acpi_table_header header;  /* Common ACPI table header */
1040
  u8 interface_type;
1041
  u8 reserved;    /* Must be 1 */
1042
  u16 spec_revision;  /* Version of IPMI */
1043
  u8 interrupt_type;
1044
  u8 gpe_number;    /* GPE assigned */
1045
  u8 reserved1;
1046
  u8 pci_device_flag;
1047
  u32 interrupt;
1048
  struct acpi_generic_address ipmi_register;
1049
  u8 pci_segment;
1050
  u8 pci_bus;
1051
  u8 pci_device;
1052
  u8 pci_function;
1053
  u8 reserved2;
1054
};
1055
1056
/* Values for interface_type above */
1057
1058
enum acpi_spmi_interface_types {
1059
  ACPI_SPMI_NOT_USED = 0,
1060
  ACPI_SPMI_KEYBOARD = 1,
1061
  ACPI_SPMI_SMI = 2,
1062
  ACPI_SPMI_BLOCK_TRANSFER = 3,
1063
  ACPI_SPMI_SMBUS = 4,
1064
  ACPI_SPMI_RESERVED = 5  /* 5 and above are reserved */
1065
};
1066
1067
/*******************************************************************************
1068
 *
1069
 * TCPA - Trusted Computing Platform Alliance table
1070
 *        Version 1
1071
 *
1072
 * Conforms to "TCG PC Specific Implementation Specification",
1073
 * Version 1.1, August 18, 2003
1074
 *
1075
 ******************************************************************************/
1076
1077
struct acpi_table_tcpa {
1078
  struct acpi_table_header header;  /* Common ACPI table header */
1079
  u16 reserved;
1080
  u32 max_log_length; /* Maximum length for the event log area */
1081
  u64 log_address;  /* Address of the event log area */
1082
};
1083
1084
/*******************************************************************************
1085
 *
1086
 * UEFI - UEFI Boot optimization Table
1087
 *        Version 1
1088
 *
1089
 * Conforms to "Unified Extensible Firmware Interface Specification",
1090
 * Version 2.3, May 8, 2009
1091
 *
1092
 ******************************************************************************/
1093
1094
struct acpi_table_uefi {
1095
  struct acpi_table_header header;  /* Common ACPI table header */
1096
  u8 identifier[16];  /* UUID identifier */
1097
  u16 data_offset;  /* Offset of remaining data in table */
1098
};
1099
1100
/*******************************************************************************
1101
 *
1102
 * WAET - Windows ACPI Emulated devices Table
1103
 *        Version 1
1104
 *
1105
 * Conforms to "Windows ACPI Emulated Devices Table", version 1.0, April 6, 2009
1106
 *
1107
 ******************************************************************************/
1108
1109
struct acpi_table_waet {
1110
  struct acpi_table_header header;  /* Common ACPI table header */
1111
  u32 flags;
1112
};
1113
1114
/* Masks for Flags field above */
1115
1116
#define ACPI_WAET_RTC_NO_ACK        (1) /* RTC requires no int acknowledge */
1117
#define ACPI_WAET_TIMER_ONE_READ    (1<<1)  /* PM timer requires only one read */
1118
1119
/*******************************************************************************
1120
 *
1121
 * WDAT - Watchdog Action Table
1122
 *        Version 1
1123
 *
1124
 * Conforms to "Hardware Watchdog Timers Design Specification",
1125
 * Copyright 2006 Microsoft Corporation.
1126
 *
1127
 ******************************************************************************/
1128
1129
struct acpi_table_wdat {
1130
  struct acpi_table_header header;  /* Common ACPI table header */
1131
  u32 header_length;  /* Watchdog Header Length */
1132
  u16 pci_segment;  /* PCI Segment number */
1133
  u8 pci_bus;   /* PCI Bus number */
1134
  u8 pci_device;    /* PCI Device number */
1135
  u8 pci_function;  /* PCI Function number */
1136
  u8 reserved[3];
1137
  u32 timer_period; /* Period of one timer count (msec) */
1138
  u32 max_count;    /* Maximum counter value supported */
1139
  u32 min_count;    /* Minimum counter value */
1140
  u8 flags;
1141
  u8 reserved2[3];
1142
  u32 entries;    /* Number of watchdog entries that follow */
1143
};
1144
1145
/* Masks for Flags field above */
1146
1147
#define ACPI_WDAT_ENABLED           (1)
1148
#define ACPI_WDAT_STOPPED           0x80
1149
1150
/* WDAT Instruction Entries (actions) */
1151
1152
struct acpi_wdat_entry {
1153
  u8 action;
1154
  u8 instruction;
1155
  u16 reserved;
1156
  struct acpi_generic_address register_region;
1157
  u32 value;    /* Value used with Read/Write register */
1158
  u32 mask;   /* Bitmask required for this register instruction */
1159
};
1160
1161
/* Values for Action field above */
1162
1163
enum acpi_wdat_actions {
1164
  ACPI_WDAT_RESET = 1,
1165
  ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4,
1166
  ACPI_WDAT_GET_COUNTDOWN = 5,
1167
  ACPI_WDAT_SET_COUNTDOWN = 6,
1168
  ACPI_WDAT_GET_RUNNING_STATE = 8,
1169
  ACPI_WDAT_SET_RUNNING_STATE = 9,
1170
  ACPI_WDAT_GET_STOPPED_STATE = 10,
1171
  ACPI_WDAT_SET_STOPPED_STATE = 11,
1172
  ACPI_WDAT_GET_REBOOT = 16,
1173
  ACPI_WDAT_SET_REBOOT = 17,
1174
  ACPI_WDAT_GET_SHUTDOWN = 18,
1175
  ACPI_WDAT_SET_SHUTDOWN = 19,
1176
  ACPI_WDAT_GET_STATUS = 32,
1177
  ACPI_WDAT_SET_STATUS = 33,
1178
  ACPI_WDAT_ACTION_RESERVED = 34  /* 34 and greater are reserved */
1179
};
1180
1181
/* Values for Instruction field above */
1182
1183
enum acpi_wdat_instructions {
1184
  ACPI_WDAT_READ_VALUE = 0,
1185
  ACPI_WDAT_READ_COUNTDOWN = 1,
1186
  ACPI_WDAT_WRITE_VALUE = 2,
1187
  ACPI_WDAT_WRITE_COUNTDOWN = 3,
1188
  ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */
1189
  ACPI_WDAT_PRESERVE_REGISTER = 0x80  /* Except for this value */
1190
};
1191
1192
/*******************************************************************************
1193
 *
1194
 * WDDT - Watchdog Descriptor Table
1195
 *        Version 1
1196
 *
1197
 * Conforms to "Using the Intel ICH Family Watchdog Timer (WDT)",
1198
 * Version 001, September 2002
1199
 *
1200
 ******************************************************************************/
1201
1202
struct acpi_table_wddt {
1203
  struct acpi_table_header header;  /* Common ACPI table header */
1204
  u16 spec_version;
1205
  u16 table_version;
1206
  u16 pci_vendor_id;
1207
  struct acpi_generic_address address;
1208
  u16 max_count;    /* Maximum counter value supported */
1209
  u16 min_count;    /* Minimum counter value supported */
1210
  u16 period;
1211
  u16 status;
1212
  u16 capability;
1213
};
1214
1215
/* Flags for Status field above */
1216
1217
#define ACPI_WDDT_AVAILABLE     (1)
1218
#define ACPI_WDDT_ACTIVE        (1<<1)
1219
#define ACPI_WDDT_TCO_OS_OWNED  (1<<2)
1220
#define ACPI_WDDT_USER_RESET    (1<<11)
1221
#define ACPI_WDDT_WDT_RESET     (1<<12)
1222
#define ACPI_WDDT_POWER_FAIL    (1<<13)
1223
#define ACPI_WDDT_UNKNOWN_RESET (1<<14)
1224
1225
/* Flags for Capability field above */
1226
1227
#define ACPI_WDDT_AUTO_RESET    (1)
1228
#define ACPI_WDDT_ALERT_SUPPORT (1<<1)
1229
1230
/*******************************************************************************
1231
 *
1232
 * WDRT - Watchdog Resource Table
1233
 *        Version 1
1234
 *
1235
 * Conforms to "Watchdog Timer Hardware Requirements for Windows Server 2003",
1236
 * Version 1.01, August 28, 2006
1237
 *
1238
 ******************************************************************************/
1239
1240
struct acpi_table_wdrt {
1241
  struct acpi_table_header header;  /* Common ACPI table header */
1242
  struct acpi_generic_address control_register;
1243
  struct acpi_generic_address count_register;
1244
  u16 pci_device_id;
1245
  u16 pci_vendor_id;
1246
  u8 pci_bus;   /* PCI Bus number */
1247
  u8 pci_device;    /* PCI Device number */
1248
  u8 pci_function;  /* PCI Function number */
1249
  u8 pci_segment;   /* PCI Segment number */
1250
  u16 max_count;    /* Maximum counter value supported */
1251
  u8 units;
1252
};
1253
1254
/* Reset to default packing */
1255
1256
#pragma pack()
1257
1258
#endif        /* __ACTBL2_H__ */