AML Codegen is a Dynamic AML technique that facilitates generation of small segments of AML code. The AML code generated using AML Codegen is represented as nodes in the AML Tree. AML Resource Data Codegen implements interfaces required for generating Resource Data elements that can be attached to an AML tree. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  AML Resource Data Code Generation.
 | 
						|
 | 
						|
  Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef AML_RESOURCE_DATA_CODE_GEN_H_
 | 
						|
#define AML_RESOURCE_DATA_CODE_GEN_H_
 | 
						|
 | 
						|
/** Code generation for the "Interrupt ()" ASL function.
 | 
						|
 | 
						|
  This function creates a Resource Data element corresponding to the
 | 
						|
  "Interrupt ()" ASL function and stores it in an AML Data Node.
 | 
						|
 | 
						|
  The Resource Data effectively created is an Extended Interrupt Resource
 | 
						|
  Data. See ACPI 6.3 specification, s6.4.3.6 "Extended Interrupt Descriptor"
 | 
						|
  for more information about Extended Interrupt Resource Data.
 | 
						|
 | 
						|
  This function allocates memory to create a data node. It is the caller's
 | 
						|
  responsibility to either:
 | 
						|
   - attach this node to an AML tree;
 | 
						|
   - delete this node.
 | 
						|
 | 
						|
  @param [in]  ResourceConsumer    The device consumes the specified interrupt
 | 
						|
                                   or produces it for use by a child device.
 | 
						|
  @param [in]  EdgeTriggered       The interrupt is edge triggered or
 | 
						|
                                   level triggered.
 | 
						|
  @param [in]  ActiveLow           The interrupt is active-high or active-low.
 | 
						|
  @param [in]  Shared              The interrupt can be shared with other
 | 
						|
                                   devices or not (Exclusive).
 | 
						|
  @param [in]  IrqList             Interrupt list. Must be non-NULL.
 | 
						|
  @param [in]  IrqCount            Interrupt count. Must be non-zero.
 | 
						|
  @param [in]  ParentNode          If not NULL, add the generated node
 | 
						|
                                   to the end of the variable list of
 | 
						|
                                   argument of the ParentNode, but
 | 
						|
                                   before the "End Tag" Resource Data.
 | 
						|
                                   Must be a BufferOpNode.
 | 
						|
  @param  [out] NewRdNode          If success, contains the generated node.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The function completed successfully.
 | 
						|
  @retval EFI_INVALID_PARAMETER   Invalid parameter.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES    Could not allocate memory.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
AmlCodeGenInterrupt (
 | 
						|
  IN  BOOLEAN             ResourceConsumer,
 | 
						|
  IN  BOOLEAN             EdgeTriggered,
 | 
						|
  IN  BOOLEAN             ActiveLow,
 | 
						|
  IN  BOOLEAN             Shared,
 | 
						|
  IN  UINT32            * IrqList,
 | 
						|
  IN  UINT8               IrqCount,
 | 
						|
  IN  AML_OBJECT_NODE   * ParentNode,   OPTIONAL
 | 
						|
  OUT AML_DATA_NODE    ** NewRdNode     OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
#endif // AML_RESOURCE_DATA_CODE_GEN_H_
 |