195857638SErik Schmauss /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2be030a57SBob Moore /****************************************************************************** 3be030a57SBob Moore * 4be030a57SBob Moore * Name: acbuffer.h - Support for buffers returned by ACPI predefined names 5be030a57SBob Moore * 6*612c2932SBob Moore * Copyright (C) 2000 - 2023, Intel Corp. 7be030a57SBob Moore * 895857638SErik Schmauss *****************************************************************************/ 9be030a57SBob Moore 10be030a57SBob Moore #ifndef __ACBUFFER_H__ 11be030a57SBob Moore #define __ACBUFFER_H__ 12be030a57SBob Moore 13be030a57SBob Moore /* 1484be5d68SBob Moore * Contains buffer structures for these predefined names: 1584be5d68SBob Moore * _FDE, _GRT, _GTM, _PLD, _SRT 1684be5d68SBob Moore */ 1784be5d68SBob Moore 1884be5d68SBob Moore /* 19be030a57SBob Moore * Note: C bitfields are not used for this reason: 20be030a57SBob Moore * 21be030a57SBob Moore * "Bitfields are great and easy to read, but unfortunately the C language 22be030a57SBob Moore * does not specify the layout of bitfields in memory, which means they are 23be030a57SBob Moore * essentially useless for dealing with packed data in on-disk formats or 24be030a57SBob Moore * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 25be030a57SBob Moore * this decision was a design error in C. Ritchie could have picked an order 26be030a57SBob Moore * and stuck with it." Norman Ramsey. 27be030a57SBob Moore * See http://stackoverflow.com/a/1053662/41661 28be030a57SBob Moore */ 29be030a57SBob Moore 3084be5d68SBob Moore /* _FDE return value */ 3184be5d68SBob Moore 3284be5d68SBob Moore struct acpi_fde_info { 3384be5d68SBob Moore u32 floppy0; 3484be5d68SBob Moore u32 floppy1; 3584be5d68SBob Moore u32 floppy2; 3684be5d68SBob Moore u32 floppy3; 3784be5d68SBob Moore u32 tape; 3884be5d68SBob Moore }; 3984be5d68SBob Moore 4084be5d68SBob Moore /* 4184be5d68SBob Moore * _GRT return value 4284be5d68SBob Moore * _SRT input value 4384be5d68SBob Moore */ 4484be5d68SBob Moore struct acpi_grt_info { 4584be5d68SBob Moore u16 year; 4684be5d68SBob Moore u8 month; 4784be5d68SBob Moore u8 day; 4884be5d68SBob Moore u8 hour; 4984be5d68SBob Moore u8 minute; 5084be5d68SBob Moore u8 second; 5184be5d68SBob Moore u8 valid; 5284be5d68SBob Moore u16 milliseconds; 5384be5d68SBob Moore u16 timezone; 5484be5d68SBob Moore u8 daylight; 5584be5d68SBob Moore u8 reserved[3]; 5684be5d68SBob Moore }; 5784be5d68SBob Moore 5884be5d68SBob Moore /* _GTM return value */ 5984be5d68SBob Moore 6084be5d68SBob Moore struct acpi_gtm_info { 6184be5d68SBob Moore u32 pio_speed0; 6284be5d68SBob Moore u32 dma_speed0; 6384be5d68SBob Moore u32 pio_speed1; 6484be5d68SBob Moore u32 dma_speed1; 6584be5d68SBob Moore u32 flags; 6684be5d68SBob Moore }; 6784be5d68SBob Moore 68be030a57SBob Moore /* 69be030a57SBob Moore * Formatted _PLD return value. The minimum size is a package containing 70be030a57SBob Moore * one buffer. 71be030a57SBob Moore * Revision 1: Buffer is 16 bytes (128 bits) 72be030a57SBob Moore * Revision 2: Buffer is 20 bytes (160 bits) 73be030a57SBob Moore * 74be030a57SBob Moore * Note: This structure is returned from the acpi_decode_pld_buffer 75be030a57SBob Moore * interface. 76be030a57SBob Moore */ 77be030a57SBob Moore struct acpi_pld_info { 78be030a57SBob Moore u8 revision; 79be030a57SBob Moore u8 ignore_color; 804dcd78d8SBob Moore u8 red; 814dcd78d8SBob Moore u8 green; 824dcd78d8SBob Moore u8 blue; 83be030a57SBob Moore u16 width; 84be030a57SBob Moore u16 height; 85be030a57SBob Moore u8 user_visible; 86be030a57SBob Moore u8 dock; 87be030a57SBob Moore u8 lid; 88be030a57SBob Moore u8 panel; 89be030a57SBob Moore u8 vertical_position; 90be030a57SBob Moore u8 horizontal_position; 91be030a57SBob Moore u8 shape; 92be030a57SBob Moore u8 group_orientation; 93be030a57SBob Moore u8 group_token; 94be030a57SBob Moore u8 group_position; 95be030a57SBob Moore u8 bay; 96be030a57SBob Moore u8 ejectable; 97be030a57SBob Moore u8 ospm_eject_required; 98be030a57SBob Moore u8 cabinet_number; 99be030a57SBob Moore u8 card_cage_number; 100be030a57SBob Moore u8 reference; 101be030a57SBob Moore u8 rotation; 102be030a57SBob Moore u8 order; 103be030a57SBob Moore u8 reserved; 104be030a57SBob Moore u16 vertical_offset; 105be030a57SBob Moore u16 horizontal_offset; 106be030a57SBob Moore }; 107be030a57SBob Moore 108be030a57SBob Moore /* 109be030a57SBob Moore * Macros to: 110be030a57SBob Moore * 1) Convert a _PLD buffer to internal struct acpi_pld_info format - ACPI_PLD_GET* 111be030a57SBob Moore * (Used by acpi_decode_pld_buffer) 112be030a57SBob Moore * 2) Construct a _PLD buffer - ACPI_PLD_SET* 113be030a57SBob Moore * (Intended for BIOS use only) 114be030a57SBob Moore */ 115be030a57SBob Moore #define ACPI_PLD_REV1_BUFFER_SIZE 16 /* For Revision 1 of the buffer (From ACPI spec) */ 11635349697SBob Moore #define ACPI_PLD_REV2_BUFFER_SIZE 20 /* For Revision 2 of the buffer (From ACPI spec) */ 117be030a57SBob Moore #define ACPI_PLD_BUFFER_SIZE 20 /* For Revision 2 of the buffer (From ACPI spec) */ 118be030a57SBob Moore 119be030a57SBob Moore /* First 32-bit dword, bits 0:32 */ 120be030a57SBob Moore 121be030a57SBob Moore #define ACPI_PLD_GET_REVISION(dword) ACPI_GET_BITS (dword, 0, ACPI_7BIT_MASK) 122be030a57SBob Moore #define ACPI_PLD_SET_REVISION(dword,value) ACPI_SET_BITS (dword, 0, ACPI_7BIT_MASK, value) /* Offset 0, Len 7 */ 123be030a57SBob Moore 124be030a57SBob Moore #define ACPI_PLD_GET_IGNORE_COLOR(dword) ACPI_GET_BITS (dword, 7, ACPI_1BIT_MASK) 125be030a57SBob Moore #define ACPI_PLD_SET_IGNORE_COLOR(dword,value) ACPI_SET_BITS (dword, 7, ACPI_1BIT_MASK, value) /* Offset 7, Len 1 */ 126be030a57SBob Moore 1274dcd78d8SBob Moore #define ACPI_PLD_GET_RED(dword) ACPI_GET_BITS (dword, 8, ACPI_8BIT_MASK) 1284dcd78d8SBob Moore #define ACPI_PLD_SET_RED(dword,value) ACPI_SET_BITS (dword, 8, ACPI_8BIT_MASK, value) /* Offset 8, Len 8 */ 1294dcd78d8SBob Moore 1304dcd78d8SBob Moore #define ACPI_PLD_GET_GREEN(dword) ACPI_GET_BITS (dword, 16, ACPI_8BIT_MASK) 1314dcd78d8SBob Moore #define ACPI_PLD_SET_GREEN(dword,value) ACPI_SET_BITS (dword, 16, ACPI_8BIT_MASK, value) /* Offset 16, Len 8 */ 1324dcd78d8SBob Moore 1334dcd78d8SBob Moore #define ACPI_PLD_GET_BLUE(dword) ACPI_GET_BITS (dword, 24, ACPI_8BIT_MASK) 1344dcd78d8SBob Moore #define ACPI_PLD_SET_BLUE(dword,value) ACPI_SET_BITS (dword, 24, ACPI_8BIT_MASK, value) /* Offset 24, Len 8 */ 135be030a57SBob Moore 136be030a57SBob Moore /* Second 32-bit dword, bits 33:63 */ 137be030a57SBob Moore 138be030a57SBob Moore #define ACPI_PLD_GET_WIDTH(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) 139be030a57SBob Moore #define ACPI_PLD_SET_WIDTH(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 32+0=32, Len 16 */ 140be030a57SBob Moore 141be030a57SBob Moore #define ACPI_PLD_GET_HEIGHT(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) 142be030a57SBob Moore #define ACPI_PLD_SET_HEIGHT(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 32+16=48, Len 16 */ 143be030a57SBob Moore 144be030a57SBob Moore /* Third 32-bit dword, bits 64:95 */ 145be030a57SBob Moore 146be030a57SBob Moore #define ACPI_PLD_GET_USER_VISIBLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) 147be030a57SBob Moore #define ACPI_PLD_SET_USER_VISIBLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 64+0=64, Len 1 */ 148be030a57SBob Moore 149be030a57SBob Moore #define ACPI_PLD_GET_DOCK(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) 150be030a57SBob Moore #define ACPI_PLD_SET_DOCK(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 64+1=65, Len 1 */ 151be030a57SBob Moore 152be030a57SBob Moore #define ACPI_PLD_GET_LID(dword) ACPI_GET_BITS (dword, 2, ACPI_1BIT_MASK) 153be030a57SBob Moore #define ACPI_PLD_SET_LID(dword,value) ACPI_SET_BITS (dword, 2, ACPI_1BIT_MASK, value) /* Offset 64+2=66, Len 1 */ 154be030a57SBob Moore 155be030a57SBob Moore #define ACPI_PLD_GET_PANEL(dword) ACPI_GET_BITS (dword, 3, ACPI_3BIT_MASK) 156be030a57SBob Moore #define ACPI_PLD_SET_PANEL(dword,value) ACPI_SET_BITS (dword, 3, ACPI_3BIT_MASK, value) /* Offset 64+3=67, Len 3 */ 157be030a57SBob Moore 158be030a57SBob Moore #define ACPI_PLD_GET_VERTICAL(dword) ACPI_GET_BITS (dword, 6, ACPI_2BIT_MASK) 159be030a57SBob Moore #define ACPI_PLD_SET_VERTICAL(dword,value) ACPI_SET_BITS (dword, 6, ACPI_2BIT_MASK, value) /* Offset 64+6=70, Len 2 */ 160be030a57SBob Moore 161be030a57SBob Moore #define ACPI_PLD_GET_HORIZONTAL(dword) ACPI_GET_BITS (dword, 8, ACPI_2BIT_MASK) 162be030a57SBob Moore #define ACPI_PLD_SET_HORIZONTAL(dword,value) ACPI_SET_BITS (dword, 8, ACPI_2BIT_MASK, value) /* Offset 64+8=72, Len 2 */ 163be030a57SBob Moore 164be030a57SBob Moore #define ACPI_PLD_GET_SHAPE(dword) ACPI_GET_BITS (dword, 10, ACPI_4BIT_MASK) 165be030a57SBob Moore #define ACPI_PLD_SET_SHAPE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_4BIT_MASK, value) /* Offset 64+10=74, Len 4 */ 166be030a57SBob Moore 167be030a57SBob Moore #define ACPI_PLD_GET_ORIENTATION(dword) ACPI_GET_BITS (dword, 14, ACPI_1BIT_MASK) 168be030a57SBob Moore #define ACPI_PLD_SET_ORIENTATION(dword,value) ACPI_SET_BITS (dword, 14, ACPI_1BIT_MASK, value) /* Offset 64+14=78, Len 1 */ 169be030a57SBob Moore 170be030a57SBob Moore #define ACPI_PLD_GET_TOKEN(dword) ACPI_GET_BITS (dword, 15, ACPI_8BIT_MASK) 171be030a57SBob Moore #define ACPI_PLD_SET_TOKEN(dword,value) ACPI_SET_BITS (dword, 15, ACPI_8BIT_MASK, value) /* Offset 64+15=79, Len 8 */ 172be030a57SBob Moore 173be030a57SBob Moore #define ACPI_PLD_GET_POSITION(dword) ACPI_GET_BITS (dword, 23, ACPI_8BIT_MASK) 174be030a57SBob Moore #define ACPI_PLD_SET_POSITION(dword,value) ACPI_SET_BITS (dword, 23, ACPI_8BIT_MASK, value) /* Offset 64+23=87, Len 8 */ 175be030a57SBob Moore 176be030a57SBob Moore #define ACPI_PLD_GET_BAY(dword) ACPI_GET_BITS (dword, 31, ACPI_1BIT_MASK) 177be030a57SBob Moore #define ACPI_PLD_SET_BAY(dword,value) ACPI_SET_BITS (dword, 31, ACPI_1BIT_MASK, value) /* Offset 64+31=95, Len 1 */ 178be030a57SBob Moore 179be030a57SBob Moore /* Fourth 32-bit dword, bits 96:127 */ 180be030a57SBob Moore 181be030a57SBob Moore #define ACPI_PLD_GET_EJECTABLE(dword) ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) 182be030a57SBob Moore #define ACPI_PLD_SET_EJECTABLE(dword,value) ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value) /* Offset 96+0=96, Len 1 */ 183be030a57SBob Moore 184be030a57SBob Moore #define ACPI_PLD_GET_OSPM_EJECT(dword) ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) 185be030a57SBob Moore #define ACPI_PLD_SET_OSPM_EJECT(dword,value) ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value) /* Offset 96+1=97, Len 1 */ 186be030a57SBob Moore 187be030a57SBob Moore #define ACPI_PLD_GET_CABINET(dword) ACPI_GET_BITS (dword, 2, ACPI_8BIT_MASK) 188be030a57SBob Moore #define ACPI_PLD_SET_CABINET(dword,value) ACPI_SET_BITS (dword, 2, ACPI_8BIT_MASK, value) /* Offset 96+2=98, Len 8 */ 189be030a57SBob Moore 190be030a57SBob Moore #define ACPI_PLD_GET_CARD_CAGE(dword) ACPI_GET_BITS (dword, 10, ACPI_8BIT_MASK) 191be030a57SBob Moore #define ACPI_PLD_SET_CARD_CAGE(dword,value) ACPI_SET_BITS (dword, 10, ACPI_8BIT_MASK, value) /* Offset 96+10=106, Len 8 */ 192be030a57SBob Moore 193be030a57SBob Moore #define ACPI_PLD_GET_REFERENCE(dword) ACPI_GET_BITS (dword, 18, ACPI_1BIT_MASK) 194be030a57SBob Moore #define ACPI_PLD_SET_REFERENCE(dword,value) ACPI_SET_BITS (dword, 18, ACPI_1BIT_MASK, value) /* Offset 96+18=114, Len 1 */ 195be030a57SBob Moore 196be030a57SBob Moore #define ACPI_PLD_GET_ROTATION(dword) ACPI_GET_BITS (dword, 19, ACPI_4BIT_MASK) 197be030a57SBob Moore #define ACPI_PLD_SET_ROTATION(dword,value) ACPI_SET_BITS (dword, 19, ACPI_4BIT_MASK, value) /* Offset 96+19=115, Len 4 */ 198be030a57SBob Moore 199be030a57SBob Moore #define ACPI_PLD_GET_ORDER(dword) ACPI_GET_BITS (dword, 23, ACPI_5BIT_MASK) 200be030a57SBob Moore #define ACPI_PLD_SET_ORDER(dword,value) ACPI_SET_BITS (dword, 23, ACPI_5BIT_MASK, value) /* Offset 96+23=119, Len 5 */ 201be030a57SBob Moore 202be030a57SBob Moore /* Fifth 32-bit dword, bits 128:159 (Revision 2 of _PLD only) */ 203be030a57SBob Moore 204be030a57SBob Moore #define ACPI_PLD_GET_VERT_OFFSET(dword) ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) 205be030a57SBob Moore #define ACPI_PLD_SET_VERT_OFFSET(dword,value) ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value) /* Offset 128+0=128, Len 16 */ 206be030a57SBob Moore 207be030a57SBob Moore #define ACPI_PLD_GET_HORIZ_OFFSET(dword) ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) 208be030a57SBob Moore #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value) ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value) /* Offset 128+16=144, Len 16 */ 209be030a57SBob Moore 2106814a524SFabian Wüthrich /* Panel position defined in _PLD section of ACPI Specification 6.3 */ 2116814a524SFabian Wüthrich 2126814a524SFabian Wüthrich #define ACPI_PLD_PANEL_TOP 0 2136814a524SFabian Wüthrich #define ACPI_PLD_PANEL_BOTTOM 1 2146814a524SFabian Wüthrich #define ACPI_PLD_PANEL_LEFT 2 2156814a524SFabian Wüthrich #define ACPI_PLD_PANEL_RIGHT 3 2166814a524SFabian Wüthrich #define ACPI_PLD_PANEL_FRONT 4 2176814a524SFabian Wüthrich #define ACPI_PLD_PANEL_BACK 5 2186814a524SFabian Wüthrich #define ACPI_PLD_PANEL_UNKNOWN 6 2196814a524SFabian Wüthrich 220be030a57SBob Moore #endif /* ACBUFFER_H */ 221