Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
x86
platform
efi
efi-bgrt.c
Go to the documentation of this file.
1
/*
2
* Copyright 2012 Intel Corporation
3
* Author: Josh Triplett <
[email protected]
>
4
*
5
* Based on the bgrt driver:
6
* Copyright 2012 Red Hat, Inc <
[email protected]
>
7
* Author: Matthew Garrett
8
*
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License version 2 as
11
* published by the Free Software Foundation.
12
*/
13
#include <linux/kernel.h>
14
#include <
linux/acpi.h
>
15
#include <
linux/efi.h
>
16
#include <
linux/efi-bgrt.h
>
17
18
struct
acpi_table_bgrt
*
bgrt_tab
;
19
void
*
bgrt_image
;
20
size_t
bgrt_image_size
;
21
22
struct
bmp_header
{
23
u16
id
;
24
u32
size
;
25
}
__packed
;
26
27
void
efi_bgrt_init
(
void
)
28
{
29
acpi_status
status
;
30
void
__iomem
*
image
;
31
bool
ioremapped =
false
;
32
struct
bmp_header
bmp_header;
33
34
if
(
acpi_disabled
)
35
return
;
36
37
status =
acpi_get_table
(
"BGRT"
, 0,
38
(
struct
acpi_table_header
**)&bgrt_tab);
39
if
(
ACPI_FAILURE
(status))
40
return
;
41
42
if
(bgrt_tab->
version
!= 1)
43
return
;
44
if
(bgrt_tab->
image_type
!= 0 || !bgrt_tab->
image_address
)
45
return
;
46
47
image =
efi_lookup_mapped_addr
(bgrt_tab->
image_address
);
48
if
(!image) {
49
image =
ioremap
(bgrt_tab->
image_address
,
sizeof
(bmp_header));
50
ioremapped =
true
;
51
if
(!image)
52
return
;
53
}
54
55
memcpy_fromio
(&bmp_header, image,
sizeof
(bmp_header));
56
if
(ioremapped)
57
iounmap
(image);
58
bgrt_image_size
= bmp_header.
size
;
59
60
bgrt_image
=
kmalloc
(
bgrt_image_size
,
GFP_KERNEL
);
61
if
(!
bgrt_image
)
62
return
;
63
64
if
(ioremapped) {
65
image =
ioremap
(bgrt_tab->
image_address
, bmp_header.
size
);
66
if
(!image) {
67
kfree
(
bgrt_image
);
68
bgrt_image
=
NULL
;
69
return
;
70
}
71
}
72
73
memcpy_fromio
(
bgrt_image
, image,
bgrt_image_size
);
74
if
(ioremapped)
75
iounmap
(image);
76
}
Generated on Thu Jan 10 2013 13:21:40 for Linux Kernel by
1.8.2