Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
de9bde9a
Commit
de9bde9a
authored
Aug 24, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Pull bugzilla-8630 into release branch
parents
5a16eff8
9f3119b7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
71 additions
and
0 deletions
+71
-0
drivers/acpi/tables/tbutils.c
drivers/acpi/tables/tbutils.c
+71
-0
No files found.
drivers/acpi/tables/tbutils.c
View file @
de9bde9a
...
...
@@ -51,6 +51,65 @@ ACPI_MODULE_NAME("tbutils")
static
acpi_physical_address
acpi_tb_get_root_table_entry
(
u8
*
table_entry
,
acpi_native_uint
table_entry_size
);
/*******************************************************************************
*
* FUNCTION: acpi_tb_check_xsdt
*
* PARAMETERS: address - Pointer to the XSDT
*
* RETURN: status
* AE_OK - XSDT is okay
* AE_NO_MEMORY - can't map XSDT
* AE_INVALID_TABLE_LENGTH - invalid table length
* AE_NULL_ENTRY - XSDT has NULL entry
*
* DESCRIPTION: validate XSDT
******************************************************************************/
static
acpi_status
acpi_tb_check_xsdt
(
acpi_physical_address
address
)
{
struct
acpi_table_header
*
table
;
u32
length
;
u64
xsdt_entry_address
;
u8
*
table_entry
;
u32
table_count
;
int
i
;
table
=
acpi_os_map_memory
(
address
,
sizeof
(
struct
acpi_table_header
));
if
(
!
table
)
return
AE_NO_MEMORY
;
length
=
table
->
length
;
acpi_os_unmap_memory
(
table
,
sizeof
(
struct
acpi_table_header
));
if
(
length
<
sizeof
(
struct
acpi_table_header
))
return
AE_INVALID_TABLE_LENGTH
;
table
=
acpi_os_map_memory
(
address
,
length
);
if
(
!
table
)
return
AE_NO_MEMORY
;
/* Calculate the number of tables described in XSDT */
table_count
=
(
u32
)
((
table
->
length
-
sizeof
(
struct
acpi_table_header
))
/
sizeof
(
u64
));
table_entry
=
ACPI_CAST_PTR
(
u8
,
table
)
+
sizeof
(
struct
acpi_table_header
);
for
(
i
=
0
;
i
<
table_count
;
i
++
)
{
ACPI_MOVE_64_TO_64
(
&
xsdt_entry_address
,
table_entry
);
if
(
!
xsdt_entry_address
)
{
/* XSDT has NULL entry */
break
;
}
table_entry
+=
sizeof
(
u64
);
}
acpi_os_unmap_memory
(
table
,
length
);
if
(
i
<
table_count
)
return
AE_NULL_ENTRY
;
else
return
AE_OK
;
}
/*******************************************************************************
*
...
...
@@ -341,6 +400,7 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
u32
table_count
;
struct
acpi_table_header
*
table
;
acpi_physical_address
address
;
acpi_physical_address
rsdt_address
;
u32
length
;
u8
*
table_entry
;
acpi_status
status
;
...
...
@@ -369,6 +429,8 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
*/
address
=
(
acpi_physical_address
)
rsdp
->
xsdt_physical_address
;
table_entry_size
=
sizeof
(
u64
);
rsdt_address
=
(
acpi_physical_address
)
rsdp
->
rsdt_physical_address
;
}
else
{
/* Root table is an RSDT (32-bit physical addresses) */
...
...
@@ -382,6 +444,15 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
*/
acpi_os_unmap_memory
(
rsdp
,
sizeof
(
struct
acpi_table_rsdp
));
if
(
table_entry_size
==
sizeof
(
u64
))
{
if
(
acpi_tb_check_xsdt
(
address
)
==
AE_NULL_ENTRY
)
{
/* XSDT has NULL entry, RSDT is used */
address
=
rsdt_address
;
table_entry_size
=
sizeof
(
u32
);
ACPI_WARNING
((
AE_INFO
,
"BIOS XSDT has NULL entry,"
"using RSDT"
));
}
}
/* Map the RSDT/XSDT table header to get the full table length */
table
=
acpi_os_map_memory
(
address
,
sizeof
(
struct
acpi_table_header
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment