Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f654c0fe authored by Lin Ming's avatar Lin Ming Committed by Len Brown
Browse files

ACPICA: Add support for region address conflict checking

Allows drivers to determine if any memory or I/O addresses
will conflict with addresses used by ACPI operation regions.
Introduces a new interface, acpi_check_address_range.

http://marc.info/?t=132251388700002&r=1&w=2



Reported-and-tested-by: default avatarLuca Tettamanti <kronos.it@gmail.com>
Signed-off-by: default avatarLin Ming <ming.m.lin@intel.com>
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent ecafe6fa
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -135,6 +135,7 @@ acpi-y += \
	tbxfroot.o

acpi-y +=		\
	utaddress.o	\
	utalloc.o	\
	utcopy.o	\
	utdebug.o	\
+4 −0
Original line number Diff line number Diff line
@@ -123,6 +123,10 @@

#define ACPI_MAX_SLEEP                  2000	/* 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)
+2 −0
Original line number Diff line number Diff line
@@ -306,6 +306,8 @@ ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present;
ACPI_EXTERN u8 acpi_gbl_events_initialized;
ACPI_EXTERN u8 acpi_gbl_osi_data;
ACPI_EXTERN struct acpi_interface_info *acpi_gbl_supported_interfaces;
ACPI_EXTERN struct acpi_address_range
    *acpi_gbl_address_range_list[ACPI_ADDRESS_RANGE_MAX];

#ifndef DEFINE_ACPI_GLOBALS

+9 −0
Original line number Diff line number Diff line
@@ -630,6 +630,15 @@ union acpi_generic_state {

typedef acpi_status(*ACPI_EXECUTE_OP) (struct acpi_walk_state * walk_state);

/* Address Range info block */

struct acpi_address_range {
	struct acpi_address_range *next;
	struct acpi_namespace_node *region_node;
	acpi_physical_address start_address;
	acpi_physical_address end_address;
};

/*****************************************************************************
 *
 * Parser typedefs and structs
+18 −0
Original line number Diff line number Diff line
@@ -579,6 +579,24 @@ acpi_ut_create_list(char *list_name,

#endif				/* ACPI_DBG_TRACK_ALLOCATIONS */

/*
 * utaddress - address range check
 */
acpi_status
acpi_ut_add_address_range(acpi_adr_space_type space_id,
			  acpi_physical_address address,
			  u32 length, struct acpi_namespace_node *region_node);

void
acpi_ut_remove_address_range(acpi_adr_space_type space_id,
			     struct acpi_namespace_node *region_node);

u32
acpi_ut_check_address_range(acpi_adr_space_type space_id,
			    acpi_physical_address address, u32 length, u8 warn);

void acpi_ut_delete_address_lists(void);

/*
 * utxferror - various error/warning output functions
 */
Loading