mirror of
				https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
				synced 2025-10-28 14:58:52 +01:00 
			
		
		
		
	Fixed MTP to work with TWRP
This commit is contained in:
		
						commit
						f6dfaef42e
					
				
					 50820 changed files with 20846062 additions and 0 deletions
				
			
		
							
								
								
									
										2
									
								
								include/Kbuild
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								include/Kbuild
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| # Top-level Makefile calls into asm-$(ARCH) | ||||
| # List only non-arch directories below | ||||
							
								
								
									
										235
									
								
								include/acpi/acbuffer.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								include/acpi/acbuffer.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,235 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acbuffer.h - Support for buffers returned by ACPI predefined names | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACBUFFER_H__ | ||||
| #define __ACBUFFER_H__ | ||||
| 
 | ||||
| /*
 | ||||
|  * Contains buffer structures for these predefined names: | ||||
|  * _FDE, _GRT, _GTM, _PLD, _SRT | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Note: C bitfields are not used for this reason: | ||||
|  * | ||||
|  * "Bitfields are great and easy to read, but unfortunately the C language | ||||
|  * does not specify the layout of bitfields in memory, which means they are | ||||
|  * essentially useless for dealing with packed data in on-disk formats or | ||||
|  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||||
|  * this decision was a design error in C. Ritchie could have picked an order | ||||
|  * and stuck with it." Norman Ramsey. | ||||
|  * See http://stackoverflow.com/a/1053662/41661
 | ||||
|  */ | ||||
| 
 | ||||
| /* _FDE return value */ | ||||
| 
 | ||||
| struct acpi_fde_info { | ||||
| 	u32 floppy0; | ||||
| 	u32 floppy1; | ||||
| 	u32 floppy2; | ||||
| 	u32 floppy3; | ||||
| 	u32 tape; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * _GRT return value | ||||
|  * _SRT input value | ||||
|  */ | ||||
| struct acpi_grt_info { | ||||
| 	u16 year; | ||||
| 	u8 month; | ||||
| 	u8 day; | ||||
| 	u8 hour; | ||||
| 	u8 minute; | ||||
| 	u8 second; | ||||
| 	u8 valid; | ||||
| 	u16 milliseconds; | ||||
| 	u16 timezone; | ||||
| 	u8 daylight; | ||||
| 	u8 reserved[3]; | ||||
| }; | ||||
| 
 | ||||
| /* _GTM return value */ | ||||
| 
 | ||||
| struct acpi_gtm_info { | ||||
| 	u32 pio_speed0; | ||||
| 	u32 dma_speed0; | ||||
| 	u32 pio_speed1; | ||||
| 	u32 dma_speed1; | ||||
| 	u32 flags; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Formatted _PLD return value. The minimum size is a package containing | ||||
|  * one buffer. | ||||
|  * Revision 1: Buffer is 16 bytes (128 bits) | ||||
|  * Revision 2: Buffer is 20 bytes (160 bits) | ||||
|  * | ||||
|  * Note: This structure is returned from the acpi_decode_pld_buffer | ||||
|  * interface. | ||||
|  */ | ||||
| struct acpi_pld_info { | ||||
| 	u8 revision; | ||||
| 	u8 ignore_color; | ||||
| 	u32 color; | ||||
| 	u16 width; | ||||
| 	u16 height; | ||||
| 	u8 user_visible; | ||||
| 	u8 dock; | ||||
| 	u8 lid; | ||||
| 	u8 panel; | ||||
| 	u8 vertical_position; | ||||
| 	u8 horizontal_position; | ||||
| 	u8 shape; | ||||
| 	u8 group_orientation; | ||||
| 	u8 group_token; | ||||
| 	u8 group_position; | ||||
| 	u8 bay; | ||||
| 	u8 ejectable; | ||||
| 	u8 ospm_eject_required; | ||||
| 	u8 cabinet_number; | ||||
| 	u8 card_cage_number; | ||||
| 	u8 reference; | ||||
| 	u8 rotation; | ||||
| 	u8 order; | ||||
| 	u8 reserved; | ||||
| 	u16 vertical_offset; | ||||
| 	u16 horizontal_offset; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Macros to: | ||||
|  *     1) Convert a _PLD buffer to internal struct acpi_pld_info format - ACPI_PLD_GET* | ||||
|  *        (Used by acpi_decode_pld_buffer) | ||||
|  *     2) Construct a _PLD buffer - ACPI_PLD_SET* | ||||
|  *        (Intended for BIOS use only) | ||||
|  */ | ||||
| #define ACPI_PLD_REV1_BUFFER_SIZE               16	/* For Revision 1 of the buffer (From ACPI spec) */ | ||||
| #define ACPI_PLD_BUFFER_SIZE                    20	/* For Revision 2 of the buffer (From ACPI spec) */ | ||||
| 
 | ||||
| /* First 32-bit dword, bits 0:32 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_REVISION(dword)            ACPI_GET_BITS (dword, 0, ACPI_7BIT_MASK) | ||||
| #define ACPI_PLD_SET_REVISION(dword,value)      ACPI_SET_BITS (dword, 0, ACPI_7BIT_MASK, value)	/* Offset 0, Len 7 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_IGNORE_COLOR(dword)        ACPI_GET_BITS (dword, 7, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_IGNORE_COLOR(dword,value)  ACPI_SET_BITS (dword, 7, ACPI_1BIT_MASK, value)	/* Offset 7, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_COLOR(dword)               ACPI_GET_BITS (dword, 8, ACPI_24BIT_MASK) | ||||
| #define ACPI_PLD_SET_COLOR(dword,value)         ACPI_SET_BITS (dword, 8, ACPI_24BIT_MASK, value)	/* Offset 8, Len 24 */ | ||||
| 
 | ||||
| /* Second 32-bit dword, bits 33:63 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_WIDTH(dword)               ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) | ||||
| #define ACPI_PLD_SET_WIDTH(dword,value)         ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value)	/* Offset 32+0=32, Len 16 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_HEIGHT(dword)              ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) | ||||
| #define ACPI_PLD_SET_HEIGHT(dword,value)        ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value)	/* Offset 32+16=48, Len 16 */ | ||||
| 
 | ||||
| /* Third 32-bit dword, bits 64:95 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_USER_VISIBLE(dword)        ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_USER_VISIBLE(dword,value)  ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value)	/* Offset 64+0=64, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_DOCK(dword)                ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_DOCK(dword,value)          ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value)	/* Offset 64+1=65, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_LID(dword)                 ACPI_GET_BITS (dword, 2, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_LID(dword,value)           ACPI_SET_BITS (dword, 2, ACPI_1BIT_MASK, value)	/* Offset 64+2=66, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_PANEL(dword)               ACPI_GET_BITS (dword, 3, ACPI_3BIT_MASK) | ||||
| #define ACPI_PLD_SET_PANEL(dword,value)         ACPI_SET_BITS (dword, 3, ACPI_3BIT_MASK, value)	/* Offset 64+3=67, Len 3 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_VERTICAL(dword)            ACPI_GET_BITS (dword, 6, ACPI_2BIT_MASK) | ||||
| #define ACPI_PLD_SET_VERTICAL(dword,value)      ACPI_SET_BITS (dword, 6, ACPI_2BIT_MASK, value)	/* Offset 64+6=70, Len 2 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_HORIZONTAL(dword)          ACPI_GET_BITS (dword, 8, ACPI_2BIT_MASK) | ||||
| #define ACPI_PLD_SET_HORIZONTAL(dword,value)    ACPI_SET_BITS (dword, 8, ACPI_2BIT_MASK, value)	/* Offset 64+8=72, Len 2 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_SHAPE(dword)               ACPI_GET_BITS (dword, 10, ACPI_4BIT_MASK) | ||||
| #define ACPI_PLD_SET_SHAPE(dword,value)         ACPI_SET_BITS (dword, 10, ACPI_4BIT_MASK, value)	/* Offset 64+10=74, Len 4 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_ORIENTATION(dword)         ACPI_GET_BITS (dword, 14, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_ORIENTATION(dword,value)   ACPI_SET_BITS (dword, 14, ACPI_1BIT_MASK, value)	/* Offset 64+14=78, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_TOKEN(dword)               ACPI_GET_BITS (dword, 15, ACPI_8BIT_MASK) | ||||
| #define ACPI_PLD_SET_TOKEN(dword,value)         ACPI_SET_BITS (dword, 15, ACPI_8BIT_MASK, value)	/* Offset 64+15=79, Len 8 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_POSITION(dword)            ACPI_GET_BITS (dword, 23, ACPI_8BIT_MASK) | ||||
| #define ACPI_PLD_SET_POSITION(dword,value)      ACPI_SET_BITS (dword, 23, ACPI_8BIT_MASK, value)	/* Offset 64+23=87, Len 8 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_BAY(dword)                 ACPI_GET_BITS (dword, 31, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_BAY(dword,value)           ACPI_SET_BITS (dword, 31, ACPI_1BIT_MASK, value)	/* Offset 64+31=95, Len 1 */ | ||||
| 
 | ||||
| /* Fourth 32-bit dword, bits 96:127 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_EJECTABLE(dword)           ACPI_GET_BITS (dword, 0, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_EJECTABLE(dword,value)     ACPI_SET_BITS (dword, 0, ACPI_1BIT_MASK, value)	/* Offset 96+0=96, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_OSPM_EJECT(dword)          ACPI_GET_BITS (dword, 1, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_OSPM_EJECT(dword,value)    ACPI_SET_BITS (dword, 1, ACPI_1BIT_MASK, value)	/* Offset 96+1=97, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_CABINET(dword)             ACPI_GET_BITS (dword, 2, ACPI_8BIT_MASK) | ||||
| #define ACPI_PLD_SET_CABINET(dword,value)       ACPI_SET_BITS (dword, 2, ACPI_8BIT_MASK, value)	/* Offset 96+2=98, Len 8 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_CARD_CAGE(dword)           ACPI_GET_BITS (dword, 10, ACPI_8BIT_MASK) | ||||
| #define ACPI_PLD_SET_CARD_CAGE(dword,value)     ACPI_SET_BITS (dword, 10, ACPI_8BIT_MASK, value)	/* Offset 96+10=106, Len 8 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_REFERENCE(dword)           ACPI_GET_BITS (dword, 18, ACPI_1BIT_MASK) | ||||
| #define ACPI_PLD_SET_REFERENCE(dword,value)     ACPI_SET_BITS (dword, 18, ACPI_1BIT_MASK, value)	/* Offset 96+18=114, Len 1 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_ROTATION(dword)            ACPI_GET_BITS (dword, 19, ACPI_4BIT_MASK) | ||||
| #define ACPI_PLD_SET_ROTATION(dword,value)      ACPI_SET_BITS (dword, 19, ACPI_4BIT_MASK, value)	/* Offset 96+19=115, Len 4 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_ORDER(dword)               ACPI_GET_BITS (dword, 23, ACPI_5BIT_MASK) | ||||
| #define ACPI_PLD_SET_ORDER(dword,value)         ACPI_SET_BITS (dword, 23, ACPI_5BIT_MASK, value)	/* Offset 96+23=119, Len 5 */ | ||||
| 
 | ||||
| /* Fifth 32-bit dword, bits 128:159 (Revision 2 of _PLD only) */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_VERT_OFFSET(dword)         ACPI_GET_BITS (dword, 0, ACPI_16BIT_MASK) | ||||
| #define ACPI_PLD_SET_VERT_OFFSET(dword,value)   ACPI_SET_BITS (dword, 0, ACPI_16BIT_MASK, value)	/* Offset 128+0=128, Len 16 */ | ||||
| 
 | ||||
| #define ACPI_PLD_GET_HORIZ_OFFSET(dword)        ACPI_GET_BITS (dword, 16, ACPI_16BIT_MASK) | ||||
| #define ACPI_PLD_SET_HORIZ_OFFSET(dword,value)  ACPI_SET_BITS (dword, 16, ACPI_16BIT_MASK, value)	/* Offset 128+16=144, Len 16 */ | ||||
| 
 | ||||
| #endif				/* ACBUFFER_H */ | ||||
							
								
								
									
										250
									
								
								include/acpi/acconfig.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								include/acpi/acconfig.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,250 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acconfig.h - Global configuration constants | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _ACCONFIG_H | ||||
| #define _ACCONFIG_H | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Configuration options | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI_DEBUG_OUTPUT    - This switch enables all the debug facilities of the | ||||
|  *                        ACPI subsystem.  This includes the DEBUG_PRINT output | ||||
|  *                        statements.  When disabled, all DEBUG_PRINT | ||||
|  *                        statements are compiled out. | ||||
|  * | ||||
|  * ACPI_APPLICATION     - Use this switch if the subsystem is going to be run | ||||
|  *                        at the application level. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * OS name, used for the _OS object.  The _OS object is essentially obsolete, | ||||
|  * but there is a large base of ASL/AML code in existing machines that check | ||||
|  * for the string below.  The use of this string usually guarantees that | ||||
|  * the ASL will execute down the most tested code path.  Also, there is some | ||||
|  * code that will not execute the _OSI method unless _OS matches the string | ||||
|  * below.  Therefore, change this string at your own risk. | ||||
|  */ | ||||
| #define ACPI_OS_NAME                    "Microsoft Windows NT" | ||||
| 
 | ||||
| /* Maximum objects in the various object caches */ | ||||
| 
 | ||||
| #define ACPI_MAX_STATE_CACHE_DEPTH      96	/* State objects */ | ||||
| #define ACPI_MAX_PARSE_CACHE_DEPTH      96	/* Parse tree objects */ | ||||
| #define ACPI_MAX_EXTPARSE_CACHE_DEPTH   96	/* Parse tree objects */ | ||||
| #define ACPI_MAX_OBJECT_CACHE_DEPTH     96	/* Interpreter operand objects */ | ||||
| #define ACPI_MAX_NAMESPACE_CACHE_DEPTH  96	/* Namespace objects */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Should the subsystem abort the loading of an ACPI table if the | ||||
|  * table checksum is incorrect? | ||||
|  */ | ||||
| #ifndef ACPI_CHECKSUM_ABORT | ||||
| #define ACPI_CHECKSUM_ABORT             FALSE | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Generate a version of ACPICA that only supports "reduced hardware" | ||||
|  * platforms (as defined in ACPI 5.0). Set to TRUE to generate a specialized | ||||
|  * version of ACPICA that ONLY supports the ACPI 5.0 "reduced hardware" | ||||
|  * model. In other words, no ACPI hardware is supported. | ||||
|  * | ||||
|  * If TRUE, this means no support for the following: | ||||
|  *      PM Event and Control registers | ||||
|  *      SCI interrupt (and handler) | ||||
|  *      Fixed Events | ||||
|  *      General Purpose Events (GPEs) | ||||
|  *      Global Lock | ||||
|  *      ACPI PM timer | ||||
|  *      FACS table (Waking vectors and Global Lock) | ||||
|  */ | ||||
| #ifndef ACPI_REDUCED_HARDWARE | ||||
| #define ACPI_REDUCED_HARDWARE           FALSE | ||||
| #endif | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Subsystem Constants | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /* Version of ACPI supported */ | ||||
| 
 | ||||
| #define ACPI_CA_SUPPORT_LEVEL           5 | ||||
| 
 | ||||
| /* Maximum count for a semaphore object */ | ||||
| 
 | ||||
| #define ACPI_MAX_SEMAPHORE_COUNT        256 | ||||
| 
 | ||||
| /* Maximum object reference count (detects object deletion issues) */ | ||||
| 
 | ||||
| #define ACPI_MAX_REFERENCE_COUNT        0x1000 | ||||
| 
 | ||||
| /* Default page size for use in mapping memory for operation regions */ | ||||
| 
 | ||||
| #define ACPI_DEFAULT_PAGE_SIZE          4096	/* Must be power of 2 */ | ||||
| 
 | ||||
| /* owner_id tracking. 8 entries allows for 255 owner_ids */ | ||||
| 
 | ||||
| #define ACPI_NUM_OWNERID_MASKS          8 | ||||
| 
 | ||||
| /* Size of the root table array is increased by this increment */ | ||||
| 
 | ||||
| #define ACPI_ROOT_TABLE_SIZE_INCREMENT  4 | ||||
| 
 | ||||
| /* Maximum number of While() loop iterations before forced abort */ | ||||
| 
 | ||||
| #define ACPI_MAX_LOOP_ITERATIONS        0xFFFF | ||||
| 
 | ||||
| /* Maximum sleep allowed via Sleep() operator */ | ||||
| 
 | ||||
| #define ACPI_MAX_SLEEP                  2000	/* 2000 millisec == two seconds */ | ||||
| 
 | ||||
| /* Address Range lists are per-space_id (Memory and I/O only) */ | ||||
| 
 | ||||
| #define ACPI_ADDRESS_RANGE_MAX          2 | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * ACPI Specification constants (Do not change unless the specification changes) | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /* Method info (in WALK_STATE), containing local variables and argumetns */ | ||||
| 
 | ||||
| #define ACPI_METHOD_NUM_LOCALS          8 | ||||
| #define ACPI_METHOD_MAX_LOCAL           7 | ||||
| 
 | ||||
| #define ACPI_METHOD_NUM_ARGS            7 | ||||
| #define ACPI_METHOD_MAX_ARG             6 | ||||
| 
 | ||||
| /*
 | ||||
|  * Operand Stack (in WALK_STATE), Must be large enough to contain METHOD_MAX_ARG | ||||
|  */ | ||||
| #define ACPI_OBJ_NUM_OPERANDS           8 | ||||
| #define ACPI_OBJ_MAX_OPERAND            7 | ||||
| 
 | ||||
| /* Number of elements in the Result Stack frame, can be an arbitrary value */ | ||||
| 
 | ||||
| #define ACPI_RESULTS_FRAME_OBJ_NUM      8 | ||||
| 
 | ||||
| /*
 | ||||
|  * Maximal number of elements the Result Stack can contain, | ||||
|  * it may be an arbitray value not exceeding the types of | ||||
|  * result_size and result_count (now u8). | ||||
|  */ | ||||
| #define ACPI_RESULTS_OBJ_NUM_MAX        255 | ||||
| 
 | ||||
| /* Constants used in searching for the RSDP in low memory */ | ||||
| 
 | ||||
| #define ACPI_EBDA_PTR_LOCATION          0x0000040E	/* Physical Address */ | ||||
| #define ACPI_EBDA_PTR_LENGTH            2 | ||||
| #define ACPI_EBDA_WINDOW_SIZE           1024 | ||||
| #define ACPI_HI_RSDP_WINDOW_BASE        0x000E0000	/* Physical Address */ | ||||
| #define ACPI_HI_RSDP_WINDOW_SIZE        0x00020000 | ||||
| #define ACPI_RSDP_SCAN_STEP             16 | ||||
| 
 | ||||
| /* Operation regions */ | ||||
| 
 | ||||
| #define ACPI_USER_REGION_BEGIN          0x80 | ||||
| 
 | ||||
| /* Maximum space_ids for Operation Regions */ | ||||
| 
 | ||||
| #define ACPI_MAX_ADDRESS_SPACE          255 | ||||
| #define ACPI_NUM_DEFAULT_SPACES         4 | ||||
| 
 | ||||
| /* Array sizes.  Used for range checking also */ | ||||
| 
 | ||||
| #define ACPI_MAX_MATCH_OPCODE           5 | ||||
| 
 | ||||
| /* RSDP checksums */ | ||||
| 
 | ||||
| #define ACPI_RSDP_CHECKSUM_LENGTH       20 | ||||
| #define ACPI_RSDP_XCHECKSUM_LENGTH      36 | ||||
| 
 | ||||
| /* SMBus, GSBus and IPMI bidirectional buffer size */ | ||||
| 
 | ||||
| #define ACPI_SMBUS_BUFFER_SIZE          34 | ||||
| #define ACPI_GSBUS_BUFFER_SIZE          34 | ||||
| #define ACPI_IPMI_BUFFER_SIZE           66 | ||||
| 
 | ||||
| /* _sx_d and _sx_w control methods */ | ||||
| 
 | ||||
| #define ACPI_NUM_sx_d_METHODS           4 | ||||
| #define ACPI_NUM_sx_w_METHODS           5 | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Miscellaneous constants | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /* UUID constants */ | ||||
| 
 | ||||
| #define UUID_BUFFER_LENGTH          16	/* Length of UUID in memory */ | ||||
| #define UUID_STRING_LENGTH          36	/* Total length of a UUID string */ | ||||
| 
 | ||||
| /* Positions for required hyphens (dashes) in UUID strings */ | ||||
| 
 | ||||
| #define UUID_HYPHEN1_OFFSET         8 | ||||
| #define UUID_HYPHEN2_OFFSET         13 | ||||
| #define UUID_HYPHEN3_OFFSET         18 | ||||
| #define UUID_HYPHEN4_OFFSET         23 | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * ACPI AML Debugger | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| #define ACPI_DEBUGGER_MAX_ARGS          ACPI_METHOD_NUM_ARGS + 4	/* Max command line arguments */ | ||||
| #define ACPI_DB_LINE_BUFFER_SIZE        512 | ||||
| 
 | ||||
| #define ACPI_DEBUGGER_COMMAND_PROMPT    '-' | ||||
| #define ACPI_DEBUGGER_EXECUTE_PROMPT    '%' | ||||
| 
 | ||||
| #endif				/* _ACCONFIG_H */ | ||||
							
								
								
									
										380
									
								
								include/acpi/acexcep.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										380
									
								
								include/acpi/acexcep.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,380 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acexcep.h - Exception codes returned by the ACPI subsystem | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACEXCEP_H__ | ||||
| #define __ACEXCEP_H__ | ||||
| 
 | ||||
| /* This module contains all possible exception codes for acpi_status */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Exception code classes | ||||
|  */ | ||||
| #define AE_CODE_ENVIRONMENTAL           0x0000	/* General ACPICA environment */ | ||||
| #define AE_CODE_PROGRAMMER              0x1000	/* External ACPICA interface caller */ | ||||
| #define AE_CODE_ACPI_TABLES             0x2000	/* ACPI tables */ | ||||
| #define AE_CODE_AML                     0x3000	/* From executing AML code */ | ||||
| #define AE_CODE_CONTROL                 0x4000	/* Internal control codes */ | ||||
| 
 | ||||
| #define AE_CODE_MAX                     0x4000 | ||||
| #define AE_CODE_MASK                    0xF000 | ||||
| 
 | ||||
| /*
 | ||||
|  * Macros to insert the exception code classes | ||||
|  */ | ||||
| #define EXCEP_ENV(code)                 ((acpi_status) (code | AE_CODE_ENVIRONMENTAL)) | ||||
| #define EXCEP_PGM(code)                 ((acpi_status) (code | AE_CODE_PROGRAMMER)) | ||||
| #define EXCEP_TBL(code)                 ((acpi_status) (code | AE_CODE_ACPI_TABLES)) | ||||
| #define EXCEP_AML(code)                 ((acpi_status) (code | AE_CODE_AML)) | ||||
| #define EXCEP_CTL(code)                 ((acpi_status) (code | AE_CODE_CONTROL)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Exception info table. The "Description" field is used only by the | ||||
|  * ACPICA help application (acpihelp). | ||||
|  */ | ||||
| struct acpi_exception_info { | ||||
| 	char *name; | ||||
| 
 | ||||
| #ifdef ACPI_HELP_APP | ||||
| 	char *description; | ||||
| #endif | ||||
| }; | ||||
| 
 | ||||
| #ifdef ACPI_HELP_APP | ||||
| #define EXCEP_TXT(name,description)     {name, description} | ||||
| #else | ||||
| #define EXCEP_TXT(name,description)     {name} | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Success is always zero, failure is non-zero | ||||
|  */ | ||||
| #define ACPI_SUCCESS(a)                 (!(a)) | ||||
| #define ACPI_FAILURE(a)                 (a) | ||||
| 
 | ||||
| #define ACPI_SKIP(a)                    (a == AE_CTRL_SKIP) | ||||
| #define AE_OK                           (acpi_status) 0x0000 | ||||
| 
 | ||||
| /*
 | ||||
|  * Environmental exceptions | ||||
|  */ | ||||
| #define AE_ERROR                        EXCEP_ENV (0x0001) | ||||
| #define AE_NO_ACPI_TABLES               EXCEP_ENV (0x0002) | ||||
| #define AE_NO_NAMESPACE                 EXCEP_ENV (0x0003) | ||||
| #define AE_NO_MEMORY                    EXCEP_ENV (0x0004) | ||||
| #define AE_NOT_FOUND                    EXCEP_ENV (0x0005) | ||||
| #define AE_NOT_EXIST                    EXCEP_ENV (0x0006) | ||||
| #define AE_ALREADY_EXISTS               EXCEP_ENV (0x0007) | ||||
| #define AE_TYPE                         EXCEP_ENV (0x0008) | ||||
| #define AE_NULL_OBJECT                  EXCEP_ENV (0x0009) | ||||
| #define AE_NULL_ENTRY                   EXCEP_ENV (0x000A) | ||||
| #define AE_BUFFER_OVERFLOW              EXCEP_ENV (0x000B) | ||||
| #define AE_STACK_OVERFLOW               EXCEP_ENV (0x000C) | ||||
| #define AE_STACK_UNDERFLOW              EXCEP_ENV (0x000D) | ||||
| #define AE_NOT_IMPLEMENTED              EXCEP_ENV (0x000E) | ||||
| #define AE_SUPPORT                      EXCEP_ENV (0x000F) | ||||
| #define AE_LIMIT                        EXCEP_ENV (0x0010) | ||||
| #define AE_TIME                         EXCEP_ENV (0x0011) | ||||
| #define AE_ACQUIRE_DEADLOCK             EXCEP_ENV (0x0012) | ||||
| #define AE_RELEASE_DEADLOCK             EXCEP_ENV (0x0013) | ||||
| #define AE_NOT_ACQUIRED                 EXCEP_ENV (0x0014) | ||||
| #define AE_ALREADY_ACQUIRED             EXCEP_ENV (0x0015) | ||||
| #define AE_NO_HARDWARE_RESPONSE         EXCEP_ENV (0x0016) | ||||
| #define AE_NO_GLOBAL_LOCK               EXCEP_ENV (0x0017) | ||||
| #define AE_ABORT_METHOD                 EXCEP_ENV (0x0018) | ||||
| #define AE_SAME_HANDLER                 EXCEP_ENV (0x0019) | ||||
| #define AE_NO_HANDLER                   EXCEP_ENV (0x001A) | ||||
| #define AE_OWNER_ID_LIMIT               EXCEP_ENV (0x001B) | ||||
| #define AE_NOT_CONFIGURED               EXCEP_ENV (0x001C) | ||||
| #define AE_ACCESS                       EXCEP_ENV (0x001D) | ||||
| 
 | ||||
| #define AE_CODE_ENV_MAX                 0x001D | ||||
| 
 | ||||
| /*
 | ||||
|  * Programmer exceptions | ||||
|  */ | ||||
| #define AE_BAD_PARAMETER                EXCEP_PGM (0x0001) | ||||
| #define AE_BAD_CHARACTER                EXCEP_PGM (0x0002) | ||||
| #define AE_BAD_PATHNAME                 EXCEP_PGM (0x0003) | ||||
| #define AE_BAD_DATA                     EXCEP_PGM (0x0004) | ||||
| #define AE_BAD_HEX_CONSTANT             EXCEP_PGM (0x0005) | ||||
| #define AE_BAD_OCTAL_CONSTANT           EXCEP_PGM (0x0006) | ||||
| #define AE_BAD_DECIMAL_CONSTANT         EXCEP_PGM (0x0007) | ||||
| #define AE_MISSING_ARGUMENTS            EXCEP_PGM (0x0008) | ||||
| #define AE_BAD_ADDRESS                  EXCEP_PGM (0x0009) | ||||
| 
 | ||||
| #define AE_CODE_PGM_MAX                 0x0009 | ||||
| 
 | ||||
| /*
 | ||||
|  * Acpi table exceptions | ||||
|  */ | ||||
| #define AE_BAD_SIGNATURE                EXCEP_TBL (0x0001) | ||||
| #define AE_BAD_HEADER                   EXCEP_TBL (0x0002) | ||||
| #define AE_BAD_CHECKSUM                 EXCEP_TBL (0x0003) | ||||
| #define AE_BAD_VALUE                    EXCEP_TBL (0x0004) | ||||
| #define AE_INVALID_TABLE_LENGTH         EXCEP_TBL (0x0005) | ||||
| 
 | ||||
| #define AE_CODE_TBL_MAX                 0x0005 | ||||
| 
 | ||||
| /*
 | ||||
|  * AML exceptions. These are caused by problems with | ||||
|  * the actual AML byte stream | ||||
|  */ | ||||
| #define AE_AML_BAD_OPCODE               EXCEP_AML (0x0001) | ||||
| #define AE_AML_NO_OPERAND               EXCEP_AML (0x0002) | ||||
| #define AE_AML_OPERAND_TYPE             EXCEP_AML (0x0003) | ||||
| #define AE_AML_OPERAND_VALUE            EXCEP_AML (0x0004) | ||||
| #define AE_AML_UNINITIALIZED_LOCAL      EXCEP_AML (0x0005) | ||||
| #define AE_AML_UNINITIALIZED_ARG        EXCEP_AML (0x0006) | ||||
| #define AE_AML_UNINITIALIZED_ELEMENT    EXCEP_AML (0x0007) | ||||
| #define AE_AML_NUMERIC_OVERFLOW         EXCEP_AML (0x0008) | ||||
| #define AE_AML_REGION_LIMIT             EXCEP_AML (0x0009) | ||||
| #define AE_AML_BUFFER_LIMIT             EXCEP_AML (0x000A) | ||||
| #define AE_AML_PACKAGE_LIMIT            EXCEP_AML (0x000B) | ||||
| #define AE_AML_DIVIDE_BY_ZERO           EXCEP_AML (0x000C) | ||||
| #define AE_AML_BAD_NAME                 EXCEP_AML (0x000D) | ||||
| #define AE_AML_NAME_NOT_FOUND           EXCEP_AML (0x000E) | ||||
| #define AE_AML_INTERNAL                 EXCEP_AML (0x000F) | ||||
| #define AE_AML_INVALID_SPACE_ID         EXCEP_AML (0x0010) | ||||
| #define AE_AML_STRING_LIMIT             EXCEP_AML (0x0011) | ||||
| #define AE_AML_NO_RETURN_VALUE          EXCEP_AML (0x0012) | ||||
| #define AE_AML_METHOD_LIMIT             EXCEP_AML (0x0013) | ||||
| #define AE_AML_NOT_OWNER                EXCEP_AML (0x0014) | ||||
| #define AE_AML_MUTEX_ORDER              EXCEP_AML (0x0015) | ||||
| #define AE_AML_MUTEX_NOT_ACQUIRED       EXCEP_AML (0x0016) | ||||
| #define AE_AML_INVALID_RESOURCE_TYPE    EXCEP_AML (0x0017) | ||||
| #define AE_AML_INVALID_INDEX            EXCEP_AML (0x0018) | ||||
| #define AE_AML_REGISTER_LIMIT           EXCEP_AML (0x0019) | ||||
| #define AE_AML_NO_WHILE                 EXCEP_AML (0x001A) | ||||
| #define AE_AML_ALIGNMENT                EXCEP_AML (0x001B) | ||||
| #define AE_AML_NO_RESOURCE_END_TAG      EXCEP_AML (0x001C) | ||||
| #define AE_AML_BAD_RESOURCE_VALUE       EXCEP_AML (0x001D) | ||||
| #define AE_AML_CIRCULAR_REFERENCE       EXCEP_AML (0x001E) | ||||
| #define AE_AML_BAD_RESOURCE_LENGTH      EXCEP_AML (0x001F) | ||||
| #define AE_AML_ILLEGAL_ADDRESS          EXCEP_AML (0x0020) | ||||
| #define AE_AML_INFINITE_LOOP            EXCEP_AML (0x0021) | ||||
| 
 | ||||
| #define AE_CODE_AML_MAX                 0x0021 | ||||
| 
 | ||||
| /*
 | ||||
|  * Internal exceptions used for control | ||||
|  */ | ||||
| #define AE_CTRL_RETURN_VALUE            EXCEP_CTL (0x0001) | ||||
| #define AE_CTRL_PENDING                 EXCEP_CTL (0x0002) | ||||
| #define AE_CTRL_TERMINATE               EXCEP_CTL (0x0003) | ||||
| #define AE_CTRL_TRUE                    EXCEP_CTL (0x0004) | ||||
| #define AE_CTRL_FALSE                   EXCEP_CTL (0x0005) | ||||
| #define AE_CTRL_DEPTH                   EXCEP_CTL (0x0006) | ||||
| #define AE_CTRL_END                     EXCEP_CTL (0x0007) | ||||
| #define AE_CTRL_TRANSFER                EXCEP_CTL (0x0008) | ||||
| #define AE_CTRL_BREAK                   EXCEP_CTL (0x0009) | ||||
| #define AE_CTRL_CONTINUE                EXCEP_CTL (0x000A) | ||||
| #define AE_CTRL_SKIP                    EXCEP_CTL (0x000B) | ||||
| #define AE_CTRL_PARSE_CONTINUE          EXCEP_CTL (0x000C) | ||||
| #define AE_CTRL_PARSE_PENDING           EXCEP_CTL (0x000D) | ||||
| 
 | ||||
| #define AE_CODE_CTRL_MAX                0x000D | ||||
| 
 | ||||
| /* Exception strings for acpi_format_exception */ | ||||
| 
 | ||||
| #ifdef ACPI_DEFINE_EXCEPTION_TABLE | ||||
| 
 | ||||
| /*
 | ||||
|  * String versions of the exception codes above | ||||
|  * These strings must match the corresponding defines exactly | ||||
|  */ | ||||
| static const struct acpi_exception_info acpi_gbl_exception_names_env[] = { | ||||
| 	EXCEP_TXT("AE_OK", "No error"), | ||||
| 	EXCEP_TXT("AE_ERROR", "Unspecified error"), | ||||
| 	EXCEP_TXT("AE_NO_ACPI_TABLES", "ACPI tables could not be found"), | ||||
| 	EXCEP_TXT("AE_NO_NAMESPACE", "A namespace has not been loaded"), | ||||
| 	EXCEP_TXT("AE_NO_MEMORY", "Insufficient dynamic memory"), | ||||
| 	EXCEP_TXT("AE_NOT_FOUND", "A requested entity is not found"), | ||||
| 	EXCEP_TXT("AE_NOT_EXIST", "A required entity does not exist"), | ||||
| 	EXCEP_TXT("AE_ALREADY_EXISTS", "An entity already exists"), | ||||
| 	EXCEP_TXT("AE_TYPE", "The object type is incorrect"), | ||||
| 	EXCEP_TXT("AE_NULL_OBJECT", "A required object was missing"), | ||||
| 	EXCEP_TXT("AE_NULL_ENTRY", "The requested object does not exist"), | ||||
| 	EXCEP_TXT("AE_BUFFER_OVERFLOW", "The buffer provided is too small"), | ||||
| 	EXCEP_TXT("AE_STACK_OVERFLOW", "An internal stack overflowed"), | ||||
| 	EXCEP_TXT("AE_STACK_UNDERFLOW", "An internal stack underflowed"), | ||||
| 	EXCEP_TXT("AE_NOT_IMPLEMENTED", "The feature is not implemented"), | ||||
| 	EXCEP_TXT("AE_SUPPORT", "The feature is not supported"), | ||||
| 	EXCEP_TXT("AE_LIMIT", "A predefined limit was exceeded"), | ||||
| 	EXCEP_TXT("AE_TIME", "A time limit or timeout expired"), | ||||
| 	EXCEP_TXT("AE_ACQUIRE_DEADLOCK", | ||||
| 		  "Internal error, attempt was made to acquire a mutex in improper order"), | ||||
| 	EXCEP_TXT("AE_RELEASE_DEADLOCK", | ||||
| 		  "Internal error, attempt was made to release a mutex in improper order"), | ||||
| 	EXCEP_TXT("AE_NOT_ACQUIRED", | ||||
| 		  "An attempt to release a mutex or Global Lock without a previous acquire"), | ||||
| 	EXCEP_TXT("AE_ALREADY_ACQUIRED", | ||||
| 		  "Internal error, attempt was made to acquire a mutex twice"), | ||||
| 	EXCEP_TXT("AE_NO_HARDWARE_RESPONSE", | ||||
| 		  "Hardware did not respond after an I/O operation"), | ||||
| 	EXCEP_TXT("AE_NO_GLOBAL_LOCK", "There is no FACS Global Lock"), | ||||
| 	EXCEP_TXT("AE_ABORT_METHOD", "A control method was aborted"), | ||||
| 	EXCEP_TXT("AE_SAME_HANDLER", | ||||
| 		  "Attempt was made to install the same handler that is already installed"), | ||||
| 	EXCEP_TXT("AE_NO_HANDLER", | ||||
| 		  "A handler for the operation is not installed"), | ||||
| 	EXCEP_TXT("AE_OWNER_ID_LIMIT", | ||||
| 		  "There are no more Owner IDs available for ACPI tables or control methods"), | ||||
| 	EXCEP_TXT("AE_NOT_CONFIGURED", | ||||
| 		  "The interface is not part of the current subsystem configuration"), | ||||
| 	EXCEP_TXT("AE_ACCESS", "Permission denied for the requested operation") | ||||
| }; | ||||
| 
 | ||||
| static const struct acpi_exception_info acpi_gbl_exception_names_pgm[] = { | ||||
| 	EXCEP_TXT(NULL, NULL), | ||||
| 	EXCEP_TXT("AE_BAD_PARAMETER", "A parameter is out of range or invalid"), | ||||
| 	EXCEP_TXT("AE_BAD_CHARACTER", | ||||
| 		  "An invalid character was found in a name"), | ||||
| 	EXCEP_TXT("AE_BAD_PATHNAME", | ||||
| 		  "An invalid character was found in a pathname"), | ||||
| 	EXCEP_TXT("AE_BAD_DATA", | ||||
| 		  "A package or buffer contained incorrect data"), | ||||
| 	EXCEP_TXT("AE_BAD_HEX_CONSTANT", "Invalid character in a Hex constant"), | ||||
| 	EXCEP_TXT("AE_BAD_OCTAL_CONSTANT", | ||||
| 		  "Invalid character in an Octal constant"), | ||||
| 	EXCEP_TXT("AE_BAD_DECIMAL_CONSTANT", | ||||
| 		  "Invalid character in a Decimal constant"), | ||||
| 	EXCEP_TXT("AE_MISSING_ARGUMENTS", | ||||
| 		  "Too few arguments were passed to a control method"), | ||||
| 	EXCEP_TXT("AE_BAD_ADDRESS", "An illegal null I/O address") | ||||
| }; | ||||
| 
 | ||||
| static const struct acpi_exception_info acpi_gbl_exception_names_tbl[] = { | ||||
| 	EXCEP_TXT(NULL, NULL), | ||||
| 	EXCEP_TXT("AE_BAD_SIGNATURE", "An ACPI table has an invalid signature"), | ||||
| 	EXCEP_TXT("AE_BAD_HEADER", "Invalid field in an ACPI table header"), | ||||
| 	EXCEP_TXT("AE_BAD_CHECKSUM", "An ACPI table checksum is not correct"), | ||||
| 	EXCEP_TXT("AE_BAD_VALUE", "An invalid value was found in a table"), | ||||
| 	EXCEP_TXT("AE_INVALID_TABLE_LENGTH", | ||||
| 		  "The FADT or FACS has improper length") | ||||
| }; | ||||
| 
 | ||||
| static const struct acpi_exception_info acpi_gbl_exception_names_aml[] = { | ||||
| 	EXCEP_TXT(NULL, NULL), | ||||
| 	EXCEP_TXT("AE_AML_BAD_OPCODE", "Invalid AML opcode encountered"), | ||||
| 	EXCEP_TXT("AE_AML_NO_OPERAND", "A required operand is missing"), | ||||
| 	EXCEP_TXT("AE_AML_OPERAND_TYPE", | ||||
| 		  "An operand of an incorrect type was encountered"), | ||||
| 	EXCEP_TXT("AE_AML_OPERAND_VALUE", | ||||
| 		  "The operand had an inappropriate or invalid value"), | ||||
| 	EXCEP_TXT("AE_AML_UNINITIALIZED_LOCAL", | ||||
| 		  "Method tried to use an uninitialized local variable"), | ||||
| 	EXCEP_TXT("AE_AML_UNINITIALIZED_ARG", | ||||
| 		  "Method tried to use an uninitialized argument"), | ||||
| 	EXCEP_TXT("AE_AML_UNINITIALIZED_ELEMENT", | ||||
| 		  "Method tried to use an empty package element"), | ||||
| 	EXCEP_TXT("AE_AML_NUMERIC_OVERFLOW", | ||||
| 		  "Overflow during BCD conversion or other"), | ||||
| 	EXCEP_TXT("AE_AML_REGION_LIMIT", | ||||
| 		  "Tried to access beyond the end of an Operation Region"), | ||||
| 	EXCEP_TXT("AE_AML_BUFFER_LIMIT", | ||||
| 		  "Tried to access beyond the end of a buffer"), | ||||
| 	EXCEP_TXT("AE_AML_PACKAGE_LIMIT", | ||||
| 		  "Tried to access beyond the end of a package"), | ||||
| 	EXCEP_TXT("AE_AML_DIVIDE_BY_ZERO", | ||||
| 		  "During execution of AML Divide operator"), | ||||
| 	EXCEP_TXT("AE_AML_BAD_NAME", | ||||
| 		  "An ACPI name contains invalid character(s)"), | ||||
| 	EXCEP_TXT("AE_AML_NAME_NOT_FOUND", | ||||
| 		  "Could not resolve a named reference"), | ||||
| 	EXCEP_TXT("AE_AML_INTERNAL", "An internal error within the interprete"), | ||||
| 	EXCEP_TXT("AE_AML_INVALID_SPACE_ID", | ||||
| 		  "An Operation Region SpaceID is invalid"), | ||||
| 	EXCEP_TXT("AE_AML_STRING_LIMIT", | ||||
| 		  "String is longer than 200 characters"), | ||||
| 	EXCEP_TXT("AE_AML_NO_RETURN_VALUE", | ||||
| 		  "A method did not return a required value"), | ||||
| 	EXCEP_TXT("AE_AML_METHOD_LIMIT", | ||||
| 		  "A control method reached the maximum reentrancy limit of 255"), | ||||
| 	EXCEP_TXT("AE_AML_NOT_OWNER", | ||||
| 		  "A thread tried to release a mutex that it does not own"), | ||||
| 	EXCEP_TXT("AE_AML_MUTEX_ORDER", "Mutex SyncLevel release mismatch"), | ||||
| 	EXCEP_TXT("AE_AML_MUTEX_NOT_ACQUIRED", | ||||
| 		  "Attempt to release a mutex that was not previously acquired"), | ||||
| 	EXCEP_TXT("AE_AML_INVALID_RESOURCE_TYPE", | ||||
| 		  "Invalid resource type in resource list"), | ||||
| 	EXCEP_TXT("AE_AML_INVALID_INDEX", | ||||
| 		  "Invalid Argx or Localx (x too large)"), | ||||
| 	EXCEP_TXT("AE_AML_REGISTER_LIMIT", | ||||
| 		  "Bank value or Index value beyond range of register"), | ||||
| 	EXCEP_TXT("AE_AML_NO_WHILE", "Break or Continue without a While"), | ||||
| 	EXCEP_TXT("AE_AML_ALIGNMENT", | ||||
| 		  "Non-aligned memory transfer on platform that does not support this"), | ||||
| 	EXCEP_TXT("AE_AML_NO_RESOURCE_END_TAG", | ||||
| 		  "No End Tag in a resource list"), | ||||
| 	EXCEP_TXT("AE_AML_BAD_RESOURCE_VALUE", | ||||
| 		  "Invalid value of a resource element"), | ||||
| 	EXCEP_TXT("AE_AML_CIRCULAR_REFERENCE", | ||||
| 		  "Two references refer to each other"), | ||||
| 	EXCEP_TXT("AE_AML_BAD_RESOURCE_LENGTH", | ||||
| 		  "The length of a Resource Descriptor in the AML is incorrect"), | ||||
| 	EXCEP_TXT("AE_AML_ILLEGAL_ADDRESS", | ||||
| 		  "A memory, I/O, or PCI configuration address is invalid"), | ||||
| 	EXCEP_TXT("AE_AML_INFINITE_LOOP", | ||||
| 		  "An apparent infinite AML While loop, method was aborted") | ||||
| }; | ||||
| 
 | ||||
| static const struct acpi_exception_info acpi_gbl_exception_names_ctrl[] = { | ||||
| 	EXCEP_TXT(NULL, NULL), | ||||
| 	EXCEP_TXT("AE_CTRL_RETURN_VALUE", "A Method returned a value"), | ||||
| 	EXCEP_TXT("AE_CTRL_PENDING", "Method is calling another method"), | ||||
| 	EXCEP_TXT("AE_CTRL_TERMINATE", "Terminate the executing method"), | ||||
| 	EXCEP_TXT("AE_CTRL_TRUE", "An If or While predicate result"), | ||||
| 	EXCEP_TXT("AE_CTRL_FALSE", "An If or While predicate result"), | ||||
| 	EXCEP_TXT("AE_CTRL_DEPTH", "Maximum search depth has been reached"), | ||||
| 	EXCEP_TXT("AE_CTRL_END", "An If or While predicate is false"), | ||||
| 	EXCEP_TXT("AE_CTRL_TRANSFER", "Transfer control to called method"), | ||||
| 	EXCEP_TXT("AE_CTRL_BREAK", "A Break has been executed"), | ||||
| 	EXCEP_TXT("AE_CTRL_CONTINUE", "A Continue has been executed"), | ||||
| 	EXCEP_TXT("AE_CTRL_SKIP", "Not currently used"), | ||||
| 	EXCEP_TXT("AE_CTRL_PARSE_CONTINUE", "Used to skip over bad opcodes"), | ||||
| 	EXCEP_TXT("AE_CTRL_PARSE_PENDING", "Used to implement AML While loops") | ||||
| }; | ||||
| 
 | ||||
| #endif				/* EXCEPTION_TABLE */ | ||||
| 
 | ||||
| #endif				/* __ACEXCEP_H__ */ | ||||
							
								
								
									
										91
									
								
								include/acpi/acnames.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								include/acpi/acnames.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acnames.h - Global names and strings | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACNAMES_H__ | ||||
| #define __ACNAMES_H__ | ||||
| 
 | ||||
| /* Method names - these methods can appear anywhere in the namespace */ | ||||
| 
 | ||||
| #define METHOD_NAME__ADR        "_ADR" | ||||
| #define METHOD_NAME__AEI        "_AEI" | ||||
| #define METHOD_NAME__BBN        "_BBN" | ||||
| #define METHOD_NAME__CBA        "_CBA" | ||||
| #define METHOD_NAME__CID        "_CID" | ||||
| #define METHOD_NAME__CRS        "_CRS" | ||||
| #define METHOD_NAME__DDN        "_DDN" | ||||
| #define METHOD_NAME__HID        "_HID" | ||||
| #define METHOD_NAME__INI        "_INI" | ||||
| #define METHOD_NAME__PLD        "_PLD" | ||||
| #define METHOD_NAME__DSD        "_DSD" | ||||
| #define METHOD_NAME__PRS        "_PRS" | ||||
| #define METHOD_NAME__PRT        "_PRT" | ||||
| #define METHOD_NAME__PRW        "_PRW" | ||||
| #define METHOD_NAME__PS0        "_PS0" | ||||
| #define METHOD_NAME__PS1        "_PS1" | ||||
| #define METHOD_NAME__PS2        "_PS2" | ||||
| #define METHOD_NAME__PS3        "_PS3" | ||||
| #define METHOD_NAME__REG        "_REG" | ||||
| #define METHOD_NAME__SB_        "_SB_" | ||||
| #define METHOD_NAME__SEG        "_SEG" | ||||
| #define METHOD_NAME__SRS        "_SRS" | ||||
| #define METHOD_NAME__STA        "_STA" | ||||
| #define METHOD_NAME__SUB        "_SUB" | ||||
| #define METHOD_NAME__UID        "_UID" | ||||
| 
 | ||||
| /* Method names - these methods must appear at the namespace root */ | ||||
| 
 | ||||
| #define METHOD_PATHNAME__PTS    "\\_PTS" | ||||
| #define METHOD_PATHNAME__SST    "\\_SI._SST" | ||||
| #define METHOD_PATHNAME__WAK    "\\_WAK" | ||||
| 
 | ||||
| /* Definitions of the predefined namespace names  */ | ||||
| 
 | ||||
| #define ACPI_UNKNOWN_NAME       (u32) 0x3F3F3F3F	/* Unknown name is "????" */ | ||||
| #define ACPI_ROOT_NAME          (u32) 0x5F5F5F5C	/* Root name is    "\___" */ | ||||
| 
 | ||||
| #define ACPI_PREFIX_MIXED       (u32) 0x69706341	/* "Acpi" */ | ||||
| #define ACPI_PREFIX_LOWER       (u32) 0x69706361	/* "acpi" */ | ||||
| 
 | ||||
| #define ACPI_NS_ROOT_PATH       "\\" | ||||
| 
 | ||||
| #endif				/* __ACNAMES_H__  */ | ||||
							
								
								
									
										459
									
								
								include/acpi/acoutput.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										459
									
								
								include/acpi/acoutput.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,459 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acoutput.h -- debug output | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACOUTPUT_H__ | ||||
| #define __ACOUTPUT_H__ | ||||
| 
 | ||||
| /*
 | ||||
|  * Debug levels and component IDs. These are used to control the | ||||
|  * granularity of the output of the ACPI_DEBUG_PRINT macro -- on a | ||||
|  * per-component basis and a per-exception-type basis. | ||||
|  */ | ||||
| 
 | ||||
| /* Component IDs are used in the global "DebugLayer" */ | ||||
| 
 | ||||
| #define ACPI_UTILITIES              0x00000001 | ||||
| #define ACPI_HARDWARE               0x00000002 | ||||
| #define ACPI_EVENTS                 0x00000004 | ||||
| #define ACPI_TABLES                 0x00000008 | ||||
| #define ACPI_NAMESPACE              0x00000010 | ||||
| #define ACPI_PARSER                 0x00000020 | ||||
| #define ACPI_DISPATCHER             0x00000040 | ||||
| #define ACPI_EXECUTER               0x00000080 | ||||
| #define ACPI_RESOURCES              0x00000100 | ||||
| #define ACPI_CA_DEBUGGER            0x00000200 | ||||
| #define ACPI_OS_SERVICES            0x00000400 | ||||
| #define ACPI_CA_DISASSEMBLER        0x00000800 | ||||
| 
 | ||||
| /* Component IDs for ACPI tools and utilities */ | ||||
| 
 | ||||
| #define ACPI_COMPILER               0x00001000 | ||||
| #define ACPI_TOOLS                  0x00002000 | ||||
| #define ACPI_EXAMPLE                0x00004000 | ||||
| #define ACPI_DRIVER                 0x00008000 | ||||
| #define DT_COMPILER                 0x00010000 | ||||
| #define ASL_PREPROCESSOR            0x00020000 | ||||
| 
 | ||||
| #define ACPI_ALL_COMPONENTS         0x0001FFFF | ||||
| #define ACPI_COMPONENT_DEFAULT      (ACPI_ALL_COMPONENTS) | ||||
| 
 | ||||
| /* Component IDs reserved for ACPI drivers */ | ||||
| 
 | ||||
| #define ACPI_ALL_DRIVERS            0xFFFF0000 | ||||
| 
 | ||||
| /*
 | ||||
|  * Raw debug output levels, do not use these in the ACPI_DEBUG_PRINT macros | ||||
|  */ | ||||
| #define ACPI_LV_INIT                0x00000001 | ||||
| #define ACPI_LV_DEBUG_OBJECT        0x00000002 | ||||
| #define ACPI_LV_INFO                0x00000004 | ||||
| #define ACPI_LV_REPAIR              0x00000008 | ||||
| #define ACPI_LV_ALL_EXCEPTIONS      0x0000000F | ||||
| 
 | ||||
| /* Trace verbosity level 1 [Standard Trace Level] */ | ||||
| 
 | ||||
| #define ACPI_LV_INIT_NAMES          0x00000020 | ||||
| #define ACPI_LV_PARSE               0x00000040 | ||||
| #define ACPI_LV_LOAD                0x00000080 | ||||
| #define ACPI_LV_DISPATCH            0x00000100 | ||||
| #define ACPI_LV_EXEC                0x00000200 | ||||
| #define ACPI_LV_NAMES               0x00000400 | ||||
| #define ACPI_LV_OPREGION            0x00000800 | ||||
| #define ACPI_LV_BFIELD              0x00001000 | ||||
| #define ACPI_LV_TABLES              0x00002000 | ||||
| #define ACPI_LV_VALUES              0x00004000 | ||||
| #define ACPI_LV_OBJECTS             0x00008000 | ||||
| #define ACPI_LV_RESOURCES           0x00010000 | ||||
| #define ACPI_LV_USER_REQUESTS       0x00020000 | ||||
| #define ACPI_LV_PACKAGE             0x00040000 | ||||
| #define ACPI_LV_VERBOSITY1          0x0007FF40 | ACPI_LV_ALL_EXCEPTIONS | ||||
| 
 | ||||
| /* Trace verbosity level 2 [Function tracing and memory allocation] */ | ||||
| 
 | ||||
| #define ACPI_LV_ALLOCATIONS         0x00100000 | ||||
| #define ACPI_LV_FUNCTIONS           0x00200000 | ||||
| #define ACPI_LV_OPTIMIZATIONS       0x00400000 | ||||
| #define ACPI_LV_VERBOSITY2          0x00700000 | ACPI_LV_VERBOSITY1 | ||||
| #define ACPI_LV_ALL                 ACPI_LV_VERBOSITY2 | ||||
| 
 | ||||
| /* Trace verbosity level 3 [Threading, I/O, and Interrupts] */ | ||||
| 
 | ||||
| #define ACPI_LV_MUTEX               0x01000000 | ||||
| #define ACPI_LV_THREADS             0x02000000 | ||||
| #define ACPI_LV_IO                  0x04000000 | ||||
| #define ACPI_LV_INTERRUPTS          0x08000000 | ||||
| #define ACPI_LV_VERBOSITY3          0x0F000000 | ACPI_LV_VERBOSITY2 | ||||
| 
 | ||||
| /* Exceptionally verbose output -- also used in the global "DebugLevel"  */ | ||||
| 
 | ||||
| #define ACPI_LV_AML_DISASSEMBLE     0x10000000 | ||||
| #define ACPI_LV_VERBOSE_INFO        0x20000000 | ||||
| #define ACPI_LV_FULL_TABLES         0x40000000 | ||||
| #define ACPI_LV_EVENTS              0x80000000 | ||||
| #define ACPI_LV_VERBOSE             0xF0000000 | ||||
| 
 | ||||
| /*
 | ||||
|  * Debug level macros that are used in the DEBUG_PRINT macros | ||||
|  */ | ||||
| #define ACPI_DEBUG_LEVEL(dl)        (u32) dl,ACPI_DEBUG_PARAMETERS | ||||
| 
 | ||||
| /*
 | ||||
|  * Exception level -- used in the global "DebugLevel" | ||||
|  * | ||||
|  * Note: For errors, use the ACPI_ERROR or ACPI_EXCEPTION interfaces. | ||||
|  * For warnings, use ACPI_WARNING. | ||||
|  */ | ||||
| #define ACPI_DB_INIT                ACPI_DEBUG_LEVEL (ACPI_LV_INIT) | ||||
| #define ACPI_DB_DEBUG_OBJECT        ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT) | ||||
| #define ACPI_DB_INFO                ACPI_DEBUG_LEVEL (ACPI_LV_INFO) | ||||
| #define ACPI_DB_REPAIR              ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR) | ||||
| #define ACPI_DB_ALL_EXCEPTIONS      ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS) | ||||
| 
 | ||||
| /* Trace level -- also used in the global "DebugLevel" */ | ||||
| 
 | ||||
| #define ACPI_DB_INIT_NAMES          ACPI_DEBUG_LEVEL (ACPI_LV_INIT_NAMES) | ||||
| #define ACPI_DB_THREADS             ACPI_DEBUG_LEVEL (ACPI_LV_THREADS) | ||||
| #define ACPI_DB_PARSE               ACPI_DEBUG_LEVEL (ACPI_LV_PARSE) | ||||
| #define ACPI_DB_DISPATCH            ACPI_DEBUG_LEVEL (ACPI_LV_DISPATCH) | ||||
| #define ACPI_DB_LOAD                ACPI_DEBUG_LEVEL (ACPI_LV_LOAD) | ||||
| #define ACPI_DB_EXEC                ACPI_DEBUG_LEVEL (ACPI_LV_EXEC) | ||||
| #define ACPI_DB_NAMES               ACPI_DEBUG_LEVEL (ACPI_LV_NAMES) | ||||
| #define ACPI_DB_OPREGION            ACPI_DEBUG_LEVEL (ACPI_LV_OPREGION) | ||||
| #define ACPI_DB_BFIELD              ACPI_DEBUG_LEVEL (ACPI_LV_BFIELD) | ||||
| #define ACPI_DB_TABLES              ACPI_DEBUG_LEVEL (ACPI_LV_TABLES) | ||||
| #define ACPI_DB_FUNCTIONS           ACPI_DEBUG_LEVEL (ACPI_LV_FUNCTIONS) | ||||
| #define ACPI_DB_OPTIMIZATIONS       ACPI_DEBUG_LEVEL (ACPI_LV_OPTIMIZATIONS) | ||||
| #define ACPI_DB_VALUES              ACPI_DEBUG_LEVEL (ACPI_LV_VALUES) | ||||
| #define ACPI_DB_OBJECTS             ACPI_DEBUG_LEVEL (ACPI_LV_OBJECTS) | ||||
| #define ACPI_DB_ALLOCATIONS         ACPI_DEBUG_LEVEL (ACPI_LV_ALLOCATIONS) | ||||
| #define ACPI_DB_RESOURCES           ACPI_DEBUG_LEVEL (ACPI_LV_RESOURCES) | ||||
| #define ACPI_DB_IO                  ACPI_DEBUG_LEVEL (ACPI_LV_IO) | ||||
| #define ACPI_DB_INTERRUPTS          ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS) | ||||
| #define ACPI_DB_USER_REQUESTS       ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS) | ||||
| #define ACPI_DB_PACKAGE             ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE) | ||||
| #define ACPI_DB_MUTEX               ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX) | ||||
| #define ACPI_DB_EVENTS              ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS) | ||||
| 
 | ||||
| #define ACPI_DB_ALL                 ACPI_DEBUG_LEVEL (ACPI_LV_ALL) | ||||
| 
 | ||||
| /* Defaults for debug_level, debug and normal */ | ||||
| 
 | ||||
| #define ACPI_DEBUG_DEFAULT          (ACPI_LV_INFO | ACPI_LV_REPAIR) | ||||
| #define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR) | ||||
| #define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL) | ||||
| 
 | ||||
| #if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES) | ||||
| /*
 | ||||
|  * The module name is used primarily for error and debug messages. | ||||
|  * The __FILE__ macro is not very useful for this, because it | ||||
|  * usually includes the entire pathname to the module making the | ||||
|  * debug output difficult to read. | ||||
|  */ | ||||
| #define ACPI_MODULE_NAME(name)          static const char ACPI_UNUSED_VAR _acpi_module_name[] = name; | ||||
| #else | ||||
| /*
 | ||||
|  * For the no-debug and no-error-msg cases, we must at least define | ||||
|  * a null module name. | ||||
|  */ | ||||
| #define ACPI_MODULE_NAME(name) | ||||
| #define _acpi_module_name "" | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Ascii error messages can be configured out | ||||
|  */ | ||||
| #ifndef ACPI_NO_ERROR_MESSAGES | ||||
| #define AE_INFO                         _acpi_module_name, __LINE__ | ||||
| 
 | ||||
| /*
 | ||||
|  * Error reporting. Callers module and line number are inserted by AE_INFO, | ||||
|  * the plist contains a set of parens to allow variable-length lists. | ||||
|  * These macros are used for both the debug and non-debug versions of the code. | ||||
|  */ | ||||
| #define ACPI_INFO(plist)                acpi_info plist | ||||
| #define ACPI_WARNING(plist)             acpi_warning plist | ||||
| #define ACPI_EXCEPTION(plist)           acpi_exception plist | ||||
| #define ACPI_ERROR(plist)               acpi_error plist | ||||
| #define ACPI_BIOS_WARNING(plist)        acpi_bios_warning plist | ||||
| #define ACPI_BIOS_ERROR(plist)          acpi_bios_error plist | ||||
| #define ACPI_DEBUG_OBJECT(obj,l,i)      acpi_ex_do_debug_object(obj,l,i) | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| /* No error messages */ | ||||
| 
 | ||||
| #define ACPI_INFO(plist) | ||||
| #define ACPI_WARNING(plist) | ||||
| #define ACPI_EXCEPTION(plist) | ||||
| #define ACPI_ERROR(plist) | ||||
| #define ACPI_BIOS_WARNING(plist) | ||||
| #define ACPI_BIOS_ERROR(plist) | ||||
| #define ACPI_DEBUG_OBJECT(obj,l,i) | ||||
| 
 | ||||
| #endif				/* ACPI_NO_ERROR_MESSAGES */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Debug macros that are conditionally compiled | ||||
|  */ | ||||
| #ifdef ACPI_DEBUG_OUTPUT | ||||
| 
 | ||||
| /*
 | ||||
|  * If ACPI_GET_FUNCTION_NAME was not defined in the compiler-dependent header, | ||||
|  * define it now. This is the case where there the compiler does not support | ||||
|  * a __FUNCTION__ macro or equivalent. | ||||
|  */ | ||||
| #ifndef ACPI_GET_FUNCTION_NAME | ||||
| #define ACPI_GET_FUNCTION_NAME          _acpi_function_name | ||||
| 
 | ||||
| /*
 | ||||
|  * The Name parameter should be the procedure name as a quoted string. | ||||
|  * The function name is also used by the function exit macros below. | ||||
|  * Note: (const char) is used to be compatible with the debug interfaces | ||||
|  * and macros such as __FUNCTION__. | ||||
|  */ | ||||
| #define ACPI_FUNCTION_NAME(name)        static const char _acpi_function_name[] = #name; | ||||
| 
 | ||||
| #else | ||||
| /* Compiler supports __FUNCTION__ (or equivalent) -- Ignore this macro */ | ||||
| 
 | ||||
| #define ACPI_FUNCTION_NAME(name) | ||||
| #endif				/* ACPI_GET_FUNCTION_NAME */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Common parameters used for debug output functions: | ||||
|  * line number, function name, module(file) name, component ID | ||||
|  */ | ||||
| #define ACPI_DEBUG_PARAMETERS \ | ||||
| 	__LINE__, ACPI_GET_FUNCTION_NAME, _acpi_module_name, _COMPONENT | ||||
| 
 | ||||
| /* Check if debug output is currently dynamically enabled */ | ||||
| 
 | ||||
| #define ACPI_IS_DEBUG_ENABLED(level, component) \ | ||||
| 	((level & acpi_dbg_level) && (component & acpi_dbg_layer)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Master debug print macros | ||||
|  * Print message if and only if: | ||||
|  *    1) Debug print for the current component is enabled | ||||
|  *    2) Debug error level or trace level for the print statement is enabled | ||||
|  * | ||||
|  * November 2012: Moved the runtime check for whether to actually emit the | ||||
|  * debug message outside of the print function itself. This improves overall | ||||
|  * performance at a relatively small code cost. Implementation involves the | ||||
|  * use of variadic macros supported by C99. | ||||
|  * | ||||
|  * Note: the ACPI_DO_WHILE0 macro is used to prevent some compilers from | ||||
|  * complaining about these constructs. On other compilers the do...while | ||||
|  * adds some extra code, so this feature is optional. | ||||
|  */ | ||||
| #ifdef ACPI_USE_DO_WHILE_0 | ||||
| #define ACPI_DO_WHILE0(a)               do a while(0) | ||||
| #else | ||||
| #define ACPI_DO_WHILE0(a)               a | ||||
| #endif | ||||
| 
 | ||||
| /* DEBUG_PRINT functions */ | ||||
| 
 | ||||
| #define ACPI_DEBUG_PRINT(plist)         ACPI_ACTUAL_DEBUG plist | ||||
| #define ACPI_DEBUG_PRINT_RAW(plist)     ACPI_ACTUAL_DEBUG_RAW plist | ||||
| 
 | ||||
| /* Helper macros for DEBUG_PRINT */ | ||||
| 
 | ||||
| #define ACPI_DO_DEBUG_PRINT(function, level, line, filename, modulename, component, ...) \ | ||||
| 	ACPI_DO_WHILE0 ({ \ | ||||
| 		if (ACPI_IS_DEBUG_ENABLED (level, component)) \ | ||||
| 		{ \ | ||||
| 			function (level, line, filename, modulename, component, __VA_ARGS__); \ | ||||
| 		} \ | ||||
| 	}) | ||||
| 
 | ||||
| #define ACPI_ACTUAL_DEBUG(level, line, filename, modulename, component, ...) \ | ||||
| 	ACPI_DO_DEBUG_PRINT (acpi_debug_print, level, line, \ | ||||
| 		filename, modulename, component, __VA_ARGS__) | ||||
| 
 | ||||
| #define ACPI_ACTUAL_DEBUG_RAW(level, line, filename, modulename, component, ...) \ | ||||
| 	ACPI_DO_DEBUG_PRINT (acpi_debug_print_raw, level, line, \ | ||||
| 		filename, modulename, component, __VA_ARGS__) | ||||
| 
 | ||||
| /*
 | ||||
|  * Function entry tracing | ||||
|  * | ||||
|  * The name of the function is emitted as a local variable that is | ||||
|  * intended to be used by both the entry trace and the exit trace. | ||||
|  */ | ||||
| 
 | ||||
| /* Helper macro */ | ||||
| 
 | ||||
| #define ACPI_TRACE_ENTRY(name, function, type, param) \ | ||||
| 	ACPI_FUNCTION_NAME (name) \ | ||||
| 	function (ACPI_DEBUG_PARAMETERS, (type) (param)) | ||||
| 
 | ||||
| /* The actual entry trace macros */ | ||||
| 
 | ||||
| #define ACPI_FUNCTION_TRACE(name) \ | ||||
| 	ACPI_FUNCTION_NAME(name) \ | ||||
| 	acpi_ut_trace (ACPI_DEBUG_PARAMETERS) | ||||
| 
 | ||||
| #define ACPI_FUNCTION_TRACE_PTR(name, pointer) \ | ||||
| 	ACPI_TRACE_ENTRY (name, acpi_ut_trace_ptr, void *, pointer) | ||||
| 
 | ||||
| #define ACPI_FUNCTION_TRACE_U32(name, value) \ | ||||
| 	ACPI_TRACE_ENTRY (name, acpi_ut_trace_u32, u32, value) | ||||
| 
 | ||||
| #define ACPI_FUNCTION_TRACE_STR(name, string) \ | ||||
| 	ACPI_TRACE_ENTRY (name, acpi_ut_trace_str, char *, string) | ||||
| 
 | ||||
| #define ACPI_FUNCTION_ENTRY() \ | ||||
| 	acpi_ut_track_stack_ptr() | ||||
| 
 | ||||
| /*
 | ||||
|  * Function exit tracing | ||||
|  * | ||||
|  * These macros include a return statement. This is usually considered | ||||
|  * bad form, but having a separate exit macro before the actual return | ||||
|  * is very ugly and difficult to maintain. | ||||
|  * | ||||
|  * One of the FUNCTION_TRACE macros above must be used in conjunction | ||||
|  * with these macros so that "_AcpiFunctionName" is defined. | ||||
|  * | ||||
|  * There are two versions of most of the return macros. The default version is | ||||
|  * safer, since it avoids side-effects by guaranteeing that the argument will | ||||
|  * not be evaluated twice. | ||||
|  * | ||||
|  * A less-safe version of the macros is provided for optional use if the | ||||
|  * compiler uses excessive CPU stack (for example, this may happen in the | ||||
|  * debug case if code optimzation is disabled.) | ||||
|  */ | ||||
| 
 | ||||
| /* Exit trace helper macro */ | ||||
| 
 | ||||
| #ifndef ACPI_SIMPLE_RETURN_MACROS | ||||
| 
 | ||||
| #define ACPI_TRACE_EXIT(function, type, param) \ | ||||
| 	ACPI_DO_WHILE0 ({ \ | ||||
| 		register type _param = (type) (param); \ | ||||
| 		function (ACPI_DEBUG_PARAMETERS, _param); \ | ||||
| 		return (_param); \ | ||||
| 	}) | ||||
| 
 | ||||
| #else				/* Use original less-safe macros */ | ||||
| 
 | ||||
| #define ACPI_TRACE_EXIT(function, type, param) \ | ||||
| 	ACPI_DO_WHILE0 ({ \ | ||||
| 		function (ACPI_DEBUG_PARAMETERS, (type) (param)); \ | ||||
| 		return (param); \ | ||||
| 	}) | ||||
| 
 | ||||
| #endif				/* ACPI_SIMPLE_RETURN_MACROS */ | ||||
| 
 | ||||
| /* The actual exit macros */ | ||||
| 
 | ||||
| #define return_VOID \ | ||||
| 	ACPI_DO_WHILE0 ({ \ | ||||
| 		acpi_ut_exit (ACPI_DEBUG_PARAMETERS); \ | ||||
| 		return; \ | ||||
| 	}) | ||||
| 
 | ||||
| #define return_ACPI_STATUS(status) \ | ||||
| 	ACPI_TRACE_EXIT (acpi_ut_status_exit, acpi_status, status) | ||||
| 
 | ||||
| #define return_PTR(pointer) \ | ||||
| 	ACPI_TRACE_EXIT (acpi_ut_ptr_exit, void *, pointer) | ||||
| 
 | ||||
| #define return_VALUE(value) \ | ||||
| 	ACPI_TRACE_EXIT (acpi_ut_value_exit, u64, value) | ||||
| 
 | ||||
| #define return_UINT32(value) \ | ||||
| 	ACPI_TRACE_EXIT (acpi_ut_value_exit, u32, value) | ||||
| 
 | ||||
| #define return_UINT8(value) \ | ||||
| 	ACPI_TRACE_EXIT (acpi_ut_value_exit, u8, value) | ||||
| 
 | ||||
| /* Conditional execution */ | ||||
| 
 | ||||
| #define ACPI_DEBUG_EXEC(a)              a | ||||
| #define ACPI_DEBUG_ONLY_MEMBERS(a)      a; | ||||
| #define _VERBOSE_STRUCTURES | ||||
| 
 | ||||
| /* Various object display routines for debug */ | ||||
| 
 | ||||
| #define ACPI_DUMP_STACK_ENTRY(a)        acpi_ex_dump_operand((a), 0) | ||||
| #define ACPI_DUMP_OPERANDS(a, b ,c)     acpi_ex_dump_operands(a, b, c) | ||||
| #define ACPI_DUMP_ENTRY(a, b)           acpi_ns_dump_entry (a, b) | ||||
| #define ACPI_DUMP_PATHNAME(a, b, c, d)  acpi_ns_dump_pathname(a, b, c, d) | ||||
| #define ACPI_DUMP_BUFFER(a, b)          acpi_ut_debug_dump_buffer((u8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT) | ||||
| 
 | ||||
| #else				/* ACPI_DEBUG_OUTPUT */ | ||||
| /*
 | ||||
|  * This is the non-debug case -- make everything go away, | ||||
|  * leaving no executable debug code! | ||||
|  */ | ||||
| #define ACPI_DEBUG_PRINT(pl) | ||||
| #define ACPI_DEBUG_PRINT_RAW(pl) | ||||
| #define ACPI_DEBUG_EXEC(a) | ||||
| #define ACPI_DEBUG_ONLY_MEMBERS(a) | ||||
| #define ACPI_FUNCTION_NAME(a) | ||||
| #define ACPI_FUNCTION_TRACE(a) | ||||
| #define ACPI_FUNCTION_TRACE_PTR(a, b) | ||||
| #define ACPI_FUNCTION_TRACE_U32(a, b) | ||||
| #define ACPI_FUNCTION_TRACE_STR(a, b) | ||||
| #define ACPI_FUNCTION_ENTRY() | ||||
| #define ACPI_DUMP_STACK_ENTRY(a) | ||||
| #define ACPI_DUMP_OPERANDS(a, b, c) | ||||
| #define ACPI_DUMP_ENTRY(a, b) | ||||
| #define ACPI_DUMP_PATHNAME(a, b, c, d) | ||||
| #define ACPI_DUMP_BUFFER(a, b) | ||||
| #define ACPI_IS_DEBUG_ENABLED(level, component) 0 | ||||
| 
 | ||||
| /* Return macros must have a return statement at the minimum */ | ||||
| 
 | ||||
| #define return_VOID                     return | ||||
| #define return_ACPI_STATUS(s)           return(s) | ||||
| #define return_PTR(s)                   return(s) | ||||
| #define return_VALUE(s)                 return(s) | ||||
| #define return_UINT8(s)                 return(s) | ||||
| #define return_UINT32(s)                return(s) | ||||
| 
 | ||||
| #endif				/* ACPI_DEBUG_OUTPUT */ | ||||
| 
 | ||||
| #endif				/* __ACOUTPUT_H__ */ | ||||
							
								
								
									
										67
									
								
								include/acpi/acpi.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								include/acpi/acpi.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,67 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acpi.h - Master public include file used to interface to ACPICA | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACPI_H__ | ||||
| #define __ACPI_H__ | ||||
| 
 | ||||
| /*
 | ||||
|  * Public include files for use by code that will interface to ACPICA. | ||||
|  * | ||||
|  * Information includes the ACPICA data types, names, exceptions, and | ||||
|  * external interface prototypes. Also included are the definitions for | ||||
|  * all ACPI tables (FADT, MADT, etc.) | ||||
|  * | ||||
|  * Note: The order of these include files is important. | ||||
|  */ | ||||
| #include <acpi/platform/acenv.h>	/* Environment-specific items */ | ||||
| #include <acpi/acnames.h>		/* Common ACPI names and strings */ | ||||
| #include <acpi/actypes.h>		/* ACPICA data types and structures */ | ||||
| #include <acpi/acexcep.h>		/* ACPICA exceptions */ | ||||
| #include <acpi/actbl.h>		/* ACPI table definitions */ | ||||
| #include <acpi/acoutput.h>		/* Error output and Debug macros */ | ||||
| #include <acpi/acrestyp.h>		/* Resource Descriptor structs */ | ||||
| #include <acpi/acpiosxf.h>		/* OSL interfaces (ACPICA-to-OS) */ | ||||
| #include <acpi/acpixf.h>		/* ACPI core subsystem external interfaces */ | ||||
| #include <acpi/platform/acenvex.h>	/* Extra environment-specific items */ | ||||
| 
 | ||||
| #endif				/* __ACPI_H__ */ | ||||
							
								
								
									
										587
									
								
								include/acpi/acpi_bus.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										587
									
								
								include/acpi/acpi_bus.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,587 @@ | |||
| /*
 | ||||
|  *  acpi_bus.h - ACPI Bus Driver ($Revision: 22 $) | ||||
|  * | ||||
|  *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> | ||||
|  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> | ||||
|  * | ||||
|  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  * | ||||
|  *  This program is free software; you can redistribute it and/or modify | ||||
|  *  it under the terms of the GNU General Public License as published by | ||||
|  *  the Free Software Foundation; either version 2 of the License, or (at | ||||
|  *  your option) any later version. | ||||
|  * | ||||
|  *  This program is distributed in the hope that it will be useful, but | ||||
|  *  WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  *  General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU General Public License along | ||||
|  *  with this program; if not, write to the Free Software Foundation, Inc., | ||||
|  *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | ||||
|  * | ||||
|  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACPI_BUS_H__ | ||||
| #define __ACPI_BUS_H__ | ||||
| 
 | ||||
| #include <linux/device.h> | ||||
| 
 | ||||
| /* TBD: Make dynamic */ | ||||
| #define ACPI_MAX_HANDLES	10 | ||||
| struct acpi_handle_list { | ||||
| 	u32 count; | ||||
| 	acpi_handle handles[ACPI_MAX_HANDLES]; | ||||
| }; | ||||
| 
 | ||||
| /* acpi_utils.h */ | ||||
| acpi_status | ||||
| acpi_extract_package(union acpi_object *package, | ||||
| 		     struct acpi_buffer *format, struct acpi_buffer *buffer); | ||||
| acpi_status | ||||
| acpi_evaluate_integer(acpi_handle handle, | ||||
| 		      acpi_string pathname, | ||||
| 		      struct acpi_object_list *arguments, unsigned long long *data); | ||||
| acpi_status | ||||
| acpi_evaluate_reference(acpi_handle handle, | ||||
| 			acpi_string pathname, | ||||
| 			struct acpi_object_list *arguments, | ||||
| 			struct acpi_handle_list *list); | ||||
| acpi_status | ||||
| acpi_evaluate_ost(acpi_handle handle, u32 source_event, u32 status_code, | ||||
| 		  struct acpi_buffer *status_buf); | ||||
| 
 | ||||
| acpi_status | ||||
| acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld); | ||||
| 
 | ||||
| bool acpi_has_method(acpi_handle handle, char *name); | ||||
| acpi_status acpi_execute_simple_method(acpi_handle handle, char *method, | ||||
| 				       u64 arg); | ||||
| acpi_status acpi_evaluate_ej0(acpi_handle handle); | ||||
| acpi_status acpi_evaluate_lck(acpi_handle handle, int lock); | ||||
| bool acpi_ata_match(acpi_handle handle); | ||||
| bool acpi_bay_match(acpi_handle handle); | ||||
| bool acpi_dock_match(acpi_handle handle); | ||||
| 
 | ||||
| bool acpi_check_dsm(acpi_handle handle, const u8 *uuid, int rev, u64 funcs); | ||||
| union acpi_object *acpi_evaluate_dsm(acpi_handle handle, const u8 *uuid, | ||||
| 			int rev, int func, union acpi_object *argv4); | ||||
| 
 | ||||
| static inline union acpi_object * | ||||
| acpi_evaluate_dsm_typed(acpi_handle handle, const u8 *uuid, int rev, int func, | ||||
| 			union acpi_object *argv4, acpi_object_type type) | ||||
| { | ||||
| 	union acpi_object *obj; | ||||
| 
 | ||||
| 	obj = acpi_evaluate_dsm(handle, uuid, rev, func, argv4); | ||||
| 	if (obj && obj->type != type) { | ||||
| 		ACPI_FREE(obj); | ||||
| 		obj = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	return obj; | ||||
| } | ||||
| 
 | ||||
| #define	ACPI_INIT_DSM_ARGV4(cnt, eles)			\ | ||||
| 	{						\ | ||||
| 	  .package.type = ACPI_TYPE_PACKAGE,		\ | ||||
| 	  .package.count = (cnt),			\ | ||||
| 	  .package.elements = (eles)			\ | ||||
| 	} | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI | ||||
| 
 | ||||
| #include <linux/proc_fs.h> | ||||
| 
 | ||||
| #define ACPI_BUS_FILE_ROOT	"acpi" | ||||
| extern struct proc_dir_entry *acpi_root_dir; | ||||
| 
 | ||||
| enum acpi_bus_device_type { | ||||
| 	ACPI_BUS_TYPE_DEVICE = 0, | ||||
| 	ACPI_BUS_TYPE_POWER, | ||||
| 	ACPI_BUS_TYPE_PROCESSOR, | ||||
| 	ACPI_BUS_TYPE_THERMAL, | ||||
| 	ACPI_BUS_TYPE_POWER_BUTTON, | ||||
| 	ACPI_BUS_TYPE_SLEEP_BUTTON, | ||||
| 	ACPI_BUS_DEVICE_TYPE_COUNT | ||||
| }; | ||||
| 
 | ||||
| struct acpi_driver; | ||||
| struct acpi_device; | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI Scan Handler | ||||
|  * ----------------- | ||||
|  */ | ||||
| 
 | ||||
| struct acpi_hotplug_profile { | ||||
| 	struct kobject kobj; | ||||
| 	int (*scan_dependent)(struct acpi_device *adev); | ||||
| 	void (*notify_online)(struct acpi_device *adev); | ||||
| 	bool enabled:1; | ||||
| 	bool demand_offline:1; | ||||
| }; | ||||
| 
 | ||||
| static inline struct acpi_hotplug_profile *to_acpi_hotplug_profile( | ||||
| 						struct kobject *kobj) | ||||
| { | ||||
| 	return container_of(kobj, struct acpi_hotplug_profile, kobj); | ||||
| } | ||||
| 
 | ||||
| struct acpi_scan_handler { | ||||
| 	const struct acpi_device_id *ids; | ||||
| 	struct list_head list_node; | ||||
| 	bool (*match)(char *idstr, const struct acpi_device_id **matchid); | ||||
| 	int (*attach)(struct acpi_device *dev, const struct acpi_device_id *id); | ||||
| 	void (*detach)(struct acpi_device *dev); | ||||
| 	void (*bind)(struct device *phys_dev); | ||||
| 	void (*unbind)(struct device *phys_dev); | ||||
| 	struct acpi_hotplug_profile hotplug; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI Hotplug Context | ||||
|  * -------------------- | ||||
|  */ | ||||
| 
 | ||||
| struct acpi_hotplug_context { | ||||
| 	struct acpi_device *self; | ||||
| 	int (*notify)(struct acpi_device *, u32); | ||||
| 	void (*uevent)(struct acpi_device *, u32); | ||||
| 	void (*fixup)(struct acpi_device *); | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI Driver | ||||
|  * ----------- | ||||
|  */ | ||||
| 
 | ||||
| typedef int (*acpi_op_add) (struct acpi_device * device); | ||||
| typedef int (*acpi_op_remove) (struct acpi_device * device); | ||||
| typedef void (*acpi_op_notify) (struct acpi_device * device, u32 event); | ||||
| 
 | ||||
| struct acpi_device_ops { | ||||
| 	acpi_op_add add; | ||||
| 	acpi_op_remove remove; | ||||
| 	acpi_op_notify notify; | ||||
| }; | ||||
| 
 | ||||
| #define ACPI_DRIVER_ALL_NOTIFY_EVENTS	0x1	/* system AND device events */ | ||||
| 
 | ||||
| struct acpi_driver { | ||||
| 	char name[80]; | ||||
| 	char class[80]; | ||||
| 	const struct acpi_device_id *ids; /* Supported Hardware IDs */ | ||||
| 	unsigned int flags; | ||||
| 	struct acpi_device_ops ops; | ||||
| 	struct device_driver drv; | ||||
| 	struct module *owner; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI Device | ||||
|  * ----------- | ||||
|  */ | ||||
| 
 | ||||
| /* Status (_STA) */ | ||||
| 
 | ||||
| struct acpi_device_status { | ||||
| 	u32 present:1; | ||||
| 	u32 enabled:1; | ||||
| 	u32 show_in_ui:1; | ||||
| 	u32 functional:1; | ||||
| 	u32 battery_present:1; | ||||
| 	u32 reserved:27; | ||||
| }; | ||||
| 
 | ||||
| /* Flags */ | ||||
| 
 | ||||
| struct acpi_device_flags { | ||||
| 	u32 dynamic_status:1; | ||||
| 	u32 removable:1; | ||||
| 	u32 ejectable:1; | ||||
| 	u32 power_manageable:1; | ||||
| 	u32 match_driver:1; | ||||
| 	u32 initialized:1; | ||||
| 	u32 visited:1; | ||||
| 	u32 hotplug_notify:1; | ||||
| 	u32 is_dock_station:1; | ||||
| 	u32 reserved:23; | ||||
| }; | ||||
| 
 | ||||
| /* File System */ | ||||
| 
 | ||||
| struct acpi_device_dir { | ||||
| 	struct proc_dir_entry *entry; | ||||
| }; | ||||
| 
 | ||||
| #define acpi_device_dir(d)	((d)->dir.entry) | ||||
| 
 | ||||
| /* Plug and Play */ | ||||
| 
 | ||||
| typedef char acpi_bus_id[8]; | ||||
| typedef unsigned long acpi_bus_address; | ||||
| typedef char acpi_device_name[40]; | ||||
| typedef char acpi_device_class[20]; | ||||
| 
 | ||||
| struct acpi_hardware_id { | ||||
| 	struct list_head list; | ||||
| 	char *id; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_pnp_type { | ||||
| 	u32 hardware_id:1; | ||||
| 	u32 bus_address:1; | ||||
| 	u32 platform_id:1; | ||||
| 	u32 reserved:29; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_pnp { | ||||
| 	acpi_bus_id bus_id;		/* Object name */ | ||||
| 	struct acpi_pnp_type type;	/* ID type */ | ||||
| 	acpi_bus_address bus_address;	/* _ADR */ | ||||
| 	char *unique_id;		/* _UID */ | ||||
| 	struct list_head ids;		/* _HID and _CIDs */ | ||||
| 	acpi_device_name device_name;	/* Driver-determined */ | ||||
| 	acpi_device_class device_class;	/*        "          */ | ||||
| 	union acpi_object *str_obj;	/* unicode string for _STR method */ | ||||
| }; | ||||
| 
 | ||||
| #define acpi_device_bid(d)	((d)->pnp.bus_id) | ||||
| #define acpi_device_adr(d)	((d)->pnp.bus_address) | ||||
| const char *acpi_device_hid(struct acpi_device *device); | ||||
| #define acpi_device_name(d)	((d)->pnp.device_name) | ||||
| #define acpi_device_class(d)	((d)->pnp.device_class) | ||||
| 
 | ||||
| /* Power Management */ | ||||
| 
 | ||||
| struct acpi_device_power_flags { | ||||
| 	u32 explicit_get:1;	/* _PSC present? */ | ||||
| 	u32 power_resources:1;	/* Power resources */ | ||||
| 	u32 inrush_current:1;	/* Serialize Dx->D0 */ | ||||
| 	u32 power_removed:1;	/* Optimize Dx->D0 */ | ||||
| 	u32 ignore_parent:1;	/* Power is independent of parent power state */ | ||||
| 	u32 dsw_present:1;	/* _DSW present? */ | ||||
| 	u32 reserved:26; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_power_state { | ||||
| 	struct { | ||||
| 		u8 valid:1; | ||||
| 		u8 os_accessible:1; | ||||
| 		u8 explicit_set:1;	/* _PSx present? */ | ||||
| 		u8 reserved:6; | ||||
| 	} flags; | ||||
| 	int power;		/* % Power (compared to D0) */ | ||||
| 	int latency;		/* Dx->D0 time (microseconds) */ | ||||
| 	struct list_head resources;	/* Power resources referenced */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_power { | ||||
| 	int state;		/* Current state */ | ||||
| 	struct acpi_device_power_flags flags; | ||||
| 	struct acpi_device_power_state states[ACPI_D_STATE_COUNT];	/* Power states (D0-D3Cold) */ | ||||
| }; | ||||
| 
 | ||||
| /* Performance Management */ | ||||
| 
 | ||||
| struct acpi_device_perf_flags { | ||||
| 	u8 reserved:8; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_perf_state { | ||||
| 	struct { | ||||
| 		u8 valid:1; | ||||
| 		u8 reserved:7; | ||||
| 	} flags; | ||||
| 	u8 power;		/* % Power (compared to P0) */ | ||||
| 	u8 performance;		/* % Performance (    "   ) */ | ||||
| 	int latency;		/* Px->P0 time (microseconds) */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_perf { | ||||
| 	int state; | ||||
| 	struct acpi_device_perf_flags flags; | ||||
| 	int state_count; | ||||
| 	struct acpi_device_perf_state *states; | ||||
| }; | ||||
| 
 | ||||
| /* Wakeup Management */ | ||||
| struct acpi_device_wakeup_flags { | ||||
| 	u8 valid:1;		/* Can successfully enable wakeup? */ | ||||
| 	u8 run_wake:1;		/* Run-Wake GPE devices */ | ||||
| 	u8 notifier_present:1;  /* Wake-up notify handler has been installed */ | ||||
| 	u8 enabled:1;		/* Enabled for wakeup */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_wakeup_context { | ||||
| 	struct work_struct work; | ||||
| 	struct device *dev; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_wakeup { | ||||
| 	acpi_handle gpe_device; | ||||
| 	u64 gpe_number; | ||||
| 	u64 sleep_state; | ||||
| 	struct list_head resources; | ||||
| 	struct acpi_device_wakeup_flags flags; | ||||
| 	struct acpi_device_wakeup_context context; | ||||
| 	struct wakeup_source *ws; | ||||
| 	int prepare_count; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_device_physical_node { | ||||
| 	unsigned int node_id; | ||||
| 	struct list_head node; | ||||
| 	struct device *dev; | ||||
| 	bool put_online:1; | ||||
| }; | ||||
| 
 | ||||
| /* Device */ | ||||
| struct acpi_device { | ||||
| 	int device_type; | ||||
| 	acpi_handle handle;		/* no handle for fixed hardware */ | ||||
| 	struct acpi_device *parent; | ||||
| 	struct list_head children; | ||||
| 	struct list_head node; | ||||
| 	struct list_head wakeup_list; | ||||
| 	struct list_head del_list; | ||||
| 	struct acpi_device_status status; | ||||
| 	struct acpi_device_flags flags; | ||||
| 	struct acpi_device_pnp pnp; | ||||
| 	struct acpi_device_power power; | ||||
| 	struct acpi_device_wakeup wakeup; | ||||
| 	struct acpi_device_perf performance; | ||||
| 	struct acpi_device_dir dir; | ||||
| 	struct acpi_scan_handler *handler; | ||||
| 	struct acpi_hotplug_context *hp; | ||||
| 	struct acpi_driver *driver; | ||||
| 	void *driver_data; | ||||
| 	struct device dev; | ||||
| 	unsigned int physical_node_count; | ||||
| 	struct list_head physical_node_list; | ||||
| 	struct mutex physical_node_lock; | ||||
| 	void (*remove)(struct acpi_device *); | ||||
| }; | ||||
| 
 | ||||
| static inline void *acpi_driver_data(struct acpi_device *d) | ||||
| { | ||||
| 	return d->driver_data; | ||||
| } | ||||
| 
 | ||||
| #define to_acpi_device(d)	container_of(d, struct acpi_device, dev) | ||||
| #define to_acpi_driver(d)	container_of(d, struct acpi_driver, drv) | ||||
| 
 | ||||
| static inline void acpi_set_device_status(struct acpi_device *adev, u32 sta) | ||||
| { | ||||
| 	*((u32 *)&adev->status) = sta; | ||||
| } | ||||
| 
 | ||||
| static inline void acpi_set_hp_context(struct acpi_device *adev, | ||||
| 				       struct acpi_hotplug_context *hp) | ||||
| { | ||||
| 	hp->self = adev; | ||||
| 	adev->hp = hp; | ||||
| } | ||||
| 
 | ||||
| void acpi_initialize_hp_context(struct acpi_device *adev, | ||||
| 				struct acpi_hotplug_context *hp, | ||||
| 				int (*notify)(struct acpi_device *, u32), | ||||
| 				void (*uevent)(struct acpi_device *, u32)); | ||||
| 
 | ||||
| /* acpi_device.dev.bus == &acpi_bus_type */ | ||||
| extern struct bus_type acpi_bus_type; | ||||
| 
 | ||||
| /*
 | ||||
|  * Events | ||||
|  * ------ | ||||
|  */ | ||||
| 
 | ||||
| struct acpi_bus_event { | ||||
| 	struct list_head node; | ||||
| 	acpi_device_class device_class; | ||||
| 	acpi_bus_id bus_id; | ||||
| 	u32 type; | ||||
| 	u32 data; | ||||
| }; | ||||
| 
 | ||||
| extern struct kobject *acpi_kobj; | ||||
| extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int); | ||||
| void acpi_bus_private_data_handler(acpi_handle, void *); | ||||
| int acpi_bus_get_private_data(acpi_handle, void **); | ||||
| int acpi_bus_attach_private_data(acpi_handle, void *); | ||||
| void acpi_bus_detach_private_data(acpi_handle); | ||||
| extern int acpi_notifier_call_chain(struct acpi_device *, u32, u32); | ||||
| extern int register_acpi_notifier(struct notifier_block *); | ||||
| extern int unregister_acpi_notifier(struct notifier_block *); | ||||
| 
 | ||||
| /*
 | ||||
|  * External Functions | ||||
|  */ | ||||
| 
 | ||||
| int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device); | ||||
| struct acpi_device *acpi_bus_get_acpi_device(acpi_handle handle); | ||||
| void acpi_bus_put_acpi_device(struct acpi_device *adev); | ||||
| acpi_status acpi_bus_get_status_handle(acpi_handle handle, | ||||
| 				       unsigned long long *sta); | ||||
| int acpi_bus_get_status(struct acpi_device *device); | ||||
| 
 | ||||
| int acpi_bus_set_power(acpi_handle handle, int state); | ||||
| const char *acpi_power_state_string(int state); | ||||
| int acpi_device_get_power(struct acpi_device *device, int *state); | ||||
| int acpi_device_set_power(struct acpi_device *device, int state); | ||||
| int acpi_bus_init_power(struct acpi_device *device); | ||||
| int acpi_device_fix_up_power(struct acpi_device *device); | ||||
| int acpi_bus_update_power(acpi_handle handle, int *state_p); | ||||
| int acpi_device_update_power(struct acpi_device *device, int *state_p); | ||||
| bool acpi_bus_power_manageable(acpi_handle handle); | ||||
| 
 | ||||
| #ifdef CONFIG_PM | ||||
| bool acpi_bus_can_wakeup(acpi_handle handle); | ||||
| #else | ||||
| static inline bool acpi_bus_can_wakeup(acpi_handle handle) { return false; } | ||||
| #endif | ||||
| 
 | ||||
| void acpi_scan_lock_acquire(void); | ||||
| void acpi_scan_lock_release(void); | ||||
| void acpi_lock_hp_context(void); | ||||
| void acpi_unlock_hp_context(void); | ||||
| int acpi_scan_add_handler(struct acpi_scan_handler *handler); | ||||
| int acpi_bus_register_driver(struct acpi_driver *driver); | ||||
| void acpi_bus_unregister_driver(struct acpi_driver *driver); | ||||
| int acpi_bus_scan(acpi_handle handle); | ||||
| void acpi_bus_trim(struct acpi_device *start); | ||||
| acpi_status acpi_bus_get_ejd(acpi_handle handle, acpi_handle * ejd); | ||||
| int acpi_match_device_ids(struct acpi_device *device, | ||||
| 			  const struct acpi_device_id *ids); | ||||
| int acpi_create_dir(struct acpi_device *); | ||||
| void acpi_remove_dir(struct acpi_device *); | ||||
| 
 | ||||
| static inline bool acpi_device_enumerated(struct acpi_device *adev) | ||||
| { | ||||
| 	return adev && adev->flags.initialized && adev->flags.visited; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * module_acpi_driver(acpi_driver) - Helper macro for registering an ACPI driver | ||||
|  * @__acpi_driver: acpi_driver struct | ||||
|  * | ||||
|  * Helper macro for ACPI drivers which do not do anything special in module | ||||
|  * init/exit. This eliminates a lot of boilerplate. Each module may only | ||||
|  * use this macro once, and calling it replaces module_init() and module_exit() | ||||
|  */ | ||||
| #define module_acpi_driver(__acpi_driver) \ | ||||
| 	module_driver(__acpi_driver, acpi_bus_register_driver, \ | ||||
| 		      acpi_bus_unregister_driver) | ||||
| 
 | ||||
| /*
 | ||||
|  * Bind physical devices with ACPI devices | ||||
|  */ | ||||
| struct acpi_bus_type { | ||||
| 	struct list_head list; | ||||
| 	const char *name; | ||||
| 	bool (*match)(struct device *dev); | ||||
| 	struct acpi_device * (*find_companion)(struct device *); | ||||
| 	void (*setup)(struct device *); | ||||
| 	void (*cleanup)(struct device *); | ||||
| }; | ||||
| int register_acpi_bus_type(struct acpi_bus_type *); | ||||
| int unregister_acpi_bus_type(struct acpi_bus_type *); | ||||
| int acpi_bind_one(struct device *dev, struct acpi_device *adev); | ||||
| int acpi_unbind_one(struct device *dev); | ||||
| 
 | ||||
| struct acpi_pci_root { | ||||
| 	struct acpi_device * device; | ||||
| 	struct pci_bus *bus; | ||||
| 	u16 segment; | ||||
| 	struct resource secondary;	/* downstream bus range */ | ||||
| 
 | ||||
| 	u32 osc_support_set;	/* _OSC state of support bits */ | ||||
| 	u32 osc_control_set;	/* _OSC state of control bits */ | ||||
| 	phys_addr_t mcfg_addr; | ||||
| }; | ||||
| 
 | ||||
| /* helper */ | ||||
| 
 | ||||
| struct acpi_device *acpi_find_child_device(struct acpi_device *parent, | ||||
| 					   u64 address, bool check_children); | ||||
| int acpi_is_root_bridge(acpi_handle); | ||||
| struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle); | ||||
| 
 | ||||
| int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); | ||||
| int acpi_disable_wakeup_device_power(struct acpi_device *dev); | ||||
| 
 | ||||
| #ifdef CONFIG_PM | ||||
| acpi_status acpi_add_pm_notifier(struct acpi_device *adev, struct device *dev, | ||||
| 				 void (*work_func)(struct work_struct *work)); | ||||
| acpi_status acpi_remove_pm_notifier(struct acpi_device *adev); | ||||
| int acpi_pm_device_sleep_state(struct device *, int *, int); | ||||
| #else | ||||
| static inline acpi_status acpi_add_pm_notifier(struct acpi_device *adev, | ||||
| 					       struct device *dev, | ||||
| 				               void (*work_func)(struct work_struct *work)) | ||||
| { | ||||
| 	return AE_SUPPORT; | ||||
| } | ||||
| static inline acpi_status acpi_remove_pm_notifier(struct acpi_device *adev) | ||||
| { | ||||
| 	return AE_SUPPORT; | ||||
| } | ||||
| static inline int acpi_pm_device_sleep_state(struct device *d, int *p, int m) | ||||
| { | ||||
| 	if (p) | ||||
| 		*p = ACPI_STATE_D0; | ||||
| 
 | ||||
| 	return (m >= ACPI_STATE_D0 && m <= ACPI_STATE_D3_COLD) ? | ||||
| 		m : ACPI_STATE_D0; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_PM_RUNTIME | ||||
| int acpi_pm_device_run_wake(struct device *, bool); | ||||
| #else | ||||
| static inline int acpi_pm_device_run_wake(struct device *dev, bool enable) | ||||
| { | ||||
| 	return -ENODEV; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_PM_SLEEP | ||||
| int acpi_pm_device_sleep_wake(struct device *, bool); | ||||
| #else | ||||
| static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable) | ||||
| { | ||||
| 	return -ENODEV; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI_SLEEP | ||||
| u32 acpi_target_system_state(void); | ||||
| #else | ||||
| static inline u32 acpi_target_system_state(void) { return ACPI_STATE_S0; } | ||||
| #endif | ||||
| 
 | ||||
| static inline bool acpi_device_power_manageable(struct acpi_device *adev) | ||||
| { | ||||
| 	return adev->flags.power_manageable; | ||||
| } | ||||
| 
 | ||||
| static inline bool acpi_device_can_wakeup(struct acpi_device *adev) | ||||
| { | ||||
| 	return adev->wakeup.flags.valid; | ||||
| } | ||||
| 
 | ||||
| static inline bool acpi_device_can_poweroff(struct acpi_device *adev) | ||||
| { | ||||
| 	return adev->power.states[ACPI_STATE_D3_COLD].flags.os_accessible; | ||||
| } | ||||
| 
 | ||||
| #else	/* CONFIG_ACPI */ | ||||
| 
 | ||||
| static inline int register_acpi_bus_type(void *bus) { return 0; } | ||||
| static inline int unregister_acpi_bus_type(void *bus) { return 0; } | ||||
| 
 | ||||
| #endif				/* CONFIG_ACPI */ | ||||
| 
 | ||||
| #endif /*__ACPI_BUS_H__*/ | ||||
							
								
								
									
										127
									
								
								include/acpi/acpi_drivers.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								include/acpi/acpi_drivers.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,127 @@ | |||
| /*
 | ||||
|  *  acpi_drivers.h  ($Revision: 31 $) | ||||
|  * | ||||
|  *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> | ||||
|  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> | ||||
|  * | ||||
|  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  * | ||||
|  *  This program is free software; you can redistribute it and/or modify | ||||
|  *  it under the terms of the GNU General Public License as published by | ||||
|  *  the Free Software Foundation; either version 2 of the License, or (at | ||||
|  *  your option) any later version. | ||||
|  * | ||||
|  *  This program is distributed in the hope that it will be useful, but | ||||
|  *  WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  *  General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU General Public License along | ||||
|  *  with this program; if not, write to the Free Software Foundation, Inc., | ||||
|  *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | ||||
|  * | ||||
|  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACPI_DRIVERS_H__ | ||||
| #define __ACPI_DRIVERS_H__ | ||||
| 
 | ||||
| #define ACPI_MAX_STRING			80 | ||||
| 
 | ||||
| /*
 | ||||
|  * Please update drivers/acpi/debug.c and Documentation/acpi/debug.txt | ||||
|  * if you add to this list. | ||||
|  */ | ||||
| #define ACPI_BUS_COMPONENT		0x00010000 | ||||
| #define ACPI_AC_COMPONENT		0x00020000 | ||||
| #define ACPI_BATTERY_COMPONENT		0x00040000 | ||||
| #define ACPI_BUTTON_COMPONENT		0x00080000 | ||||
| #define ACPI_SBS_COMPONENT		0x00100000 | ||||
| #define ACPI_FAN_COMPONENT		0x00200000 | ||||
| #define ACPI_PCI_COMPONENT		0x00400000 | ||||
| #define ACPI_POWER_COMPONENT		0x00800000 | ||||
| #define ACPI_CONTAINER_COMPONENT	0x01000000 | ||||
| #define ACPI_SYSTEM_COMPONENT		0x02000000 | ||||
| #define ACPI_THERMAL_COMPONENT		0x04000000 | ||||
| #define ACPI_MEMORY_DEVICE_COMPONENT	0x08000000 | ||||
| #define ACPI_VIDEO_COMPONENT		0x10000000 | ||||
| #define ACPI_PROCESSOR_COMPONENT	0x20000000 | ||||
| 
 | ||||
| /*
 | ||||
|  * _HID definitions | ||||
|  * HIDs must conform to ACPI spec(6.1.4) | ||||
|  * Linux specific HIDs do not apply to this and begin with LNX: | ||||
|  */ | ||||
| 
 | ||||
| #define ACPI_POWER_HID			"LNXPOWER" | ||||
| #define ACPI_PROCESSOR_OBJECT_HID	"LNXCPU" | ||||
| #define ACPI_SYSTEM_HID			"LNXSYSTM" | ||||
| #define ACPI_THERMAL_HID		"LNXTHERM" | ||||
| #define ACPI_BUTTON_HID_POWERF		"LNXPWRBN" | ||||
| #define ACPI_BUTTON_HID_SLEEPF		"LNXSLPBN" | ||||
| #define ACPI_VIDEO_HID			"LNXVIDEO" | ||||
| #define ACPI_BAY_HID			"LNXIOBAY" | ||||
| #define ACPI_DOCK_HID			"LNXDOCK" | ||||
| /* Quirk for broken IBM BIOSes */ | ||||
| #define ACPI_SMBUS_IBM_HID		"SMBUSIBM" | ||||
| 
 | ||||
| /*
 | ||||
|  * For fixed hardware buttons, we fabricate acpi_devices with HID | ||||
|  * ACPI_BUTTON_HID_POWERF or ACPI_BUTTON_HID_SLEEPF.  Fixed hardware | ||||
|  * signals only an event; it doesn't supply a notification value. | ||||
|  * To allow drivers to treat notifications from fixed hardware the | ||||
|  * same as those from real devices, we turn the events into this | ||||
|  * notification value. | ||||
|  */ | ||||
| #define ACPI_FIXED_HARDWARE_EVENT	0x100 | ||||
| 
 | ||||
| /* --------------------------------------------------------------------------
 | ||||
|                                        PCI | ||||
|    -------------------------------------------------------------------------- */ | ||||
| 
 | ||||
| 
 | ||||
| /* ACPI PCI Interrupt Link (pci_link.c) */ | ||||
| 
 | ||||
| int acpi_irq_penalty_init(void); | ||||
| int acpi_pci_link_allocate_irq(acpi_handle handle, int index, int *triggering, | ||||
| 			       int *polarity, char **name); | ||||
| int acpi_pci_link_free_irq(acpi_handle handle); | ||||
| 
 | ||||
| /* ACPI PCI Device Binding (pci_bind.c) */ | ||||
| 
 | ||||
| struct pci_bus; | ||||
| 
 | ||||
| struct pci_dev *acpi_get_pci_dev(acpi_handle); | ||||
| 
 | ||||
| /* Arch-defined function to add a bus to the system */ | ||||
| 
 | ||||
| struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root); | ||||
| 
 | ||||
| #ifdef CONFIG_X86 | ||||
| void pci_acpi_crs_quirks(void); | ||||
| #else | ||||
| static inline void pci_acpi_crs_quirks(void) { } | ||||
| #endif | ||||
| 
 | ||||
| /* --------------------------------------------------------------------------
 | ||||
|                                     Processor | ||||
|    -------------------------------------------------------------------------- */ | ||||
| 
 | ||||
| #define ACPI_PROCESSOR_LIMIT_NONE	0x00 | ||||
| #define ACPI_PROCESSOR_LIMIT_INCREMENT	0x01 | ||||
| #define ACPI_PROCESSOR_LIMIT_DECREMENT	0x02 | ||||
| 
 | ||||
| /*--------------------------------------------------------------------------
 | ||||
|                                   Dock Station | ||||
|   -------------------------------------------------------------------------- */ | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI_DOCK | ||||
| extern int is_dock_device(struct acpi_device *adev); | ||||
| #else | ||||
| static inline int is_dock_device(struct acpi_device *adev) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| #endif /* CONFIG_ACPI_DOCK */ | ||||
| 
 | ||||
| #endif /*__ACPI_DRIVERS_H__*/ | ||||
							
								
								
									
										20
									
								
								include/acpi/acpi_io.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								include/acpi/acpi_io.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #ifndef _ACPI_IO_H_ | ||||
| #define _ACPI_IO_H_ | ||||
| 
 | ||||
| #include <linux/io.h> | ||||
| 
 | ||||
| static inline void __iomem *acpi_os_ioremap(acpi_physical_address phys, | ||||
| 					    acpi_size size) | ||||
| { | ||||
|        return ioremap_cache(phys, size); | ||||
| } | ||||
| 
 | ||||
| void __iomem *__init_refok | ||||
| acpi_os_map_iomem(acpi_physical_address phys, acpi_size size); | ||||
| void __ref acpi_os_unmap_iomem(void __iomem *virt, acpi_size size); | ||||
| void __iomem *acpi_os_get_iomem(acpi_physical_address phys, unsigned int size); | ||||
| 
 | ||||
| int acpi_os_map_generic_address(struct acpi_generic_address *addr); | ||||
| void acpi_os_unmap_generic_address(struct acpi_generic_address *addr); | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										20
									
								
								include/acpi/acpi_numa.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								include/acpi/acpi_numa.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #ifndef __ACPI_NUMA_H | ||||
| #define __ACPI_NUMA_H | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI_NUMA | ||||
| #include <linux/kernel.h> | ||||
| 
 | ||||
| /* Proximity bitmap length */ | ||||
| #if MAX_NUMNODES > 256 | ||||
| #define MAX_PXM_DOMAINS MAX_NUMNODES | ||||
| #else | ||||
| #define MAX_PXM_DOMAINS (256)	/* Old pxm spec is defined 8 bit */ | ||||
| #endif | ||||
| 
 | ||||
| extern int pxm_to_node(int); | ||||
| extern int node_to_pxm(int); | ||||
| extern int acpi_map_pxm_to_node(int); | ||||
| extern unsigned char acpi_srat_revision; | ||||
| 
 | ||||
| #endif				/* CONFIG_ACPI_NUMA */ | ||||
| #endif				/* __ACP_NUMA_H */ | ||||
							
								
								
									
										433
									
								
								include/acpi/acpiosxf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										433
									
								
								include/acpi/acpiosxf.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,433 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These | ||||
|  *                    interfaces must be implemented by OSL to interface the | ||||
|  *                    ACPI components to the host operating system. | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACPIOSXF_H__ | ||||
| #define __ACPIOSXF_H__ | ||||
| 
 | ||||
| #include <acpi/platform/acenv.h> | ||||
| #include <acpi/actypes.h> | ||||
| 
 | ||||
| /* Types for acpi_os_execute */ | ||||
| 
 | ||||
| typedef enum { | ||||
| 	OSL_GLOBAL_LOCK_HANDLER, | ||||
| 	OSL_NOTIFY_HANDLER, | ||||
| 	OSL_GPE_HANDLER, | ||||
| 	OSL_DEBUGGER_THREAD, | ||||
| 	OSL_EC_POLL_HANDLER, | ||||
| 	OSL_EC_BURST_HANDLER | ||||
| } acpi_execute_type; | ||||
| 
 | ||||
| #define ACPI_NO_UNIT_LIMIT          ((u32) -1) | ||||
| #define ACPI_MUTEX_SEM              1 | ||||
| 
 | ||||
| /* Functions for acpi_os_signal */ | ||||
| 
 | ||||
| #define ACPI_SIGNAL_FATAL           0 | ||||
| #define ACPI_SIGNAL_BREAKPOINT      1 | ||||
| 
 | ||||
| struct acpi_signal_fatal_info { | ||||
| 	u32 type; | ||||
| 	u32 code; | ||||
| 	u32 argument; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * OSL Initialization and shutdown primitives | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize | ||||
| acpi_status acpi_os_initialize(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate | ||||
| acpi_status acpi_os_terminate(void); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI Table interfaces | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_root_pointer | ||||
| acpi_physical_address acpi_os_get_root_pointer(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override | ||||
| acpi_status | ||||
| acpi_os_predefined_override(const struct acpi_predefined_names *init_val, | ||||
| 			    acpi_string * new_val); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override | ||||
| acpi_status | ||||
| acpi_os_table_override(struct acpi_table_header *existing_table, | ||||
| 		       struct acpi_table_header **new_table); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_physical_table_override | ||||
| acpi_status | ||||
| acpi_os_physical_table_override(struct acpi_table_header *existing_table, | ||||
| 				acpi_physical_address * new_address, | ||||
| 				u32 *new_table_length); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Spinlock primitives | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock | ||||
| acpi_status acpi_os_create_lock(acpi_spinlock * out_handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_lock | ||||
| void acpi_os_delete_lock(acpi_spinlock handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_lock | ||||
| acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_lock | ||||
| void acpi_os_release_lock(acpi_spinlock handle, acpi_cpu_flags flags); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Semaphore primitives | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_semaphore | ||||
| acpi_status | ||||
| acpi_os_create_semaphore(u32 max_units, | ||||
| 			 u32 initial_units, acpi_semaphore * out_handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_semaphore | ||||
| acpi_status acpi_os_delete_semaphore(acpi_semaphore handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_semaphore | ||||
| acpi_status | ||||
| acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal_semaphore | ||||
| acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Mutex primitives. May be configured to use semaphores instead via | ||||
|  * ACPI_MUTEX_TYPE (see platform/acenv.h) | ||||
|  */ | ||||
| #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE) | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_mutex | ||||
| acpi_status acpi_os_create_mutex(acpi_mutex * out_handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_mutex | ||||
| void acpi_os_delete_mutex(acpi_mutex handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_mutex | ||||
| acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_mutex | ||||
| void acpi_os_release_mutex(acpi_mutex handle); | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Memory allocation and mapping | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate | ||||
| void *acpi_os_allocate(acpi_size size); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed | ||||
| void *acpi_os_allocate_zeroed(acpi_size size); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free | ||||
| void acpi_os_free(void *memory); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_map_memory | ||||
| void *acpi_os_map_memory(acpi_physical_address where, acpi_size length); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_unmap_memory | ||||
| void acpi_os_unmap_memory(void *logical_address, acpi_size size); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_physical_address | ||||
| acpi_status | ||||
| acpi_os_get_physical_address(void *logical_address, | ||||
| 			     acpi_physical_address * physical_address); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Memory/Object Cache | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_cache | ||||
| acpi_status | ||||
| acpi_os_create_cache(char *cache_name, | ||||
| 		     u16 object_size, | ||||
| 		     u16 max_depth, acpi_cache_t ** return_cache); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_cache | ||||
| acpi_status acpi_os_delete_cache(acpi_cache_t * cache); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_purge_cache | ||||
| acpi_status acpi_os_purge_cache(acpi_cache_t * cache); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object | ||||
| void *acpi_os_acquire_object(acpi_cache_t * cache); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_object | ||||
| acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Interrupt handlers | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_install_interrupt_handler | ||||
| acpi_status | ||||
| acpi_os_install_interrupt_handler(u32 interrupt_number, | ||||
| 				  acpi_osd_handler service_routine, | ||||
| 				  void *context); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_remove_interrupt_handler | ||||
| acpi_status | ||||
| acpi_os_remove_interrupt_handler(u32 interrupt_number, | ||||
| 				 acpi_osd_handler service_routine); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Threads and Scheduling | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id | ||||
| acpi_thread_id acpi_os_get_thread_id(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_execute | ||||
| acpi_status | ||||
| acpi_os_execute(acpi_execute_type type, | ||||
| 		acpi_osd_exec_callback function, void *context); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_events_complete | ||||
| void acpi_os_wait_events_complete(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_sleep | ||||
| void acpi_os_sleep(u64 milliseconds); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_stall | ||||
| void acpi_os_stall(u32 microseconds); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Platform and hardware-independent I/O interfaces | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_port | ||||
| acpi_status acpi_os_read_port(acpi_io_address address, u32 *value, u32 width); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_port | ||||
| acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Platform and hardware-independent physical memory interfaces | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_memory | ||||
| acpi_status | ||||
| acpi_os_read_memory(acpi_physical_address address, u64 *value, u32 width); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_memory | ||||
| acpi_status | ||||
| acpi_os_write_memory(acpi_physical_address address, u64 value, u32 width); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Platform and hardware-independent PCI configuration space access | ||||
|  * Note: Can't use "Register" as a parameter, changed to "Reg" -- | ||||
|  * certain compilers complain. | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_pci_configuration | ||||
| acpi_status | ||||
| acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id, | ||||
| 			       u32 reg, u64 *value, u32 width); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_pci_configuration | ||||
| acpi_status | ||||
| acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id, | ||||
| 				u32 reg, u64 value, u32 width); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Miscellaneous | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable | ||||
| u8 acpi_os_readable(void *pointer, acpi_size length); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable | ||||
| u8 acpi_os_writable(void *pointer, acpi_size length); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_timer | ||||
| u64 acpi_os_get_timer(void); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal | ||||
| acpi_status acpi_os_signal(u32 function, void *info); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Debug print routines | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_printf | ||||
| void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_vprintf | ||||
| void acpi_os_vprintf(const char *format, va_list args); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output | ||||
| void acpi_os_redirect_output(void *destination); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Debug input | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line | ||||
| acpi_status acpi_os_get_line(char *buffer, u32 buffer_length, u32 *bytes_read); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Obtain ACPI table(s) | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name | ||||
| acpi_status | ||||
| acpi_os_get_table_by_name(char *signature, | ||||
| 			  u32 instance, | ||||
| 			  struct acpi_table_header **table, | ||||
| 			  acpi_physical_address * address); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index | ||||
| acpi_status | ||||
| acpi_os_get_table_by_index(u32 index, | ||||
| 			   struct acpi_table_header **table, | ||||
| 			   u32 *instance, acpi_physical_address * address); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address | ||||
| acpi_status | ||||
| acpi_os_get_table_by_address(acpi_physical_address address, | ||||
| 			     struct acpi_table_header **table); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Directory manipulation | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory | ||||
| void *acpi_os_open_directory(char *pathname, | ||||
| 			     char *wildcard_spec, char requested_file_type); | ||||
| #endif | ||||
| 
 | ||||
| /* requeste_file_type values */ | ||||
| 
 | ||||
| #define REQUEST_FILE_ONLY                   0 | ||||
| #define REQUEST_DIR_ONLY                    1 | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename | ||||
| char *acpi_os_get_next_filename(void *dir_handle); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory | ||||
| void acpi_os_close_directory(void *dir_handle); | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * File I/O and related support | ||||
|  */ | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_file | ||||
| ACPI_FILE acpi_os_open_file(const char *path, u8 modes); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_file | ||||
| void acpi_os_close_file(ACPI_FILE file); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_file | ||||
| int | ||||
| acpi_os_read_file(ACPI_FILE file, | ||||
| 		  void *buffer, acpi_size size, acpi_size count); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_file | ||||
| int | ||||
| acpi_os_write_file(ACPI_FILE file, | ||||
| 		   void *buffer, acpi_size size, acpi_size count); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_file_offset | ||||
| long acpi_os_get_file_offset(ACPI_FILE file); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_set_file_offset | ||||
| acpi_status acpi_os_set_file_offset(ACPI_FILE file, long offset, u8 from); | ||||
| #endif | ||||
| 
 | ||||
| #endif				/* __ACPIOSXF_H__ */ | ||||
							
								
								
									
										912
									
								
								include/acpi/acpixf.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										912
									
								
								include/acpi/acpixf.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,912 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acpixf.h - External interfaces to the ACPI subsystem | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACXFACE_H__ | ||||
| #define __ACXFACE_H__ | ||||
| 
 | ||||
| /* Current ACPICA subsystem version in YYYYMMDD format */ | ||||
| 
 | ||||
| #define ACPI_CA_VERSION                 0x20140926 | ||||
| 
 | ||||
| #include <acpi/acconfig.h> | ||||
| #include <acpi/actypes.h> | ||||
| #include <acpi/actbl.h> | ||||
| #include <acpi/acbuffer.h> | ||||
| 
 | ||||
| /*****************************************************************************
 | ||||
|  * | ||||
|  * Macros used for ACPICA globals and configuration | ||||
|  * | ||||
|  ****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Ensure that global variables are defined and initialized only once. | ||||
|  * | ||||
|  * The use of these macros allows for a single list of globals (here) | ||||
|  * in order to simplify maintenance of the code. | ||||
|  */ | ||||
| #ifdef DEFINE_ACPI_GLOBALS | ||||
| #define ACPI_GLOBAL(type,name) \ | ||||
| 	extern type name; \ | ||||
| 	type name | ||||
| 
 | ||||
| #define ACPI_INIT_GLOBAL(type,name,value) \ | ||||
| 	type name=value | ||||
| 
 | ||||
| #else | ||||
| #ifndef ACPI_GLOBAL | ||||
| #define ACPI_GLOBAL(type,name) \ | ||||
| 	extern type name | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_INIT_GLOBAL | ||||
| #define ACPI_INIT_GLOBAL(type,name,value) \ | ||||
| 	extern type name | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * These macros configure the various ACPICA interfaces. They are | ||||
|  * useful for generating stub inline functions for features that are | ||||
|  * configured out of the current kernel or ACPICA application. | ||||
|  */ | ||||
| #ifndef ACPI_EXTERNAL_RETURN_STATUS | ||||
| #define ACPI_EXTERNAL_RETURN_STATUS(prototype) \ | ||||
| 	prototype; | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_EXTERNAL_RETURN_OK | ||||
| #define ACPI_EXTERNAL_RETURN_OK(prototype) \ | ||||
| 	prototype; | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_EXTERNAL_RETURN_VOID | ||||
| #define ACPI_EXTERNAL_RETURN_VOID(prototype) \ | ||||
| 	prototype; | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_EXTERNAL_RETURN_UINT32 | ||||
| #define ACPI_EXTERNAL_RETURN_UINT32(prototype) \ | ||||
| 	prototype; | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_EXTERNAL_RETURN_PTR | ||||
| #define ACPI_EXTERNAL_RETURN_PTR(prototype) \ | ||||
| 	prototype; | ||||
| #endif | ||||
| 
 | ||||
| /*****************************************************************************
 | ||||
|  * | ||||
|  * Public globals and runtime configuration options | ||||
|  * | ||||
|  ****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Enable "slack mode" of the AML interpreter?  Default is FALSE, and the | ||||
|  * interpreter strictly follows the ACPI specification. Setting to TRUE | ||||
|  * allows the interpreter to ignore certain errors and/or bad AML constructs. | ||||
|  * | ||||
|  * Currently, these features are enabled by this flag: | ||||
|  * | ||||
|  * 1) Allow "implicit return" of last value in a control method | ||||
|  * 2) Allow access beyond the end of an operation region | ||||
|  * 3) Allow access to uninitialized locals/args (auto-init to integer 0) | ||||
|  * 4) Allow ANY object type to be a source operand for the Store() operator | ||||
|  * 5) Allow unresolved references (invalid target name) in package objects | ||||
|  * 6) Enable warning messages for behavior that is not ACPI spec compliant | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_enable_interpreter_slack, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Automatically serialize all methods that create named objects? Default | ||||
|  * is TRUE, meaning that all non_serialized methods are scanned once at | ||||
|  * table load time to determine those that create named objects. Methods | ||||
|  * that create named objects are marked Serialized in order to prevent | ||||
|  * possible run-time problems if they are entered by more than one thread. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_auto_serialize_methods, TRUE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Create the predefined _OSI method in the namespace? Default is TRUE | ||||
|  * because ACPICA is fully compatible with other ACPI implementations. | ||||
|  * Changing this will revert ACPICA (and machine ASL) to pre-OSI behavior. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_create_osi_method, TRUE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Optionally use default values for the ACPI register widths. Set this to | ||||
|  * TRUE to use the defaults, if an FADT contains incorrect widths/lengths. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_use_default_register_widths, TRUE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Whether or not to verify the table checksum before installation. Set | ||||
|  * this to TRUE to verify the table checksum before install it to the table | ||||
|  * manager. Note that enabling this option causes errors to happen in some | ||||
|  * OSPMs during early initialization stages. Default behavior is to do such | ||||
|  * verification. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_verify_table_checksum, TRUE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Optionally enable output from the AML Debug Object. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_enable_aml_debug_object, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Optionally copy the entire DSDT to local memory (instead of simply | ||||
|  * mapping it.) There are some BIOSs that corrupt or replace the original | ||||
|  * DSDT, creating the need for this option. Default is FALSE, do not copy | ||||
|  * the DSDT. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_copy_dsdt_locally, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Optionally ignore an XSDT if present and use the RSDT instead. | ||||
|  * Although the ACPI specification requires that an XSDT be used instead | ||||
|  * of the RSDT, the XSDT has been found to be corrupt or ill-formed on | ||||
|  * some machines. Default behavior is to use the XSDT if present. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_do_not_use_xsdt, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Optionally use 32-bit FADT addresses if and when there is a conflict | ||||
|  * (address mismatch) between the 32-bit and 64-bit versions of the | ||||
|  * address. Although ACPICA adheres to the ACPI specification which | ||||
|  * requires the use of the corresponding 64-bit address if it is non-zero, | ||||
|  * some machines have been found to have a corrupted non-zero 64-bit | ||||
|  * address. Default is TRUE, favor the 32-bit addresses. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_use32_bit_fadt_addresses, TRUE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Optionally truncate I/O addresses to 16 bits. Provides compatibility | ||||
|  * with other ACPI implementations. NOTE: During ACPICA initialization, | ||||
|  * this value is set to TRUE if any Windows OSI strings have been | ||||
|  * requested by the BIOS. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_truncate_io_addresses, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Disable runtime checking and repair of values returned by control methods. | ||||
|  * Use only if the repair is causing a problem on a particular machine. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_auto_repair, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * Optionally do not install any SSDTs from the RSDT/XSDT during initialization. | ||||
|  * This can be useful for debugging ACPI problems on some machines. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_ssdt_table_install, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * We keep track of the latest version of Windows that has been requested by | ||||
|  * the BIOS. ACPI 5.0. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_osi_data, 0); | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning | ||||
|  * that the ACPI hardware is no longer required. A flag in the FADT indicates | ||||
|  * a reduced HW machine, and that flag is duplicated here for convenience. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u8, acpi_gbl_reduced_hardware, FALSE); | ||||
| 
 | ||||
| /*
 | ||||
|  * This mechanism is used to trace a specified AML method. The method is | ||||
|  * traced each time it is executed. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u32, acpi_gbl_trace_flags, 0); | ||||
| ACPI_INIT_GLOBAL(acpi_name, acpi_gbl_trace_method_name, 0); | ||||
| 
 | ||||
| /*
 | ||||
|  * Runtime configuration of debug output control masks. We want the debug | ||||
|  * switches statically initialized so they are already set when the debugger | ||||
|  * is entered. | ||||
|  */ | ||||
| ACPI_INIT_GLOBAL(u32, acpi_dbg_level, ACPI_DEBUG_DEFAULT); | ||||
| ACPI_INIT_GLOBAL(u32, acpi_dbg_layer, 0); | ||||
| 
 | ||||
| /*
 | ||||
|  * Other miscellaneous globals | ||||
|  */ | ||||
| ACPI_GLOBAL(struct acpi_table_fadt, acpi_gbl_FADT); | ||||
| ACPI_GLOBAL(u32, acpi_current_gpe_count); | ||||
| ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running); | ||||
| 
 | ||||
| /*****************************************************************************
 | ||||
|  * | ||||
|  * ACPICA public interface configuration. | ||||
|  * | ||||
|  * Interfaces that are configured out of the ACPICA build are replaced | ||||
|  * by inlined stubs by default. | ||||
|  * | ||||
|  ****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Hardware-reduced prototypes (default: Not hardware reduced). | ||||
|  * | ||||
|  * All ACPICA hardware-related interfaces that use these macros will be | ||||
|  * configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag | ||||
|  * is set to TRUE. | ||||
|  * | ||||
|  * Note: This static build option for reduced hardware is intended to | ||||
|  * reduce ACPICA code size if desired or necessary. However, even if this | ||||
|  * option is not specified, the runtime behavior of ACPICA is dependent | ||||
|  * on the actual FADT reduced hardware flag (HW_REDUCED_ACPI). If set, | ||||
|  * the flag will enable similar behavior -- ACPICA will not attempt | ||||
|  * to access any ACPI-relate hardware (SCI, GPEs, Fixed Events, etc.) | ||||
|  */ | ||||
| #if (!ACPI_REDUCED_HARDWARE) | ||||
| #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \ | ||||
| 	ACPI_EXTERNAL_RETURN_STATUS(prototype) | ||||
| 
 | ||||
| #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \ | ||||
| 	ACPI_EXTERNAL_RETURN_OK(prototype) | ||||
| 
 | ||||
| #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	ACPI_EXTERNAL_RETURN_VOID(prototype) | ||||
| 
 | ||||
| #else | ||||
| #define ACPI_HW_DEPENDENT_RETURN_STATUS(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);} | ||||
| 
 | ||||
| #define ACPI_HW_DEPENDENT_RETURN_OK(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return(AE_OK);} | ||||
| 
 | ||||
| #define ACPI_HW_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return;} | ||||
| 
 | ||||
| #endif				/* !ACPI_REDUCED_HARDWARE */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Error message prototypes (default: error messages enabled). | ||||
|  * | ||||
|  * All interfaces related to error and warning messages | ||||
|  * will be configured out of the ACPICA build if the | ||||
|  * ACPI_NO_ERROR_MESSAGE flag is defined. | ||||
|  */ | ||||
| #ifndef ACPI_NO_ERROR_MESSAGES | ||||
| #define ACPI_MSG_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	prototype; | ||||
| 
 | ||||
| #else | ||||
| #define ACPI_MSG_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return;} | ||||
| 
 | ||||
| #endif				/* ACPI_NO_ERROR_MESSAGES */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Debugging output prototypes (default: no debug output). | ||||
|  * | ||||
|  * All interfaces related to debug output messages | ||||
|  * will be configured out of the ACPICA build unless the | ||||
|  * ACPI_DEBUG_OUTPUT flag is defined. | ||||
|  */ | ||||
| #ifdef ACPI_DEBUG_OUTPUT | ||||
| #define ACPI_DBG_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	prototype; | ||||
| 
 | ||||
| #else | ||||
| #define ACPI_DBG_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return;} | ||||
| 
 | ||||
| #endif				/* ACPI_DEBUG_OUTPUT */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Application prototypes | ||||
|  * | ||||
|  * All interfaces used by application will be configured | ||||
|  * out of the ACPICA build unless the ACPI_APPLICATION | ||||
|  * flag is defined. | ||||
|  */ | ||||
| #ifdef ACPI_APPLICATION | ||||
| #define ACPI_APP_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	prototype; | ||||
| 
 | ||||
| #else | ||||
| #define ACPI_APP_DEPENDENT_RETURN_VOID(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return;} | ||||
| 
 | ||||
| #endif				/* ACPI_APPLICATION */ | ||||
| 
 | ||||
| /*****************************************************************************
 | ||||
|  * | ||||
|  * ACPICA public interface prototypes | ||||
|  * | ||||
|  ****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Initialization | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init | ||||
| 			    acpi_initialize_tables(struct acpi_table_desc | ||||
| 						   *initial_storage, | ||||
| 						   u32 initial_table_count, | ||||
| 						   u8 allow_resize)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_initialize_subsystem(void)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_enable_subsystem(u32 flags)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init | ||||
| 			    acpi_initialize_objects(u32 flags)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_terminate(void)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Miscellaneous global interfaces | ||||
|  */ | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable(void)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable(void)) | ||||
| #ifdef ACPI_FUTURE_USAGE | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_subsystem_status(void)) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef ACPI_FUTURE_USAGE | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_system_info(struct acpi_buffer | ||||
| 						 *ret_buffer)) | ||||
| #endif | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_statistics(struct acpi_statistics *stats)) | ||||
| ACPI_EXTERNAL_RETURN_PTR(const char | ||||
| 			  *acpi_format_exception(acpi_status exception)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_purge_cached_objects(void)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_install_interface(acpi_string interface_name)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_remove_interface(acpi_string interface_name)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_update_interfaces(u8 action)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_UINT32(u32 | ||||
| 			    acpi_check_address_range(acpi_adr_space_type | ||||
| 						     space_id, | ||||
| 						     acpi_physical_address | ||||
| 						     address, acpi_size length, | ||||
| 						     u8 warn)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_decode_pld_buffer(u8 *in_buffer, | ||||
| 						    acpi_size length, | ||||
| 						    struct acpi_pld_info | ||||
| 						    **return_buffer)) | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI table load/unload interfaces | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init | ||||
| 			    acpi_install_table(acpi_physical_address address, | ||||
| 					       u8 physical)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_load_table(struct acpi_table_header *table)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_unload_parent_table(acpi_handle object)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_load_tables(void)) | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI table manipulation interfaces | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_reallocate_root_table(void)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init | ||||
| 			    acpi_find_root_pointer(acpi_size * rsdp_address)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_table_header(acpi_string signature, | ||||
| 						  u32 instance, | ||||
| 						  struct acpi_table_header | ||||
| 						  *out_table_header)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_table(acpi_string signature, u32 instance, | ||||
| 					    struct acpi_table_header | ||||
| 					    **out_table)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_table_by_index(u32 table_index, | ||||
| 						     struct acpi_table_header | ||||
| 						     **out_table)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_install_table_handler(acpi_table_handler | ||||
| 							handler, void *context)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_remove_table_handler(acpi_table_handler | ||||
| 						       handler)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Namespace and name interfaces | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_walk_namespace(acpi_object_type type, | ||||
| 						acpi_handle start_object, | ||||
| 						u32 max_depth, | ||||
| 						acpi_walk_callback | ||||
| 						descending_callback, | ||||
| 						acpi_walk_callback | ||||
| 						ascending_callback, | ||||
| 						void *context, | ||||
| 						void **return_value)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_devices(const char *HID, | ||||
| 					      acpi_walk_callback user_function, | ||||
| 					      void *context, | ||||
| 					      void **return_value)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_name(acpi_handle object, u32 name_type, | ||||
| 					   struct acpi_buffer *ret_path_ptr)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_handle(acpi_handle parent, | ||||
| 					     acpi_string pathname, | ||||
| 					     acpi_handle * ret_handle)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_attach_data(acpi_handle object, | ||||
| 					      acpi_object_handler handler, | ||||
| 					      void *data)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_detach_data(acpi_handle object, | ||||
| 					      acpi_object_handler handler)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_data(acpi_handle object, | ||||
| 					   acpi_object_handler handler, | ||||
| 					   void **data)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_debug_trace(char *name, u32 debug_level, | ||||
| 					      u32 debug_layer, u32 flags)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Object manipulation and enumeration | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_evaluate_object(acpi_handle object, | ||||
| 						 acpi_string pathname, | ||||
| 						 struct acpi_object_list | ||||
| 						 *parameter_objects, | ||||
| 						 struct acpi_buffer | ||||
| 						 *return_object_buffer)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_evaluate_object_typed(acpi_handle object, | ||||
| 							acpi_string pathname, | ||||
| 							struct acpi_object_list | ||||
| 							*external_params, | ||||
| 							struct acpi_buffer | ||||
| 							*return_buffer, | ||||
| 							acpi_object_type | ||||
| 							return_type)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_object_info(acpi_handle object, | ||||
| 						  struct acpi_device_info | ||||
| 						  **return_buffer)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_method(u8 *buffer)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_next_object(acpi_object_type type, | ||||
| 						 acpi_handle parent, | ||||
| 						 acpi_handle child, | ||||
| 						 acpi_handle * out_handle)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_type(acpi_handle object, | ||||
| 					  acpi_object_type * out_type)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_parent(acpi_handle object, | ||||
| 					    acpi_handle * out_handle)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Handler interfaces | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_install_initialization_handler | ||||
| 			    (acpi_init_handler handler, u32 function)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_install_sci_handler(acpi_sci_handler | ||||
| 							  address, | ||||
| 							  void *context)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_remove_sci_handler(acpi_sci_handler | ||||
| 							 address)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_install_global_event_handler | ||||
| 				 (acpi_gbl_event_handler handler, | ||||
| 				  void *context)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_install_fixed_event_handler(u32 | ||||
| 								  acpi_event, | ||||
| 								  acpi_event_handler | ||||
| 								  handler, | ||||
| 								  void | ||||
| 								  *context)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_remove_fixed_event_handler(u32 acpi_event, | ||||
| 								 acpi_event_handler | ||||
| 								 handler)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_install_gpe_handler(acpi_handle | ||||
| 							  gpe_device, | ||||
| 							  u32 gpe_number, | ||||
| 							  u32 type, | ||||
| 							  acpi_gpe_handler | ||||
| 							  address, | ||||
| 							  void *context)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_remove_gpe_handler(acpi_handle gpe_device, | ||||
| 							 u32 gpe_number, | ||||
| 							 acpi_gpe_handler | ||||
| 							 address)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_install_notify_handler(acpi_handle device, | ||||
| 							 u32 handler_type, | ||||
| 							 acpi_notify_handler | ||||
| 							 handler, | ||||
| 							 void *context)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_remove_notify_handler(acpi_handle device, | ||||
| 							u32 handler_type, | ||||
| 							acpi_notify_handler | ||||
| 							handler)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_install_address_space_handler(acpi_handle | ||||
| 								device, | ||||
| 								acpi_adr_space_type | ||||
| 								space_id, | ||||
| 								acpi_adr_space_handler | ||||
| 								handler, | ||||
| 								acpi_adr_space_setup | ||||
| 								setup, | ||||
| 								void *context)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_remove_address_space_handler(acpi_handle | ||||
| 							       device, | ||||
| 							       acpi_adr_space_type | ||||
| 							       space_id, | ||||
| 							       acpi_adr_space_handler | ||||
| 							       handler)) | ||||
| #ifdef ACPI_FUTURE_USAGE | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_install_exception_handler | ||||
| 			     (acpi_exception_handler handler)) | ||||
| #endif | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_install_interface_handler | ||||
| 			     (acpi_interface_handler handler)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Global Lock interfaces | ||||
|  */ | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_acquire_global_lock(u16 timeout, | ||||
| 							 u32 *handle)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_release_global_lock(u32 handle)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Interfaces to AML mutex objects | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_acquire_mutex(acpi_handle handle, | ||||
| 					       acpi_string pathname, | ||||
| 					       u16 timeout)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_release_mutex(acpi_handle handle, | ||||
| 					       acpi_string pathname)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Fixed Event interfaces | ||||
|  */ | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_enable_event(u32 event, u32 flags)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_disable_event(u32 event, u32 flags)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_clear_event(u32 event)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_get_event_status(u32 event, | ||||
| 						      acpi_event_status | ||||
| 						      *event_status)) | ||||
| 
 | ||||
| /*
 | ||||
|  * General Purpose Event (GPE) Interfaces | ||||
|  */ | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_update_all_gpes(void)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_enable_gpe(acpi_handle gpe_device, | ||||
| 						u32 gpe_number)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_disable_gpe(acpi_handle gpe_device, | ||||
| 						 u32 gpe_number)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_clear_gpe(acpi_handle gpe_device, | ||||
| 					       u32 gpe_number)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_set_gpe(acpi_handle gpe_device, | ||||
| 					     u32 gpe_number, u8 action)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_finish_gpe(acpi_handle gpe_device, | ||||
| 						u32 gpe_number)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_mark_gpe_for_wake(acpi_handle gpe_device, | ||||
| 						       u32 gpe_number)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_setup_gpe_for_wake(acpi_handle | ||||
| 							parent_device, | ||||
| 							acpi_handle gpe_device, | ||||
| 							u32 gpe_number)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_set_gpe_wake_mask(acpi_handle gpe_device, | ||||
| 							u32 gpe_number, | ||||
| 							u8 action)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_get_gpe_status(acpi_handle gpe_device, | ||||
| 						     u32 gpe_number, | ||||
| 						     acpi_event_status | ||||
| 						     *event_status)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable_all_gpes(void)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_runtime_gpes(void)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable_all_wakeup_gpes(void)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_get_gpe_device(u32 gpe_index, | ||||
| 						    acpi_handle * gpe_device)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_install_gpe_block(acpi_handle gpe_device, | ||||
| 						       struct | ||||
| 						       acpi_generic_address | ||||
| 						       *gpe_block_address, | ||||
| 						       u32 register_count, | ||||
| 						       u32 interrupt_number)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				 acpi_remove_gpe_block(acpi_handle gpe_device)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Resource interfaces | ||||
|  */ | ||||
| typedef | ||||
| acpi_status(*acpi_walk_resource_callback) (struct acpi_resource * resource, | ||||
| 					   void *context); | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_vendor_resource(acpi_handle device, | ||||
| 						     char *name, | ||||
| 						     struct acpi_vendor_uuid | ||||
| 						     *uuid, | ||||
| 						     struct acpi_buffer | ||||
| 						     *ret_buffer)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_current_resources(acpi_handle device, | ||||
| 							struct acpi_buffer | ||||
| 							*ret_buffer)) | ||||
| #ifdef ACPI_FUTURE_USAGE | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_possible_resources(acpi_handle device, | ||||
| 							 struct acpi_buffer | ||||
| 							 *ret_buffer)) | ||||
| #endif | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_event_resources(acpi_handle device_handle, | ||||
| 						      struct acpi_buffer | ||||
| 						      *ret_buffer)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_walk_resource_buffer(struct acpi_buffer | ||||
| 						       *buffer, | ||||
| 						       acpi_walk_resource_callback | ||||
| 						       user_function, | ||||
| 						       void *context)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_walk_resources(acpi_handle device, char *name, | ||||
| 						 acpi_walk_resource_callback | ||||
| 						 user_function, void *context)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_set_current_resources(acpi_handle device, | ||||
| 							struct acpi_buffer | ||||
| 							*in_buffer)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_get_irq_routing_table(acpi_handle device, | ||||
| 							struct acpi_buffer | ||||
| 							*ret_buffer)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_resource_to_address64(struct acpi_resource | ||||
| 							*resource, | ||||
| 							struct | ||||
| 							acpi_resource_address64 | ||||
| 							*out)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			     acpi_buffer_to_resource(u8 *aml_buffer, | ||||
| 						     u16 aml_buffer_length, | ||||
| 						     struct acpi_resource | ||||
| 						     **resource_ptr)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Hardware (ACPI device) interfaces | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_reset(void)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_read(u64 *value, | ||||
| 				      struct acpi_generic_address *reg)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_write(u64 value, | ||||
| 				       struct acpi_generic_address *reg)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_read_bit_register(u32 register_id, | ||||
| 						       u32 *return_value)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_write_bit_register(u32 register_id, | ||||
| 							u32 value)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Sleep/Wake interfaces | ||||
|  */ | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_sleep_type_data(u8 sleep_state, | ||||
| 						     u8 *slp_typ_a, | ||||
| 						     u8 *slp_typ_b)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_enter_sleep_state_prep(u8 sleep_state)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_enter_sleep_state(u8 sleep_state)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enter_sleep_state_s4bios(void)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_leave_sleep_state_prep(u8 sleep_state)) | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_leave_sleep_state(u8 sleep_state)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_set_firmware_waking_vector(u32 | ||||
| 								physical_address)) | ||||
| #if ACPI_MACHINE_WIDTH == 64 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_set_firmware_waking_vector64(u64 | ||||
| 								  physical_address)) | ||||
| #endif | ||||
| /*
 | ||||
|  * ACPI Timer interfaces | ||||
|  */ | ||||
| #ifdef ACPI_FUTURE_USAGE | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_get_timer_resolution(u32 *resolution)) | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_get_timer(u32 *ticks)) | ||||
| 
 | ||||
| ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status | ||||
| 				acpi_get_timer_duration(u32 start_ticks, | ||||
| 							u32 end_ticks, | ||||
| 							u32 *time_elapsed)) | ||||
| #endif				/* ACPI_FUTURE_USAGE */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Error/Warning output | ||||
|  */ | ||||
| ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) | ||||
| 			       void ACPI_INTERNAL_VAR_XFACE | ||||
| 			       acpi_error(const char *module_name, | ||||
| 					  u32 line_number, | ||||
| 					  const char *format, ...)) | ||||
| ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(4) | ||||
| 				void ACPI_INTERNAL_VAR_XFACE | ||||
| 				acpi_exception(const char *module_name, | ||||
| 					       u32 line_number, | ||||
| 					       acpi_status status, | ||||
| 					       const char *format, ...)) | ||||
| ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) | ||||
| 				void ACPI_INTERNAL_VAR_XFACE | ||||
| 				acpi_warning(const char *module_name, | ||||
| 					     u32 line_number, | ||||
| 					     const char *format, ...)) | ||||
| ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) | ||||
| 				void ACPI_INTERNAL_VAR_XFACE | ||||
| 				acpi_info(const char *module_name, | ||||
| 					  u32 line_number, | ||||
| 					  const char *format, ...)) | ||||
| ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) | ||||
| 				void ACPI_INTERNAL_VAR_XFACE | ||||
| 				acpi_bios_error(const char *module_name, | ||||
| 						u32 line_number, | ||||
| 						const char *format, ...)) | ||||
| ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3) | ||||
| 				void ACPI_INTERNAL_VAR_XFACE | ||||
| 				acpi_bios_warning(const char *module_name, | ||||
| 						  u32 line_number, | ||||
| 						  const char *format, ...)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Debug output | ||||
|  */ | ||||
| ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6) | ||||
| 			       void ACPI_INTERNAL_VAR_XFACE | ||||
| 			       acpi_debug_print(u32 requested_debug_level, | ||||
| 						u32 line_number, | ||||
| 						const char *function_name, | ||||
| 						const char *module_name, | ||||
| 						u32 component_id, | ||||
| 						const char *format, ...)) | ||||
| ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6) | ||||
| 				void ACPI_INTERNAL_VAR_XFACE | ||||
| 				acpi_debug_print_raw(u32 requested_debug_level, | ||||
| 						     u32 line_number, | ||||
| 						     const char *function_name, | ||||
| 						     const char *module_name, | ||||
| 						     u32 component_id, | ||||
| 						     const char *format, ...)) | ||||
| ACPI_APP_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(1) | ||||
| 				void ACPI_INTERNAL_VAR_XFACE | ||||
| 				acpi_log_error(const char *format, ...)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Divergences | ||||
|  */ | ||||
| ACPI_GLOBAL(u8, acpi_gbl_permanent_mmap); | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_id(acpi_handle object, | ||||
| 					acpi_owner_id * out_type)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_unload_table_id(acpi_owner_id id)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_table_with_size(acpi_string signature, | ||||
| 						     u32 instance, | ||||
| 						     struct acpi_table_header | ||||
| 						     **out_table, | ||||
| 						     acpi_size *tbl_size)) | ||||
| 
 | ||||
| ACPI_EXTERNAL_RETURN_STATUS(acpi_status | ||||
| 			    acpi_get_data_full(acpi_handle object, | ||||
| 					       acpi_object_handler handler, | ||||
| 					       void **data, | ||||
| 					       void (*callback)(void *))) | ||||
| 
 | ||||
| #endif				/* __ACXFACE_H__ */ | ||||
							
								
								
									
										613
									
								
								include/acpi/acrestyp.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										613
									
								
								include/acpi/acrestyp.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,613 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acrestyp.h - Defines, types, and structures for resource descriptors | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACRESTYP_H__ | ||||
| #define __ACRESTYP_H__ | ||||
| 
 | ||||
| /*
 | ||||
|  * Definitions for Resource Attributes | ||||
|  */ | ||||
| typedef u16 acpi_rs_length;	/* Resource Length field is fixed at 16 bits */ | ||||
| typedef u32 acpi_rsdesc_size;	/* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Memory Attributes | ||||
|  */ | ||||
| #define ACPI_READ_ONLY_MEMORY           (u8) 0x00 | ||||
| #define ACPI_READ_WRITE_MEMORY          (u8) 0x01 | ||||
| 
 | ||||
| #define ACPI_NON_CACHEABLE_MEMORY       (u8) 0x00 | ||||
| #define ACPI_CACHABLE_MEMORY            (u8) 0x01 | ||||
| #define ACPI_WRITE_COMBINING_MEMORY     (u8) 0x02 | ||||
| #define ACPI_PREFETCHABLE_MEMORY        (u8) 0x03 | ||||
| 
 | ||||
| /*! [Begin] no source code translation */ | ||||
| /*
 | ||||
|  * IO Attributes | ||||
|  * The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh. | ||||
|  * The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh. | ||||
|  */ | ||||
| /*! [End] no source code translation !*/ | ||||
| 
 | ||||
| #define ACPI_NON_ISA_ONLY_RANGES        (u8) 0x01 | ||||
| #define ACPI_ISA_ONLY_RANGES            (u8) 0x02 | ||||
| #define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES) | ||||
| 
 | ||||
| /* Type of translation - 1=Sparse, 0=Dense */ | ||||
| 
 | ||||
| #define ACPI_SPARSE_TRANSLATION         (u8) 0x01 | ||||
| 
 | ||||
| /*
 | ||||
|  * IO Port Descriptor Decode | ||||
|  */ | ||||
| #define ACPI_DECODE_10                  (u8) 0x00	/* 10-bit IO address decode */ | ||||
| #define ACPI_DECODE_16                  (u8) 0x01	/* 16-bit IO address decode */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Interrupt attributes - used in multiple descriptors | ||||
|  */ | ||||
| 
 | ||||
| /* Triggering */ | ||||
| 
 | ||||
| #define ACPI_LEVEL_SENSITIVE            (u8) 0x00 | ||||
| #define ACPI_EDGE_SENSITIVE             (u8) 0x01 | ||||
| 
 | ||||
| /* Polarity */ | ||||
| 
 | ||||
| #define ACPI_ACTIVE_HIGH                (u8) 0x00 | ||||
| #define ACPI_ACTIVE_LOW                 (u8) 0x01 | ||||
| #define ACPI_ACTIVE_BOTH                (u8) 0x02 | ||||
| 
 | ||||
| /* Sharing */ | ||||
| 
 | ||||
| #define ACPI_EXCLUSIVE                  (u8) 0x00 | ||||
| #define ACPI_SHARED                     (u8) 0x01 | ||||
| 
 | ||||
| /* Wake */ | ||||
| 
 | ||||
| #define ACPI_NOT_WAKE_CAPABLE           (u8) 0x00 | ||||
| #define ACPI_WAKE_CAPABLE               (u8) 0x01 | ||||
| 
 | ||||
| /*
 | ||||
|  * DMA Attributes | ||||
|  */ | ||||
| #define ACPI_COMPATIBILITY              (u8) 0x00 | ||||
| #define ACPI_TYPE_A                     (u8) 0x01 | ||||
| #define ACPI_TYPE_B                     (u8) 0x02 | ||||
| #define ACPI_TYPE_F                     (u8) 0x03 | ||||
| 
 | ||||
| #define ACPI_NOT_BUS_MASTER             (u8) 0x00 | ||||
| #define ACPI_BUS_MASTER                 (u8) 0x01 | ||||
| 
 | ||||
| #define ACPI_TRANSFER_8                 (u8) 0x00 | ||||
| #define ACPI_TRANSFER_8_16              (u8) 0x01 | ||||
| #define ACPI_TRANSFER_16                (u8) 0x02 | ||||
| 
 | ||||
| /*
 | ||||
|  * Start Dependent Functions Priority definitions | ||||
|  */ | ||||
| #define ACPI_GOOD_CONFIGURATION         (u8) 0x00 | ||||
| #define ACPI_ACCEPTABLE_CONFIGURATION   (u8) 0x01 | ||||
| #define ACPI_SUB_OPTIMAL_CONFIGURATION  (u8) 0x02 | ||||
| 
 | ||||
| /*
 | ||||
|  * 16, 32 and 64-bit Address Descriptor resource types | ||||
|  */ | ||||
| #define ACPI_MEMORY_RANGE               (u8) 0x00 | ||||
| #define ACPI_IO_RANGE                   (u8) 0x01 | ||||
| #define ACPI_BUS_NUMBER_RANGE           (u8) 0x02 | ||||
| 
 | ||||
| #define ACPI_ADDRESS_NOT_FIXED          (u8) 0x00 | ||||
| #define ACPI_ADDRESS_FIXED              (u8) 0x01 | ||||
| 
 | ||||
| #define ACPI_POS_DECODE                 (u8) 0x00 | ||||
| #define ACPI_SUB_DECODE                 (u8) 0x01 | ||||
| 
 | ||||
| /* Producer/Consumer */ | ||||
| 
 | ||||
| #define ACPI_PRODUCER                   (u8) 0x00 | ||||
| #define ACPI_CONSUMER                   (u8) 0x01 | ||||
| 
 | ||||
| /*
 | ||||
|  * If possible, pack the following structures to byte alignment | ||||
|  */ | ||||
| #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED | ||||
| #pragma pack(1) | ||||
| #endif | ||||
| 
 | ||||
| /* UUID data structures for use in vendor-defined resource descriptors */ | ||||
| 
 | ||||
| struct acpi_uuid { | ||||
| 	u8 data[ACPI_UUID_LENGTH]; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_vendor_uuid { | ||||
| 	u8 subtype; | ||||
| 	u8 data[ACPI_UUID_LENGTH]; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Structures used to describe device resources | ||||
|  */ | ||||
| struct acpi_resource_irq { | ||||
| 	u8 descriptor_length; | ||||
| 	u8 triggering; | ||||
| 	u8 polarity; | ||||
| 	u8 sharable; | ||||
| 	u8 wake_capable; | ||||
| 	u8 interrupt_count; | ||||
| 	u8 interrupts[1]; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_dma { | ||||
| 	u8 type; | ||||
| 	u8 bus_master; | ||||
| 	u8 transfer; | ||||
| 	u8 channel_count; | ||||
| 	u8 channels[1]; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_start_dependent { | ||||
| 	u8 descriptor_length; | ||||
| 	u8 compatibility_priority; | ||||
| 	u8 performance_robustness; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not | ||||
|  * needed because it has no fields | ||||
|  */ | ||||
| 
 | ||||
| struct acpi_resource_io { | ||||
| 	u8 io_decode; | ||||
| 	u8 alignment; | ||||
| 	u8 address_length; | ||||
| 	u16 minimum; | ||||
| 	u16 maximum; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_fixed_io { | ||||
| 	u16 address; | ||||
| 	u8 address_length; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_fixed_dma { | ||||
| 	u16 request_lines; | ||||
| 	u16 channels; | ||||
| 	u8 width; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Width field above */ | ||||
| 
 | ||||
| #define ACPI_DMA_WIDTH8                         0 | ||||
| #define ACPI_DMA_WIDTH16                        1 | ||||
| #define ACPI_DMA_WIDTH32                        2 | ||||
| #define ACPI_DMA_WIDTH64                        3 | ||||
| #define ACPI_DMA_WIDTH128                       4 | ||||
| #define ACPI_DMA_WIDTH256                       5 | ||||
| 
 | ||||
| struct acpi_resource_vendor { | ||||
| 	u16 byte_length; | ||||
| 	u8 byte_data[1]; | ||||
| }; | ||||
| 
 | ||||
| /* Vendor resource with UUID info (introduced in ACPI 3.0) */ | ||||
| 
 | ||||
| struct acpi_resource_vendor_typed { | ||||
| 	u16 byte_length; | ||||
| 	u8 uuid_subtype; | ||||
| 	u8 uuid[ACPI_UUID_LENGTH]; | ||||
| 	u8 byte_data[1]; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_end_tag { | ||||
| 	u8 checksum; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_memory24 { | ||||
| 	u8 write_protect; | ||||
| 	u16 minimum; | ||||
| 	u16 maximum; | ||||
| 	u16 alignment; | ||||
| 	u16 address_length; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_memory32 { | ||||
| 	u8 write_protect; | ||||
| 	u32 minimum; | ||||
| 	u32 maximum; | ||||
| 	u32 alignment; | ||||
| 	u32 address_length; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_fixed_memory32 { | ||||
| 	u8 write_protect; | ||||
| 	u32 address; | ||||
| 	u32 address_length; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_memory_attribute { | ||||
| 	u8 write_protect; | ||||
| 	u8 caching; | ||||
| 	u8 range_type; | ||||
| 	u8 translation; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_io_attribute { | ||||
| 	u8 range_type; | ||||
| 	u8 translation; | ||||
| 	u8 translation_type; | ||||
| 	u8 reserved1; | ||||
| }; | ||||
| 
 | ||||
| union acpi_resource_attribute { | ||||
| 	struct acpi_memory_attribute mem; | ||||
| 	struct acpi_io_attribute io; | ||||
| 
 | ||||
| 	/* Used for the *word_space macros */ | ||||
| 
 | ||||
| 	u8 type_specific; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_source { | ||||
| 	u8 index; | ||||
| 	u16 string_length; | ||||
| 	char *string_ptr; | ||||
| }; | ||||
| 
 | ||||
| /* Fields common to all address descriptors, 16/32/64 bit */ | ||||
| 
 | ||||
| #define ACPI_RESOURCE_ADDRESS_COMMON \ | ||||
| 	u8                                      resource_type; \ | ||||
| 	u8                                      producer_consumer; \ | ||||
| 	u8                                      decode; \ | ||||
| 	u8                                      min_address_fixed; \ | ||||
| 	u8                                      max_address_fixed; \ | ||||
| 	union acpi_resource_attribute           info; | ||||
| 
 | ||||
| struct acpi_resource_address { | ||||
| ACPI_RESOURCE_ADDRESS_COMMON}; | ||||
| 
 | ||||
| struct acpi_resource_address16 { | ||||
| 	ACPI_RESOURCE_ADDRESS_COMMON u16 granularity; | ||||
| 	u16 minimum; | ||||
| 	u16 maximum; | ||||
| 	u16 translation_offset; | ||||
| 	u16 address_length; | ||||
| 	struct acpi_resource_source resource_source; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_address32 { | ||||
| 	ACPI_RESOURCE_ADDRESS_COMMON u32 granularity; | ||||
| 	u32 minimum; | ||||
| 	u32 maximum; | ||||
| 	u32 translation_offset; | ||||
| 	u32 address_length; | ||||
| 	struct acpi_resource_source resource_source; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_address64 { | ||||
| 	ACPI_RESOURCE_ADDRESS_COMMON u64 granularity; | ||||
| 	u64 minimum; | ||||
| 	u64 maximum; | ||||
| 	u64 translation_offset; | ||||
| 	u64 address_length; | ||||
| 	struct acpi_resource_source resource_source; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_extended_address64 { | ||||
| 	ACPI_RESOURCE_ADDRESS_COMMON u8 revision_ID; | ||||
| 	u64 granularity; | ||||
| 	u64 minimum; | ||||
| 	u64 maximum; | ||||
| 	u64 translation_offset; | ||||
| 	u64 address_length; | ||||
| 	u64 type_specific; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_extended_irq { | ||||
| 	u8 producer_consumer; | ||||
| 	u8 triggering; | ||||
| 	u8 polarity; | ||||
| 	u8 sharable; | ||||
| 	u8 wake_capable; | ||||
| 	u8 interrupt_count; | ||||
| 	struct acpi_resource_source resource_source; | ||||
| 	u32 interrupts[1]; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_generic_register { | ||||
| 	u8 space_id; | ||||
| 	u8 bit_width; | ||||
| 	u8 bit_offset; | ||||
| 	u8 access_size; | ||||
| 	u64 address; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_resource_gpio { | ||||
| 	u8 revision_id; | ||||
| 	u8 connection_type; | ||||
| 	u8 producer_consumer;	/* For values, see Producer/Consumer above */ | ||||
| 	u8 pin_config; | ||||
| 	u8 sharable;		/* For values, see Interrupt Attributes above */ | ||||
| 	u8 wake_capable;	/* For values, see Interrupt Attributes above */ | ||||
| 	u8 io_restriction; | ||||
| 	u8 triggering;		/* For values, see Interrupt Attributes above */ | ||||
| 	u8 polarity;		/* For values, see Interrupt Attributes above */ | ||||
| 	u16 drive_strength; | ||||
| 	u16 debounce_timeout; | ||||
| 	u16 pin_table_length; | ||||
| 	u16 vendor_length; | ||||
| 	struct acpi_resource_source resource_source; | ||||
| 	u16 *pin_table; | ||||
| 	u8 *vendor_data; | ||||
| }; | ||||
| 
 | ||||
| /* Values for GPIO connection_type field above */ | ||||
| 
 | ||||
| #define ACPI_RESOURCE_GPIO_TYPE_INT             0 | ||||
| #define ACPI_RESOURCE_GPIO_TYPE_IO              1 | ||||
| 
 | ||||
| /* Values for pin_config field above */ | ||||
| 
 | ||||
| #define ACPI_PIN_CONFIG_DEFAULT                 0 | ||||
| #define ACPI_PIN_CONFIG_PULLUP                  1 | ||||
| #define ACPI_PIN_CONFIG_PULLDOWN                2 | ||||
| #define ACPI_PIN_CONFIG_NOPULL                  3 | ||||
| 
 | ||||
| /* Values for io_restriction field above */ | ||||
| 
 | ||||
| #define ACPI_IO_RESTRICT_NONE                   0 | ||||
| #define ACPI_IO_RESTRICT_INPUT                  1 | ||||
| #define ACPI_IO_RESTRICT_OUTPUT                 2 | ||||
| #define ACPI_IO_RESTRICT_NONE_PRESERVE          3 | ||||
| 
 | ||||
| /* Common structure for I2C, SPI, and UART serial descriptors */ | ||||
| 
 | ||||
| #define ACPI_RESOURCE_SERIAL_COMMON \ | ||||
| 	u8                                      revision_id; \ | ||||
| 	u8                                      type; \ | ||||
| 	u8                                      producer_consumer;   /* For values, see Producer/Consumer above */\ | ||||
| 	u8                                      slave_mode; \ | ||||
| 	u8                                      type_revision_id; \ | ||||
| 	u16                                     type_data_length; \ | ||||
| 	u16                                     vendor_length; \ | ||||
| 	struct acpi_resource_source             resource_source; \ | ||||
| 	u8                                      *vendor_data; | ||||
| 
 | ||||
| struct acpi_resource_common_serialbus { | ||||
| ACPI_RESOURCE_SERIAL_COMMON}; | ||||
| 
 | ||||
| /* Values for the Type field above */ | ||||
| 
 | ||||
| #define ACPI_RESOURCE_SERIAL_TYPE_I2C           1 | ||||
| #define ACPI_RESOURCE_SERIAL_TYPE_SPI           2 | ||||
| #define ACPI_RESOURCE_SERIAL_TYPE_UART          3 | ||||
| 
 | ||||
| /* Values for slave_mode field above */ | ||||
| 
 | ||||
| #define ACPI_CONTROLLER_INITIATED               0 | ||||
| #define ACPI_DEVICE_INITIATED                   1 | ||||
| 
 | ||||
| struct acpi_resource_i2c_serialbus { | ||||
| 	ACPI_RESOURCE_SERIAL_COMMON u8 access_mode; | ||||
| 	u16 slave_address; | ||||
| 	u32 connection_speed; | ||||
| }; | ||||
| 
 | ||||
| /* Values for access_mode field above */ | ||||
| 
 | ||||
| #define ACPI_I2C_7BIT_MODE                      0 | ||||
| #define ACPI_I2C_10BIT_MODE                     1 | ||||
| 
 | ||||
| struct acpi_resource_spi_serialbus { | ||||
| 	ACPI_RESOURCE_SERIAL_COMMON u8 wire_mode; | ||||
| 	u8 device_polarity; | ||||
| 	u8 data_bit_length; | ||||
| 	u8 clock_phase; | ||||
| 	u8 clock_polarity; | ||||
| 	u16 device_selection; | ||||
| 	u32 connection_speed; | ||||
| }; | ||||
| 
 | ||||
| /* Values for wire_mode field above */ | ||||
| 
 | ||||
| #define ACPI_SPI_4WIRE_MODE                     0 | ||||
| #define ACPI_SPI_3WIRE_MODE                     1 | ||||
| 
 | ||||
| /* Values for device_polarity field above */ | ||||
| 
 | ||||
| #define ACPI_SPI_ACTIVE_LOW                     0 | ||||
| #define ACPI_SPI_ACTIVE_HIGH                    1 | ||||
| 
 | ||||
| /* Values for clock_phase field above */ | ||||
| 
 | ||||
| #define ACPI_SPI_FIRST_PHASE                    0 | ||||
| #define ACPI_SPI_SECOND_PHASE                   1 | ||||
| 
 | ||||
| /* Values for clock_polarity field above */ | ||||
| 
 | ||||
| #define ACPI_SPI_START_LOW                      0 | ||||
| #define ACPI_SPI_START_HIGH                     1 | ||||
| 
 | ||||
| struct acpi_resource_uart_serialbus { | ||||
| 	ACPI_RESOURCE_SERIAL_COMMON u8 endian; | ||||
| 	u8 data_bits; | ||||
| 	u8 stop_bits; | ||||
| 	u8 flow_control; | ||||
| 	u8 parity; | ||||
| 	u8 lines_enabled; | ||||
| 	u16 rx_fifo_size; | ||||
| 	u16 tx_fifo_size; | ||||
| 	u32 default_baud_rate; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Endian field above */ | ||||
| 
 | ||||
| #define ACPI_UART_LITTLE_ENDIAN                 0 | ||||
| #define ACPI_UART_BIG_ENDIAN                    1 | ||||
| 
 | ||||
| /* Values for data_bits field above */ | ||||
| 
 | ||||
| #define ACPI_UART_5_DATA_BITS                   0 | ||||
| #define ACPI_UART_6_DATA_BITS                   1 | ||||
| #define ACPI_UART_7_DATA_BITS                   2 | ||||
| #define ACPI_UART_8_DATA_BITS                   3 | ||||
| #define ACPI_UART_9_DATA_BITS                   4 | ||||
| 
 | ||||
| /* Values for stop_bits field above */ | ||||
| 
 | ||||
| #define ACPI_UART_NO_STOP_BITS                  0 | ||||
| #define ACPI_UART_1_STOP_BIT                    1 | ||||
| #define ACPI_UART_1P5_STOP_BITS                 2 | ||||
| #define ACPI_UART_2_STOP_BITS                   3 | ||||
| 
 | ||||
| /* Values for flow_control field above */ | ||||
| 
 | ||||
| #define ACPI_UART_FLOW_CONTROL_NONE             0 | ||||
| #define ACPI_UART_FLOW_CONTROL_HW               1 | ||||
| #define ACPI_UART_FLOW_CONTROL_XON_XOFF         2 | ||||
| 
 | ||||
| /* Values for Parity field above */ | ||||
| 
 | ||||
| #define ACPI_UART_PARITY_NONE                   0 | ||||
| #define ACPI_UART_PARITY_EVEN                   1 | ||||
| #define ACPI_UART_PARITY_ODD                    2 | ||||
| #define ACPI_UART_PARITY_MARK                   3 | ||||
| #define ACPI_UART_PARITY_SPACE                  4 | ||||
| 
 | ||||
| /* Values for lines_enabled bitfield above */ | ||||
| 
 | ||||
| #define ACPI_UART_CARRIER_DETECT                (1<<2) | ||||
| #define ACPI_UART_RING_INDICATOR                (1<<3) | ||||
| #define ACPI_UART_DATA_SET_READY                (1<<4) | ||||
| #define ACPI_UART_DATA_TERMINAL_READY           (1<<5) | ||||
| #define ACPI_UART_CLEAR_TO_SEND                 (1<<6) | ||||
| #define ACPI_UART_REQUEST_TO_SEND               (1<<7) | ||||
| 
 | ||||
| /* ACPI_RESOURCE_TYPEs */ | ||||
| 
 | ||||
| #define ACPI_RESOURCE_TYPE_IRQ                  0 | ||||
| #define ACPI_RESOURCE_TYPE_DMA                  1 | ||||
| #define ACPI_RESOURCE_TYPE_START_DEPENDENT      2 | ||||
| #define ACPI_RESOURCE_TYPE_END_DEPENDENT        3 | ||||
| #define ACPI_RESOURCE_TYPE_IO                   4 | ||||
| #define ACPI_RESOURCE_TYPE_FIXED_IO             5 | ||||
| #define ACPI_RESOURCE_TYPE_VENDOR               6 | ||||
| #define ACPI_RESOURCE_TYPE_END_TAG              7 | ||||
| #define ACPI_RESOURCE_TYPE_MEMORY24             8 | ||||
| #define ACPI_RESOURCE_TYPE_MEMORY32             9 | ||||
| #define ACPI_RESOURCE_TYPE_FIXED_MEMORY32       10 | ||||
| #define ACPI_RESOURCE_TYPE_ADDRESS16            11 | ||||
| #define ACPI_RESOURCE_TYPE_ADDRESS32            12 | ||||
| #define ACPI_RESOURCE_TYPE_ADDRESS64            13 | ||||
| #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14	/* ACPI 3.0 */ | ||||
| #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15 | ||||
| #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16 | ||||
| #define ACPI_RESOURCE_TYPE_GPIO                 17	/* ACPI 5.0 */ | ||||
| #define ACPI_RESOURCE_TYPE_FIXED_DMA            18	/* ACPI 5.0 */ | ||||
| #define ACPI_RESOURCE_TYPE_SERIAL_BUS           19	/* ACPI 5.0 */ | ||||
| #define ACPI_RESOURCE_TYPE_MAX                  19 | ||||
| 
 | ||||
| /* Master union for resource descriptors */ | ||||
| 
 | ||||
| union acpi_resource_data { | ||||
| 	struct acpi_resource_irq irq; | ||||
| 	struct acpi_resource_dma dma; | ||||
| 	struct acpi_resource_start_dependent start_dpf; | ||||
| 	struct acpi_resource_io io; | ||||
| 	struct acpi_resource_fixed_io fixed_io; | ||||
| 	struct acpi_resource_fixed_dma fixed_dma; | ||||
| 	struct acpi_resource_vendor vendor; | ||||
| 	struct acpi_resource_vendor_typed vendor_typed; | ||||
| 	struct acpi_resource_end_tag end_tag; | ||||
| 	struct acpi_resource_memory24 memory24; | ||||
| 	struct acpi_resource_memory32 memory32; | ||||
| 	struct acpi_resource_fixed_memory32 fixed_memory32; | ||||
| 	struct acpi_resource_address16 address16; | ||||
| 	struct acpi_resource_address32 address32; | ||||
| 	struct acpi_resource_address64 address64; | ||||
| 	struct acpi_resource_extended_address64 ext_address64; | ||||
| 	struct acpi_resource_extended_irq extended_irq; | ||||
| 	struct acpi_resource_generic_register generic_reg; | ||||
| 	struct acpi_resource_gpio gpio; | ||||
| 	struct acpi_resource_i2c_serialbus i2c_serial_bus; | ||||
| 	struct acpi_resource_spi_serialbus spi_serial_bus; | ||||
| 	struct acpi_resource_uart_serialbus uart_serial_bus; | ||||
| 	struct acpi_resource_common_serialbus common_serial_bus; | ||||
| 
 | ||||
| 	/* Common fields */ | ||||
| 
 | ||||
| 	struct acpi_resource_address address;	/* Common 16/32/64 address fields */ | ||||
| }; | ||||
| 
 | ||||
| /* Common resource header */ | ||||
| 
 | ||||
| struct acpi_resource { | ||||
| 	u32 type; | ||||
| 	u32 length; | ||||
| 	union acpi_resource_data data; | ||||
| }; | ||||
| 
 | ||||
| /* restore default alignment */ | ||||
| 
 | ||||
| #pragma pack() | ||||
| 
 | ||||
| #define ACPI_RS_SIZE_NO_DATA                8	/* Id + Length fields */ | ||||
| #define ACPI_RS_SIZE_MIN                    (u32) ACPI_ROUND_UP_TO_NATIVE_WORD (12) | ||||
| #define ACPI_RS_SIZE(type)                  (u32) (ACPI_RS_SIZE_NO_DATA + sizeof (type)) | ||||
| 
 | ||||
| /* Macro for walking resource templates with multiple descriptors */ | ||||
| 
 | ||||
| #define ACPI_NEXT_RESOURCE(res) \ | ||||
| 	ACPI_ADD_PTR (struct acpi_resource, (res), (res)->length) | ||||
| 
 | ||||
| struct acpi_pci_routing_table { | ||||
| 	u32 length; | ||||
| 	u32 pin; | ||||
| 	u64 address;		/* here for 64-bit alignment */ | ||||
| 	u32 source_index; | ||||
| 	char source[4];		/* pad to 64 bits so sizeof() works in all cases */ | ||||
| }; | ||||
| 
 | ||||
| #endif				/* __ACRESTYP_H__ */ | ||||
							
								
								
									
										412
									
								
								include/acpi/actbl.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										412
									
								
								include/acpi/actbl.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,412 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: actbl.h - Basic ACPI Table Definitions | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACTBL_H__ | ||||
| #define __ACTBL_H__ | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * Fundamental ACPI tables | ||||
|  * | ||||
|  * This file contains definitions for the ACPI tables that are directly consumed | ||||
|  * by ACPICA. All other tables are consumed by the OS-dependent ACPI-related | ||||
|  * device drivers and other OS support code. | ||||
|  * | ||||
|  * The RSDP and FACS do not use the common ACPI table header. All other ACPI | ||||
|  * tables use the header. | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Values for description table header signatures for tables defined in this | ||||
|  * file. Useful because they make it more difficult to inadvertently type in | ||||
|  * the wrong signature. | ||||
|  */ | ||||
| #define ACPI_SIG_DSDT           "DSDT"	/* Differentiated System Description Table */ | ||||
| #define ACPI_SIG_FADT           "FACP"	/* Fixed ACPI Description Table */ | ||||
| #define ACPI_SIG_FACS           "FACS"	/* Firmware ACPI Control Structure */ | ||||
| #define ACPI_SIG_PSDT           "PSDT"	/* Persistent System Description Table */ | ||||
| #define ACPI_SIG_RSDP           "RSD PTR "	/* Root System Description Pointer */ | ||||
| #define ACPI_SIG_RSDT           "RSDT"	/* Root System Description Table */ | ||||
| #define ACPI_SIG_XSDT           "XSDT"	/* Extended  System Description Table */ | ||||
| #define ACPI_SIG_SSDT           "SSDT"	/* Secondary System Description Table */ | ||||
| #define ACPI_RSDP_NAME          "RSDP"	/* Short name for RSDP, not signature */ | ||||
| 
 | ||||
| /*
 | ||||
|  * All tables and structures must be byte-packed to match the ACPI | ||||
|  * specification, since the tables are provided by the system BIOS | ||||
|  */ | ||||
| #pragma pack(1) | ||||
| 
 | ||||
| /*
 | ||||
|  * Note: C bitfields are not used for this reason: | ||||
|  * | ||||
|  * "Bitfields are great and easy to read, but unfortunately the C language | ||||
|  * does not specify the layout of bitfields in memory, which means they are | ||||
|  * essentially useless for dealing with packed data in on-disk formats or | ||||
|  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||||
|  * this decision was a design error in C. Ritchie could have picked an order | ||||
|  * and stuck with it." Norman Ramsey. | ||||
|  * See http://stackoverflow.com/a/1053662/41661
 | ||||
|  */ | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * Master ACPI Table Header. This common header is used by all ACPI tables | ||||
|  * except the RSDP and FACS. | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_header { | ||||
| 	char signature[ACPI_NAME_SIZE];	/* ASCII table signature */ | ||||
| 	u32 length;		/* Length of table in bytes, including this header */ | ||||
| 	u8 revision;		/* ACPI Specification minor version number */ | ||||
| 	u8 checksum;		/* To make sum of entire table == 0 */ | ||||
| 	char oem_id[ACPI_OEM_ID_SIZE];	/* ASCII OEM identification */ | ||||
| 	char oem_table_id[ACPI_OEM_TABLE_ID_SIZE];	/* ASCII OEM table identification */ | ||||
| 	u32 oem_revision;	/* OEM revision number */ | ||||
| 	char asl_compiler_id[ACPI_NAME_SIZE];	/* ASCII ASL compiler vendor ID */ | ||||
| 	u32 asl_compiler_revision;	/* ASL compiler version */ | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * GAS - Generic Address Structure (ACPI 2.0+) | ||||
|  * | ||||
|  * Note: Since this structure is used in the ACPI tables, it is byte aligned. | ||||
|  * If misaligned access is not supported by the hardware, accesses to the | ||||
|  * 64-bit Address field must be performed with care. | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_generic_address { | ||||
| 	u8 space_id;		/* Address space where struct or register exists */ | ||||
| 	u8 bit_width;		/* Size in bits of given register */ | ||||
| 	u8 bit_offset;		/* Bit offset within the register */ | ||||
| 	u8 access_width;	/* Minimum Access size (ACPI 3.0) */ | ||||
| 	u64 address;		/* 64-bit address of struct or register */ | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * RSDP - Root System Description Pointer (Signature is "RSD PTR ") | ||||
|  *        Version 2 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_rsdp { | ||||
| 	char signature[8];	/* ACPI signature, contains "RSD PTR " */ | ||||
| 	u8 checksum;		/* ACPI 1.0 checksum */ | ||||
| 	char oem_id[ACPI_OEM_ID_SIZE];	/* OEM identification */ | ||||
| 	u8 revision;		/* Must be (0) for ACPI 1.0 or (2) for ACPI 2.0+ */ | ||||
| 	u32 rsdt_physical_address;	/* 32-bit physical address of the RSDT */ | ||||
| 	u32 length;		/* Table length in bytes, including header (ACPI 2.0+) */ | ||||
| 	u64 xsdt_physical_address;	/* 64-bit physical address of the XSDT (ACPI 2.0+) */ | ||||
| 	u8 extended_checksum;	/* Checksum of entire table (ACPI 2.0+) */ | ||||
| 	u8 reserved[3];		/* Reserved, must be zero */ | ||||
| }; | ||||
| 
 | ||||
| /* Standalone struct for the ACPI 1.0 RSDP */ | ||||
| 
 | ||||
| struct acpi_rsdp_common { | ||||
| 	char signature[8]; | ||||
| 	u8 checksum; | ||||
| 	char oem_id[ACPI_OEM_ID_SIZE]; | ||||
| 	u8 revision; | ||||
| 	u32 rsdt_physical_address; | ||||
| }; | ||||
| 
 | ||||
| /* Standalone struct for the extended part of the RSDP (ACPI 2.0+) */ | ||||
| 
 | ||||
| struct acpi_rsdp_extension { | ||||
| 	u32 length; | ||||
| 	u64 xsdt_physical_address; | ||||
| 	u8 extended_checksum; | ||||
| 	u8 reserved[3]; | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * RSDT/XSDT - Root System Description Tables | ||||
|  *             Version 1 (both) | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_rsdt { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u32 table_offset_entry[1];	/* Array of pointers to ACPI tables */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_table_xsdt { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u64 table_offset_entry[1];	/* Array of pointers to ACPI tables */ | ||||
| }; | ||||
| 
 | ||||
| #define ACPI_RSDT_ENTRY_SIZE        (sizeof (u32)) | ||||
| #define ACPI_XSDT_ENTRY_SIZE        (sizeof (u64)) | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * FACS - Firmware ACPI Control Structure (FACS) | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_facs { | ||||
| 	char signature[4];	/* ASCII table signature */ | ||||
| 	u32 length;		/* Length of structure, in bytes */ | ||||
| 	u32 hardware_signature;	/* Hardware configuration signature */ | ||||
| 	u32 firmware_waking_vector;	/* 32-bit physical address of the Firmware Waking Vector */ | ||||
| 	u32 global_lock;	/* Global Lock for shared hardware resources */ | ||||
| 	u32 flags; | ||||
| 	u64 xfirmware_waking_vector;	/* 64-bit version of the Firmware Waking Vector (ACPI 2.0+) */ | ||||
| 	u8 version;		/* Version of this table (ACPI 2.0+) */ | ||||
| 	u8 reserved[3];		/* Reserved, must be zero */ | ||||
| 	u32 ospm_flags;		/* Flags to be set by OSPM (ACPI 4.0) */ | ||||
| 	u8 reserved1[24];	/* Reserved, must be zero */ | ||||
| }; | ||||
| 
 | ||||
| /* Masks for global_lock flag field above */ | ||||
| 
 | ||||
| #define ACPI_GLOCK_PENDING          (1)	/* 00: Pending global lock ownership */ | ||||
| #define ACPI_GLOCK_OWNED            (1<<1)	/* 01: Global lock is owned */ | ||||
| 
 | ||||
| /* Masks for Flags field above  */ | ||||
| 
 | ||||
| #define ACPI_FACS_S4_BIOS_PRESENT   (1)	/* 00: S4BIOS support is present */ | ||||
| #define ACPI_FACS_64BIT_WAKE        (1<<1)	/* 01: 64-bit wake vector supported (ACPI 4.0) */ | ||||
| 
 | ||||
| /* Masks for ospm_flags field above */ | ||||
| 
 | ||||
| #define ACPI_FACS_64BIT_ENVIRONMENT (1)	/* 00: 64-bit wake environment is required (ACPI 4.0) */ | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * FADT - Fixed ACPI Description Table (Signature "FACP") | ||||
|  *        Version 4 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| /* Fields common to all versions of the FADT */ | ||||
| 
 | ||||
| struct acpi_table_fadt { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u32 facs;		/* 32-bit physical address of FACS */ | ||||
| 	u32 dsdt;		/* 32-bit physical address of DSDT */ | ||||
| 	u8 model;		/* System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */ | ||||
| 	u8 preferred_profile;	/* Conveys preferred power management profile to OSPM. */ | ||||
| 	u16 sci_interrupt;	/* System vector of SCI interrupt */ | ||||
| 	u32 smi_command;	/* 32-bit Port address of SMI command port */ | ||||
| 	u8 acpi_enable;		/* Value to write to SMI_CMD to enable ACPI */ | ||||
| 	u8 acpi_disable;	/* Value to write to SMI_CMD to disable ACPI */ | ||||
| 	u8 s4_bios_request;	/* Value to write to SMI_CMD to enter S4BIOS state */ | ||||
| 	u8 pstate_control;	/* Processor performance state control */ | ||||
| 	u32 pm1a_event_block;	/* 32-bit port address of Power Mgt 1a Event Reg Blk */ | ||||
| 	u32 pm1b_event_block;	/* 32-bit port address of Power Mgt 1b Event Reg Blk */ | ||||
| 	u32 pm1a_control_block;	/* 32-bit port address of Power Mgt 1a Control Reg Blk */ | ||||
| 	u32 pm1b_control_block;	/* 32-bit port address of Power Mgt 1b Control Reg Blk */ | ||||
| 	u32 pm2_control_block;	/* 32-bit port address of Power Mgt 2 Control Reg Blk */ | ||||
| 	u32 pm_timer_block;	/* 32-bit port address of Power Mgt Timer Ctrl Reg Blk */ | ||||
| 	u32 gpe0_block;		/* 32-bit port address of General Purpose Event 0 Reg Blk */ | ||||
| 	u32 gpe1_block;		/* 32-bit port address of General Purpose Event 1 Reg Blk */ | ||||
| 	u8 pm1_event_length;	/* Byte Length of ports at pm1x_event_block */ | ||||
| 	u8 pm1_control_length;	/* Byte Length of ports at pm1x_control_block */ | ||||
| 	u8 pm2_control_length;	/* Byte Length of ports at pm2_control_block */ | ||||
| 	u8 pm_timer_length;	/* Byte Length of ports at pm_timer_block */ | ||||
| 	u8 gpe0_block_length;	/* Byte Length of ports at gpe0_block */ | ||||
| 	u8 gpe1_block_length;	/* Byte Length of ports at gpe1_block */ | ||||
| 	u8 gpe1_base;		/* Offset in GPE number space where GPE1 events start */ | ||||
| 	u8 cst_control;		/* Support for the _CST object and C-States change notification */ | ||||
| 	u16 c2_latency;		/* Worst case HW latency to enter/exit C2 state */ | ||||
| 	u16 c3_latency;		/* Worst case HW latency to enter/exit C3 state */ | ||||
| 	u16 flush_size;		/* Processor memory cache line width, in bytes */ | ||||
| 	u16 flush_stride;	/* Number of flush strides that need to be read */ | ||||
| 	u8 duty_offset;		/* Processor duty cycle index in processor P_CNT reg */ | ||||
| 	u8 duty_width;		/* Processor duty cycle value bit width in P_CNT register */ | ||||
| 	u8 day_alarm;		/* Index to day-of-month alarm in RTC CMOS RAM */ | ||||
| 	u8 month_alarm;		/* Index to month-of-year alarm in RTC CMOS RAM */ | ||||
| 	u8 century;		/* Index to century in RTC CMOS RAM */ | ||||
| 	u16 boot_flags;		/* IA-PC Boot Architecture Flags (see below for individual flags) */ | ||||
| 	u8 reserved;		/* Reserved, must be zero */ | ||||
| 	u32 flags;		/* Miscellaneous flag bits (see below for individual flags) */ | ||||
| 	struct acpi_generic_address reset_register;	/* 64-bit address of the Reset register */ | ||||
| 	u8 reset_value;		/* Value to write to the reset_register port to reset the system */ | ||||
| 	u16 arm_boot_flags;	/* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */ | ||||
| 	u8 minor_revision;	/* FADT Minor Revision (ACPI 5.1) */ | ||||
| 	u64 Xfacs;		/* 64-bit physical address of FACS */ | ||||
| 	u64 Xdsdt;		/* 64-bit physical address of DSDT */ | ||||
| 	struct acpi_generic_address xpm1a_event_block;	/* 64-bit Extended Power Mgt 1a Event Reg Blk address */ | ||||
| 	struct acpi_generic_address xpm1b_event_block;	/* 64-bit Extended Power Mgt 1b Event Reg Blk address */ | ||||
| 	struct acpi_generic_address xpm1a_control_block;	/* 64-bit Extended Power Mgt 1a Control Reg Blk address */ | ||||
| 	struct acpi_generic_address xpm1b_control_block;	/* 64-bit Extended Power Mgt 1b Control Reg Blk address */ | ||||
| 	struct acpi_generic_address xpm2_control_block;	/* 64-bit Extended Power Mgt 2 Control Reg Blk address */ | ||||
| 	struct acpi_generic_address xpm_timer_block;	/* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */ | ||||
| 	struct acpi_generic_address xgpe0_block;	/* 64-bit Extended General Purpose Event 0 Reg Blk address */ | ||||
| 	struct acpi_generic_address xgpe1_block;	/* 64-bit Extended General Purpose Event 1 Reg Blk address */ | ||||
| 	struct acpi_generic_address sleep_control;	/* 64-bit Sleep Control register (ACPI 5.0) */ | ||||
| 	struct acpi_generic_address sleep_status;	/* 64-bit Sleep Status register (ACPI 5.0) */ | ||||
| }; | ||||
| 
 | ||||
| /* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */ | ||||
| 
 | ||||
| #define ACPI_FADT_LEGACY_DEVICES    (1)  	/* 00: [V2] System has LPC or ISA bus devices */ | ||||
| #define ACPI_FADT_8042              (1<<1)	/* 01: [V3] System has an 8042 controller on port 60/64 */ | ||||
| #define ACPI_FADT_NO_VGA            (1<<2)	/* 02: [V4] It is not safe to probe for VGA hardware */ | ||||
| #define ACPI_FADT_NO_MSI            (1<<3)	/* 03: [V4] Message Signaled Interrupts (MSI) must not be enabled */ | ||||
| #define ACPI_FADT_NO_ASPM           (1<<4)	/* 04: [V4] PCIe ASPM control must not be enabled */ | ||||
| #define ACPI_FADT_NO_CMOS_RTC       (1<<5)	/* 05: [V5] No CMOS real-time clock present */ | ||||
| 
 | ||||
| #define FADT2_REVISION_ID               3 | ||||
| 
 | ||||
| /* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */ | ||||
| 
 | ||||
| #define ACPI_FADT_PSCI_COMPLIANT    (1)	/* 00: [V5+] PSCI 0.2+ is implemented */ | ||||
| #define ACPI_FADT_PSCI_USE_HVC      (1<<1)	/* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */ | ||||
| 
 | ||||
| /* Masks for FADT flags */ | ||||
| 
 | ||||
| #define ACPI_FADT_WBINVD            (1)	/* 00: [V1] The WBINVD instruction works properly */ | ||||
| #define ACPI_FADT_WBINVD_FLUSH      (1<<1)	/* 01: [V1] WBINVD flushes but does not invalidate caches */ | ||||
| #define ACPI_FADT_C1_SUPPORTED      (1<<2)	/* 02: [V1] All processors support C1 state */ | ||||
| #define ACPI_FADT_C2_MP_SUPPORTED   (1<<3)	/* 03: [V1] C2 state works on MP system */ | ||||
| #define ACPI_FADT_POWER_BUTTON      (1<<4)	/* 04: [V1] Power button is handled as a control method device */ | ||||
| #define ACPI_FADT_SLEEP_BUTTON      (1<<5)	/* 05: [V1] Sleep button is handled as a control method device */ | ||||
| #define ACPI_FADT_FIXED_RTC         (1<<6)	/* 06: [V1] RTC wakeup status is not in fixed register space */ | ||||
| #define ACPI_FADT_S4_RTC_WAKE       (1<<7)	/* 07: [V1] RTC alarm can wake system from S4 */ | ||||
| #define ACPI_FADT_32BIT_TIMER       (1<<8)	/* 08: [V1] ACPI timer width is 32-bit (0=24-bit) */ | ||||
| #define ACPI_FADT_DOCKING_SUPPORTED (1<<9)	/* 09: [V1] Docking supported */ | ||||
| #define ACPI_FADT_RESET_REGISTER    (1<<10)	/* 10: [V2] System reset via the FADT RESET_REG supported */ | ||||
| #define ACPI_FADT_SEALED_CASE       (1<<11)	/* 11: [V3] No internal expansion capabilities and case is sealed */ | ||||
| #define ACPI_FADT_HEADLESS          (1<<12)	/* 12: [V3] No local video capabilities or local input devices */ | ||||
| #define ACPI_FADT_SLEEP_TYPE        (1<<13)	/* 13: [V3] Must execute native instruction after writing  SLP_TYPx register */ | ||||
| #define ACPI_FADT_PCI_EXPRESS_WAKE  (1<<14)	/* 14: [V4] System supports PCIEXP_WAKE (STS/EN) bits (ACPI 3.0) */ | ||||
| #define ACPI_FADT_PLATFORM_CLOCK    (1<<15)	/* 15: [V4] OSPM should use platform-provided timer (ACPI 3.0) */ | ||||
| #define ACPI_FADT_S4_RTC_VALID      (1<<16)	/* 16: [V4] Contents of RTC_STS valid after S4 wake (ACPI 3.0) */ | ||||
| #define ACPI_FADT_REMOTE_POWER_ON   (1<<17)	/* 17: [V4] System is compatible with remote power on (ACPI 3.0) */ | ||||
| #define ACPI_FADT_APIC_CLUSTER      (1<<18)	/* 18: [V4] All local APICs must use cluster model (ACPI 3.0) */ | ||||
| #define ACPI_FADT_APIC_PHYSICAL     (1<<19)	/* 19: [V4] All local xAPICs must use physical dest mode (ACPI 3.0) */ | ||||
| #define ACPI_FADT_HW_REDUCED        (1<<20)	/* 20: [V5] ACPI hardware is not implemented (ACPI 5.0) */ | ||||
| #define ACPI_FADT_LOW_POWER_S0      (1<<21)	/* 21: [V5] S0 power savings are equal or better than S3 (ACPI 5.0) */ | ||||
| 
 | ||||
| /* Values for preferred_profile (Preferred Power Management Profiles) */ | ||||
| 
 | ||||
| enum acpi_preferred_pm_profiles { | ||||
| 	PM_UNSPECIFIED = 0, | ||||
| 	PM_DESKTOP = 1, | ||||
| 	PM_MOBILE = 2, | ||||
| 	PM_WORKSTATION = 3, | ||||
| 	PM_ENTERPRISE_SERVER = 4, | ||||
| 	PM_SOHO_SERVER = 5, | ||||
| 	PM_APPLIANCE_PC = 6, | ||||
| 	PM_PERFORMANCE_SERVER = 7, | ||||
| 	PM_TABLET = 8 | ||||
| }; | ||||
| 
 | ||||
| /* Values for sleep_status and sleep_control registers (V5 FADT) */ | ||||
| 
 | ||||
| #define ACPI_X_WAKE_STATUS          0x80 | ||||
| #define ACPI_X_SLEEP_TYPE_MASK      0x1C | ||||
| #define ACPI_X_SLEEP_TYPE_POSITION  0x02 | ||||
| #define ACPI_X_SLEEP_ENABLE         0x20 | ||||
| 
 | ||||
| /* Reset to default packing */ | ||||
| 
 | ||||
| #pragma pack() | ||||
| 
 | ||||
| /*
 | ||||
|  * Internal table-related structures | ||||
|  */ | ||||
| union acpi_name_union { | ||||
| 	u32 integer; | ||||
| 	char ascii[4]; | ||||
| }; | ||||
| 
 | ||||
| /* Internal ACPI Table Descriptor. One per ACPI table. */ | ||||
| 
 | ||||
| struct acpi_table_desc { | ||||
| 	acpi_physical_address address; | ||||
| 	struct acpi_table_header *pointer; | ||||
| 	u32 length;		/* Length fixed at 32 bits (fixed in table header) */ | ||||
| 	union acpi_name_union signature; | ||||
| 	acpi_owner_id owner_id; | ||||
| 	u8 flags; | ||||
| }; | ||||
| 
 | ||||
| /* Masks for Flags field above */ | ||||
| 
 | ||||
| #define ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL  (0)	/* Virtual address, external maintained */ | ||||
| #define ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL (1)	/* Physical address, internally mapped */ | ||||
| #define ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL  (2)	/* Virtual address, internallly allocated */ | ||||
| #define ACPI_TABLE_ORIGIN_MASK              (3) | ||||
| #define ACPI_TABLE_IS_LOADED                (8) | ||||
| 
 | ||||
| /*
 | ||||
|  * Get the remaining ACPI tables | ||||
|  */ | ||||
| #include <acpi/actbl1.h> | ||||
| #include <acpi/actbl2.h> | ||||
| #include <acpi/actbl3.h> | ||||
| 
 | ||||
| /* Macros used to generate offsets to specific table fields */ | ||||
| 
 | ||||
| #define ACPI_FADT_OFFSET(f)             (u16) ACPI_OFFSET (struct acpi_table_fadt, f) | ||||
| 
 | ||||
| /*
 | ||||
|  * Sizes of the various flavors of FADT. We need to look closely | ||||
|  * at the FADT length because the version number essentially tells | ||||
|  * us nothing because of many BIOS bugs where the version does not | ||||
|  * match the expected length. In other words, the length of the | ||||
|  * FADT is the bottom line as to what the version really is. | ||||
|  * | ||||
|  * For reference, the values below are as follows: | ||||
|  *     FADT V1  size: 0x074 | ||||
|  *     FADT V2  size: 0x084 | ||||
|  *     FADT V3  size: 0x0F4 | ||||
|  *     FADT V4  size: 0x0F4 | ||||
|  *     FADT V5  size: 0x10C | ||||
|  */ | ||||
| #define ACPI_FADT_V1_SIZE       (u32) (ACPI_FADT_OFFSET (flags) + 4) | ||||
| #define ACPI_FADT_V2_SIZE       (u32) (ACPI_FADT_OFFSET (minor_revision) + 1) | ||||
| #define ACPI_FADT_V3_SIZE       (u32) (ACPI_FADT_OFFSET (sleep_control)) | ||||
| #define ACPI_FADT_V5_SIZE       (u32) (sizeof (struct acpi_table_fadt)) | ||||
| 
 | ||||
| #endif				/* __ACTBL_H__ */ | ||||
							
								
								
									
										1032
									
								
								include/acpi/actbl1.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1032
									
								
								include/acpi/actbl1.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1312
									
								
								include/acpi/actbl2.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1312
									
								
								include/acpi/actbl2.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										720
									
								
								include/acpi/actbl3.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										720
									
								
								include/acpi/actbl3.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,720 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: actbl3.h - ACPI Table Definitions | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACTBL3_H__ | ||||
| #define __ACTBL3_H__ | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * Additional ACPI Tables (3) | ||||
|  * | ||||
|  * These tables are not consumed directly by the ACPICA subsystem, but are | ||||
|  * included here to support device drivers and the AML disassembler. | ||||
|  * | ||||
|  * The tables in this file are fully defined within the ACPI specification. | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Values for description table header signatures for tables defined in this | ||||
|  * file. Useful because they make it more difficult to inadvertently type in | ||||
|  * the wrong signature. | ||||
|  */ | ||||
| #define ACPI_SIG_BGRT           "BGRT"	/* Boot Graphics Resource Table */ | ||||
| #define ACPI_SIG_DRTM           "DRTM"	/* Dynamic Root of Trust for Measurement table */ | ||||
| #define ACPI_SIG_FPDT           "FPDT"	/* Firmware Performance Data Table */ | ||||
| #define ACPI_SIG_GTDT           "GTDT"	/* Generic Timer Description Table */ | ||||
| #define ACPI_SIG_MPST           "MPST"	/* Memory Power State Table */ | ||||
| #define ACPI_SIG_PCCT           "PCCT"	/* Platform Communications Channel Table */ | ||||
| #define ACPI_SIG_PMTT           "PMTT"	/* Platform Memory Topology Table */ | ||||
| #define ACPI_SIG_RASF           "RASF"	/* RAS Feature table */ | ||||
| #define ACPI_SIG_TPM2           "TPM2"	/* Trusted Platform Module 2.0 H/W interface table */ | ||||
| 
 | ||||
| #define ACPI_SIG_S3PT           "S3PT"	/* S3 Performance (sub)Table */ | ||||
| #define ACPI_SIG_PCCS           "PCC"	/* PCC Shared Memory Region */ | ||||
| 
 | ||||
| /* Reserved table signatures */ | ||||
| 
 | ||||
| #define ACPI_SIG_MATR           "MATR"	/* Memory Address Translation Table */ | ||||
| #define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */ | ||||
| #define ACPI_SIG_WPBT           "WPBT"	/* Windows Platform Binary Table */ | ||||
| 
 | ||||
| /*
 | ||||
|  * All tables must be byte-packed to match the ACPI specification, since | ||||
|  * the tables are provided by the system BIOS. | ||||
|  */ | ||||
| #pragma pack(1) | ||||
| 
 | ||||
| /*
 | ||||
|  * Note: C bitfields are not used for this reason: | ||||
|  * | ||||
|  * "Bitfields are great and easy to read, but unfortunately the C language | ||||
|  * does not specify the layout of bitfields in memory, which means they are | ||||
|  * essentially useless for dealing with packed data in on-disk formats or | ||||
|  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, | ||||
|  * this decision was a design error in C. Ritchie could have picked an order | ||||
|  * and stuck with it." Norman Ramsey. | ||||
|  * See http://stackoverflow.com/a/1053662/41661
 | ||||
|  */ | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * BGRT - Boot Graphics Resource Table (ACPI 5.0) | ||||
|  *        Version 1 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_bgrt { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u16 version; | ||||
| 	u8 status; | ||||
| 	u8 image_type; | ||||
| 	u64 image_address; | ||||
| 	u32 image_offset_x; | ||||
| 	u32 image_offset_y; | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * DRTM - Dynamic Root of Trust for Measurement table | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_drtm { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u64 entry_base_address; | ||||
| 	u64 entry_length; | ||||
| 	u32 entry_address32; | ||||
| 	u64 entry_address64; | ||||
| 	u64 exit_address; | ||||
| 	u64 log_area_address; | ||||
| 	u32 log_area_length; | ||||
| 	u64 arch_dependent_address; | ||||
| 	u32 flags; | ||||
| }; | ||||
| 
 | ||||
| /* 1) Validated Tables List */ | ||||
| 
 | ||||
| struct acpi_drtm_vtl_list { | ||||
| 	u32 validated_table_list_count; | ||||
| }; | ||||
| 
 | ||||
| /* 2) Resources List */ | ||||
| 
 | ||||
| struct acpi_drtm_resource_list { | ||||
| 	u32 resource_list_count; | ||||
| }; | ||||
| 
 | ||||
| /* 3) Platform-specific Identifiers List */ | ||||
| 
 | ||||
| struct acpi_drtm_id_list { | ||||
| 	u32 id_list_count; | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * FPDT - Firmware Performance Data Table (ACPI 5.0) | ||||
|  *        Version 1 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_fpdt { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| }; | ||||
| 
 | ||||
| /* FPDT subtable header */ | ||||
| 
 | ||||
| struct acpi_fpdt_header { | ||||
| 	u16 type; | ||||
| 	u8 length; | ||||
| 	u8 revision; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Type field above */ | ||||
| 
 | ||||
| enum acpi_fpdt_type { | ||||
| 	ACPI_FPDT_TYPE_BOOT = 0, | ||||
| 	ACPI_FPDT_TYPE_S3PERF = 1 | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * FPDT subtables | ||||
|  */ | ||||
| 
 | ||||
| /* 0: Firmware Basic Boot Performance Record */ | ||||
| 
 | ||||
| struct acpi_fpdt_boot { | ||||
| 	struct acpi_fpdt_header header; | ||||
| 	u8 reserved[4]; | ||||
| 	u64 reset_end; | ||||
| 	u64 load_start; | ||||
| 	u64 startup_start; | ||||
| 	u64 exit_services_entry; | ||||
| 	u64 exit_services_exit; | ||||
| }; | ||||
| 
 | ||||
| /* 1: S3 Performance Table Pointer Record */ | ||||
| 
 | ||||
| struct acpi_fpdt_s3pt_ptr { | ||||
| 	struct acpi_fpdt_header header; | ||||
| 	u8 reserved[4]; | ||||
| 	u64 address; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * S3PT - S3 Performance Table. This table is pointed to by the | ||||
|  * FPDT S3 Pointer Record above. | ||||
|  */ | ||||
| struct acpi_table_s3pt { | ||||
| 	u8 signature[4];	/* "S3PT" */ | ||||
| 	u32 length; | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * S3PT Subtables | ||||
|  */ | ||||
| struct acpi_s3pt_header { | ||||
| 	u16 type; | ||||
| 	u8 length; | ||||
| 	u8 revision; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Type field above */ | ||||
| 
 | ||||
| enum acpi_s3pt_type { | ||||
| 	ACPI_S3PT_TYPE_RESUME = 0, | ||||
| 	ACPI_S3PT_TYPE_SUSPEND = 1 | ||||
| }; | ||||
| 
 | ||||
| struct acpi_s3pt_resume { | ||||
| 	struct acpi_s3pt_header header; | ||||
| 	u32 resume_count; | ||||
| 	u64 full_resume; | ||||
| 	u64 average_resume; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_s3pt_suspend { | ||||
| 	struct acpi_s3pt_header header; | ||||
| 	u64 suspend_start; | ||||
| 	u64 suspend_end; | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * GTDT - Generic Timer Description Table (ACPI 5.1) | ||||
|  *        Version 2 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_gtdt { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u64 counter_block_addresss; | ||||
| 	u32 reserved; | ||||
| 	u32 secure_el1_interrupt; | ||||
| 	u32 secure_el1_flags; | ||||
| 	u32 non_secure_el1_interrupt; | ||||
| 	u32 non_secure_el1_flags; | ||||
| 	u32 virtual_timer_interrupt; | ||||
| 	u32 virtual_timer_flags; | ||||
| 	u32 non_secure_el2_interrupt; | ||||
| 	u32 non_secure_el2_flags; | ||||
| 	u64 counter_read_block_address; | ||||
| 	u32 platform_timer_count; | ||||
| 	u32 platform_timer_offset; | ||||
| }; | ||||
| 
 | ||||
| /* Flag Definitions: Timer Block Physical Timers and Virtual timers */ | ||||
| 
 | ||||
| #define ACPI_GTDT_INTERRUPT_MODE        (1) | ||||
| #define ACPI_GTDT_INTERRUPT_POLARITY    (1<<1) | ||||
| #define ACPI_GTDT_ALWAYS_ON             (1<<2) | ||||
| 
 | ||||
| /* Common GTDT subtable header */ | ||||
| 
 | ||||
| struct acpi_gtdt_header { | ||||
| 	u8 type; | ||||
| 	u16 length; | ||||
| }; | ||||
| 
 | ||||
| /* Values for GTDT subtable type above */ | ||||
| 
 | ||||
| enum acpi_gtdt_type { | ||||
| 	ACPI_GTDT_TYPE_TIMER_BLOCK = 0, | ||||
| 	ACPI_GTDT_TYPE_WATCHDOG = 1, | ||||
| 	ACPI_GTDT_TYPE_RESERVED = 2	/* 2 and greater are reserved */ | ||||
| }; | ||||
| 
 | ||||
| /* GTDT Subtables, correspond to Type in struct acpi_gtdt_header */ | ||||
| 
 | ||||
| /* 0: Generic Timer Block */ | ||||
| 
 | ||||
| struct acpi_gtdt_timer_block { | ||||
| 	struct acpi_gtdt_header header; | ||||
| 	u8 reserved; | ||||
| 	u64 block_address; | ||||
| 	u32 timer_count; | ||||
| 	u32 timer_offset; | ||||
| }; | ||||
| 
 | ||||
| /* Timer Sub-Structure, one per timer */ | ||||
| 
 | ||||
| struct acpi_gtdt_timer_entry { | ||||
| 	u8 frame_number; | ||||
| 	u8 reserved[3]; | ||||
| 	u64 base_address; | ||||
| 	u64 el0_base_address; | ||||
| 	u32 timer_interrupt; | ||||
| 	u32 timer_flags; | ||||
| 	u32 virtual_timer_interrupt; | ||||
| 	u32 virtual_timer_flags; | ||||
| 	u32 common_flags; | ||||
| }; | ||||
| 
 | ||||
| /* Flag Definitions: timer_flags and virtual_timer_flags above */ | ||||
| 
 | ||||
| #define ACPI_GTDT_GT_IRQ_MODE               (1) | ||||
| #define ACPI_GTDT_GT_IRQ_POLARITY           (1<<1) | ||||
| 
 | ||||
| /* Flag Definitions: common_flags above */ | ||||
| 
 | ||||
| #define ACPI_GTDT_GT_IS_SECURE_TIMER        (1) | ||||
| #define ACPI_GTDT_GT_ALWAYS_ON              (1<<1) | ||||
| 
 | ||||
| /* 1: SBSA Generic Watchdog Structure */ | ||||
| 
 | ||||
| struct acpi_gtdt_watchdog { | ||||
| 	struct acpi_gtdt_header header; | ||||
| 	u8 reserved; | ||||
| 	u64 refresh_frame_address; | ||||
| 	u64 control_frame_address; | ||||
| 	u32 timer_interrupt; | ||||
| 	u32 timer_flags; | ||||
| }; | ||||
| 
 | ||||
| /* Flag Definitions: timer_flags above */ | ||||
| 
 | ||||
| #define ACPI_GTDT_WATCHDOG_IRQ_MODE         (1) | ||||
| #define ACPI_GTDT_WATCHDOG_IRQ_POLARITY     (1<<1) | ||||
| #define ACPI_GTDT_WATCHDOG_SECURE           (1<<2) | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * MPST - Memory Power State Table (ACPI 5.0) | ||||
|  *        Version 1 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| #define ACPI_MPST_CHANNEL_INFO \ | ||||
| 	u8                              channel_id; \ | ||||
| 	u8                              reserved1[3]; \ | ||||
| 	u16                             power_node_count; \ | ||||
| 	u16                             reserved2; | ||||
| 
 | ||||
| /* Main table */ | ||||
| 
 | ||||
| struct acpi_table_mpst { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	 ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */ | ||||
| }; | ||||
| 
 | ||||
| /* Memory Platform Communication Channel Info */ | ||||
| 
 | ||||
| struct acpi_mpst_channel { | ||||
| 	ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */ | ||||
| }; | ||||
| 
 | ||||
| /* Memory Power Node Structure */ | ||||
| 
 | ||||
| struct acpi_mpst_power_node { | ||||
| 	u8 flags; | ||||
| 	u8 reserved1; | ||||
| 	u16 node_id; | ||||
| 	u32 length; | ||||
| 	u64 range_address; | ||||
| 	u64 range_length; | ||||
| 	u32 num_power_states; | ||||
| 	u32 num_physical_components; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Flags field above */ | ||||
| 
 | ||||
| #define ACPI_MPST_ENABLED               1 | ||||
| #define ACPI_MPST_POWER_MANAGED         2 | ||||
| #define ACPI_MPST_HOT_PLUG_CAPABLE      4 | ||||
| 
 | ||||
| /* Memory Power State Structure (follows POWER_NODE above) */ | ||||
| 
 | ||||
| struct acpi_mpst_power_state { | ||||
| 	u8 power_state; | ||||
| 	u8 info_index; | ||||
| }; | ||||
| 
 | ||||
| /* Physical Component ID Structure (follows POWER_STATE above) */ | ||||
| 
 | ||||
| struct acpi_mpst_component { | ||||
| 	u16 component_id; | ||||
| }; | ||||
| 
 | ||||
| /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ | ||||
| 
 | ||||
| struct acpi_mpst_data_hdr { | ||||
| 	u16 characteristics_count; | ||||
| 	u16 reserved; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_mpst_power_data { | ||||
| 	u8 structure_id; | ||||
| 	u8 flags; | ||||
| 	u16 reserved1; | ||||
| 	u32 average_power; | ||||
| 	u32 power_saving; | ||||
| 	u64 exit_latency; | ||||
| 	u64 reserved2; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Flags field above */ | ||||
| 
 | ||||
| #define ACPI_MPST_PRESERVE              1 | ||||
| #define ACPI_MPST_AUTOENTRY             2 | ||||
| #define ACPI_MPST_AUTOEXIT              4 | ||||
| 
 | ||||
| /* Shared Memory Region (not part of an ACPI table) */ | ||||
| 
 | ||||
| struct acpi_mpst_shared { | ||||
| 	u32 signature; | ||||
| 	u16 pcc_command; | ||||
| 	u16 pcc_status; | ||||
| 	u32 command_register; | ||||
| 	u32 status_register; | ||||
| 	u32 power_state_id; | ||||
| 	u32 power_node_id; | ||||
| 	u64 energy_consumed; | ||||
| 	u64 average_power; | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * PCCT - Platform Communications Channel Table (ACPI 5.0) | ||||
|  *        Version 1 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_pcct { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u32 flags; | ||||
| 	u64 reserved; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Flags field above */ | ||||
| 
 | ||||
| #define ACPI_PCCT_DOORBELL              1 | ||||
| 
 | ||||
| /* Values for subtable type in struct acpi_subtable_header */ | ||||
| 
 | ||||
| enum acpi_pcct_type { | ||||
| 	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, | ||||
| 	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, | ||||
| 	ACPI_PCCT_TYPE_RESERVED = 2	/* 2 and greater are reserved */ | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * PCCT Subtables, correspond to Type in struct acpi_subtable_header | ||||
|  */ | ||||
| 
 | ||||
| /* 0: Generic Communications Subspace */ | ||||
| 
 | ||||
| struct acpi_pcct_subspace { | ||||
| 	struct acpi_subtable_header header; | ||||
| 	u8 reserved[6]; | ||||
| 	u64 base_address; | ||||
| 	u64 length; | ||||
| 	struct acpi_generic_address doorbell_register; | ||||
| 	u64 preserve_mask; | ||||
| 	u64 write_mask; | ||||
| 	u32 latency; | ||||
| 	u32 max_access_rate; | ||||
| 	u16 min_turnaround_time; | ||||
| }; | ||||
| 
 | ||||
| /* 1: HW-reduced Communications Subspace (ACPI 5.1) */ | ||||
| 
 | ||||
| struct acpi_pcct_hw_reduced { | ||||
| 	struct acpi_subtable_header header; | ||||
| 	u32 doorbell_interrupt; | ||||
| 	u8 flags; | ||||
| 	u8 reserved; | ||||
| 	u64 base_address; | ||||
| 	u64 length; | ||||
| 	struct acpi_generic_address doorbell_register; | ||||
| 	u64 preserve_mask; | ||||
| 	u64 write_mask; | ||||
| 	u32 latency; | ||||
| 	u32 max_access_rate; | ||||
| 	u16 min_turnaround_time; | ||||
| }; | ||||
| 
 | ||||
| /* Values for doorbell flags above */ | ||||
| 
 | ||||
| #define ACPI_PCCT_INTERRUPT_POLARITY    (1) | ||||
| #define ACPI_PCCT_INTERRUPT_MODE        (1<<1) | ||||
| 
 | ||||
| /*
 | ||||
|  * PCC memory structures (not part of the ACPI table) | ||||
|  */ | ||||
| 
 | ||||
| /* Shared Memory Region */ | ||||
| 
 | ||||
| struct acpi_pcct_shared_memory { | ||||
| 	u32 signature; | ||||
| 	u16 command; | ||||
| 	u16 status; | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * PMTT - Platform Memory Topology Table (ACPI 5.0) | ||||
|  *        Version 1 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_pmtt { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u32 reserved; | ||||
| }; | ||||
| 
 | ||||
| /* Common header for PMTT subtables that follow main table */ | ||||
| 
 | ||||
| struct acpi_pmtt_header { | ||||
| 	u8 type; | ||||
| 	u8 reserved1; | ||||
| 	u16 length; | ||||
| 	u16 flags; | ||||
| 	u16 reserved2; | ||||
| }; | ||||
| 
 | ||||
| /* Values for Type field above */ | ||||
| 
 | ||||
| #define ACPI_PMTT_TYPE_SOCKET           0 | ||||
| #define ACPI_PMTT_TYPE_CONTROLLER       1 | ||||
| #define ACPI_PMTT_TYPE_DIMM             2 | ||||
| #define ACPI_PMTT_TYPE_RESERVED         3	/* 0x03-0xFF are reserved */ | ||||
| 
 | ||||
| /* Values for Flags field above */ | ||||
| 
 | ||||
| #define ACPI_PMTT_TOP_LEVEL             0x0001 | ||||
| #define ACPI_PMTT_PHYSICAL              0x0002 | ||||
| #define ACPI_PMTT_MEMORY_TYPE           0x000C | ||||
| 
 | ||||
| /*
 | ||||
|  * PMTT subtables, correspond to Type in struct acpi_pmtt_header | ||||
|  */ | ||||
| 
 | ||||
| /* 0: Socket Structure */ | ||||
| 
 | ||||
| struct acpi_pmtt_socket { | ||||
| 	struct acpi_pmtt_header header; | ||||
| 	u16 socket_id; | ||||
| 	u16 reserved; | ||||
| }; | ||||
| 
 | ||||
| /* 1: Memory Controller subtable */ | ||||
| 
 | ||||
| struct acpi_pmtt_controller { | ||||
| 	struct acpi_pmtt_header header; | ||||
| 	u32 read_latency; | ||||
| 	u32 write_latency; | ||||
| 	u32 read_bandwidth; | ||||
| 	u32 write_bandwidth; | ||||
| 	u16 access_width; | ||||
| 	u16 alignment; | ||||
| 	u16 reserved; | ||||
| 	u16 domain_count; | ||||
| }; | ||||
| 
 | ||||
| /* 1a: Proximity Domain substructure */ | ||||
| 
 | ||||
| struct acpi_pmtt_domain { | ||||
| 	u32 proximity_domain; | ||||
| }; | ||||
| 
 | ||||
| /* 2: Physical Component Identifier (DIMM) */ | ||||
| 
 | ||||
| struct acpi_pmtt_physical_component { | ||||
| 	struct acpi_pmtt_header header; | ||||
| 	u16 component_id; | ||||
| 	u16 reserved; | ||||
| 	u32 memory_size; | ||||
| 	u32 bios_handle; | ||||
| }; | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * RASF - RAS Feature Table (ACPI 5.0) | ||||
|  *        Version 1 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_rasf { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u8 channel_id[12]; | ||||
| }; | ||||
| 
 | ||||
| /* RASF Platform Communication Channel Shared Memory Region */ | ||||
| 
 | ||||
| struct acpi_rasf_shared_memory { | ||||
| 	u32 signature; | ||||
| 	u16 command; | ||||
| 	u16 status; | ||||
| 	u16 version; | ||||
| 	u8 capabilities[16]; | ||||
| 	u8 set_capabilities[16]; | ||||
| 	u16 num_parameter_blocks; | ||||
| 	u32 set_capabilities_status; | ||||
| }; | ||||
| 
 | ||||
| /* RASF Parameter Block Structure Header */ | ||||
| 
 | ||||
| struct acpi_rasf_parameter_block { | ||||
| 	u16 type; | ||||
| 	u16 version; | ||||
| 	u16 length; | ||||
| }; | ||||
| 
 | ||||
| /* RASF Parameter Block Structure for PATROL_SCRUB */ | ||||
| 
 | ||||
| struct acpi_rasf_patrol_scrub_parameter { | ||||
| 	struct acpi_rasf_parameter_block header; | ||||
| 	u16 patrol_scrub_command; | ||||
| 	u64 requested_address_range[2]; | ||||
| 	u64 actual_address_range[2]; | ||||
| 	u16 flags; | ||||
| 	u8 requested_speed; | ||||
| }; | ||||
| 
 | ||||
| /* Masks for Flags and Speed fields above */ | ||||
| 
 | ||||
| #define ACPI_RASF_SCRUBBER_RUNNING      1 | ||||
| #define ACPI_RASF_SPEED                 (7<<1) | ||||
| #define ACPI_RASF_SPEED_SLOW            (0<<1) | ||||
| #define ACPI_RASF_SPEED_MEDIUM          (4<<1) | ||||
| #define ACPI_RASF_SPEED_FAST            (7<<1) | ||||
| 
 | ||||
| /* Channel Commands */ | ||||
| 
 | ||||
| enum acpi_rasf_commands { | ||||
| 	ACPI_RASF_EXECUTE_RASF_COMMAND = 1 | ||||
| }; | ||||
| 
 | ||||
| /* Platform RAS Capabilities */ | ||||
| 
 | ||||
| enum acpi_rasf_capabiliities { | ||||
| 	ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, | ||||
| 	ACPI_SW_PATROL_SCRUB_EXPOSED = 1 | ||||
| }; | ||||
| 
 | ||||
| /* Patrol Scrub Commands */ | ||||
| 
 | ||||
| enum acpi_rasf_patrol_scrub_commands { | ||||
| 	ACPI_RASF_GET_PATROL_PARAMETERS = 1, | ||||
| 	ACPI_RASF_START_PATROL_SCRUBBER = 2, | ||||
| 	ACPI_RASF_STOP_PATROL_SCRUBBER = 3 | ||||
| }; | ||||
| 
 | ||||
| /* Channel Command flags */ | ||||
| 
 | ||||
| #define ACPI_RASF_GENERATE_SCI          (1<<15) | ||||
| 
 | ||||
| /* Status values */ | ||||
| 
 | ||||
| enum acpi_rasf_status { | ||||
| 	ACPI_RASF_SUCCESS = 0, | ||||
| 	ACPI_RASF_NOT_VALID = 1, | ||||
| 	ACPI_RASF_NOT_SUPPORTED = 2, | ||||
| 	ACPI_RASF_BUSY = 3, | ||||
| 	ACPI_RASF_FAILED = 4, | ||||
| 	ACPI_RASF_ABORTED = 5, | ||||
| 	ACPI_RASF_INVALID_DATA = 6 | ||||
| }; | ||||
| 
 | ||||
| /* Status flags */ | ||||
| 
 | ||||
| #define ACPI_RASF_COMMAND_COMPLETE      (1) | ||||
| #define ACPI_RASF_SCI_DOORBELL          (1<<1) | ||||
| #define ACPI_RASF_ERROR                 (1<<2) | ||||
| #define ACPI_RASF_STATUS                (0x1F<<3) | ||||
| 
 | ||||
| /*******************************************************************************
 | ||||
|  * | ||||
|  * TPM2 - Trusted Platform Module (TPM) 2.0 Hardware Interface Table | ||||
|  *        Version 3 | ||||
|  * | ||||
|  * Conforms to "TPM 2.0 Hardware Interface Table (TPM2)" 29 November 2011 | ||||
|  * | ||||
|  ******************************************************************************/ | ||||
| 
 | ||||
| struct acpi_table_tpm2 { | ||||
| 	struct acpi_table_header header;	/* Common ACPI table header */ | ||||
| 	u32 flags; | ||||
| 	u64 control_address; | ||||
| 	u32 start_method; | ||||
| }; | ||||
| 
 | ||||
| /* Control area structure (not part of table, pointed to by control_address) */ | ||||
| 
 | ||||
| struct acpi_tpm2_control { | ||||
| 	u32 reserved; | ||||
| 	u32 error; | ||||
| 	u32 cancel; | ||||
| 	u32 start; | ||||
| 	u64 interrupt_control; | ||||
| 	u32 command_size; | ||||
| 	u64 command_address; | ||||
| 	u32 response_size; | ||||
| 	u64 response_address; | ||||
| }; | ||||
| 
 | ||||
| /* Reset to default packing */ | ||||
| 
 | ||||
| #pragma pack() | ||||
| 
 | ||||
| #endif				/* __ACTBL3_H__ */ | ||||
							
								
								
									
										1282
									
								
								include/acpi/actypes.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1282
									
								
								include/acpi/actypes.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										50
									
								
								include/acpi/apei.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								include/acpi/apei.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,50 @@ | |||
| /*
 | ||||
|  * apei.h - ACPI Platform Error Interface | ||||
|  */ | ||||
| 
 | ||||
| #ifndef ACPI_APEI_H | ||||
| #define ACPI_APEI_H | ||||
| 
 | ||||
| #include <linux/acpi.h> | ||||
| #include <linux/cper.h> | ||||
| #include <asm/ioctls.h> | ||||
| 
 | ||||
| #define APEI_ERST_INVALID_RECORD_ID	0xffffffffffffffffULL | ||||
| 
 | ||||
| #define APEI_ERST_CLEAR_RECORD		_IOW('E', 1, u64) | ||||
| #define APEI_ERST_GET_RECORD_COUNT	_IOR('E', 2, u32) | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| 
 | ||||
| extern bool hest_disable; | ||||
| extern int erst_disable; | ||||
| #ifdef CONFIG_ACPI_APEI_GHES | ||||
| extern bool ghes_disable; | ||||
| #else | ||||
| #define ghes_disable 1 | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI_APEI | ||||
| void __init acpi_hest_init(void); | ||||
| #else | ||||
| static inline void acpi_hest_init(void) { return; } | ||||
| #endif | ||||
| 
 | ||||
| typedef int (*apei_hest_func_t)(struct acpi_hest_header *hest_hdr, void *data); | ||||
| int apei_hest_parse(apei_hest_func_t func, void *data); | ||||
| 
 | ||||
| int erst_write(const struct cper_record_header *record); | ||||
| ssize_t erst_get_record_count(void); | ||||
| int erst_get_record_id_begin(int *pos); | ||||
| int erst_get_record_id_next(int *pos, u64 *record_id); | ||||
| void erst_get_record_id_end(void); | ||||
| ssize_t erst_read(u64 record_id, struct cper_record_header *record, | ||||
| 		  size_t buflen); | ||||
| int erst_clear(u64 record_id); | ||||
| 
 | ||||
| int arch_apei_enable_cmcff(struct acpi_hest_header *hest_hdr, void *data); | ||||
| void arch_apei_report_mem_error(int sev, struct cper_sec_mem_err *mem_err); | ||||
| void arch_apei_flush_tlb_one(unsigned long addr); | ||||
| 
 | ||||
| #endif | ||||
| #endif | ||||
							
								
								
									
										25
									
								
								include/acpi/button.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								include/acpi/button.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #ifndef ACPI_BUTTON_H | ||||
| #define ACPI_BUTTON_H | ||||
| 
 | ||||
| #include <linux/notifier.h> | ||||
| 
 | ||||
| #if defined(CONFIG_ACPI_BUTTON) || defined(CONFIG_ACPI_BUTTON_MODULE) | ||||
| extern int acpi_lid_notifier_register(struct notifier_block *nb); | ||||
| extern int acpi_lid_notifier_unregister(struct notifier_block *nb); | ||||
| extern int acpi_lid_open(void); | ||||
| #else | ||||
| static inline int acpi_lid_notifier_register(struct notifier_block *nb) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| static inline int acpi_lid_notifier_unregister(struct notifier_block *nb) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| static inline int acpi_lid_open(void) | ||||
| { | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_ACPI_BUTTON) || defined(CONFIG_ACPI_BUTTON_MODULE) */ | ||||
| 
 | ||||
| #endif /* ACPI_BUTTON_H */ | ||||
							
								
								
									
										72
									
								
								include/acpi/ghes.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								include/acpi/ghes.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,72 @@ | |||
| #include <acpi/apei.h> | ||||
| #include <acpi/hed.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * One struct ghes is created for each generic hardware error source. | ||||
|  * It provides the context for APEI hardware error timer/IRQ/SCI/NMI | ||||
|  * handler. | ||||
|  * | ||||
|  * estatus: memory buffer for error status block, allocated during | ||||
|  * HEST parsing. | ||||
|  */ | ||||
| #define GHES_TO_CLEAR		0x0001 | ||||
| #define GHES_EXITING		0x0002 | ||||
| 
 | ||||
| struct ghes { | ||||
| 	struct acpi_hest_generic *generic; | ||||
| 	struct acpi_hest_generic_status *estatus; | ||||
| 	u64 buffer_paddr; | ||||
| 	unsigned long flags; | ||||
| 	union { | ||||
| 		struct list_head list; | ||||
| 		struct timer_list timer; | ||||
| 		unsigned int irq; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| struct ghes_estatus_node { | ||||
| 	struct llist_node llnode; | ||||
| 	struct acpi_hest_generic *generic; | ||||
| 	struct ghes *ghes; | ||||
| }; | ||||
| 
 | ||||
| struct ghes_estatus_cache { | ||||
| 	u32 estatus_len; | ||||
| 	atomic_t count; | ||||
| 	struct acpi_hest_generic *generic; | ||||
| 	unsigned long long time_in; | ||||
| 	struct rcu_head rcu; | ||||
| }; | ||||
| 
 | ||||
| enum { | ||||
| 	GHES_SEV_NO = 0x0, | ||||
| 	GHES_SEV_CORRECTED = 0x1, | ||||
| 	GHES_SEV_RECOVERABLE = 0x2, | ||||
| 	GHES_SEV_PANIC = 0x3, | ||||
| }; | ||||
| 
 | ||||
| /* From drivers/edac/ghes_edac.c */ | ||||
| 
 | ||||
| #ifdef CONFIG_EDAC_GHES | ||||
| void ghes_edac_report_mem_error(struct ghes *ghes, int sev, | ||||
| 				struct cper_sec_mem_err *mem_err); | ||||
| 
 | ||||
| int ghes_edac_register(struct ghes *ghes, struct device *dev); | ||||
| 
 | ||||
| void ghes_edac_unregister(struct ghes *ghes); | ||||
| 
 | ||||
| #else | ||||
| static inline void ghes_edac_report_mem_error(struct ghes *ghes, int sev, | ||||
| 				       struct cper_sec_mem_err *mem_err) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| static inline int ghes_edac_register(struct ghes *ghes, struct device *dev) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static inline void ghes_edac_unregister(struct ghes *ghes) | ||||
| { | ||||
| } | ||||
| #endif | ||||
							
								
								
									
										18
									
								
								include/acpi/hed.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								include/acpi/hed.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| /*
 | ||||
|  * hed.h - ACPI Hardware Error Device | ||||
|  * | ||||
|  * Copyright (C) 2009, Intel Corp. | ||||
|  *	Author: Huang Ying <ying.huang@intel.com> | ||||
|  * | ||||
|  * This file is released under the GPLv2. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef ACPI_HED_H | ||||
| #define ACPI_HED_H | ||||
| 
 | ||||
| #include <linux/notifier.h> | ||||
| 
 | ||||
| int register_acpi_hed_notifier(struct notifier_block *nb); | ||||
| void unregister_acpi_hed_notifier(struct notifier_block *nb); | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										35
									
								
								include/acpi/pdc_intel.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								include/acpi/pdc_intel.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| 
 | ||||
| /* _PDC bit definition for Intel processors */ | ||||
| 
 | ||||
| #ifndef __PDC_INTEL_H__ | ||||
| #define __PDC_INTEL_H__ | ||||
| 
 | ||||
| #define ACPI_PDC_P_FFH			(0x0001) | ||||
| #define ACPI_PDC_C_C1_HALT		(0x0002) | ||||
| #define ACPI_PDC_T_FFH			(0x0004) | ||||
| #define ACPI_PDC_SMP_C1PT		(0x0008) | ||||
| #define ACPI_PDC_SMP_C2C3		(0x0010) | ||||
| #define ACPI_PDC_SMP_P_SWCOORD		(0x0020) | ||||
| #define ACPI_PDC_SMP_C_SWCOORD		(0x0040) | ||||
| #define ACPI_PDC_SMP_T_SWCOORD		(0x0080) | ||||
| #define ACPI_PDC_C_C1_FFH		(0x0100) | ||||
| #define ACPI_PDC_C_C2C3_FFH		(0x0200) | ||||
| #define ACPI_PDC_SMP_P_HWCOORD		(0x0800) | ||||
| 
 | ||||
| #define ACPI_PDC_EST_CAPABILITY_SMP	(ACPI_PDC_SMP_C1PT | \ | ||||
| 					 ACPI_PDC_C_C1_HALT | \ | ||||
| 					 ACPI_PDC_P_FFH) | ||||
| 
 | ||||
| #define ACPI_PDC_EST_CAPABILITY_SWSMP	(ACPI_PDC_SMP_C1PT | \ | ||||
| 					 ACPI_PDC_C_C1_HALT | \ | ||||
| 					 ACPI_PDC_SMP_P_SWCOORD | \ | ||||
| 					 ACPI_PDC_SMP_P_HWCOORD | \ | ||||
| 					 ACPI_PDC_P_FFH) | ||||
| 
 | ||||
| #define ACPI_PDC_C_CAPABILITY_SMP	(ACPI_PDC_SMP_C2C3  | \ | ||||
| 					 ACPI_PDC_SMP_C1PT  | \ | ||||
| 					 ACPI_PDC_C_C1_HALT | \ | ||||
| 					 ACPI_PDC_C_C1_FFH  | \ | ||||
| 					 ACPI_PDC_C_C2C3_FFH) | ||||
| 
 | ||||
| #endif				/* __PDC_INTEL_H__ */ | ||||
							
								
								
									
										437
									
								
								include/acpi/platform/acenv.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										437
									
								
								include/acpi/platform/acenv.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,437 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acenv.h - Host and compiler configuration | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACENV_H__ | ||||
| #define __ACENV_H__ | ||||
| 
 | ||||
| /*
 | ||||
|  * Environment configuration. The purpose of this file is to interface ACPICA | ||||
|  * to the local environment. This includes compiler-specific, OS-specific, | ||||
|  * and machine-specific configuration. | ||||
|  */ | ||||
| 
 | ||||
| /* Types for ACPI_MUTEX_TYPE */ | ||||
| 
 | ||||
| #define ACPI_BINARY_SEMAPHORE       0 | ||||
| #define ACPI_OSL_MUTEX              1 | ||||
| 
 | ||||
| /* Types for DEBUGGER_THREADING */ | ||||
| 
 | ||||
| #define DEBUGGER_SINGLE_THREADED    0 | ||||
| #define DEBUGGER_MULTI_THREADED     1 | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Configuration for ACPI tools and utilities | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /* iASL configuration */ | ||||
| 
 | ||||
| #ifdef ACPI_ASL_COMPILER | ||||
| #define ACPI_APPLICATION | ||||
| #define ACPI_DISASSEMBLER | ||||
| #define ACPI_DEBUG_OUTPUT | ||||
| #define ACPI_CONSTANT_EVAL_ONLY | ||||
| #define ACPI_LARGE_NAMESPACE_NODE | ||||
| #define ACPI_DATA_TABLE_DISASSEMBLY | ||||
| #define ACPI_SINGLE_THREADED | ||||
| #define ACPI_32BIT_PHYSICAL_ADDRESS | ||||
| #endif | ||||
| 
 | ||||
| /* acpi_exec configuration. Multithreaded with full AML debugger */ | ||||
| 
 | ||||
| #ifdef ACPI_EXEC_APP | ||||
| #define ACPI_APPLICATION | ||||
| #define ACPI_FULL_DEBUG | ||||
| #define ACPI_MUTEX_DEBUG | ||||
| #define ACPI_DBG_TRACK_ALLOCATIONS | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * acpi_bin/acpi_dump/acpi_help/acpi_names/acpi_src/acpi_xtract/Example configuration. | ||||
|  * All single threaded. | ||||
|  */ | ||||
| #if (defined ACPI_BIN_APP)      || \ | ||||
| 	(defined ACPI_DUMP_APP)     || \ | ||||
| 	(defined ACPI_HELP_APP)     || \ | ||||
| 	(defined ACPI_NAMES_APP)    || \ | ||||
| 	(defined ACPI_SRC_APP)      || \ | ||||
| 	(defined ACPI_XTRACT_APP)   || \ | ||||
| 	(defined ACPI_EXAMPLE_APP) | ||||
| #define ACPI_APPLICATION | ||||
| #define ACPI_SINGLE_THREADED | ||||
| #endif | ||||
| 
 | ||||
| /* acpi_help configuration. Error messages disabled. */ | ||||
| 
 | ||||
| #ifdef ACPI_HELP_APP | ||||
| #define ACPI_NO_ERROR_MESSAGES | ||||
| #endif | ||||
| 
 | ||||
| /* acpi_names configuration. Debug output enabled. */ | ||||
| 
 | ||||
| #ifdef ACPI_NAMES_APP | ||||
| #define ACPI_DEBUG_OUTPUT | ||||
| #endif | ||||
| 
 | ||||
| /* acpi_exec/acpi_names/Example configuration. Native RSDP used. */ | ||||
| 
 | ||||
| #if (defined ACPI_EXEC_APP)     || \ | ||||
| 	(defined ACPI_EXAMPLE_APP)  || \ | ||||
| 	(defined ACPI_NAMES_APP) | ||||
| #define ACPI_USE_NATIVE_RSDP_POINTER | ||||
| #endif | ||||
| 
 | ||||
| /* acpi_dump configuration. Native mapping used if provied by OSPMs */ | ||||
| 
 | ||||
| #ifdef ACPI_DUMP_APP | ||||
| #define ACPI_USE_NATIVE_MEMORY_MAPPING | ||||
| #define USE_NATIVE_ALLOCATE_ZEROED | ||||
| #endif | ||||
| 
 | ||||
| /* acpi_names/Example configuration. Hardware disabled */ | ||||
| 
 | ||||
| #if (defined ACPI_EXAMPLE_APP)  || \ | ||||
| 	(defined ACPI_NAMES_APP) | ||||
| #define ACPI_REDUCED_HARDWARE 1 | ||||
| #endif | ||||
| 
 | ||||
| /* Linkable ACPICA library */ | ||||
| 
 | ||||
| #ifdef ACPI_LIBRARY | ||||
| #define ACPI_USE_LOCAL_CACHE | ||||
| #define ACPI_FUTURE_USAGE | ||||
| #endif | ||||
| 
 | ||||
| /* Common for all ACPICA applications */ | ||||
| 
 | ||||
| #ifdef ACPI_APPLICATION | ||||
| #define ACPI_USE_SYSTEM_CLIBRARY | ||||
| #define ACPI_USE_LOCAL_CACHE | ||||
| #endif | ||||
| 
 | ||||
| /* Common debug support */ | ||||
| 
 | ||||
| #ifdef ACPI_FULL_DEBUG | ||||
| #define ACPI_DEBUGGER | ||||
| #define ACPI_DEBUG_OUTPUT | ||||
| #define ACPI_DISASSEMBLER | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| /*! [Begin] no source code translation */ | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Host configuration files. The compiler configuration files are included | ||||
|  * by the host files. | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| #if defined(_LINUX) || defined(__linux__) | ||||
| #include <acpi/platform/aclinux.h> | ||||
| 
 | ||||
| #elif defined(_APPLE) || defined(__APPLE__) | ||||
| #include "acmacosx.h" | ||||
| 
 | ||||
| #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) | ||||
| #include "acfreebsd.h" | ||||
| 
 | ||||
| #elif defined(__NetBSD__) | ||||
| #include "acnetbsd.h" | ||||
| 
 | ||||
| #elif defined(__sun) | ||||
| #include "acsolaris.h" | ||||
| 
 | ||||
| #elif defined(MODESTO) | ||||
| #include "acmodesto.h" | ||||
| 
 | ||||
| #elif defined(NETWARE) | ||||
| #include "acnetware.h" | ||||
| 
 | ||||
| #elif defined(_CYGWIN) | ||||
| #include "accygwin.h" | ||||
| 
 | ||||
| #elif defined(WIN32) | ||||
| #include "acwin.h" | ||||
| 
 | ||||
| #elif defined(WIN64) | ||||
| #include "acwin64.h" | ||||
| 
 | ||||
| #elif defined(_WRS_LIB_BUILD) | ||||
| #include "acvxworks.h" | ||||
| 
 | ||||
| #elif defined(__OS2__) | ||||
| #include "acos2.h" | ||||
| 
 | ||||
| #elif defined(_AED_EFI) | ||||
| #include "acefi.h" | ||||
| 
 | ||||
| #elif defined(_GNU_EFI) | ||||
| #include "acefi.h" | ||||
| 
 | ||||
| #elif defined(__HAIKU__) | ||||
| #include "achaiku.h" | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| /* Unknown environment */ | ||||
| 
 | ||||
| #error Unknown target environment | ||||
| #endif | ||||
| 
 | ||||
| /*! [End] no source code translation !*/ | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Setup defaults for the required symbols that were not defined in one of | ||||
|  * the host/compiler files above. | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /* 64-bit data types */ | ||||
| 
 | ||||
| #ifndef COMPILER_DEPENDENT_INT64 | ||||
| #define COMPILER_DEPENDENT_INT64   long long | ||||
| #endif | ||||
| 
 | ||||
| #ifndef COMPILER_DEPENDENT_UINT64 | ||||
| #define COMPILER_DEPENDENT_UINT64  unsigned long long | ||||
| #endif | ||||
| 
 | ||||
| /* Type of mutex supported by host. Default is binary semaphores. */ | ||||
| #ifndef ACPI_MUTEX_TYPE | ||||
| #define ACPI_MUTEX_TYPE             ACPI_BINARY_SEMAPHORE | ||||
| #endif | ||||
| 
 | ||||
| /* Global Lock acquire/release */ | ||||
| 
 | ||||
| #ifndef ACPI_ACQUIRE_GLOBAL_LOCK | ||||
| #define ACPI_ACQUIRE_GLOBAL_LOCK(Glptr, acquired) acquired = 1 | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_RELEASE_GLOBAL_LOCK | ||||
| #define ACPI_RELEASE_GLOBAL_LOCK(Glptr, pending) pending = 0 | ||||
| #endif | ||||
| 
 | ||||
| /* Flush CPU cache - used when going to sleep. Wbinvd or similar. */ | ||||
| 
 | ||||
| #ifndef ACPI_FLUSH_CPU_CACHE | ||||
| #define ACPI_FLUSH_CPU_CACHE() | ||||
| #endif | ||||
| 
 | ||||
| /* "inline" keywords - configurable since inline is not standardized */ | ||||
| 
 | ||||
| #ifndef ACPI_INLINE | ||||
| #define ACPI_INLINE | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Configurable calling conventions: | ||||
|  * | ||||
|  * ACPI_SYSTEM_XFACE        - Interfaces to host OS (handlers, threads) | ||||
|  * ACPI_EXTERNAL_XFACE      - External ACPI interfaces | ||||
|  * ACPI_INTERNAL_XFACE      - Internal ACPI interfaces | ||||
|  * ACPI_INTERNAL_VAR_XFACE  - Internal variable-parameter list interfaces | ||||
|  */ | ||||
| #ifndef ACPI_SYSTEM_XFACE | ||||
| #define ACPI_SYSTEM_XFACE | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_EXTERNAL_XFACE | ||||
| #define ACPI_EXTERNAL_XFACE | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_INTERNAL_XFACE | ||||
| #define ACPI_INTERNAL_XFACE | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_INTERNAL_VAR_XFACE | ||||
| #define ACPI_INTERNAL_VAR_XFACE | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Debugger threading model | ||||
|  * Use single threaded if the entire subsystem is contained in an application | ||||
|  * Use multiple threaded when the subsystem is running in the kernel. | ||||
|  * | ||||
|  * By default the model is single threaded if ACPI_APPLICATION is set, | ||||
|  * multi-threaded if ACPI_APPLICATION is not set. | ||||
|  */ | ||||
| #ifndef DEBUGGER_THREADING | ||||
| #ifdef ACPI_APPLICATION | ||||
| #define DEBUGGER_THREADING          DEBUGGER_SINGLE_THREADED | ||||
| 
 | ||||
| #else | ||||
| #define DEBUGGER_THREADING          DEBUGGER_MULTI_THREADED | ||||
| #endif | ||||
| #endif				/* !DEBUGGER_THREADING */ | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * C library configuration | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library. | ||||
|  *      Otherwise, local versions of string/memory functions will be used. | ||||
|  * ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and | ||||
|  *      the standard header files may be used. | ||||
|  * | ||||
|  * The ACPICA subsystem only uses low level C library functions that do not call | ||||
|  * operating system services and may therefore be inlined in the code. | ||||
|  * | ||||
|  * It may be necessary to tailor these include files to the target | ||||
|  * generation environment. | ||||
|  */ | ||||
| #ifdef ACPI_USE_SYSTEM_CLIBRARY | ||||
| 
 | ||||
| /* Use the standard C library headers. We want to keep these to a minimum. */ | ||||
| 
 | ||||
| #ifdef ACPI_USE_STANDARD_HEADERS | ||||
| 
 | ||||
| /* Use the standard headers from the standard locations */ | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <ctype.h> | ||||
| 
 | ||||
| #endif				/* ACPI_USE_STANDARD_HEADERS */ | ||||
| 
 | ||||
| /* We will be linking to the standard Clib functions */ | ||||
| 
 | ||||
| #define ACPI_STRSTR(s1,s2)      strstr((s1), (s2)) | ||||
| #define ACPI_STRCHR(s1,c)       strchr((s1), (c)) | ||||
| #define ACPI_STRLEN(s)          (acpi_size) strlen((s)) | ||||
| #define ACPI_STRCPY(d,s)        (void) strcpy((d), (s)) | ||||
| #define ACPI_STRNCPY(d,s,n)     (void) strncpy((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_STRNCMP(d,s,n)     strncmp((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_STRCMP(d,s)        strcmp((d), (s)) | ||||
| #define ACPI_STRCAT(d,s)        (void) strcat((d), (s)) | ||||
| #define ACPI_STRNCAT(d,s,n)     strncat((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_STRTOUL(d,s,n)     strtoul((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_MEMCMP(s1,s2,n)    memcmp((const char *)(s1), (const char *)(s2), (acpi_size)(n)) | ||||
| #define ACPI_MEMCPY(d,s,n)      (void) memcpy((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_MEMSET(d,s,n)      (void) memset((d), (s), (acpi_size)(n)) | ||||
| 
 | ||||
| #define ACPI_TOUPPER(i)         toupper((int) (i)) | ||||
| #define ACPI_TOLOWER(i)         tolower((int) (i)) | ||||
| #define ACPI_IS_XDIGIT(i)       isxdigit((int) (i)) | ||||
| #define ACPI_IS_DIGIT(i)        isdigit((int) (i)) | ||||
| #define ACPI_IS_SPACE(i)        isspace((int) (i)) | ||||
| #define ACPI_IS_UPPER(i)        isupper((int) (i)) | ||||
| #define ACPI_IS_PRINT(i)        isprint((int) (i)) | ||||
| #define ACPI_IS_ALPHA(i)        isalpha((int) (i)) | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Not using native C library, use local implementations | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Use local definitions of C library macros and functions. These function | ||||
|  * implementations may not be as efficient as an inline or assembly code | ||||
|  * implementation provided by a native C library, but they are functionally | ||||
|  * equivalent. | ||||
|  */ | ||||
| #ifndef va_arg | ||||
| 
 | ||||
| #ifndef _VALIST | ||||
| #define _VALIST | ||||
| typedef char *va_list; | ||||
| #endif				/* _VALIST */ | ||||
| 
 | ||||
| /* Storage alignment properties */ | ||||
| 
 | ||||
| #define  _AUPBND                (sizeof (acpi_native_int) - 1) | ||||
| #define  _ADNBND                (sizeof (acpi_native_int) - 1) | ||||
| 
 | ||||
| /* Variable argument list macro definitions */ | ||||
| 
 | ||||
| #define _bnd(X, bnd)            (((sizeof (X)) + (bnd)) & (~(bnd))) | ||||
| #define va_arg(ap, T)           (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND)))) | ||||
| #define va_end(ap)              (ap = (va_list) NULL) | ||||
| #define va_start(ap, A)         (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND)))) | ||||
| 
 | ||||
| #endif				/* va_arg */ | ||||
| 
 | ||||
| /* Use the local (ACPICA) definitions of the clib functions */ | ||||
| 
 | ||||
| #define ACPI_STRSTR(s1,s2)      acpi_ut_strstr ((s1), (s2)) | ||||
| #define ACPI_STRCHR(s1,c)       acpi_ut_strchr ((s1), (c)) | ||||
| #define ACPI_STRLEN(s)          (acpi_size) acpi_ut_strlen ((s)) | ||||
| #define ACPI_STRCPY(d,s)        (void) acpi_ut_strcpy ((d), (s)) | ||||
| #define ACPI_STRNCPY(d,s,n)     (void) acpi_ut_strncpy ((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_STRNCMP(d,s,n)     acpi_ut_strncmp ((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_STRCMP(d,s)        acpi_ut_strcmp ((d), (s)) | ||||
| #define ACPI_STRCAT(d,s)        (void) acpi_ut_strcat ((d), (s)) | ||||
| #define ACPI_STRNCAT(d,s,n)     acpi_ut_strncat ((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_STRTOUL(d,s,n)     acpi_ut_strtoul ((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_MEMCMP(s1,s2,n)    acpi_ut_memcmp((const char *)(s1), (const char *)(s2), (acpi_size)(n)) | ||||
| #define ACPI_MEMCPY(d,s,n)      (void) acpi_ut_memcpy ((d), (s), (acpi_size)(n)) | ||||
| #define ACPI_MEMSET(d,v,n)      (void) acpi_ut_memset ((d), (v), (acpi_size)(n)) | ||||
| #define ACPI_TOUPPER(c)         acpi_ut_to_upper ((int) (c)) | ||||
| #define ACPI_TOLOWER(c)         acpi_ut_to_lower ((int) (c)) | ||||
| 
 | ||||
| #endif				/* ACPI_USE_SYSTEM_CLIBRARY */ | ||||
| 
 | ||||
| #ifndef ACPI_FILE | ||||
| #ifdef ACPI_APPLICATION | ||||
| #include <stdio.h> | ||||
| #define ACPI_FILE              FILE * | ||||
| #define ACPI_FILE_OUT          stdout | ||||
| #define ACPI_FILE_ERR          stderr | ||||
| #else | ||||
| #define ACPI_FILE              void * | ||||
| #define ACPI_FILE_OUT          NULL | ||||
| #define ACPI_FILE_ERR          NULL | ||||
| #endif				/* ACPI_APPLICATION */ | ||||
| #endif				/* ACPI_FILE */ | ||||
| 
 | ||||
| #endif				/* __ACENV_H__ */ | ||||
							
								
								
									
										63
									
								
								include/acpi/platform/acenvex.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								include/acpi/platform/acenvex.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acenvex.h - Extra host and compiler configuration | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACENVEX_H__ | ||||
| #define __ACENVEX_H__ | ||||
| 
 | ||||
| /*! [Begin] no source code translation */ | ||||
| 
 | ||||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Extra host configuration files. All ACPICA headers are included before | ||||
|  * including these files. | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| #if defined(_LINUX) || defined(__linux__) | ||||
| #include <acpi/platform/aclinuxex.h> | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /*! [End] no source code translation !*/ | ||||
| 
 | ||||
| #endif				/* __ACENVEX_H__ */ | ||||
							
								
								
									
										78
									
								
								include/acpi/platform/acgcc.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								include/acpi/platform/acgcc.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,78 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: acgcc.h - GCC specific defines, etc. | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACGCC_H__ | ||||
| #define __ACGCC_H__ | ||||
| 
 | ||||
| #define ACPI_INLINE             __inline__ | ||||
| 
 | ||||
| /* Function name is used for debug output. Non-ANSI, compiler-dependent */ | ||||
| 
 | ||||
| #define ACPI_GET_FUNCTION_NAME          __func__ | ||||
| 
 | ||||
| /*
 | ||||
|  * This macro is used to tag functions as "printf-like" because | ||||
|  * some compilers (like GCC) can catch printf format string problems. | ||||
|  */ | ||||
| #define ACPI_PRINTF_LIKE(c) __attribute__ ((__format__ (__printf__, c, c+1))) | ||||
| 
 | ||||
| /*
 | ||||
|  * Some compilers complain about unused variables. Sometimes we don't want to | ||||
|  * use all the variables (for example, _acpi_module_name). This allows us | ||||
|  * to tell the compiler warning in a per-variable manner that a variable | ||||
|  * is unused. | ||||
|  */ | ||||
| #define ACPI_UNUSED_VAR __attribute__ ((unused)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Some versions of gcc implement strchr() with a buggy macro. So, | ||||
|  * undef it here. Prevents error messages of this form (usually from the | ||||
|  * file getopt.c): | ||||
|  * | ||||
|  * error: logical '&&' with non-zero constant will always evaluate as true | ||||
|  */ | ||||
| #ifdef strchr | ||||
| #undef strchr | ||||
| #endif | ||||
| 
 | ||||
| #endif				/* __ACGCC_H__ */ | ||||
							
								
								
									
										203
									
								
								include/acpi/platform/aclinux.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								include/acpi/platform/aclinux.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,203 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: aclinux.h - OS specific defines, etc. for Linux | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACLINUX_H__ | ||||
| #define __ACLINUX_H__ | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| 
 | ||||
| /* ACPICA external files should not include ACPICA headers directly. */ | ||||
| 
 | ||||
| #if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H) | ||||
| #error "Please don't include <acpi/acpi.h> directly, include <linux/acpi.h> instead." | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* Common (in-kernel/user-space) ACPICA configuration */ | ||||
| 
 | ||||
| #define ACPI_USE_SYSTEM_CLIBRARY | ||||
| #define ACPI_USE_DO_WHILE_0 | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| 
 | ||||
| #define ACPI_USE_SYSTEM_INTTYPES | ||||
| 
 | ||||
| /* Compile for reduced hardware mode only with this kernel config */ | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY | ||||
| #define ACPI_REDUCED_HARDWARE 1 | ||||
| #endif | ||||
| 
 | ||||
| #include <linux/string.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/ctype.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/atomic.h> | ||||
| #include <linux/math64.h> | ||||
| #include <linux/slab.h> | ||||
| #include <linux/spinlock_types.h> | ||||
| #ifdef EXPORT_ACPI_INTERFACES | ||||
| #include <linux/export.h> | ||||
| #endif | ||||
| #ifdef CONFIG_ACPI | ||||
| #include <asm/acenv.h> | ||||
| #endif | ||||
| 
 | ||||
| #ifndef CONFIG_ACPI | ||||
| 
 | ||||
| /* External globals for __KERNEL__, stubs is needed */ | ||||
| 
 | ||||
| #define ACPI_GLOBAL(t,a) | ||||
| #define ACPI_INIT_GLOBAL(t,a,b) | ||||
| 
 | ||||
| /* Generating stubs for configurable ACPICA macros */ | ||||
| 
 | ||||
| #define ACPI_NO_MEM_ALLOCATIONS | ||||
| 
 | ||||
| /* Generating stubs for configurable ACPICA functions */ | ||||
| 
 | ||||
| #define ACPI_NO_ERROR_MESSAGES | ||||
| #undef ACPI_DEBUG_OUTPUT | ||||
| 
 | ||||
| /* External interface for __KERNEL__, stub is needed */ | ||||
| 
 | ||||
| #define ACPI_EXTERNAL_RETURN_STATUS(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);} | ||||
| #define ACPI_EXTERNAL_RETURN_OK(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return(AE_OK);} | ||||
| #define ACPI_EXTERNAL_RETURN_VOID(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return;} | ||||
| #define ACPI_EXTERNAL_RETURN_UINT32(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return(0);} | ||||
| #define ACPI_EXTERNAL_RETURN_PTR(prototype) \ | ||||
| 	static ACPI_INLINE prototype {return(NULL);} | ||||
| 
 | ||||
| #endif				/* CONFIG_ACPI */ | ||||
| 
 | ||||
| /* Host-dependent types and defines for in-kernel ACPICA */ | ||||
| 
 | ||||
| #define ACPI_MACHINE_WIDTH          BITS_PER_LONG | ||||
| #define ACPI_EXPORT_SYMBOL(symbol)  EXPORT_SYMBOL(symbol); | ||||
| #define strtoul                     simple_strtoul | ||||
| 
 | ||||
| #define acpi_cache_t                        struct kmem_cache | ||||
| #define acpi_spinlock                       spinlock_t * | ||||
| #define acpi_cpu_flags                      unsigned long | ||||
| 
 | ||||
| /* Use native linux version of acpi_os_allocate_zeroed */ | ||||
| 
 | ||||
| #define USE_NATIVE_ALLOCATE_ZEROED | ||||
| 
 | ||||
| /*
 | ||||
|  * Overrides for in-kernel ACPICA | ||||
|  */ | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock | ||||
| 
 | ||||
| /*
 | ||||
|  * OSL interfaces used by debugger/disassembler | ||||
|  */ | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable | ||||
| 
 | ||||
| /*
 | ||||
|  * OSL interfaces used by utilities | ||||
|  */ | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename | ||||
| #define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory | ||||
| 
 | ||||
| #else				/* !__KERNEL__ */ | ||||
| 
 | ||||
| #include <stdarg.h> | ||||
| #include <string.h> | ||||
| #include <stdlib.h> | ||||
| #include <ctype.h> | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| /* Define/disable kernel-specific declarators */ | ||||
| 
 | ||||
| #ifndef __init | ||||
| #define __init | ||||
| #endif | ||||
| 
 | ||||
| /* Host-dependent types and defines for user-space ACPICA */ | ||||
| 
 | ||||
| #define ACPI_FLUSH_CPU_CACHE() | ||||
| #define ACPI_CAST_PTHREAD_T(pthread) ((acpi_thread_id) (pthread)) | ||||
| 
 | ||||
| #if defined(__ia64__)    || defined(__x86_64__) ||\ | ||||
| 	defined(__aarch64__) || defined(__PPC64__) | ||||
| #define ACPI_MACHINE_WIDTH          64 | ||||
| #define COMPILER_DEPENDENT_INT64    long | ||||
| #define COMPILER_DEPENDENT_UINT64   unsigned long | ||||
| #else | ||||
| #define ACPI_MACHINE_WIDTH          32 | ||||
| #define COMPILER_DEPENDENT_INT64    long long | ||||
| #define COMPILER_DEPENDENT_UINT64   unsigned long long | ||||
| #define ACPI_USE_NATIVE_DIVIDE | ||||
| #endif | ||||
| 
 | ||||
| #ifndef __cdecl | ||||
| #define __cdecl | ||||
| #endif | ||||
| 
 | ||||
| #endif				/* __KERNEL__ */ | ||||
| 
 | ||||
| /* Linux uses GCC */ | ||||
| 
 | ||||
| #include <acpi/platform/acgcc.h> | ||||
| 
 | ||||
| #endif				/* __ACLINUX_H__ */ | ||||
							
								
								
									
										134
									
								
								include/acpi/platform/aclinuxex.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								include/acpi/platform/aclinuxex.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,134 @@ | |||
| /******************************************************************************
 | ||||
|  * | ||||
|  * Name: aclinuxex.h - Extra OS specific defines, etc. for Linux | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Copyright (C) 2000 - 2014, Intel Corp. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions, and the following disclaimer, | ||||
|  *    without modification. | ||||
|  * 2. Redistributions in binary form must reproduce at minimum a disclaimer | ||||
|  *    substantially similar to the "NO WARRANTY" disclaimer below | ||||
|  *    ("Disclaimer") and any redistribution must be conditioned upon | ||||
|  *    including a substantially similar Disclaimer requirement for further | ||||
|  *    binary redistribution. | ||||
|  * 3. Neither the names of the above-listed copyright holders nor the names | ||||
|  *    of any contributors may be used to endorse or promote products derived | ||||
|  *    from this software without specific prior written permission. | ||||
|  * | ||||
|  * Alternatively, this software may be distributed under the terms of the | ||||
|  * GNU General Public License ("GPL") version 2 as published by the Free | ||||
|  * Software Foundation. | ||||
|  * | ||||
|  * NO WARRANTY | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR | ||||
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
|  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||||
|  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | ||||
|  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
|  * POSSIBILITY OF SUCH DAMAGES. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ACLINUXEX_H__ | ||||
| #define __ACLINUXEX_H__ | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| 
 | ||||
| #ifndef ACPI_USE_NATIVE_DIVIDE | ||||
| 
 | ||||
| #ifndef ACPI_DIV_64_BY_32 | ||||
| #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \ | ||||
| 	do { \ | ||||
| 		u64 (__n) = ((u64) n_hi) << 32 | (n_lo); \ | ||||
| 		(r32) = do_div ((__n), (d32)); \ | ||||
| 		(q32) = (u32) (__n); \ | ||||
| 	} while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ACPI_SHIFT_RIGHT_64 | ||||
| #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \ | ||||
| 	do { \ | ||||
| 		(n_lo) >>= 1; \ | ||||
| 		(n_lo) |= (((n_hi) & 1) << 31); \ | ||||
| 		(n_hi) >>= 1; \ | ||||
| 	} while (0) | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Overrides for in-kernel ACPICA | ||||
|  */ | ||||
| acpi_status __init acpi_os_initialize(void); | ||||
| 
 | ||||
| acpi_status acpi_os_terminate(void); | ||||
| 
 | ||||
| /*
 | ||||
|  * The irqs_disabled() check is for resume from RAM. | ||||
|  * Interrupts are off during resume, just like they are for boot. | ||||
|  * However, boot has  (system_state != SYSTEM_RUNNING) | ||||
|  * to quiet __might_sleep() in kmalloc() and resume does not. | ||||
|  */ | ||||
| static inline void *acpi_os_allocate(acpi_size size) | ||||
| { | ||||
| 	return kmalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); | ||||
| } | ||||
| 
 | ||||
| static inline void *acpi_os_allocate_zeroed(acpi_size size) | ||||
| { | ||||
| 	return kzalloc(size, irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); | ||||
| } | ||||
| 
 | ||||
| static inline void acpi_os_free(void *memory) | ||||
| { | ||||
| 	kfree(memory); | ||||
| } | ||||
| 
 | ||||
| static inline void *acpi_os_acquire_object(acpi_cache_t * cache) | ||||
| { | ||||
| 	return kmem_cache_zalloc(cache, | ||||
| 				 irqs_disabled()? GFP_ATOMIC : GFP_KERNEL); | ||||
| } | ||||
| 
 | ||||
| static inline acpi_thread_id acpi_os_get_thread_id(void) | ||||
| { | ||||
| 	return (acpi_thread_id) (unsigned long)current; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * When lockdep is enabled, the spin_lock_init() macro stringifies it's | ||||
|  * argument and uses that as a name for the lock in debugging. | ||||
|  * By executing spin_lock_init() in a macro the key changes from "lock" for | ||||
|  * all locks to the name of the argument of acpi_os_create_lock(), which | ||||
|  * prevents lockdep from reporting false positives for ACPICA locks. | ||||
|  */ | ||||
| #define acpi_os_create_lock(__handle) \ | ||||
| 	({ \ | ||||
| 		spinlock_t *lock = ACPI_ALLOCATE(sizeof(*lock)); \ | ||||
| 		if (lock) { \ | ||||
| 			*(__handle) = lock; \ | ||||
| 			spin_lock_init(*(__handle)); \ | ||||
| 		} \ | ||||
| 		lock ? AE_OK : AE_NO_MEMORY; \ | ||||
| 	}) | ||||
| 
 | ||||
| /*
 | ||||
|  * OSL interfaces added by Linux | ||||
|  */ | ||||
| void early_acpi_os_unmap_memory(void __iomem * virt, acpi_size size); | ||||
| 
 | ||||
| #endif				/* __KERNEL__ */ | ||||
| 
 | ||||
| #endif				/* __ACLINUXEX_H__ */ | ||||
							
								
								
									
										366
									
								
								include/acpi/processor.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										366
									
								
								include/acpi/processor.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,366 @@ | |||
| #ifndef __ACPI_PROCESSOR_H | ||||
| #define __ACPI_PROCESSOR_H | ||||
| 
 | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/cpu.h> | ||||
| #include <linux/thermal.h> | ||||
| #include <asm/acpi.h> | ||||
| 
 | ||||
| #define ACPI_PROCESSOR_CLASS		"processor" | ||||
| #define ACPI_PROCESSOR_DEVICE_NAME	"Processor" | ||||
| #define ACPI_PROCESSOR_DEVICE_HID	"ACPI0007" | ||||
| 
 | ||||
| #define ACPI_PROCESSOR_BUSY_METRIC	10 | ||||
| 
 | ||||
| #define ACPI_PROCESSOR_MAX_POWER	8 | ||||
| #define ACPI_PROCESSOR_MAX_C2_LATENCY	100 | ||||
| #define ACPI_PROCESSOR_MAX_C3_LATENCY	1000 | ||||
| 
 | ||||
| #define ACPI_PROCESSOR_MAX_THROTTLING	16 | ||||
| #define ACPI_PROCESSOR_MAX_THROTTLE	250	/* 25% */ | ||||
| #define ACPI_PROCESSOR_MAX_DUTY_WIDTH	4 | ||||
| 
 | ||||
| #define ACPI_PDC_REVISION_ID		0x1 | ||||
| 
 | ||||
| #define ACPI_PSD_REV0_REVISION		0	/* Support for _PSD as in ACPI 3.0 */ | ||||
| #define ACPI_PSD_REV0_ENTRIES		5 | ||||
| 
 | ||||
| #define ACPI_TSD_REV0_REVISION		0	/* Support for _PSD as in ACPI 3.0 */ | ||||
| #define ACPI_TSD_REV0_ENTRIES		5 | ||||
| /*
 | ||||
|  * Types of coordination defined in ACPI 3.0. Same macros can be used across | ||||
|  * P, C and T states | ||||
|  */ | ||||
| #define DOMAIN_COORD_TYPE_SW_ALL	0xfc | ||||
| #define DOMAIN_COORD_TYPE_SW_ANY	0xfd | ||||
| #define DOMAIN_COORD_TYPE_HW_ALL	0xfe | ||||
| 
 | ||||
| #define ACPI_CSTATE_SYSTEMIO	0 | ||||
| #define ACPI_CSTATE_FFH		1 | ||||
| #define ACPI_CSTATE_HALT	2 | ||||
| 
 | ||||
| #define ACPI_CX_DESC_LEN	32 | ||||
| 
 | ||||
| /* Power Management */ | ||||
| 
 | ||||
| struct acpi_processor_cx; | ||||
| 
 | ||||
| struct acpi_power_register { | ||||
| 	u8 descriptor; | ||||
| 	u16 length; | ||||
| 	u8 space_id; | ||||
| 	u8 bit_width; | ||||
| 	u8 bit_offset; | ||||
| 	u8 access_size; | ||||
| 	u64 address; | ||||
| } __packed; | ||||
| 
 | ||||
| struct acpi_processor_cx { | ||||
| 	u8 valid; | ||||
| 	u8 type; | ||||
| 	u32 address; | ||||
| 	u8 entry_method; | ||||
| 	u8 index; | ||||
| 	u32 latency; | ||||
| 	u8 bm_sts_skip; | ||||
| 	char desc[ACPI_CX_DESC_LEN]; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_processor_power { | ||||
| 	struct acpi_processor_cx *state; | ||||
| 	unsigned long bm_check_timestamp; | ||||
| 	u32 default_state; | ||||
| 	int count; | ||||
| 	struct acpi_processor_cx states[ACPI_PROCESSOR_MAX_POWER]; | ||||
| 	int timer_broadcast_on_state; | ||||
| }; | ||||
| 
 | ||||
| /* Performance Management */ | ||||
| 
 | ||||
| struct acpi_psd_package { | ||||
| 	u64 num_entries; | ||||
| 	u64 revision; | ||||
| 	u64 domain; | ||||
| 	u64 coord_type; | ||||
| 	u64 num_processors; | ||||
| } __packed; | ||||
| 
 | ||||
| struct acpi_pct_register { | ||||
| 	u8 descriptor; | ||||
| 	u16 length; | ||||
| 	u8 space_id; | ||||
| 	u8 bit_width; | ||||
| 	u8 bit_offset; | ||||
| 	u8 reserved; | ||||
| 	u64 address; | ||||
| } __packed; | ||||
| 
 | ||||
| struct acpi_processor_px { | ||||
| 	u64 core_frequency;	/* megahertz */ | ||||
| 	u64 power;	/* milliWatts */ | ||||
| 	u64 transition_latency;	/* microseconds */ | ||||
| 	u64 bus_master_latency;	/* microseconds */ | ||||
| 	u64 control;	/* control value */ | ||||
| 	u64 status;	/* success indicator */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_processor_performance { | ||||
| 	unsigned int state; | ||||
| 	unsigned int platform_limit; | ||||
| 	struct acpi_pct_register control_register; | ||||
| 	struct acpi_pct_register status_register; | ||||
| 	unsigned int state_count; | ||||
| 	struct acpi_processor_px *states; | ||||
| 	struct acpi_psd_package domain_info; | ||||
| 	cpumask_var_t shared_cpu_map; | ||||
| 	unsigned int shared_type; | ||||
| }; | ||||
| 
 | ||||
| /* Throttling Control */ | ||||
| 
 | ||||
| struct acpi_tsd_package { | ||||
| 	u64 num_entries; | ||||
| 	u64 revision; | ||||
| 	u64 domain; | ||||
| 	u64 coord_type; | ||||
| 	u64 num_processors; | ||||
| } __packed; | ||||
| 
 | ||||
| struct acpi_ptc_register { | ||||
| 	u8 descriptor; | ||||
| 	u16 length; | ||||
| 	u8 space_id; | ||||
| 	u8 bit_width; | ||||
| 	u8 bit_offset; | ||||
| 	u8 reserved; | ||||
| 	u64 address; | ||||
| } __packed; | ||||
| 
 | ||||
| struct acpi_processor_tx_tss { | ||||
| 	u64 freqpercentage;	/* */ | ||||
| 	u64 power;	/* milliWatts */ | ||||
| 	u64 transition_latency;	/* microseconds */ | ||||
| 	u64 control;	/* control value */ | ||||
| 	u64 status;	/* success indicator */ | ||||
| }; | ||||
| struct acpi_processor_tx { | ||||
| 	u16 power; | ||||
| 	u16 performance; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_processor; | ||||
| struct acpi_processor_throttling { | ||||
| 	unsigned int state; | ||||
| 	unsigned int platform_limit; | ||||
| 	struct acpi_pct_register control_register; | ||||
| 	struct acpi_pct_register status_register; | ||||
| 	unsigned int state_count; | ||||
| 	struct acpi_processor_tx_tss *states_tss; | ||||
| 	struct acpi_tsd_package domain_info; | ||||
| 	cpumask_var_t shared_cpu_map; | ||||
| 	int (*acpi_processor_get_throttling) (struct acpi_processor * pr); | ||||
| 	int (*acpi_processor_set_throttling) (struct acpi_processor * pr, | ||||
| 					      int state, bool force); | ||||
| 
 | ||||
| 	u32 address; | ||||
| 	u8 duty_offset; | ||||
| 	u8 duty_width; | ||||
| 	u8 tsd_valid_flag; | ||||
| 	unsigned int shared_type; | ||||
| 	struct acpi_processor_tx states[ACPI_PROCESSOR_MAX_THROTTLING]; | ||||
| }; | ||||
| 
 | ||||
| /* Limit Interface */ | ||||
| 
 | ||||
| struct acpi_processor_lx { | ||||
| 	int px;			/* performance state */ | ||||
| 	int tx;			/* throttle level */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_processor_limit { | ||||
| 	struct acpi_processor_lx state;	/* current limit */ | ||||
| 	struct acpi_processor_lx thermal;	/* thermal limit */ | ||||
| 	struct acpi_processor_lx user;	/* user limit */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_processor_flags { | ||||
| 	u8 power:1; | ||||
| 	u8 performance:1; | ||||
| 	u8 throttling:1; | ||||
| 	u8 limit:1; | ||||
| 	u8 bm_control:1; | ||||
| 	u8 bm_check:1; | ||||
| 	u8 has_cst:1; | ||||
| 	u8 power_setup_done:1; | ||||
| 	u8 bm_rld_set:1; | ||||
| 	u8 need_hotplug_init:1; | ||||
| }; | ||||
| 
 | ||||
| struct acpi_processor { | ||||
| 	acpi_handle handle; | ||||
| 	u32 acpi_id; | ||||
| 	u32 apic_id; | ||||
| 	u32 id; | ||||
| 	u32 pblk; | ||||
| 	int performance_platform_limit; | ||||
| 	int throttling_platform_limit; | ||||
| 	/* 0 - states 0..n-th state available */ | ||||
| 
 | ||||
| 	struct acpi_processor_flags flags; | ||||
| 	struct acpi_processor_power power; | ||||
| 	struct acpi_processor_performance *performance; | ||||
| 	struct acpi_processor_throttling throttling; | ||||
| 	struct acpi_processor_limit limit; | ||||
| 	struct thermal_cooling_device *cdev; | ||||
| 	struct device *dev; /* Processor device. */ | ||||
| }; | ||||
| 
 | ||||
| struct acpi_processor_errata { | ||||
| 	u8 smp; | ||||
| 	struct { | ||||
| 		u8 throttle:1; | ||||
| 		u8 fdma:1; | ||||
| 		u8 reserved:6; | ||||
| 		u32 bmisx; | ||||
| 	} piix4; | ||||
| }; | ||||
| 
 | ||||
| extern int acpi_processor_preregister_performance(struct | ||||
| 						  acpi_processor_performance | ||||
| 						  __percpu *performance); | ||||
| 
 | ||||
| extern int acpi_processor_register_performance(struct acpi_processor_performance | ||||
| 					       *performance, unsigned int cpu); | ||||
| extern void acpi_processor_unregister_performance(struct | ||||
| 						  acpi_processor_performance | ||||
| 						  *performance, | ||||
| 						  unsigned int cpu); | ||||
| 
 | ||||
| /* note: this locks both the calling module and the processor module
 | ||||
|          if a _PPC object exists, rmmod is disallowed then */ | ||||
| int acpi_processor_notify_smm(struct module *calling_module); | ||||
| 
 | ||||
| /* parsing the _P* objects. */ | ||||
| extern int acpi_processor_get_performance_info(struct acpi_processor *pr); | ||||
| 
 | ||||
| /* for communication between multiple parts of the processor kernel module */ | ||||
| DECLARE_PER_CPU(struct acpi_processor *, processors); | ||||
| extern struct acpi_processor_errata errata; | ||||
| 
 | ||||
| #ifdef ARCH_HAS_POWER_INIT | ||||
| void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags, | ||||
| 					unsigned int cpu); | ||||
| int acpi_processor_ffh_cstate_probe(unsigned int cpu, | ||||
| 				    struct acpi_processor_cx *cx, | ||||
| 				    struct acpi_power_register *reg); | ||||
| void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate); | ||||
| #else | ||||
| static inline void acpi_processor_power_init_bm_check(struct | ||||
| 						      acpi_processor_flags | ||||
| 						      *flags, unsigned int cpu) | ||||
| { | ||||
| 	flags->bm_check = 1; | ||||
| 	return; | ||||
| } | ||||
| static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu, | ||||
| 						  struct acpi_processor_cx *cx, | ||||
| 						  struct acpi_power_register | ||||
| 						  *reg) | ||||
| { | ||||
| 	return -1; | ||||
| } | ||||
| static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx | ||||
| 						   *cstate) | ||||
| { | ||||
| 	return; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /* in processor_perflib.c */ | ||||
| 
 | ||||
| #ifdef CONFIG_CPU_FREQ | ||||
| void acpi_processor_ppc_init(void); | ||||
| void acpi_processor_ppc_exit(void); | ||||
| int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag); | ||||
| extern int acpi_processor_get_bios_limit(int cpu, unsigned int *limit); | ||||
| #else | ||||
| static inline void acpi_processor_ppc_init(void) | ||||
| { | ||||
| 	return; | ||||
| } | ||||
| static inline void acpi_processor_ppc_exit(void) | ||||
| { | ||||
| 	return; | ||||
| } | ||||
| static inline int acpi_processor_ppc_has_changed(struct acpi_processor *pr, | ||||
| 								int event_flag) | ||||
| { | ||||
| 	static unsigned int printout = 1; | ||||
| 	if (printout) { | ||||
| 		printk(KERN_WARNING | ||||
| 		       "Warning: Processor Platform Limit event detected, but not handled.\n"); | ||||
| 		printk(KERN_WARNING | ||||
| 		       "Consider compiling CPUfreq support into your kernel.\n"); | ||||
| 		printout = 0; | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
| static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit) | ||||
| { | ||||
| 	return -ENODEV; | ||||
| } | ||||
| 
 | ||||
| #endif				/* CONFIG_CPU_FREQ */ | ||||
| 
 | ||||
| /* in processor_core.c */ | ||||
| void acpi_processor_set_pdc(acpi_handle handle); | ||||
| int acpi_get_apicid(acpi_handle, int type, u32 acpi_id); | ||||
| int acpi_map_cpuid(int apic_id, u32 acpi_id); | ||||
| int acpi_get_cpuid(acpi_handle, int type, u32 acpi_id); | ||||
| 
 | ||||
| /* in processor_throttling.c */ | ||||
| int acpi_processor_tstate_has_changed(struct acpi_processor *pr); | ||||
| int acpi_processor_get_throttling_info(struct acpi_processor *pr); | ||||
| extern int acpi_processor_set_throttling(struct acpi_processor *pr, | ||||
| 					 int state, bool force); | ||||
| /*
 | ||||
|  * Reevaluate whether the T-state is invalid after one cpu is | ||||
|  * onlined/offlined. In such case the flags.throttling will be updated. | ||||
|  */ | ||||
| extern void acpi_processor_reevaluate_tstate(struct acpi_processor *pr, | ||||
| 			unsigned long action); | ||||
| extern const struct file_operations acpi_processor_throttling_fops; | ||||
| extern void acpi_processor_throttling_init(void); | ||||
| /* in processor_idle.c */ | ||||
| int acpi_processor_power_init(struct acpi_processor *pr); | ||||
| int acpi_processor_power_exit(struct acpi_processor *pr); | ||||
| int acpi_processor_cst_has_changed(struct acpi_processor *pr); | ||||
| int acpi_processor_hotplug(struct acpi_processor *pr); | ||||
| extern struct cpuidle_driver acpi_idle_driver; | ||||
| 
 | ||||
| #ifdef CONFIG_PM_SLEEP | ||||
| void acpi_processor_syscore_init(void); | ||||
| void acpi_processor_syscore_exit(void); | ||||
| #else | ||||
| static inline void acpi_processor_syscore_init(void) {} | ||||
| static inline void acpi_processor_syscore_exit(void) {} | ||||
| #endif | ||||
| 
 | ||||
| /* in processor_thermal.c */ | ||||
| int acpi_processor_get_limit_info(struct acpi_processor *pr); | ||||
| extern const struct thermal_cooling_device_ops processor_cooling_ops; | ||||
| #ifdef CONFIG_CPU_FREQ | ||||
| void acpi_thermal_cpufreq_init(void); | ||||
| void acpi_thermal_cpufreq_exit(void); | ||||
| #else | ||||
| static inline void acpi_thermal_cpufreq_init(void) | ||||
| { | ||||
| 	return; | ||||
| } | ||||
| static inline void acpi_thermal_cpufreq_exit(void) | ||||
| { | ||||
| 	return; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										11
									
								
								include/acpi/reboot.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								include/acpi/reboot.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| #ifndef __ACPI_REBOOT_H | ||||
| #define __ACPI_REBOOT_H | ||||
| 
 | ||||
| #ifdef CONFIG_ACPI | ||||
| extern void acpi_reboot(void); | ||||
| #else | ||||
| static inline void acpi_reboot(void) { } | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
							
								
								
									
										38
									
								
								include/acpi/video.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/acpi/video.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| #ifndef __ACPI_VIDEO_H | ||||
| #define __ACPI_VIDEO_H | ||||
| 
 | ||||
| #include <linux/errno.h> /* for ENODEV */ | ||||
| 
 | ||||
| struct acpi_device; | ||||
| 
 | ||||
| #define ACPI_VIDEO_CLASS	"video" | ||||
| 
 | ||||
| #define ACPI_VIDEO_DISPLAY_CRT  1 | ||||
| #define ACPI_VIDEO_DISPLAY_TV   2 | ||||
| #define ACPI_VIDEO_DISPLAY_DVI  3 | ||||
| #define ACPI_VIDEO_DISPLAY_LCD  4 | ||||
| 
 | ||||
| #define ACPI_VIDEO_DISPLAY_LEGACY_MONITOR 0x0100 | ||||
| #define ACPI_VIDEO_DISPLAY_LEGACY_PANEL   0x0110 | ||||
| #define ACPI_VIDEO_DISPLAY_LEGACY_TV      0x0200 | ||||
| 
 | ||||
| #if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE) | ||||
| extern int acpi_video_register(void); | ||||
| extern void acpi_video_unregister(void); | ||||
| extern void acpi_video_unregister_backlight(void); | ||||
| extern int acpi_video_get_edid(struct acpi_device *device, int type, | ||||
| 			       int device_id, void **edid); | ||||
| extern bool acpi_video_verify_backlight_support(void); | ||||
| #else | ||||
| static inline int acpi_video_register(void) { return 0; } | ||||
| static inline void acpi_video_unregister(void) { return; } | ||||
| static inline void acpi_video_unregister_backlight(void) { return; } | ||||
| static inline int acpi_video_get_edid(struct acpi_device *device, int type, | ||||
| 				      int device_id, void **edid) | ||||
| { | ||||
| 	return -ENODEV; | ||||
| } | ||||
| static inline bool acpi_video_verify_backlight_support(void) { return false; } | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										37
									
								
								include/asm-generic/4level-fixup.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								include/asm-generic/4level-fixup.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| #ifndef _4LEVEL_FIXUP_H | ||||
| #define _4LEVEL_FIXUP_H | ||||
| 
 | ||||
| #define __ARCH_HAS_4LEVEL_HACK | ||||
| #define __PAGETABLE_PUD_FOLDED | ||||
| 
 | ||||
| #define PUD_SIZE			PGDIR_SIZE | ||||
| #define PUD_MASK			PGDIR_MASK | ||||
| #define PTRS_PER_PUD			1 | ||||
| 
 | ||||
| #define pud_t				pgd_t | ||||
| 
 | ||||
| #define pmd_alloc(mm, pud, address) \ | ||||
| 	((unlikely(pgd_none(*(pud))) && __pmd_alloc(mm, pud, address))? \ | ||||
|  		NULL: pmd_offset(pud, address)) | ||||
| 
 | ||||
| #define pud_alloc(mm, pgd, address)	(pgd) | ||||
| #define pud_offset(pgd, start)		(pgd) | ||||
| #define pud_none(pud)			0 | ||||
| #define pud_bad(pud)			0 | ||||
| #define pud_present(pud)		1 | ||||
| #define pud_ERROR(pud)			do { } while (0) | ||||
| #define pud_clear(pud)			pgd_clear(pud) | ||||
| #define pud_val(pud)			pgd_val(pud) | ||||
| #define pud_populate(mm, pud, pmd)	pgd_populate(mm, pud, pmd) | ||||
| #define pud_page(pud)			pgd_page(pud) | ||||
| #define pud_page_vaddr(pud)		pgd_page_vaddr(pud) | ||||
| 
 | ||||
| #undef pud_free_tlb | ||||
| #define pud_free_tlb(tlb, x, addr)	do { } while (0) | ||||
| #define pud_free(mm, x)			do { } while (0) | ||||
| #define __pud_free_tlb(tlb, x, addr)	do { } while (0) | ||||
| 
 | ||||
| #undef  pud_addr_end | ||||
| #define pud_addr_end(addr, end)		(end) | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										1
									
								
								include/asm-generic/Kbuild.asm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								include/asm-generic/Kbuild.asm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| include include/uapi/asm-generic/Kbuild.asm | ||||
							
								
								
									
										258
									
								
								include/asm-generic/atomic-long.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										258
									
								
								include/asm-generic/atomic-long.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,258 @@ | |||
| #ifndef _ASM_GENERIC_ATOMIC_LONG_H | ||||
| #define _ASM_GENERIC_ATOMIC_LONG_H | ||||
| /*
 | ||||
|  * Copyright (C) 2005 Silicon Graphics, Inc. | ||||
|  *	Christoph Lameter | ||||
|  * | ||||
|  * Allows to provide arch independent atomic definitions without the need to | ||||
|  * edit all arch specific atomic.h files. | ||||
|  */ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Suppport for atomic_long_t | ||||
|  * | ||||
|  * Casts for parameters are avoided for existing atomic functions in order to | ||||
|  * avoid issues with cast-as-lval under gcc 4.x and other limitations that the | ||||
|  * macros of a platform may have. | ||||
|  */ | ||||
| 
 | ||||
| #if BITS_PER_LONG == 64 | ||||
| 
 | ||||
| typedef atomic64_t atomic_long_t; | ||||
| 
 | ||||
| #define ATOMIC_LONG_INIT(i)	ATOMIC64_INIT(i) | ||||
| 
 | ||||
| static inline long atomic_long_read(atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic64_read(v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_set(atomic_long_t *l, long i) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	atomic64_set(v, i); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_inc(atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	atomic64_inc(v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_dec(atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	atomic64_dec(v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_add(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	atomic64_add(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_sub(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	atomic64_sub(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return atomic64_sub_and_test(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_dec_and_test(atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return atomic64_dec_and_test(v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_inc_and_test(atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return atomic64_inc_and_test(v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_add_negative(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return atomic64_add_negative(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_add_return(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic64_add_return(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_sub_return(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic64_sub_return(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_inc_return(atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic64_inc_return(v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_dec_return(atomic_long_t *l) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic64_dec_return(v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | ||||
| { | ||||
| 	atomic64_t *v = (atomic64_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic64_add_unless(v, a, u); | ||||
| } | ||||
| 
 | ||||
| #define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l)) | ||||
| 
 | ||||
| #define atomic_long_cmpxchg(l, old, new) \ | ||||
| 	(atomic64_cmpxchg((atomic64_t *)(l), (old), (new))) | ||||
| #define atomic_long_xchg(v, new) \ | ||||
| 	(atomic64_xchg((atomic64_t *)(v), (new))) | ||||
| 
 | ||||
| #else  /*  BITS_PER_LONG == 64  */ | ||||
| 
 | ||||
| typedef atomic_t atomic_long_t; | ||||
| 
 | ||||
| #define ATOMIC_LONG_INIT(i)	ATOMIC_INIT(i) | ||||
| static inline long atomic_long_read(atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic_read(v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_set(atomic_long_t *l, long i) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	atomic_set(v, i); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_inc(atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	atomic_inc(v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_dec(atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	atomic_dec(v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_add(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	atomic_add(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_long_sub(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	atomic_sub(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return atomic_sub_and_test(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_dec_and_test(atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return atomic_dec_and_test(v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_inc_and_test(atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return atomic_inc_and_test(v); | ||||
| } | ||||
| 
 | ||||
| static inline int atomic_long_add_negative(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return atomic_add_negative(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_add_return(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic_add_return(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_sub_return(long i, atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic_sub_return(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_inc_return(atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic_inc_return(v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_dec_return(atomic_long_t *l) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic_dec_return(v); | ||||
| } | ||||
| 
 | ||||
| static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | ||||
| { | ||||
| 	atomic_t *v = (atomic_t *)l; | ||||
| 
 | ||||
| 	return (long)atomic_add_unless(v, a, u); | ||||
| } | ||||
| 
 | ||||
| #define atomic_long_inc_not_zero(l) atomic_inc_not_zero((atomic_t *)(l)) | ||||
| 
 | ||||
| #define atomic_long_cmpxchg(l, old, new) \ | ||||
| 	(atomic_cmpxchg((atomic_t *)(l), (old), (new))) | ||||
| #define atomic_long_xchg(v, new) \ | ||||
| 	(atomic_xchg((atomic_t *)(v), (new))) | ||||
| 
 | ||||
| #endif  /*  BITS_PER_LONG == 64  */ | ||||
| 
 | ||||
| #endif  /*  _ASM_GENERIC_ATOMIC_LONG_H  */ | ||||
							
								
								
									
										187
									
								
								include/asm-generic/atomic.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										187
									
								
								include/asm-generic/atomic.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,187 @@ | |||
| /*
 | ||||
|  * Generic C implementation of atomic counter operations. Usable on | ||||
|  * UP systems only. Do not include in machine independent code. | ||||
|  * | ||||
|  * Originally implemented for MN10300. | ||||
|  * | ||||
|  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||||
|  * Written by David Howells (dhowells@redhat.com) | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public Licence | ||||
|  * as published by the Free Software Foundation; either version | ||||
|  * 2 of the Licence, or (at your option) any later version. | ||||
|  */ | ||||
| #ifndef __ASM_GENERIC_ATOMIC_H | ||||
| #define __ASM_GENERIC_ATOMIC_H | ||||
| 
 | ||||
| #include <asm/cmpxchg.h> | ||||
| #include <asm/barrier.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * atomic_$op() - $op integer to atomic variable | ||||
|  * @i: integer value to $op | ||||
|  * @v: pointer to the atomic variable | ||||
|  * | ||||
|  * Atomically $ops @i to @v. Does not strictly guarantee a memory-barrier, use | ||||
|  * smp_mb__{before,after}_atomic(). | ||||
|  */ | ||||
| 
 | ||||
| /*
 | ||||
|  * atomic_$op_return() - $op interer to atomic variable and returns the result | ||||
|  * @i: integer value to $op | ||||
|  * @v: pointer to the atomic variable | ||||
|  * | ||||
|  * Atomically $ops @i to @v. Does imply a full memory barrier. | ||||
|  */ | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| 
 | ||||
| /* we can build all atomic primitives from cmpxchg */ | ||||
| 
 | ||||
| #define ATOMIC_OP(op, c_op)						\ | ||||
| static inline void atomic_##op(int i, atomic_t *v)			\ | ||||
| {									\ | ||||
| 	int c, old;							\ | ||||
| 									\ | ||||
| 	c = v->counter;							\ | ||||
| 	while ((old = cmpxchg(&v->counter, c, c c_op i)) != c)		\ | ||||
| 		c = old;						\ | ||||
| } | ||||
| 
 | ||||
| #define ATOMIC_OP_RETURN(op, c_op)					\ | ||||
| static inline int atomic_##op##_return(int i, atomic_t *v)		\ | ||||
| {									\ | ||||
| 	int c, old;							\ | ||||
| 									\ | ||||
| 	c = v->counter;							\ | ||||
| 	while ((old = cmpxchg(&v->counter, c, c c_op i)) != c)		\ | ||||
| 		c = old;						\ | ||||
| 									\ | ||||
| 	return c c_op i;						\ | ||||
| } | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| #include <linux/irqflags.h> | ||||
| 
 | ||||
| #define ATOMIC_OP(op, c_op)						\ | ||||
| static inline void atomic_##op(int i, atomic_t *v)			\ | ||||
| {									\ | ||||
| 	unsigned long flags;						\ | ||||
| 									\ | ||||
| 	raw_local_irq_save(flags);					\ | ||||
| 	v->counter = v->counter c_op i;					\ | ||||
| 	raw_local_irq_restore(flags);					\ | ||||
| } | ||||
| 
 | ||||
| #define ATOMIC_OP_RETURN(op, c_op)					\ | ||||
| static inline int atomic_##op##_return(int i, atomic_t *v)		\ | ||||
| {									\ | ||||
| 	unsigned long flags;						\ | ||||
| 	int ret;							\ | ||||
| 									\ | ||||
| 	raw_local_irq_save(flags);					\ | ||||
| 	ret = (v->counter = v->counter c_op i);				\ | ||||
| 	raw_local_irq_restore(flags);					\ | ||||
| 									\ | ||||
| 	return ret;							\ | ||||
| } | ||||
| 
 | ||||
| #endif /* CONFIG_SMP */ | ||||
| 
 | ||||
| #ifndef atomic_add_return | ||||
| ATOMIC_OP_RETURN(add, +) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef atomic_sub_return | ||||
| ATOMIC_OP_RETURN(sub, -) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef atomic_clear_mask | ||||
| ATOMIC_OP(and, &) | ||||
| #define atomic_clear_mask(i, v) atomic_and(~(i), (v)) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef atomic_set_mask | ||||
| #define CONFIG_ARCH_HAS_ATOMIC_OR | ||||
| ATOMIC_OP(or, |) | ||||
| #define atomic_set_mask(i, v)	atomic_or((i), (v)) | ||||
| #endif | ||||
| 
 | ||||
| #undef ATOMIC_OP_RETURN | ||||
| #undef ATOMIC_OP | ||||
| 
 | ||||
| /*
 | ||||
|  * Atomic operations that C can't guarantee us.  Useful for | ||||
|  * resource counting etc.. | ||||
|  */ | ||||
| 
 | ||||
| #define ATOMIC_INIT(i)	{ (i) } | ||||
| 
 | ||||
| /**
 | ||||
|  * atomic_read - read atomic variable | ||||
|  * @v: pointer of type atomic_t | ||||
|  * | ||||
|  * Atomically reads the value of @v. | ||||
|  */ | ||||
| #ifndef atomic_read | ||||
| #define atomic_read(v)	ACCESS_ONCE((v)->counter) | ||||
| #endif | ||||
| 
 | ||||
| /**
 | ||||
|  * atomic_set - set atomic variable | ||||
|  * @v: pointer of type atomic_t | ||||
|  * @i: required value | ||||
|  * | ||||
|  * Atomically sets the value of @v to @i. | ||||
|  */ | ||||
| #define atomic_set(v, i) (((v)->counter) = (i)) | ||||
| 
 | ||||
| #include <linux/irqflags.h> | ||||
| 
 | ||||
| static inline int atomic_add_negative(int i, atomic_t *v) | ||||
| { | ||||
| 	return atomic_add_return(i, v) < 0; | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_add(int i, atomic_t *v) | ||||
| { | ||||
| 	atomic_add_return(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_sub(int i, atomic_t *v) | ||||
| { | ||||
| 	atomic_sub_return(i, v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_inc(atomic_t *v) | ||||
| { | ||||
| 	atomic_add_return(1, v); | ||||
| } | ||||
| 
 | ||||
| static inline void atomic_dec(atomic_t *v) | ||||
| { | ||||
| 	atomic_sub_return(1, v); | ||||
| } | ||||
| 
 | ||||
| #define atomic_dec_return(v)		atomic_sub_return(1, (v)) | ||||
| #define atomic_inc_return(v)		atomic_add_return(1, (v)) | ||||
| 
 | ||||
| #define atomic_sub_and_test(i, v)	(atomic_sub_return((i), (v)) == 0) | ||||
| #define atomic_dec_and_test(v)		(atomic_dec_return(v) == 0) | ||||
| #define atomic_inc_and_test(v)		(atomic_inc_return(v) == 0) | ||||
| 
 | ||||
| #define atomic_xchg(ptr, v)		(xchg(&(ptr)->counter, (v))) | ||||
| #define atomic_cmpxchg(v, old, new)	(cmpxchg(&((v)->counter), (old), (new))) | ||||
| 
 | ||||
| static inline int __atomic_add_unless(atomic_t *v, int a, int u) | ||||
| { | ||||
| 	int c, old; | ||||
| 	c = atomic_read(v); | ||||
| 	while (c != u && (old = atomic_cmpxchg(v, c, c + a)) != c) | ||||
| 		c = old; | ||||
| 	return c; | ||||
| } | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_ATOMIC_H */ | ||||
							
								
								
									
										54
									
								
								include/asm-generic/atomic64.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								include/asm-generic/atomic64.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| /*
 | ||||
|  * Generic implementation of 64-bit atomics using spinlocks, | ||||
|  * useful on processors that don't have 64-bit atomic instructions. | ||||
|  * | ||||
|  * Copyright © 2009 Paul Mackerras, IBM Corp. <paulus@au1.ibm.com> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License | ||||
|  * as published by the Free Software Foundation; either version | ||||
|  * 2 of the License, or (at your option) any later version. | ||||
|  */ | ||||
| #ifndef _ASM_GENERIC_ATOMIC64_H | ||||
| #define _ASM_GENERIC_ATOMIC64_H | ||||
| 
 | ||||
| typedef struct { | ||||
| 	long long counter; | ||||
| } atomic64_t; | ||||
| 
 | ||||
| #define ATOMIC64_INIT(i)	{ (i) } | ||||
| 
 | ||||
| extern long long atomic64_read(const atomic64_t *v); | ||||
| extern void	 atomic64_set(atomic64_t *v, long long i); | ||||
| 
 | ||||
| #define ATOMIC64_OP(op)							\ | ||||
| extern void	 atomic64_##op(long long a, atomic64_t *v); | ||||
| 
 | ||||
| #define ATOMIC64_OP_RETURN(op)						\ | ||||
| extern long long atomic64_##op##_return(long long a, atomic64_t *v); | ||||
| 
 | ||||
| #define ATOMIC64_OPS(op)	ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op) | ||||
| 
 | ||||
| ATOMIC64_OPS(add) | ||||
| ATOMIC64_OPS(sub) | ||||
| 
 | ||||
| #undef ATOMIC64_OPS | ||||
| #undef ATOMIC64_OP_RETURN | ||||
| #undef ATOMIC64_OP | ||||
| 
 | ||||
| extern long long atomic64_dec_if_positive(atomic64_t *v); | ||||
| extern long long atomic64_cmpxchg(atomic64_t *v, long long o, long long n); | ||||
| extern long long atomic64_xchg(atomic64_t *v, long long new); | ||||
| extern int	 atomic64_add_unless(atomic64_t *v, long long a, long long u); | ||||
| 
 | ||||
| #define atomic64_add_negative(a, v)	(atomic64_add_return((a), (v)) < 0) | ||||
| #define atomic64_inc(v)			atomic64_add(1LL, (v)) | ||||
| #define atomic64_inc_return(v)		atomic64_add_return(1LL, (v)) | ||||
| #define atomic64_inc_and_test(v) 	(atomic64_inc_return(v) == 0) | ||||
| #define atomic64_sub_and_test(a, v)	(atomic64_sub_return((a), (v)) == 0) | ||||
| #define atomic64_dec(v)			atomic64_sub(1LL, (v)) | ||||
| #define atomic64_dec_return(v)		atomic64_sub_return(1LL, (v)) | ||||
| #define atomic64_dec_and_test(v)	(atomic64_dec_return((v)) == 0) | ||||
| #define atomic64_inc_not_zero(v) 	atomic64_add_unless((v), 1LL, 0LL) | ||||
| 
 | ||||
| #endif  /*  _ASM_GENERIC_ATOMIC64_H  */ | ||||
							
								
								
									
										32
									
								
								include/asm-generic/audit_change_attr.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								include/asm-generic/audit_change_attr.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| #ifdef __NR_chmod | ||||
| __NR_chmod, | ||||
| #endif | ||||
| __NR_fchmod, | ||||
| #ifdef __NR_chown | ||||
| __NR_chown, | ||||
| __NR_lchown, | ||||
| #endif | ||||
| #ifdef __NR_fchown | ||||
| __NR_fchown, | ||||
| #endif | ||||
| __NR_setxattr, | ||||
| __NR_lsetxattr, | ||||
| __NR_fsetxattr, | ||||
| __NR_removexattr, | ||||
| __NR_lremovexattr, | ||||
| __NR_fremovexattr, | ||||
| #ifdef __NR_fchownat | ||||
| __NR_fchownat, | ||||
| __NR_fchmodat, | ||||
| #endif | ||||
| #ifdef __NR_chown32 | ||||
| __NR_chown32, | ||||
| __NR_fchown32, | ||||
| __NR_lchown32, | ||||
| #endif | ||||
| #ifdef __NR_link | ||||
| __NR_link, | ||||
| #endif | ||||
| #ifdef __NR_linkat | ||||
| __NR_linkat, | ||||
| #endif | ||||
							
								
								
									
										32
									
								
								include/asm-generic/audit_dir_write.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								include/asm-generic/audit_dir_write.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| #ifdef __NR_rename | ||||
| __NR_rename, | ||||
| #endif | ||||
| #ifdef __NR_mkdir | ||||
| __NR_mkdir, | ||||
| #endif | ||||
| #ifdef __NR_rmdir | ||||
| __NR_rmdir, | ||||
| #endif | ||||
| #ifdef __NR_creat | ||||
| __NR_creat, | ||||
| #endif | ||||
| #ifdef __NR_link | ||||
| __NR_link, | ||||
| #endif | ||||
| #ifdef __NR_unlink | ||||
| __NR_unlink, | ||||
| #endif | ||||
| #ifdef __NR_symlink | ||||
| __NR_symlink, | ||||
| #endif | ||||
| #ifdef __NR_mknod | ||||
| __NR_mknod, | ||||
| #endif | ||||
| #ifdef __NR_mkdirat | ||||
| __NR_mkdirat, | ||||
| __NR_mknodat, | ||||
| __NR_unlinkat, | ||||
| __NR_renameat, | ||||
| __NR_linkat, | ||||
| __NR_symlinkat, | ||||
| #endif | ||||
							
								
								
									
										13
									
								
								include/asm-generic/audit_read.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								include/asm-generic/audit_read.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| #ifdef __NR_readlink | ||||
| __NR_readlink, | ||||
| #endif | ||||
| __NR_quotactl, | ||||
| __NR_listxattr, | ||||
| __NR_llistxattr, | ||||
| __NR_flistxattr, | ||||
| __NR_getxattr, | ||||
| __NR_lgetxattr, | ||||
| __NR_fgetxattr, | ||||
| #ifdef __NR_readlinkat | ||||
| __NR_readlinkat, | ||||
| #endif | ||||
							
								
								
									
										3
									
								
								include/asm-generic/audit_signal.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								include/asm-generic/audit_signal.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| __NR_kill, | ||||
| __NR_tgkill, | ||||
| __NR_tkill, | ||||
							
								
								
									
										21
									
								
								include/asm-generic/audit_write.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								include/asm-generic/audit_write.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| #include <asm-generic/audit_dir_write.h> | ||||
| __NR_acct, | ||||
| #ifdef __NR_swapon | ||||
| __NR_swapon, | ||||
| #endif | ||||
| __NR_quotactl, | ||||
| #ifdef __NR_truncate | ||||
| __NR_truncate, | ||||
| #endif | ||||
| #ifdef __NR_truncate64 | ||||
| __NR_truncate64, | ||||
| #endif | ||||
| #ifdef __NR_ftruncate | ||||
| __NR_ftruncate, | ||||
| #endif | ||||
| #ifdef __NR_ftruncate64 | ||||
| __NR_ftruncate64, | ||||
| #endif | ||||
| #ifdef __NR_bind | ||||
| __NR_bind,		/* bind can affect fs object only in one way... */ | ||||
| #endif | ||||
							
								
								
									
										89
									
								
								include/asm-generic/barrier.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								include/asm-generic/barrier.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,89 @@ | |||
| /*
 | ||||
|  * Generic barrier definitions, originally based on MN10300 definitions. | ||||
|  * | ||||
|  * It should be possible to use these on really simple architectures, | ||||
|  * but it serves more as a starting point for new ports. | ||||
|  * | ||||
|  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||||
|  * Written by David Howells (dhowells@redhat.com) | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public Licence | ||||
|  * as published by the Free Software Foundation; either version | ||||
|  * 2 of the Licence, or (at your option) any later version. | ||||
|  */ | ||||
| #ifndef __ASM_GENERIC_BARRIER_H | ||||
| #define __ASM_GENERIC_BARRIER_H | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| 
 | ||||
| #ifndef nop | ||||
| #define nop()	asm volatile ("nop") | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Force strict CPU ordering. And yes, this is required on UP too when we're | ||||
|  * talking to devices. | ||||
|  * | ||||
|  * Fall back to compiler barriers if nothing better is provided. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef mb | ||||
| #define mb()	barrier() | ||||
| #endif | ||||
| 
 | ||||
| #ifndef rmb | ||||
| #define rmb()	mb() | ||||
| #endif | ||||
| 
 | ||||
| #ifndef wmb | ||||
| #define wmb()	mb() | ||||
| #endif | ||||
| 
 | ||||
| #ifndef read_barrier_depends | ||||
| #define read_barrier_depends()		do { } while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| #define smp_mb()	mb() | ||||
| #define smp_rmb()	rmb() | ||||
| #define smp_wmb()	wmb() | ||||
| #define smp_read_barrier_depends()	read_barrier_depends() | ||||
| #else | ||||
| #define smp_mb()	barrier() | ||||
| #define smp_rmb()	barrier() | ||||
| #define smp_wmb()	barrier() | ||||
| #define smp_read_barrier_depends()	do { } while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef set_mb | ||||
| #define set_mb(var, value)  do { (var) = (value); mb(); } while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef smp_mb__before_atomic | ||||
| #define smp_mb__before_atomic()	smp_mb() | ||||
| #endif | ||||
| 
 | ||||
| #ifndef smp_mb__after_atomic | ||||
| #define smp_mb__after_atomic()	smp_mb() | ||||
| #endif | ||||
| 
 | ||||
| #define smp_store_release(p, v)						\ | ||||
| do {									\ | ||||
| 	compiletime_assert_atomic_type(*p);				\ | ||||
| 	smp_mb();							\ | ||||
| 	ACCESS_ONCE(*p) = (v);						\ | ||||
| } while (0) | ||||
| 
 | ||||
| #define smp_load_acquire(p)						\ | ||||
| ({									\ | ||||
| 	typeof(*p) ___p1 = ACCESS_ONCE(*p);				\ | ||||
| 	compiletime_assert_atomic_type(*p);				\ | ||||
| 	smp_mb();							\ | ||||
| 	___p1;								\ | ||||
| }) | ||||
| 
 | ||||
| #endif /* !__ASSEMBLY__ */ | ||||
| #endif /* __ASM_GENERIC_BARRIER_H */ | ||||
							
								
								
									
										37
									
								
								include/asm-generic/bitops.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								include/asm-generic/bitops.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| #ifndef __ASM_GENERIC_BITOPS_H | ||||
| #define __ASM_GENERIC_BITOPS_H | ||||
| 
 | ||||
| /*
 | ||||
|  * For the benefit of those who are trying to port Linux to another | ||||
|  * architecture, here are some C-language equivalents.  You should | ||||
|  * recode these in the native assembly language, if at all possible. | ||||
|  * | ||||
|  * C language equivalents written by Theodore Ts'o, 9/26/92 | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/irqflags.h> | ||||
| #include <linux/compiler.h> | ||||
| #include <asm/barrier.h> | ||||
| 
 | ||||
| #include <asm-generic/bitops/__ffs.h> | ||||
| #include <asm-generic/bitops/ffz.h> | ||||
| #include <asm-generic/bitops/fls.h> | ||||
| #include <asm-generic/bitops/__fls.h> | ||||
| #include <asm-generic/bitops/fls64.h> | ||||
| #include <asm-generic/bitops/find.h> | ||||
| 
 | ||||
| #ifndef _LINUX_BITOPS_H | ||||
| #error only <linux/bitops.h> can be included directly | ||||
| #endif | ||||
| 
 | ||||
| #include <asm-generic/bitops/sched.h> | ||||
| #include <asm-generic/bitops/ffs.h> | ||||
| #include <asm-generic/bitops/hweight.h> | ||||
| #include <asm-generic/bitops/lock.h> | ||||
| 
 | ||||
| #include <asm-generic/bitops/atomic.h> | ||||
| #include <asm-generic/bitops/non-atomic.h> | ||||
| #include <asm-generic/bitops/le.h> | ||||
| #include <asm-generic/bitops/ext2-atomic.h> | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_BITOPS_H */ | ||||
							
								
								
									
										43
									
								
								include/asm-generic/bitops/__ffs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								include/asm-generic/bitops/__ffs.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS___FFS_H_ | ||||
| #define _ASM_GENERIC_BITOPS___FFS_H_ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * __ffs - find first bit in word. | ||||
|  * @word: The word to search | ||||
|  * | ||||
|  * Undefined if no bit exists, so code should check against 0 first. | ||||
|  */ | ||||
| static __always_inline unsigned long __ffs(unsigned long word) | ||||
| { | ||||
| 	int num = 0; | ||||
| 
 | ||||
| #if BITS_PER_LONG == 64 | ||||
| 	if ((word & 0xffffffff) == 0) { | ||||
| 		num += 32; | ||||
| 		word >>= 32; | ||||
| 	} | ||||
| #endif | ||||
| 	if ((word & 0xffff) == 0) { | ||||
| 		num += 16; | ||||
| 		word >>= 16; | ||||
| 	} | ||||
| 	if ((word & 0xff) == 0) { | ||||
| 		num += 8; | ||||
| 		word >>= 8; | ||||
| 	} | ||||
| 	if ((word & 0xf) == 0) { | ||||
| 		num += 4; | ||||
| 		word >>= 4; | ||||
| 	} | ||||
| 	if ((word & 0x3) == 0) { | ||||
| 		num += 2; | ||||
| 		word >>= 2; | ||||
| 	} | ||||
| 	if ((word & 0x1) == 0) | ||||
| 		num += 1; | ||||
| 	return num; | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS___FFS_H_ */ | ||||
							
								
								
									
										43
									
								
								include/asm-generic/bitops/__fls.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								include/asm-generic/bitops/__fls.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS___FLS_H_ | ||||
| #define _ASM_GENERIC_BITOPS___FLS_H_ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * __fls - find last (most-significant) set bit in a long word | ||||
|  * @word: the word to search | ||||
|  * | ||||
|  * Undefined if no set bit exists, so code should check against 0 first. | ||||
|  */ | ||||
| static __always_inline unsigned long __fls(unsigned long word) | ||||
| { | ||||
| 	int num = BITS_PER_LONG - 1; | ||||
| 
 | ||||
| #if BITS_PER_LONG == 64 | ||||
| 	if (!(word & (~0ul << 32))) { | ||||
| 		num -= 32; | ||||
| 		word <<= 32; | ||||
| 	} | ||||
| #endif | ||||
| 	if (!(word & (~0ul << (BITS_PER_LONG-16)))) { | ||||
| 		num -= 16; | ||||
| 		word <<= 16; | ||||
| 	} | ||||
| 	if (!(word & (~0ul << (BITS_PER_LONG-8)))) { | ||||
| 		num -= 8; | ||||
| 		word <<= 8; | ||||
| 	} | ||||
| 	if (!(word & (~0ul << (BITS_PER_LONG-4)))) { | ||||
| 		num -= 4; | ||||
| 		word <<= 4; | ||||
| 	} | ||||
| 	if (!(word & (~0ul << (BITS_PER_LONG-2)))) { | ||||
| 		num -= 2; | ||||
| 		word <<= 2; | ||||
| 	} | ||||
| 	if (!(word & (~0ul << (BITS_PER_LONG-1)))) | ||||
| 		num -= 1; | ||||
| 	return num; | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS___FLS_H_ */ | ||||
							
								
								
									
										25
									
								
								include/asm-generic/bitops/arch_hweight.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								include/asm-generic/bitops/arch_hweight.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_ARCH_HWEIGHT_H_ | ||||
| #define _ASM_GENERIC_BITOPS_ARCH_HWEIGHT_H_ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| 
 | ||||
| static inline unsigned int __arch_hweight32(unsigned int w) | ||||
| { | ||||
| 	return __sw_hweight32(w); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned int __arch_hweight16(unsigned int w) | ||||
| { | ||||
| 	return __sw_hweight16(w); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned int __arch_hweight8(unsigned int w) | ||||
| { | ||||
| 	return __sw_hweight8(w); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long __arch_hweight64(__u64 w) | ||||
| { | ||||
| 	return __sw_hweight64(w); | ||||
| } | ||||
| #endif /* _ASM_GENERIC_BITOPS_HWEIGHT_H_ */ | ||||
							
								
								
									
										189
									
								
								include/asm-generic/bitops/atomic.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								include/asm-generic/bitops/atomic.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,189 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_ATOMIC_H_ | ||||
| #define _ASM_GENERIC_BITOPS_ATOMIC_H_ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| #include <linux/irqflags.h> | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| #include <asm/spinlock.h> | ||||
| #include <asm/cache.h>		/* we use L1_CACHE_BYTES */ | ||||
| 
 | ||||
| /* Use an array of spinlocks for our atomic_ts.
 | ||||
|  * Hash function to index into a different SPINLOCK. | ||||
|  * Since "a" is usually an address, use one spinlock per cacheline. | ||||
|  */ | ||||
| #  define ATOMIC_HASH_SIZE 4 | ||||
| #  define ATOMIC_HASH(a) (&(__atomic_hash[ (((unsigned long) a)/L1_CACHE_BYTES) & (ATOMIC_HASH_SIZE-1) ])) | ||||
| 
 | ||||
| extern arch_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned; | ||||
| 
 | ||||
| /* Can't use raw_spin_lock_irq because of #include problems, so
 | ||||
|  * this is the substitute */ | ||||
| #define _atomic_spin_lock_irqsave(l,f) do {	\ | ||||
| 	arch_spinlock_t *s = ATOMIC_HASH(l);	\ | ||||
| 	local_irq_save(f);			\ | ||||
| 	arch_spin_lock(s);			\ | ||||
| } while(0) | ||||
| 
 | ||||
| #define _atomic_spin_unlock_irqrestore(l,f) do {	\ | ||||
| 	arch_spinlock_t *s = ATOMIC_HASH(l);		\ | ||||
| 	arch_spin_unlock(s);				\ | ||||
| 	local_irq_restore(f);				\ | ||||
| } while(0) | ||||
| 
 | ||||
| 
 | ||||
| #else | ||||
| #  define _atomic_spin_lock_irqsave(l,f) do { local_irq_save(f); } while (0) | ||||
| #  define _atomic_spin_unlock_irqrestore(l,f) do { local_irq_restore(f); } while (0) | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * NMI events can occur at any time, including when interrupts have been | ||||
|  * disabled by *_irqsave().  So you can get NMI events occurring while a | ||||
|  * *_bit function is holding a spin lock.  If the NMI handler also wants | ||||
|  * to do bit manipulation (and they do) then you can get a deadlock | ||||
|  * between the original caller of *_bit() and the NMI handler. | ||||
|  * | ||||
|  * by Keith Owens | ||||
|  */ | ||||
| 
 | ||||
| /**
 | ||||
|  * set_bit - Atomically set a bit in memory | ||||
|  * @nr: the bit to set | ||||
|  * @addr: the address to start counting from | ||||
|  * | ||||
|  * This function is atomic and may not be reordered.  See __set_bit() | ||||
|  * if you do not require the atomic guarantees. | ||||
|  * | ||||
|  * Note: there are no guarantees that this function will not be reordered | ||||
|  * on non x86 architectures, so if you are writing portable code, | ||||
|  * make sure not to rely on its reordering guarantees. | ||||
|  * | ||||
|  * Note that @nr may be almost arbitrarily large; this function is not | ||||
|  * restricted to acting on a single-word quantity. | ||||
|  */ | ||||
| static inline void set_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	_atomic_spin_lock_irqsave(p, flags); | ||||
| 	*p  |= mask; | ||||
| 	_atomic_spin_unlock_irqrestore(p, flags); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * clear_bit - Clears a bit in memory | ||||
|  * @nr: Bit to clear | ||||
|  * @addr: Address to start counting from | ||||
|  * | ||||
|  * clear_bit() is atomic and may not be reordered.  However, it does | ||||
|  * not contain a memory barrier, so if it is used for locking purposes, | ||||
|  * you should call smp_mb__before_atomic() and/or smp_mb__after_atomic() | ||||
|  * in order to ensure changes are visible on other processors. | ||||
|  */ | ||||
| static inline void clear_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	_atomic_spin_lock_irqsave(p, flags); | ||||
| 	*p &= ~mask; | ||||
| 	_atomic_spin_unlock_irqrestore(p, flags); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * change_bit - Toggle a bit in memory | ||||
|  * @nr: Bit to change | ||||
|  * @addr: Address to start counting from | ||||
|  * | ||||
|  * change_bit() is atomic and may not be reordered. It may be | ||||
|  * reordered on other architectures than x86. | ||||
|  * Note that @nr may be almost arbitrarily large; this function is not | ||||
|  * restricted to acting on a single-word quantity. | ||||
|  */ | ||||
| static inline void change_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	_atomic_spin_lock_irqsave(p, flags); | ||||
| 	*p ^= mask; | ||||
| 	_atomic_spin_unlock_irqrestore(p, flags); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * test_and_set_bit - Set a bit and return its old value | ||||
|  * @nr: Bit to set | ||||
|  * @addr: Address to count from | ||||
|  * | ||||
|  * This operation is atomic and cannot be reordered. | ||||
|  * It may be reordered on other architectures than x86. | ||||
|  * It also implies a memory barrier. | ||||
|  */ | ||||
| static inline int test_and_set_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long old; | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	_atomic_spin_lock_irqsave(p, flags); | ||||
| 	old = *p; | ||||
| 	*p = old | mask; | ||||
| 	_atomic_spin_unlock_irqrestore(p, flags); | ||||
| 
 | ||||
| 	return (old & mask) != 0; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * test_and_clear_bit - Clear a bit and return its old value | ||||
|  * @nr: Bit to clear | ||||
|  * @addr: Address to count from | ||||
|  * | ||||
|  * This operation is atomic and cannot be reordered. | ||||
|  * It can be reorderdered on other architectures other than x86. | ||||
|  * It also implies a memory barrier. | ||||
|  */ | ||||
| static inline int test_and_clear_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long old; | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	_atomic_spin_lock_irqsave(p, flags); | ||||
| 	old = *p; | ||||
| 	*p = old & ~mask; | ||||
| 	_atomic_spin_unlock_irqrestore(p, flags); | ||||
| 
 | ||||
| 	return (old & mask) != 0; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * test_and_change_bit - Change a bit and return its old value | ||||
|  * @nr: Bit to change | ||||
|  * @addr: Address to count from | ||||
|  * | ||||
|  * This operation is atomic and cannot be reordered. | ||||
|  * It also implies a memory barrier. | ||||
|  */ | ||||
| static inline int test_and_change_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long old; | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	_atomic_spin_lock_irqsave(p, flags); | ||||
| 	old = *p; | ||||
| 	*p = old ^ mask; | ||||
| 	_atomic_spin_unlock_irqrestore(p, flags); | ||||
| 
 | ||||
| 	return (old & mask) != 0; | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_ATOMIC_H */ | ||||
							
								
								
									
										15
									
								
								include/asm-generic/bitops/builtin-__ffs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/asm-generic/bitops/builtin-__ffs.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_BUILTIN___FFS_H_ | ||||
| #define _ASM_GENERIC_BITOPS_BUILTIN___FFS_H_ | ||||
| 
 | ||||
| /**
 | ||||
|  * __ffs - find first bit in word. | ||||
|  * @word: The word to search | ||||
|  * | ||||
|  * Undefined if no bit exists, so code should check against 0 first. | ||||
|  */ | ||||
| static __always_inline unsigned long __ffs(unsigned long word) | ||||
| { | ||||
| 	return __builtin_ctzl(word); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										15
									
								
								include/asm-generic/bitops/builtin-__fls.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/asm-generic/bitops/builtin-__fls.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_BUILTIN___FLS_H_ | ||||
| #define _ASM_GENERIC_BITOPS_BUILTIN___FLS_H_ | ||||
| 
 | ||||
| /**
 | ||||
|  * __fls - find last (most-significant) set bit in a long word | ||||
|  * @word: the word to search | ||||
|  * | ||||
|  * Undefined if no set bit exists, so code should check against 0 first. | ||||
|  */ | ||||
| static __always_inline unsigned long __fls(unsigned long word) | ||||
| { | ||||
| 	return (sizeof(word) * 8) - 1 - __builtin_clzl(word); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										17
									
								
								include/asm-generic/bitops/builtin-ffs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								include/asm-generic/bitops/builtin-ffs.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_BUILTIN_FFS_H_ | ||||
| #define _ASM_GENERIC_BITOPS_BUILTIN_FFS_H_ | ||||
| 
 | ||||
| /**
 | ||||
|  * ffs - find first bit set | ||||
|  * @x: the word to search | ||||
|  * | ||||
|  * This is defined the same way as | ||||
|  * the libc and compiler builtin ffs routines, therefore | ||||
|  * differs in spirit from the above ffz (man ffs). | ||||
|  */ | ||||
| static __always_inline int ffs(int x) | ||||
| { | ||||
| 	return __builtin_ffs(x); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										16
									
								
								include/asm-generic/bitops/builtin-fls.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/asm-generic/bitops/builtin-fls.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_BUILTIN_FLS_H_ | ||||
| #define _ASM_GENERIC_BITOPS_BUILTIN_FLS_H_ | ||||
| 
 | ||||
| /**
 | ||||
|  * fls - find last (most-significant) bit set | ||||
|  * @x: the word to search | ||||
|  * | ||||
|  * This is defined the same way as ffs. | ||||
|  * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. | ||||
|  */ | ||||
| static __always_inline int fls(int x) | ||||
| { | ||||
| 	return x ? sizeof(x) * 8 - __builtin_clz(x) : 0; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										43
									
								
								include/asm-generic/bitops/const_hweight.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								include/asm-generic/bitops/const_hweight.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ | ||||
| #define _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ | ||||
| 
 | ||||
| /*
 | ||||
|  * Compile time versions of __arch_hweightN() | ||||
|  */ | ||||
| #define __const_hweight8(w)		\ | ||||
| 	((unsigned int)			\ | ||||
| 	 ((!!((w) & (1ULL << 0))) +	\ | ||||
| 	  (!!((w) & (1ULL << 1))) +	\ | ||||
| 	  (!!((w) & (1ULL << 2))) +	\ | ||||
| 	  (!!((w) & (1ULL << 3))) +	\ | ||||
| 	  (!!((w) & (1ULL << 4))) +	\ | ||||
| 	  (!!((w) & (1ULL << 5))) +	\ | ||||
| 	  (!!((w) & (1ULL << 6))) +	\ | ||||
| 	  (!!((w) & (1ULL << 7))))) | ||||
| 
 | ||||
| #define __const_hweight16(w) (__const_hweight8(w)  + __const_hweight8((w)  >> 8 )) | ||||
| #define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16)) | ||||
| #define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Generic interface. | ||||
|  */ | ||||
| #define hweight8(w)  (__builtin_constant_p(w) ? __const_hweight8(w)  : __arch_hweight8(w)) | ||||
| #define hweight16(w) (__builtin_constant_p(w) ? __const_hweight16(w) : __arch_hweight16(w)) | ||||
| #define hweight32(w) (__builtin_constant_p(w) ? __const_hweight32(w) : __arch_hweight32(w)) | ||||
| #define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Interface for known constant arguments | ||||
|  */ | ||||
| #define HWEIGHT8(w)  (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight8(w)) | ||||
| #define HWEIGHT16(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight16(w)) | ||||
| #define HWEIGHT32(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight32(w)) | ||||
| #define HWEIGHT64(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight64(w)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Type invariant interface to the compile time constant hweight functions. | ||||
|  */ | ||||
| #define HWEIGHT(w)   HWEIGHT64((u64)w) | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ */ | ||||
							
								
								
									
										57
									
								
								include/asm-generic/bitops/count_zeros.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								include/asm-generic/bitops/count_zeros.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| /* Count leading and trailing zeros functions
 | ||||
|  * | ||||
|  * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. | ||||
|  * Written by David Howells (dhowells@redhat.com) | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public Licence | ||||
|  * as published by the Free Software Foundation; either version | ||||
|  * 2 of the Licence, or (at your option) any later version. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _ASM_GENERIC_BITOPS_COUNT_ZEROS_H_ | ||||
| #define _ASM_GENERIC_BITOPS_COUNT_ZEROS_H_ | ||||
| 
 | ||||
| #include <asm/bitops.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * count_leading_zeros - Count the number of zeros from the MSB back | ||||
|  * @x: The value | ||||
|  * | ||||
|  * Count the number of leading zeros from the MSB going towards the LSB in @x. | ||||
|  * | ||||
|  * If the MSB of @x is set, the result is 0. | ||||
|  * If only the LSB of @x is set, then the result is BITS_PER_LONG-1. | ||||
|  * If @x is 0 then the result is COUNT_LEADING_ZEROS_0. | ||||
|  */ | ||||
| static inline int count_leading_zeros(unsigned long x) | ||||
| { | ||||
| 	if (sizeof(x) == 4) | ||||
| 		return BITS_PER_LONG - fls(x); | ||||
| 	else | ||||
| 		return BITS_PER_LONG - fls64(x); | ||||
| } | ||||
| 
 | ||||
| #define COUNT_LEADING_ZEROS_0 BITS_PER_LONG | ||||
| 
 | ||||
| /**
 | ||||
|  * count_trailing_zeros - Count the number of zeros from the LSB forwards | ||||
|  * @x: The value | ||||
|  * | ||||
|  * Count the number of trailing zeros from the LSB going towards the MSB in @x. | ||||
|  * | ||||
|  * If the LSB of @x is set, the result is 0. | ||||
|  * If only the MSB of @x is set, then the result is BITS_PER_LONG-1. | ||||
|  * If @x is 0 then the result is COUNT_TRAILING_ZEROS_0. | ||||
|  */ | ||||
| static inline int count_trailing_zeros(unsigned long x) | ||||
| { | ||||
| #define COUNT_TRAILING_ZEROS_0 (-1) | ||||
| 
 | ||||
| 	if (sizeof(x) == 4) | ||||
| 		return ffs(x); | ||||
| 	else | ||||
| 		return (x != 0) ? __ffs(x) : COUNT_TRAILING_ZEROS_0; | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_COUNT_ZEROS_H_ */ | ||||
							
								
								
									
										11
									
								
								include/asm-generic/bitops/ext2-atomic-setbit.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								include/asm-generic/bitops/ext2-atomic-setbit.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_EXT2_ATOMIC_SETBIT_H_ | ||||
| #define _ASM_GENERIC_BITOPS_EXT2_ATOMIC_SETBIT_H_ | ||||
| 
 | ||||
| /*
 | ||||
|  * Atomic bitops based version of ext2 atomic bitops | ||||
|  */ | ||||
| 
 | ||||
| #define ext2_set_bit_atomic(l, nr, addr)	test_and_set_bit_le(nr, addr) | ||||
| #define ext2_clear_bit_atomic(l, nr, addr)	test_and_clear_bit_le(nr, addr) | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_EXT2_ATOMIC_SETBIT_H_ */ | ||||
							
								
								
									
										26
									
								
								include/asm-generic/bitops/ext2-atomic.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								include/asm-generic/bitops/ext2-atomic.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_EXT2_ATOMIC_H_ | ||||
| #define _ASM_GENERIC_BITOPS_EXT2_ATOMIC_H_ | ||||
| 
 | ||||
| /*
 | ||||
|  * Spinlock based version of ext2 atomic bitops | ||||
|  */ | ||||
| 
 | ||||
| #define ext2_set_bit_atomic(lock, nr, addr)		\ | ||||
| 	({						\ | ||||
| 		int ret;				\ | ||||
| 		spin_lock(lock);			\ | ||||
| 		ret = __test_and_set_bit_le(nr, addr);	\ | ||||
| 		spin_unlock(lock);			\ | ||||
| 		ret;					\ | ||||
| 	}) | ||||
| 
 | ||||
| #define ext2_clear_bit_atomic(lock, nr, addr)		\ | ||||
| 	({						\ | ||||
| 		int ret;				\ | ||||
| 		spin_lock(lock);			\ | ||||
| 		ret = __test_and_clear_bit_le(nr, addr);	\ | ||||
| 		spin_unlock(lock);			\ | ||||
| 		ret;					\ | ||||
| 	}) | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_EXT2_ATOMIC_H_ */ | ||||
							
								
								
									
										41
									
								
								include/asm-generic/bitops/ffs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								include/asm-generic/bitops/ffs.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_FFS_H_ | ||||
| #define _ASM_GENERIC_BITOPS_FFS_H_ | ||||
| 
 | ||||
| /**
 | ||||
|  * ffs - find first bit set | ||||
|  * @x: the word to search | ||||
|  * | ||||
|  * This is defined the same way as | ||||
|  * the libc and compiler builtin ffs routines, therefore | ||||
|  * differs in spirit from the above ffz (man ffs). | ||||
|  */ | ||||
| static inline int ffs(int x) | ||||
| { | ||||
| 	int r = 1; | ||||
| 
 | ||||
| 	if (!x) | ||||
| 		return 0; | ||||
| 	if (!(x & 0xffff)) { | ||||
| 		x >>= 16; | ||||
| 		r += 16; | ||||
| 	} | ||||
| 	if (!(x & 0xff)) { | ||||
| 		x >>= 8; | ||||
| 		r += 8; | ||||
| 	} | ||||
| 	if (!(x & 0xf)) { | ||||
| 		x >>= 4; | ||||
| 		r += 4; | ||||
| 	} | ||||
| 	if (!(x & 3)) { | ||||
| 		x >>= 2; | ||||
| 		r += 2; | ||||
| 	} | ||||
| 	if (!(x & 1)) { | ||||
| 		x >>= 1; | ||||
| 		r += 1; | ||||
| 	} | ||||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_FFS_H_ */ | ||||
							
								
								
									
										12
									
								
								include/asm-generic/bitops/ffz.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								include/asm-generic/bitops/ffz.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_FFZ_H_ | ||||
| #define _ASM_GENERIC_BITOPS_FFZ_H_ | ||||
| 
 | ||||
| /*
 | ||||
|  * ffz - find first zero in word. | ||||
|  * @word: The word to search | ||||
|  * | ||||
|  * Undefined if no zero exists, so code should check against ~0UL first. | ||||
|  */ | ||||
| #define ffz(x)  __ffs(~(x)) | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_FFZ_H_ */ | ||||
							
								
								
									
										62
									
								
								include/asm-generic/bitops/find.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								include/asm-generic/bitops/find.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,62 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_FIND_H_ | ||||
| #define _ASM_GENERIC_BITOPS_FIND_H_ | ||||
| 
 | ||||
| #ifndef find_next_bit | ||||
| /**
 | ||||
|  * find_next_bit - find the next set bit in a memory region | ||||
|  * @addr: The address to base the search on | ||||
|  * @offset: The bitnumber to start searching at | ||||
|  * @size: The bitmap size in bits | ||||
|  * | ||||
|  * Returns the bit number for the next set bit | ||||
|  * If no bits are set, returns @size. | ||||
|  */ | ||||
| extern unsigned long find_next_bit(const unsigned long *addr, unsigned long | ||||
| 		size, unsigned long offset); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef find_next_zero_bit | ||||
| /**
 | ||||
|  * find_next_zero_bit - find the next cleared bit in a memory region | ||||
|  * @addr: The address to base the search on | ||||
|  * @offset: The bitnumber to start searching at | ||||
|  * @size: The bitmap size in bits | ||||
|  * | ||||
|  * Returns the bit number of the next zero bit | ||||
|  * If no bits are zero, returns @size. | ||||
|  */ | ||||
| extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned | ||||
| 		long size, unsigned long offset); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_GENERIC_FIND_FIRST_BIT | ||||
| 
 | ||||
| /**
 | ||||
|  * find_first_bit - find the first set bit in a memory region | ||||
|  * @addr: The address to start the search at | ||||
|  * @size: The maximum number of bits to search | ||||
|  * | ||||
|  * Returns the bit number of the first set bit. | ||||
|  * If no bits are set, returns @size. | ||||
|  */ | ||||
| extern unsigned long find_first_bit(const unsigned long *addr, | ||||
| 				    unsigned long size); | ||||
| 
 | ||||
| /**
 | ||||
|  * find_first_zero_bit - find the first cleared bit in a memory region | ||||
|  * @addr: The address to start the search at | ||||
|  * @size: The maximum number of bits to search | ||||
|  * | ||||
|  * Returns the bit number of the first cleared bit. | ||||
|  * If no bits are zero, returns @size. | ||||
|  */ | ||||
| extern unsigned long find_first_zero_bit(const unsigned long *addr, | ||||
| 					 unsigned long size); | ||||
| #else /* CONFIG_GENERIC_FIND_FIRST_BIT */ | ||||
| 
 | ||||
| #define find_first_bit(addr, size) find_next_bit((addr), (size), 0) | ||||
| #define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0) | ||||
| 
 | ||||
| #endif /* CONFIG_GENERIC_FIND_FIRST_BIT */ | ||||
| 
 | ||||
| #endif /*_ASM_GENERIC_BITOPS_FIND_H_ */ | ||||
							
								
								
									
										41
									
								
								include/asm-generic/bitops/fls.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								include/asm-generic/bitops/fls.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_FLS_H_ | ||||
| #define _ASM_GENERIC_BITOPS_FLS_H_ | ||||
| 
 | ||||
| /**
 | ||||
|  * fls - find last (most-significant) bit set | ||||
|  * @x: the word to search | ||||
|  * | ||||
|  * This is defined the same way as ffs. | ||||
|  * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32. | ||||
|  */ | ||||
| 
 | ||||
| static __always_inline int fls(int x) | ||||
| { | ||||
| 	int r = 32; | ||||
| 
 | ||||
| 	if (!x) | ||||
| 		return 0; | ||||
| 	if (!(x & 0xffff0000u)) { | ||||
| 		x <<= 16; | ||||
| 		r -= 16; | ||||
| 	} | ||||
| 	if (!(x & 0xff000000u)) { | ||||
| 		x <<= 8; | ||||
| 		r -= 8; | ||||
| 	} | ||||
| 	if (!(x & 0xf0000000u)) { | ||||
| 		x <<= 4; | ||||
| 		r -= 4; | ||||
| 	} | ||||
| 	if (!(x & 0xc0000000u)) { | ||||
| 		x <<= 2; | ||||
| 		r -= 2; | ||||
| 	} | ||||
| 	if (!(x & 0x80000000u)) { | ||||
| 		x <<= 1; | ||||
| 		r -= 1; | ||||
| 	} | ||||
| 	return r; | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_FLS_H_ */ | ||||
							
								
								
									
										36
									
								
								include/asm-generic/bitops/fls64.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								include/asm-generic/bitops/fls64.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_FLS64_H_ | ||||
| #define _ASM_GENERIC_BITOPS_FLS64_H_ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * fls64 - find last set bit in a 64-bit word | ||||
|  * @x: the word to search | ||||
|  * | ||||
|  * This is defined in a similar way as the libc and compiler builtin | ||||
|  * ffsll, but returns the position of the most significant set bit. | ||||
|  * | ||||
|  * fls64(value) returns 0 if value is 0 or the position of the last | ||||
|  * set bit if value is nonzero. The last (most significant) bit is | ||||
|  * at position 64. | ||||
|  */ | ||||
| #if BITS_PER_LONG == 32 | ||||
| static __always_inline int fls64(__u64 x) | ||||
| { | ||||
| 	__u32 h = x >> 32; | ||||
| 	if (h) | ||||
| 		return fls(h) + 32; | ||||
| 	return fls(x); | ||||
| } | ||||
| #elif BITS_PER_LONG == 64 | ||||
| static __always_inline int fls64(__u64 x) | ||||
| { | ||||
| 	if (x == 0) | ||||
| 		return 0; | ||||
| 	return __fls(x) + 1; | ||||
| } | ||||
| #else | ||||
| #error BITS_PER_LONG not 32 or 64 | ||||
| #endif | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */ | ||||
							
								
								
									
										7
									
								
								include/asm-generic/bitops/hweight.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								include/asm-generic/bitops/hweight.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_HWEIGHT_H_ | ||||
| #define _ASM_GENERIC_BITOPS_HWEIGHT_H_ | ||||
| 
 | ||||
| #include <asm-generic/bitops/arch_hweight.h> | ||||
| #include <asm-generic/bitops/const_hweight.h> | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_HWEIGHT_H_ */ | ||||
							
								
								
									
										97
									
								
								include/asm-generic/bitops/le.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								include/asm-generic/bitops/le.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,97 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_LE_H_ | ||||
| #define _ASM_GENERIC_BITOPS_LE_H_ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| #include <asm/byteorder.h> | ||||
| 
 | ||||
| #if defined(__LITTLE_ENDIAN) | ||||
| 
 | ||||
| #define BITOP_LE_SWIZZLE	0 | ||||
| 
 | ||||
| static inline unsigned long find_next_zero_bit_le(const void *addr, | ||||
| 		unsigned long size, unsigned long offset) | ||||
| { | ||||
| 	return find_next_zero_bit(addr, size, offset); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long find_next_bit_le(const void *addr, | ||||
| 		unsigned long size, unsigned long offset) | ||||
| { | ||||
| 	return find_next_bit(addr, size, offset); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long find_first_zero_bit_le(const void *addr, | ||||
| 		unsigned long size) | ||||
| { | ||||
| 	return find_first_zero_bit(addr, size); | ||||
| } | ||||
| 
 | ||||
| #elif defined(__BIG_ENDIAN) | ||||
| 
 | ||||
| #define BITOP_LE_SWIZZLE	((BITS_PER_LONG-1) & ~0x7) | ||||
| 
 | ||||
| #ifndef find_next_zero_bit_le | ||||
| extern unsigned long find_next_zero_bit_le(const void *addr, | ||||
| 		unsigned long size, unsigned long offset); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef find_next_bit_le | ||||
| extern unsigned long find_next_bit_le(const void *addr, | ||||
| 		unsigned long size, unsigned long offset); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef find_first_zero_bit_le | ||||
| #define find_first_zero_bit_le(addr, size) \ | ||||
| 	find_next_zero_bit_le((addr), (size), 0) | ||||
| #endif | ||||
| 
 | ||||
| #else | ||||
| #error "Please fix <asm/byteorder.h>" | ||||
| #endif | ||||
| 
 | ||||
| static inline int test_bit_le(int nr, const void *addr) | ||||
| { | ||||
| 	return test_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline void set_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	set_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline void clear_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline void __set_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	__set_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline void __clear_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	__clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline int test_and_set_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	return test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline int test_and_clear_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	return test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline int __test_and_set_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	return __test_and_set_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| static inline int __test_and_clear_bit_le(int nr, void *addr) | ||||
| { | ||||
| 	return __test_and_clear_bit(nr ^ BITOP_LE_SWIZZLE, addr); | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_LE_H_ */ | ||||
							
								
								
									
										45
									
								
								include/asm-generic/bitops/lock.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								include/asm-generic/bitops/lock.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_LOCK_H_ | ||||
| #define _ASM_GENERIC_BITOPS_LOCK_H_ | ||||
| 
 | ||||
| /**
 | ||||
|  * test_and_set_bit_lock - Set a bit and return its old value, for lock | ||||
|  * @nr: Bit to set | ||||
|  * @addr: Address to count from | ||||
|  * | ||||
|  * This operation is atomic and provides acquire barrier semantics. | ||||
|  * It can be used to implement bit locks. | ||||
|  */ | ||||
| #define test_and_set_bit_lock(nr, addr)	test_and_set_bit(nr, addr) | ||||
| 
 | ||||
| /**
 | ||||
|  * clear_bit_unlock - Clear a bit in memory, for unlock | ||||
|  * @nr: the bit to set | ||||
|  * @addr: the address to start counting from | ||||
|  * | ||||
|  * This operation is atomic and provides release barrier semantics. | ||||
|  */ | ||||
| #define clear_bit_unlock(nr, addr)	\ | ||||
| do {					\ | ||||
| 	smp_mb__before_atomic();	\ | ||||
| 	clear_bit(nr, addr);		\ | ||||
| } while (0) | ||||
| 
 | ||||
| /**
 | ||||
|  * __clear_bit_unlock - Clear a bit in memory, for unlock | ||||
|  * @nr: the bit to set | ||||
|  * @addr: the address to start counting from | ||||
|  * | ||||
|  * This operation is like clear_bit_unlock, however it is not atomic. | ||||
|  * It does provide release barrier semantics so it can be used to unlock | ||||
|  * a bit lock, however it would only be used if no other CPU can modify | ||||
|  * any bits in the memory until the lock is released (a good example is | ||||
|  * if the bit lock itself protects access to the other bits in the word). | ||||
|  */ | ||||
| #define __clear_bit_unlock(nr, addr)	\ | ||||
| do {					\ | ||||
| 	smp_mb();			\ | ||||
| 	__clear_bit(nr, addr);		\ | ||||
| } while (0) | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_LOCK_H_ */ | ||||
| 
 | ||||
							
								
								
									
										108
									
								
								include/asm-generic/bitops/non-atomic.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								include/asm-generic/bitops/non-atomic.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_NON_ATOMIC_H_ | ||||
| #define _ASM_GENERIC_BITOPS_NON_ATOMIC_H_ | ||||
| 
 | ||||
| #include <asm/types.h> | ||||
| 
 | ||||
| /**
 | ||||
|  * __set_bit - Set a bit in memory | ||||
|  * @nr: the bit to set | ||||
|  * @addr: the address to start counting from | ||||
|  * | ||||
|  * Unlike set_bit(), this function is non-atomic and may be reordered. | ||||
|  * If it's called on the same region of memory simultaneously, the effect | ||||
|  * may be that only one operation succeeds. | ||||
|  */ | ||||
| static inline void __set_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 
 | ||||
| 	*p  |= mask; | ||||
| } | ||||
| 
 | ||||
| static inline void __clear_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 
 | ||||
| 	*p &= ~mask; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * __change_bit - Toggle a bit in memory | ||||
|  * @nr: the bit to change | ||||
|  * @addr: the address to start counting from | ||||
|  * | ||||
|  * Unlike change_bit(), this function is non-atomic and may be reordered. | ||||
|  * If it's called on the same region of memory simultaneously, the effect | ||||
|  * may be that only one operation succeeds. | ||||
|  */ | ||||
| static inline void __change_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 
 | ||||
| 	*p ^= mask; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * __test_and_set_bit - Set a bit and return its old value | ||||
|  * @nr: Bit to set | ||||
|  * @addr: Address to count from | ||||
|  * | ||||
|  * This operation is non-atomic and can be reordered. | ||||
|  * If two examples of this operation race, one can appear to succeed | ||||
|  * but actually fail.  You must protect multiple accesses with a lock. | ||||
|  */ | ||||
| static inline int __test_and_set_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long old = *p; | ||||
| 
 | ||||
| 	*p = old | mask; | ||||
| 	return (old & mask) != 0; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * __test_and_clear_bit - Clear a bit and return its old value | ||||
|  * @nr: Bit to clear | ||||
|  * @addr: Address to count from | ||||
|  * | ||||
|  * This operation is non-atomic and can be reordered. | ||||
|  * If two examples of this operation race, one can appear to succeed | ||||
|  * but actually fail.  You must protect multiple accesses with a lock. | ||||
|  */ | ||||
| static inline int __test_and_clear_bit(int nr, volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long old = *p; | ||||
| 
 | ||||
| 	*p = old & ~mask; | ||||
| 	return (old & mask) != 0; | ||||
| } | ||||
| 
 | ||||
| /* WARNING: non atomic and it can be reordered! */ | ||||
| static inline int __test_and_change_bit(int nr, | ||||
| 					    volatile unsigned long *addr) | ||||
| { | ||||
| 	unsigned long mask = BIT_MASK(nr); | ||||
| 	unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr); | ||||
| 	unsigned long old = *p; | ||||
| 
 | ||||
| 	*p = old ^ mask; | ||||
| 	return (old & mask) != 0; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * test_bit - Determine whether a bit is set | ||||
|  * @nr: bit number to test | ||||
|  * @addr: Address to start counting from | ||||
|  */ | ||||
| static inline int test_bit(int nr, const volatile unsigned long *addr) | ||||
| { | ||||
| 	return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_NON_ATOMIC_H_ */ | ||||
							
								
								
									
										31
									
								
								include/asm-generic/bitops/sched.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								include/asm-generic/bitops/sched.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| #ifndef _ASM_GENERIC_BITOPS_SCHED_H_ | ||||
| #define _ASM_GENERIC_BITOPS_SCHED_H_ | ||||
| 
 | ||||
| #include <linux/compiler.h>	/* unlikely() */ | ||||
| #include <asm/types.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Every architecture must define this function. It's the fastest | ||||
|  * way of searching a 100-bit bitmap.  It's guaranteed that at least | ||||
|  * one of the 100 bits is cleared. | ||||
|  */ | ||||
| static inline int sched_find_first_bit(const unsigned long *b) | ||||
| { | ||||
| #if BITS_PER_LONG == 64 | ||||
| 	if (b[0]) | ||||
| 		return __ffs(b[0]); | ||||
| 	return __ffs(b[1]) + 64; | ||||
| #elif BITS_PER_LONG == 32 | ||||
| 	if (b[0]) | ||||
| 		return __ffs(b[0]); | ||||
| 	if (b[1]) | ||||
| 		return __ffs(b[1]) + 32; | ||||
| 	if (b[2]) | ||||
| 		return __ffs(b[2]) + 64; | ||||
| 	return __ffs(b[3]) + 96; | ||||
| #else | ||||
| #error BITS_PER_LONG not defined | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_BITOPS_SCHED_H_ */ | ||||
							
								
								
									
										25
									
								
								include/asm-generic/bitsperlong.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								include/asm-generic/bitsperlong.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #ifndef __ASM_GENERIC_BITS_PER_LONG | ||||
| #define __ASM_GENERIC_BITS_PER_LONG | ||||
| 
 | ||||
| #include <uapi/asm-generic/bitsperlong.h> | ||||
| 
 | ||||
| 
 | ||||
| #ifdef CONFIG_64BIT | ||||
| #define BITS_PER_LONG 64 | ||||
| #else | ||||
| #define BITS_PER_LONG 32 | ||||
| #endif /* CONFIG_64BIT */ | ||||
| 
 | ||||
| /*
 | ||||
|  * FIXME: The check currently breaks x86-64 build, so it's | ||||
|  * temporarily disabled. Please fix x86-64 and reenable | ||||
|  */ | ||||
| #if 0 && BITS_PER_LONG != __BITS_PER_LONG
 | ||||
| #error Inconsistent word size. Check asm/bitsperlong.h | ||||
| #endif | ||||
| 
 | ||||
| #ifndef BITS_PER_LONG_LONG | ||||
| #define BITS_PER_LONG_LONG 64 | ||||
| #endif | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_BITS_PER_LONG */ | ||||
							
								
								
									
										211
									
								
								include/asm-generic/bug.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										211
									
								
								include/asm-generic/bug.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,211 @@ | |||
| #ifndef _ASM_GENERIC_BUG_H | ||||
| #define _ASM_GENERIC_BUG_H | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| 
 | ||||
| #ifdef CONFIG_GENERIC_BUG | ||||
| #define BUGFLAG_WARNING		(1 << 0) | ||||
| #define BUGFLAG_TAINT(taint)	(BUGFLAG_WARNING | ((taint) << 8)) | ||||
| #define BUG_GET_TAINT(bug)	((bug)->flags >> 8) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| #include <linux/kernel.h> | ||||
| 
 | ||||
| #ifdef CONFIG_BUG | ||||
| 
 | ||||
| #ifdef CONFIG_GENERIC_BUG | ||||
| struct bug_entry { | ||||
| #ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS | ||||
| 	unsigned long	bug_addr; | ||||
| #else | ||||
| 	signed int	bug_addr_disp; | ||||
| #endif | ||||
| #ifdef CONFIG_DEBUG_BUGVERBOSE | ||||
| #ifndef CONFIG_GENERIC_BUG_RELATIVE_POINTERS | ||||
| 	const char	*file; | ||||
| #else | ||||
| 	signed int	file_disp; | ||||
| #endif | ||||
| 	unsigned short	line; | ||||
| #endif | ||||
| 	unsigned short	flags; | ||||
| }; | ||||
| #endif	/* CONFIG_GENERIC_BUG */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Don't use BUG() or BUG_ON() unless there's really no way out; one | ||||
|  * example might be detecting data structure corruption in the middle | ||||
|  * of an operation that can't be backed out of.  If the (sub)system | ||||
|  * can somehow continue operating, perhaps with reduced functionality, | ||||
|  * it's probably not BUG-worthy. | ||||
|  * | ||||
|  * If you're tempted to BUG(), think again:  is completely giving up | ||||
|  * really the *only* solution?  There are usually better options, where | ||||
|  * users don't need to reboot ASAP and can mostly shut down cleanly. | ||||
|  */ | ||||
| #ifndef HAVE_ARCH_BUG | ||||
| #define BUG() do { \ | ||||
| 	printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \ | ||||
| 	panic("BUG!"); \ | ||||
| } while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef HAVE_ARCH_BUG_ON | ||||
| #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * WARN(), WARN_ON(), WARN_ON_ONCE, and so on can be used to report | ||||
|  * significant issues that need prompt attention if they should ever | ||||
|  * appear at runtime.  Use the versions with printk format strings | ||||
|  * to provide better diagnostics. | ||||
|  */ | ||||
| #ifndef __WARN_TAINT | ||||
| extern __printf(3, 4) | ||||
| void warn_slowpath_fmt(const char *file, const int line, | ||||
| 		       const char *fmt, ...); | ||||
| extern __printf(4, 5) | ||||
| void warn_slowpath_fmt_taint(const char *file, const int line, unsigned taint, | ||||
| 			     const char *fmt, ...); | ||||
| extern void warn_slowpath_null(const char *file, const int line); | ||||
| #define WANT_WARN_ON_SLOWPATH | ||||
| #define __WARN()		warn_slowpath_null(__FILE__, __LINE__) | ||||
| #define __WARN_printf(arg...)	warn_slowpath_fmt(__FILE__, __LINE__, arg) | ||||
| #define __WARN_printf_taint(taint, arg...)				\ | ||||
| 	warn_slowpath_fmt_taint(__FILE__, __LINE__, taint, arg) | ||||
| #else | ||||
| #define __WARN()		__WARN_TAINT(TAINT_WARN) | ||||
| #define __WARN_printf(arg...)	do { printk(arg); __WARN(); } while (0) | ||||
| #define __WARN_printf_taint(taint, arg...)				\ | ||||
| 	do { printk(arg); __WARN_TAINT(taint); } while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef WARN_ON | ||||
| #define WARN_ON(condition) ({						\ | ||||
| 	int __ret_warn_on = !!(condition);				\ | ||||
| 	if (unlikely(__ret_warn_on))					\ | ||||
| 		__WARN();						\ | ||||
| 	unlikely(__ret_warn_on);					\ | ||||
| }) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef WARN | ||||
| #define WARN(condition, format...) ({						\ | ||||
| 	int __ret_warn_on = !!(condition);				\ | ||||
| 	if (unlikely(__ret_warn_on))					\ | ||||
| 		__WARN_printf(format);					\ | ||||
| 	unlikely(__ret_warn_on);					\ | ||||
| }) | ||||
| #endif | ||||
| 
 | ||||
| #define WARN_TAINT(condition, taint, format...) ({			\ | ||||
| 	int __ret_warn_on = !!(condition);				\ | ||||
| 	if (unlikely(__ret_warn_on))					\ | ||||
| 		__WARN_printf_taint(taint, format);			\ | ||||
| 	unlikely(__ret_warn_on);					\ | ||||
| }) | ||||
| 
 | ||||
| #define WARN_ON_ONCE(condition)	({				\ | ||||
| 	static bool __section(.data.unlikely) __warned;		\ | ||||
| 	int __ret_warn_once = !!(condition);			\ | ||||
| 								\ | ||||
| 	if (unlikely(__ret_warn_once))				\ | ||||
| 		if (WARN_ON(!__warned)) 			\ | ||||
| 			__warned = true;			\ | ||||
| 	unlikely(__ret_warn_once);				\ | ||||
| }) | ||||
| 
 | ||||
| #define WARN_ONCE(condition, format...)	({			\ | ||||
| 	static bool __section(.data.unlikely) __warned;		\ | ||||
| 	int __ret_warn_once = !!(condition);			\ | ||||
| 								\ | ||||
| 	if (unlikely(__ret_warn_once))				\ | ||||
| 		if (WARN(!__warned, format)) 			\ | ||||
| 			__warned = true;			\ | ||||
| 	unlikely(__ret_warn_once);				\ | ||||
| }) | ||||
| 
 | ||||
| #define WARN_TAINT_ONCE(condition, taint, format...)	({	\ | ||||
| 	static bool __section(.data.unlikely) __warned;		\ | ||||
| 	int __ret_warn_once = !!(condition);			\ | ||||
| 								\ | ||||
| 	if (unlikely(__ret_warn_once))				\ | ||||
| 		if (WARN_TAINT(!__warned, taint, format))	\ | ||||
| 			__warned = true;			\ | ||||
| 	unlikely(__ret_warn_once);				\ | ||||
| }) | ||||
| 
 | ||||
| #else /* !CONFIG_BUG */ | ||||
| #ifndef HAVE_ARCH_BUG | ||||
| #define BUG() do {} while (1) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef HAVE_ARCH_BUG_ON | ||||
| #define BUG_ON(condition) do { if (condition) ; } while (0) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef HAVE_ARCH_WARN_ON | ||||
| #define WARN_ON(condition) ({						\ | ||||
| 	int __ret_warn_on = !!(condition);				\ | ||||
| 	unlikely(__ret_warn_on);					\ | ||||
| }) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef WARN | ||||
| #define WARN(condition, format...) ({					\ | ||||
| 	int __ret_warn_on = !!(condition);				\ | ||||
| 	no_printk(format);						\ | ||||
| 	unlikely(__ret_warn_on);					\ | ||||
| }) | ||||
| #endif | ||||
| 
 | ||||
| #define WARN_ON_ONCE(condition) WARN_ON(condition) | ||||
| #define WARN_ONCE(condition, format...) WARN(condition, format) | ||||
| #define WARN_TAINT(condition, taint, format...) WARN(condition, format) | ||||
| #define WARN_TAINT_ONCE(condition, taint, format...) WARN(condition, format) | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * WARN_ON_SMP() is for cases that the warning is either | ||||
|  * meaningless for !SMP or may even cause failures. | ||||
|  * This is usually used for cases that we have | ||||
|  * WARN_ON(!spin_is_locked(&lock)) checks, as spin_is_locked() | ||||
|  * returns 0 for uniprocessor settings. | ||||
|  * It can also be used with values that are only defined | ||||
|  * on SMP: | ||||
|  * | ||||
|  * struct foo { | ||||
|  *  [...] | ||||
|  * #ifdef CONFIG_SMP | ||||
|  *	int bar; | ||||
|  * #endif | ||||
|  * }; | ||||
|  * | ||||
|  * void func(struct foo *zoot) | ||||
|  * { | ||||
|  *	WARN_ON_SMP(!zoot->bar); | ||||
|  * | ||||
|  * For CONFIG_SMP, WARN_ON_SMP() should act the same as WARN_ON(), | ||||
|  * and should be a nop and return false for uniprocessor. | ||||
|  * | ||||
|  * if (WARN_ON_SMP(x)) returns true only when CONFIG_SMP is set | ||||
|  * and x is true. | ||||
|  */ | ||||
| #ifdef CONFIG_SMP | ||||
| # define WARN_ON_SMP(x)			WARN_ON(x) | ||||
| #else | ||||
| /*
 | ||||
|  * Use of ({0;}) because WARN_ON_SMP(x) may be used either as | ||||
|  * a stand alone line statement or as a condition in an if () | ||||
|  * statement. | ||||
|  * A simple "0" would cause gcc to give a "statement has no effect" | ||||
|  * warning. | ||||
|  */ | ||||
| # define WARN_ON_SMP(x)			({0;}) | ||||
| #endif | ||||
| 
 | ||||
| #endif /* __ASSEMBLY__ */ | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										10
									
								
								include/asm-generic/bugs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								include/asm-generic/bugs.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| #ifndef __ASM_GENERIC_BUGS_H | ||||
| #define __ASM_GENERIC_BUGS_H | ||||
| /*
 | ||||
|  * This file is included by 'init/main.c' to check for | ||||
|  * architecture-dependent bugs. | ||||
|  */ | ||||
| 
 | ||||
| static inline void check_bugs(void) { } | ||||
| 
 | ||||
| #endif	/* __ASM_GENERIC_BUGS_H */ | ||||
							
								
								
									
										12
									
								
								include/asm-generic/cache.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								include/asm-generic/cache.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| #ifndef __ASM_GENERIC_CACHE_H | ||||
| #define __ASM_GENERIC_CACHE_H | ||||
| /*
 | ||||
|  * 32 bytes appears to be the most common cache line size, | ||||
|  * so make that the default here. Architectures with larger | ||||
|  * cache lines need to provide their own cache.h. | ||||
|  */ | ||||
| 
 | ||||
| #define L1_CACHE_SHIFT		5 | ||||
| #define L1_CACHE_BYTES		(1 << L1_CACHE_SHIFT) | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_CACHE_H */ | ||||
							
								
								
									
										34
									
								
								include/asm-generic/cacheflush.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								include/asm-generic/cacheflush.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| #ifndef __ASM_CACHEFLUSH_H | ||||
| #define __ASM_CACHEFLUSH_H | ||||
| 
 | ||||
| /* Keep includes the same across arches.  */ | ||||
| #include <linux/mm.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * The cache doesn't need to be flushed when TLB entries change when | ||||
|  * the cache is mapped to physical memory, not virtual memory | ||||
|  */ | ||||
| #define flush_cache_all()			do { } while (0) | ||||
| #define flush_cache_mm(mm)			do { } while (0) | ||||
| #define flush_cache_dup_mm(mm)			do { } while (0) | ||||
| #define flush_cache_range(vma, start, end)	do { } while (0) | ||||
| #define flush_cache_page(vma, vmaddr, pfn)	do { } while (0) | ||||
| #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0 | ||||
| #define flush_dcache_page(page)			do { } while (0) | ||||
| #define flush_dcache_mmap_lock(mapping)		do { } while (0) | ||||
| #define flush_dcache_mmap_unlock(mapping)	do { } while (0) | ||||
| #define flush_icache_range(start, end)		do { } while (0) | ||||
| #define flush_icache_page(vma,pg)		do { } while (0) | ||||
| #define flush_icache_user_range(vma,pg,adr,len)	do { } while (0) | ||||
| #define flush_cache_vmap(start, end)		do { } while (0) | ||||
| #define flush_cache_vunmap(start, end)		do { } while (0) | ||||
| 
 | ||||
| #define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | ||||
| 	do { \ | ||||
| 		memcpy(dst, src, len); \ | ||||
| 		flush_icache_user_range(vma, page, vaddr, len); \ | ||||
| 	} while (0) | ||||
| #define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | ||||
| 	memcpy(dst, src, len) | ||||
| 
 | ||||
| #endif /* __ASM_CACHEFLUSH_H */ | ||||
							
								
								
									
										87
									
								
								include/asm-generic/checksum.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								include/asm-generic/checksum.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | |||
| #ifndef __ASM_GENERIC_CHECKSUM_H | ||||
| #define __ASM_GENERIC_CHECKSUM_H | ||||
| 
 | ||||
| /*
 | ||||
|  * computes the checksum of a memory block at buff, length len, | ||||
|  * and adds in "sum" (32-bit) | ||||
|  * | ||||
|  * returns a 32-bit number suitable for feeding into itself | ||||
|  * or csum_tcpudp_magic | ||||
|  * | ||||
|  * this function must be called with even lengths, except | ||||
|  * for the last fragment, which may be odd | ||||
|  * | ||||
|  * it's best to have buff aligned on a 32-bit boundary | ||||
|  */ | ||||
| extern __wsum csum_partial(const void *buff, int len, __wsum sum); | ||||
| 
 | ||||
| /*
 | ||||
|  * the same as csum_partial, but copies from src while it | ||||
|  * checksums | ||||
|  * | ||||
|  * here even more important to align src and dst on a 32-bit (or even | ||||
|  * better 64-bit) boundary | ||||
|  */ | ||||
| extern __wsum csum_partial_copy(const void *src, void *dst, int len, __wsum sum); | ||||
| 
 | ||||
| /*
 | ||||
|  * the same as csum_partial_copy, but copies from user space. | ||||
|  * | ||||
|  * here even more important to align src and dst on a 32-bit (or even | ||||
|  * better 64-bit) boundary | ||||
|  */ | ||||
| extern __wsum csum_partial_copy_from_user(const void __user *src, void *dst, | ||||
| 					int len, __wsum sum, int *csum_err); | ||||
| 
 | ||||
| #ifndef csum_partial_copy_nocheck | ||||
| #define csum_partial_copy_nocheck(src, dst, len, sum)	\ | ||||
| 	csum_partial_copy((src), (dst), (len), (sum)) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef ip_fast_csum | ||||
| /*
 | ||||
|  * This is a version of ip_compute_csum() optimized for IP headers, | ||||
|  * which always checksum on 4 octet boundaries. | ||||
|  */ | ||||
| extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef csum_fold | ||||
| /*
 | ||||
|  * Fold a partial checksum | ||||
|  */ | ||||
| static inline __sum16 csum_fold(__wsum csum) | ||||
| { | ||||
| 	u32 sum = (__force u32)csum; | ||||
| 	sum = (sum & 0xffff) + (sum >> 16); | ||||
| 	sum = (sum & 0xffff) + (sum >> 16); | ||||
| 	return (__force __sum16)~sum; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #ifndef csum_tcpudp_nofold | ||||
| /*
 | ||||
|  * computes the checksum of the TCP/UDP pseudo-header | ||||
|  * returns a 16-bit checksum, already complemented | ||||
|  */ | ||||
| extern __wsum | ||||
| csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, | ||||
| 		unsigned short proto, __wsum sum); | ||||
| #endif | ||||
| 
 | ||||
| #ifndef csum_tcpudp_magic | ||||
| static inline __sum16 | ||||
| csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, | ||||
| 		  unsigned short proto, __wsum sum) | ||||
| { | ||||
| 	return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum)); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * this routine is used for miscellaneous IP-like checksums, mainly | ||||
|  * in icmp.c | ||||
|  */ | ||||
| extern __sum16 ip_compute_csum(const void *buff, int len); | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_CHECKSUM_H */ | ||||
							
								
								
									
										30
									
								
								include/asm-generic/clkdev.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								include/asm-generic/clkdev.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| /*
 | ||||
|  *  include/asm-generic/clkdev.h | ||||
|  * | ||||
|  * Based on the ARM clkdev.h: | ||||
|  *  Copyright (C) 2008 Russell King. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  * | ||||
|  * Helper for the clk API to assist looking up a struct clk. | ||||
|  */ | ||||
| #ifndef __ASM_CLKDEV_H | ||||
| #define __ASM_CLKDEV_H | ||||
| 
 | ||||
| #include <linux/slab.h> | ||||
| 
 | ||||
| #ifndef CONFIG_COMMON_CLK | ||||
| struct clk; | ||||
| 
 | ||||
| static inline int __clk_get(struct clk *clk) { return 1; } | ||||
| static inline void __clk_put(struct clk *clk) { } | ||||
| #endif | ||||
| 
 | ||||
| static inline struct clk_lookup_alloc *__clkdev_alloc(size_t size) | ||||
| { | ||||
| 	return kzalloc(size, GFP_KERNEL); | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										67
									
								
								include/asm-generic/cmpxchg-local.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								include/asm-generic/cmpxchg-local.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,67 @@ | |||
| #ifndef __ASM_GENERIC_CMPXCHG_LOCAL_H | ||||
| #define __ASM_GENERIC_CMPXCHG_LOCAL_H | ||||
| 
 | ||||
| #include <linux/types.h> | ||||
| #include <linux/irqflags.h> | ||||
| 
 | ||||
| extern unsigned long wrong_size_cmpxchg(volatile void *ptr) | ||||
| 	__noreturn; | ||||
| 
 | ||||
| /*
 | ||||
|  * Generic version of __cmpxchg_local (disables interrupts). Takes an unsigned | ||||
|  * long parameter, supporting various types of architectures. | ||||
|  */ | ||||
| static inline unsigned long __cmpxchg_local_generic(volatile void *ptr, | ||||
| 		unsigned long old, unsigned long new, int size) | ||||
| { | ||||
| 	unsigned long flags, prev; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Sanity checking, compile-time. | ||||
| 	 */ | ||||
| 	if (size == 8 && sizeof(unsigned long) != 8) | ||||
| 		wrong_size_cmpxchg(ptr); | ||||
| 
 | ||||
| 	raw_local_irq_save(flags); | ||||
| 	switch (size) { | ||||
| 	case 1: prev = *(u8 *)ptr; | ||||
| 		if (prev == old) | ||||
| 			*(u8 *)ptr = (u8)new; | ||||
| 		break; | ||||
| 	case 2: prev = *(u16 *)ptr; | ||||
| 		if (prev == old) | ||||
| 			*(u16 *)ptr = (u16)new; | ||||
| 		break; | ||||
| 	case 4: prev = *(u32 *)ptr; | ||||
| 		if (prev == old) | ||||
| 			*(u32 *)ptr = (u32)new; | ||||
| 		break; | ||||
| 	case 8: prev = *(u64 *)ptr; | ||||
| 		if (prev == old) | ||||
| 			*(u64 *)ptr = (u64)new; | ||||
| 		break; | ||||
| 	default: | ||||
| 		wrong_size_cmpxchg(ptr); | ||||
| 	} | ||||
| 	raw_local_irq_restore(flags); | ||||
| 	return prev; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Generic version of __cmpxchg64_local. Takes an u64 parameter. | ||||
|  */ | ||||
| static inline u64 __cmpxchg64_local_generic(volatile void *ptr, | ||||
| 		u64 old, u64 new) | ||||
| { | ||||
| 	u64 prev; | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	raw_local_irq_save(flags); | ||||
| 	prev = *(u64 *)ptr; | ||||
| 	if (prev == old) | ||||
| 		*(u64 *)ptr = new; | ||||
| 	raw_local_irq_restore(flags); | ||||
| 	return prev; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										108
									
								
								include/asm-generic/cmpxchg.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								include/asm-generic/cmpxchg.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | |||
| /*
 | ||||
|  * Generic UP xchg and cmpxchg using interrupt disablement.  Does not | ||||
|  * support SMP. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ASM_GENERIC_CMPXCHG_H | ||||
| #define __ASM_GENERIC_CMPXCHG_H | ||||
| 
 | ||||
| #ifdef CONFIG_SMP | ||||
| #error "Cannot use generic cmpxchg on SMP" | ||||
| #endif | ||||
| 
 | ||||
| #include <linux/types.h> | ||||
| #include <linux/irqflags.h> | ||||
| 
 | ||||
| #ifndef xchg | ||||
| 
 | ||||
| /*
 | ||||
|  * This function doesn't exist, so you'll get a linker error if | ||||
|  * something tries to do an invalidly-sized xchg(). | ||||
|  */ | ||||
| extern void __xchg_called_with_bad_pointer(void); | ||||
| 
 | ||||
| static inline | ||||
| unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||||
| { | ||||
| 	unsigned long ret, flags; | ||||
| 
 | ||||
| 	switch (size) { | ||||
| 	case 1: | ||||
| #ifdef __xchg_u8 | ||||
| 		return __xchg_u8(x, ptr); | ||||
| #else | ||||
| 		local_irq_save(flags); | ||||
| 		ret = *(volatile u8 *)ptr; | ||||
| 		*(volatile u8 *)ptr = x; | ||||
| 		local_irq_restore(flags); | ||||
| 		return ret; | ||||
| #endif /* __xchg_u8 */ | ||||
| 
 | ||||
| 	case 2: | ||||
| #ifdef __xchg_u16 | ||||
| 		return __xchg_u16(x, ptr); | ||||
| #else | ||||
| 		local_irq_save(flags); | ||||
| 		ret = *(volatile u16 *)ptr; | ||||
| 		*(volatile u16 *)ptr = x; | ||||
| 		local_irq_restore(flags); | ||||
| 		return ret; | ||||
| #endif /* __xchg_u16 */ | ||||
| 
 | ||||
| 	case 4: | ||||
| #ifdef __xchg_u32 | ||||
| 		return __xchg_u32(x, ptr); | ||||
| #else | ||||
| 		local_irq_save(flags); | ||||
| 		ret = *(volatile u32 *)ptr; | ||||
| 		*(volatile u32 *)ptr = x; | ||||
| 		local_irq_restore(flags); | ||||
| 		return ret; | ||||
| #endif /* __xchg_u32 */ | ||||
| 
 | ||||
| #ifdef CONFIG_64BIT | ||||
| 	case 8: | ||||
| #ifdef __xchg_u64 | ||||
| 		return __xchg_u64(x, ptr); | ||||
| #else | ||||
| 		local_irq_save(flags); | ||||
| 		ret = *(volatile u64 *)ptr; | ||||
| 		*(volatile u64 *)ptr = x; | ||||
| 		local_irq_restore(flags); | ||||
| 		return ret; | ||||
| #endif /* __xchg_u64 */ | ||||
| #endif /* CONFIG_64BIT */ | ||||
| 
 | ||||
| 	default: | ||||
| 		__xchg_called_with_bad_pointer(); | ||||
| 		return x; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| #define xchg(ptr, x) \ | ||||
| 	((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | ||||
| 
 | ||||
| #endif /* xchg */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Atomic compare and exchange. | ||||
|  * | ||||
|  * Do not define __HAVE_ARCH_CMPXCHG because we want to use it to check whether | ||||
|  * a cmpxchg primitive faster than repeated local irq save/restore exists. | ||||
|  */ | ||||
| #include <asm-generic/cmpxchg-local.h> | ||||
| 
 | ||||
| #ifndef cmpxchg_local | ||||
| #define cmpxchg_local(ptr, o, n)				  	       \ | ||||
| 	((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ | ||||
| 			(unsigned long)(n), sizeof(*(ptr)))) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef cmpxchg64_local | ||||
| #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||||
| #endif | ||||
| 
 | ||||
| #define cmpxchg(ptr, o, n)	cmpxchg_local((ptr), (o), (n)) | ||||
| #define cmpxchg64(ptr, o, n)	cmpxchg64_local((ptr), (o), (n)) | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_CMPXCHG_H */ | ||||
							
								
								
									
										15
									
								
								include/asm-generic/cputime.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/asm-generic/cputime.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #ifndef _ASM_GENERIC_CPUTIME_H | ||||
| #define _ASM_GENERIC_CPUTIME_H | ||||
| 
 | ||||
| #include <linux/time.h> | ||||
| #include <linux/jiffies.h> | ||||
| 
 | ||||
| #ifndef CONFIG_VIRT_CPU_ACCOUNTING | ||||
| # include <asm-generic/cputime_jiffies.h> | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN | ||||
| # include <asm-generic/cputime_nsecs.h> | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										76
									
								
								include/asm-generic/cputime_jiffies.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								include/asm-generic/cputime_jiffies.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | |||
| #ifndef _ASM_GENERIC_CPUTIME_JIFFIES_H | ||||
| #define _ASM_GENERIC_CPUTIME_JIFFIES_H | ||||
| 
 | ||||
| typedef unsigned long __nocast cputime_t; | ||||
| 
 | ||||
| #define cmpxchg_cputime(ptr, old, new) cmpxchg(ptr, old, new) | ||||
| 
 | ||||
| #define cputime_one_jiffy		jiffies_to_cputime(1) | ||||
| #define cputime_to_jiffies(__ct)	(__force unsigned long)(__ct) | ||||
| #define cputime_to_scaled(__ct)		(__ct) | ||||
| #define jiffies_to_cputime(__hz)	(__force cputime_t)(__hz) | ||||
| 
 | ||||
| typedef u64 __nocast cputime64_t; | ||||
| 
 | ||||
| #define cputime64_to_jiffies64(__ct)	(__force u64)(__ct) | ||||
| #define jiffies64_to_cputime64(__jif)	(__force cputime64_t)(__jif) | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert nanoseconds <-> cputime | ||||
|  */ | ||||
| #define cputime_to_nsecs(__ct)		\ | ||||
| 	jiffies_to_nsecs(cputime_to_jiffies(__ct)) | ||||
| #define nsecs_to_cputime64(__nsec)	\ | ||||
| 	jiffies64_to_cputime64(nsecs_to_jiffies64(__nsec)) | ||||
| #define nsecs_to_cputime(__nsec)	\ | ||||
| 	jiffies_to_cputime(nsecs_to_jiffies(__nsec)) | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime to microseconds and back. | ||||
|  */ | ||||
| #define cputime_to_usecs(__ct)		\ | ||||
| 	jiffies_to_usecs(cputime_to_jiffies(__ct)) | ||||
| #define usecs_to_cputime(__usec)	\ | ||||
| 	jiffies_to_cputime(usecs_to_jiffies(__usec)) | ||||
| #define usecs_to_cputime64(__usec)	\ | ||||
| 	jiffies64_to_cputime64(nsecs_to_jiffies64((__usec) * 1000)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime to seconds and back. | ||||
|  */ | ||||
| #define cputime_to_secs(jif)		(cputime_to_jiffies(jif) / HZ) | ||||
| #define secs_to_cputime(sec)		jiffies_to_cputime((sec) * HZ) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime to timespec and back. | ||||
|  */ | ||||
| #define timespec_to_cputime(__val)	\ | ||||
| 	jiffies_to_cputime(timespec_to_jiffies(__val)) | ||||
| #define cputime_to_timespec(__ct,__val)	\ | ||||
| 	jiffies_to_timespec(cputime_to_jiffies(__ct),__val) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime to timeval and back. | ||||
|  */ | ||||
| #define timeval_to_cputime(__val)	\ | ||||
| 	jiffies_to_cputime(timeval_to_jiffies(__val)) | ||||
| #define cputime_to_timeval(__ct,__val)	\ | ||||
| 	jiffies_to_timeval(cputime_to_jiffies(__ct),__val) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime to clock and back. | ||||
|  */ | ||||
| #define cputime_to_clock_t(__ct)	\ | ||||
| 	jiffies_to_clock_t(cputime_to_jiffies(__ct)) | ||||
| #define clock_t_to_cputime(__x)		\ | ||||
| 	jiffies_to_cputime(clock_t_to_jiffies(__x)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime64 to clock. | ||||
|  */ | ||||
| #define cputime64_to_clock_t(__ct)	\ | ||||
| 	jiffies_64_to_clock_t(cputime64_to_jiffies64(__ct)) | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										119
									
								
								include/asm-generic/cputime_nsecs.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								include/asm-generic/cputime_nsecs.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,119 @@ | |||
| /*
 | ||||
|  * Definitions for measuring cputime in nsecs resolution. | ||||
|  * | ||||
|  * Based on <arch/ia64/include/asm/cputime.h> | ||||
|  * | ||||
|  * Copyright (C) 2007 FUJITSU LIMITED | ||||
|  * Copyright (C) 2007 Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License | ||||
|  * as published by the Free Software Foundation; either version | ||||
|  * 2 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _ASM_GENERIC_CPUTIME_NSECS_H | ||||
| #define _ASM_GENERIC_CPUTIME_NSECS_H | ||||
| 
 | ||||
| #include <linux/math64.h> | ||||
| 
 | ||||
| typedef u64 __nocast cputime_t; | ||||
| typedef u64 __nocast cputime64_t; | ||||
| 
 | ||||
| #define cmpxchg_cputime(ptr, old, new) cmpxchg64(ptr, old, new) | ||||
| 
 | ||||
| #define cputime_one_jiffy		jiffies_to_cputime(1) | ||||
| 
 | ||||
| #define cputime_div(__ct, divisor)  div_u64((__force u64)__ct, divisor) | ||||
| #define cputime_div_rem(__ct, divisor, remainder) \ | ||||
| 	div_u64_rem((__force u64)__ct, divisor, remainder); | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime <-> jiffies (HZ) | ||||
|  */ | ||||
| #define cputime_to_jiffies(__ct)	\ | ||||
| 	cputime_div(__ct, NSEC_PER_SEC / HZ) | ||||
| #define cputime_to_scaled(__ct)		(__ct) | ||||
| #define jiffies_to_cputime(__jif)	\ | ||||
| 	(__force cputime_t)((__jif) * (NSEC_PER_SEC / HZ)) | ||||
| #define cputime64_to_jiffies64(__ct)	\ | ||||
| 	cputime_div(__ct, NSEC_PER_SEC / HZ) | ||||
| #define jiffies64_to_cputime64(__jif)	\ | ||||
| 	(__force cputime64_t)((__jif) * (NSEC_PER_SEC / HZ)) | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime <-> nanoseconds | ||||
|  */ | ||||
| #define cputime_to_nsecs(__ct)		\ | ||||
| 	(__force u64)(__ct) | ||||
| #define nsecs_to_cputime(__nsecs)	\ | ||||
| 	(__force cputime_t)(__nsecs) | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime <-> microseconds | ||||
|  */ | ||||
| #define cputime_to_usecs(__ct)		\ | ||||
| 	cputime_div(__ct, NSEC_PER_USEC) | ||||
| #define usecs_to_cputime(__usecs)	\ | ||||
| 	(__force cputime_t)((__usecs) * NSEC_PER_USEC) | ||||
| #define usecs_to_cputime64(__usecs)	\ | ||||
| 	(__force cputime64_t)((__usecs) * NSEC_PER_USEC) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime <-> seconds | ||||
|  */ | ||||
| #define cputime_to_secs(__ct)		\ | ||||
| 	cputime_div(__ct, NSEC_PER_SEC) | ||||
| #define secs_to_cputime(__secs)		\ | ||||
| 	(__force cputime_t)((__secs) * NSEC_PER_SEC) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime <-> timespec (nsec) | ||||
|  */ | ||||
| static inline cputime_t timespec_to_cputime(const struct timespec *val) | ||||
| { | ||||
| 	u64 ret = val->tv_sec * NSEC_PER_SEC + val->tv_nsec; | ||||
| 	return (__force cputime_t) ret; | ||||
| } | ||||
| static inline void cputime_to_timespec(const cputime_t ct, struct timespec *val) | ||||
| { | ||||
| 	u32 rem; | ||||
| 
 | ||||
| 	val->tv_sec = cputime_div_rem(ct, NSEC_PER_SEC, &rem); | ||||
| 	val->tv_nsec = rem; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime <-> timeval (msec) | ||||
|  */ | ||||
| static inline cputime_t timeval_to_cputime(const struct timeval *val) | ||||
| { | ||||
| 	u64 ret = val->tv_sec * NSEC_PER_SEC + val->tv_usec * NSEC_PER_USEC; | ||||
| 	return (__force cputime_t) ret; | ||||
| } | ||||
| static inline void cputime_to_timeval(const cputime_t ct, struct timeval *val) | ||||
| { | ||||
| 	u32 rem; | ||||
| 
 | ||||
| 	val->tv_sec = cputime_div_rem(ct, NSEC_PER_SEC, &rem); | ||||
| 	val->tv_usec = rem / NSEC_PER_USEC; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime <-> clock (USER_HZ) | ||||
|  */ | ||||
| #define cputime_to_clock_t(__ct)	\ | ||||
| 	cputime_div(__ct, (NSEC_PER_SEC / USER_HZ)) | ||||
| #define clock_t_to_cputime(__x)		\ | ||||
| 	(__force cputime_t)((__x) * (NSEC_PER_SEC / USER_HZ)) | ||||
| 
 | ||||
| /*
 | ||||
|  * Convert cputime64 to clock. | ||||
|  */ | ||||
| #define cputime64_to_clock_t(__ct)	\ | ||||
| 	cputime_to_clock_t((__force cputime_t)__ct) | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										9
									
								
								include/asm-generic/current.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								include/asm-generic/current.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| #ifndef __ASM_GENERIC_CURRENT_H | ||||
| #define __ASM_GENERIC_CURRENT_H | ||||
| 
 | ||||
| #include <linux/thread_info.h> | ||||
| 
 | ||||
| #define get_current() (current_thread_info()->task) | ||||
| #define current get_current() | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_CURRENT_H */ | ||||
							
								
								
									
										44
									
								
								include/asm-generic/delay.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								include/asm-generic/delay.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| #ifndef __ASM_GENERIC_DELAY_H | ||||
| #define __ASM_GENERIC_DELAY_H | ||||
| 
 | ||||
| /* Undefined functions to get compile-time errors */ | ||||
| extern void __bad_udelay(void); | ||||
| extern void __bad_ndelay(void); | ||||
| 
 | ||||
| extern void __udelay(unsigned long usecs); | ||||
| extern void __ndelay(unsigned long nsecs); | ||||
| extern void __const_udelay(unsigned long xloops); | ||||
| extern void __delay(unsigned long loops); | ||||
| 
 | ||||
| /*
 | ||||
|  * The weird n/20000 thing suppresses a "comparison is always false due to | ||||
|  * limited range of data type" warning with non-const 8-bit arguments. | ||||
|  */ | ||||
| 
 | ||||
| /* 0x10c7 is 2**32 / 1000000 (rounded up) */ | ||||
| #define udelay(n)							\ | ||||
| 	({								\ | ||||
| 		if (__builtin_constant_p(n)) {				\ | ||||
| 			if ((n) / 20000 >= 1)				\ | ||||
| 				 __bad_udelay();			\ | ||||
| 			else						\ | ||||
| 				__const_udelay((n) * 0x10c7ul);		\ | ||||
| 		} else {						\ | ||||
| 			__udelay(n);					\ | ||||
| 		}							\ | ||||
| 	}) | ||||
| 
 | ||||
| /* 0x5 is 2**32 / 1000000000 (rounded up) */ | ||||
| #define ndelay(n)							\ | ||||
| 	({								\ | ||||
| 		if (__builtin_constant_p(n)) {				\ | ||||
| 			if ((n) / 20000 >= 1)				\ | ||||
| 				__bad_ndelay();				\ | ||||
| 			else						\ | ||||
| 				__const_udelay((n) * 5ul);		\ | ||||
| 		} else {						\ | ||||
| 			__ndelay(n);					\ | ||||
| 		}							\ | ||||
| 	}) | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_DELAY_H */ | ||||
							
								
								
									
										15
									
								
								include/asm-generic/device.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/asm-generic/device.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| /*
 | ||||
|  * Arch specific extensions to struct device | ||||
|  * | ||||
|  * This file is released under the GPLv2 | ||||
|  */ | ||||
| #ifndef _ASM_GENERIC_DEVICE_H | ||||
| #define _ASM_GENERIC_DEVICE_H | ||||
| 
 | ||||
| struct dev_archdata { | ||||
| }; | ||||
| 
 | ||||
| struct pdev_archdata { | ||||
| }; | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_DEVICE_H */ | ||||
							
								
								
									
										58
									
								
								include/asm-generic/div64.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								include/asm-generic/div64.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | |||
| #ifndef _ASM_GENERIC_DIV64_H | ||||
| #define _ASM_GENERIC_DIV64_H | ||||
| /*
 | ||||
|  * Copyright (C) 2003 Bernardo Innocenti <bernie@develer.com> | ||||
|  * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h | ||||
|  * | ||||
|  * The semantics of do_div() are: | ||||
|  * | ||||
|  * uint32_t do_div(uint64_t *n, uint32_t base) | ||||
|  * { | ||||
|  * 	uint32_t remainder = *n % base; | ||||
|  * 	*n = *n / base; | ||||
|  * 	return remainder; | ||||
|  * } | ||||
|  * | ||||
|  * NOTE: macro parameter n is evaluated multiple times, | ||||
|  *       beware of side effects! | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/types.h> | ||||
| #include <linux/compiler.h> | ||||
| 
 | ||||
| #if BITS_PER_LONG == 64 | ||||
| 
 | ||||
| # define do_div(n,base) ({					\ | ||||
| 	uint32_t __base = (base);				\ | ||||
| 	uint32_t __rem;						\ | ||||
| 	__rem = ((uint64_t)(n)) % __base;			\ | ||||
| 	(n) = ((uint64_t)(n)) / __base;				\ | ||||
| 	__rem;							\ | ||||
|  }) | ||||
| 
 | ||||
| #elif BITS_PER_LONG == 32 | ||||
| 
 | ||||
| extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor); | ||||
| 
 | ||||
| /* The unnecessary pointer compare is there
 | ||||
|  * to check for type safety (n must be 64bit) | ||||
|  */ | ||||
| # define do_div(n,base) ({				\ | ||||
| 	uint32_t __base = (base);			\ | ||||
| 	uint32_t __rem;					\ | ||||
| 	(void)(((typeof((n)) *)0) == ((uint64_t *)0));	\ | ||||
| 	if (likely(((n) >> 32) == 0)) {			\ | ||||
| 		__rem = (uint32_t)(n) % __base;		\ | ||||
| 		(n) = (uint32_t)(n) / __base;		\ | ||||
| 	} else 						\ | ||||
| 		__rem = __div64_32(&(n), __base);	\ | ||||
| 	__rem;						\ | ||||
|  }) | ||||
| 
 | ||||
| #else /* BITS_PER_LONG == ?? */ | ||||
| 
 | ||||
| # error do_div() does not yet support the C64 | ||||
| 
 | ||||
| #endif /* BITS_PER_LONG */ | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_DIV64_H */ | ||||
							
								
								
									
										32
									
								
								include/asm-generic/dma-coherent.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								include/asm-generic/dma-coherent.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| #ifndef DMA_COHERENT_H | ||||
| #define DMA_COHERENT_H | ||||
| 
 | ||||
| #ifdef CONFIG_HAVE_GENERIC_DMA_COHERENT | ||||
| /*
 | ||||
|  * These three functions are only for dma allocator. | ||||
|  * Don't use them in device drivers. | ||||
|  */ | ||||
| int dma_alloc_from_coherent(struct device *dev, ssize_t size, | ||||
| 				       dma_addr_t *dma_handle, void **ret); | ||||
| int dma_release_from_coherent(struct device *dev, int order, void *vaddr); | ||||
| 
 | ||||
| int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma, | ||||
| 			    void *cpu_addr, size_t size, int *ret); | ||||
| /*
 | ||||
|  * Standard interface | ||||
|  */ | ||||
| #define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY | ||||
| int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, | ||||
| 				dma_addr_t device_addr, size_t size, int flags); | ||||
| 
 | ||||
| void dma_release_declared_memory(struct device *dev); | ||||
| 
 | ||||
| void *dma_mark_declared_memory_occupied(struct device *dev, | ||||
| 					dma_addr_t device_addr, size_t size); | ||||
| #else | ||||
| #define dma_alloc_from_coherent(dev, size, handle, ret) (0) | ||||
| #define dma_release_from_coherent(dev, order, vaddr) (0) | ||||
| #define dma_mmap_from_coherent(dev, vma, vaddr, order, ret) (0) | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										9
									
								
								include/asm-generic/dma-contiguous.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								include/asm-generic/dma-contiguous.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| #ifndef _ASM_GENERIC_DMA_CONTIGUOUS_H | ||||
| #define _ASM_GENERIC_DMA_CONTIGUOUS_H | ||||
| 
 | ||||
| #include <linux/types.h> | ||||
| 
 | ||||
| static inline void | ||||
| dma_contiguous_early_fixup(phys_addr_t base, unsigned long size) { } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										95
									
								
								include/asm-generic/dma-mapping-broken.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								include/asm-generic/dma-mapping-broken.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,95 @@ | |||
| #ifndef _ASM_GENERIC_DMA_MAPPING_H | ||||
| #define _ASM_GENERIC_DMA_MAPPING_H | ||||
| 
 | ||||
| /* define the dma api to allow compilation but not linking of
 | ||||
|  * dma dependent code.  Code that depends on the dma-mapping | ||||
|  * API needs to set 'depends on HAS_DMA' in its Kconfig | ||||
|  */ | ||||
| 
 | ||||
| struct scatterlist; | ||||
| 
 | ||||
| extern void * | ||||
| dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, | ||||
| 		   gfp_t flag); | ||||
| 
 | ||||
| extern void | ||||
| dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, | ||||
| 		    dma_addr_t dma_handle); | ||||
| 
 | ||||
| static inline void *dma_alloc_attrs(struct device *dev, size_t size, | ||||
| 				    dma_addr_t *dma_handle, gfp_t flag, | ||||
| 				    struct dma_attrs *attrs) | ||||
| { | ||||
| 	/* attrs is not supported and ignored */ | ||||
| 	return dma_alloc_coherent(dev, size, dma_handle, flag); | ||||
| } | ||||
| 
 | ||||
| static inline void dma_free_attrs(struct device *dev, size_t size, | ||||
| 				  void *cpu_addr, dma_addr_t dma_handle, | ||||
| 				  struct dma_attrs *attrs) | ||||
| { | ||||
| 	/* attrs is not supported and ignored */ | ||||
| 	dma_free_coherent(dev, size, cpu_addr, dma_handle); | ||||
| } | ||||
| 
 | ||||
| #define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) | ||||
| #define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) | ||||
| 
 | ||||
| extern dma_addr_t | ||||
| dma_map_single(struct device *dev, void *ptr, size_t size, | ||||
| 	       enum dma_data_direction direction); | ||||
| 
 | ||||
| extern void | ||||
| dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | ||||
| 		 enum dma_data_direction direction); | ||||
| 
 | ||||
| extern int | ||||
| dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, | ||||
| 	   enum dma_data_direction direction); | ||||
| 
 | ||||
| extern void | ||||
| dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries, | ||||
| 	     enum dma_data_direction direction); | ||||
| 
 | ||||
| extern dma_addr_t | ||||
| dma_map_page(struct device *dev, struct page *page, unsigned long offset, | ||||
| 	     size_t size, enum dma_data_direction direction); | ||||
| 
 | ||||
| extern void | ||||
| dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, | ||||
| 	       enum dma_data_direction direction); | ||||
| 
 | ||||
| extern void | ||||
| dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, | ||||
| 			enum dma_data_direction direction); | ||||
| 
 | ||||
| extern void | ||||
| dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle, | ||||
| 			      unsigned long offset, size_t size, | ||||
| 			      enum dma_data_direction direction); | ||||
| 
 | ||||
| extern void | ||||
| dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems, | ||||
| 		    enum dma_data_direction direction); | ||||
| 
 | ||||
| #define dma_sync_single_for_device dma_sync_single_for_cpu | ||||
| #define dma_sync_single_range_for_device dma_sync_single_range_for_cpu | ||||
| #define dma_sync_sg_for_device dma_sync_sg_for_cpu | ||||
| 
 | ||||
| extern int | ||||
| dma_mapping_error(struct device *dev, dma_addr_t dma_addr); | ||||
| 
 | ||||
| extern int | ||||
| dma_supported(struct device *dev, u64 mask); | ||||
| 
 | ||||
| extern int | ||||
| dma_set_mask(struct device *dev, u64 mask); | ||||
| 
 | ||||
| extern int | ||||
| dma_get_cache_alignment(void); | ||||
| 
 | ||||
| extern void | ||||
| dma_cache_sync(struct device *dev, void *vaddr, size_t size, | ||||
| 	       enum dma_data_direction direction); | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_DMA_MAPPING_H */ | ||||
							
								
								
									
										237
									
								
								include/asm-generic/dma-mapping-common.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								include/asm-generic/dma-mapping-common.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,237 @@ | |||
| #ifndef _ASM_GENERIC_DMA_MAPPING_H | ||||
| #define _ASM_GENERIC_DMA_MAPPING_H | ||||
| 
 | ||||
| #include <linux/kmemcheck.h> | ||||
| #include <linux/bug.h> | ||||
| #include <linux/scatterlist.h> | ||||
| #include <linux/dma-debug.h> | ||||
| #include <linux/dma-attrs.h> | ||||
| 
 | ||||
| static inline dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr, | ||||
| 					      size_t size, | ||||
| 					      enum dma_data_direction dir, | ||||
| 					      struct dma_attrs *attrs) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 	dma_addr_t addr; | ||||
| 
 | ||||
| 	kmemcheck_mark_initialized(ptr, size); | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	addr = ops->map_page(dev, virt_to_page(ptr), | ||||
| 			     (unsigned long)ptr & ~PAGE_MASK, size, | ||||
| 			     dir, attrs); | ||||
| 	debug_dma_map_page(dev, virt_to_page(ptr), | ||||
| 			   (unsigned long)ptr & ~PAGE_MASK, size, | ||||
| 			   dir, addr, true); | ||||
| 	return addr; | ||||
| } | ||||
| 
 | ||||
| static inline void dma_unmap_single_attrs(struct device *dev, dma_addr_t addr, | ||||
| 					  size_t size, | ||||
| 					  enum dma_data_direction dir, | ||||
| 					  struct dma_attrs *attrs) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->unmap_page) | ||||
| 		ops->unmap_page(dev, addr, size, dir, attrs); | ||||
| 	debug_dma_unmap_page(dev, addr, size, dir, true); | ||||
| } | ||||
| 
 | ||||
| static inline int dma_map_sg_attrs(struct device *dev, struct scatterlist *sg, | ||||
| 				   int nents, enum dma_data_direction dir, | ||||
| 				   struct dma_attrs *attrs) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 	int i, ents; | ||||
| 	struct scatterlist *s; | ||||
| 
 | ||||
| 	for_each_sg(sg, s, nents, i) | ||||
| 		kmemcheck_mark_initialized(sg_virt(s), s->length); | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	ents = ops->map_sg(dev, sg, nents, dir, attrs); | ||||
| 	debug_dma_map_sg(dev, sg, nents, ents, dir); | ||||
| 
 | ||||
| 	return ents; | ||||
| } | ||||
| 
 | ||||
| static inline void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg, | ||||
| 				      int nents, enum dma_data_direction dir, | ||||
| 				      struct dma_attrs *attrs) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	debug_dma_unmap_sg(dev, sg, nents, dir); | ||||
| 	if (ops->unmap_sg) | ||||
| 		ops->unmap_sg(dev, sg, nents, dir, attrs); | ||||
| } | ||||
| 
 | ||||
| static inline dma_addr_t dma_map_page(struct device *dev, struct page *page, | ||||
| 				      size_t offset, size_t size, | ||||
| 				      enum dma_data_direction dir) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 	dma_addr_t addr; | ||||
| 
 | ||||
| 	kmemcheck_mark_initialized(page_address(page) + offset, size); | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	addr = ops->map_page(dev, page, offset, size, dir, NULL); | ||||
| 	debug_dma_map_page(dev, page, offset, size, dir, addr, false); | ||||
| 
 | ||||
| 	return addr; | ||||
| } | ||||
| 
 | ||||
| static inline void dma_unmap_page(struct device *dev, dma_addr_t addr, | ||||
| 				  size_t size, enum dma_data_direction dir) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->unmap_page) | ||||
| 		ops->unmap_page(dev, addr, size, dir, NULL); | ||||
| 	debug_dma_unmap_page(dev, addr, size, dir, false); | ||||
| } | ||||
| 
 | ||||
| static inline void dma_sync_single_for_cpu(struct device *dev, dma_addr_t addr, | ||||
| 					   size_t size, | ||||
| 					   enum dma_data_direction dir) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->sync_single_for_cpu) | ||||
| 		ops->sync_single_for_cpu(dev, addr, size, dir); | ||||
| 	debug_dma_sync_single_for_cpu(dev, addr, size, dir); | ||||
| } | ||||
| 
 | ||||
| static inline void dma_sync_single_for_device(struct device *dev, | ||||
| 					      dma_addr_t addr, size_t size, | ||||
| 					      enum dma_data_direction dir) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->sync_single_for_device) | ||||
| 		ops->sync_single_for_device(dev, addr, size, dir); | ||||
| 	debug_dma_sync_single_for_device(dev, addr, size, dir); | ||||
| } | ||||
| 
 | ||||
| static inline void dma_sync_single_range_for_cpu(struct device *dev, | ||||
| 						 dma_addr_t addr, | ||||
| 						 unsigned long offset, | ||||
| 						 size_t size, | ||||
| 						 enum dma_data_direction dir) | ||||
| { | ||||
| 	const struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->sync_single_for_cpu) | ||||
| 		ops->sync_single_for_cpu(dev, addr + offset, size, dir); | ||||
| 	debug_dma_sync_single_range_for_cpu(dev, addr, offset, size, dir); | ||||
| } | ||||
| 
 | ||||
| static inline void dma_sync_single_range_for_device(struct device *dev, | ||||
| 						    dma_addr_t addr, | ||||
| 						    unsigned long offset, | ||||
| 						    size_t size, | ||||
| 						    enum dma_data_direction dir) | ||||
| { | ||||
| 	const struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->sync_single_for_device) | ||||
| 		ops->sync_single_for_device(dev, addr + offset, size, dir); | ||||
| 	debug_dma_sync_single_range_for_device(dev, addr, offset, size, dir); | ||||
| } | ||||
| 
 | ||||
| static inline void | ||||
| dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, | ||||
| 		    int nelems, enum dma_data_direction dir) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->sync_sg_for_cpu) | ||||
| 		ops->sync_sg_for_cpu(dev, sg, nelems, dir); | ||||
| 	debug_dma_sync_sg_for_cpu(dev, sg, nelems, dir); | ||||
| } | ||||
| 
 | ||||
| static inline void | ||||
| dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, | ||||
| 		       int nelems, enum dma_data_direction dir) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 
 | ||||
| 	BUG_ON(!valid_dma_direction(dir)); | ||||
| 	if (ops->sync_sg_for_device) | ||||
| 		ops->sync_sg_for_device(dev, sg, nelems, dir); | ||||
| 	debug_dma_sync_sg_for_device(dev, sg, nelems, dir); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, NULL) | ||||
| #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, NULL) | ||||
| #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, NULL) | ||||
| #define dma_unmap_sg(d, s, n, r) dma_unmap_sg_attrs(d, s, n, r, NULL) | ||||
| #define dma_map_sg_attr(d, s, n, r, a) dma_map_sg_attrs(d, s, n, r, a) | ||||
| #define dma_unmap_sg_attr(d, s, n, r, a) dma_unmap_sg_attrs(d, s, n, r, a) | ||||
| 
 | ||||
| extern int dma_common_mmap(struct device *dev, struct vm_area_struct *vma, | ||||
| 			   void *cpu_addr, dma_addr_t dma_addr, size_t size); | ||||
| 
 | ||||
| void *dma_common_contiguous_remap(struct page *page, size_t size, | ||||
| 			unsigned long vm_flags, | ||||
| 			pgprot_t prot, const void *caller); | ||||
| 
 | ||||
| void *dma_common_pages_remap(struct page **pages, size_t size, | ||||
| 			unsigned long vm_flags, pgprot_t prot, | ||||
| 			const void *caller); | ||||
| void dma_common_free_remap(void *cpu_addr, size_t size, unsigned long vm_flags); | ||||
| 
 | ||||
| /**
 | ||||
|  * dma_mmap_attrs - map a coherent DMA allocation into user space | ||||
|  * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices | ||||
|  * @vma: vm_area_struct describing requested user mapping | ||||
|  * @cpu_addr: kernel CPU-view address returned from dma_alloc_attrs | ||||
|  * @handle: device-view address returned from dma_alloc_attrs | ||||
|  * @size: size of memory originally requested in dma_alloc_attrs | ||||
|  * @attrs: attributes of mapping properties requested in dma_alloc_attrs | ||||
|  * | ||||
|  * Map a coherent DMA buffer previously allocated by dma_alloc_attrs | ||||
|  * into user space.  The coherent DMA buffer must not be freed by the | ||||
|  * driver until the user space mapping has been released. | ||||
|  */ | ||||
| static inline int | ||||
| dma_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, | ||||
| 	       dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 	BUG_ON(!ops); | ||||
| 	if (ops->mmap) | ||||
| 		return ops->mmap(dev, vma, cpu_addr, dma_addr, size, attrs); | ||||
| 	return dma_common_mmap(dev, vma, cpu_addr, dma_addr, size); | ||||
| } | ||||
| 
 | ||||
| #define dma_mmap_coherent(d, v, c, h, s) dma_mmap_attrs(d, v, c, h, s, NULL) | ||||
| 
 | ||||
| int | ||||
| dma_common_get_sgtable(struct device *dev, struct sg_table *sgt, | ||||
| 		       void *cpu_addr, dma_addr_t dma_addr, size_t size); | ||||
| 
 | ||||
| static inline int | ||||
| dma_get_sgtable_attrs(struct device *dev, struct sg_table *sgt, void *cpu_addr, | ||||
| 		      dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs) | ||||
| { | ||||
| 	struct dma_map_ops *ops = get_dma_ops(dev); | ||||
| 	BUG_ON(!ops); | ||||
| 	if (ops->get_sgtable) | ||||
| 		return ops->get_sgtable(dev, sgt, cpu_addr, dma_addr, size, | ||||
| 					attrs); | ||||
| 	return dma_common_get_sgtable(dev, sgt, cpu_addr, dma_addr, size); | ||||
| } | ||||
| 
 | ||||
| #define dma_get_sgtable(d, t, v, h, s) dma_get_sgtable_attrs(d, t, v, h, s, NULL) | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										15
									
								
								include/asm-generic/dma.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								include/asm-generic/dma.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| #ifndef __ASM_GENERIC_DMA_H | ||||
| #define __ASM_GENERIC_DMA_H | ||||
| /*
 | ||||
|  * This file traditionally describes the i8237 PC style DMA controller. | ||||
|  * Most architectures don't have these any more and can get the minimal | ||||
|  * implementation from kernel/dma.c by not defining MAX_DMA_CHANNELS. | ||||
|  * | ||||
|  * Some code relies on seeing MAX_DMA_ADDRESS though. | ||||
|  */ | ||||
| #define MAX_DMA_ADDRESS PAGE_OFFSET | ||||
| 
 | ||||
| extern int request_dma(unsigned int dmanr, const char *device_id); | ||||
| extern void free_dma(unsigned int dmanr); | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_DMA_H */ | ||||
							
								
								
									
										42
									
								
								include/asm-generic/early_ioremap.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								include/asm-generic/early_ioremap.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| #ifndef _ASM_EARLY_IOREMAP_H_ | ||||
| #define _ASM_EARLY_IOREMAP_H_ | ||||
| 
 | ||||
| #include <linux/types.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * early_ioremap() and early_iounmap() are for temporary early boot-time | ||||
|  * mappings, before the real ioremap() is functional. | ||||
|  */ | ||||
| extern void __iomem *early_ioremap(resource_size_t phys_addr, | ||||
| 				   unsigned long size); | ||||
| extern void *early_memremap(resource_size_t phys_addr, | ||||
| 			    unsigned long size); | ||||
| extern void early_iounmap(void __iomem *addr, unsigned long size); | ||||
| extern void early_memunmap(void *addr, unsigned long size); | ||||
| 
 | ||||
| /*
 | ||||
|  * Weak function called by early_ioremap_reset(). It does nothing, but | ||||
|  * architectures may provide their own version to do any needed cleanups. | ||||
|  */ | ||||
| extern void early_ioremap_shutdown(void); | ||||
| 
 | ||||
| #if defined(CONFIG_GENERIC_EARLY_IOREMAP) && defined(CONFIG_MMU) | ||||
| /* Arch-specific initialization */ | ||||
| extern void early_ioremap_init(void); | ||||
| 
 | ||||
| /* Generic initialization called by architecture code */ | ||||
| extern void early_ioremap_setup(void); | ||||
| 
 | ||||
| /*
 | ||||
|  * Called as last step in paging_init() so library can act | ||||
|  * accordingly for subsequent map/unmap requests. | ||||
|  */ | ||||
| extern void early_ioremap_reset(void); | ||||
| 
 | ||||
| #else | ||||
| static inline void early_ioremap_init(void) { } | ||||
| static inline void early_ioremap_setup(void) { } | ||||
| static inline void early_ioremap_reset(void) { } | ||||
| #endif | ||||
| 
 | ||||
| #endif /* _ASM_EARLY_IOREMAP_H_ */ | ||||
							
								
								
									
										9
									
								
								include/asm-generic/emergency-restart.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								include/asm-generic/emergency-restart.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| #ifndef _ASM_GENERIC_EMERGENCY_RESTART_H | ||||
| #define _ASM_GENERIC_EMERGENCY_RESTART_H | ||||
| 
 | ||||
| static inline void machine_emergency_restart(void) | ||||
| { | ||||
| 	machine_restart(NULL); | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_EMERGENCY_RESTART_H */ | ||||
							
								
								
									
										19
									
								
								include/asm-generic/exec.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								include/asm-generic/exec.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| /* Generic process execution definitions, based on MN10300 definitions.
 | ||||
|  * | ||||
|  * It should be possible to use these on really simple architectures, | ||||
|  * but it serves more as a starting point for new ports. | ||||
|  * | ||||
|  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||||
|  * Written by David Howells (dhowells@redhat.com) | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public Licence | ||||
|  * as published by the Free Software Foundation; either version | ||||
|  * 2 of the Licence, or (at your option) any later version. | ||||
|  */ | ||||
| #ifndef __ASM_GENERIC_EXEC_H | ||||
| #define __ASM_GENERIC_EXEC_H | ||||
| 
 | ||||
| #define arch_align_stack(x) (x) | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_EXEC_H */ | ||||
							
								
								
									
										12
									
								
								include/asm-generic/fb.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								include/asm-generic/fb.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| #ifndef __ASM_GENERIC_FB_H_ | ||||
| #define __ASM_GENERIC_FB_H_ | ||||
| #include <linux/fb.h> | ||||
| 
 | ||||
| #define fb_pgprotect(...) do {} while (0) | ||||
| 
 | ||||
| static inline int fb_is_primary_device(struct fb_info *info) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_FB_H_ */ | ||||
							
								
								
									
										100
									
								
								include/asm-generic/fixmap.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								include/asm-generic/fixmap.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,100 @@ | |||
| /*
 | ||||
|  * fixmap.h: compile-time virtual memory allocation | ||||
|  * | ||||
|  * This file is subject to the terms and conditions of the GNU General Public | ||||
|  * License.  See the file "COPYING" in the main directory of this archive | ||||
|  * for more details. | ||||
|  * | ||||
|  * Copyright (C) 1998 Ingo Molnar | ||||
|  * | ||||
|  * Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999 | ||||
|  * x86_32 and x86_64 integration by Gustavo F. Padovan, February 2009 | ||||
|  * Break out common bits to asm-generic by Mark Salter, November 2013 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ASM_GENERIC_FIXMAP_H | ||||
| #define __ASM_GENERIC_FIXMAP_H | ||||
| 
 | ||||
| #include <linux/bug.h> | ||||
| 
 | ||||
| #define __fix_to_virt(x)	(FIXADDR_TOP - ((x) << PAGE_SHIFT)) | ||||
| #define __virt_to_fix(x)	((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT) | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| /*
 | ||||
|  * 'index to address' translation. If anyone tries to use the idx | ||||
|  * directly without translation, we catch the bug with a NULL-deference | ||||
|  * kernel oops. Illegal ranges of incoming indices are caught too. | ||||
|  */ | ||||
| static __always_inline unsigned long fix_to_virt(const unsigned int idx) | ||||
| { | ||||
| 	BUILD_BUG_ON(idx >= __end_of_fixed_addresses); | ||||
| 	return __fix_to_virt(idx); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long virt_to_fix(const unsigned long vaddr) | ||||
| { | ||||
| 	BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); | ||||
| 	return __virt_to_fix(vaddr); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Provide some reasonable defaults for page flags. | ||||
|  * Not all architectures use all of these different types and some | ||||
|  * architectures use different names. | ||||
|  */ | ||||
| #ifndef FIXMAP_PAGE_NORMAL | ||||
| #define FIXMAP_PAGE_NORMAL PAGE_KERNEL | ||||
| #endif | ||||
| #ifndef FIXMAP_PAGE_NOCACHE | ||||
| #define FIXMAP_PAGE_NOCACHE PAGE_KERNEL_NOCACHE | ||||
| #endif | ||||
| #ifndef FIXMAP_PAGE_IO | ||||
| #define FIXMAP_PAGE_IO PAGE_KERNEL_IO | ||||
| #endif | ||||
| #ifndef FIXMAP_PAGE_CLEAR | ||||
| #define FIXMAP_PAGE_CLEAR __pgprot(0) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef set_fixmap | ||||
| #define set_fixmap(idx, phys)				\ | ||||
| 	__set_fixmap(idx, phys, FIXMAP_PAGE_NORMAL) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef clear_fixmap | ||||
| #define clear_fixmap(idx)			\ | ||||
| 	__set_fixmap(idx, 0, FIXMAP_PAGE_CLEAR) | ||||
| #endif | ||||
| 
 | ||||
| /* Return a pointer with offset calculated */ | ||||
| #define __set_fixmap_offset(idx, phys, flags)		      \ | ||||
| ({							      \ | ||||
| 	unsigned long addr;				      \ | ||||
| 	__set_fixmap(idx, phys, flags);			      \ | ||||
| 	addr = fix_to_virt(idx) + ((phys) & (PAGE_SIZE - 1)); \ | ||||
| 	addr;						      \ | ||||
| }) | ||||
| 
 | ||||
| #define set_fixmap_offset(idx, phys) \ | ||||
| 	__set_fixmap_offset(idx, phys, FIXMAP_PAGE_NORMAL) | ||||
| 
 | ||||
| /*
 | ||||
|  * Some hardware wants to get fixmapped without caching. | ||||
|  */ | ||||
| #define set_fixmap_nocache(idx, phys) \ | ||||
| 	__set_fixmap(idx, phys, FIXMAP_PAGE_NOCACHE) | ||||
| 
 | ||||
| #define set_fixmap_offset_nocache(idx, phys) \ | ||||
| 	__set_fixmap_offset(idx, phys, FIXMAP_PAGE_NOCACHE) | ||||
| 
 | ||||
| /*
 | ||||
|  * Some fixmaps are for IO | ||||
|  */ | ||||
| #define set_fixmap_io(idx, phys) \ | ||||
| 	__set_fixmap(idx, phys, FIXMAP_PAGE_IO) | ||||
| 
 | ||||
| #define set_fixmap_offset_io(idx, phys) \ | ||||
| 	__set_fixmap_offset(idx, phys, FIXMAP_PAGE_IO) | ||||
| 
 | ||||
| #endif /* __ASSEMBLY__ */ | ||||
| #endif /* __ASM_GENERIC_FIXMAP_H */ | ||||
							
								
								
									
										16
									
								
								include/asm-generic/ftrace.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								include/asm-generic/ftrace.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| /*
 | ||||
|  * linux/include/asm-generic/ftrace.h | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| #ifndef __ASM_GENERIC_FTRACE_H__ | ||||
| #define __ASM_GENERIC_FTRACE_H__ | ||||
| 
 | ||||
| /*
 | ||||
|  * Not all architectures need their own ftrace.h, the most | ||||
|  * common definitions are already in linux/ftrace.h. | ||||
|  */ | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_FTRACE_H__ */ | ||||
							
								
								
									
										57
									
								
								include/asm-generic/futex.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								include/asm-generic/futex.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| #ifndef _ASM_GENERIC_FUTEX_H | ||||
| #define _ASM_GENERIC_FUTEX_H | ||||
| 
 | ||||
| #include <linux/futex.h> | ||||
| #include <linux/uaccess.h> | ||||
| #include <asm/errno.h> | ||||
| 
 | ||||
| static inline int | ||||
| futex_atomic_op_inuser (int encoded_op, u32 __user *uaddr) | ||||
| { | ||||
| 	int op = (encoded_op >> 28) & 7; | ||||
| 	int cmp = (encoded_op >> 24) & 15; | ||||
| 	int oparg = (encoded_op << 8) >> 20; | ||||
| 	int cmparg = (encoded_op << 20) >> 20; | ||||
| 	int oldval = 0, ret; | ||||
| 	if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||||
| 		oparg = 1 << oparg; | ||||
| 
 | ||||
| 	if (! access_ok (VERIFY_WRITE, uaddr, sizeof(u32))) | ||||
| 		return -EFAULT; | ||||
| 
 | ||||
| 	pagefault_disable(); | ||||
| 
 | ||||
| 	switch (op) { | ||||
| 	case FUTEX_OP_SET: | ||||
| 	case FUTEX_OP_ADD: | ||||
| 	case FUTEX_OP_OR: | ||||
| 	case FUTEX_OP_ANDN: | ||||
| 	case FUTEX_OP_XOR: | ||||
| 	default: | ||||
| 		ret = -ENOSYS; | ||||
| 	} | ||||
| 
 | ||||
| 	pagefault_enable(); | ||||
| 
 | ||||
| 	if (!ret) { | ||||
| 		switch (cmp) { | ||||
| 		case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break; | ||||
| 		case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break; | ||||
| 		case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break; | ||||
| 		case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break; | ||||
| 		case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break; | ||||
| 		case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break; | ||||
| 		default: ret = -ENOSYS; | ||||
| 		} | ||||
| 	} | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| static inline int | ||||
| futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | ||||
| 			      u32 oldval, u32 newval) | ||||
| { | ||||
| 	return -ENOSYS; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										61
									
								
								include/asm-generic/getorder.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								include/asm-generic/getorder.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| #ifndef __ASM_GENERIC_GETORDER_H | ||||
| #define __ASM_GENERIC_GETORDER_H | ||||
| 
 | ||||
| #ifndef __ASSEMBLY__ | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/log2.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Runtime evaluation of get_order() | ||||
|  */ | ||||
| static inline __attribute_const__ | ||||
| int __get_order(unsigned long size) | ||||
| { | ||||
| 	int order; | ||||
| 
 | ||||
| 	size--; | ||||
| 	size >>= PAGE_SHIFT; | ||||
| #if BITS_PER_LONG == 32 | ||||
| 	order = fls(size); | ||||
| #else | ||||
| 	order = fls64(size); | ||||
| #endif | ||||
| 	return order; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * get_order - Determine the allocation order of a memory size | ||||
|  * @size: The size for which to get the order | ||||
|  * | ||||
|  * Determine the allocation order of a particular sized block of memory.  This | ||||
|  * is on a logarithmic scale, where: | ||||
|  * | ||||
|  *	0 -> 2^0 * PAGE_SIZE and below | ||||
|  *	1 -> 2^1 * PAGE_SIZE to 2^0 * PAGE_SIZE + 1 | ||||
|  *	2 -> 2^2 * PAGE_SIZE to 2^1 * PAGE_SIZE + 1 | ||||
|  *	3 -> 2^3 * PAGE_SIZE to 2^2 * PAGE_SIZE + 1 | ||||
|  *	4 -> 2^4 * PAGE_SIZE to 2^3 * PAGE_SIZE + 1 | ||||
|  *	... | ||||
|  * | ||||
|  * The order returned is used to find the smallest allocation granule required | ||||
|  * to hold an object of the specified size. | ||||
|  * | ||||
|  * The result is undefined if the size is 0. | ||||
|  * | ||||
|  * This function may be used to initialise variables with compile time | ||||
|  * evaluations of constants. | ||||
|  */ | ||||
| #define get_order(n)						\ | ||||
| (								\ | ||||
| 	__builtin_constant_p(n) ? (				\ | ||||
| 		((n) == 0UL) ? BITS_PER_LONG - PAGE_SHIFT :	\ | ||||
| 		(((n) < (1UL << PAGE_SHIFT)) ? 0 :		\ | ||||
| 		 ilog2((n) - 1) - PAGE_SHIFT + 1)		\ | ||||
| 	) :							\ | ||||
| 	__get_order(n)						\ | ||||
| ) | ||||
| 
 | ||||
| #endif	/* __ASSEMBLY__ */ | ||||
| 
 | ||||
| #endif	/* __ASM_GENERIC_GETORDER_H */ | ||||
							
								
								
									
										220
									
								
								include/asm-generic/gpio.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								include/asm-generic/gpio.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,220 @@ | |||
| #ifndef _ASM_GENERIC_GPIO_H | ||||
| #define _ASM_GENERIC_GPIO_H | ||||
| 
 | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/errno.h> | ||||
| #include <linux/of.h> | ||||
| #include <linux/pinctrl/pinctrl.h> | ||||
| 
 | ||||
| #ifdef CONFIG_GPIOLIB | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/gpio/driver.h> | ||||
| #include <linux/gpio/consumer.h> | ||||
| 
 | ||||
| /* Platforms may implement their GPIO interface with library code,
 | ||||
|  * at a small performance cost for non-inlined operations and some | ||||
|  * extra memory (for code and for per-GPIO table entries). | ||||
|  * | ||||
|  * While the GPIO programming interface defines valid GPIO numbers | ||||
|  * to be in the range 0..MAX_INT, this library restricts them to the | ||||
|  * smaller range 0..ARCH_NR_GPIOS-1. | ||||
|  * | ||||
|  * ARCH_NR_GPIOS is somewhat arbitrary; it usually reflects the sum of | ||||
|  * builtin/SoC GPIOs plus a number of GPIOs on expanders; the latter is | ||||
|  * actually an estimate of a board-specific value. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef ARCH_NR_GPIOS | ||||
| #define ARCH_NR_GPIOS		512 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * "valid" GPIO numbers are nonnegative and may be passed to | ||||
|  * setup routines like gpio_request().  only some valid numbers | ||||
|  * can successfully be requested and used. | ||||
|  * | ||||
|  * Invalid GPIO numbers are useful for indicating no-such-GPIO in | ||||
|  * platform data and other tables. | ||||
|  */ | ||||
| 
 | ||||
| static inline bool gpio_is_valid(int number) | ||||
| { | ||||
| 	return number >= 0 && number < ARCH_NR_GPIOS; | ||||
| } | ||||
| 
 | ||||
| struct device; | ||||
| struct gpio; | ||||
| struct seq_file; | ||||
| struct module; | ||||
| struct device_node; | ||||
| struct gpio_desc; | ||||
| 
 | ||||
| /* caller holds gpio_lock *OR* gpio is marked as requested */ | ||||
| static inline struct gpio_chip *gpio_to_chip(unsigned gpio) | ||||
| { | ||||
| 	return gpiod_to_chip(gpio_to_desc(gpio)); | ||||
| } | ||||
| 
 | ||||
| /* Always use the library code for GPIO management calls,
 | ||||
|  * or when sleeping may be involved. | ||||
|  */ | ||||
| extern int gpio_request(unsigned gpio, const char *label); | ||||
| extern void gpio_free(unsigned gpio); | ||||
| 
 | ||||
| static inline int gpio_direction_input(unsigned gpio) | ||||
| { | ||||
| 	return gpiod_direction_input(gpio_to_desc(gpio)); | ||||
| } | ||||
| static inline int gpio_direction_output(unsigned gpio, int value) | ||||
| { | ||||
| 	return gpiod_direction_output_raw(gpio_to_desc(gpio), value); | ||||
| } | ||||
| 
 | ||||
| static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) | ||||
| { | ||||
| 	return gpiod_set_debounce(gpio_to_desc(gpio), debounce); | ||||
| } | ||||
| 
 | ||||
| static inline int gpio_get_value_cansleep(unsigned gpio) | ||||
| { | ||||
| 	return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio)); | ||||
| } | ||||
| static inline void gpio_set_value_cansleep(unsigned gpio, int value) | ||||
| { | ||||
| 	return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* A platform's <asm/gpio.h> code may want to inline the I/O calls when
 | ||||
|  * the GPIO is constant and refers to some always-present controller, | ||||
|  * giving direct access to chip registers and tight bitbanging loops. | ||||
|  */ | ||||
| static inline int __gpio_get_value(unsigned gpio) | ||||
| { | ||||
| 	return gpiod_get_raw_value(gpio_to_desc(gpio)); | ||||
| } | ||||
| static inline void __gpio_set_value(unsigned gpio, int value) | ||||
| { | ||||
| 	return gpiod_set_raw_value(gpio_to_desc(gpio), value); | ||||
| } | ||||
| 
 | ||||
| static inline int __gpio_cansleep(unsigned gpio) | ||||
| { | ||||
| 	return gpiod_cansleep(gpio_to_desc(gpio)); | ||||
| } | ||||
| 
 | ||||
| static inline int __gpio_to_irq(unsigned gpio) | ||||
| { | ||||
| 	return gpiod_to_irq(gpio_to_desc(gpio)); | ||||
| } | ||||
| 
 | ||||
| extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *label); | ||||
| extern int gpio_request_array(const struct gpio *array, size_t num); | ||||
| extern void gpio_free_array(const struct gpio *array, size_t num); | ||||
| 
 | ||||
| /*
 | ||||
|  * A sysfs interface can be exported by individual drivers if they want, | ||||
|  * but more typically is configured entirely from userspace. | ||||
|  */ | ||||
| static inline int gpio_export(unsigned gpio, bool direction_may_change) | ||||
| { | ||||
| 	return gpiod_export(gpio_to_desc(gpio), direction_may_change); | ||||
| } | ||||
| 
 | ||||
| static inline int gpio_export_link(struct device *dev, const char *name, | ||||
| 				   unsigned gpio) | ||||
| { | ||||
| 	return gpiod_export_link(dev, name, gpio_to_desc(gpio)); | ||||
| } | ||||
| 
 | ||||
| static inline int gpio_sysfs_set_active_low(unsigned gpio, int value) | ||||
| { | ||||
| 	return gpiod_sysfs_set_active_low(gpio_to_desc(gpio), value); | ||||
| } | ||||
| 
 | ||||
| static inline void gpio_unexport(unsigned gpio) | ||||
| { | ||||
| 	gpiod_unexport(gpio_to_desc(gpio)); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_PINCTRL | ||||
| 
 | ||||
| /**
 | ||||
|  * struct gpio_pin_range - pin range controlled by a gpio chip | ||||
|  * @head: list for maintaining set of pin ranges, used internally | ||||
|  * @pctldev: pinctrl device which handles corresponding pins | ||||
|  * @range: actual range of pins controlled by a gpio controller | ||||
|  */ | ||||
| 
 | ||||
| struct gpio_pin_range { | ||||
| 	struct list_head node; | ||||
| 	struct pinctrl_dev *pctldev; | ||||
| 	struct pinctrl_gpio_range range; | ||||
| }; | ||||
| 
 | ||||
| int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, | ||||
| 			   unsigned int gpio_offset, unsigned int pin_offset, | ||||
| 			   unsigned int npins); | ||||
| int gpiochip_add_pingroup_range(struct gpio_chip *chip, | ||||
| 			struct pinctrl_dev *pctldev, | ||||
| 			unsigned int gpio_offset, const char *pin_group); | ||||
| void gpiochip_remove_pin_ranges(struct gpio_chip *chip); | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| static inline int | ||||
| gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, | ||||
| 		       unsigned int gpio_offset, unsigned int pin_offset, | ||||
| 		       unsigned int npins) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| static inline int | ||||
| gpiochip_add_pingroup_range(struct gpio_chip *chip, | ||||
| 			struct pinctrl_dev *pctldev, | ||||
| 			unsigned int gpio_offset, const char *pin_group) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static inline void | ||||
| gpiochip_remove_pin_ranges(struct gpio_chip *chip) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| #endif /* CONFIG_PINCTRL */ | ||||
| 
 | ||||
| #else	/* !CONFIG_GPIOLIB */ | ||||
| 
 | ||||
| static inline bool gpio_is_valid(int number) | ||||
| { | ||||
| 	/* only non-negative numbers are valid */ | ||||
| 	return number >= 0; | ||||
| } | ||||
| 
 | ||||
| /* platforms that don't directly support access to GPIOs through I2C, SPI,
 | ||||
|  * or other blocking infrastructure can use these wrappers. | ||||
|  */ | ||||
| 
 | ||||
| static inline int gpio_cansleep(unsigned gpio) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static inline int gpio_get_value_cansleep(unsigned gpio) | ||||
| { | ||||
| 	might_sleep(); | ||||
| 	return __gpio_get_value(gpio); | ||||
| } | ||||
| 
 | ||||
| static inline void gpio_set_value_cansleep(unsigned gpio, int value) | ||||
| { | ||||
| 	might_sleep(); | ||||
| 	__gpio_set_value(gpio, value); | ||||
| } | ||||
| 
 | ||||
| #endif /* !CONFIG_GPIOLIB */ | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_GPIO_H */ | ||||
							
								
								
									
										21
									
								
								include/asm-generic/hardirq.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								include/asm-generic/hardirq.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| #ifndef __ASM_GENERIC_HARDIRQ_H | ||||
| #define __ASM_GENERIC_HARDIRQ_H | ||||
| 
 | ||||
| #include <linux/cache.h> | ||||
| #include <linux/threads.h> | ||||
| 
 | ||||
| typedef struct { | ||||
| 	unsigned int __softirq_pending; | ||||
| } ____cacheline_aligned irq_cpustat_t; | ||||
| 
 | ||||
| #include <linux/irq_cpustat.h>	/* Standard mappings for irq_cpustat_t above */ | ||||
| #include <linux/irq.h> | ||||
| 
 | ||||
| #ifndef ack_bad_irq | ||||
| static inline void ack_bad_irq(unsigned int irq) | ||||
| { | ||||
| 	printk(KERN_CRIT "unexpected IRQ trap at vector %02x\n", irq); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_HARDIRQ_H */ | ||||
							
								
								
									
										9
									
								
								include/asm-generic/hash.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								include/asm-generic/hash.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| #ifndef __ASM_GENERIC_HASH_H | ||||
| #define __ASM_GENERIC_HASH_H | ||||
| 
 | ||||
| struct fast_hash_ops; | ||||
| static inline void setup_arch_fast_hash(struct fast_hash_ops *ops) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_HASH_H */ | ||||
							
								
								
									
										40
									
								
								include/asm-generic/hugetlb.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								include/asm-generic/hugetlb.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| #ifndef _ASM_GENERIC_HUGETLB_H | ||||
| #define _ASM_GENERIC_HUGETLB_H | ||||
| 
 | ||||
| static inline pte_t mk_huge_pte(struct page *page, pgprot_t pgprot) | ||||
| { | ||||
| 	return mk_pte(page, pgprot); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long huge_pte_write(pte_t pte) | ||||
| { | ||||
| 	return pte_write(pte); | ||||
| } | ||||
| 
 | ||||
| static inline unsigned long huge_pte_dirty(pte_t pte) | ||||
| { | ||||
| 	return pte_dirty(pte); | ||||
| } | ||||
| 
 | ||||
| static inline pte_t huge_pte_mkwrite(pte_t pte) | ||||
| { | ||||
| 	return pte_mkwrite(pte); | ||||
| } | ||||
| 
 | ||||
| static inline pte_t huge_pte_mkdirty(pte_t pte) | ||||
| { | ||||
| 	return pte_mkdirty(pte); | ||||
| } | ||||
| 
 | ||||
| static inline pte_t huge_pte_modify(pte_t pte, pgprot_t newprot) | ||||
| { | ||||
| 	return pte_modify(pte, newprot); | ||||
| } | ||||
| 
 | ||||
| static inline void huge_pte_clear(struct mm_struct *mm, unsigned long addr, | ||||
| 				  pte_t *ptep) | ||||
| { | ||||
| 	pte_clear(mm, addr, ptep); | ||||
| } | ||||
| 
 | ||||
| #endif /* _ASM_GENERIC_HUGETLB_H */ | ||||
							
								
								
									
										9
									
								
								include/asm-generic/hw_irq.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								include/asm-generic/hw_irq.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| #ifndef __ASM_GENERIC_HW_IRQ_H | ||||
| #define __ASM_GENERIC_HW_IRQ_H | ||||
| /*
 | ||||
|  * hw_irq.h has internal declarations for the low-level interrupt | ||||
|  * controller, like the original i8259A. | ||||
|  * In general, this is not needed for new architectures. | ||||
|  */ | ||||
| 
 | ||||
| #endif /* __ASM_GENERIC_HW_IRQ_H */ | ||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 awab228
						awab228