It will be used in followup commits to figure out if device has it's own, device specific AML block. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20221017102146.2254096-7-imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Ani Sinha <ani@anisinha.ca>
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef ACPI_AML_INTERFACE_H
 | 
						|
#define ACPI_AML_INTERFACE_H
 | 
						|
 | 
						|
#include "qom/object.h"
 | 
						|
#include "hw/acpi/aml-build.h"
 | 
						|
 | 
						|
#define TYPE_ACPI_DEV_AML_IF "acpi-dev-aml-interface"
 | 
						|
typedef struct AcpiDevAmlIfClass AcpiDevAmlIfClass;
 | 
						|
DECLARE_CLASS_CHECKERS(AcpiDevAmlIfClass, ACPI_DEV_AML_IF, TYPE_ACPI_DEV_AML_IF)
 | 
						|
#define ACPI_DEV_AML_IF(obj) \
 | 
						|
     INTERFACE_CHECK(AcpiDevAmlIf, (obj), TYPE_ACPI_DEV_AML_IF)
 | 
						|
 | 
						|
typedef struct AcpiDevAmlIf AcpiDevAmlIf;
 | 
						|
typedef void (*dev_aml_fn)(AcpiDevAmlIf *adev, Aml *scope);
 | 
						|
 | 
						|
/**
 | 
						|
 * AcpiDevAmlIfClass:
 | 
						|
 *
 | 
						|
 * build_dev_aml: adds device specific AML blob to provided scope
 | 
						|
 *
 | 
						|
 * Interface is designed for providing generic callback that builds device
 | 
						|
 * specific AML blob.
 | 
						|
 */
 | 
						|
struct AcpiDevAmlIfClass {
 | 
						|
    /* <private> */
 | 
						|
    InterfaceClass parent_class;
 | 
						|
 | 
						|
    /* <public> */
 | 
						|
    dev_aml_fn build_dev_aml;
 | 
						|
};
 | 
						|
 | 
						|
static inline dev_aml_fn get_dev_aml_func(DeviceState *dev)
 | 
						|
{
 | 
						|
    if (object_dynamic_cast(OBJECT(dev), TYPE_ACPI_DEV_AML_IF)) {
 | 
						|
        AcpiDevAmlIfClass *klass = ACPI_DEV_AML_IF_GET_CLASS(dev);
 | 
						|
        return klass->build_dev_aml;
 | 
						|
    }
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 | 
						|
static inline void call_dev_aml_func(DeviceState *dev, Aml *scope)
 | 
						|
{
 | 
						|
    dev_aml_fn fn = get_dev_aml_func(dev);
 | 
						|
    if (fn) {
 | 
						|
        fn(ACPI_DEV_AML_IF(dev), scope);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |