mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-23 23:59:22 +00:00
Compare commits
822
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e29466b0b5 | ||
|
|
281b8b44ed | ||
|
|
529818738f | ||
|
|
8a96fc4093 | ||
|
|
f3df8f961f | ||
|
|
ec4aca088a | ||
|
|
fcb1528d93 | ||
|
|
c36c0e05f1 | ||
|
|
c96cfac167 | ||
|
|
bf94ef7fbd | ||
|
|
5412028d19 | ||
|
|
c65d35b08b | ||
|
|
a5bd52990e | ||
|
|
1d4e3db907 | ||
|
|
4e5414b2a1 | ||
|
|
1402cdd96a | ||
|
|
31932a267c | ||
|
|
393cc59195 | ||
|
|
dac87d6032 | ||
|
|
42e24b6006 | ||
|
|
08438d783f | ||
|
|
34fe0b5901 | ||
|
|
377c121170 | ||
|
|
43b444e593 | ||
|
|
ea20dd2b22 | ||
|
|
3d173955f0 | ||
|
|
68c6cec061 | ||
|
|
0704e83a1b | ||
|
|
f14c77f501 | ||
|
|
0fd9fa565b | ||
|
|
6f5aa28bc2 | ||
|
|
a134ef1ab9 | ||
|
|
255b9e0bea | ||
|
|
b53f595b3e | ||
|
|
6371e9c104 | ||
|
|
d15f17b2a0 | ||
|
|
a0413e2677 | ||
|
|
43dbf83aa2 | ||
|
|
bec592aa87 | ||
|
|
79fc008935 | ||
|
|
bf9c561670 | ||
|
|
afa9dda37e | ||
|
|
cde63a3bb0 | ||
|
|
bf0e59cebf | ||
|
|
a2932fbe8a | ||
|
|
972765fe82 | ||
|
|
07662af7ae | ||
|
|
562c406763 | ||
|
|
ce95549cc5 | ||
|
|
a3e9da054d | ||
|
|
130234bc78 | ||
|
|
7b4c54c4ad | ||
|
|
0d2345774d | ||
|
|
c9a8d037a8 | ||
|
|
f8c3af3b61 | ||
|
|
0af7539bd2 | ||
|
|
0d663b50b9 | ||
|
|
28511b0da9 | ||
|
|
e1b099fb69 | ||
|
|
fbca374105 | ||
|
|
5f311e86d2 | ||
|
|
0de3eeb623 | ||
|
|
b67a95ecad | ||
|
|
5500cefccd | ||
|
|
d73976fdff | ||
|
|
1fbb2b4b39 | ||
|
|
c221ea06b5 | ||
|
|
72c28509fa | ||
|
|
7e5fcb0b34 | ||
|
|
6ae55ce103 | ||
|
|
c69d1858f1 | ||
|
|
4231927e44 | ||
|
|
a620876e3b | ||
|
|
f2b6c20a25 | ||
|
|
ba89c19f49 | ||
|
|
9862b24121 | ||
|
|
e563928ba4 | ||
|
|
a0bf403f66 | ||
|
|
4e0f8f66e3 | ||
|
|
c831d2073b | ||
|
|
52408aa946 | ||
|
|
58590cb2ef | ||
|
|
b524fa27f5 | ||
|
|
e045af148a | ||
|
|
13f7ead3a1 | ||
|
|
7a5b301e3a | ||
|
|
abf9beb7d6 | ||
|
|
f4d35d49e3 | ||
|
|
6714d7ecff | ||
|
|
5b8ddf6e03 | ||
|
|
76eac44af3 | ||
|
|
ee83919e93 | ||
|
|
3c3e96d044 | ||
|
|
15aee573d2 | ||
|
|
7f2a856fae | ||
|
|
9545a8fd04 | ||
|
|
082bc9f77b | ||
|
|
d017ea8ede | ||
|
|
8207874e5d | ||
|
|
102e435d81 | ||
|
|
51f375d688 | ||
|
|
ca028db3d4 | ||
|
|
0f076d75d0 | ||
|
|
86ef66d977 | ||
|
|
5bcb7d394c | ||
|
|
df21fff504 | ||
|
|
73a9c742fe | ||
|
|
dd3969e7ec | ||
|
|
36212460d3 | ||
|
|
2ebef43cf6 | ||
|
|
8c26dace6f | ||
|
|
070e190305 | ||
|
|
109189ce01 | ||
|
|
b00e4c2bd9 | ||
|
|
06a3b0b214 | ||
|
|
5486a4e12b | ||
|
|
eb9f401fc1 | ||
|
|
94c56a4c65 | ||
|
|
1b782e902e | ||
|
|
15dfea842c | ||
|
|
054d1325e9 | ||
|
|
0678b5d629 | ||
|
|
be4e9d20a5 | ||
|
|
bc220962e3 | ||
|
|
625934ec0f | ||
|
|
e3745f9087 | ||
|
|
01d50c2539 | ||
|
|
8d69065f52 | ||
|
|
59ec05bcf8 | ||
|
|
fabde8324d | ||
|
|
5cae910665 | ||
|
|
25492a0f04 | ||
|
|
080a20861c | ||
|
|
f96b34224e | ||
|
|
a2ab8c2172 | ||
|
|
ce01054ec3 | ||
|
|
feef882f98 | ||
|
|
eba6db6323 | ||
|
|
6e1ace590a | ||
|
|
7c35f65aac | ||
|
|
4598cafa7d | ||
|
|
6f4189ffc1 | ||
|
|
127cfea8be | ||
|
|
22aa31bcc3 | ||
|
|
e72de13b9e | ||
|
|
342d6edb97 | ||
|
|
e5c9300191 | ||
|
|
d9a3bfead8 | ||
|
|
1933d37371 | ||
|
|
b29638222e | ||
|
|
8ad190cac2 | ||
|
|
281baeecd3 | ||
|
|
df4df4d887 | ||
|
|
2d425ffdd5 | ||
|
|
67dba97e45 | ||
|
|
7290bb5623 | ||
|
|
ff84a9b868 | ||
|
|
605eecc985 | ||
|
|
b6a03dfd32 | ||
|
|
5f2b285bf8 | ||
|
|
ae3b83a4d4 | ||
|
|
dab148891e | ||
|
|
64e2d139fe | ||
|
|
0edd750e50 | ||
|
|
cc2ed41039 | ||
|
|
7c6c2ad42c | ||
|
|
47e67d809c | ||
|
|
92bbf25714 | ||
|
|
95440b41d3 | ||
|
|
f826d914e2 | ||
|
|
77002c65d3 | ||
|
|
d4561cd080 | ||
|
|
9b4256bf05 | ||
|
|
eefa3239c2 | ||
|
|
4f8fe948b9 | ||
|
|
b95e926788 | ||
|
|
26533fe6bc | ||
|
|
29862fdc3a | ||
|
|
9daf7aae8b | ||
|
|
a4b1326f0d | ||
|
|
dbb0f9fa4f | ||
|
|
e9d71db53a | ||
|
|
6c35ce72ba | ||
|
|
f3c84fa798 | ||
|
|
5db2190f2c | ||
|
|
1bff60e5aa | ||
|
|
8fe17d91af | ||
|
|
66768b99f1 | ||
|
|
962b69d950 | ||
|
|
528256932b | ||
|
|
269a522c7d | ||
|
|
5a5a3c6963 | ||
|
|
670c43af27 | ||
|
|
dc27d254f2 | ||
|
|
31f6506c57 | ||
|
|
9fecb0588e | ||
|
|
aafd205c92 | ||
|
|
bd60f5a207 | ||
|
|
725548a285 | ||
|
|
d5cc487d39 | ||
|
|
fa2af21ec8 | ||
|
|
0e075ac385 | ||
|
|
57e7f1b775 | ||
|
|
67d9ce82ac | ||
|
|
12bf87466f | ||
|
|
97c41e1216 | ||
|
|
8ab2675ede | ||
|
|
efc04d65c7 | ||
|
|
b4787552b0 | ||
|
|
e4c49cab9b | ||
|
|
9efd79f376 | ||
|
|
7eb27a49e9 | ||
|
|
a2dcab70f8 | ||
|
|
62328a95c9 | ||
|
|
6e4174f6f9 | ||
|
|
06c94739a5 | ||
|
|
db5eb6225d | ||
|
|
44876dd64e | ||
|
|
86e3b4ba1a | ||
|
|
607d66116a | ||
|
|
716c9f2675 | ||
|
|
9f8f9e62af | ||
|
|
f86fd54cf0 | ||
|
|
3f430a0126 | ||
|
|
f2b54835f2 | ||
|
|
300be005a8 | ||
|
|
aa7bb4607b | ||
|
|
19554a6034 | ||
|
|
ba83ed1538 | ||
|
|
80fdaf1d01 | ||
|
|
4d6e9c8a92 | ||
|
|
af23303cbd | ||
|
|
c67025fad5 | ||
|
|
40051fedc3 | ||
|
|
dcc499aaf0 | ||
|
|
3b21499506 | ||
|
|
5ae590b32d | ||
|
|
f1b3525385 | ||
|
|
68e158dffd | ||
|
|
e1b2b9bf1d | ||
|
|
76588d1319 | ||
|
|
60ae582142 | ||
|
|
a7cf8b1e23 | ||
|
|
5919626c90 | ||
|
|
2333a83baa | ||
|
|
79cfad6fbe | ||
|
|
93ecc3f1f8 | ||
|
|
dbab354157 | ||
|
|
4111882828 | ||
|
|
ca7bb46d5c | ||
|
|
3bca85b418 | ||
|
|
a9399f2e1e | ||
|
|
c79c59f129 | ||
|
|
609c049dcc | ||
|
|
7136b545c1 | ||
|
|
451d80e52d | ||
|
|
ff5726b878 | ||
|
|
76ce1de740 | ||
|
|
4803db51ff | ||
|
|
fb47807918 | ||
|
|
a03c1034f6 | ||
|
|
346a494d7c | ||
|
|
f4c143789a | ||
|
|
a261842785 | ||
|
|
d43a5ee651 | ||
|
|
3d2c8048da | ||
|
|
f9d1b4422e | ||
|
|
6a46cbcc5c | ||
|
|
50d6f38feb | ||
|
|
7994077ab9 | ||
|
|
5646e03dba | ||
|
|
c899d9f42c | ||
|
|
e0bd66c314 | ||
|
|
95ba04606f | ||
|
|
a771a7b9f6 | ||
|
|
fb94736fe8 | ||
|
|
323ef2bdc3 | ||
|
|
a50dbb743e | ||
|
|
25a9b8f208 | ||
|
|
372400b419 | ||
|
|
254f92815b | ||
|
|
cb28250cfc | ||
|
|
4656ced41c | ||
|
|
b2fc9acdc9 | ||
|
|
e07badcc31 | ||
|
|
855fe6869c | ||
|
|
a39137aefe | ||
|
|
db97faec91 | ||
|
|
7cc27aeda9 | ||
|
|
ae66efc63b | ||
|
|
c054020581 | ||
|
|
c7f93a20c4 | ||
|
|
bcf8c5814d | ||
|
|
dff8d0e3f5 | ||
|
|
c1fbc26203 | ||
|
|
349a381df0 | ||
|
|
1018e91dce | ||
|
|
cd6d79cda2 | ||
|
|
5b7b4d9781 | ||
|
|
33b1103e30 | ||
|
|
43c8310244 | ||
|
|
83cb45e982 | ||
|
|
4d0cb75538 | ||
|
|
5fcde03bf1 | ||
|
|
0b72543afd | ||
|
|
bf3df4070f | ||
|
|
9e5f70174e | ||
|
|
a3645c1240 | ||
|
|
be25d92196 | ||
|
|
a01ab69848 | ||
|
|
76197d9be6 | ||
|
|
cfabe05cc6 | ||
|
|
285540e448 | ||
|
|
6e21195890 | ||
|
|
d31321835e | ||
|
|
c2443e49bc | ||
|
|
f59b83fce6 | ||
|
|
f188a86064 | ||
|
|
ee67bcf31e | ||
|
|
8cb4c4edbe | ||
|
|
c93d3e6947 | ||
|
|
8e3d2c80ed | ||
|
|
ba218c1c10 | ||
|
|
4fe8e6d4a1 | ||
|
|
d7a85e69e0 | ||
|
|
72fc110d95 | ||
|
|
d3b464a7c0 | ||
|
|
5fb1e859f7 | ||
|
|
bfb5b33e96 | ||
|
|
d1d3a60b71 | ||
|
|
fa93b0e4f5 | ||
|
|
4622f4e1ee | ||
|
|
a2721778e5 | ||
|
|
368ecfc3a0 | ||
|
|
d5847bf594 | ||
|
|
333855c646 | ||
|
|
900fca88ac | ||
|
|
049dcfa03c | ||
|
|
02a249005f | ||
|
|
81ca24a59c | ||
|
|
d0d90d7848 | ||
|
|
f34a422081 | ||
|
|
ca73ae446c | ||
|
|
248bc1d0fc | ||
|
|
63411b14be | ||
|
|
80783ea646 | ||
|
|
eecdbebc84 | ||
|
|
f250c337f1 | ||
|
|
389d509df0 | ||
|
|
9f27f9f691 | ||
|
|
5c46165a7c | ||
|
|
61c778f640 | ||
|
|
ff3c2007ef | ||
|
|
54e7dbbcb9 | ||
|
|
0d7c7f751d | ||
|
|
7a210304eb | ||
|
|
c058e85615 | ||
|
|
806bb7999d | ||
|
|
867c9b7bec | ||
|
|
5af859bb77 | ||
|
|
2f01f08103 | ||
|
|
152695d0fa | ||
|
|
e7e05cae8d | ||
|
|
47490ada3d | ||
|
|
4a857e63c1 | ||
|
|
eb33e61b31 | ||
|
|
2a3ebf9428 | ||
|
|
20211c0077 | ||
|
|
a6f7d1abce | ||
|
|
cf0b0306d8 | ||
|
|
e261fcf4c6 | ||
|
|
cd816bd236 | ||
|
|
c069460259 | ||
|
|
0fb886cde9 | ||
|
|
72ccf92c39 | ||
|
|
4358e0c81e | ||
|
|
03f1f24e37 | ||
|
|
fbdd37e7f9 | ||
|
|
4db569ca6a | ||
|
|
15ba6a40be | ||
|
|
5d0ee3d7a1 | ||
|
|
10a6d2d915 | ||
|
|
48cd9dc104 | ||
|
|
8067fe28ed | ||
|
|
7bb7140df2 | ||
|
|
7af839a108 | ||
|
|
f348aee7b3 | ||
|
|
b27af387ea | ||
|
|
afd0f21b20 | ||
|
|
c945ca75c3 | ||
|
|
f4b1b48a83 | ||
|
|
df2aaf94b8 | ||
|
|
b6e80c7778 | ||
|
|
d3ffeb9a9a | ||
|
|
697eceff6a | ||
|
|
43d4231432 | ||
|
|
3ac342205d | ||
|
|
ca59c24bd0 | ||
|
|
dec7718878 | ||
|
|
fd73b3d008 | ||
|
|
cad5cc0f5d | ||
|
|
c856be6bca | ||
|
|
5e74a3e6df | ||
|
|
f4e62af000 | ||
|
|
a666c8bd18 | ||
|
|
2498dc7a3a | ||
|
|
5370dcfdae | ||
|
|
5082ea6184 | ||
|
|
a139188eb5 | ||
|
|
1570140f03 | ||
|
|
07258815e9 | ||
|
|
6a5c78c8c8 | ||
|
|
2dcf260d89 | ||
|
|
49426e9fd2 | ||
|
|
c52ae40570 | ||
|
|
7b386b7031 | ||
|
|
16a7e723ea | ||
|
|
a8c473288d | ||
|
|
71783dc978 | ||
|
|
9916ed6f82 | ||
|
|
5fd1cb980a | ||
|
|
e5b4ba8c2b | ||
|
|
9f731abc7f | ||
|
|
cfe2ae8936 | ||
|
|
f8451af825 | ||
|
|
cc699535e5 | ||
|
|
47b2bee3ef | ||
|
|
8d3c4544ff | ||
|
|
6210b8e8f7 | ||
|
|
4a7ea4003b | ||
|
|
a1007c6af2 | ||
|
|
104dff36ea | ||
|
|
70b002de55 | ||
|
|
677dcaa92b | ||
|
|
5b5d8666a7 | ||
|
|
e97f5f4968 | ||
|
|
f11db3c7fc | ||
|
|
12bf557039 | ||
|
|
7d39938474 | ||
|
|
ebd92af8c3 | ||
|
|
c9ee9bedef | ||
|
|
1a33de8b56 | ||
|
|
ed07b7e128 | ||
|
|
d47e8ab4b9 | ||
|
|
cf2b4a36c4 | ||
|
|
1f23c87c19 | ||
|
|
85a7be2414 | ||
|
|
c14f8a9366 | ||
|
|
94222b72b5 | ||
|
|
63034d3261 | ||
|
|
5974d4ba65 | ||
|
|
e9f68f1f4c | ||
|
|
fe6695b7d6 | ||
|
|
237510486a | ||
|
|
cf47a2fba5 | ||
|
|
9c07daaf91 | ||
|
|
19c4156d16 | ||
|
|
527eeeeee6 | ||
|
|
7c9309e50a | ||
|
|
fa07d919d1 | ||
|
|
5fe21c9968 | ||
|
|
be41c1cf11 | ||
|
|
8842991a56 | ||
|
|
20f21d8978 | ||
|
|
dc06aa949b | ||
|
|
5959b15c1c | ||
|
|
27d1a67f8a | ||
|
|
9d25b0da9a | ||
|
|
9f95d12153 | ||
|
|
064360e667 | ||
|
|
77697d14e5 | ||
|
|
aa6ccc05c1 | ||
|
|
87ec3b7fa9 | ||
|
|
018f79da6f | ||
|
|
0d6498a67d | ||
|
|
afd6b6bbae | ||
|
|
ddde9ca71a | ||
|
|
050505ab8f | ||
|
|
66b0e6649b | ||
|
|
38b7a30269 | ||
|
|
7ba066419a | ||
|
|
67a6a9512a | ||
|
|
f76c98b79e | ||
|
|
94f701a826 | ||
|
|
7213c1e028 | ||
|
|
18125877ee | ||
|
|
80310ad07d | ||
|
|
f51218bc15 | ||
|
|
dd4889f727 | ||
|
|
c5a4e79335 | ||
|
|
6a4ecd276e | ||
|
|
7ea452a142 | ||
|
|
2066c35b3f | ||
|
|
345076a78a | ||
|
|
f034fab620 | ||
|
|
e1d4520bfb | ||
|
|
ea39b87a8b | ||
|
|
50ebc8f5f3 | ||
|
|
155f334f57 | ||
|
|
ebe316e4df | ||
|
|
da9f30b455 | ||
|
|
49e5fcb9fb | ||
|
|
e77dc3d9a0 | ||
|
|
f16b8c0405 | ||
|
|
3c6043245e | ||
|
|
8afd8f3b64 | ||
|
|
e62ca2a870 | ||
|
|
44ff462e83 | ||
|
|
6505b241fd | ||
|
|
37353f0ae5 | ||
|
|
1998d63688 | ||
|
|
bc29c6d019 | ||
|
|
f571dc1af8 | ||
|
|
065ad910f1 | ||
|
|
0b02bfa034 | ||
|
|
87a04adb65 | ||
|
|
ec65605af4 | ||
|
|
967e5aa591 | ||
|
|
ef7c843b44 | ||
|
|
e5851b63e0 | ||
|
|
aee2502cb5 | ||
|
|
2426ac36d3 | ||
|
|
d93147abb7 | ||
|
|
e3c7aca76d | ||
|
|
b46bf3cd1c | ||
|
|
86f05f1491 | ||
|
|
5537a586e0 | ||
|
|
e20aa39ea4 | ||
|
|
35a492e4a2 | ||
|
|
251ddf26dc | ||
|
|
d3d2e54911 | ||
|
|
e29af836d0 | ||
|
|
b23635fcff | ||
|
|
8f5ebb1245 | ||
|
|
2ae9457e6e | ||
|
|
8e5bc2f4d3 | ||
|
|
fc535b32b9 | ||
|
|
e27fdbd686 | ||
|
|
32cd33bd19 | ||
|
|
c0f529ea67 | ||
|
|
016875dd52 | ||
|
|
151c19a42a | ||
|
|
12abe75aa0 | ||
|
|
7aaed66455 | ||
|
|
b40fde29a4 | ||
|
|
1e047e53ae | ||
|
|
f153fcb5a5 | ||
|
|
958167b91c | ||
|
|
d29259b134 | ||
|
|
2da4171eab | ||
|
|
9883307a52 | ||
|
|
2efab86d5a | ||
|
|
1a4e47879c | ||
|
|
fbb4aa1c05 | ||
|
|
11aae26cc3 | ||
|
|
edc94e4b0b | ||
|
|
3900726fa8 | ||
|
|
fa13e60527 | ||
|
|
3db4f05a10 | ||
|
|
e871994849 | ||
|
|
637fc62699 | ||
|
|
7ba137f628 | ||
|
|
9ee5ae1fae | ||
|
|
8f95eae423 | ||
|
|
c2fc41990a | ||
|
|
916733ea6a | ||
|
|
0daf46fdbd | ||
|
|
69a52e95d4 | ||
|
|
4192f2e3d1 | ||
|
|
bd196014ec | ||
|
|
fe4efe0d50 | ||
|
|
1a87156e01 | ||
|
|
bd4e20eedf | ||
|
|
be0743b052 | ||
|
|
e61f4eba18 | ||
|
|
5e27fb06f2 | ||
|
|
64440daa21 | ||
|
|
e2a21238da | ||
|
|
6704abade6 | ||
|
|
11eed6abce | ||
|
|
5d61a6a612 | ||
|
|
3c6384832b | ||
|
|
c3f5230597 | ||
|
|
866f469683 | ||
|
|
c4fcfd8744 | ||
|
|
8102540939 | ||
|
|
cba5a85a67 | ||
|
|
5adc6d76d3 | ||
|
|
c14dff3ca7 | ||
|
|
6603c22f31 | ||
|
|
73b1e83839 | ||
|
|
a05a6e6f92 | ||
|
|
e12c3bed90 | ||
|
|
ef02b4ca93 | ||
|
|
1e0d718371 | ||
|
|
49978c5c4f | ||
|
|
ca7c1fd6f3 | ||
|
|
aa64393144 | ||
|
|
21f22c7107 | ||
|
|
af0be976bf | ||
|
|
bd74a925e5 | ||
|
|
a4e33a8b18 | ||
|
|
fc7a64bc5a | ||
|
|
66baeffc0f | ||
|
|
8c1d086689 | ||
|
|
157f9a9cca | ||
|
|
bc0ecd7104 | ||
|
|
ca793e9c05 | ||
|
|
ac602ce700 | ||
|
|
fb66b512fa | ||
|
|
d0af2156c3 | ||
|
|
4387ca78f0 | ||
|
|
83543f937a | ||
|
|
faad548ce3 | ||
|
|
b6f21bcb98 | ||
|
|
dd430afbf8 | ||
|
|
d1130afa5f | ||
|
|
7656b72b17 | ||
|
|
6f43e350ed | ||
|
|
f2baeb194b | ||
|
|
4c7337bfe9 | ||
|
|
2a8200bba8 | ||
|
|
7d97335942 | ||
|
|
3b1b39c082 | ||
|
|
37ba761b1c | ||
|
|
6079e67926 | ||
|
|
fbae51dcea | ||
|
|
4947f11b09 | ||
|
|
bd50aa323d | ||
|
|
72bbd8046a | ||
|
|
e3b3e53f72 | ||
|
|
09e84f188b | ||
|
|
f579f097bb | ||
|
|
12a9c52e51 | ||
|
|
68cf24376c | ||
|
|
9d999852a2 | ||
|
|
95a8c9182b | ||
|
|
b04c6d32ce | ||
|
|
e902163e48 | ||
|
|
9ff9d5a54e | ||
|
|
3661261fe1 | ||
|
|
b8f537199a | ||
|
|
14c9a72039 | ||
|
|
7d027b4d3e | ||
|
|
eeea31b220 | ||
|
|
11504d523c | ||
|
|
3bd0868364 | ||
|
|
8acb9dc697 | ||
|
|
edf2db97e7 | ||
|
|
2f73d2733c | ||
|
|
3bac4caa2b | ||
|
|
6866f2ba37 | ||
|
|
44b38e4988 | ||
|
|
68581b009f | ||
|
|
69aee43fa6 | ||
|
|
ac8bac2496 | ||
|
|
4e0a25a4c0 | ||
|
|
b666e01b9c | ||
|
|
2e62352bc2 | ||
|
|
e360b5d176 | ||
|
|
c453760c71 | ||
|
|
e95685dab1 | ||
|
|
4816dcac19 | ||
|
|
750f4bacd3 | ||
|
|
1b6aaddc45 | ||
|
|
475bffeae6 | ||
|
|
9deb46e363 | ||
|
|
065ed900d4 | ||
|
|
111ab3b9cc | ||
|
|
4200ad44fe | ||
|
|
f1959b1695 | ||
|
|
935863518f | ||
|
|
98f74998d5 | ||
|
|
5ed3a5d049 | ||
|
|
47cd2645dd | ||
|
|
245e21b2b5 | ||
|
|
9201cd79a3 | ||
|
|
f27ccb584c | ||
|
|
1dfe3f973e | ||
|
|
44461d5af2 | ||
|
|
30e177a05b | ||
|
|
af435524cd | ||
|
|
66ce4d1aef | ||
|
|
59d4036594 | ||
|
|
ba3031f996 | ||
|
|
bac5d1a64a | ||
|
|
17328db3b3 | ||
|
|
58f66137a3 | ||
|
|
cdae5bf208 | ||
|
|
06eadf5ebf | ||
|
|
ebb3d958aa | ||
|
|
272e0466da | ||
|
|
4b94e3227b | ||
|
|
3173c7501c | ||
|
|
03d79a878b | ||
|
|
dbbac5a04c | ||
|
|
343dad410e | ||
|
|
f07784e890 | ||
|
|
bbbcb791ed | ||
|
|
740c08ed2f | ||
|
|
ea44693fc8 | ||
|
|
0415dbe28f | ||
|
|
478b567520 | ||
|
|
7c4b6b7bb4 | ||
|
|
e2dd6daa8c | ||
|
|
2ccaa3b9fd | ||
|
|
004a2b1efd | ||
|
|
72ec399ad8 | ||
|
|
9a67e1ac8e | ||
|
|
77063f4cb6 | ||
|
|
5d90f6e533 | ||
|
|
954fe77163 | ||
|
|
6d05b6383c | ||
|
|
0f1f95c7b7 | ||
|
|
41c6f91fce | ||
|
|
7c378c3964 | ||
|
|
2988a849fc | ||
|
|
5e42618e00 | ||
|
|
0aece00c54 | ||
|
|
631a820038 | ||
|
|
60049a0e72 | ||
|
|
a276b84046 | ||
|
|
54bd9a0610 | ||
|
|
2a5a532c00 | ||
|
|
4d94b2db58 | ||
|
|
1de3a48098 | ||
|
|
c291f47b2c | ||
|
|
3c05833249 | ||
|
|
d1224d209b | ||
|
|
0af3ae2d8b | ||
|
|
79c80b06b8 | ||
|
|
33f6ce671f | ||
|
|
0901e7855f | ||
|
|
4250f552a6 | ||
|
|
1f6af2a9f8 | ||
|
|
fa33530870 | ||
|
|
15bd333e10 | ||
|
|
3f3ec8ef44 | ||
|
|
87de66d9d8 | ||
|
|
2c2c5c720d | ||
|
|
480c89858e | ||
|
|
4b8b9135f1 | ||
|
|
5a6db38d62 | ||
|
|
3a310e842f | ||
|
|
c4badfe836 | ||
|
|
a72fc329eb | ||
|
|
2009da62f2 | ||
|
|
6f6d4aa02c | ||
|
|
8063ce197f | ||
|
|
9706066791 | ||
|
|
4afd0107ef | ||
|
|
24024dac7f | ||
|
|
9b35fe819f | ||
|
|
46b74dd3cb | ||
|
|
68f17b2b30 | ||
|
|
e4a1fe3919 | ||
|
|
86402b4e0f | ||
|
|
bec35dad2a | ||
|
|
dfc5ccfa97 | ||
|
|
4a70fed815 | ||
|
|
f94b2b4eeb | ||
|
|
d0949e3747 | ||
|
|
9585647a25 | ||
|
|
e4dbf247b6 | ||
|
|
006c78f378 | ||
|
|
511ece7ceb | ||
|
|
9abbaae7cd | ||
|
|
d6b94c5eb2 | ||
|
|
07ea8daa86 | ||
|
|
3142b2feac | ||
|
|
4686e163f2 | ||
|
|
ba424f37a9 | ||
|
|
3beabdc8e4 | ||
|
|
ba584da163 | ||
|
|
7f64fb590c | ||
|
|
35f2d96c0d | ||
|
|
9afe2053c9 | ||
|
|
5ae584c0b0 | ||
|
|
1440b7ebae | ||
|
|
61c8482b20 | ||
|
|
95cd131ea0 | ||
|
|
d08059309f | ||
|
|
eec4237a32 | ||
|
|
443b322262 | ||
|
|
36387ece6b | ||
|
|
6f65e36cc4 | ||
|
|
d99d2f8416 | ||
|
|
049f63824c | ||
|
|
015045471e | ||
|
|
b204b718cc | ||
|
|
41155a5722 | ||
|
|
e0a850947f | ||
|
|
0b47c57ad6 | ||
|
|
6ba983559d | ||
|
|
6c519b5c6c | ||
|
|
f371dd5da8 | ||
|
|
1ecf96fcc4 | ||
|
|
5ef569df5b | ||
|
|
9b9c4686f0 | ||
|
|
3abb956371 | ||
|
|
dcecae1a49 | ||
|
|
ae80f31270 | ||
|
|
7e7293d745 | ||
|
|
5acc8020b4 | ||
|
|
ff66b8e7d8 | ||
|
|
09a836e59c | ||
|
|
0776112c53 | ||
|
|
ccd21a65ed | ||
|
|
4d21c10199 | ||
|
|
e7cfa8d5e1 | ||
|
|
94cee4a4c2 | ||
|
|
c9e839e2ca | ||
|
|
668add258f | ||
|
|
0e309454f6 | ||
|
|
093dec7370 | ||
|
|
989af02582 | ||
|
|
8442d3e956 | ||
|
|
645ff636fe | ||
|
|
30a338460a | ||
|
|
51f941a0d8 | ||
|
|
5bda44d7f9 | ||
|
|
a6e7719bbe |
No files matched your search
@@ -58,6 +58,8 @@ grub-emu.exe
|
|||||||
grub-emu-lite.exe
|
grub-emu-lite.exe
|
||||||
grub_emu_init.c
|
grub_emu_init.c
|
||||||
grub_emu_init.h
|
grub_emu_init.h
|
||||||
|
/grub-file
|
||||||
|
/grub-file.exe
|
||||||
grub-fstest
|
grub-fstest
|
||||||
grub-fstest.exe
|
grub-fstest.exe
|
||||||
grub_fstest_init.c
|
grub_fstest_init.c
|
||||||
@@ -66,6 +68,8 @@ grub_func_test
|
|||||||
grub-install
|
grub-install
|
||||||
grub-install.exe
|
grub-install.exe
|
||||||
grub-kbdcomp
|
grub-kbdcomp
|
||||||
|
/grub-macbless
|
||||||
|
/grub-macbless.exe
|
||||||
grub-macho2img
|
grub-macho2img
|
||||||
/grub-menulst2cfg
|
/grub-menulst2cfg
|
||||||
/grub-menulst2cfg.exe
|
/grub-menulst2cfg.exe
|
||||||
@@ -120,6 +124,8 @@ grub-shell
|
|||||||
grub-shell-tester
|
grub-shell-tester
|
||||||
grub-sparc64-setup
|
grub-sparc64-setup
|
||||||
grub-sparc64-setup.exe
|
grub-sparc64-setup.exe
|
||||||
|
/grub-syslinux2cfg
|
||||||
|
/grub-syslinux2cfg.exe
|
||||||
gzcompress_test
|
gzcompress_test
|
||||||
hddboot_test
|
hddboot_test
|
||||||
help_test
|
help_test
|
||||||
@@ -194,6 +200,7 @@ grub-core/modinfo.sh
|
|||||||
grub-core/*.module
|
grub-core/*.module
|
||||||
grub-core/*.module.exe
|
grub-core/*.module.exe
|
||||||
grub-core/*.pp
|
grub-core/*.pp
|
||||||
|
grub-core/kernel.img.bin
|
||||||
util/bash-completion.d/grub
|
util/bash-completion.d/grub
|
||||||
grub-core/gnulib/alloca.h
|
grub-core/gnulib/alloca.h
|
||||||
grub-core/gnulib/arg-nonnull.h
|
grub-core/gnulib/arg-nonnull.h
|
||||||
@@ -239,3 +246,4 @@ build-aux/test-driver
|
|||||||
/garbage-gen
|
/garbage-gen
|
||||||
/garbage-gen.exe
|
/garbage-gen.exe
|
||||||
/grub-fs-tester
|
/grub-fs-tester
|
||||||
|
grub-core/build-grub-module-verifier
|
||||||
+887
-5
@@ -1,3 +1,889 @@
|
|||||||
|
2015-01-23 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* tests/file_filter/file: Really add missing file.
|
||||||
|
|
||||||
|
2015-01-23 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/xen/xendisk.c: Accept hdX as disk names on Xen to
|
||||||
|
allow legacy menu.lst processing.
|
||||||
|
|
||||||
|
2015-01-22 Felix Janda <felix.janda@posteo.de>
|
||||||
|
|
||||||
|
Remove direct _llseek code and require long filesystem libc.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Remove potential division by 0 in gfxmenu.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/normal/menu_text.c (grub_menu_init_page): Avoid
|
||||||
|
returning 0 geometry to avoid divisions by 0.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/unix/cputime.c (grub_util_get_cpu_time_ms): Cache
|
||||||
|
sc_clk_tck and check it for sanity.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/efi/mm.c (grub_efi_get_memory_map): Never return a
|
||||||
|
descriptor_size==0 to avoid potential divisions by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/haiku/getroot.c (grub_util_find_partition_start_os):
|
||||||
|
Avoid division by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/generic/rtc_get_time_ms.c (grub_rtc_get_time_ms): Avoid
|
||||||
|
division by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/loader/i386/xnu.c (guessfsb): Avoid division by 0.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/i386/tsc.c (calibrate_tsc): Ensure that
|
||||||
|
no division by 0 occurs.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/misc.h (grub_div_roundup): Remove as it's unused.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/gfxterm.c: Avoid division by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Avoid division by zero in serial.
|
||||||
|
|
||||||
|
* grub-core/term/serial.c (grub_cmd_serial): Ensure speed is not 0.
|
||||||
|
* grub-core/term/ns8250.c (serial_get_divisor): Exit if speed is 0.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/video/readers/jpeg.c: Avoid sivision by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/diskfilter.c: Validate volumes to avoid division
|
||||||
|
by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/term.h: Avoid returining 0-sized terminal
|
||||||
|
as it may lead to division by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/zfs.c: Avoid divisions by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/btrfs.c: Avoid divisions by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/pbkdf2.c (grub_crypto_pbkdf2): Check that hash len is not 0.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/linux/blocklist.c (grub_install_get_blocklist): Check
|
||||||
|
blocksize validity.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/i386/pc/biosdisk.c: Check disk size sanity.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ieee1275/nand.c (grub_nand_open): Check block size
|
||||||
|
validity.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/dmraid_nvidia.c (grub_dmraid_nv_detect): Do not
|
||||||
|
divide by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/hfs.c (grub_hfs_mount): Additional filesystem
|
||||||
|
sanity checks.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/minix.c: Additional filesystem
|
||||||
|
sanity checks.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/ext2.c (grub_ext2_mount): Additional
|
||||||
|
checks for superblock validity.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/ufs.c (grub_ufs_mount): Check
|
||||||
|
that sblock.ino_per_group is not 0.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Reject NILFS2 superblocks with over 1GiB blocks.
|
||||||
|
|
||||||
|
* grub-core/fs/nilfs2.c (grub_nilfs2_valid_sb): Check that
|
||||||
|
block size is <= 1GiB.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ata.c (grub_ata_setaddress): Check that geometry
|
||||||
|
is sane when using CHS addressing.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/AFSplitter.c (AF_merge): Check that mdlen is not 0.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/commands/i386/pc/play.c (grub_cmd_play): Avoid
|
||||||
|
division by zero.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/bus/usb/usbtrans.c (grub_usb_bulk_maxpacket): Avoid
|
||||||
|
potentially returning 0.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/minix.c (grub_minix_read_file): Avoid reading past
|
||||||
|
the end of file.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/fshelp.c (grub_fshelp_read_file): Don't attempt to read
|
||||||
|
past the end of file.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/script/lexer.c (grub_script_lexer_yywrap): Update len
|
||||||
|
synchronously with line.
|
||||||
|
|
||||||
|
2015-01-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Replace explicit sizeof divisions by ARRAY_SIZE.
|
||||||
|
|
||||||
|
2015-01-19 Kris Moore <kris@pcbsd.org>
|
||||||
|
|
||||||
|
* grub-core/disk/geli.c: Support GELI v6 and v7.
|
||||||
|
|
||||||
|
2014-12-09 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/serial.c (grub_cmd_serial): Fix --rtscts
|
||||||
|
option processing.
|
||||||
|
|
||||||
|
2014-12-07 David Kozub <zub.272@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/arm/misc.S: fix unaligned 64bit local variable
|
||||||
|
in __aeabi_uidivmod
|
||||||
|
Fixes Savannah bug #43632.
|
||||||
|
|
||||||
|
2014-12-07 Peter Nelson <peterdn>
|
||||||
|
|
||||||
|
* grub-core/fs/ext2.c (grub_ext2_read_block): Support large sparse
|
||||||
|
chunks.
|
||||||
|
|
||||||
|
2014-12-07 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkconfig_lib.in (version_test_gt): Remove redundant
|
||||||
|
non-portable '-n' echo option.
|
||||||
|
* util/grub.d/10_kfreebsd.in: Change how list is built to avoid
|
||||||
|
non-portable 'echo -n.
|
||||||
|
* util/grub.d/10_linux.in: Likewise (closes 43668).
|
||||||
|
* util/grub.d/20_linux_xen.in: Likewise.
|
||||||
|
* util/grub.d/30_os-prober.in: Print spaces directly to avoid
|
||||||
|
non-portable 'echo -n'.
|
||||||
|
|
||||||
|
2014-12-07 Curtis Larsen <larsen@dixie.edu>
|
||||||
|
|
||||||
|
* grub-core/net/tcp.c (grub_net_recv_tcp_packet): Fix double
|
||||||
|
free when multiple empty segments were received (closes 42765).
|
||||||
|
|
||||||
|
2014-12-05 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* tests/util/grub-shell.in: Support --files also for netboot.
|
||||||
|
* tests/file_filter_test.in: New file with file filters tests.
|
||||||
|
* Makefile.util.def: Add file_filter_test.
|
||||||
|
* conf/Makefile.extra-dist: ... and here.
|
||||||
|
* tests/file_filter/file.gz: Test file for file_filter_test.
|
||||||
|
* tests/file_filter/file.gz.sig: Likewise.
|
||||||
|
* tests/file_filter/file.lzop: Likewise.
|
||||||
|
* tests/file_filter/file.lzop.sig: Likewise.
|
||||||
|
* tests/file_filter/file.xz: Likewise.
|
||||||
|
* tests/file_filter/file.xz.sig: Likewise.
|
||||||
|
* tests/file_filter/keys: Likewise.
|
||||||
|
* tests/file_filter/keys.pub: Likewise.
|
||||||
|
* tests/file_filter/test.cfg: Likewise.
|
||||||
|
* grub-core/commands/verify.c: Fix memory corruption doing
|
||||||
|
signature check for network files (closes 43601).
|
||||||
|
|
||||||
|
2014-12-01 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/loader/i386/xen_fileXX.c (grub_xen_get_infoXX): Fix
|
||||||
|
memory leak (CID 73645, 73782).
|
||||||
|
* grub-core/fs/zfs/zfsinfo.c (print_vdev_info): Fix memory leak
|
||||||
|
(CID 73635).
|
||||||
|
|
||||||
|
2014-11-30 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/syslinux_parse.c (free_menu): Do not free
|
||||||
|
inline array (CID 73610).
|
||||||
|
|
||||||
|
2014-11-28 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/io/lzopio.c (test_header): Fix double free (CID 73665)
|
||||||
|
* grub-core/disk/geli.c (configure_ciphers): Fix memory leaks
|
||||||
|
(Coverity CID 73813, 73710)
|
||||||
|
* grub-core/disk/luks.c (configure_ciphers): Fix memory leaks
|
||||||
|
and use after free (Coverity CID 73813, 73710, 73730)
|
||||||
|
* grub-core/disk/luks.c (luks_recover_key): Fix memory leak (Coverity
|
||||||
|
CID 73854)
|
||||||
|
* util/grub-install-common.c (grub_install_get_target): Check return
|
||||||
|
value of grub_util_fd_read (Coverity CID 73819).
|
||||||
|
* util/grub-mkstandalone.c (add_tar_file): Fix out of bound access
|
||||||
|
to hd.magic (Coverity CID 73587, 73888, bug 43690).
|
||||||
|
|
||||||
|
2014-11-20 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* tests/util/grub-fs-tester.in: Consistently print output
|
||||||
|
of grub ls if test fails.
|
||||||
|
|
||||||
|
2014-11-07 Leif Lindholm <leif.lindholm@linaro.org>
|
||||||
|
|
||||||
|
* grub-core/kern/efi/init.c: check value of *path before
|
||||||
|
dereferencing.
|
||||||
|
|
||||||
|
2014-11-03 Michael Chang <mchang@suse.com>
|
||||||
|
|
||||||
|
* grub-core/net/icmp6.c (grub_net_recv_icmp6_packet): Fix size
|
||||||
|
of neighbor solicitation packet in grub_netbuff_pull.
|
||||||
|
|
||||||
|
2014-10-14 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/loader/arm/linux.c: Use full initializer for initrd_ctx to
|
||||||
|
avoid fatal warnings with older gcc (probably before 4.7).
|
||||||
|
* grub-core/loader/arm64/linux.c: Likewise.
|
||||||
|
* grub-core/loader/i386/linux.c: Likewise.
|
||||||
|
* grub-core/loader/i386/pc/linux.c: Likewise.
|
||||||
|
* grub-core/loader/ia64/efi/linux.c: Likewise.
|
||||||
|
* grub-core/loader/mips/linux.c: Likewise.
|
||||||
|
* grub-core/loader/powerpc/ieee1275/linux.c: Likewise.
|
||||||
|
* grub-core/loader/sparc64/ieee1275/linux.c: Likewise.
|
||||||
|
|
||||||
|
2014-09-25 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
Fix in-tree --platform=none
|
||||||
|
|
||||||
|
* configure.ac: Only remove include/grub/cpu and
|
||||||
|
include/grub/machine in the --platform=none case, not all of
|
||||||
|
include/grub.
|
||||||
|
|
||||||
|
2014-09-23 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
Add a new "none" platform that only builds utilities
|
||||||
|
|
||||||
|
* configure.ac: Add "none" platform. Default to it for unsupported
|
||||||
|
CPUs rather than stopping with a fatal error. Don't downgrade
|
||||||
|
x86_64-none to i386. Define COND_real_platform Automake conditional
|
||||||
|
if the platform is anything other than "none". Don't do any include
|
||||||
|
directory linking for "none".
|
||||||
|
* Makefile.am: Skip building grub-core and all bootcheck targets if
|
||||||
|
!COND_real_platform.
|
||||||
|
* include/grub/time.h: Don't include <grub/cpu/time.h> if GRUB_UTIL
|
||||||
|
is defined.
|
||||||
|
|
||||||
|
2014-09-22 Andrei Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
Use grub_cpu_to_XXX_compile_time for constants.
|
||||||
|
|
||||||
|
2014-09-21 Valentin Dornauer <valentin@unimplemented.org>
|
||||||
|
|
||||||
|
The AML parser implements only a small subset of possible AML
|
||||||
|
opcodes. On the Fujitsu Lifebook E744 this and another bug in
|
||||||
|
the parser (incorrect handling of TermArg data types) would lead
|
||||||
|
to the laptop not turning off (_S5 not found).
|
||||||
|
|
||||||
|
* grub-core/commands/acpihalt.c: Support OpAlias in the AML parser;
|
||||||
|
in skip_ext_op(), handle some Type2Opcodes more correctly (TermArgs
|
||||||
|
aren't always simply strings!); Add function to skip TermArgs
|
||||||
|
* include/grub/acpi.h: Add new opcodes
|
||||||
|
|
||||||
|
2014-09-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/normal/main.c: Don't drop to rescue console in
|
||||||
|
case of password-protected prompt and no menu entries.
|
||||||
|
|
||||||
|
2014-09-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/commands/keylayouts.c: Ignore unknown keys.
|
||||||
|
|
||||||
|
2014-09-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/gmodule.pl.in: Accept newer binutils which output
|
||||||
|
empty column rather than 0x0.
|
||||||
|
|
||||||
|
2014-09-21 Michael Chang <mchang@suse.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/unix/config.c: Remove extraneous comma.
|
||||||
|
|
||||||
|
2014-09-21 Peter Jones <pjones@redhat.com>
|
||||||
|
|
||||||
|
* grub-core/loader/arm/linux.c: Initialized initrd_ctx so
|
||||||
|
we don't free a random pointer from the stack.
|
||||||
|
* grub-core/loader/arm64/linux.c: Likewise.
|
||||||
|
* grub-core/loader/i386/linux.c: Likewise.
|
||||||
|
* grub-core/loader/i386/pc/linux.c: Likewise.
|
||||||
|
* grub-core/loader/ia64/efi/linux.c: Likewise.
|
||||||
|
* grub-core/loader/mips/linux.c: Likewise.
|
||||||
|
* grub-core/loader/powerpc/ieee1275/linux.c: Likewise.
|
||||||
|
* grub-core/loader/sparc64/ieee1275/linux.c: Likewise.
|
||||||
|
|
||||||
|
2014-09-15 Khem Raj <raj.khem@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/emu/hostfs.c: use _DEFAULT_SOURCE in addition to
|
||||||
|
_BSD_SOURCE to avoid warnings under glibc 2.20+.
|
||||||
|
|
||||||
|
2014-09-08 Michael Chang <mchang@suse.com>
|
||||||
|
|
||||||
|
* grub-core/fs/btrfs.c (grub_btrfs_extent_read): Fix extent size
|
||||||
|
check; comparing &data->extent against addresses in the region it
|
||||||
|
points to is unpredictable.
|
||||||
|
|
||||||
|
2014-09-07 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
Support grub-emu on x32 (ILP32 but with x86-64 instruction set)
|
||||||
|
|
||||||
|
* configure.ac: Remove -m64 from checks for -mcmodel=large and
|
||||||
|
-mno-red-zone. These are always either unnecessary (x86_64-emu) or
|
||||||
|
already in TARGET_CFLAGS at this point, and they produce incorrect
|
||||||
|
results when building for x32.
|
||||||
|
* grub-core/kern/x86_64/dl.c (grub_arch_dl_relocate_symbols): Cast
|
||||||
|
pointers to Elf64_Xword via grub_addr_t, in order to work on x32.
|
||||||
|
* include/grub/x86_64/types.h (GRUB_TARGET_SIZEOF_VOID_P,
|
||||||
|
GRUB_TARGET_SIZEOF_LONG): Define to 4 on x32.
|
||||||
|
|
||||||
|
2014-09-07 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* configure.ac: Remove several unnecessary semicolons.
|
||||||
|
|
||||||
|
2014-08-25 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* grub-core/kern/mips/arc/init.c (grub_machine_get_bootlocation):
|
||||||
|
Initialise pend to pacify GCC.
|
||||||
|
|
||||||
|
2014-08-14 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkconfig.in: Fix typo (gettext_print instead of
|
||||||
|
gettext_printf).
|
||||||
|
|
||||||
|
2014-08-13 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/at_keyboard.c: Retry probing keyboard if
|
||||||
|
scancode setup failed.
|
||||||
|
|
||||||
|
2014-08-10 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/disk_common.c: Clump disk size to 1EiB.
|
||||||
|
|
||||||
|
2014-08-10 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_rw): Add
|
||||||
|
safety to avoid triggerring VirtualBox bug.
|
||||||
|
|
||||||
|
2014-08-10 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/cbfs.c: Don't probe disks of unknow size.
|
||||||
|
|
||||||
|
Fixes hang on virtualbox.
|
||||||
|
|
||||||
|
2014-07-08 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub.d/10_hurd.in: Make kernel list progression not fail on
|
||||||
|
kernels whose paths contain regex metacharacters.
|
||||||
|
* util/grub.d/10_kfreebsd.in: Likewise.
|
||||||
|
* util/grub.d/10_linux.in: Likewise.
|
||||||
|
* util/grub.d/20_linux_xen.in: Likewise.
|
||||||
|
|
||||||
|
Reported by: Heimo Stranner.
|
||||||
|
|
||||||
|
2014-06-26 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* docs/grub-dev.texi (Finding your way around): The build system no
|
||||||
|
longer uses AutoGen directly.
|
||||||
|
|
||||||
|
2014-06-21 Роман Пехов <roman_pekhov>
|
||||||
|
|
||||||
|
* grub-core/commands/loadenv.c (check_blocklists): Fix overlap check.
|
||||||
|
|
||||||
|
2014-06-21 Glenn Washburn <development@efficientek.com>
|
||||||
|
|
||||||
|
* util/grub-install.c: Fix handling of --disk-module.
|
||||||
|
|
||||||
|
2014-06-21 Stephane Rochoy <sheda>
|
||||||
|
|
||||||
|
* grub-core/loader/i386/bsd.c (grub_netbsd_boot): Pass pointer to
|
||||||
|
EFI system table.
|
||||||
|
|
||||||
|
2014-06-21 Stephane Rochoy <sheda>
|
||||||
|
|
||||||
|
* grub-core/commands/efi/lsefisystab.c (grub_cmd_lsefisystab): Show
|
||||||
|
EFI system table physical address.
|
||||||
|
|
||||||
|
2014-06-21 Trevor Woerner <trevor.woerner@linaro.org>
|
||||||
|
|
||||||
|
* util/grub-gen-asciih.c (add_glyph): Fix uninitialised variable.
|
||||||
|
|
||||||
|
2014-06-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/commands/verify.c (grub_pubkey_open): Trust procfs.
|
||||||
|
|
||||||
|
2014-06-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/commands/verify.c (grub_pubkey_open): Fix memdisk
|
||||||
|
check.
|
||||||
|
|
||||||
|
2014-04-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/misc.c (__bzero): Don't compile in GRUB_UTIL.
|
||||||
|
|
||||||
|
Reported by: Yves Blusseau <blusseau@zetam.org>.
|
||||||
|
|
||||||
|
2014-04-20 Piotr Krysiuk <piotras@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/i386/relocator.c: Allow loading old kernels by placing
|
||||||
|
GDT in conventional memory.
|
||||||
|
|
||||||
|
2014-04-10 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub.d/30_os-prober.in: Tolerate devices with no filesystem
|
||||||
|
UUID. Other parts of grub-mkconfig tolerate these, they were
|
||||||
|
previously allowed here up to commit
|
||||||
|
55e706c918922def17f5012c23cfe88c4c645208, and they can arise in
|
||||||
|
practice when the system has active LVM snapshots.
|
||||||
|
Fixes Ubuntu bug #1287436.
|
||||||
|
|
||||||
|
2014-04-10 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* grub-core/disk/lvm.c (grub_lvm_detect): Search for
|
||||||
|
"logical_volumes" block a little more accurately.
|
||||||
|
|
||||||
|
2014-04-06 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/syslinux_parse.c: Fix timeout quoting.
|
||||||
|
|
||||||
|
2014-04-04 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/libgcc.h: Remove ctzsi2 and ctzdi2. They're no longer
|
||||||
|
pulled from libgcc.
|
||||||
|
|
||||||
|
2014-04-04 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Replace few instances of memcmp/memcpy in the code that should be
|
||||||
|
grub_memcmp/grub_memcpy.
|
||||||
|
|
||||||
|
2014-04-03 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Support NVMe
|
||||||
|
device names.
|
||||||
|
|
||||||
|
2014-03-31 Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
btrfs: fix get_root key comparison failures due to endianness
|
||||||
|
|
||||||
|
* grub-core/fs/btrfs.c (get_root): Convert
|
||||||
|
GRUB_BTRFS_ROOT_VOL_OBJECTID to little-endian.
|
||||||
|
|
||||||
|
2014-03-31 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
Fix partmap, cryptodisk, and abstraction handling in grub-mkconfig.
|
||||||
|
|
||||||
|
Commit 588744d0dc655177d5883bdcb8f72ff5160109ed caused grub-mkconfig
|
||||||
|
no longer to be forgiving of trailing spaces on grub-probe output
|
||||||
|
lines, which among other things means that util/grub.d/10_linux.in
|
||||||
|
no longer detects LVM. To fix this, make grub-probe's output
|
||||||
|
delimiting more consistent. As a bonus, this improves the coverage
|
||||||
|
of the -0 option.
|
||||||
|
|
||||||
|
Fixes Debian bug #735935.
|
||||||
|
|
||||||
|
* grub-core/disk/cryptodisk.c
|
||||||
|
(grub_util_cryptodisk_get_abstraction): Add a user-data argument.
|
||||||
|
* grub-core/disk/diskfilter.c (grub_diskfilter_get_partmap):
|
||||||
|
Likewise.
|
||||||
|
* include/grub/cryptodisk.h (grub_util_cryptodisk_get_abstraction):
|
||||||
|
Update prototype.
|
||||||
|
* include/grub/diskfilter.h (grub_diskfilter_get_partmap): Likewise.
|
||||||
|
* util/grub-install.c (push_partmap_module, push_cryptodisk_module,
|
||||||
|
probe_mods): Adjust for extra user-data arguments.
|
||||||
|
* util/grub-probe.c (do_print, probe_partmap, probe_cryptodisk_uuid,
|
||||||
|
probe_abstraction): Use configured delimiter. Update callers.
|
||||||
|
|
||||||
|
2014-03-31 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub-probe,c (options): Make -0 work again (broken by
|
||||||
|
conversion to argp).
|
||||||
|
(main): Simplify logic.
|
||||||
|
|
||||||
|
2014-03-26 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/relocator.c: Fix the case when end of leftover is used.
|
||||||
|
|
||||||
|
2014-03-26 Fu Wei <fu.wei@linaro.org>
|
||||||
|
|
||||||
|
* grub-core/loader/arm64/linux.c: Remove redundant "0x".
|
||||||
|
|
||||||
|
2014-02-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields.
|
||||||
|
* grub-core/loader/i386/bsd.c (grub_cmd_openbsd): Fill addr field.
|
||||||
|
|
||||||
|
Suggested by: Markus Müller.
|
||||||
|
|
||||||
|
2014-02-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/i386/pc/mmap.c: Fallback to EISA memory map
|
||||||
|
if E820 failed to return any regions.
|
||||||
|
|
||||||
|
2014-02-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/mmap/i386/uppermem.c (lower_hook) [COREBOOT]: Ignore low
|
||||||
|
tables for low memory calculations.
|
||||||
|
|
||||||
|
2014-02-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): Limit
|
||||||
|
location to 640K.
|
||||||
|
|
||||||
|
2014-02-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/i386/coreboot/mmap.c: Filter out 0xa0000-0x100000
|
||||||
|
region.
|
||||||
|
|
||||||
|
2014-02-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ahci.c: Ignore NPORTS field and rely on PI
|
||||||
|
exclusively.
|
||||||
|
|
||||||
|
2014-02-04 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||||
|
|
||||||
|
Add bootpath parser for open firmware.
|
||||||
|
|
||||||
|
It enables net boot even when there is no bootp/dhcp server.
|
||||||
|
|
||||||
|
* grub-core/net/drivers/ieee1275/ofnet.c: Add grub_ieee1275_parse_bootpath
|
||||||
|
and call it at grub_ieee1275_net_config_real.
|
||||||
|
* grub-core/kern/ieee1275/init.c: Add bootpath to
|
||||||
|
grub_ieee1275_net_config.
|
||||||
|
* include/grub/ieee1275/ieee1275.h: Likewise.
|
||||||
|
|
||||||
|
|
||||||
|
2014-02-04 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||||
|
|
||||||
|
Add grub_env_set_net_property function.
|
||||||
|
|
||||||
|
* grub-core/net/bootp.c: Remove set_env_limn_ro.
|
||||||
|
* grub-core/net/net.c: Add grub_env_set_net_property.
|
||||||
|
* include/grub/net.h: Likewise.
|
||||||
|
|
||||||
|
2014-02-03 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkrescue.c: Build fix for argp.h with older gcc.
|
||||||
|
|
||||||
|
2014-02-03 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkfont.c: Build fix for argp.h with older gcc.
|
||||||
|
|
||||||
|
2014-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ahci.c: Increase timeout. Some SSDs take up to
|
||||||
|
7 seconds to recover if last poweroff was bad.
|
||||||
|
|
||||||
|
2014-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ahci.c: Properly handle transactions with no
|
||||||
|
transferred data.
|
||||||
|
|
||||||
|
2014-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ahci.c: Add safety cleanups.
|
||||||
|
|
||||||
|
2014-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ahci.c: Allocate and clean space for all possible 32
|
||||||
|
slots to avoid pointing to uninited area.
|
||||||
|
|
||||||
|
2014-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/ahci.c: Do not enable I/O decoding and keep
|
||||||
|
enabling busmaster for the end.
|
||||||
|
|
||||||
|
2014-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkfont.c: Downgrade warnings about unhandled features
|
||||||
|
to debug.
|
||||||
|
|
||||||
|
2014-01-29 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/at_keyboard.c: Tolerate missing keyboard.
|
||||||
|
|
||||||
|
2014-01-29 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||||
|
|
||||||
|
* .gitignore: add missing files and .exe variants.
|
||||||
|
|
||||||
|
2014-01-26 Mike Gilbert <floppym@gentoo.org>
|
||||||
|
|
||||||
|
grub-install: support for partitioned partx loop devices.
|
||||||
|
|
||||||
|
* grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Detect
|
||||||
|
/dev/loopX as being the parent of /dev/loopXpY.
|
||||||
|
|
||||||
|
2014-01-26 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/serial.c (grub_serial_register): Fix invalid free.
|
||||||
|
Ensure that pointers are inited to NULL and that pointers are not
|
||||||
|
accessed after free.
|
||||||
|
|
||||||
|
2014-01-25 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/crypto.h: Replace __attribute__ ((format (printf)) with
|
||||||
|
__attribute__ ((format (__printf__)) to fix compilation under MinGW-w64.
|
||||||
|
* include/grub/emu/misc.h: ... and here.
|
||||||
|
* include/grub/err.h: ... and here.
|
||||||
|
* util/import_gcry.py: ... and here (in files g10lib.h).
|
||||||
|
|
||||||
|
2014-01-25 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkimage.c: Make prefix argument mandatory.
|
||||||
|
|
||||||
|
2014-01-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Fix several translatable strings.
|
||||||
|
|
||||||
|
Suggested by: D. Prévot.
|
||||||
|
|
||||||
|
2014-01-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-install.c: List available targets.
|
||||||
|
|
||||||
|
2014-01-23 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub-install.c (write_to_disk): Add an info message.
|
||||||
|
|
||||||
|
2014-01-21 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* Makefile.am: Allow adding extra files to generated Windows ZIP
|
||||||
|
archive by setting GRUB_WINDOWS_EXTRA_DIST.
|
||||||
|
|
||||||
|
2014-01-21 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Look for DejaVuSans also in /usr/share/fonts/truetype.
|
||||||
|
Show detected font path in summary.
|
||||||
|
|
||||||
|
2014-01-21 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||||
|
|
||||||
|
* grub-core/net/arp.c (grub_net_arp_send_request): Increase network try
|
||||||
|
interval gradually.
|
||||||
|
* grub-core/net/icmp6.c (grub_net_icmp6_send_request): Likewise.
|
||||||
|
* grub-core/net/net.c (grub_net_fs_read_real): Likewise.
|
||||||
|
* grub-core/net/tftp.c (tftp_open): Likewise.
|
||||||
|
* include/grub/net.h (GRUB_NET_INTERVAL_ADDITION): New define.
|
||||||
|
|
||||||
|
2014-01-21 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||||
|
|
||||||
|
* grub-core/net/net.c (receive_packets): Change stop condition to avoid
|
||||||
|
infinite loops.
|
||||||
|
|
||||||
|
In net/net.c there is a while (1) that only exits if there is a stop
|
||||||
|
condition and more then 10 packages or if there is no package received.
|
||||||
|
|
||||||
|
If GRUB is idle and enter in this loop, the only condition to leave is
|
||||||
|
if it doesn't have incoming packages. In a network with heavy traffic
|
||||||
|
this never happens.
|
||||||
|
|
||||||
|
2014-01-19 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Ignore
|
||||||
|
EPERM when modifying kern.geom.debugflags. It is only a problem for
|
||||||
|
such things as installing GRUB to the MBR, in which case there'll be
|
||||||
|
an error later anyway, not for opening files during tests.
|
||||||
|
|
||||||
|
2014-01-18 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/Makefile.am: Build grub_emu_init.[ch] from MODULE_FILES
|
||||||
|
instead of MOD_FILES.
|
||||||
|
* grub-core/genemuinit.sh: Simplify stripping of suffix so it works
|
||||||
|
both with and without .exe.
|
||||||
|
* grub-core/genemuinitheader.sh: Same.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-install.c: Fix a typo.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/normal/main.c (read_config_file): Buffer config file.
|
||||||
|
Reduces boot time.
|
||||||
|
|
||||||
|
2014-01-18 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* acinclude.m4 (grub_CHECK_LINK_DIR): Check that we can also remove
|
||||||
|
symbolic link to directory. It fails in Msys shell on Windows 2003.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* Makefile.am (default_payload.elf): Add modules
|
||||||
|
multiboot cbmemc linux16 gzio echo help.
|
||||||
|
|
||||||
|
2014-01-18 Mike Gilbert <floppym@gentoo.org>
|
||||||
|
|
||||||
|
* Makefile.util.def: Link grub-ofpathname with zfs libs.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/commands/macbless.c: Rename FILE and DIR to avoid
|
||||||
|
conflicts.
|
||||||
|
|
||||||
|
Reported by: Andrey Borzenkov.
|
||||||
|
|
||||||
|
2014-01-18 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/misc.h: Move macros for compiler features to ...
|
||||||
|
* include/grub/compiler.h: ... new file.
|
||||||
|
* include/grub/list.h: Include <grub/compiler.h> instead of <grub/misc.h>.
|
||||||
|
* grub-core/commands/fileXX.c: Include <grub/misc.h>.
|
||||||
|
* grub-core/efiemu/prepare.c: Include <grub/misc.h>.
|
||||||
|
* grub-core/loader/i386/xen_file.c: Include <grub/misc.h>.
|
||||||
|
* grub-core/loader/i386/xen_fileXX.c: Include <grub/misc.h>.
|
||||||
|
* grub-core/video/capture.c: Include <grub/misc.h>.
|
||||||
|
* include/grub/command.h: Include <grub/misc.h>.
|
||||||
|
* include/grub/dl.h: Include <grub/misc.h>.
|
||||||
|
* include/grub/procfs.h: Include <grub/misc.h>.
|
||||||
|
|
||||||
|
2014-01-18 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Add support for BUILD_EXEEXT and use it ...
|
||||||
|
* Makefile.am: ... here.
|
||||||
|
* Makefile.util.def: ... and here.
|
||||||
|
* grub-core/Makefile.am: ... and here.
|
||||||
|
|
||||||
|
2014-01-18 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/osdep/hostfile_windows.h: Use _W64 instead of
|
||||||
|
FILE_OFFSET_BITS to differentiate between native MinGW and Mingw W64.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/terminfo.c: Recognize keys F1-F12.
|
||||||
|
|
||||||
|
2014-01-18 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Add support for BUILD_LDFLAGS.
|
||||||
|
* Makefile.am: Use BUILD_LDFLAGS for build time programs here ...
|
||||||
|
* grub-core/Makefile.am: ... and here.
|
||||||
|
* INSTALL: Mention BUILD_LDFLAGS.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mount.c: Extend GCC warning workaround to grub-mount.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/efi/efi.c: Ensure that the result starts with /
|
||||||
|
and has no //.
|
||||||
|
|
||||||
|
2014-01-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* NEWS: Add few missing entries.
|
||||||
|
|
||||||
|
2014-01-17 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub.d/00_header.in (make_timeout): Use && rather than test
|
||||||
|
-a.
|
||||||
|
* util/grub.d/10_windows.in: Likewise.
|
||||||
|
* util/grub.d/10_netbsd.in (netbsd_load_fs_module): Use || rather
|
||||||
|
than test -o.
|
||||||
|
* util/grub.d/30_os-prober.in: Use && rather than test -a, and ||
|
||||||
|
rather than test -o.
|
||||||
|
|
||||||
|
2014-01-17 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Remove
|
||||||
|
redundant preprocessor conditional.
|
||||||
|
|
||||||
|
2014-01-08 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* Makefile.util.def (grub-macbless): Change mansection to 8.
|
||||||
|
|
||||||
|
2014-01-07 Leif Lindholm <leif.lindholm@linaro.org>
|
||||||
|
|
||||||
|
* grub-core/loader/arm64/linux.c: correctly set device path end length.
|
||||||
|
|
||||||
|
2014-01-07 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-install.c: Use bootaa64.efi instead of bootaarch64.efi on
|
||||||
|
arm64 to comply with EFI specification. Also use grubaa64.efi for
|
||||||
|
consistency.
|
||||||
|
* util/grub-mkrescue.c: Change to use bootaa64.efi too.
|
||||||
|
|
||||||
|
2014-01-07 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/osdep/hostfile_windows.h: Do not redefine fseeko/ftello
|
||||||
|
on MinGW-64 when compiling for 32 bits.
|
||||||
|
|
||||||
|
2013-12-30 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/Makefile.core.def: strip .eh_frame section for arm64-efi.
|
||||||
|
|
||||||
|
2013-12-30 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* NEWS: Add few missing entries. Correct existing ones.
|
||||||
|
|
||||||
|
2013-12-28 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Don't abort() on unavailable coreboot tables if not running on coreboot.
|
||||||
|
|
||||||
|
2013-12-28 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/emu/misc.c: Remove unused error.h; fixes compilation
|
||||||
|
on mingw.
|
||||||
|
|
||||||
|
2013-12-28 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* NEWS: The cmosclean command in fact dates back to 1.99. Remove
|
||||||
|
mention of it from 2.02.
|
||||||
|
|
||||||
|
2013-12-27 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/arm/cache_armv6.S: Remove .arch directive.
|
||||||
|
|
||||||
|
As these functions are used on pre-ARMv6 CPUs as well we don't want
|
||||||
|
to make assembler assume that architecture is higher than default one.
|
||||||
|
|
||||||
|
2013-12-27 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* NEWS: First draft of 2.02 entry.
|
||||||
|
|
||||||
|
2013-12-27 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* INSTALL (Cross-compiling the GRUB): Fix some spelling mistakes.
|
||||||
|
* docs/grub.texi (Getting the source code): Likewise.
|
||||||
|
|
||||||
|
2013-12-25 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/windows/platform.c (get_platform): Fix EFI
|
||||||
|
detection.
|
||||||
|
|
||||||
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* configure.ac: Set version to 2.02~beta2.
|
* configure.ac: Set version to 2.02~beta2.
|
||||||
@@ -409,10 +1295,6 @@
|
|||||||
Allow compilation without thumb-interwork as long as no thumb is
|
Allow compilation without thumb-interwork as long as no thumb is
|
||||||
involved or only thumb2 is used.
|
involved or only thumb2 is used.
|
||||||
|
|
||||||
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
|
|
||||||
|
|
||||||
Use -Wl,--no-relax rather than -mno-relax for uniformity.
|
|
||||||
|
|
||||||
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* INSTALL: Update comment as to why sparc64 clang isn't usable.
|
* INSTALL: Update comment as to why sparc64 clang isn't usable.
|
||||||
@@ -866,7 +1748,7 @@
|
|||||||
|
|
||||||
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* .gitignore: Add .exe variants. Add missing files. Remove few outdated
|
* .gitignore: add .exe variants. add missing files. remove few outdated
|
||||||
entries.
|
entries.
|
||||||
|
|
||||||
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
@@ -13,20 +13,23 @@ configuring the GRUB.
|
|||||||
|
|
||||||
* GCC 4.1.3 or later
|
* GCC 4.1.3 or later
|
||||||
Note: older versions may work but support is limited
|
Note: older versions may work but support is limited
|
||||||
|
|
||||||
|
Experimental support for clang 3.3 or later (results in much bigger binaries)
|
||||||
|
for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64
|
||||||
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
||||||
much bigger binaries.
|
much bigger binaries.
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang 3.2 or later works for arm
|
Note: clang 3.2 or later works for arm
|
||||||
None of tested clang versions generated usable thumb code
|
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang 3.3 or later works for arm64
|
Note: clang on arm64 is not supported due to
|
||||||
earlier versions have no arm64 support
|
https://llvm.org/bugs/show_bug.cgi?id=26030
|
||||||
Note: clang 3.3 or later works for mips(el)
|
Note: clang 3.3 or later works for mips(el)
|
||||||
earlier versions fail to generate .reginfo and hence gprel relocations
|
earlier versions fail to generate .reginfo and hence gprel relocations
|
||||||
fail.
|
fail.
|
||||||
Note: clang 3.2 or later works for powerpc
|
Note: clang 3.2 or later works for powerpc
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang doesn't support -mno-app-regs and so can't be used for sparc64
|
Note: clang 3.5 or later works for sparc64
|
||||||
|
earlier versions return "error: unable to interface with target machine"
|
||||||
Note: clang has no support for ia64 and hence you can't compile GRUB
|
Note: clang has no support for ia64 and hence you can't compile GRUB
|
||||||
for ia64 with clang
|
for ia64 with clang
|
||||||
* GNU Make
|
* GNU Make
|
||||||
@@ -35,6 +38,7 @@ configuring the GRUB.
|
|||||||
* GNU binutils 2.9.1.0.23 or later
|
* GNU binutils 2.9.1.0.23 or later
|
||||||
* Flex 2.5.35 or later
|
* Flex 2.5.35 or later
|
||||||
* Other standard GNU/Unix tools
|
* Other standard GNU/Unix tools
|
||||||
|
* a libc with large file support (e.g. glibc 2.1 or later)
|
||||||
|
|
||||||
On GNU/Linux, you also need:
|
On GNU/Linux, you also need:
|
||||||
|
|
||||||
@@ -99,6 +103,9 @@ The simplest way to compile this package is:
|
|||||||
|
|
||||||
3. Type `./autogen.sh'.
|
3. Type `./autogen.sh'.
|
||||||
|
|
||||||
|
* autogen.sh uses python. By default invocation is "python" but can be
|
||||||
|
overriden by setting variable $PYTHON.
|
||||||
|
|
||||||
4. Type `./configure' to configure the package for your system.
|
4. Type `./configure' to configure the package for your system.
|
||||||
If you're using `csh' on an old version of System V, you might
|
If you're using `csh' on an old version of System V, you might
|
||||||
need to type `sh ./configure' instead to prevent `csh' from trying
|
need to type `sh ./configure' instead to prevent `csh' from trying
|
||||||
@@ -140,7 +147,7 @@ If build and host are different make check isn't available.
|
|||||||
If build and host are different man pages are not generated.
|
If build and host are different man pages are not generated.
|
||||||
|
|
||||||
As an example imagine you have a build system running on FreeBSD on sparc
|
As an example imagine you have a build system running on FreeBSD on sparc
|
||||||
which prepares packages for developpers running amd64 GNU/Linux laptop and
|
which prepares packages for developers running amd64 GNU/Linux laptop and
|
||||||
they need to make images for ARM board running U-boot. In this case:
|
they need to make images for ARM board running U-boot. In this case:
|
||||||
|
|
||||||
build=sparc64-freebsd
|
build=sparc64-freebsd
|
||||||
@@ -149,7 +156,7 @@ target=arm-uboot
|
|||||||
|
|
||||||
For this example the configure line might look like (more details below)
|
For this example the configure line might look like (more details below)
|
||||||
(some options are optional and included here for completeness but some rarely
|
(some options are optional and included here for completeness but some rarely
|
||||||
used options are omited):
|
used options are omitted):
|
||||||
|
|
||||||
./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
|
./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
|
||||||
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
|
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
|
||||||
@@ -168,14 +175,15 @@ corresponding platform are not needed for the platform in question.
|
|||||||
generate sin and cos tables.
|
generate sin and cos tables.
|
||||||
2. BUILD_CFLAGS= for C options for build.
|
2. BUILD_CFLAGS= for C options for build.
|
||||||
3. BUILD_CPPFLAGS= for C preprocessor options for build.
|
3. BUILD_CPPFLAGS= for C preprocessor options for build.
|
||||||
4. BUILD_FREETYPE= for freetype-config for build (optional).
|
4. BUILD_LDFLAGS= for linker options for build.
|
||||||
|
5. BUILD_FREETYPE= for freetype-config for build (optional).
|
||||||
|
|
||||||
- For host
|
- For host
|
||||||
1. --host= to autoconf name of host.
|
1. --host= to autoconf name of host.
|
||||||
2. CC= for gcc able to compile for host
|
2. CC= for gcc able to compile for host
|
||||||
3. CFLAGS= for C options for host.
|
3. HOST_CFLAGS= for C options for host.
|
||||||
4. CPPFLAGS= for C preprocessor options for host.
|
4. HOST_CPPFLAGS= for C preprocessor options for host.
|
||||||
5. LDFLAGS= for linker options for host.
|
5. HOST_LDFLAGS= for linker options for host.
|
||||||
6. FREETYPE= for freetype-config for host (optional).
|
6. FREETYPE= for freetype-config for host (optional).
|
||||||
7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
||||||
8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
||||||
@@ -196,9 +204,9 @@ corresponding platform are not needed for the platform in question.
|
|||||||
11. TARGET_RANLIB= for ranlib for target.
|
11. TARGET_RANLIB= for ranlib for target.
|
||||||
|
|
||||||
- Additionally for emu, for host and target.
|
- Additionally for emu, for host and target.
|
||||||
1. SDL is looked for in stadard linker directories (-lSDL) (optional)
|
1. SDL is looked for in standard linker directories (-lSDL) (optional)
|
||||||
2. libpciaccess is looked for in stadard linker directories (-lpciaccess) (optional)
|
2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional)
|
||||||
3. libusb is looked for in stadard linker directories (-lusb) (optional)
|
3. libusb is looked for in standard linker directories (-lusb) (optional)
|
||||||
|
|
||||||
- Platform-agnostic tools and data.
|
- Platform-agnostic tools and data.
|
||||||
1. make is the tool you execute after ./configure.
|
1. make is the tool you execute after ./configure.
|
||||||
|
|||||||
+120
-75
@@ -1,7 +1,11 @@
|
|||||||
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
||||||
|
|
||||||
DEPDIR = .deps-util
|
DEPDIR = .deps-util
|
||||||
SUBDIRS = grub-core/gnulib . grub-core po docs util/bash-completion.d
|
SUBDIRS = grub-core/gnulib .
|
||||||
|
if COND_real_platform
|
||||||
|
SUBDIRS += grub-core
|
||||||
|
endif
|
||||||
|
SUBDIRS += po docs util/bash-completion.d
|
||||||
|
|
||||||
include $(top_srcdir)/conf/Makefile.common
|
include $(top_srcdir)/conf/Makefile.common
|
||||||
include $(top_srcdir)/conf/Makefile.extra-dist
|
include $(top_srcdir)/conf/Makefile.extra-dist
|
||||||
@@ -66,35 +70,40 @@ endif
|
|||||||
|
|
||||||
starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0
|
starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0
|
||||||
|
|
||||||
build-grub-mkfont: util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c
|
build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs)
|
||||||
CLEANFILES += build-grub-mkfont
|
CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
|
|
||||||
garbage-gen: util/garbage-gen.c
|
garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c
|
||||||
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $^
|
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^
|
||||||
CLEANFILES += garbage-gen
|
CLEANFILES += garbage-gen$(BUILD_EXEEXT)
|
||||||
EXTRA_DIST += util/garbage-gen.c
|
EXTRA_DIST += util/garbage-gen.c
|
||||||
|
|
||||||
build-grub-gen-asciih: util/grub-gen-asciih.c
|
build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
||||||
CLEANFILES += build-grub-gen-asciih
|
CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT)
|
||||||
|
|
||||||
build-grub-gen-widthspec: util/grub-gen-widthspec.c
|
build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
||||||
CLEANFILES += build-grub-gen-widthspec
|
CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT)
|
||||||
|
|
||||||
if COND_STARFIELD
|
if COND_STARFIELD
|
||||||
starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files)
|
starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files)
|
||||||
dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
./build-grub-mkfont -s 10 -o $@ $(DJVU_FONT_SOURCE)
|
./build-grub-mkfont$(BUILD_EXEEXT) -s 10 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
CLEANFILES += dejavu_10.pf2
|
||||||
./build-grub-mkfont -s 12 -o $@ $(DJVU_FONT_SOURCE)
|
dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
./build-grub-mkfont$(BUILD_EXEEXT) -s 12 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
./build-grub-mkfont -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
CLEANFILES += dejavu_12.pf2
|
||||||
dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
./build-grub-mkfont -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
./build-grub-mkfont$(BUILD_EXEEXT) -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
CLEANFILES += dejavu_14.pf2
|
||||||
./build-grub-mkfont -s 16 -o $@ $(DJVU_FONT_SOURCE)
|
dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
|
./build-grub-mkfont$(BUILD_EXEEXT) -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
|
CLEANFILES += dejavu_bold_14.pf2
|
||||||
|
dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
|
./build-grub-mkfont$(BUILD_EXEEXT) -s 16 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
|
CLEANFILES += dejavu_16.pf2
|
||||||
else
|
else
|
||||||
starfield_DATA =
|
starfield_DATA =
|
||||||
endif
|
endif
|
||||||
@@ -102,28 +111,28 @@ endif
|
|||||||
EXTRA_DIST += $(starfield_theme_files)
|
EXTRA_DIST += $(starfield_theme_files)
|
||||||
EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf
|
EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf
|
||||||
|
|
||||||
unicode.pf2: $(FONT_SOURCE) build-grub-mkfont
|
unicode.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
./build-grub-mkfont -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1)
|
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += unicode.pf2
|
CLEANFILES += unicode.pf2
|
||||||
|
|
||||||
# Arrows and lines are needed to draw the menu, so always include them
|
# Arrows and lines are needed to draw the menu, so always include them
|
||||||
UNICODE_ARROWS=0x2190-0x2193
|
UNICODE_ARROWS=0x2190-0x2193
|
||||||
UNICODE_LINES=0x2501-0x251B
|
UNICODE_LINES=0x2501-0x251B
|
||||||
|
|
||||||
ascii.pf2: $(FONT_SOURCE) build-grub-mkfont
|
ascii.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += ascii.pf2
|
CLEANFILES += ascii.pf2
|
||||||
|
|
||||||
euro.pf2: $(FONT_SOURCE) build-grub-mkfont
|
euro.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += euro.pf2
|
CLEANFILES += euro.pf2
|
||||||
|
|
||||||
ascii.h: $(FONT_SOURCE) build-grub-gen-asciih
|
ascii.h: $(FONT_SOURCE) build-grub-gen-asciih$(BUILD_EXEEXT)
|
||||||
./build-grub-gen-asciih $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
./build-grub-gen-asciih$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += ascii.h
|
CLEANFILES += ascii.h
|
||||||
|
|
||||||
widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec
|
widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec$(BUILD_EXEEXT)
|
||||||
./build-grub-gen-widthspec $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
./build-grub-gen-widthspec$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += widthspec.h
|
CLEANFILES += widthspec.h
|
||||||
|
|
||||||
# Install config.h into platformdir
|
# Install config.h into platformdir
|
||||||
@@ -132,6 +141,8 @@ nodist_platform_HEADERS = config.h
|
|||||||
pkgdata_DATA += grub-mkconfig_lib
|
pkgdata_DATA += grub-mkconfig_lib
|
||||||
|
|
||||||
|
|
||||||
|
if COND_real_platform
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
endif
|
endif
|
||||||
@@ -161,82 +172,82 @@ QEMU32=qemu-system-x86_64
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -static -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -static -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S
|
linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S
|
||||||
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1
|
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1
|
||||||
|
|
||||||
multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
||||||
|
|
||||||
kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
||||||
|
|
||||||
kfreebsd.aout: kfreebsd.elf
|
kfreebsd.aout: kfreebsd.elf
|
||||||
$(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -R .note.gnu.build-id -R .note.gnu.gold-version
|
$(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -j .text
|
||||||
|
|
||||||
pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32
|
$(TARGET_CC) -o $@ $< -static -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32
|
||||||
|
|
||||||
pc-chainloader.bin: pc-chainloader.elf
|
pc-chainloader.bin: pc-chainloader.elf
|
||||||
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
||||||
|
|
||||||
ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32
|
$(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32
|
||||||
|
|
||||||
ntldr.bin: ntldr.elf
|
ntldr.bin: ntldr.elf
|
||||||
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
$(TARGET_OBJCOPY) -O binary --strip-unneeded -j .text $< $@;
|
||||||
|
|
||||||
multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1
|
$(TARGET_CC) -static -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1
|
||||||
|
|
||||||
kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
$(TARGET_CC) -o $@ $< -m64 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
||||||
|
|
||||||
kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
||||||
|
|
||||||
knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux-initramfs.mips: linux.init.mips Makefile
|
linux-initramfs.mips: linux.init.mips Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.ppc: linux.init.ppc Makefile
|
linux-initramfs.ppc: linux.init.ppc Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.mipsel: linux.init.mipsel Makefile
|
linux-initramfs.mipsel: linux.init.mipsel Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.loongson: linux.init.loongson Makefile
|
linux-initramfs.loongson: linux.init.loongson Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.i386: linux.init.i386 Makefile
|
linux-initramfs.i386: linux.init.i386 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.x86_64: linux.init.x86_64 Makefile
|
linux-initramfs.x86_64: linux.init.x86_64 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile
|
kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
|
||||||
@@ -295,7 +306,7 @@ bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/
|
|||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg --qemu-opts="-cpu pentium2" | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
@@ -334,33 +345,41 @@ bootcheck-ntldr: ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg grub-shell
|
|||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
if COND_i386_efi
|
if COND_i386_efi
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
# NetBSD has no support for finding ACPI on EFI
|
||||||
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_x86_64_efi
|
if COND_x86_64_efi
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
# NetBSD has no support for finding ACPI on EFI
|
||||||
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_multiboot
|
if COND_i386_multiboot
|
||||||
# FreeBSD requires ACPI
|
# *BSD requires ACPI
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
if COND_i386_qemu
|
||||||
|
# *BSD requires ACPI
|
||||||
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
# Freebsd requires ACPI
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_qemu
|
if COND_i386_ieee1275
|
||||||
# FreeBSD requires ACPI
|
# *BSD requires ACPI
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64
|
#legacy protocol (linux16) makes early BIOS calls.
|
||||||
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_pc
|
if COND_i386_pc
|
||||||
#pc chainloader by definition is only for i386-pc
|
#pc chainloader by definition is only for i386-pc
|
||||||
#ntldr and bootmgr require BIOS.
|
#ntldr and bootmgr require BIOS.
|
||||||
#legacy protocol makes early BIOS calls.
|
#legacy protocol (linux16) makes early BIOS calls.
|
||||||
# NetBSD crashes early on non-BIOS
|
# 32-bit NetBSD crashes early on non-BIOS
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-i386
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-i386
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -383,12 +402,10 @@ if COND_powerpc_ieee1275
|
|||||||
BOOTCHECKS = bootcheck-linux-ppc
|
BOOTCHECKS = bootcheck-linux-ppc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
|
|
||||||
|
|
||||||
.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
|
.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
|
||||||
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
|
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
|
||||||
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
|
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
|
||||||
bootcheck-linux-mips
|
bootcheck-linux-mips FORCE
|
||||||
|
|
||||||
# Randomly generated
|
# Randomly generated
|
||||||
SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d
|
SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d
|
||||||
@@ -398,10 +415,15 @@ BOOTCHECK_TIMEOUT=180
|
|||||||
bootcheck: $(BOOTCHECKS)
|
bootcheck: $(BOOTCHECKS)
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
default_payload.elf: grub-mkstandalone grub-mkimage
|
default_payload.elf: grub-mkstandalone grub-mkimage FORCE
|
||||||
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
test -f $@ && rm $@ || true
|
||||||
|
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(shell cat grub-core/fs.lst) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
|
|
||||||
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
|
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
|
||||||
windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
||||||
test -d $(windowsdir) && rm -rf $(windowsdir) || true
|
test -d $(windowsdir) && rm -rf $(windowsdir) || true
|
||||||
@@ -420,10 +442,33 @@ windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
|||||||
for x in $(starfield_DATA); do \
|
for x in $(starfield_DATA); do \
|
||||||
cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \
|
cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \
|
||||||
done
|
done
|
||||||
|
for x in $(GRUB_WINDOWS_EXTRA_DIST); do \
|
||||||
|
cp -fp $$x $(windowsdir); \
|
||||||
|
done
|
||||||
|
|
||||||
windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip
|
windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip
|
||||||
windowszip: windowsdir
|
windowszip: windowsdir
|
||||||
test -f $(windowszip) && rm $(windowszip) || true
|
test -f $(windowszip) && rm $(windowszip) || true
|
||||||
zip -r $(windowszip) $(windowsdir)
|
zip -r $(windowszip) $(windowsdir)
|
||||||
|
rm -rf $(windowsdir)
|
||||||
|
|
||||||
EXTRA_DIST += linguas.sh
|
EXTRA_DIST += linguas.sh
|
||||||
|
|
||||||
|
changelog_start_date = 2015-01-23
|
||||||
|
gitlog_to_changelog = $(top_srcdir)/build-aux/gitlog-to-changelog
|
||||||
|
|
||||||
|
ChangeLog: FORCE
|
||||||
|
if test -d $(top_srcdir)/.git; then \
|
||||||
|
$(gitlog_to_changelog) --srcdir=$(top_srcdir) --since=$(changelog_start_date) > '$@.tmp'; \
|
||||||
|
rm -f '$@'; mv '$@.tmp' '$@'; \
|
||||||
|
else \
|
||||||
|
touch $@; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXTRA_DIST += ChangeLog ChangeLog-2015
|
||||||
|
|
||||||
|
syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg
|
||||||
|
|
||||||
|
tests/syslinux/ubuntu10.04_grub.cfg: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg.in
|
||||||
|
(for x in tests/syslinux/ubuntu10.04_grub.cfg.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:-
|
||||||
|
CLEANFILES += tests/syslinux/ubuntu10.04_grub.cfg
|
||||||
+33
-6
@@ -48,6 +48,7 @@ library = {
|
|||||||
common = grub-core/partmap/gpt.c;
|
common = grub-core/partmap/gpt.c;
|
||||||
common = grub-core/partmap/msdos.c;
|
common = grub-core/partmap/msdos.c;
|
||||||
common = grub-core/fs/proc.c;
|
common = grub-core/fs/proc.c;
|
||||||
|
common = grub-core/fs/archelp.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
library = {
|
library = {
|
||||||
@@ -91,7 +92,6 @@ library = {
|
|||||||
common = grub-core/fs/bfs.c;
|
common = grub-core/fs/bfs.c;
|
||||||
common = grub-core/fs/btrfs.c;
|
common = grub-core/fs/btrfs.c;
|
||||||
common = grub-core/fs/cbfs.c;
|
common = grub-core/fs/cbfs.c;
|
||||||
common = grub-core/fs/archelp.c;
|
|
||||||
common = grub-core/fs/cpio.c;
|
common = grub-core/fs/cpio.c;
|
||||||
common = grub-core/fs/cpio_be.c;
|
common = grub-core/fs/cpio_be.c;
|
||||||
common = grub-core/fs/odc.c;
|
common = grub-core/fs/odc.c;
|
||||||
@@ -172,6 +172,8 @@ program = {
|
|||||||
|
|
||||||
common = util/grub-mkimage.c;
|
common = util/grub-mkimage.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
|
common = util/grub-mkimage32.c;
|
||||||
|
common = util/grub-mkimage64.c;
|
||||||
common = util/resolve.c;
|
common = util/resolve.c;
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
@@ -384,7 +386,7 @@ program = {
|
|||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
@@ -405,7 +407,7 @@ program = {
|
|||||||
program = {
|
program = {
|
||||||
name = grub-macbless;
|
name = grub-macbless;
|
||||||
installdir = sbin;
|
installdir = sbin;
|
||||||
mansection = 1;
|
mansection = 8;
|
||||||
common = util/grub-macbless.c;
|
common = util/grub-macbless.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
@@ -414,7 +416,7 @@ program = {
|
|||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
@@ -510,6 +512,8 @@ program = {
|
|||||||
common = util/render-label.c;
|
common = util/render-label.c;
|
||||||
common = util/glue-efi.c;
|
common = util/glue-efi.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
|
common = util/grub-mkimage32.c;
|
||||||
|
common = util/grub-mkimage64.c;
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -552,6 +556,8 @@ program = {
|
|||||||
common = util/render-label.c;
|
common = util/render-label.c;
|
||||||
common = util/glue-efi.c;
|
common = util/glue-efi.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
|
common = util/grub-mkimage32.c;
|
||||||
|
common = util/grub-mkimage64.c;
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -595,6 +601,8 @@ program = {
|
|||||||
common = util/grub-install.c;
|
common = util/grub-install.c;
|
||||||
common = util/probe.c;
|
common = util/probe.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
|
common = util/grub-mkimage32.c;
|
||||||
|
common = util/grub-mkimage64.c;
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -613,7 +621,6 @@ program = {
|
|||||||
common = grub-core/disk/host.c;
|
common = grub-core/disk/host.c;
|
||||||
|
|
||||||
common = util/resolve.c;
|
common = util/resolve.c;
|
||||||
enable = noemu;
|
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
|
|
||||||
@@ -633,6 +640,8 @@ program = {
|
|||||||
common = util/grub-mknetdir.c;
|
common = util/grub-mknetdir.c;
|
||||||
|
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
|
common = util/grub-mkimage32.c;
|
||||||
|
common = util/grub-mkimage64.c;
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -708,7 +717,7 @@ script = {
|
|||||||
name = grub-fs-tester;
|
name = grub-fs-tester;
|
||||||
common = tests/util/grub-fs-tester.in;
|
common = tests/util/grub-fs-tester.in;
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
dependencies = garbage-gen;
|
dependencies = 'garbage-gen$(BUILD_EXEEXT)';
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
@@ -1150,6 +1159,24 @@ script = {
|
|||||||
common = tests/grub_cmd_tr.in;
|
common = tests/grub_cmd_tr.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = file_filter_test;
|
||||||
|
common = tests/file_filter_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = grub_cmd_test;
|
||||||
|
common = tests/grub_cmd_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = syslinux_test;
|
||||||
|
common = tests/syslinux_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase;
|
testcase;
|
||||||
name = example_unit_test;
|
name = example_unit_test;
|
||||||
|
|||||||
@@ -1,3 +1,182 @@
|
|||||||
|
New in 2.02:
|
||||||
|
|
||||||
|
* New/improved filesystem and disk support:
|
||||||
|
* Big-endian UFS1.
|
||||||
|
* Experimental 64-bit ext2 support.
|
||||||
|
* Various fixes for non-512-byte sector devices.
|
||||||
|
* New `proc' filesystem framework, used by LUKS disks.
|
||||||
|
* Fix DM-RAID partition handling.
|
||||||
|
* New `nativedisk' command to switch from firmware to native disk drivers.
|
||||||
|
* Compressed HFS+.
|
||||||
|
* DragonFly BSD labels.
|
||||||
|
* CBFS (coreboot).
|
||||||
|
* Handle partitioned LVM properly.
|
||||||
|
* Use LVM UUIDs whenever possible.
|
||||||
|
* GPT PReP.
|
||||||
|
* New `progress' module that shows progress information while reading
|
||||||
|
files.
|
||||||
|
* ZFS features support.
|
||||||
|
* ZFS LZ4 support.
|
||||||
|
* XFS V5 format support.
|
||||||
|
* LVM RAID1 support.
|
||||||
|
|
||||||
|
* New/improved terminal and video support:
|
||||||
|
* Monochrome text (matching `hercules' in GRUB Legacy).
|
||||||
|
* Morse code output using system speaker.
|
||||||
|
* `spkmodem' output (simple data protocol using system speaker).
|
||||||
|
* Handle Japanese special keys.
|
||||||
|
* coreboot framebuffer.
|
||||||
|
* Serial on ARC.
|
||||||
|
* Native vt100 handling for grub-emu, replacing the use of the curses
|
||||||
|
library.
|
||||||
|
* New gfxmenu options for terminal window positioning, theme background
|
||||||
|
image handling, and scrollbar padding, plus `item_pixmap_style' and
|
||||||
|
`highlight_overlay'.
|
||||||
|
* Support several more image types (paletted and greyscale).
|
||||||
|
|
||||||
|
* Boot protocol improvements:
|
||||||
|
* Support Apple FAT binaries on non-Apple platforms.
|
||||||
|
* Improve FreeDOS direct loading support compatibility.
|
||||||
|
* Enable `linux16' on all x86 platforms, not just BIOS.
|
||||||
|
* New TrueCrypt ISO loader.
|
||||||
|
* multiboot2 boot-services EFI specification.
|
||||||
|
* multiboot2 EFI memory map specification.
|
||||||
|
* multiboot2 full-file specfication.
|
||||||
|
|
||||||
|
* New/improved network support:
|
||||||
|
* New variables `net_default_*' containing properties of the default
|
||||||
|
interface.
|
||||||
|
* Autoload `http' and `tftp' modules if necessary.
|
||||||
|
* Improve TFTP robustness.
|
||||||
|
* Parse `nd' disk names in GRUB Legacy configuration files.
|
||||||
|
* Issue separate DNS queries for IPv4 and IPv6.
|
||||||
|
* Support IPv6 Router Advertisement to configure default router.
|
||||||
|
* New variable net_<interface>_next_server containing next server
|
||||||
|
from BOOTP reply.
|
||||||
|
|
||||||
|
* Coreboot improvements:
|
||||||
|
* CBFS support both in on-disk images (loopback) and flash.
|
||||||
|
* Ability to launch another payload from flash or disk
|
||||||
|
* Coreboot framebuffer
|
||||||
|
* CBMEMC support (both logging and inspecting logs)
|
||||||
|
* Command for inspecting coreboot timestamps (`coreboot_boottime').
|
||||||
|
* Command for inspecting coreboot tables (`lscoreboot').
|
||||||
|
* New target default_payload.elf.
|
||||||
|
* Increased maximal core size.
|
||||||
|
* Prefer pmtimer for TSC calibration.
|
||||||
|
|
||||||
|
* New/improved platform support:
|
||||||
|
* New `efifwsetup' and `lsefi' commands on EFI platforms.
|
||||||
|
* New `cmosdump' and `cmosset' commands on platforms with CMOS support.
|
||||||
|
* New command `pcidump' for PCI platforms.
|
||||||
|
* Improve opcode parsing in ACPI halt implementation.
|
||||||
|
* Use the TSC as a possible time source on i386-ieee1275.
|
||||||
|
* Merge PowerPC grub-mkrescue implementation with the common one.
|
||||||
|
* Support grub-mkrescue on i386-ieee1275, sparc64, bootinfo machines such
|
||||||
|
as pSeries, and mips-arc.
|
||||||
|
* Make grub-mkrescue better support Apple Intel Macs on CD.
|
||||||
|
* Enable GRUB Legacy configuration file parsing on EFI.
|
||||||
|
* Support halt for Loongson 2E.
|
||||||
|
* ARM U-Boot and EFI ports.
|
||||||
|
* Reorganise platform-dependent code in utilities to avoid #ifdef mess.
|
||||||
|
* AROS and Haiku support for userspace utilities.
|
||||||
|
* Xen PV port.
|
||||||
|
* Fix EFI stack alignment.
|
||||||
|
* ARM64 EFI port.
|
||||||
|
* On Linux, read partition start offsets from sysfs if possible.
|
||||||
|
* New grub-macbless utility, and better integration with Mac firmware in
|
||||||
|
grub-install.
|
||||||
|
* Support Yeeloong 3A.
|
||||||
|
* Add `cpuid --pae' option to detect Physical Address Extension on x86.
|
||||||
|
* Support for USB debug dongles.
|
||||||
|
* Support for *-emu on all platforms (previously only i386/x86_64 worked).
|
||||||
|
* Support *-emu on Windows.
|
||||||
|
* New platform `none' which builds only user level utilities. This is now
|
||||||
|
default if target CPU is not supported.
|
||||||
|
* Support for booting little-endian Linux kernel on powerpc.
|
||||||
|
* Support network boot with Oracle sun4v vnet devices.
|
||||||
|
* Added SAS disks to the IEEE 1275 Open Firmware device list.
|
||||||
|
* Try multiple methods for TSC (timestamp counter) calibration - PIT, pmtimer,
|
||||||
|
EFI Stall. If everything fails, use hardcoded frequency 800MHz.
|
||||||
|
* Support Hyper-V Gen2 platforms which lack PIT for TSC calibration.
|
||||||
|
* Map UEFI Persistent Memory to E820 persistent memory.
|
||||||
|
* New Xen loader on ARM64.
|
||||||
|
* Respect alignment requirement for block device IO buffers on EFI.
|
||||||
|
|
||||||
|
* Security:
|
||||||
|
* Add optional facility to enforce that all files read by the core image
|
||||||
|
from disk have a valid detached digital signature.
|
||||||
|
|
||||||
|
* Performance:
|
||||||
|
* Avoid costly division operations in many places.
|
||||||
|
* New boot time analysis framework (`./configure --enable-boot-time').
|
||||||
|
* Initialise USB ports in parallel.
|
||||||
|
* New `testspeed' command to test file read speed.
|
||||||
|
* Speed-up gfxterm by storing intermediate results in more compact format.
|
||||||
|
* Lazy LVM/mdraid scan.
|
||||||
|
* Disk hints.
|
||||||
|
|
||||||
|
* Scripting:
|
||||||
|
* New `eval' and `tr' commands.
|
||||||
|
* grub-script-check fails on scripts containing no commands.
|
||||||
|
|
||||||
|
* Installation and other utility improvements:
|
||||||
|
* Add option to compress files on installation or image creation.
|
||||||
|
* Using grub-reboot no longer requires setting `GRUB_DEFAULT=saved'.
|
||||||
|
* Support probing EFI System Partition (requires os-prober >= 1.58).
|
||||||
|
* Fix inconsistent use of `GRUB_CRYPTODISK_ENABLE' and
|
||||||
|
`GRUB_ENABLE_CRYPTODISK'; the latter is now used consistently.
|
||||||
|
* grub-mount handles symbolic links to directories.
|
||||||
|
* Support disabling submenus with `GRUB_DISABLE_SUBMENU' configuration key
|
||||||
|
for grub-mkconfig.
|
||||||
|
* grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone
|
||||||
|
rewritten in C. They should now work in supported non-Unix-like
|
||||||
|
environments.
|
||||||
|
* Native mingw support.
|
||||||
|
* Ability to install on EFI under windows.
|
||||||
|
* Reorganise timeout handling using new `timeout_style' environment
|
||||||
|
variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig.
|
||||||
|
Menu hotkeys pressed during a hidden timeout now boot the corresponding
|
||||||
|
menu entry immediately.
|
||||||
|
* New `file' command and grub-file utility to check file types.
|
||||||
|
* New syslinux configuration file parser.
|
||||||
|
* Set menu entry class to primary OS name returned by os-prober to display
|
||||||
|
OS specific icon.
|
||||||
|
* On Linux x86 detect EFI word size in grub-install and automatically select
|
||||||
|
correct platform (x86_64-efi or i386-efi) to install. Requires Linux kernel
|
||||||
|
4.0 or higher.
|
||||||
|
|
||||||
|
* Build system:
|
||||||
|
* Remove all uses of nested functions; GRUB no longer requires an
|
||||||
|
executable stack.
|
||||||
|
* Fix documentation build with Texinfo >= 5.1.
|
||||||
|
* More robust and documented cross-compiling support.
|
||||||
|
* Partial clang support for some platforms (experimental).
|
||||||
|
* Partial mingw64 x86_64-efi compile support (highly experimental).
|
||||||
|
* Partial mingw32 i386-* (other than already present i386-pc)
|
||||||
|
compile support (highly experimental).
|
||||||
|
* Support for grub-mkpasswd on Windows.
|
||||||
|
* Eliminate the use of AutoGen. This allowed some performance
|
||||||
|
improvements to the build system.
|
||||||
|
* Remove variable length arrays.
|
||||||
|
* OpenBSD compile and tools support (NetBSD and FreeBSD were already supported).
|
||||||
|
* Fix build with FreeType >= 2.5.1.
|
||||||
|
* Make gentpl.py compatible with Python 3. It now requires at least
|
||||||
|
Python 2.6.
|
||||||
|
* modinfo.sh contains build information now.
|
||||||
|
* Added many new tests to improve robustness.
|
||||||
|
* Target is built without libgcc now. Necessary builtins are reimplemented
|
||||||
|
directly. This removes requirement for target-specific runtime on build
|
||||||
|
system.
|
||||||
|
* emu libusb support removed (was broken and unmaintained).
|
||||||
|
* powerpc64le compile support.
|
||||||
|
* Use fixed timestamp when generating GRUB image for reproducible builds.
|
||||||
|
* Verify at build time that modules contain only supported relocations and their
|
||||||
|
structure matches what boot-time module loader expects.
|
||||||
|
* Do not require fonts on powerpc-ieee1275.
|
||||||
|
|
||||||
|
* Revision control moved to git.
|
||||||
|
|
||||||
New in 2.00:
|
New in 2.00:
|
||||||
|
|
||||||
* Appearance:
|
* Appearance:
|
||||||
@@ -24,7 +203,6 @@ New in 2.00:
|
|||||||
* IEEE1275 serial.
|
* IEEE1275 serial.
|
||||||
* EFI serial.
|
* EFI serial.
|
||||||
* Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS.
|
* Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS.
|
||||||
* VBE on coreboot support.
|
|
||||||
|
|
||||||
* New filesystem, filters and disks formats:
|
* New filesystem, filters and disks formats:
|
||||||
* DVH partition map.
|
* DVH partition map.
|
||||||
@@ -48,7 +226,7 @@ New in 2.00:
|
|||||||
* multidevice, mirrored and raidz(2,3) ZFS support.
|
* multidevice, mirrored and raidz(2,3) ZFS support.
|
||||||
* RAID LVM (internal RAIDing) support.
|
* RAID LVM (internal RAIDing) support.
|
||||||
* ZFS crypto support.
|
* ZFS crypto support.
|
||||||
* ZLE and GZIP on ZFS support.
|
* ZLE, LZ4 and GZIP on ZFS support.
|
||||||
* Support ZFS up to 33.
|
* Support ZFS up to 33.
|
||||||
* HFS string is now treated like mac-roman and not UTF-8
|
* HFS string is now treated like mac-roman and not UTF-8
|
||||||
* HFS mtime support.
|
* HFS mtime support.
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ The URL is <http://www.gnu.org/software/grub/grub.html>.
|
|||||||
|
|
||||||
More extensive documentation is available in the Info manual,
|
More extensive documentation is available in the Info manual,
|
||||||
accessible using 'info grub' after building and installing GRUB 2.
|
accessible using 'info grub' after building and installing GRUB 2.
|
||||||
Please look at the GRUB Wiki <http://grub.enbug.org> for testing
|
|
||||||
procedures.
|
|
||||||
|
|
||||||
There are a number of important user-visible differences from the
|
There are a number of important user-visible differences from the
|
||||||
first version of GRUB, now known as GRUB Legacy. For a summary, please
|
first version of GRUB, now known as GRUB Legacy. For a summary, please
|
||||||
|
|||||||
@@ -7,7 +7,3 @@ glance. So write to <grub-devel@gnu.org> first.
|
|||||||
For bug tracking, refer to:
|
For bug tracking, refer to:
|
||||||
|
|
||||||
http://savannah.gnu.org/bugs/?group=grub
|
http://savannah.gnu.org/bugs/?group=grub
|
||||||
|
|
||||||
Our wiki also lists some areas that need work:
|
|
||||||
|
|
||||||
http://grub.enbug.org/
|
|
||||||
+56
-78
@@ -93,7 +93,7 @@ else
|
|||||||
fi
|
fi
|
||||||
grub_cv_prog_objcopy_absolute=yes
|
grub_cv_prog_objcopy_absolute=yes
|
||||||
for link_addr in 0x2000 0x8000 0x7C00; do
|
for link_addr in 0x2000 0x8000 0x7C00; do
|
||||||
if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then :
|
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CFLAGS} ${TARGET_LDFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then :
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
|
AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
|
||||||
fi
|
fi
|
||||||
@@ -210,80 +210,6 @@ fi
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl Mass confusion!
|
|
||||||
dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit
|
|
||||||
dnl instructions, but implicitly insert addr32 and data32 bytes so
|
|
||||||
dnl that the code works in real mode''.
|
|
||||||
dnl
|
|
||||||
dnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bit
|
|
||||||
dnl instructions,'' which seems right. This requires the programmer
|
|
||||||
dnl to explicitly insert addr32 and data32 instructions when they want
|
|
||||||
dnl them.
|
|
||||||
dnl
|
|
||||||
dnl We only support the newer versions, because the old versions cause
|
|
||||||
dnl major pain, by requiring manual assembly to get 16-bit instructions into
|
|
||||||
dnl asm files.
|
|
||||||
AC_DEFUN([grub_I386_ASM_ADDR32],
|
|
||||||
[AC_REQUIRE([AC_PROG_CC])
|
|
||||||
AC_REQUIRE([grub_I386_ASM_PREFIX_REQUIREMENT])
|
|
||||||
AC_MSG_CHECKING([for .code16 addr32 assembler support])
|
|
||||||
AC_CACHE_VAL(grub_cv_i386_asm_addr32,
|
|
||||||
[cat > conftest.s.in <<\EOF
|
|
||||||
.code16
|
|
||||||
l1: @ADDR32@ movb %al, l1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
|
||||||
sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s
|
|
||||||
else
|
|
||||||
sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
|
|
||||||
fi
|
|
||||||
|
|
||||||
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
|
||||||
grub_cv_i386_asm_addr32=yes
|
|
||||||
else
|
|
||||||
grub_cv_i386_asm_addr32=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f conftest*])
|
|
||||||
|
|
||||||
AC_MSG_RESULT([$grub_cv_i386_asm_addr32])])
|
|
||||||
|
|
||||||
dnl Later versions of GAS requires that addr32 and data32 prefixes
|
|
||||||
dnl appear in the same lines as the instructions they modify, while
|
|
||||||
dnl earlier versions requires that they appear in separate lines.
|
|
||||||
AC_DEFUN([grub_I386_ASM_PREFIX_REQUIREMENT],
|
|
||||||
[AC_REQUIRE([AC_PROG_CC])
|
|
||||||
AC_MSG_CHECKING(dnl
|
|
||||||
[whether addr32 must be in the same line as the instruction])
|
|
||||||
AC_CACHE_VAL(grub_cv_i386_asm_prefix_requirement,
|
|
||||||
[cat > conftest.s <<\EOF
|
|
||||||
.code16
|
|
||||||
l1: addr32 movb %al, l1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
|
||||||
grub_cv_i386_asm_prefix_requirement=yes
|
|
||||||
else
|
|
||||||
grub_cv_i386_asm_prefix_requirement=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f conftest*])
|
|
||||||
|
|
||||||
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
|
||||||
grub_tmp_addr32="addr32"
|
|
||||||
grub_tmp_data32="data32"
|
|
||||||
else
|
|
||||||
grub_tmp_addr32="addr32;"
|
|
||||||
grub_tmp_data32="data32;"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ADDR32=$grub_tmp_addr32
|
|
||||||
DATA32=$grub_tmp_data32
|
|
||||||
|
|
||||||
AC_MSG_RESULT([$grub_cv_i386_asm_prefix_requirement])])
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check what symbol is defined as a bss start symbol.
|
dnl Check what symbol is defined as a bss start symbol.
|
||||||
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
||||||
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
||||||
@@ -418,15 +344,15 @@ else
|
|||||||
[fi]
|
[fi]
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Check if ln can handle directories properly (mingw).
|
dnl Check if ln -s can handle directories properly (mingw).
|
||||||
AC_DEFUN([grub_CHECK_LINK_DIR],[
|
AC_DEFUN([grub_CHECK_LINK_DIR],[
|
||||||
AC_MSG_CHECKING([whether ln can handle directories properly])
|
AC_MSG_CHECKING([whether ln -s can handle directories properly])
|
||||||
[mkdir testdir 2>/dev/null
|
[mkdir testdir 2>/dev/null
|
||||||
case $srcdir in
|
case $srcdir in
|
||||||
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
|
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
|
||||||
*) reldir=../$srcdir/include/grub/util ;;
|
*) reldir=../$srcdir/include/grub/util ;;
|
||||||
esac
|
esac
|
||||||
if ln -s $reldir testdir/util 2>/dev/null ; then]
|
if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then]
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
[link_dir=yes
|
[link_dir=yes
|
||||||
else
|
else
|
||||||
@@ -464,6 +390,58 @@ else
|
|||||||
[fi]
|
[fi]
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([grub_CHECK_LINK_PIE],[
|
||||||
|
[# Position independent executable.
|
||||||
|
link_nopie_needed=no]
|
||||||
|
AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
|
||||||
|
AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
|
||||||
|
|
||||||
|
[if eval "$ac_compile -Wl,-r,-d -nostdlib -Werror -o conftest.o" 2> /dev/null; then]
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
||||||
|
rm -f conftest.o
|
||||||
|
else
|
||||||
|
link_nopie_needed=yes]
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
[fi]
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Check if the Linker supports `-no-pie'.
|
||||||
|
AC_DEFUN([grub_CHECK_NO_PIE],
|
||||||
|
[AC_MSG_CHECKING([whether linker accepts -no-pie])
|
||||||
|
AC_CACHE_VAL(grub_cv_cc_ld_no_pie,
|
||||||
|
[save_LDFLAGS="$LDFLAGS"
|
||||||
|
LDFLAGS="$LDFLAGS -no-pie -nostdlib -Werror"
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_cc_ld_no_pie=yes],
|
||||||
|
[grub_cv_cc_ld_no_pie=no])
|
||||||
|
LDFLAGS="$save_LDFLAGS"
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT([$grub_cv_cc_ld_no_pie])
|
||||||
|
nopie_possible=no
|
||||||
|
if test "x$grub_cv_cc_ld_no_pie" = xyes ; then
|
||||||
|
nopie_possible=yes
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
|
||||||
|
[AC_MSG_CHECKING([whether linker accepts -nopie])
|
||||||
|
AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword,
|
||||||
|
[save_LDFLAGS="$LDFLAGS"
|
||||||
|
LDFLAGS="$LDFLAGS -nopie -nostdlib -Werror"
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_cc_ld_no_pie_oneword=yes],
|
||||||
|
[grub_cv_cc_ld_no_pie_oneword=no])
|
||||||
|
LDFLAGS="$save_LDFLAGS"
|
||||||
|
])
|
||||||
|
AC_MSG_RESULT([$grub_cv_cc_ld_no_pie_oneword])
|
||||||
|
nopie_oneword_possible=no
|
||||||
|
if test "x$grub_cv_cc_ld_no_pie_oneword" = xyes ; then
|
||||||
|
nopie_oneword_possible=yes
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
dnl Check if the C compiler supports `-fPIC'.
|
dnl Check if the C compiler supports `-fPIC'.
|
||||||
AC_DEFUN([grub_CHECK_PIC],[
|
AC_DEFUN([grub_CHECK_PIC],[
|
||||||
[# Position independent executable.
|
[# Position independent executable.
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/* on arm clang doesn't support .arch directive */
|
||||||
|
|
||||||
|
.text
|
||||||
|
.syntax unified
|
||||||
|
|
||||||
|
#if !defined (__thumb2__)
|
||||||
|
.arch armv7a
|
||||||
|
.arm
|
||||||
|
#else
|
||||||
|
.arch armv7
|
||||||
|
.thumb
|
||||||
|
#endif
|
||||||
|
mcr p15, 0, r11, c7, c14, 2
|
||||||
|
|
||||||
|
/* clang restricts access to dsb/isb despite .arch */
|
||||||
|
dsb
|
||||||
|
isb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/* on x86 old clang doesn't support .code16
|
||||||
|
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
||||||
|
which makes us go over boot sector size.
|
||||||
|
Starting with 3.9 clang emits 3-byte jumps but still creates 8-bytes movl
|
||||||
|
instead of 5-bytes, so code overflows into data. */
|
||||||
|
|
||||||
|
.code16
|
||||||
|
jmp far
|
||||||
|
.org 4
|
||||||
|
jmp nearer
|
||||||
|
.org 6
|
||||||
|
movl nearer, %ebx
|
||||||
|
.org 11
|
||||||
|
.space 100
|
||||||
|
nearer:
|
||||||
|
.space 200
|
||||||
|
far:
|
||||||
|
.byte 0
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
/* on x86 old clang doesn't support .code16 */
|
||||||
|
|
||||||
|
.code16
|
||||||
|
movb %al, %bl
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
/* on mips clang doesn't support privilegied instructions, doubleword store/load
|
||||||
|
and crashes with hand-written assembly
|
||||||
|
*/
|
||||||
|
|
||||||
|
.set mips3
|
||||||
|
sync
|
||||||
|
ld $t2, 0($t1)
|
||||||
|
|
||||||
|
a:
|
||||||
|
addiu $t1, $s0, (b - a)
|
||||||
|
b: nop
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/* clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly
|
||||||
|
used by gcrypt */
|
||||||
|
/* Cache invalidation loop is a fair test. */
|
||||||
|
li 5, 0
|
||||||
|
1: icbi 5, 3
|
||||||
|
addi 5, 5, 32
|
||||||
|
cmpw 5, 4
|
||||||
|
blt 1b
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
.text
|
||||||
|
1:
|
||||||
|
/* A small list of examples of what clang doesn't support. */
|
||||||
|
clr %o0
|
||||||
|
lduw [%o4 + 4], %o4
|
||||||
|
and %o6, ~0xff, %o6
|
||||||
|
stw %o5, [%o3]
|
||||||
|
bne,pt %icc, 1b
|
||||||
|
nop
|
||||||
+9
-6
@@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# Set ${PYTHON} to plain 'python' if not set already
|
||||||
|
: ${PYTHON:=python}
|
||||||
|
|
||||||
export LC_COLLATE=C
|
export LC_COLLATE=C
|
||||||
unset LC_ALL
|
unset LC_ALL
|
||||||
|
|
||||||
@@ -9,10 +12,10 @@ find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './b
|
|||||||
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
|
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
|
||||||
|
|
||||||
echo "Importing unicode..."
|
echo "Importing unicode..."
|
||||||
python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
|
${PYTHON} util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
|
||||||
|
|
||||||
echo "Importing libgcrypt..."
|
echo "Importing libgcrypt..."
|
||||||
python util/import_gcry.py grub-core/lib/libgcrypt/ grub-core
|
${PYTHON} util/import_gcry.py grub-core/lib/libgcrypt/ grub-core
|
||||||
sed -n -f util/import_gcrypth.sed < grub-core/lib/libgcrypt/src/gcrypt.h.in > include/grub/gcrypt/gcrypt.h
|
sed -n -f util/import_gcrypth.sed < grub-core/lib/libgcrypt/src/gcrypt.h.in > include/grub/gcrypt/gcrypt.h
|
||||||
if [ -f include/grub/gcrypt/g10lib.h ]; then
|
if [ -f include/grub/gcrypt/g10lib.h ]; then
|
||||||
rm include/grub/gcrypt/g10lib.h
|
rm include/grub/gcrypt/g10lib.h
|
||||||
@@ -20,14 +23,14 @@ fi
|
|||||||
if [ -d grub-core/lib/libgcrypt-grub/mpi/generic ]; then
|
if [ -d grub-core/lib/libgcrypt-grub/mpi/generic ]; then
|
||||||
rm -rf grub-core/lib/libgcrypt-grub/mpi/generic
|
rm -rf grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
fi
|
fi
|
||||||
ln -s ../../../grub-core/lib/libgcrypt-grub/src/g10lib.h include/grub/gcrypt/g10lib.h
|
cp grub-core/lib/libgcrypt-grub/src/g10lib.h include/grub/gcrypt/g10lib.h
|
||||||
cp -R grub-core/lib/libgcrypt/mpi/generic grub-core/lib/libgcrypt-grub/mpi/generic
|
cp -R grub-core/lib/libgcrypt/mpi/generic grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
|
|
||||||
for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c; do
|
for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c; do
|
||||||
if [ -h grub-core/lib/libgcrypt-grub/mpi/"$x" ] || [ -f grub-core/lib/libgcrypt-grub/mpi/"$x" ]; then
|
if [ -h grub-core/lib/libgcrypt-grub/mpi/"$x" ] || [ -f grub-core/lib/libgcrypt-grub/mpi/"$x" ]; then
|
||||||
rm grub-core/lib/libgcrypt-grub/mpi/"$x"
|
rm grub-core/lib/libgcrypt-grub/mpi/"$x"
|
||||||
fi
|
fi
|
||||||
ln -s generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x"
|
cp grub-core/lib/libgcrypt-grub/mpi/generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Generating Automake input..."
|
echo "Generating Automake input..."
|
||||||
@@ -54,8 +57,8 @@ for extra in contrib/*/Makefile.core.def; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
python gentpl.py $UTIL_DEFS > Makefile.util.am
|
${PYTHON} gentpl.py $UTIL_DEFS > Makefile.util.am
|
||||||
python gentpl.py $CORE_DEFS > grub-core/Makefile.core.am
|
${PYTHON} gentpl.py $CORE_DEFS > grub-core/Makefile.core.am
|
||||||
|
|
||||||
for extra in contrib/*/Makefile.common; do
|
for extra in contrib/*/Makefile.common; do
|
||||||
if test -e "$extra"; then
|
if test -e "$extra"; then
|
||||||
|
|||||||
Executable
+432
@@ -0,0 +1,432 @@
|
|||||||
|
eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
|
||||||
|
& eval 'exec perl -wS "$0" $argv:q'
|
||||||
|
if 0;
|
||||||
|
# Convert git log output to ChangeLog format.
|
||||||
|
|
||||||
|
my $VERSION = '2012-07-29 06:11'; # UTC
|
||||||
|
# The definition above must lie within the first 8 lines in order
|
||||||
|
# for the Emacs time-stamp write hook (at end) to update it.
|
||||||
|
# If you change this file with Emacs, please let the write hook
|
||||||
|
# do its job. Otherwise, update this string manually.
|
||||||
|
|
||||||
|
# Copyright (C) 2008-2014 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Written by Jim Meyering
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Getopt::Long;
|
||||||
|
use POSIX qw(strftime);
|
||||||
|
|
||||||
|
(my $ME = $0) =~ s|.*/||;
|
||||||
|
|
||||||
|
# use File::Coda; # http://meyering.net/code/Coda/
|
||||||
|
END {
|
||||||
|
defined fileno STDOUT or return;
|
||||||
|
close STDOUT and return;
|
||||||
|
warn "$ME: failed to close standard output: $!\n";
|
||||||
|
$? ||= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub usage ($)
|
||||||
|
{
|
||||||
|
my ($exit_code) = @_;
|
||||||
|
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||||
|
if ($exit_code != 0)
|
||||||
|
{
|
||||||
|
print $STREAM "Try '$ME --help' for more information.\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print $STREAM <<EOF;
|
||||||
|
Usage: $ME [OPTIONS] [ARGS]
|
||||||
|
|
||||||
|
Convert git log output to ChangeLog format. If present, any ARGS
|
||||||
|
are passed to "git log". To avoid ARGS being parsed as options to
|
||||||
|
$ME, they may be preceded by '--'.
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
|
||||||
|
--amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
|
||||||
|
makes a change to SHA1's commit log text or metadata.
|
||||||
|
--append-dot append a dot to the first line of each commit message if
|
||||||
|
there is no other punctuation or blank at the end.
|
||||||
|
--no-cluster never cluster commit messages under the same date/author
|
||||||
|
header; the default is to cluster adjacent commit messages
|
||||||
|
if their headers are the same and neither commit message
|
||||||
|
contains multiple paragraphs.
|
||||||
|
--srcdir=DIR the root of the source tree, from which the .git/
|
||||||
|
directory can be derived.
|
||||||
|
--since=DATE convert only the logs since DATE;
|
||||||
|
the default is to convert all log entries.
|
||||||
|
--format=FMT set format string for commit subject and body;
|
||||||
|
see 'man git-log' for the list of format metacharacters;
|
||||||
|
the default is '%s%n%b%n'
|
||||||
|
--strip-tab remove one additional leading TAB from commit message lines.
|
||||||
|
--strip-cherry-pick remove data inserted by "git cherry-pick";
|
||||||
|
this includes the "cherry picked from commit ..." line,
|
||||||
|
and the possible final "Conflicts:" paragraph.
|
||||||
|
--help display this help and exit
|
||||||
|
--version output version information and exit
|
||||||
|
|
||||||
|
EXAMPLE:
|
||||||
|
|
||||||
|
$ME --since=2008-01-01 > ChangeLog
|
||||||
|
$ME -- -n 5 foo > last-5-commits-to-branch-foo
|
||||||
|
|
||||||
|
SPECIAL SYNTAX:
|
||||||
|
|
||||||
|
The following types of strings are interpreted specially when they appear
|
||||||
|
at the beginning of a log message line. They are not copied to the output.
|
||||||
|
|
||||||
|
Copyright-paperwork-exempt: Yes
|
||||||
|
Append the "(tiny change)" notation to the usual "date name email"
|
||||||
|
ChangeLog header to mark a change that does not require a copyright
|
||||||
|
assignment.
|
||||||
|
Co-authored-by: Joe User <user\@example.com>
|
||||||
|
List the specified name and email address on a second
|
||||||
|
ChangeLog header, denoting a co-author.
|
||||||
|
Signed-off-by: Joe User <user\@example.com>
|
||||||
|
These lines are simply elided.
|
||||||
|
|
||||||
|
In a FILE specified via --amend, comment lines (starting with "#") are ignored.
|
||||||
|
FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
|
||||||
|
a line) referring to a commit in the current project, and CODE refers to one
|
||||||
|
or more consecutive lines of Perl code. Pairs must be separated by one or
|
||||||
|
more blank line.
|
||||||
|
|
||||||
|
Here is sample input for use with --amend=FILE, from coreutils:
|
||||||
|
|
||||||
|
3a169f4c5d9159283548178668d2fae6fced3030
|
||||||
|
# fix typo in title:
|
||||||
|
s/all tile types/all file types/
|
||||||
|
|
||||||
|
1379ed974f1fa39b12e2ffab18b3f7a607082202
|
||||||
|
# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
|
||||||
|
# Change the author to be Paul. Note the escaped "@":
|
||||||
|
s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
exit $exit_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
# If the string $S is a well-behaved file name, simply return it.
|
||||||
|
# If it contains white space, quotes, etc., quote it, and return the new string.
|
||||||
|
sub shell_quote($)
|
||||||
|
{
|
||||||
|
my ($s) = @_;
|
||||||
|
if ($s =~ m![^\w+/.,-]!)
|
||||||
|
{
|
||||||
|
# Convert each single quote to '\''
|
||||||
|
$s =~ s/\'/\'\\\'\'/g;
|
||||||
|
# Then single quote the string.
|
||||||
|
$s = "'$s'";
|
||||||
|
}
|
||||||
|
return $s;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub quoted_cmd(@)
|
||||||
|
{
|
||||||
|
return join (' ', map {shell_quote $_} @_);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse file F.
|
||||||
|
# Comment lines (starting with "#") are ignored.
|
||||||
|
# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
|
||||||
|
# (alone on a line) referring to a commit in the current project, and
|
||||||
|
# CODE refers to one or more consecutive lines of Perl code.
|
||||||
|
# Pairs must be separated by one or more blank line.
|
||||||
|
sub parse_amend_file($)
|
||||||
|
{
|
||||||
|
my ($f) = @_;
|
||||||
|
|
||||||
|
open F, '<', $f
|
||||||
|
or die "$ME: $f: failed to open for reading: $!\n";
|
||||||
|
|
||||||
|
my $fail;
|
||||||
|
my $h = {};
|
||||||
|
my $in_code = 0;
|
||||||
|
my $sha;
|
||||||
|
while (defined (my $line = <F>))
|
||||||
|
{
|
||||||
|
$line =~ /^\#/
|
||||||
|
and next;
|
||||||
|
chomp $line;
|
||||||
|
$line eq ''
|
||||||
|
and $in_code = 0, next;
|
||||||
|
|
||||||
|
if (!$in_code)
|
||||||
|
{
|
||||||
|
$line =~ /^([0-9a-fA-F]{40})$/
|
||||||
|
or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
|
||||||
|
$fail = 1, next;
|
||||||
|
$sha = lc $1;
|
||||||
|
$in_code = 1;
|
||||||
|
exists $h->{$sha}
|
||||||
|
and (warn "$ME: $f:$.: duplicate SHA1\n"),
|
||||||
|
$fail = 1, next;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$h->{$sha} ||= '';
|
||||||
|
$h->{$sha} .= "$line\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close F;
|
||||||
|
|
||||||
|
$fail
|
||||||
|
and exit 1;
|
||||||
|
|
||||||
|
return $h;
|
||||||
|
}
|
||||||
|
|
||||||
|
# git_dir_option $SRCDIR
|
||||||
|
#
|
||||||
|
# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
|
||||||
|
# is undef). Return as a list (0 or 1 element).
|
||||||
|
sub git_dir_option($)
|
||||||
|
{
|
||||||
|
my ($srcdir) = @_;
|
||||||
|
my @res = ();
|
||||||
|
if (defined $srcdir)
|
||||||
|
{
|
||||||
|
my $qdir = shell_quote $srcdir;
|
||||||
|
my $cmd = "cd $qdir && git rev-parse --show-toplevel";
|
||||||
|
my $qcmd = shell_quote $cmd;
|
||||||
|
my $git_dir = qx($cmd);
|
||||||
|
defined $git_dir
|
||||||
|
or die "$ME: cannot run $qcmd: $!\n";
|
||||||
|
$? == 0
|
||||||
|
or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
|
||||||
|
chomp $git_dir;
|
||||||
|
push @res, "--git-dir=$git_dir/.git";
|
||||||
|
}
|
||||||
|
@res;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my $since_date;
|
||||||
|
my $format_string = '%s%n%b%n';
|
||||||
|
my $amend_file;
|
||||||
|
my $append_dot = 0;
|
||||||
|
my $cluster = 1;
|
||||||
|
my $strip_tab = 0;
|
||||||
|
my $strip_cherry_pick = 0;
|
||||||
|
my $srcdir;
|
||||||
|
GetOptions
|
||||||
|
(
|
||||||
|
help => sub { usage 0 },
|
||||||
|
version => sub { print "$ME version $VERSION\n"; exit },
|
||||||
|
'since=s' => \$since_date,
|
||||||
|
'format=s' => \$format_string,
|
||||||
|
'amend=s' => \$amend_file,
|
||||||
|
'append-dot' => \$append_dot,
|
||||||
|
'cluster!' => \$cluster,
|
||||||
|
'strip-tab' => \$strip_tab,
|
||||||
|
'strip-cherry-pick' => \$strip_cherry_pick,
|
||||||
|
'srcdir=s' => \$srcdir,
|
||||||
|
) or usage 1;
|
||||||
|
|
||||||
|
defined $since_date
|
||||||
|
and unshift @ARGV, "--since=$since_date";
|
||||||
|
|
||||||
|
# This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
|
||||||
|
# that makes a correction in the log or attribution of that commit.
|
||||||
|
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
|
||||||
|
|
||||||
|
my @cmd = ('git',
|
||||||
|
git_dir_option $srcdir,
|
||||||
|
qw(log --log-size),
|
||||||
|
'--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
|
||||||
|
open PIPE, '-|', @cmd
|
||||||
|
or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
|
||||||
|
. "(Is your Git too old? Version 1.5.1 or later is required.)\n");
|
||||||
|
|
||||||
|
my $prev_multi_paragraph;
|
||||||
|
my $prev_date_line = '';
|
||||||
|
my @prev_coauthors = ();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
defined (my $in = <PIPE>)
|
||||||
|
or last;
|
||||||
|
$in =~ /^log size (\d+)$/
|
||||||
|
or die "$ME:$.: Invalid line (expected log size):\n$in";
|
||||||
|
my $log_nbytes = $1;
|
||||||
|
|
||||||
|
my $log;
|
||||||
|
my $n_read = read PIPE, $log, $log_nbytes;
|
||||||
|
$n_read == $log_nbytes
|
||||||
|
or die "$ME:$.: unexpected EOF\n";
|
||||||
|
|
||||||
|
# Extract leading hash.
|
||||||
|
my ($sha, $rest) = split ':', $log, 2;
|
||||||
|
defined $sha
|
||||||
|
or die "$ME:$.: malformed log entry\n";
|
||||||
|
$sha =~ /^[0-9a-fA-F]{40}$/
|
||||||
|
or die "$ME:$.: invalid SHA1: $sha\n";
|
||||||
|
|
||||||
|
# If this commit's log requires any transformation, do it now.
|
||||||
|
my $code = $amend_code->{$sha};
|
||||||
|
if (defined $code)
|
||||||
|
{
|
||||||
|
eval 'use Safe';
|
||||||
|
my $s = new Safe;
|
||||||
|
# Put the unpreprocessed entry into "$_".
|
||||||
|
$_ = $rest;
|
||||||
|
|
||||||
|
# Let $code operate on it, safely.
|
||||||
|
my $r = $s->reval("$code")
|
||||||
|
or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
|
||||||
|
|
||||||
|
# Note that we've used this entry.
|
||||||
|
delete $amend_code->{$sha};
|
||||||
|
|
||||||
|
# Update $rest upon success.
|
||||||
|
$rest = $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove lines inserted by "git cherry-pick".
|
||||||
|
if ($strip_cherry_pick)
|
||||||
|
{
|
||||||
|
$rest =~ s/^\s*Conflicts:\n.*//sm;
|
||||||
|
$rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @line = split "\n", $rest;
|
||||||
|
my $author_line = shift @line;
|
||||||
|
defined $author_line
|
||||||
|
or die "$ME:$.: unexpected EOF\n";
|
||||||
|
$author_line =~ /^(\d+) (.*>)$/
|
||||||
|
or die "$ME:$.: Invalid line "
|
||||||
|
. "(expected date/author/email):\n$author_line\n";
|
||||||
|
|
||||||
|
# Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
|
||||||
|
# `(tiny change)' annotation.
|
||||||
|
my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
|
||||||
|
? ' (tiny change)' : '');
|
||||||
|
|
||||||
|
my $date_line = sprintf "%s %s$tiny\n",
|
||||||
|
strftime ("%F", localtime ($1)), $2;
|
||||||
|
|
||||||
|
my @coauthors = grep /^Co-authored-by:.*$/, @line;
|
||||||
|
# Omit meta-data lines we've already interpreted.
|
||||||
|
@line = grep !/^(?:Signed-off-by:[ ].*>$
|
||||||
|
|Co-authored-by:[ ]
|
||||||
|
|Copyright-paperwork-exempt:[ ]
|
||||||
|
)/x, @line;
|
||||||
|
|
||||||
|
# Remove leading and trailing blank lines.
|
||||||
|
if (@line)
|
||||||
|
{
|
||||||
|
while ($line[0] =~ /^\s*$/) { shift @line; }
|
||||||
|
while ($line[$#line] =~ /^\s*$/) { pop @line; }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Record whether there are two or more paragraphs.
|
||||||
|
my $multi_paragraph = grep /^\s*$/, @line;
|
||||||
|
|
||||||
|
# Format 'Co-authored-by: A U Thor <email@example.com>' lines in
|
||||||
|
# standard multi-author ChangeLog format.
|
||||||
|
for (@coauthors)
|
||||||
|
{
|
||||||
|
s/^Co-authored-by:\s*/\t /;
|
||||||
|
s/\s*</ </;
|
||||||
|
|
||||||
|
/<.*?@.*\..*>/
|
||||||
|
or warn "$ME: warning: missing email address for "
|
||||||
|
. substr ($_, 5) . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
# If clustering of commit messages has been disabled, if this header
|
||||||
|
# would be different from the previous date/name/email/coauthors header,
|
||||||
|
# or if this or the previous entry consists of two or more paragraphs,
|
||||||
|
# then print the header.
|
||||||
|
if ( ! $cluster
|
||||||
|
|| $date_line ne $prev_date_line
|
||||||
|
|| "@coauthors" ne "@prev_coauthors"
|
||||||
|
|| $multi_paragraph
|
||||||
|
|| $prev_multi_paragraph)
|
||||||
|
{
|
||||||
|
$prev_date_line eq ''
|
||||||
|
or print "\n";
|
||||||
|
print $date_line;
|
||||||
|
@coauthors
|
||||||
|
and print join ("\n", @coauthors), "\n";
|
||||||
|
}
|
||||||
|
$prev_date_line = $date_line;
|
||||||
|
@prev_coauthors = @coauthors;
|
||||||
|
$prev_multi_paragraph = $multi_paragraph;
|
||||||
|
|
||||||
|
# If there were any lines
|
||||||
|
if (@line == 0)
|
||||||
|
{
|
||||||
|
warn "$ME: warning: empty commit message:\n $date_line\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($append_dot)
|
||||||
|
{
|
||||||
|
# If the first line of the message has enough room, then
|
||||||
|
if (length $line[0] < 72)
|
||||||
|
{
|
||||||
|
# append a dot if there is no other punctuation or blank
|
||||||
|
# at the end.
|
||||||
|
$line[0] =~ /[[:punct:]\s]$/
|
||||||
|
or $line[0] .= '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove one additional leading TAB from each line.
|
||||||
|
$strip_tab
|
||||||
|
and map { s/^\t// } @line;
|
||||||
|
|
||||||
|
# Prefix each non-empty line with a TAB.
|
||||||
|
@line = map { length $_ ? "\t$_" : '' } @line;
|
||||||
|
|
||||||
|
print "\n", join ("\n", @line), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
defined ($in = <PIPE>)
|
||||||
|
or last;
|
||||||
|
$in ne "\n"
|
||||||
|
and die "$ME:$.: unexpected line:\n$in";
|
||||||
|
}
|
||||||
|
|
||||||
|
close PIPE
|
||||||
|
or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
|
||||||
|
# FIXME-someday: include $PROCESS_STATUS in the diagnostic
|
||||||
|
|
||||||
|
# Complain about any unused entry in the --amend=F specified file.
|
||||||
|
my $fail = 0;
|
||||||
|
foreach my $sha (keys %$amend_code)
|
||||||
|
{
|
||||||
|
warn "$ME:$amend_file: unused entry: $sha\n";
|
||||||
|
$fail = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit $fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: perl
|
||||||
|
# indent-tabs-mode: nil
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "my $VERSION = '"
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||||
|
# time-stamp-time-zone: "UTC"
|
||||||
|
# time-stamp-end: "'; # UTC"
|
||||||
|
# End:
|
||||||
+11
-18
@@ -7,12 +7,7 @@ unexport LC_ALL
|
|||||||
|
|
||||||
# Platform specific options
|
# Platform specific options
|
||||||
if COND_sparc64_ieee1275
|
if COND_sparc64_ieee1275
|
||||||
CFLAGS_PLATFORM += -mno-app-regs
|
LDFLAGS_PLATFORM = -Wl,-melf64_sparc
|
||||||
LDFLAGS_PLATFORM = -Wl,-melf64_sparc -Wl,--no-relax
|
|
||||||
endif
|
|
||||||
if COND_sparc64_emu
|
|
||||||
CFLAGS_PLATFORM += -mno-app-regs
|
|
||||||
LDFLAGS_PLATFORM = -Wl,--no-relax
|
|
||||||
endif
|
endif
|
||||||
if COND_arm
|
if COND_arm
|
||||||
if !COND_emu
|
if !COND_emu
|
||||||
@@ -22,9 +17,9 @@ endif
|
|||||||
if COND_arm64
|
if COND_arm64
|
||||||
CFLAGS_PLATFORM += -mcmodel=large
|
CFLAGS_PLATFORM += -mcmodel=large
|
||||||
endif
|
endif
|
||||||
|
if COND_powerpc_ieee1275
|
||||||
#FIXME: discover and check XEN headers
|
CFLAGS_PLATFORM += -mcpu=powerpc
|
||||||
CPPFLAGS_XEN = -I/usr/include
|
endif
|
||||||
|
|
||||||
# Other options
|
# Other options
|
||||||
|
|
||||||
@@ -39,21 +34,19 @@ CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/
|
|||||||
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
|
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
|
||||||
BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
|
BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
|
||||||
|
|
||||||
LDADD_KERNEL = $(TARGET_LIBGCC)
|
CFLAGS_KERNEL = $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
|
LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC)
|
||||||
CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
|
|
||||||
LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC)
|
|
||||||
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
||||||
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version
|
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx
|
||||||
|
|
||||||
CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
|
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d
|
LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d
|
||||||
CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
CFLAGS_IMAGE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin
|
CFLAGS_IMAGE = $(CFLAGS_PLATFORM) -fno-builtin
|
||||||
LDFLAGS_IMAGE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S
|
LDFLAGS_IMAGE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S
|
||||||
CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ EXTRA_DIST += gentpl.py
|
|||||||
EXTRA_DIST += Makefile.util.def
|
EXTRA_DIST += Makefile.util.def
|
||||||
EXTRA_DIST += Makefile.utilgcry.def
|
EXTRA_DIST += Makefile.utilgcry.def
|
||||||
|
|
||||||
|
EXTRA_DIST += asm-tests
|
||||||
EXTRA_DIST += unicode
|
EXTRA_DIST += unicode
|
||||||
|
|
||||||
EXTRA_DIST += util/import_gcry.py
|
EXTRA_DIST += util/import_gcry.py
|
||||||
@@ -36,7 +37,6 @@ EXTRA_DIST += grub-core/lib/libgcrypt
|
|||||||
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h')
|
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h')
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/gnulib -name '*.h')
|
|
||||||
EXTRA_DIST += grub-core/efiemu/runtime/config.h
|
EXTRA_DIST += grub-core/efiemu/runtime/config.h
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/LzmaDec.c
|
EXTRA_DIST += grub-core/lib/LzmaDec.c
|
||||||
@@ -50,8 +50,13 @@ EXTRA_DIST += util/import_gcrypth.sed
|
|||||||
EXTRA_DIST += util/bin2h.c
|
EXTRA_DIST += util/bin2h.c
|
||||||
EXTRA_DIST += util/grub-gen-asciih.c
|
EXTRA_DIST += util/grub-gen-asciih.c
|
||||||
EXTRA_DIST += util/grub-gen-widthspec.c
|
EXTRA_DIST += util/grub-gen-widthspec.c
|
||||||
|
EXTRA_DIST += util/grub-module-verifier.c
|
||||||
|
EXTRA_DIST += util/grub-module-verifier32.c
|
||||||
|
EXTRA_DIST += util/grub-module-verifier64.c
|
||||||
|
EXTRA_DIST += util/grub-module-verifierXX.c
|
||||||
EXTRA_DIST += util/grub-pe2elf.c
|
EXTRA_DIST += util/grub-pe2elf.c
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST += m4/gnulib-cache.m4
|
EXTRA_DIST += m4/gnulib-cache.m4
|
||||||
EXTRA_DIST += m4/glibc2.m4
|
EXTRA_DIST += m4/glibc2.m4
|
||||||
EXTRA_DIST += m4/gnulib-tool.m4
|
EXTRA_DIST += m4/gnulib-tool.m4
|
||||||
@@ -110,3 +115,26 @@ EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz
|
|||||||
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
||||||
|
|
||||||
EXTRA_DIST += coreboot.cfg
|
EXTRA_DIST += coreboot.cfg
|
||||||
|
|
||||||
|
EXTRA_DIST += tests/file_filter/file
|
||||||
|
EXTRA_DIST += tests/file_filter/file.gz
|
||||||
|
EXTRA_DIST += tests/file_filter/file.gz.sig
|
||||||
|
EXTRA_DIST += tests/file_filter/file.lzop
|
||||||
|
EXTRA_DIST += tests/file_filter/file.lzop.sig
|
||||||
|
EXTRA_DIST += tests/file_filter/file.xz
|
||||||
|
EXTRA_DIST += tests/file_filter/file.xz.sig
|
||||||
|
EXTRA_DIST += tests/file_filter/keys
|
||||||
|
EXTRA_DIST += tests/file_filter/keys.pub
|
||||||
|
EXTRA_DIST += tests/file_filter/test.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/prompt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/txt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/menu.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/po4a.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04_grub.cfg.in
|
||||||
+9
-4
@@ -7,11 +7,20 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GCRYPT_NO_DEPRECATED 1
|
#define GCRYPT_NO_DEPRECATED 1
|
||||||
|
#define HAVE_MEMMOVE 1
|
||||||
|
|
||||||
/* Define to 1 to enable disk cache statistics. */
|
/* Define to 1 to enable disk cache statistics. */
|
||||||
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
|
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
|
||||||
#define BOOT_TIME_STATS @BOOT_TIME_STATS@
|
#define BOOT_TIME_STATS @BOOT_TIME_STATS@
|
||||||
|
|
||||||
|
/* We don't need those. */
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_PTR 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_UTIL 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_STRING 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_INIT 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO1X_1_COMPRESS 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO1X_DECOMPRESS 1
|
||||||
|
|
||||||
#if defined (GRUB_BUILD)
|
#if defined (GRUB_BUILD)
|
||||||
#undef ENABLE_NLS
|
#undef ENABLE_NLS
|
||||||
#define BUILD_SIZEOF_LONG @BUILD_SIZEOF_LONG@
|
#define BUILD_SIZEOF_LONG @BUILD_SIZEOF_LONG@
|
||||||
@@ -31,10 +40,6 @@
|
|||||||
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
||||||
/* Define if C symbols get an underscore after compilation. */
|
/* Define if C symbols get an underscore after compilation. */
|
||||||
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
||||||
/* Define it to \"addr32\" or \"addr32;\" to make GAS happy. */
|
|
||||||
#define ADDR32 @ADDR32@
|
|
||||||
/* Define it to \"data32\" or \"data32;\" to make GAS happy. */
|
|
||||||
#define DATA32 @DATA32@
|
|
||||||
/* Define it to one of __bss_start, edata and _edata. */
|
/* Define it to one of __bss_start, edata and _edata. */
|
||||||
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
||||||
/* Define it to either end or _end. */
|
/* Define it to either end or _end. */
|
||||||
|
|||||||
+480
-236
File diff suppressed because it is too large.
Load diff
+7
-7
@@ -108,16 +108,16 @@ The branches available are:
|
|||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item master
|
@item master
|
||||||
Main developpement branch.
|
Main development branch.
|
||||||
@item grub-legacy
|
@item grub-legacy
|
||||||
GRUB 0.97 codebase. Kept for reference and legal reasons
|
GRUB 0.97 codebase. Kept for reference and legal reasons
|
||||||
@item multiboot
|
@item multiboot
|
||||||
Multiboot specfication
|
Multiboot specfication
|
||||||
@item multiboot2
|
@item multiboot2
|
||||||
Multiboot2 specfication
|
Multiboot2 specfication
|
||||||
@item developper branches
|
@item developer branches
|
||||||
Prefixed with developper name. Every developper of a team manages his own branches.
|
Prefixed with developer name. Every developer of a team manages his own branches.
|
||||||
Developper branches do not need changelog entries.
|
Developer branches do not need changelog entries.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
Once you have used @kbd{git clone} to fetch an initial copy of a branch, you
|
Once you have used @kbd{git clone} to fetch an initial copy of a branch, you
|
||||||
@@ -228,12 +228,12 @@ The opening @samp{/*} and closing @samp{*/} should be placed together on a line
|
|||||||
Here is a brief map of the GRUB code base.
|
Here is a brief map of the GRUB code base.
|
||||||
|
|
||||||
GRUB uses Autoconf and Automake, with most of the Automake input generated
|
GRUB uses Autoconf and Automake, with most of the Automake input generated
|
||||||
by AutoGen. The top-level build rules are in @file{configure.ac},
|
by a Python script. The top-level build rules are in @file{configure.ac},
|
||||||
@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each
|
@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each
|
||||||
block in a @file{*.def} file represents a build target, and specifies the
|
block in a @file{*.def} file represents a build target, and specifies the
|
||||||
source files used to build it on various platforms. The @file{*.def} files
|
source files used to build it on various platforms. The @file{*.def} files
|
||||||
are processed into AutoGen input by @file{gentpl.py} (which you only need to
|
are processed into Automake input by @file{gentpl.py} (which you only need
|
||||||
look at if you are extending the build system). If you are adding a new
|
to look at if you are extending the build system). If you are adding a new
|
||||||
module which follows an existing pattern, such as a new command or a new
|
module which follows an existing pattern, such as a new command or a new
|
||||||
filesystem implementation, it is usually easiest to grep
|
filesystem implementation, it is usually easiest to grep
|
||||||
@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an
|
@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an
|
||||||
|
|||||||
+134
-39
@@ -2446,6 +2446,10 @@ The boot file name provided by DHCP. Read-only.
|
|||||||
The name of the DHCP server responsible for these boot parameters.
|
The name of the DHCP server responsible for these boot parameters.
|
||||||
Read-only.
|
Read-only.
|
||||||
|
|
||||||
|
@item net_@var{<interface>}_next_server
|
||||||
|
The IP address of the next (usually, TFTP) server provided by DHCP.
|
||||||
|
Read-only.
|
||||||
|
|
||||||
@item net_default_interface
|
@item net_default_interface
|
||||||
Initially set to name of network interface that was used to load grub.
|
Initially set to name of network interface that was used to load grub.
|
||||||
Read-write, although setting it affects only interpretation of
|
Read-write, although setting it affects only interpretation of
|
||||||
@@ -2538,6 +2542,8 @@ team are:
|
|||||||
85:3
|
85:3
|
||||||
@item Asus EeePC 1005PE
|
@item Asus EeePC 1005PE
|
||||||
84:1 (unconfirmed)
|
84:1 (unconfirmed)
|
||||||
|
@item LENOVO ThinkPad T410s (2912W1C)
|
||||||
|
101:3
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
To take full advantage of this function, install GRUB into the MBR
|
To take full advantage of this function, install GRUB into the MBR
|
||||||
@@ -3038,6 +3044,8 @@ These variables have special meaning to GRUB.
|
|||||||
* cmdpath::
|
* cmdpath::
|
||||||
* color_highlight::
|
* color_highlight::
|
||||||
* color_normal::
|
* color_normal::
|
||||||
|
* config_directory::
|
||||||
|
* config_file::
|
||||||
* debug::
|
* debug::
|
||||||
* default::
|
* default::
|
||||||
* fallback::
|
* fallback::
|
||||||
@@ -3058,6 +3066,7 @@ These variables have special meaning to GRUB.
|
|||||||
* net_@var{<interface>}_hostname::
|
* net_@var{<interface>}_hostname::
|
||||||
* net_@var{<interface>}_ip::
|
* net_@var{<interface>}_ip::
|
||||||
* net_@var{<interface>}_mac::
|
* net_@var{<interface>}_mac::
|
||||||
|
* net_@var{<interface>}_next_server::
|
||||||
* net_@var{<interface>}_rootpath::
|
* net_@var{<interface>}_rootpath::
|
||||||
* net_default_interface::
|
* net_default_interface::
|
||||||
* net_default_ip::
|
* net_default_ip::
|
||||||
@@ -3180,6 +3189,22 @@ matching colors of first half.
|
|||||||
to support whole rgb24 palette but currently there is no compelling reason
|
to support whole rgb24 palette but currently there is no compelling reason
|
||||||
to go beyond the current 16 colors.
|
to go beyond the current 16 colors.
|
||||||
|
|
||||||
|
|
||||||
|
@node config_directory
|
||||||
|
@subsection config_directory
|
||||||
|
|
||||||
|
This variable is automatically set by GRUB to the directory part of
|
||||||
|
current configuration file name (@pxref{config_file}).
|
||||||
|
|
||||||
|
|
||||||
|
@node config_file
|
||||||
|
@subsection config_file
|
||||||
|
|
||||||
|
This variable is automatically set by GRUB to the name of configuration file that is being
|
||||||
|
processed by commands @command{configfile} (@pxref{configfile}) or @command{normal}
|
||||||
|
(@pxref{normal}). It is restored to the previous value when command completes.
|
||||||
|
|
||||||
|
|
||||||
@node debug
|
@node debug
|
||||||
@subsection debug
|
@subsection debug
|
||||||
|
|
||||||
@@ -3193,9 +3218,10 @@ source for more details.
|
|||||||
@node default
|
@node default
|
||||||
@subsection default
|
@subsection default
|
||||||
|
|
||||||
If this variable is set, it identifies a menu entry that should be selected
|
If this variable is set, it identifies a menu entry that should be
|
||||||
by default, possibly after a timeout (@pxref{timeout}). The entry may be
|
selected by default, possibly after a timeout (@pxref{timeout}). The
|
||||||
identified by number or by id.
|
entry may be identified by number (starting from 0 at each level of
|
||||||
|
the hierarchy), by title, or by id.
|
||||||
|
|
||||||
For example, if you have:
|
For example, if you have:
|
||||||
|
|
||||||
@@ -3211,24 +3237,26 @@ then you can make this the default using:
|
|||||||
default=example-gnu-linux
|
default=example-gnu-linux
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
If the entry is in a submenu, then it must be identified using the titles of
|
If the entry is in a submenu, then it must be identified using the
|
||||||
each of the submenus starting from the top level followed by the number or
|
number, title, or id of each of the submenus starting from the top
|
||||||
title of the menu entry itself, separated by @samp{>}. For example, take
|
level, followed by the number, title, or id of the menu entry itself,
|
||||||
the following menu structure:
|
with each element separated by @samp{>}. For example, take the
|
||||||
|
following menu structure:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
Submenu 1
|
GNU/Hurd --id gnu-hurd
|
||||||
Menu Entry 1
|
Standard Boot --id=gnu-hurd-std
|
||||||
Menu Entry 2
|
Rescue shell --id=gnu-hurd-rescue
|
||||||
Submenu 2
|
Other platforms --id=other
|
||||||
Submenu 3
|
Minix --id=minix
|
||||||
Menu Entry 3
|
Version 3.4.0 --id=minix-3.4.0
|
||||||
Menu Entry 4
|
Version 3.3.0 --id=minix-3.3.0
|
||||||
Menu Entry 5
|
GRUB Invaders --id=grub-invaders
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
``Menu Entry 3'' would then be identified as
|
The more recent release of Minix would then be identified as
|
||||||
@samp{Submenu 2>Submenu 3>Menu Entry 3}.
|
@samp{Other platforms>Minix>Version 3.4.0}, or as @samp{1>0>0}, or as
|
||||||
|
@samp{other>minix>minix-3.4.0}.
|
||||||
|
|
||||||
This variable is often set by @samp{GRUB_DEFAULT} (@pxref{Simple
|
This variable is often set by @samp{GRUB_DEFAULT} (@pxref{Simple
|
||||||
configuration}), @command{grub-set-default}, or @command{grub-reboot}.
|
configuration}), @command{grub-set-default}, or @command{grub-reboot}.
|
||||||
@@ -3402,6 +3430,12 @@ The default is the value of @samp{color_normal} (@pxref{color_normal}).
|
|||||||
@xref{Network}.
|
@xref{Network}.
|
||||||
|
|
||||||
|
|
||||||
|
@node net_@var{<interface>}_next_server
|
||||||
|
@subsection net_@var{<interface>}_next_server
|
||||||
|
|
||||||
|
@xref{Network}.
|
||||||
|
|
||||||
|
|
||||||
@node net_@var{<interface>}_rootpath
|
@node net_@var{<interface>}_rootpath
|
||||||
@subsection net_@var{<interface>}_rootpath
|
@subsection net_@var{<interface>}_rootpath
|
||||||
|
|
||||||
@@ -3839,6 +3873,11 @@ you forget a command, you can run the command @command{help}
|
|||||||
@comment * vbeinfo:: List available video modes
|
@comment * vbeinfo:: List available video modes
|
||||||
* verify_detached:: Verify detached digital signature
|
* verify_detached:: Verify detached digital signature
|
||||||
* videoinfo:: List available video modes
|
* videoinfo:: List available video modes
|
||||||
|
@comment * xen_*:: Xen boot commands
|
||||||
|
* xen_hypervisor:: Load xen hypervisor binary
|
||||||
|
* xen_linux:: Load dom0 kernel for xen hypervisor
|
||||||
|
* xen_initrd:: Load dom0 initrd for dom0 kernel
|
||||||
|
* xen_xsm:: Load xen security module for xen hypervisor
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
@@ -4050,12 +4089,15 @@ after @command{configfile} returns.
|
|||||||
@node cpuid
|
@node cpuid
|
||||||
@subsection cpuid
|
@subsection cpuid
|
||||||
|
|
||||||
@deffn Command cpuid [-l]
|
@deffn Command cpuid [-l] [-p]
|
||||||
Check for CPU features. This command is only available on x86 systems.
|
Check for CPU features. This command is only available on x86 systems.
|
||||||
|
|
||||||
With the @option{-l} option, return true if the CPU supports long mode
|
With the @option{-l} option, return true if the CPU supports long mode
|
||||||
(64-bit).
|
(64-bit).
|
||||||
|
|
||||||
|
With the @option{-p} option, return true if the CPU supports Physical
|
||||||
|
Address Extension (PAE).
|
||||||
|
|
||||||
If invoked without options, this command currently behaves as if it had been
|
If invoked without options, this command currently behaves as if it had been
|
||||||
invoked with @option{-l}. This may change in the future.
|
invoked with @option{-l}. This may change in the future.
|
||||||
@end deffn
|
@end deffn
|
||||||
@@ -5019,6 +5061,8 @@ the length of @var{string} is zero
|
|||||||
@var{expression} is false
|
@var{expression} is false
|
||||||
@item @var{expression1} @code{-a} @var{expression2}
|
@item @var{expression1} @code{-a} @var{expression2}
|
||||||
both @var{expression1} and @var{expression2} are true
|
both @var{expression1} and @var{expression2} are true
|
||||||
|
@item @var{expression1} @var{expression2}
|
||||||
|
both @var{expression1} and @var{expression2} are true. This syntax is not POSIX-compliant and is not recommended.
|
||||||
@item @var{expression1} @code{-o} @var{expression2}
|
@item @var{expression1} @code{-o} @var{expression2}
|
||||||
either @var{expression1} or @var{expression2} is true
|
either @var{expression1} or @var{expression2} is true
|
||||||
@end table
|
@end table
|
||||||
@@ -5102,6 +5146,39 @@ successfully. If validation fails, it is set to a non-zero value.
|
|||||||
List available video modes. If resolution is given, show only matching modes.
|
List available video modes. If resolution is given, show only matching modes.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@node xen_hypervisor
|
||||||
|
@subsection xen_hypervisor
|
||||||
|
|
||||||
|
@deffn Command xen_hypervisor file [arguments] @dots{}
|
||||||
|
Load a Xen hypervisor binary from @var{file}. The rest of the line is passed
|
||||||
|
verbatim as the @dfn{kernel command-line}. Any other binaries must be
|
||||||
|
reloaded after using this command.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@node xen_linux
|
||||||
|
@subsection xen_linux
|
||||||
|
|
||||||
|
@deffn Command xen_linux file [arguments]
|
||||||
|
Load a dom0 kernel image for xen hypervisor at the booting process of xen.
|
||||||
|
The rest of the line is passed verbatim as the module command line.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@node xen_initrd
|
||||||
|
@subsection xen_initrd
|
||||||
|
|
||||||
|
@deffn Command xen_initrd file
|
||||||
|
Load a initrd image for dom0 kernel at the booting process of xen.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
@node xen_xsm
|
||||||
|
@subsection xen_xsm
|
||||||
|
|
||||||
|
@deffn Command xen_xsm file
|
||||||
|
Load a xen security module for xen hypervisor at the booting process of xen.
|
||||||
|
See @uref{http://wiki.xen.org/wiki/XSM} for more detail.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
|
|
||||||
@node Networking commands
|
@node Networking commands
|
||||||
@section The list of networking commands
|
@section The list of networking commands
|
||||||
|
|
||||||
@@ -5162,8 +5239,10 @@ by @var{shortname} which can be used to remove it (@pxref{net_del_route}).
|
|||||||
Perform configuration of @var{card} using DHCP protocol. If no card name
|
Perform configuration of @var{card} using DHCP protocol. If no card name
|
||||||
is specified, try to configure all existing cards. If configuration was
|
is specified, try to configure all existing cards. If configuration was
|
||||||
successful, interface with name @var{card}@samp{:dhcp} and configured
|
successful, interface with name @var{card}@samp{:dhcp} and configured
|
||||||
address is added to @var{card}. If server provided gateway information in
|
address is added to @var{card}.
|
||||||
DHCP ACK packet, it is added as route entry with the name @var{card}@samp{:dhcp:gw}. Additionally the following DHCP options are recognized and processed:
|
@comment If server provided gateway information in
|
||||||
|
@comment DHCP ACK packet, it is added as route entry with the name @var{card}@samp{:dhcp:gw}.
|
||||||
|
Additionally the following DHCP options are recognized and processed:
|
||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item 1 (Subnet Mask)
|
@item 1 (Subnet Mask)
|
||||||
@@ -5426,10 +5505,12 @@ In order to enable authentication support, the @samp{superusers} environment
|
|||||||
variable must be set to a list of usernames, separated by any of spaces,
|
variable must be set to a list of usernames, separated by any of spaces,
|
||||||
commas, semicolons, pipes, or ampersands. Superusers are permitted to use
|
commas, semicolons, pipes, or ampersands. Superusers are permitted to use
|
||||||
the GRUB command line, edit menu entries, and execute any menu entry. If
|
the GRUB command line, edit menu entries, and execute any menu entry. If
|
||||||
@samp{superusers} is set, then use of the command line is automatically
|
@samp{superusers} is set, then use of the command line and editing of menu
|
||||||
restricted to superusers.
|
entries are automatically restricted to superusers. Setting @samp{superusers}
|
||||||
|
to empty string effectively disables both access to CLI and editing of menu
|
||||||
|
entries.
|
||||||
|
|
||||||
Other users may be given access to specific menu entries by giving a list of
|
Other users may be allowed to execute specific menu entries by giving a list of
|
||||||
usernames (as above) using the @option{--users} option to the
|
usernames (as above) using the @option{--users} option to the
|
||||||
@samp{menuentry} command (@pxref{menuentry}). If the @option{--unrestricted}
|
@samp{menuentry} command (@pxref{menuentry}). If the @option{--unrestricted}
|
||||||
option is used for a menu entry, then that entry is unrestricted.
|
option is used for a menu entry, then that entry is unrestricted.
|
||||||
@@ -5609,6 +5690,16 @@ BadRAM is the ability to mark some of the RAM as ``bad''. Note: due to protocol
|
|||||||
limitations mips-loongson (with Linux protocol)
|
limitations mips-loongson (with Linux protocol)
|
||||||
and mips-qemu_mips can use only memory up to first hole.
|
and mips-qemu_mips can use only memory up to first hole.
|
||||||
|
|
||||||
|
Bootlocation is ability of GRUB to automatically detect where it boots from.
|
||||||
|
``disk'' means the detection is limited to detecting the disk with partition
|
||||||
|
being discovered on install time. ``partition'' means that disk and partiton
|
||||||
|
can be automatically discovered. ``file'' means that boot image file name as
|
||||||
|
well as disk and partition can be discovered. For consistency default install ignores
|
||||||
|
partition and relies solely on disk detection. If no bootlocation discovery is available
|
||||||
|
or boot and grub-root disks are different, UUID is used instead. On ARC if no device
|
||||||
|
to install to is specified, UUID is used instead as well.
|
||||||
|
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@item @tab BIOS @tab Coreboot @tab Multiboot @tab Qemu
|
@item @tab BIOS @tab Coreboot @tab Multiboot @tab Qemu
|
||||||
@item video @tab yes @tab yes @tab yes @tab yes
|
@item video @tab yes @tab yes @tab yes @tab yes
|
||||||
@@ -5625,6 +5716,7 @@ and mips-qemu_mips can use only memory up to first hole.
|
|||||||
@item badram @tab yes @tab yes @tab yes @tab yes
|
@item badram @tab yes @tab yes @tab yes @tab yes
|
||||||
@item compression @tab always @tab pointless @tab no @tab no
|
@item compression @tab always @tab pointless @tab no @tab no
|
||||||
@item exit @tab yes @tab no @tab no @tab no
|
@item exit @tab yes @tab no @tab no @tab no
|
||||||
|
@item bootlocation @tab disk @tab no @tab no @tab no
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@@ -5643,6 +5735,7 @@ and mips-qemu_mips can use only memory up to first hole.
|
|||||||
@item badram @tab yes @tab yes @tab no @tab yes
|
@item badram @tab yes @tab yes @tab no @tab yes
|
||||||
@item compression @tab no @tab no @tab no @tab no
|
@item compression @tab no @tab no @tab no @tab no
|
||||||
@item exit @tab yes @tab yes @tab yes @tab yes
|
@item exit @tab yes @tab yes @tab yes @tab yes
|
||||||
|
@item bootlocation @tab file @tab file @tab file, ignored @tab file
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@@ -5661,24 +5754,26 @@ and mips-qemu_mips can use only memory up to first hole.
|
|||||||
@item badram @tab yes (*) @tab no @tab no @tab no
|
@item badram @tab yes (*) @tab no @tab no @tab no
|
||||||
@item compression @tab configurable @tab no @tab no @tab configurable
|
@item compression @tab configurable @tab no @tab no @tab configurable
|
||||||
@item exit @tab no @tab yes @tab yes @tab yes
|
@item exit @tab no @tab yes @tab yes @tab yes
|
||||||
|
@item bootlocation @tab no @tab partition @tab file @tab file (*)
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@item @tab MIPS qemu @tab emu
|
@item @tab MIPS qemu @tab emu @tab xen
|
||||||
@item video @tab no @tab yes
|
@item video @tab no @tab yes @tab no
|
||||||
@item console charset @tab CP437 @tab Unicode (*)
|
@item console charset @tab CP437 @tab Unicode (*) @tab ASCII
|
||||||
@item network @tab no @tab yes
|
@item network @tab no @tab yes @tab no
|
||||||
@item ATA/AHCI @tab yes @tab no
|
@item ATA/AHCI @tab yes @tab no @tab no
|
||||||
@item AT keyboard @tab yes @tab no
|
@item AT keyboard @tab yes @tab no @tab no
|
||||||
@item Speaker @tab no @tab no
|
@item Speaker @tab no @tab no @tab no
|
||||||
@item USB @tab N/A @tab yes
|
@item USB @tab N/A @tab yes @tab no
|
||||||
@item chainloader @tab yes @tab no
|
@item chainloader @tab yes @tab no @tab yes
|
||||||
@item cpuid @tab no @tab no
|
@item cpuid @tab no @tab no @tab yes
|
||||||
@item hints @tab guess @tab no
|
@item hints @tab guess @tab no @tab no
|
||||||
@item PCI @tab no @tab no
|
@item PCI @tab no @tab no @tab no
|
||||||
@item badram @tab yes (*) @tab no
|
@item badram @tab yes (*) @tab no @tab no
|
||||||
@item compression @tab configurable @tab no
|
@item compression @tab configurable @tab no @tab no
|
||||||
@item exit @tab no @tab yes
|
@item exit @tab no @tab yes @tab no
|
||||||
|
@item bootlocation @tab no @tab file @tab no
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@node Platform-specific operations
|
@node Platform-specific operations
|
||||||
@@ -5848,7 +5943,7 @@ Following variables must be defined:
|
|||||||
|
|
||||||
@multitable @columnfractions .30 .65
|
@multitable @columnfractions .30 .65
|
||||||
@item GRUB_PAYLOADS_DIR @tab directory containing the required kernels
|
@item GRUB_PAYLOADS_DIR @tab directory containing the required kernels
|
||||||
@item GRUB_CBFSTOOL @tab cbfstoll from Coreboot package (for coreboot platform only)
|
@item GRUB_CBFSTOOL @tab cbfstool from Coreboot package (for coreboot platform only)
|
||||||
@item GRUB_COREBOOT_ROM @tab empty Coreboot ROM
|
@item GRUB_COREBOOT_ROM @tab empty Coreboot ROM
|
||||||
@item GRUB_QEMU_OPTS @tab additional options to be supplied to QEMU
|
@item GRUB_QEMU_OPTS @tab additional options to be supplied to QEMU
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|||||||
@@ -76,7 +76,13 @@ for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
|
|||||||
# Flattened Device Trees (FDT)
|
# Flattened Device Trees (FDT)
|
||||||
GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi" ]
|
GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi" ]
|
||||||
|
|
||||||
# Miscelaneous groups schedulded to disappear in future
|
# Needs software helpers for division
|
||||||
|
# Must match GRUB_DIVISION_IN_SOFTWARE in misc.h
|
||||||
|
GROUPS["softdiv"] = GROUPS["arm"] + ["ia64_efi"]
|
||||||
|
GROUPS["no_softdiv"] = GRUB_PLATFORMS[:]
|
||||||
|
for i in GROUPS["softdiv"]: GROUPS["no_softdiv"].remove(i)
|
||||||
|
|
||||||
|
# Miscellaneous groups scheduled to disappear in future
|
||||||
GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"]
|
GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"]
|
||||||
GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc")
|
GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc")
|
||||||
|
|
||||||
@@ -600,7 +606,7 @@ def foreach_enabled_platform(defn, closure):
|
|||||||
# enable = emu;
|
# enable = emu;
|
||||||
# enable = i386;
|
# enable = i386;
|
||||||
# enable = mips_loongson;
|
# enable = mips_loongson;
|
||||||
# emu_condition = COND_GRUB_EMU_USB;
|
# emu_condition = COND_GRUB_EMU_SDL;
|
||||||
# };
|
# };
|
||||||
#
|
#
|
||||||
def under_platform_specific_conditionals(defn, platform, closure):
|
def under_platform_specific_conditionals(defn, platform, closure):
|
||||||
@@ -723,9 +729,11 @@ def kernel(defn, platform):
|
|||||||
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \
|
$(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \
|
||||||
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \
|
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \
|
||||||
|
rm -f $@.bin; \
|
||||||
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
|
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
|
||||||
""" + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \
|
""" + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \
|
||||||
$(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \
|
$(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \
|
||||||
|
rm -f $@.bin; \
|
||||||
else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \
|
else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \
|
||||||
fi"""))
|
fi"""))
|
||||||
|
|
||||||
@@ -753,7 +761,7 @@ def image(defn, platform):
|
|||||||
if test x$(TARGET_APPLE_LINKER) = x1; then \
|
if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(MACHO2IMG) $< $@; \
|
$(MACHO2IMG) $< $@; \
|
||||||
else \
|
else \
|
||||||
$(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@; \
|
$(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; \
|
||||||
fi
|
fi
|
||||||
""")
|
""")
|
||||||
|
|
||||||
@@ -828,6 +836,20 @@ def data(defn, platform):
|
|||||||
var_add("dist_" + installdir(defn) + "_DATA", platform_sources(defn, platform))
|
var_add("dist_" + installdir(defn) + "_DATA", platform_sources(defn, platform))
|
||||||
gvar_add("dist_noinst_DATA", extra_dist(defn))
|
gvar_add("dist_noinst_DATA", extra_dist(defn))
|
||||||
|
|
||||||
|
def transform_data(defn, platform):
|
||||||
|
name = defn['name']
|
||||||
|
|
||||||
|
var_add(installdir(defn) + "_DATA", name)
|
||||||
|
|
||||||
|
rule(name, "$(top_builddir)/config.status " + platform_sources(defn, platform) + platform_dependencies(defn, platform), """
|
||||||
|
(for x in """ + platform_sources(defn, platform) + """; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:-
|
||||||
|
chmod a+x """ + name + """
|
||||||
|
""")
|
||||||
|
|
||||||
|
gvar_add("CLEANFILES", name)
|
||||||
|
gvar_add("EXTRA_DIST", extra_dist(defn))
|
||||||
|
gvar_add("dist_noinst_DATA", platform_sources(defn, platform))
|
||||||
|
|
||||||
def script(defn, platform):
|
def script(defn, platform):
|
||||||
name = defn['name']
|
name = defn['name']
|
||||||
|
|
||||||
@@ -875,6 +897,7 @@ rules("library", library)
|
|||||||
rules("program", program)
|
rules("program", program)
|
||||||
rules("script", script)
|
rules("script", script)
|
||||||
rules("data", data)
|
rules("data", data)
|
||||||
|
rules("transform_data", transform_data)
|
||||||
|
|
||||||
write_output(section='decl')
|
write_output(section='decl')
|
||||||
write_output()
|
write_output()
|
||||||
+34
-20
@@ -26,20 +26,26 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin
|
|||||||
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
build-grub-pep2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
build-grub-pep2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
|
||||||
|
CLEANFILES += build-grub-pep2elf$(BUILD_EXEEXT)
|
||||||
|
|
||||||
build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
build-grub-pe2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
|
||||||
|
CLEANFILES += build-grub-pe2elf$(BUILD_EXEEXT)
|
||||||
|
|
||||||
# gentrigtables
|
# gentrigtables
|
||||||
gentrigtables: gentrigtables.c
|
gentrigtables$(BUILD_EXEEXT): gentrigtables.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< $(BUILD_LIBM)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM)
|
||||||
CLEANFILES += gentrigtables
|
CLEANFILES += gentrigtables$(BUILD_EXEEXT)
|
||||||
|
|
||||||
|
build-grub-module-verifier$(BUILD_EXEEXT): $(top_srcdir)/util/grub-module-verifier.c $(top_srcdir)/util/grub-module-verifier32.c $(top_srcdir)/util/grub-module-verifier64.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
||||||
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-module-verifier\" $^
|
||||||
|
CLEANFILES += build-grub-module-verifier$(BUILD_EXEEXT)
|
||||||
|
|
||||||
# trigtables.c
|
# trigtables.c
|
||||||
trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac
|
trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac
|
||||||
./gentrigtables > $@
|
./gentrigtables$(BUILD_EXEEXT) > $@
|
||||||
CLEANFILES += trigtables.c
|
CLEANFILES += trigtables.c
|
||||||
|
|
||||||
# XXX Use Automake's LEX & YACC support
|
# XXX Use Automake's LEX & YACC support
|
||||||
@@ -74,6 +80,11 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
|
||||||
|
if COND_emu
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt-emu.h
|
||||||
|
else
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt.h
|
||||||
|
endif
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
|
||||||
@@ -81,9 +92,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
|
||||||
if !COND_clang
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h
|
|
||||||
endif
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
|
||||||
|
|
||||||
if COND_i386_pc
|
if COND_i386_pc
|
||||||
@@ -97,7 +105,9 @@ if COND_i386_efi
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
@@ -108,10 +118,12 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_multiboot
|
if COND_i386_multiboot
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_qemu
|
if COND_i386_qemu
|
||||||
@@ -150,11 +162,14 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_ia64_efi
|
if COND_ia64_efi
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_mips
|
if COND_mips
|
||||||
@@ -229,11 +244,13 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/efi/loader.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_arm64_efi
|
if COND_arm64_efi
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_emu
|
if COND_emu
|
||||||
@@ -246,9 +263,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
|||||||
if COND_GRUB_EMU_SDL
|
if COND_GRUB_EMU_SDL
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h
|
||||||
endif
|
endif
|
||||||
if COND_GRUB_EMU_USB
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libusb.h
|
|
||||||
endif
|
|
||||||
if COND_GRUB_EMU_PCI
|
if COND_GRUB_EMU_PCI
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h
|
||||||
endif
|
endif
|
||||||
@@ -292,12 +306,12 @@ grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
|||||||
kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h
|
kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h
|
||||||
grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
||||||
|
|
||||||
grub_emu_init.h: genemuinitheader.sh $(MOD_FILES)
|
grub_emu_init.h: genemuinitheader.sh $(MODULE_FILES)
|
||||||
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@
|
rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@
|
||||||
CLEANFILES += grub_emu_init.h
|
CLEANFILES += grub_emu_init.h
|
||||||
|
|
||||||
grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES)
|
grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MODULE_FILES)
|
||||||
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@
|
rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@
|
||||||
CLEANFILES += grub_emu_init.c
|
CLEANFILES += grub_emu_init.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -382,7 +396,7 @@ moddep.lst: syminfo.lst genmoddep.awk video.lst
|
|||||||
platform_DATA += moddep.lst
|
platform_DATA += moddep.lst
|
||||||
CLEANFILES += config.log syminfo.lst moddep.lst
|
CLEANFILES += config.log syminfo.lst moddep.lst
|
||||||
|
|
||||||
$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT)
|
$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT) build-grub-module-verifier$(BUILD_EXEEXT)
|
||||||
TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@
|
TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@
|
||||||
platform_DATA += $(MOD_FILES)
|
platform_DATA += $(MOD_FILES)
|
||||||
platform_DATA += modinfo.sh
|
platform_DATA += modinfo.sh
|
||||||
|
|||||||
+110
-51
@@ -1,43 +1,43 @@
|
|||||||
AutoGen definitions Makefile.tpl;
|
AutoGen definitions Makefile.tpl;
|
||||||
|
|
||||||
script = {
|
transform_data = {
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
name = gensyminfo.sh;
|
name = gensyminfo.sh;
|
||||||
common = gensyminfo.sh.in;
|
common = gensyminfo.sh.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
transform_data = {
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
name = genmod.sh;
|
name = genmod.sh;
|
||||||
common = genmod.sh.in;
|
common = genmod.sh.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
transform_data = {
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
name = modinfo.sh;
|
name = modinfo.sh;
|
||||||
common = modinfo.sh.in;
|
common = modinfo.sh.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
transform_data = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = gmodule.pl;
|
name = gmodule.pl;
|
||||||
common = gmodule.pl.in;
|
common = gmodule.pl.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
transform_data = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = gdb_grub;
|
name = gdb_grub;
|
||||||
common = gdb_grub.in;
|
common = gdb_grub.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
transform_data = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = grub.chrp;
|
name = grub.chrp;
|
||||||
common = boot/powerpc/grub.chrp.in;
|
common = boot/powerpc/grub.chrp.in;
|
||||||
enable = powerpc_ieee1275;
|
enable = powerpc_ieee1275;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
transform_data = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = bootinfo.txt;
|
name = bootinfo.txt;
|
||||||
common = boot/powerpc/bootinfo.txt.in;
|
common = boot/powerpc/bootinfo.txt.in;
|
||||||
@@ -59,14 +59,11 @@ kernel = {
|
|||||||
ia64_efi_ldflags = '-Wl,-r,-d';
|
ia64_efi_ldflags = '-Wl,-r,-d';
|
||||||
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
x86_64_xen_cppflags = '$(CPPFLAGS_XEN)';
|
|
||||||
i386_xen_cppflags = '$(CPPFLAGS_XEN)';
|
|
||||||
|
|
||||||
arm_efi_ldflags = '-Wl,-r,-d';
|
arm_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
arm64_efi_ldflags = '-Wl,-r,-d';
|
arm64_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
||||||
|
|
||||||
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
||||||
@@ -83,8 +80,6 @@ kernel = {
|
|||||||
x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
||||||
|
|
||||||
ldadd = '$(LDADD_KERNEL)';
|
|
||||||
|
|
||||||
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
|
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
|
||||||
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
|
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
|
||||||
sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
|
sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
|
||||||
@@ -95,7 +90,7 @@ kernel = {
|
|||||||
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
emu_cflags = '$(CFLAGS_GNULIB)';
|
emu_cflags = '$(CFLAGS_GNULIB)';
|
||||||
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
||||||
arm_uboot_ldflags = '-Wl,-Ttext=0x08000000';
|
arm_uboot_ldflags = '-Wl,-r,-d';
|
||||||
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
i386_pc_startup = kern/i386/pc/startup.S;
|
i386_pc_startup = kern/i386/pc/startup.S;
|
||||||
@@ -132,6 +127,7 @@ kernel = {
|
|||||||
common = kern/rescue_reader.c;
|
common = kern/rescue_reader.c;
|
||||||
common = kern/term.c;
|
common = kern/term.c;
|
||||||
|
|
||||||
|
noemu = kern/compiler-rt.c;
|
||||||
noemu = kern/mm.c;
|
noemu = kern/mm.c;
|
||||||
noemu = kern/time.c;
|
noemu = kern/time.c;
|
||||||
noemu = kern/generic/millisleep.c;
|
noemu = kern/generic/millisleep.c;
|
||||||
@@ -159,6 +155,8 @@ kernel = {
|
|||||||
terminfoinkernel = commands/extcmd.c;
|
terminfoinkernel = commands/extcmd.c;
|
||||||
terminfoinkernel = lib/arg.c;
|
terminfoinkernel = lib/arg.c;
|
||||||
|
|
||||||
|
softdiv = lib/division.c;
|
||||||
|
|
||||||
i386 = kern/i386/dl.c;
|
i386 = kern/i386/dl.c;
|
||||||
i386_xen = kern/i386/dl.c;
|
i386_xen = kern/i386/dl.c;
|
||||||
|
|
||||||
@@ -173,8 +171,20 @@ kernel = {
|
|||||||
efi = kern/efi/init.c;
|
efi = kern/efi/init.c;
|
||||||
efi = kern/efi/mm.c;
|
efi = kern/efi/mm.c;
|
||||||
efi = term/efi/console.c;
|
efi = term/efi/console.c;
|
||||||
|
efi = kern/acpi.c;
|
||||||
|
efi = kern/efi/acpi.c;
|
||||||
|
i386_coreboot = kern/i386/pc/acpi.c;
|
||||||
|
i386_multiboot = kern/i386/pc/acpi.c;
|
||||||
|
i386_coreboot = kern/acpi.c;
|
||||||
|
i386_multiboot = kern/acpi.c;
|
||||||
|
|
||||||
x86 = kern/i386/tsc.c;
|
x86 = kern/i386/tsc.c;
|
||||||
|
x86 = kern/i386/tsc_pit.c;
|
||||||
|
i386_efi = kern/i386/efi/tsc.c;
|
||||||
|
x86_64_efi = kern/i386/efi/tsc.c;
|
||||||
|
i386_efi = kern/i386/tsc_pmtimer.c;
|
||||||
|
i386_coreboot = kern/i386/tsc_pmtimer.c;
|
||||||
|
x86_64_efi = kern/i386/tsc_pmtimer.c;
|
||||||
|
|
||||||
i386_efi = kern/i386/efi/init.c;
|
i386_efi = kern/i386/efi/init.c;
|
||||||
i386_efi = bus/pci.c;
|
i386_efi = bus/pci.c;
|
||||||
@@ -186,6 +196,7 @@ kernel = {
|
|||||||
x86_64_efi = bus/pci.c;
|
x86_64_efi = bus/pci.c;
|
||||||
|
|
||||||
xen = kern/i386/tsc.c;
|
xen = kern/i386/tsc.c;
|
||||||
|
xen = kern/i386/xen/tsc.c;
|
||||||
x86_64_xen = kern/x86_64/xen/hypercall.S;
|
x86_64_xen = kern/x86_64/xen/hypercall.S;
|
||||||
i386_xen = kern/i386/xen/hypercall.S;
|
i386_xen = kern/i386/xen/hypercall.S;
|
||||||
xen = kern/xen/init.c;
|
xen = kern/xen/init.c;
|
||||||
@@ -201,8 +212,10 @@ kernel = {
|
|||||||
|
|
||||||
arm_efi = kern/arm/efi/init.c;
|
arm_efi = kern/arm/efi/init.c;
|
||||||
arm_efi = kern/arm/efi/misc.c;
|
arm_efi = kern/arm/efi/misc.c;
|
||||||
|
arm_efi = kern/efi/fdt.c;
|
||||||
|
|
||||||
arm64_efi = kern/arm/efi/init.c;
|
arm64_efi = kern/arm64/efi/init.c;
|
||||||
|
arm64_efi = kern/efi/fdt.c;
|
||||||
|
|
||||||
i386_pc = kern/i386/pc/init.c;
|
i386_pc = kern/i386/pc/init.c;
|
||||||
i386_pc = kern/i386/pc/mmap.c;
|
i386_pc = kern/i386/pc/mmap.c;
|
||||||
@@ -252,6 +265,7 @@ kernel = {
|
|||||||
|
|
||||||
powerpc_ieee1275 = kern/powerpc/cache.S;
|
powerpc_ieee1275 = kern/powerpc/cache.S;
|
||||||
powerpc_ieee1275 = kern/powerpc/dl.c;
|
powerpc_ieee1275 = kern/powerpc/dl.c;
|
||||||
|
powerpc_ieee1275 = kern/powerpc/compiler-rt.S;
|
||||||
|
|
||||||
sparc64_ieee1275 = kern/sparc64/cache.S;
|
sparc64_ieee1275 = kern/sparc64/cache.S;
|
||||||
sparc64_ieee1275 = kern/sparc64/dl.c;
|
sparc64_ieee1275 = kern/sparc64/dl.c;
|
||||||
@@ -263,7 +277,7 @@ kernel = {
|
|||||||
arm = kern/arm/cache_armv7.S;
|
arm = kern/arm/cache_armv7.S;
|
||||||
extra_dist = kern/arm/cache.S;
|
extra_dist = kern/arm/cache.S;
|
||||||
arm = kern/arm/cache.c;
|
arm = kern/arm/cache.c;
|
||||||
arm = kern/arm/misc.S;
|
arm = kern/arm/compiler-rt.S;
|
||||||
|
|
||||||
arm64 = kern/arm64/cache.c;
|
arm64 = kern/arm64/cache.c;
|
||||||
arm64 = kern/arm64/cache_flush.S;
|
arm64 = kern/arm64/cache_flush.S;
|
||||||
@@ -441,13 +455,13 @@ image = {
|
|||||||
common = lib/xzembed/xz_dec_bcj.c;
|
common = lib/xzembed/xz_dec_bcj.c;
|
||||||
common = lib/xzembed/xz_dec_lzma2.c;
|
common = lib/xzembed/xz_dec_lzma2.c;
|
||||||
common = lib/xzembed/xz_dec_stream.c;
|
common = lib/xzembed/xz_dec_stream.c;
|
||||||
|
common = kern/compiler-rt.c;
|
||||||
|
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1';
|
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1';
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
mips_ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
mips_ldflags = '-Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
||||||
ldadd = '$(TARGET_LIBGCC)';
|
cflags = '-Wno-unreachable-code';
|
||||||
cflags = '-Wno-unreachable-code $(TARGET_LDFLAGS_STATIC_LIBGCC)';
|
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -459,9 +473,7 @@ image = {
|
|||||||
cppflags = '-DGRUB_EMBED_DECOMPRESSOR=1';
|
cppflags = '-DGRUB_EMBED_DECOMPRESSOR=1';
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
mips_ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
mips_ldflags = '-Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
||||||
ldadd = '$(TARGET_LIBGCC)';
|
|
||||||
cflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC)';
|
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -479,7 +491,7 @@ image = {
|
|||||||
name = fwstart;
|
name = fwstart;
|
||||||
mips_loongson = boot/mips/loongson/fwstart.S;
|
mips_loongson = boot/mips/loongson/fwstart.S;
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) $(TARGET_LIBGCC) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
ldflags = '-Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
||||||
enable = mips_loongson;
|
enable = mips_loongson;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -487,7 +499,7 @@ image = {
|
|||||||
name = fwstart_fuloong2f;
|
name = fwstart_fuloong2f;
|
||||||
mips_loongson = boot/mips/loongson/fuloong2f.S;
|
mips_loongson = boot/mips/loongson/fuloong2f.S;
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) $(TARGET_LIBGCC) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
ldflags = '-Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
||||||
enable = mips_loongson;
|
enable = mips_loongson;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -509,13 +521,6 @@ module = {
|
|||||||
enable = x86;
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = libusb;
|
|
||||||
emu = bus/usb/emu/usb.c;
|
|
||||||
enable = emu;
|
|
||||||
condition = COND_GRUB_EMU_USB;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = lsspd;
|
name = lsspd;
|
||||||
mips_loongson = commands/mips/loongson/lsspd.c;
|
mips_loongson = commands/mips/loongson/lsspd.c;
|
||||||
@@ -530,13 +535,6 @@ module = {
|
|||||||
enable = usb;
|
enable = usb;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = emuusb;
|
|
||||||
common = bus/usb/usb.c;
|
|
||||||
enable = emu;
|
|
||||||
condition = COND_GRUB_EMU_USB;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = usbserial_common;
|
name = usbserial_common;
|
||||||
common = bus/usb/serial/common.c;
|
common = bus/usb/serial/common.c;
|
||||||
@@ -618,7 +616,6 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = lsxen;
|
name = lsxen;
|
||||||
common = commands/xen/lsxen.c;
|
common = commands/xen/lsxen.c;
|
||||||
cppflags = '$(CPPFLAGS_XEN)';
|
|
||||||
|
|
||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
@@ -683,10 +680,8 @@ module = {
|
|||||||
name = acpi;
|
name = acpi;
|
||||||
|
|
||||||
common = commands/acpi.c;
|
common = commands/acpi.c;
|
||||||
efi = commands/efi/acpi.c;
|
i386_pc = kern/acpi.c;
|
||||||
i386_pc = commands/i386/pc/acpi.c;
|
i386_pc = kern/i386/pc/acpi.c;
|
||||||
i386_coreboot = commands/i386/pc/acpi.c;
|
|
||||||
i386_multiboot = commands/i386/pc/acpi.c;
|
|
||||||
|
|
||||||
enable = efi;
|
enable = efi;
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
@@ -839,7 +834,6 @@ module = {
|
|||||||
i386_coreboot = lib/i386/halt.c;
|
i386_coreboot = lib/i386/halt.c;
|
||||||
i386_qemu = lib/i386/halt.c;
|
i386_qemu = lib/i386/halt.c;
|
||||||
xen = lib/xen/halt.c;
|
xen = lib/xen/halt.c;
|
||||||
xen_cppflags = '$(CPPFLAGS_XEN)';
|
|
||||||
efi = lib/efi/halt.c;
|
efi = lib/efi/halt.c;
|
||||||
ieee1275 = lib/ieee1275/halt.c;
|
ieee1275 = lib/ieee1275/halt.c;
|
||||||
emu = lib/emu/halt.c;
|
emu = lib/emu/halt.c;
|
||||||
@@ -860,7 +854,6 @@ module = {
|
|||||||
mips_loongson = lib/mips/loongson/reboot.c;
|
mips_loongson = lib/mips/loongson/reboot.c;
|
||||||
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
||||||
xen = lib/xen/reboot.c;
|
xen = lib/xen/reboot.c;
|
||||||
xen_cppflags = '$(CPPFLAGS_XEN)';
|
|
||||||
uboot = lib/uboot/reboot.c;
|
uboot = lib/uboot/reboot.c;
|
||||||
common = commands/reboot.c;
|
common = commands/reboot.c;
|
||||||
};
|
};
|
||||||
@@ -1462,7 +1455,6 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = gfxmenu;
|
name = gfxmenu;
|
||||||
common = gfxmenu/gfxmenu.c;
|
common = gfxmenu/gfxmenu.c;
|
||||||
common = gfxmenu/model.c;
|
|
||||||
common = gfxmenu/view.c;
|
common = gfxmenu/view.c;
|
||||||
common = gfxmenu/font.c;
|
common = gfxmenu/font.c;
|
||||||
common = gfxmenu/icon_manager.c;
|
common = gfxmenu/icon_manager.c;
|
||||||
@@ -1541,7 +1533,7 @@ module = {
|
|||||||
i386_xen = lib/i386/xen/relocator.S;
|
i386_xen = lib/i386/xen/relocator.S;
|
||||||
x86_64_xen = lib/x86_64/xen/relocator.S;
|
x86_64_xen = lib/x86_64/xen/relocator.S;
|
||||||
xen = lib/i386/relocator_common_c.c;
|
xen = lib/i386/relocator_common_c.c;
|
||||||
xen_cppflags = '$(CPPFLAGS_XEN)';
|
x86_64_efi = lib/x86_64/efi/relocator.c;
|
||||||
|
|
||||||
extra_dist = lib/i386/relocator_common.S;
|
extra_dist = lib/i386/relocator_common.S;
|
||||||
extra_dist = kern/powerpc/cache_flush.S;
|
extra_dist = kern/powerpc/cache_flush.S;
|
||||||
@@ -1562,7 +1554,6 @@ module = {
|
|||||||
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
xen = lib/xen/datetime.c;
|
xen = lib/xen/datetime.c;
|
||||||
xen_cppflags = '$(CPPFLAGS_XEN)';
|
|
||||||
|
|
||||||
mips_arc = lib/arc/datetime.c;
|
mips_arc = lib/arc/datetime.c;
|
||||||
enable = noemu;
|
enable = noemu;
|
||||||
@@ -1661,11 +1652,17 @@ module = {
|
|||||||
enable = x86;
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = xen_boot;
|
||||||
|
common = lib/cmdline.c;
|
||||||
|
arm64 = loader/arm64/xen_boot.c;
|
||||||
|
enable = arm64;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = linux;
|
name = linux;
|
||||||
x86 = loader/i386/linux.c;
|
x86 = loader/i386/linux.c;
|
||||||
xen = loader/i386/xen.c;
|
xen = loader/i386/xen.c;
|
||||||
xen_cppflags = '$(CPPFLAGS_XEN)';
|
|
||||||
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
||||||
mips = loader/mips/linux.c;
|
mips = loader/mips/linux.c;
|
||||||
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
||||||
@@ -1673,19 +1670,50 @@ module = {
|
|||||||
ia64_efi = loader/ia64/efi/linux.c;
|
ia64_efi = loader/ia64/efi/linux.c;
|
||||||
arm = loader/arm/linux.c;
|
arm = loader/arm/linux.c;
|
||||||
arm64 = loader/arm64/linux.c;
|
arm64 = loader/arm64/linux.c;
|
||||||
fdt = lib/fdt.c;
|
|
||||||
common = loader/linux.c;
|
common = loader/linux.c;
|
||||||
common = lib/cmdline.c;
|
common = lib/cmdline.c;
|
||||||
enable = noemu;
|
enable = noemu;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = fdt;
|
||||||
|
arm64 = loader/arm64/fdt.c;
|
||||||
|
common = lib/fdt.c;
|
||||||
|
enable = fdt;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = xnu;
|
name = xnu;
|
||||||
x86 = loader/xnu_resume.c;
|
x86 = loader/xnu_resume.c;
|
||||||
x86 = loader/i386/xnu.c;
|
x86 = loader/i386/xnu.c;
|
||||||
x86 = loader/xnu.c;
|
x86 = loader/xnu.c;
|
||||||
|
|
||||||
enable = x86;
|
/* Code is pretty generic but relies on RNG which
|
||||||
|
is available only on few platforms. It's not a
|
||||||
|
big deal as xnu needs ACPI anyway and we have
|
||||||
|
RNG on all platforms with ACPI.
|
||||||
|
*/
|
||||||
|
enable = i386_multiboot;
|
||||||
|
enable = i386_coreboot;
|
||||||
|
enable = i386_pc;
|
||||||
|
enable = i386_efi;
|
||||||
|
enable = x86_64_efi;
|
||||||
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = random;
|
||||||
|
x86 = lib/i386/random.c;
|
||||||
|
common = lib/random.c;
|
||||||
|
|
||||||
|
i386_multiboot = kern/i386/tsc_pmtimer.c;
|
||||||
|
i386_coreboot = kern/i386/tsc_pmtimer.c;
|
||||||
|
i386_pc = kern/i386/tsc_pmtimer.c;
|
||||||
|
|
||||||
|
enable = i386_multiboot;
|
||||||
|
enable = i386_coreboot;
|
||||||
|
enable = i386_pc;
|
||||||
|
enable = i386_efi;
|
||||||
|
enable = x86_64_efi;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1969,11 +1997,42 @@ module = {
|
|||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = div;
|
||||||
|
common = lib/division.c;
|
||||||
|
enable = no_softdiv;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = div_test;
|
name = div_test;
|
||||||
common = tests/div_test.c;
|
common = tests/div_test.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = mul_test;
|
||||||
|
common = tests/mul_test.c;
|
||||||
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = shift_test;
|
||||||
|
common = tests/shift_test.c;
|
||||||
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = cmp_test;
|
||||||
|
common = tests/cmp_test.c;
|
||||||
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = ctz_test;
|
||||||
|
common = tests/ctz_test.c;
|
||||||
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = bswap_test;
|
||||||
|
common = tests/bswap_test.c;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = videotest_checksum;
|
name = videotest_checksum;
|
||||||
common = tests/videotest_checksum.c;
|
common = tests/videotest_checksum.c;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
#include <grub/decompressor.h>
|
#include <grub/decompressor.h>
|
||||||
|
|
||||||
void *
|
void *
|
||||||
memset (void *s, int c, grub_size_t len)
|
grub_memset (void *s, int c, grub_size_t len)
|
||||||
{
|
{
|
||||||
grub_uint8_t *ptr;
|
grub_uint8_t *ptr;
|
||||||
for (ptr = s; len; ptr++, len--)
|
for (ptr = s; len; ptr++, len--)
|
||||||
@@ -68,15 +68,6 @@ grub_memcmp (const void *s1, const void *s2, grub_size_t n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int memcmp (const void *s1, const void *s2, grub_size_t n)
|
|
||||||
__attribute__ ((alias ("grub_memcmp")));
|
|
||||||
|
|
||||||
void *memmove (void *dest, const void *src, grub_size_t n)
|
|
||||||
__attribute__ ((alias ("grub_memmove")));
|
|
||||||
|
|
||||||
void *memcpy (void *dest, const void *src, grub_size_t n)
|
|
||||||
__attribute__ ((alias ("grub_memmove")));
|
|
||||||
|
|
||||||
void *grub_decompressor_scratch;
|
void *grub_decompressor_scratch;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -165,8 +165,8 @@ start:
|
|||||||
* this area.
|
* this area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_BPB_START
|
.org GRUB_BOOT_MACHINE_BPB_START
|
||||||
. = _start + 4
|
.org 4
|
||||||
#endif
|
#endif
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -174,23 +174,23 @@ start:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_BPB_END
|
.org GRUB_BOOT_MACHINE_BPB_END
|
||||||
/*
|
/*
|
||||||
* End of BIOS parameter block.
|
* End of BIOS parameter block.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
kernel_address:
|
LOCAL(kernel_address):
|
||||||
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
. = _start + GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
.org GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
||||||
kernel_sector:
|
LOCAL(kernel_sector):
|
||||||
.long 1
|
.long 1
|
||||||
kernel_sector_high:
|
LOCAL(kernel_sector_high):
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_BOOT_DRIVE
|
.org GRUB_BOOT_MACHINE_BOOT_DRIVE
|
||||||
boot_drive:
|
boot_drive:
|
||||||
.byte 0xff /* the disk to load kernel from */
|
.byte 0xff /* the disk to load kernel from */
|
||||||
/* 0xff means use the boot drive */
|
/* 0xff means use the boot drive */
|
||||||
@@ -208,7 +208,7 @@ LOCAL(after_BPB):
|
|||||||
* possible boot drive. If GRUB is installed into a floppy,
|
* possible boot drive. If GRUB is installed into a floppy,
|
||||||
* this does nothing (only jump).
|
* this does nothing (only jump).
|
||||||
*/
|
*/
|
||||||
. = _start + GRUB_BOOT_MACHINE_DRIVE_CHECK
|
.org GRUB_BOOT_MACHINE_DRIVE_CHECK
|
||||||
boot_drive_check:
|
boot_drive_check:
|
||||||
jmp 3f /* grub-setup may overwrite this jump */
|
jmp 3f /* grub-setup may overwrite this jump */
|
||||||
testb $0x80, %dl
|
testb $0x80, %dl
|
||||||
@@ -275,7 +275,7 @@ real_start:
|
|||||||
andw $1, %cx
|
andw $1, %cx
|
||||||
jz LOCAL(chs_mode)
|
jz LOCAL(chs_mode)
|
||||||
|
|
||||||
lba_mode:
|
LOCAL(lba_mode):
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
movw %ax, 4(%si)
|
movw %ax, 4(%si)
|
||||||
|
|
||||||
@@ -290,9 +290,9 @@ lba_mode:
|
|||||||
movw $0x0010, (%si)
|
movw $0x0010, (%si)
|
||||||
|
|
||||||
/* the absolute address */
|
/* the absolute address */
|
||||||
movl kernel_sector, %ebx
|
movl LOCAL(kernel_sector), %ebx
|
||||||
movl %ebx, 8(%si)
|
movl %ebx, 8(%si)
|
||||||
movl kernel_sector_high, %ebx
|
movl LOCAL(kernel_sector_high), %ebx
|
||||||
movl %ebx, 12(%si)
|
movl %ebx, 12(%si)
|
||||||
|
|
||||||
/* the segment of buffer address */
|
/* the segment of buffer address */
|
||||||
@@ -361,13 +361,13 @@ LOCAL(final_init):
|
|||||||
|
|
||||||
setup_sectors:
|
setup_sectors:
|
||||||
/* load logical sector start (top half) */
|
/* load logical sector start (top half) */
|
||||||
movl kernel_sector_high, %eax
|
movl LOCAL(kernel_sector_high), %eax
|
||||||
|
|
||||||
orl %eax, %eax
|
orl %eax, %eax
|
||||||
jnz LOCAL(geometry_error)
|
jnz LOCAL(geometry_error)
|
||||||
|
|
||||||
/* load logical sector start (bottom half) */
|
/* load logical sector start (bottom half) */
|
||||||
movl kernel_sector, %eax
|
movl LOCAL(kernel_sector), %eax
|
||||||
|
|
||||||
/* zero %edx */
|
/* zero %edx */
|
||||||
xorl %edx, %edx
|
xorl %edx, %edx
|
||||||
@@ -452,7 +452,7 @@ LOCAL(copy_buffer):
|
|||||||
popa
|
popa
|
||||||
|
|
||||||
/* boot kernel */
|
/* boot kernel */
|
||||||
jmp *(kernel_address)
|
jmp *(LOCAL(kernel_address))
|
||||||
|
|
||||||
/* END OF MAIN LOOP */
|
/* END OF MAIN LOOP */
|
||||||
|
|
||||||
@@ -511,13 +511,13 @@ LOCAL(message):
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
. = _start + 0x1b0
|
.org 0x1b0
|
||||||
kernel_sector:
|
LOCAL(kernel_sector):
|
||||||
.long 1
|
.long 1
|
||||||
kernel_sector_high:
|
LOCAL(kernel_sector_high):
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
. = _start + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
.org GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
||||||
nt_magic:
|
nt_magic:
|
||||||
.long 0
|
.long 0
|
||||||
.word 0
|
.word 0
|
||||||
@@ -528,7 +528,7 @@ nt_magic:
|
|||||||
* sneaky, huh?
|
* sneaky, huh?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_PART_START
|
.org GRUB_BOOT_MACHINE_PART_START
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -536,7 +536,7 @@ nt_magic:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_PART_END
|
.org GRUB_BOOT_MACHINE_PART_END
|
||||||
|
|
||||||
/* the last 2 bytes in the sector 0 contain the signature */
|
/* the last 2 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -43,7 +43,7 @@ _start:
|
|||||||
LOCAL(next):
|
LOCAL(next):
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
. = start + 8
|
.org 8
|
||||||
|
|
||||||
bi_pvd:
|
bi_pvd:
|
||||||
.long 0 /* LBA of primary volume descriptor. */
|
.long 0 /* LBA of primary volume descriptor. */
|
||||||
@@ -168,6 +168,6 @@ err_noboot_msg:
|
|||||||
err_cdfail_msg:
|
err_cdfail_msg:
|
||||||
.ascii "cdrom read fails\0"
|
.ascii "cdrom read fails\0"
|
||||||
|
|
||||||
. = start + 0x7FF
|
.org 0x7FF
|
||||||
|
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -362,7 +362,7 @@ LOCAL(message):
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
. = _start + 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
.org 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
||||||
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
||||||
/* fill the first data listing with the default */
|
/* fill the first data listing with the default */
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ data_start:
|
|||||||
xorl %ebp, %ebp
|
xorl %ebp, %ebp
|
||||||
jmp LOCAL(linux_next)
|
jmp LOCAL(linux_next)
|
||||||
|
|
||||||
. = data_start + 0x1F1
|
.org 0x1F1
|
||||||
|
|
||||||
setup_sects:
|
setup_sects:
|
||||||
.byte CODE_SECTORS
|
.byte CODE_SECTORS
|
||||||
@@ -292,4 +292,4 @@ LOCAL(fail):
|
|||||||
err_int15_msg:
|
err_int15_msg:
|
||||||
.ascii "move memory fails\0"
|
.ascii "move memory fails\0"
|
||||||
|
|
||||||
. = _start + CODE_SECTORS * 512
|
.org (CODE_SECTORS * 512 + 512)
|
||||||
@@ -38,5 +38,5 @@ start:
|
|||||||
/* This region is a junk. Do you say that this is wasteful?
|
/* This region is a junk. Do you say that this is wasteful?
|
||||||
But I like that the memory layout of the body is consistent
|
But I like that the memory layout of the body is consistent
|
||||||
among different kernels rather than scamping just for 1.5KB. */
|
among different kernels rather than scamping just for 1.5KB. */
|
||||||
. = _start + 0x8200 - 0x7C00 - 0x200 - 1
|
.org 0x8200 - 0x7C00 - 0x200 - 1
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -50,23 +50,23 @@ LOCAL (base):
|
|||||||
* This is a special data area.
|
* This is a special data area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
LOCAL(compressed_size):
|
LOCAL(compressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
LOCAL(uncompressed_size):
|
LOCAL(uncompressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
. = _start + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
.org GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
||||||
reed_solomon_redundancy:
|
reed_solomon_redundancy:
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
.org GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
||||||
.short (LOCAL(reed_solomon_part) - _start)
|
.short (LOCAL(reed_solomon_part) - _start)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the area for all of the special variables.
|
* This is the area for all of the special variables.
|
||||||
*/
|
*/
|
||||||
. = _start + GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
.org GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
||||||
LOCAL(boot_dev):
|
LOCAL(boot_dev):
|
||||||
.byte 0xFF, 0xFF, 0xFF
|
.byte 0xFF, 0xFF, 0xFF
|
||||||
LOCAL(boot_drive):
|
LOCAL(boot_drive):
|
||||||
@@ -89,13 +89,13 @@ LOCAL (codestart):
|
|||||||
sti /* we're safe again */
|
sti /* we're safe again */
|
||||||
|
|
||||||
/* save the boot drive */
|
/* save the boot drive */
|
||||||
ADDR32 movb %dl, LOCAL(boot_drive)
|
movb %dl, LOCAL(boot_drive)
|
||||||
|
|
||||||
/* reset disk system (%ah = 0) */
|
/* reset disk system (%ah = 0) */
|
||||||
int $0x13
|
int $0x13
|
||||||
|
|
||||||
/* transition to protected mode */
|
/* transition to protected mode */
|
||||||
DATA32 call real_to_prot
|
calll real_to_prot
|
||||||
|
|
||||||
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
||||||
.code32
|
.code32
|
||||||
@@ -149,7 +149,7 @@ gate_a20_try_bios:
|
|||||||
movw $0x2401, %ax
|
movw $0x2401, %ax
|
||||||
int $0x15
|
int $0x15
|
||||||
|
|
||||||
DATA32 call real_to_prot
|
calll real_to_prot
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
popl %ebp
|
popl %ebp
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ _start:
|
|||||||
|
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
.org GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
||||||
VARIABLE(grub_core_entry_addr)
|
VARIABLE(grub_core_entry_addr)
|
||||||
.long 0
|
.long 0
|
||||||
1:
|
1:
|
||||||
@@ -48,8 +48,9 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Transition to protected mode. We use pushl to force generation
|
/* Transition to protected mode. We use pushl to force generation
|
||||||
of a flat return address. */
|
of a flat return address. */
|
||||||
pushl $1f
|
pushl $1f
|
||||||
DATA32 jmp real_to_prot
|
jmp real_to_prot
|
||||||
.code32
|
.code32
|
||||||
|
1:
|
||||||
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
||||||
and there is no need to wait since there is no real logic, it's
|
and there is no need to wait since there is no real logic, it's
|
||||||
all emulated. */
|
all emulated. */
|
||||||
@@ -57,7 +58,6 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
andb $(~0x03), %al
|
andb $(~0x03), %al
|
||||||
orb $0x02, %al
|
orb $0x02, %al
|
||||||
outb $0x92
|
outb $0x92
|
||||||
1:
|
|
||||||
movl EXT_C(grub_core_entry_addr), %edx
|
movl EXT_C(grub_core_entry_addr), %edx
|
||||||
jmp *%edx
|
jmp *%edx
|
||||||
|
|
||||||
@@ -66,9 +66,9 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
||||||
*right here* and this is why we need this kludge. */
|
*right here* and this is why we need this kludge. */
|
||||||
|
|
||||||
. = GRUB_BOOT_MACHINE_SIZE - 16
|
.org GRUB_BOOT_MACHINE_SIZE - 16
|
||||||
|
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
jmp _start
|
jmp _start
|
||||||
. = GRUB_BOOT_MACHINE_SIZE
|
.org GRUB_BOOT_MACHINE_SIZE
|
||||||
@@ -162,7 +162,7 @@ retry_cs5536:
|
|||||||
|
|
||||||
b continue
|
b continue
|
||||||
|
|
||||||
. = start + GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
.org GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
tlb_refill:
|
tlb_refill:
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
||||||
@@ -196,13 +196,13 @@ tlb_refill:
|
|||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
||||||
|
|
||||||
. = start + GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
.org GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
cache_error:
|
cache_error:
|
||||||
lui $a0, %hi(unhandled_cache_error)
|
lui $a0, %hi(unhandled_cache_error)
|
||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_cache_error)
|
addiu $a0, $a0, %lo(unhandled_cache_error)
|
||||||
|
|
||||||
. = start + GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
.org GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
other_exception:
|
other_exception:
|
||||||
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
@@ -344,7 +344,7 @@ printhex:
|
|||||||
nop
|
nop
|
||||||
srl $t1, $a0, 28
|
srl $t1, $a0, 28
|
||||||
addiu $t1, $t1, -10
|
addiu $t1, $t1, -10
|
||||||
blt $t1, $zero, 2f
|
bltz $t1, 2f
|
||||||
sll $a0, $a0, 4
|
sll $a0, $a0, 4
|
||||||
addiu $t1, $t1, 'A'-10-'0'
|
addiu $t1, $t1, 'A'-10-'0'
|
||||||
2: addiu $t1, $t1, '0'+10
|
2: addiu $t1, $t1, '0'+10
|
||||||
@@ -398,7 +398,7 @@ read_spd:
|
|||||||
move $t2, $a0
|
move $t2, $a0
|
||||||
move $t3, $ra
|
move $t3, $ra
|
||||||
lui $a0, %hi(read_spd_fail)
|
lui $a0, %hi(read_spd_fail)
|
||||||
addiu $a0, $a0, %hi(read_spd_fail)
|
addiu $a0, $a0, %lo(read_spd_fail)
|
||||||
|
|
||||||
/* Send START. */
|
/* Send START. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
|
||||||
@@ -547,7 +547,7 @@ gpio_dump:
|
|||||||
#endif
|
#endif
|
||||||
gpio_dump_end:
|
gpio_dump_end:
|
||||||
|
|
||||||
.p2align
|
.p2align 3
|
||||||
|
|
||||||
write_dumpreg:
|
write_dumpreg:
|
||||||
ld $t2, 0($t6)
|
ld $t2, 0($t6)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/machine/kernel.h>
|
#include <grub/machine/kernel.h>
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
#include <grub/mips/asm.h>
|
||||||
|
|
||||||
#define BASE_ADDR 8
|
#define BASE_ADDR 8
|
||||||
|
|
||||||
@@ -39,13 +40,13 @@ start:
|
|||||||
bal codestart
|
bal codestart
|
||||||
nop
|
nop
|
||||||
base:
|
base:
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
compressed_size:
|
compressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
uncompressed_size:
|
uncompressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
||||||
uncompressed_addr:
|
uncompressed_addr:
|
||||||
.long 0
|
.long 0
|
||||||
codestart:
|
codestart:
|
||||||
@@ -118,50 +119,50 @@ parsestr:
|
|||||||
move $v0, $zero
|
move $v0, $zero
|
||||||
move $t3, $t1
|
move $t3, $t1
|
||||||
3:
|
3:
|
||||||
lb $t4, 0($t2)
|
lb GRUB_ASM_T4, 0($t2)
|
||||||
lb $t5, 0($t3)
|
lb GRUB_ASM_T5, 0($t3)
|
||||||
addiu $t2, $t2, 1
|
addiu $t2, $t2, 1
|
||||||
addiu $t3, $t3, 1
|
addiu $t3, $t3, 1
|
||||||
beq $t5, $zero, 1f
|
beq GRUB_ASM_T5, $zero, 1f
|
||||||
nop
|
nop
|
||||||
beq $t5, $t4, 3b
|
beq GRUB_ASM_T5, GRUB_ASM_T4, 3b
|
||||||
nop
|
nop
|
||||||
bne $t4, $zero, 1f
|
bne GRUB_ASM_T4, $zero, 1f
|
||||||
nop
|
nop
|
||||||
|
|
||||||
addiu $t3, $t3, 0xffff
|
addiu $t3, $t3, 0xffff
|
||||||
digcont:
|
digcont:
|
||||||
lb $t5, 0($t3)
|
lb GRUB_ASM_T5, 0($t3)
|
||||||
/* Substract '0' from digit. */
|
/* Substract '0' from digit. */
|
||||||
addiu $t5, $t5, 0xffd0
|
addiu GRUB_ASM_T5, GRUB_ASM_T5, 0xffd0
|
||||||
bltz $t5, 1f
|
bltz GRUB_ASM_T5, 1f
|
||||||
nop
|
nop
|
||||||
addiu $t4, $t5, 0xfff7
|
addiu GRUB_ASM_T4, GRUB_ASM_T5, 0xfff7
|
||||||
bgtz $t4, 1f
|
bgtz GRUB_ASM_T4, 1f
|
||||||
nop
|
nop
|
||||||
/* Multiply $v0 by 10 with bitshifts. */
|
/* Multiply $v0 by 10 with bitshifts. */
|
||||||
sll $v0, $v0, 1
|
sll $v0, $v0, 1
|
||||||
sll $t4, $v0, 2
|
sll GRUB_ASM_T4, $v0, 2
|
||||||
addu $v0, $v0, $t4
|
addu $v0, $v0, GRUB_ASM_T4
|
||||||
addu $v0, $v0, $t5
|
addu $v0, $v0, GRUB_ASM_T5
|
||||||
addiu $t3, $t3, 1
|
addiu $t3, $t3, 1
|
||||||
b digcont
|
b digcont
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
jr $ra
|
jr $ra
|
||||||
nop
|
nop
|
||||||
busclockstr: .asciiz "busclock="
|
busclockstr: .asciz "busclock="
|
||||||
cpuclockstr: .asciiz "cpuclock="
|
cpuclockstr: .asciz "cpuclock="
|
||||||
memsizestr: .asciiz "memsize="
|
memsizestr: .asciz "memsize="
|
||||||
highmemsizestr: .asciiz "highmemsize="
|
highmemsizestr: .asciz "highmemsize="
|
||||||
machtype_yeeloong_str1: .asciiz "machtype=8.9"
|
machtype_yeeloong_str1: .asciz "machtype=8.9"
|
||||||
machtype_yeeloong_str2: .asciiz "machtype=lemote-yeeloong-"
|
machtype_yeeloong_str2: .asciz "machtype=lemote-yeeloong-"
|
||||||
machtype_fuloong2f_str: .asciiz "machtype=lemote-fuloong-2f"
|
machtype_fuloong2f_str: .asciz "machtype=lemote-fuloong-2f"
|
||||||
machtype_fuloong2e_str: .asciiz "machtype=lemote-fuloong-2e"
|
machtype_fuloong2e_str: .asciz "machtype=lemote-fuloong-2e"
|
||||||
pmon_yeeloong_str: .asciiz "PMON_VER=LM8"
|
pmon_yeeloong_str: .asciz "PMON_VER=LM8"
|
||||||
pmon_fuloong2f_str: .asciiz "PMON_VER=LM6"
|
pmon_fuloong2f_str: .asciz "PMON_VER=LM6"
|
||||||
pmon_yeeloong_verstr: .asciiz "Version=LM8"
|
pmon_yeeloong_verstr: .asciz "Version=LM8"
|
||||||
pmon_fuloong2f_verstr: .asciiz "Version=LM6"
|
pmon_fuloong2f_verstr: .asciz "Version=LM6"
|
||||||
.p2align 2
|
.p2align 2
|
||||||
|
|
||||||
argdone:
|
argdone:
|
||||||
@@ -182,10 +183,10 @@ argdone:
|
|||||||
b argdone
|
b argdone
|
||||||
addiu $a1, $a1, 4
|
addiu $a1, $a1, 4
|
||||||
do_check:
|
do_check:
|
||||||
lb $t4, 0($t7)
|
lb GRUB_ASM_T4, 0($t7)
|
||||||
beq $t4, $zero, 1f
|
beq GRUB_ASM_T4, $zero, 1f
|
||||||
lb $t3, 0($t6)
|
lb $t3, 0($t6)
|
||||||
bne $t3, $t4, 2f
|
bne $t3, GRUB_ASM_T4, 2f
|
||||||
addiu $t6, $t6, 1
|
addiu $t6, $t6, 1
|
||||||
b do_check
|
b do_check
|
||||||
addiu $t7, $t7, 1
|
addiu $t7, $t7, 1
|
||||||
@@ -222,8 +223,8 @@ cmdlinedone:
|
|||||||
|
|
||||||
1:
|
1:
|
||||||
beq $t1, $t3, 2f
|
beq $t1, $t3, 2f
|
||||||
lb $t4, 0($t2)
|
lb GRUB_ASM_T4, 0($t2)
|
||||||
sb $t4, 0($t1)
|
sb GRUB_ASM_T4, 0($t1)
|
||||||
addiu $t1, $t1, 1
|
addiu $t1, $t1, 1
|
||||||
b 1b
|
b 1b
|
||||||
addiu $t2, $t2, 1
|
addiu $t2, $t2, 1
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ pic_base:
|
|||||||
* After loading in that block we will execute it by jumping to the
|
* After loading in that block we will execute it by jumping to the
|
||||||
* load address plus the size of the prepended A.OUT header (32 bytes).
|
* load address plus the size of the prepended A.OUT header (32 bytes).
|
||||||
*/
|
*/
|
||||||
. = _start + GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
.org GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
||||||
boot_path:
|
boot_path:
|
||||||
. = _start + GRUB_BOOT_MACHINE_KERNEL_BYTE
|
.org GRUB_BOOT_MACHINE_KERNEL_BYTE
|
||||||
boot_path_end:
|
boot_path_end:
|
||||||
kernel_byte: .xword (2 << 9)
|
kernel_byte: .xword (2 << 9)
|
||||||
kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
||||||
@@ -52,7 +52,7 @@ kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
|||||||
#define boot_path_end (_start + 1024)
|
#define boot_path_end (_start + 1024)
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
|
||||||
. = _start + 8
|
.org 8
|
||||||
kernel_byte: .xword (2 << 9)
|
kernel_byte: .xword (2 << 9)
|
||||||
kernel_size: .word 512
|
kernel_size: .word 512
|
||||||
kernel_address: .word GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS
|
kernel_address: .word GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS
|
||||||
@@ -224,7 +224,7 @@ bootpath_known:
|
|||||||
#else
|
#else
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
. = _start + GRUB_BOOT_MACHINE_CODE_END
|
.org GRUB_BOOT_MACHINE_CODE_END
|
||||||
|
|
||||||
/* the last 4 bytes in the sector 0 contain the signature */
|
/* the last 4 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -136,7 +136,7 @@ lastlist:
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
. = _start + (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
.org (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
.word 0
|
.word 0
|
||||||
.word 2
|
.word 2
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ grub_pci_device_map_range (grub_pci_device_t dev, grub_addr_t base,
|
|||||||
int err;
|
int err;
|
||||||
err = pci_device_map_range (dev, base, size, PCI_DEV_MAP_FLAG_WRITABLE, &addr);
|
err = pci_device_map_range (dev, base, size, PCI_DEV_MAP_FLAG_WRITABLE, &addr);
|
||||||
if (err)
|
if (err)
|
||||||
grub_util_error ("mapping 0x%x failed (error %d)\n", base, err);
|
grub_util_error ("mapping 0x%llx failed (error %d)",
|
||||||
|
(unsigned long long) base, err);
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,12 +67,12 @@ grub_pci_device_unmap_range (grub_pci_device_t dev, void *mem,
|
|||||||
pci_device_unmap_range (dev, mem, size);
|
pci_device_unmap_range (dev, mem, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_INIT (pci)
|
GRUB_MOD_INIT (emupci)
|
||||||
{
|
{
|
||||||
pci_system_init ();
|
pci_system_init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI (pci)
|
GRUB_MOD_FINI (emupci)
|
||||||
{
|
{
|
||||||
pci_system_cleanup ();
|
pci_system_cleanup ();
|
||||||
}
|
}
|
||||||
+82
-33
@@ -29,6 +29,7 @@
|
|||||||
#include <grub/loader.h>
|
#include <grub/loader.h>
|
||||||
#include <grub/cs5536.h>
|
#include <grub/cs5536.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
|
#include <grub/cache.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -337,6 +338,21 @@ struct grub_ehci
|
|||||||
|
|
||||||
static struct grub_ehci *ehci;
|
static struct grub_ehci *ehci;
|
||||||
|
|
||||||
|
static void
|
||||||
|
sync_all_caches (struct grub_ehci *e)
|
||||||
|
{
|
||||||
|
if (!e)
|
||||||
|
return;
|
||||||
|
if (e->td_virt)
|
||||||
|
grub_arch_sync_dma_caches (e->td_virt, sizeof (struct grub_ehci_td) *
|
||||||
|
GRUB_EHCI_N_TD);
|
||||||
|
if (e->qh_virt)
|
||||||
|
grub_arch_sync_dma_caches (e->qh_virt, sizeof (struct grub_ehci_qh) *
|
||||||
|
GRUB_EHCI_N_QH);
|
||||||
|
if (e->framelist_virt)
|
||||||
|
grub_arch_sync_dma_caches (e->framelist_virt, 4096);
|
||||||
|
}
|
||||||
|
|
||||||
/* EHCC registers access functions */
|
/* EHCC registers access functions */
|
||||||
static inline grub_uint32_t
|
static inline grub_uint32_t
|
||||||
grub_ehci_ehcc_read32 (struct grub_ehci *e, grub_uint32_t addr)
|
grub_ehci_ehcc_read32 (struct grub_ehci *e, grub_uint32_t addr)
|
||||||
@@ -437,6 +453,8 @@ grub_ehci_reset (struct grub_ehci *e)
|
|||||||
{
|
{
|
||||||
grub_uint64_t maxtime;
|
grub_uint64_t maxtime;
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
||||||
GRUB_EHCI_CMD_HC_RESET
|
GRUB_EHCI_CMD_HC_RESET
|
||||||
| grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
| grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
@@ -670,23 +688,23 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++)
|
for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++)
|
||||||
{
|
{
|
||||||
e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td);
|
e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td);
|
||||||
e->td_virt[i].next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
e->td_virt[i].next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->td_virt[i].alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
e->td_virt[i].alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
}
|
}
|
||||||
e->td_virt[GRUB_EHCI_N_TD - 1].next_td =
|
e->td_virt[GRUB_EHCI_N_TD - 1].next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td =
|
e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->tdfree_virt = e->td_virt;
|
e->tdfree_virt = e->td_virt;
|
||||||
/* Set Terminate in first QH, which is used in framelist */
|
/* Set Terminate in first QH, which is used in framelist */
|
||||||
e->qh_virt[0].qh_hptr = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH);
|
e->qh_virt[0].qh_hptr = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH);
|
||||||
e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->qh_virt[0].td_overlay.alt_next_td =
|
e->qh_virt[0].td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Also set Halted bit in token */
|
/* Also set Halted bit in token */
|
||||||
e->qh_virt[0].td_overlay.token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
e->qh_virt[0].td_overlay.token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
||||||
/* Set the H bit in first QH used for AL */
|
/* Set the H bit in first QH used for AL */
|
||||||
e->qh_virt[1].ep_char = grub_cpu_to_le32 (GRUB_EHCI_H);
|
e->qh_virt[1].ep_char = grub_cpu_to_le32_compile_time (GRUB_EHCI_H);
|
||||||
/* Set Terminate into TD in rest of QHs and set horizontal link
|
/* Set Terminate into TD in rest of QHs and set horizontal link
|
||||||
* pointer to itself - these QHs will be used for asynchronous
|
* pointer to itself - these QHs will be used for asynchronous
|
||||||
* schedule and they should have valid value in horiz. link */
|
* schedule and they should have valid value in horiz. link */
|
||||||
@@ -697,12 +715,12 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
e->qh_chunk) &
|
e->qh_chunk) &
|
||||||
GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH);
|
GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH);
|
||||||
e->qh_virt[i].td_overlay.next_td =
|
e->qh_virt[i].td_overlay.next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->qh_virt[i].td_overlay.alt_next_td =
|
e->qh_virt[i].td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Also set Halted bit in token */
|
/* Also set Halted bit in token */
|
||||||
e->qh_virt[i].td_overlay.token =
|
e->qh_virt[i].td_overlay.token =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: QH 0 and QH 1 are reserved and must not be used anywhere.
|
/* Note: QH 0 and QH 1 are reserved and must not be used anywhere.
|
||||||
@@ -840,6 +858,8 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
e->next = ehci;
|
e->next = ehci;
|
||||||
ehci = e;
|
ehci = e;
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
@@ -991,7 +1011,7 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
|
|||||||
target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) |
|
target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) |
|
||||||
transfer->devaddr) & GRUB_EHCI_TARGET_MASK;
|
transfer->devaddr) & GRUB_EHCI_TARGET_MASK;
|
||||||
target = grub_cpu_to_le32 (target);
|
target = grub_cpu_to_le32 (target);
|
||||||
mask = grub_cpu_to_le32 (GRUB_EHCI_TARGET_MASK);
|
mask = grub_cpu_to_le32_compile_time (GRUB_EHCI_TARGET_MASK);
|
||||||
|
|
||||||
/* low speed interrupt transfers are linked to the periodic */
|
/* low speed interrupt transfers are linked to the periodic */
|
||||||
/* schedule, everything else to the asynchronous schedule */
|
/* schedule, everything else to the asynchronous schedule */
|
||||||
@@ -1020,6 +1040,7 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
|
|||||||
/* Found proper existing (and linked) QH, do setup of QH */
|
/* Found proper existing (and linked) QH, do setup of QH */
|
||||||
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
||||||
grub_ehci_setup_qh (qh_iter, transfer);
|
grub_ehci_setup_qh (qh_iter, transfer);
|
||||||
|
sync_all_caches (e);
|
||||||
return qh_iter;
|
return qh_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1121,7 +1142,7 @@ grub_ehci_free_tds (struct grub_ehci *e, grub_ehci_td_t td,
|
|||||||
token = grub_le_to_cpu32 (td->token);
|
token = grub_le_to_cpu32 (td->token);
|
||||||
to_transfer = (token & GRUB_EHCI_TOTAL_MASK) >> GRUB_EHCI_TOTAL_OFF;
|
to_transfer = (token & GRUB_EHCI_TOTAL_MASK) >> GRUB_EHCI_TOTAL_OFF;
|
||||||
|
|
||||||
/* Check state of TD - if it did not transfered
|
/* Check state of TD - if it did not transfer
|
||||||
* whole data then set last_trans - it should be last executed TD
|
* whole data then set last_trans - it should be last executed TD
|
||||||
* in case when something went wrong. */
|
* in case when something went wrong. */
|
||||||
if (transfer && (td->size != to_transfer))
|
if (transfer && (td->size != to_transfer))
|
||||||
@@ -1200,7 +1221,7 @@ grub_ehci_transaction (struct grub_ehci *e,
|
|||||||
grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td));
|
grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td));
|
||||||
|
|
||||||
/* Don't point to any TD yet, just terminate. */
|
/* Don't point to any TD yet, just terminate. */
|
||||||
td->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
td->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Set alternate pointer. When short packet occurs, alternate TD
|
/* Set alternate pointer. When short packet occurs, alternate TD
|
||||||
* will not be really fetched because it is not active. But don't
|
* will not be really fetched because it is not active. But don't
|
||||||
* forget, EHCI will try to fetch alternate TD every scan of AL
|
* forget, EHCI will try to fetch alternate TD every scan of AL
|
||||||
@@ -1289,16 +1310,28 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_td_t td_prev = NULL;
|
grub_ehci_td_t td_prev = NULL;
|
||||||
int i;
|
int i;
|
||||||
struct grub_ehci_transfer_controller_data *cdata;
|
struct grub_ehci_transfer_controller_data *cdata;
|
||||||
|
grub_uint32_t status;
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
/* Check if EHCI is running and AL is enabled */
|
/* Check if EHCI is running and AL is enabled */
|
||||||
if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)
|
status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS);
|
||||||
& GRUB_EHCI_ST_HC_HALTED) != 0)
|
if ((status & GRUB_EHCI_ST_HC_HALTED) != 0)
|
||||||
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
{
|
||||||
if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)
|
grub_dprintf ("ehci", "setup_transfer: halted, status = 0x%x\n",
|
||||||
|
status);
|
||||||
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
|
}
|
||||||
|
status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS);
|
||||||
|
if ((status
|
||||||
& (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0)
|
& (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0)
|
||||||
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
{
|
||||||
|
grub_dprintf ("ehci", "setup_transfer: no AS/PS, status = 0x%x\n",
|
||||||
|
status);
|
||||||
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Allocate memory for controller transfer data. */
|
/* Allocate memory for controller transfer data. */
|
||||||
cdata = grub_malloc (sizeof (*cdata));
|
cdata = grub_malloc (sizeof (*cdata));
|
||||||
@@ -1310,6 +1343,7 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->qh_virt = grub_ehci_find_qh (e, transfer);
|
cdata->qh_virt = grub_ehci_find_qh (e, transfer);
|
||||||
if (!cdata->qh_virt)
|
if (!cdata->qh_virt)
|
||||||
{
|
{
|
||||||
|
grub_dprintf ("ehci", "setup_transfer: no QH\n");
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
@@ -1319,15 +1353,16 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->td_alt_virt = grub_ehci_alloc_td (e);
|
cdata->td_alt_virt = grub_ehci_alloc_td (e);
|
||||||
if (!cdata->td_alt_virt)
|
if (!cdata->td_alt_virt)
|
||||||
{
|
{
|
||||||
|
grub_dprintf ("ehci", "setup_transfer: no TDs\n");
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
/* Fill whole alternate TD by zeros (= inactive) and set
|
/* Fill whole alternate TD by zeros (= inactive) and set
|
||||||
* Terminate bits and Halt bit */
|
* Terminate bits and Halt bit */
|
||||||
grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td));
|
grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td));
|
||||||
cdata->td_alt_virt->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
cdata->td_alt_virt->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
cdata->td_alt_virt->token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
cdata->td_alt_virt->token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
||||||
|
|
||||||
/* Allocate appropriate number of TDs and set */
|
/* Allocate appropriate number of TDs and set */
|
||||||
for (i = 0; i < transfer->transcnt; i++)
|
for (i = 0; i < transfer->transcnt; i++)
|
||||||
@@ -1345,6 +1380,7 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_tds (e, cdata->td_first_virt, NULL, &actual);
|
grub_ehci_free_tds (e, cdata->td_first_virt, NULL, &actual);
|
||||||
|
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
grub_dprintf ("ehci", "setup_transfer: no TD\n");
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1364,7 +1400,7 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->td_last_virt = td;
|
cdata->td_last_virt = td;
|
||||||
cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk);
|
cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk);
|
||||||
/* Last TD should not have set alternate TD */
|
/* Last TD should not have set alternate TD */
|
||||||
cdata->td_last_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
cdata->td_last_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
|
|
||||||
grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n",
|
grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n",
|
||||||
cdata,cdata->qh_virt);
|
cdata,cdata->qh_virt);
|
||||||
@@ -1377,14 +1413,16 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
/* Start transfer: */
|
/* Start transfer: */
|
||||||
/* Unlink possible alternate pointer in QH */
|
/* Unlink possible alternate pointer in QH */
|
||||||
cdata->qh_virt->td_overlay.alt_next_td =
|
cdata->qh_virt->td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Link new TDs with QH via next_td */
|
/* Link new TDs with QH via next_td */
|
||||||
cdata->qh_virt->td_overlay.next_td =
|
cdata->qh_virt->td_overlay.next_td =
|
||||||
grub_cpu_to_le32 (grub_dma_virt2phys
|
grub_cpu_to_le32 (grub_dma_virt2phys
|
||||||
(cdata->td_first_virt, e->td_chunk));
|
(cdata->td_first_virt, e->td_chunk));
|
||||||
/* Reset Active and Halted bits in QH to activate Advance Queue,
|
/* Reset Active and Halted bits in QH to activate Advance Queue,
|
||||||
* i.e. reset token */
|
* i.e. reset token */
|
||||||
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32 (0);
|
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32_compile_time (0);
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
/* Finito */
|
/* Finito */
|
||||||
transfer->controller_data = cdata;
|
transfer->controller_data = cdata;
|
||||||
@@ -1408,9 +1446,9 @@ grub_ehci_pre_finish_transfer (grub_usb_transfer_t transfer)
|
|||||||
* safely manipulate with QH TD part. */
|
* safely manipulate with QH TD part. */
|
||||||
cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token
|
cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token
|
||||||
|
|
|
|
||||||
grub_cpu_to_le32
|
grub_cpu_to_le32_compile_time
|
||||||
(GRUB_EHCI_STATUS_HALTED)) &
|
(GRUB_EHCI_STATUS_HALTED)) &
|
||||||
grub_cpu_to_le32 (~GRUB_EHCI_STATUS_ACTIVE);
|
grub_cpu_to_le32_compile_time (~GRUB_EHCI_STATUS_ACTIVE);
|
||||||
|
|
||||||
/* Print debug data here if necessary */
|
/* Print debug data here if necessary */
|
||||||
|
|
||||||
@@ -1434,6 +1472,8 @@ grub_ehci_parse_notrun (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
/* Additionally, do something with EHCI to make it running (what?) */
|
/* Additionally, do something with EHCI to make it running (what?) */
|
||||||
/* Try enable EHCI and AL */
|
/* Try enable EHCI and AL */
|
||||||
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
||||||
@@ -1469,6 +1509,8 @@ grub_ehci_parse_halt (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
/* Evaluation of error code - currently we don't have GRUB USB error
|
/* Evaluation of error code - currently we don't have GRUB USB error
|
||||||
* codes for some EHCI states, GRUB_USB_ERR_DATA is used for them.
|
* codes for some EHCI states, GRUB_USB_ERR_DATA is used for them.
|
||||||
* Order of evaluation is critical, specially bubble/stall. */
|
* Order of evaluation is critical, specially bubble/stall. */
|
||||||
@@ -1502,6 +1544,8 @@ grub_ehci_parse_success (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1515,6 +1559,8 @@ grub_ehci_check_transfer (grub_usb_controller_t dev,
|
|||||||
transfer->controller_data;
|
transfer->controller_data;
|
||||||
grub_uint32_t token, token_ftd;
|
grub_uint32_t token, token_ftd;
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
"check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n",
|
"check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS),
|
grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS),
|
||||||
@@ -1581,6 +1627,9 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
int i;
|
int i;
|
||||||
grub_uint64_t maxtime;
|
grub_uint64_t maxtime;
|
||||||
grub_uint32_t qh_phys;
|
grub_uint32_t qh_phys;
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
grub_uint32_t interrupt =
|
grub_uint32_t interrupt =
|
||||||
cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK;
|
cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK;
|
||||||
|
|
||||||
@@ -1600,6 +1649,7 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual);
|
grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual);
|
||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
sync_all_caches (e);
|
||||||
grub_dprintf ("ehci", "cancel_transfer: end - EHCI not running\n");
|
grub_dprintf ("ehci", "cancel_transfer: end - EHCI not running\n");
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
@@ -1622,6 +1672,8 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
/* Unlink QH from AL */
|
/* Unlink QH from AL */
|
||||||
e->qh_virt[i].qh_hptr = cdata->qh_virt->qh_hptr;
|
e->qh_virt[i].qh_hptr = cdata->qh_virt->qh_hptr;
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
/* If this is an interrupt transfer, we just wait for the periodic
|
/* If this is an interrupt transfer, we just wait for the periodic
|
||||||
* schedule to advance a few times and then assume that the EHCI
|
* schedule to advance a few times and then assume that the EHCI
|
||||||
* controller has read the updated QH. */
|
* controller has read the updated QH. */
|
||||||
@@ -1676,6 +1728,8 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
|
|
||||||
grub_dprintf ("ehci", "cancel_transfer: end\n");
|
grub_dprintf ("ehci", "cancel_transfer: end\n");
|
||||||
|
|
||||||
|
sync_all_caches (e);
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1777,11 +1831,6 @@ grub_ehci_detect_dev (grub_usb_controller_t dev, int port, int *changed)
|
|||||||
|
|
||||||
status = grub_ehci_port_read (e, port);
|
status = grub_ehci_port_read (e, port);
|
||||||
|
|
||||||
grub_dprintf ("ehci", "detect_dev: EHCI STATUS: %08x\n",
|
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS));
|
|
||||||
grub_dprintf ("ehci", "detect_dev: iobase=%p, port=%d, status=0x%02x\n",
|
|
||||||
e->iobase, port, status);
|
|
||||||
|
|
||||||
/* Connect Status Change bit - it detects change of connection */
|
/* Connect Status Change bit - it detects change of connection */
|
||||||
if (status & GRUB_EHCI_PORT_CONNECT_CH)
|
if (status & GRUB_EHCI_PORT_CONNECT_CH)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,203 +0,0 @@
|
|||||||
/* usb.c -- libusb USB support for GRUB. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <usb.h>
|
|
||||||
#include <grub/usb.h>
|
|
||||||
#include <grub/dl.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
|
|
||||||
static struct grub_usb_controller_dev usb_controller =
|
|
||||||
{
|
|
||||||
.name = "libusb"
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct grub_usb_device *grub_usb_devs[128];
|
|
||||||
|
|
||||||
struct usb_bus *busses;
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_libusb_devices (void)
|
|
||||||
|
|
||||||
{
|
|
||||||
struct usb_bus *bus;
|
|
||||||
int last = 0;
|
|
||||||
|
|
||||||
busses = usb_get_busses();
|
|
||||||
|
|
||||||
for (bus = busses; bus; bus = bus->next)
|
|
||||||
{
|
|
||||||
struct usb_device *usbdev;
|
|
||||||
struct grub_usb_device *dev;
|
|
||||||
|
|
||||||
for (usbdev = bus->devices; usbdev; usbdev = usbdev->next)
|
|
||||||
{
|
|
||||||
struct usb_device_descriptor *desc = &usbdev->descriptor;
|
|
||||||
grub_err_t err;
|
|
||||||
|
|
||||||
if (! desc->bcdUSB)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
dev = grub_malloc (sizeof (*dev));
|
|
||||||
if (! dev)
|
|
||||||
return grub_errno;
|
|
||||||
|
|
||||||
dev->data = usbdev;
|
|
||||||
|
|
||||||
/* Fill in all descriptors. */
|
|
||||||
err = grub_usb_device_initialize (dev);
|
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Register the device. */
|
|
||||||
grub_usb_devs[last++] = dev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_usb_poll_devices (void)
|
|
||||||
{
|
|
||||||
/* TODO: recheck grub_usb_devs */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_usb_iterate (grub_usb_iterate_hook_t hook, void *hook_data)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 128; i++)
|
|
||||||
{
|
|
||||||
if (grub_usb_devs[i])
|
|
||||||
{
|
|
||||||
if (hook (grub_usb_devs[i], hook_data))
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_usb_err_t
|
|
||||||
grub_usb_root_hub (grub_usb_controller_t controller __attribute__((unused)))
|
|
||||||
{
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_usb_err_t
|
|
||||||
grub_usb_control_msg (grub_usb_device_t dev, grub_uint8_t reqtype,
|
|
||||||
grub_uint8_t request, grub_uint16_t value,
|
|
||||||
grub_uint16_t idx, grub_size_t size, char *data)
|
|
||||||
{
|
|
||||||
usb_dev_handle *devh;
|
|
||||||
struct usb_device *d = dev->data;
|
|
||||||
|
|
||||||
devh = usb_open (d);
|
|
||||||
if (usb_control_msg (devh, reqtype, request,
|
|
||||||
value, idx, data, size, 20) < 0)
|
|
||||||
{
|
|
||||||
usb_close (devh);
|
|
||||||
return GRUB_USB_ERR_STALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
usb_close (devh);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_usb_err_t
|
|
||||||
grub_usb_bulk_read (grub_usb_device_t dev,
|
|
||||||
int endpoint, grub_size_t size, char *data)
|
|
||||||
{
|
|
||||||
usb_dev_handle *devh;
|
|
||||||
struct usb_device *d = dev->data;
|
|
||||||
|
|
||||||
devh = usb_open (d);
|
|
||||||
if (usb_claim_interface (devh, 0) < 1)
|
|
||||||
{
|
|
||||||
usb_close (devh);
|
|
||||||
return GRUB_USB_ERR_STALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (usb_bulk_read (devh, endpoint, data, size, 20) < 1)
|
|
||||||
{
|
|
||||||
usb_close (devh);
|
|
||||||
return GRUB_USB_ERR_STALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
usb_release_interface (devh, 0);
|
|
||||||
usb_close (devh);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_usb_err_t
|
|
||||||
grub_usb_bulk_write (grub_usb_device_t dev,
|
|
||||||
int endpoint, grub_size_t size, char *data)
|
|
||||||
{
|
|
||||||
usb_dev_handle *devh;
|
|
||||||
struct usb_device *d = dev->data;
|
|
||||||
|
|
||||||
devh = usb_open (d);
|
|
||||||
if (usb_claim_interface (devh, 0) < 0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if (usb_bulk_write (devh, endpoint, data, size, 20) < 0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if (usb_release_interface (devh, 0) < 0)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
usb_close (devh);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
usb_close (devh);
|
|
||||||
return GRUB_USB_ERR_STALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_INIT (libusb)
|
|
||||||
{
|
|
||||||
usb_init();
|
|
||||||
usb_find_busses();
|
|
||||||
usb_find_devices();
|
|
||||||
|
|
||||||
if (grub_libusb_devices ())
|
|
||||||
return;
|
|
||||||
|
|
||||||
grub_usb_controller_dev_register (&usb_controller);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI (libusb)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
@@ -314,7 +314,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed)
|
grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed)
|
||||||
* GRUB_OHCI_CTRL_EDS);
|
* GRUB_OHCI_CTRL_EDS);
|
||||||
for (j=0; j < GRUB_OHCI_CTRL_EDS; j++)
|
for (j=0; j < GRUB_OHCI_CTRL_EDS; j++)
|
||||||
o->ed_ctrl[j].target = grub_cpu_to_le32 (1 << 14); /* skip */
|
o->ed_ctrl[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
|
|
||||||
grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n",
|
grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n",
|
||||||
o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr);
|
o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr);
|
||||||
@@ -329,7 +329,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
/* Preset EDs */
|
/* Preset EDs */
|
||||||
grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS);
|
grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS);
|
||||||
for (j=0; j < GRUB_OHCI_BULK_EDS; j++)
|
for (j=0; j < GRUB_OHCI_BULK_EDS; j++)
|
||||||
o->ed_bulk[j].target = grub_cpu_to_le32 (1 << 14); /* skip */
|
o->ed_bulk[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
|
|
||||||
grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n",
|
grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n",
|
||||||
o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr);
|
o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr);
|
||||||
@@ -750,7 +750,10 @@ grub_ohci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
{
|
{
|
||||||
cdata->td_head_virt = grub_ohci_alloc_td (o);
|
cdata->td_head_virt = grub_ohci_alloc_td (o);
|
||||||
if (!cdata->td_head_virt)
|
if (!cdata->td_head_virt)
|
||||||
return GRUB_USB_ERR_INTERNAL; /* We don't need de-allocate ED */
|
{
|
||||||
|
grub_free (cdata);
|
||||||
|
return GRUB_USB_ERR_INTERNAL; /* We don't need de-allocate ED */
|
||||||
|
}
|
||||||
/* We can set td_head only when ED is not active, i.e.
|
/* We can set td_head only when ED is not active, i.e.
|
||||||
* when it is newly allocated. */
|
* when it is newly allocated. */
|
||||||
cdata->ed_virt->td_head
|
cdata->ed_virt->td_head
|
||||||
@@ -1349,10 +1352,10 @@ grub_ohci_fini_hw (int noreturn __attribute__ ((unused)))
|
|||||||
/* Set skip in all EDs */
|
/* Set skip in all EDs */
|
||||||
if (o->ed_bulk)
|
if (o->ed_bulk)
|
||||||
for (i=0; i < GRUB_OHCI_BULK_EDS; i++)
|
for (i=0; i < GRUB_OHCI_BULK_EDS; i++)
|
||||||
o->ed_bulk[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */
|
o->ed_bulk[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
if (o->ed_ctrl)
|
if (o->ed_ctrl)
|
||||||
for (i=0; i < GRUB_OHCI_CTRL_EDS; i++)
|
for (i=0; i < GRUB_OHCI_CTRL_EDS; i++)
|
||||||
o->ed_ctrl[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */
|
o->ed_ctrl[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
|
|
||||||
/* We should wait for next SOF to be sure that all EDs are
|
/* We should wait for next SOF to be sure that all EDs are
|
||||||
* unaccessed by OHCI. But OHCI can be non-functional, so
|
* unaccessed by OHCI. But OHCI can be non-functional, so
|
||||||
|
|||||||
@@ -625,9 +625,7 @@ grub_uhci_check_transfer (grub_usb_controller_t dev,
|
|||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_dprintf ("uhci", "t status=0x%02x\n", errtd->ctrl_status);
|
if (errtd && !(errtd->ctrl_status & (1 << 23)))
|
||||||
|
|
||||||
if (!(errtd->ctrl_status & (1 << 23)))
|
|
||||||
{
|
{
|
||||||
grub_usb_err_t err = GRUB_USB_ERR_NONE;
|
grub_usb_err_t err = GRUB_USB_ERR_NONE;
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include <grub/usb.h>
|
#include <grub/usb.h>
|
||||||
#include <grub/usbtrans.h>
|
#include <grub/usbtrans.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
|
#include <grub/cache.h>
|
||||||
|
|
||||||
|
|
||||||
static inline unsigned int
|
static inline unsigned int
|
||||||
@@ -31,7 +32,7 @@ grub_usb_bulk_maxpacket (grub_usb_device_t dev,
|
|||||||
struct grub_usb_desc_endp *endpoint)
|
struct grub_usb_desc_endp *endpoint)
|
||||||
{
|
{
|
||||||
/* Use the maximum packet size given in the endpoint descriptor. */
|
/* Use the maximum packet size given in the endpoint descriptor. */
|
||||||
if (dev->initialized && endpoint)
|
if (dev->initialized && endpoint && (unsigned int) endpoint->maxpacket)
|
||||||
return endpoint->maxpacket;
|
return endpoint->maxpacket;
|
||||||
|
|
||||||
return 64;
|
return 64;
|
||||||
@@ -101,6 +102,8 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
data_addr = grub_dma_get_phys (data_chunk);
|
data_addr = grub_dma_get_phys (data_chunk);
|
||||||
grub_memcpy ((char *) data, data_in, size);
|
grub_memcpy ((char *) data, data_in, size);
|
||||||
|
|
||||||
|
grub_arch_sync_dma_caches (data, size);
|
||||||
|
|
||||||
grub_dprintf ("usb",
|
grub_dprintf ("usb",
|
||||||
"control: reqtype=0x%02x req=0x%02x val=0x%02x idx=0x%02x size=%lu\n",
|
"control: reqtype=0x%02x req=0x%02x val=0x%02x idx=0x%02x size=%lu\n",
|
||||||
reqtype, request, value, index, (unsigned long)size);
|
reqtype, request, value, index, (unsigned long)size);
|
||||||
@@ -161,6 +164,8 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
setupdata->value = value;
|
setupdata->value = value;
|
||||||
setupdata->index = index;
|
setupdata->index = index;
|
||||||
setupdata->length = size;
|
setupdata->length = size;
|
||||||
|
grub_arch_sync_dma_caches (setupdata, sizeof (*setupdata));
|
||||||
|
|
||||||
transfer->transactions[0].size = sizeof (*setupdata);
|
transfer->transactions[0].size = sizeof (*setupdata);
|
||||||
transfer->transactions[0].pid = GRUB_USB_TRANSFER_TYPE_SETUP;
|
transfer->transactions[0].pid = GRUB_USB_TRANSFER_TYPE_SETUP;
|
||||||
transfer->transactions[0].data = setupdata_addr;
|
transfer->transactions[0].data = setupdata_addr;
|
||||||
@@ -202,11 +207,13 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
grub_free (transfer->transactions);
|
grub_free (transfer->transactions);
|
||||||
|
|
||||||
grub_free (transfer);
|
grub_free (transfer);
|
||||||
grub_dma_free (data_chunk);
|
|
||||||
grub_dma_free (setupdata_chunk);
|
grub_dma_free (setupdata_chunk);
|
||||||
|
|
||||||
|
grub_arch_sync_dma_caches (data, size0);
|
||||||
grub_memcpy (data_in, (char *) data, size0);
|
grub_memcpy (data_in, (char *) data, size0);
|
||||||
|
|
||||||
|
grub_dma_free (data_chunk);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,7 +243,10 @@ grub_usb_bulk_setup_readwrite (grub_usb_device_t dev,
|
|||||||
data = grub_dma_get_virt (data_chunk);
|
data = grub_dma_get_virt (data_chunk);
|
||||||
data_addr = grub_dma_get_phys (data_chunk);
|
data_addr = grub_dma_get_phys (data_chunk);
|
||||||
if (type == GRUB_USB_TRANSFER_TYPE_OUT)
|
if (type == GRUB_USB_TRANSFER_TYPE_OUT)
|
||||||
grub_memcpy ((char *) data, data_in, size);
|
{
|
||||||
|
grub_memcpy ((char *) data, data_in, size);
|
||||||
|
grub_arch_sync_dma_caches (data, size);
|
||||||
|
}
|
||||||
|
|
||||||
/* Create a transfer. */
|
/* Create a transfer. */
|
||||||
transfer = grub_malloc (sizeof (struct grub_usb_transfer));
|
transfer = grub_malloc (sizeof (struct grub_usb_transfer));
|
||||||
@@ -306,13 +316,17 @@ grub_usb_bulk_finish_readwrite (grub_usb_transfer_t transfer)
|
|||||||
dev->toggle[transfer->endpoint] = toggle;
|
dev->toggle[transfer->endpoint] = toggle;
|
||||||
|
|
||||||
if (transfer->dir == GRUB_USB_TRANSFER_TYPE_IN)
|
if (transfer->dir == GRUB_USB_TRANSFER_TYPE_IN)
|
||||||
grub_memcpy (transfer->data, (void *)
|
{
|
||||||
grub_dma_get_virt (transfer->data_chunk),
|
grub_arch_sync_dma_caches (grub_dma_get_virt (transfer->data_chunk),
|
||||||
transfer->size + 1);
|
transfer->size + 1);
|
||||||
|
grub_memcpy (transfer->data, (void *)
|
||||||
|
grub_dma_get_virt (transfer->data_chunk),
|
||||||
|
transfer->size + 1);
|
||||||
|
}
|
||||||
|
|
||||||
grub_free (transfer->transactions);
|
grub_free (transfer->transactions);
|
||||||
grub_free (transfer);
|
|
||||||
grub_dma_free (transfer->data_chunk);
|
grub_dma_free (transfer->data_chunk);
|
||||||
|
grub_free (transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_usb_err_t
|
static grub_usb_err_t
|
||||||
|
|||||||
+13
-17
@@ -61,18 +61,6 @@ static const struct grub_arg_option options[] = {
|
|||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */
|
|
||||||
grub_uint8_t
|
|
||||||
grub_byte_checksum (void *base, grub_size_t size)
|
|
||||||
{
|
|
||||||
grub_uint8_t *ptr;
|
|
||||||
grub_uint8_t ret = 0;
|
|
||||||
for (ptr = (grub_uint8_t *) base; ptr < ((grub_uint8_t *) base) + size;
|
|
||||||
ptr++)
|
|
||||||
ret += *ptr;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise.
|
/* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise.
|
||||||
rev2 contains the revision of ACPIv2+ to generate or 0 if none. */
|
rev2 contains the revision of ACPIv2+ to generate or 0 if none. */
|
||||||
static int rev1, rev2;
|
static int rev1, rev2;
|
||||||
@@ -131,6 +119,8 @@ grub_acpi_get_rsdpv1 (void)
|
|||||||
return grub_machine_acpi_get_rsdpv1 ();
|
return grub_machine_acpi_get_rsdpv1 ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined (__i386__) || defined (__x86_64__)
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
iszero (grub_uint8_t *reg, int size)
|
iszero (grub_uint8_t *reg, int size)
|
||||||
{
|
{
|
||||||
@@ -141,7 +131,6 @@ iszero (grub_uint8_t *reg, int size)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__i386__) || defined (__x86_64__)
|
|
||||||
/* Context for grub_acpi_create_ebda. */
|
/* Context for grub_acpi_create_ebda. */
|
||||||
struct grub_acpi_create_ebda_ctx {
|
struct grub_acpi_create_ebda_ctx {
|
||||||
int ebda_len;
|
int ebda_len;
|
||||||
@@ -179,8 +168,10 @@ grub_acpi_create_ebda (void)
|
|||||||
struct grub_acpi_rsdp_v20 *v2;
|
struct grub_acpi_rsdp_v20 *v2;
|
||||||
|
|
||||||
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4);
|
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4);
|
||||||
|
grub_dprintf ("acpi", "EBDA @%p\n", ebda);
|
||||||
if (ebda)
|
if (ebda)
|
||||||
ebda_kb_len = *(grub_uint16_t *) ebda;
|
ebda_kb_len = *(grub_uint16_t *) ebda;
|
||||||
|
grub_dprintf ("acpi", "EBDA length 0x%x\n", ebda_kb_len);
|
||||||
if (ebda_kb_len > 16)
|
if (ebda_kb_len > 16)
|
||||||
ebda_kb_len = 0;
|
ebda_kb_len = 0;
|
||||||
ctx.ebda_len = (ebda_kb_len + 1) << 10;
|
ctx.ebda_len = (ebda_kb_len + 1) << 10;
|
||||||
@@ -227,7 +218,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target);
|
grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target);
|
||||||
v2inebda = target;
|
v2inebda = target;
|
||||||
target += v2->length;
|
target += v2->length;
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v2 = 0;
|
v2 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -246,7 +237,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target);
|
grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target);
|
||||||
v1inebda = target;
|
v1inebda = target;
|
||||||
target += sizeof (struct grub_acpi_rsdp_v10);
|
target += sizeof (struct grub_acpi_rsdp_v10);
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v1 = 0;
|
v1 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -265,7 +256,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_memcpy (target, v2, v2->length);
|
grub_memcpy (target, v2, v2->length);
|
||||||
v2inebda = target;
|
v2inebda = target;
|
||||||
target += v2->length;
|
target += v2->length;
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v2 = 0;
|
v2 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -282,7 +273,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
||||||
v1inebda = target;
|
v1inebda = target;
|
||||||
target += sizeof (struct grub_acpi_rsdp_v10);
|
target += sizeof (struct grub_acpi_rsdp_v10);
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v1 = 0;
|
v1 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -494,6 +485,8 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
if (! rsdp)
|
if (! rsdp)
|
||||||
rsdp = grub_machine_acpi_get_rsdpv1 ();
|
rsdp = grub_machine_acpi_get_rsdpv1 ();
|
||||||
|
|
||||||
|
grub_dprintf ("acpi", "RSDP @%p\n", rsdp);
|
||||||
|
|
||||||
if (rsdp)
|
if (rsdp)
|
||||||
{
|
{
|
||||||
grub_uint32_t *entry_ptr;
|
grub_uint32_t *entry_ptr;
|
||||||
@@ -600,6 +593,9 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
if (! table->addr)
|
if (! table->addr)
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
|
grub_free (exclude);
|
||||||
|
grub_free (load_only);
|
||||||
|
grub_free (table);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
table->next = acpi_tables;
|
table->next = acpi_tables;
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
|
|
||||||
#define grub_dprintf(cond, args...) printf ( args )
|
#define grub_dprintf(cond, args...) printf ( args )
|
||||||
#define grub_printf printf
|
#define grub_printf printf
|
||||||
|
#define grub_util_fopen fopen
|
||||||
|
#define grub_memcmp memcmp
|
||||||
typedef uint64_t grub_uint64_t;
|
typedef uint64_t grub_uint64_t;
|
||||||
typedef uint32_t grub_uint32_t;
|
typedef uint32_t grub_uint32_t;
|
||||||
typedef uint16_t grub_uint16_t;
|
typedef uint16_t grub_uint16_t;
|
||||||
@@ -135,6 +137,49 @@ skip_data_ref_object (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline grub_uint32_t
|
||||||
|
skip_term (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
||||||
|
{
|
||||||
|
grub_uint32_t add;
|
||||||
|
const grub_uint8_t *ptr0 = ptr;
|
||||||
|
|
||||||
|
switch(*ptr)
|
||||||
|
{
|
||||||
|
case GRUB_ACPI_OPCODE_ADD:
|
||||||
|
case GRUB_ACPI_OPCODE_AND:
|
||||||
|
case GRUB_ACPI_OPCODE_CONCAT:
|
||||||
|
case GRUB_ACPI_OPCODE_CONCATRES:
|
||||||
|
case GRUB_ACPI_OPCODE_DIVIDE:
|
||||||
|
case GRUB_ACPI_OPCODE_INDEX:
|
||||||
|
case GRUB_ACPI_OPCODE_LSHIFT:
|
||||||
|
case GRUB_ACPI_OPCODE_MOD:
|
||||||
|
case GRUB_ACPI_OPCODE_MULTIPLY:
|
||||||
|
case GRUB_ACPI_OPCODE_NAND:
|
||||||
|
case GRUB_ACPI_OPCODE_NOR:
|
||||||
|
case GRUB_ACPI_OPCODE_OR:
|
||||||
|
case GRUB_ACPI_OPCODE_RSHIFT:
|
||||||
|
case GRUB_ACPI_OPCODE_SUBTRACT:
|
||||||
|
case GRUB_ACPI_OPCODE_TOSTRING:
|
||||||
|
case GRUB_ACPI_OPCODE_XOR:
|
||||||
|
/*
|
||||||
|
* Parameters for these opcodes: TermArg, TermArg Target, see ACPI
|
||||||
|
* spec r5.0, page 828f.
|
||||||
|
*/
|
||||||
|
ptr++;
|
||||||
|
ptr += add = skip_term (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return 0;
|
||||||
|
ptr += add = skip_term (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return 0;
|
||||||
|
ptr += skip_name_string (ptr, end);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return skip_data_ref_object (ptr, end);
|
||||||
|
}
|
||||||
|
return ptr - ptr0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline grub_uint32_t
|
static inline grub_uint32_t
|
||||||
skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
||||||
{
|
{
|
||||||
@@ -156,10 +201,10 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
ptr++;
|
ptr++;
|
||||||
ptr += skip_name_string (ptr, end);
|
ptr += skip_name_string (ptr, end);
|
||||||
ptr++;
|
ptr++;
|
||||||
ptr += add = skip_data_ref_object (ptr, end);
|
ptr += add = skip_term (ptr, end);
|
||||||
if (!add)
|
if (!add)
|
||||||
return 0;
|
return 0;
|
||||||
ptr += add = skip_data_ref_object (ptr, end);
|
ptr += add = skip_term (ptr, end);
|
||||||
if (!add)
|
if (!add)
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
@@ -180,6 +225,7 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
return ptr - ptr0;
|
return ptr - ptr0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
||||||
grub_uint8_t *scope, int scope_len)
|
grub_uint8_t *scope, int scope_len)
|
||||||
@@ -202,6 +248,7 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
if (!add)
|
if (!add)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
case GRUB_ACPI_OPCODE_CREATE_DWORD_FIELD:
|
||||||
case GRUB_ACPI_OPCODE_CREATE_WORD_FIELD:
|
case GRUB_ACPI_OPCODE_CREATE_WORD_FIELD:
|
||||||
case GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD:
|
case GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD:
|
||||||
{
|
{
|
||||||
@@ -214,8 +261,8 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
}
|
}
|
||||||
case GRUB_ACPI_OPCODE_NAME:
|
case GRUB_ACPI_OPCODE_NAME:
|
||||||
ptr++;
|
ptr++;
|
||||||
if ((!scope || memcmp (scope, "\\", scope_len) == 0) &&
|
if ((!scope || grub_memcmp (scope, "\\", scope_len) == 0) &&
|
||||||
(memcmp (ptr, "_S5_", 4) == 0 || memcmp (ptr, "\\_S5_", 4) == 0))
|
(grub_memcmp (ptr, "_S5_", 4) == 0 || grub_memcmp (ptr, "\\_S5_", 4) == 0))
|
||||||
{
|
{
|
||||||
int ll;
|
int ll;
|
||||||
grub_uint8_t *ptr2 = ptr;
|
grub_uint8_t *ptr2 = ptr;
|
||||||
@@ -250,6 +297,17 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
if (!add)
|
if (!add)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
case GRUB_ACPI_OPCODE_ALIAS:
|
||||||
|
ptr++;
|
||||||
|
/* We need to skip two name strings */
|
||||||
|
ptr += add = skip_name_string (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return -1;
|
||||||
|
ptr += add = skip_name_string (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return -1;
|
||||||
|
break;
|
||||||
|
|
||||||
case GRUB_ACPI_OPCODE_SCOPE:
|
case GRUB_ACPI_OPCODE_SCOPE:
|
||||||
{
|
{
|
||||||
int scope_sleep_type;
|
int scope_sleep_type;
|
||||||
|
|||||||
@@ -23,6 +23,8 @@
|
|||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
|
|
||||||
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)),
|
grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc __attribute__ ((unused)),
|
int argc __attribute__ ((unused)),
|
||||||
|
|||||||
@@ -140,10 +140,13 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
|
if (utcount)
|
||||||
for (j = 0; j < utcount; j++)
|
{
|
||||||
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
|
||||||
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
for (j = 0; j < utcount; j++)
|
||||||
|
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
||||||
|
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
||||||
|
}
|
||||||
|
|
||||||
grub_xputs ("\n");
|
grub_xputs ("\n");
|
||||||
grub_refresh ();
|
grub_refresh ();
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
grub_printf
|
grub_printf
|
||||||
("Type Physical start - end #Pages "
|
("Type Physical start - end #Pages "
|
||||||
" Size Attributes\n");
|
" Size Attributes\n");
|
||||||
memory_map_end = ADD_MEMORY_DESCRIPTOR (memory_map, map_size);
|
memory_map_end = ADD_MEMORY_DESCRIPTOR (memory_map, map_size);
|
||||||
for (desc = memory_map;
|
for (desc = memory_map;
|
||||||
desc < memory_map_end;
|
desc < memory_map_end;
|
||||||
@@ -74,7 +74,8 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
"ACPI-nvs",
|
"ACPI-nvs",
|
||||||
"MMIO ",
|
"MMIO ",
|
||||||
"IO-ports",
|
"IO-ports",
|
||||||
"PAL-code"
|
"PAL-code",
|
||||||
|
"persist ",
|
||||||
};
|
};
|
||||||
if (desc->type < ARRAY_SIZE (types_str))
|
if (desc->type < ARRAY_SIZE (types_str))
|
||||||
grub_printf ("%s ", types_str[desc->type]);
|
grub_printf ("%s ", types_str[desc->type]);
|
||||||
@@ -87,21 +88,29 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
desc->physical_start + (desc->num_pages << 12) - 1,
|
desc->physical_start + (desc->num_pages << 12) - 1,
|
||||||
desc->num_pages);
|
desc->num_pages);
|
||||||
|
|
||||||
size = desc->num_pages;
|
size = desc->num_pages << 12; /* 4 KiB page size */
|
||||||
size <<= (12 - 10);
|
/*
|
||||||
if (size < 1024)
|
* Since size is a multiple of 4 KiB, no need to handle units
|
||||||
grub_printf (" %4" PRIuGRUB_UINT64_T "KB", size);
|
* of just Bytes (which would use a mask of 0x3ff).
|
||||||
|
*
|
||||||
|
* 14 characters would support the largest possible number of 4 KiB
|
||||||
|
* pages that are not a multiple of larger units (e.g., MiB):
|
||||||
|
* 17592186044415 (0xffffff_fffff000), but that uses a lot of
|
||||||
|
* whitespace for a rare case. 6 characters usually suffices;
|
||||||
|
* columns will be off if not, but this is preferable to rounding.
|
||||||
|
*/
|
||||||
|
if (size & 0xfffff)
|
||||||
|
grub_printf (" %6" PRIuGRUB_UINT64_T "KiB", size >> 10);
|
||||||
|
else if (size & 0x3fffffff)
|
||||||
|
grub_printf (" %6" PRIuGRUB_UINT64_T "MiB", size >> 20);
|
||||||
|
else if (size & 0xffffffffff)
|
||||||
|
grub_printf (" %6" PRIuGRUB_UINT64_T "GiB", size >> 30);
|
||||||
|
else if (size & 0x3ffffffffffff)
|
||||||
|
grub_printf (" %6" PRIuGRUB_UINT64_T "TiB", size >> 40);
|
||||||
|
else if (size & 0xfffffffffffffff)
|
||||||
|
grub_printf (" %6" PRIuGRUB_UINT64_T "PiB", size >> 50);
|
||||||
else
|
else
|
||||||
{
|
grub_printf (" %6" PRIuGRUB_UINT64_T "EiB", size >> 60);
|
||||||
size /= 1024;
|
|
||||||
if (size < 1024)
|
|
||||||
grub_printf (" %4" PRIuGRUB_UINT64_T "MB", size);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
size /= 1024;
|
|
||||||
grub_printf (" %4" PRIuGRUB_UINT64_T "GB", size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
attr = desc->attribute;
|
attr = desc->attribute;
|
||||||
if (attr & GRUB_EFI_MEMORY_RUNTIME)
|
if (attr & GRUB_EFI_MEMORY_RUNTIME)
|
||||||
@@ -122,6 +131,12 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_printf (" RP");
|
grub_printf (" RP");
|
||||||
if (attr & GRUB_EFI_MEMORY_XP)
|
if (attr & GRUB_EFI_MEMORY_XP)
|
||||||
grub_printf (" XP");
|
grub_printf (" XP");
|
||||||
|
if (attr & GRUB_EFI_MEMORY_NV)
|
||||||
|
grub_printf (" NV");
|
||||||
|
if (attr & GRUB_EFI_MEMORY_MORE_RELIABLE)
|
||||||
|
grub_printf (" MR");
|
||||||
|
if (attr & GRUB_EFI_MEMORY_RO)
|
||||||
|
grub_printf (" RO");
|
||||||
|
|
||||||
grub_printf ("\n");
|
grub_printf ("\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,10 +37,20 @@ static const struct guid_mapping guid_mappings[] =
|
|||||||
{
|
{
|
||||||
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
||||||
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
||||||
|
{ GRUB_EFI_CRC32_GUIDED_SECTION_EXTRACTION_GUID,
|
||||||
|
"CRC32 GUIDED SECTION EXTRACTION"},
|
||||||
|
{ GRUB_EFI_DEBUG_IMAGE_INFO_TABLE_GUID, "DEBUG IMAGE INFO"},
|
||||||
|
{ GRUB_EFI_DXE_SERVICES_TABLE_GUID, "DXE SERVICES"},
|
||||||
|
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"},
|
||||||
|
{ GRUB_EFI_HOB_LIST_GUID, "HOB LIST"},
|
||||||
|
{ GRUB_EFI_LZMA_CUSTOM_DECOMPRESS_GUID, "LZMA CUSTOM DECOMPRESS"},
|
||||||
|
{ GRUB_EFI_MEMORY_TYPE_INFORMATION_GUID, "MEMORY TYPE INFO"},
|
||||||
|
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
||||||
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
||||||
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
||||||
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
{ GRUB_EFI_SYSTEM_RESOURCE_TABLE_GUID, "SYSTEM RESOURCE TABLE"},
|
||||||
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"}
|
{ GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"},
|
||||||
|
{ GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"},
|
||||||
};
|
};
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -52,6 +62,7 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
grub_efi_configuration_table_t *t;
|
grub_efi_configuration_table_t *t;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
grub_printf ("Address: %p\n", st);
|
||||||
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
|
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
|
||||||
st->hdr.signature, st->hdr.revision);
|
st->hdr.signature, st->hdr.revision);
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -476,8 +476,8 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
be at least 12 bytes and aligned on a 4-byte boundary. */
|
be at least 12 bytes and aligned on a 4-byte boundary. */
|
||||||
for (header = buffer;
|
for (header = buffer;
|
||||||
((char *) header <=
|
((char *) header <=
|
||||||
(char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12))
|
(char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12));
|
||||||
|| (header = 0); header += step)
|
header += step)
|
||||||
{
|
{
|
||||||
if (header[0] == magic
|
if (header[0] == magic
|
||||||
&& !(grub_le_to_cpu32 (header[0])
|
&& !(grub_le_to_cpu32 (header[0])
|
||||||
@@ -485,11 +485,12 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
+ grub_le_to_cpu32 (header[2])
|
+ grub_le_to_cpu32 (header[2])
|
||||||
+ (type == IS_MULTIBOOT2
|
+ (type == IS_MULTIBOOT2
|
||||||
? grub_le_to_cpu32 (header[3]) : 0)))
|
? grub_le_to_cpu32 (header[3]) : 0)))
|
||||||
break;
|
{
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (header != 0)
|
|
||||||
ret = 1;
|
|
||||||
grub_free (buffer);
|
grub_free (buffer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include <grub/fileid.h>
|
#include <grub/fileid.h>
|
||||||
#include <grub/elfload.h>
|
#include <grub/elfload.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
|
|
||||||
@@ -39,10 +40,10 @@ grub_file_check_netbsdXX (grub_elf_t elf)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1)
|
if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1)
|
||||||
return 0;
|
goto fail;
|
||||||
|
|
||||||
if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize)
|
if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize)
|
||||||
return 0;
|
goto fail;
|
||||||
|
|
||||||
s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize);
|
s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize);
|
||||||
stroff = s->sh_offset;
|
stroff = s->sh_offset;
|
||||||
@@ -53,18 +54,21 @@ grub_file_check_netbsdXX (grub_elf_t elf)
|
|||||||
char name[sizeof(".note.netbsd.ident")];
|
char name[sizeof(".note.netbsd.ident")];
|
||||||
grub_memset (name, 0, sizeof (name));
|
grub_memset (name, 0, sizeof (name));
|
||||||
if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1)
|
if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1)
|
||||||
return grub_errno;
|
goto fail;
|
||||||
|
|
||||||
if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name))
|
if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name))
|
||||||
{
|
{
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
return grub_errno;
|
goto fail;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (grub_memcmp (name, ".note.netbsd.ident",
|
if (grub_memcmp (name, ".note.netbsd.ident",
|
||||||
sizeof(".note.netbsd.ident")) != 0)
|
sizeof(".note.netbsd.ident")) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
grub_free (s0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
fail:
|
||||||
|
grub_free (s0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if it is valid. */
|
/* Check if it is valid. */
|
||||||
if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE))
|
if (mbr.signature != grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE))
|
||||||
{
|
{
|
||||||
grub_device_close (dev);
|
grub_device_close (dev);
|
||||||
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
||||||
@@ -216,7 +216,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
first_sector--;
|
first_sector--;
|
||||||
mbr.entries[0].flag = 0;
|
mbr.entries[0].flag = 0;
|
||||||
mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK;
|
mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK;
|
||||||
mbr.entries[0].start = grub_cpu_to_le32 (1);
|
mbr.entries[0].start = grub_cpu_to_le32_compile_time (1);
|
||||||
lba_to_chs (1,
|
lba_to_chs (1,
|
||||||
&(mbr.entries[0].start_sector),
|
&(mbr.entries[0].start_sector),
|
||||||
&(mbr.entries[0].start_cylinder),
|
&(mbr.entries[0].start_cylinder),
|
||||||
@@ -227,7 +227,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
&(mbr.entries[0].end_head));
|
&(mbr.entries[0].end_head));
|
||||||
mbr.entries[0].length = grub_cpu_to_le32 (first_sector);
|
mbr.entries[0].length = grub_cpu_to_le32 (first_sector);
|
||||||
|
|
||||||
mbr.signature = grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE);
|
mbr.signature = grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE);
|
||||||
|
|
||||||
if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr))
|
if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr))
|
||||||
{
|
{
|
||||||
@@ -235,6 +235,8 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_device_close (dev);
|
||||||
|
|
||||||
grub_printf_ (N_("New MBR is written to `%s'\n"), args[0]);
|
grub_printf_ (N_("New MBR is written to `%s'\n"), args[0]);
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|||||||
@@ -329,6 +329,7 @@ grub_cmd_hdparm (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
grub_disk_close (disk);
|
||||||
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte, bit;
|
int byte = 0, bit = 0;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte, bit;
|
int byte = 0, bit = 0;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmosset (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmosset (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte, bit;
|
int byte = 0, bit = 0;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
|
|||||||
@@ -39,9 +39,17 @@ static const char *descs[] = {
|
|||||||
[2] = "before RAM init",
|
[2] = "before RAM init",
|
||||||
[3] = "after RAM init",
|
[3] = "after RAM init",
|
||||||
[4] = "end of romstage",
|
[4] = "end of romstage",
|
||||||
|
[5] = "start of verified boot",
|
||||||
|
[6] = "end of verified boot",
|
||||||
[8] = "start of RAM copy",
|
[8] = "start of RAM copy",
|
||||||
[9] = "end of RAM copy",
|
[9] = "end of RAM copy",
|
||||||
[10] = "start of ramstage",
|
[10] = "start of ramstage",
|
||||||
|
[11] = "start of bootblock",
|
||||||
|
[12] = "end of bootblock",
|
||||||
|
[13] = "starting to load romstage",
|
||||||
|
[14] = "finished loading romstage",
|
||||||
|
[15] = "starting LZMA decompress (ignore for x86)",
|
||||||
|
[16] = "finished LZMA decompress (ignore for x86)",
|
||||||
[30] = "device enumerate",
|
[30] = "device enumerate",
|
||||||
[40] = "device configure",
|
[40] = "device configure",
|
||||||
[50] = "device enable",
|
[50] = "device enable",
|
||||||
|
|||||||
@@ -107,6 +107,14 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!tempo)
|
||||||
|
{
|
||||||
|
grub_file_close (file);
|
||||||
|
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
|
||||||
|
args[0]);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
tempo = grub_le_to_cpu32 (tempo);
|
tempo = grub_le_to_cpu32 (tempo);
|
||||||
grub_dprintf ("play","tempo = %d\n", tempo);
|
grub_dprintf ("play","tempo = %d\n", tempo);
|
||||||
|
|
||||||
@@ -131,6 +139,13 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
tempo = grub_strtoul (args[0], &end, 0);
|
tempo = grub_strtoul (args[0], &end, 0);
|
||||||
|
|
||||||
|
if (!tempo)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
|
||||||
|
args[0]);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
if (*end)
|
if (*end)
|
||||||
/* Was not a number either, assume it was supposed to be a file name. */
|
/* Was not a number either, assume it was supposed to be a file name. */
|
||||||
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);
|
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ find_key_code (char *key)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
|
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
||||||
{
|
{
|
||||||
if (keysym_table[i].unshifted_name
|
if (keysym_table[i].unshifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
||||||
@@ -311,7 +311,7 @@ find_ascii_code (char *key)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
|
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
||||||
{
|
{
|
||||||
if (keysym_table[i].unshifted_name
|
if (keysym_table[i].unshifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
||||||
@@ -352,15 +352,13 @@ grub_cmd_sendkey (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
|
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < sizeof (simple_flag_offsets)
|
for (i = 0; i < ARRAY_SIZE(simple_flag_offsets); i++)
|
||||||
/ sizeof (simple_flag_offsets[0]); i++)
|
|
||||||
grub_sendkey_set_simple_flag (simple_flag_offsets[i],
|
grub_sendkey_set_simple_flag (simple_flag_offsets[i],
|
||||||
grub_sendkey_parse_op(state[i]));
|
grub_sendkey_parse_op(state[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set noled. */
|
/* Set noled. */
|
||||||
noled = (state[sizeof (simple_flag_offsets)
|
noled = (state[ARRAY_SIZE(simple_flag_offsets)].set);
|
||||||
/ sizeof (simple_flag_offsets[0])].set);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,8 +173,10 @@ grub_term_map_key (grub_keyboard_key_t code, int status)
|
|||||||
|
|
||||||
key = map_key_core (code, status, &alt_gr_consumed);
|
key = map_key_core (code, status, &alt_gr_consumed);
|
||||||
|
|
||||||
if (key == 0 || key == GRUB_TERM_SHIFT)
|
if (key == 0 || key == GRUB_TERM_SHIFT) {
|
||||||
grub_printf ("Unknown key 0x%x detected\n", code);
|
grub_printf ("Unknown key 0x%x detected\n", code);
|
||||||
|
return GRUB_TERM_NO_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
if (status & GRUB_TERM_STATUS_CAPS)
|
if (status & GRUB_TERM_STATUS_CAPS)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -57,14 +57,20 @@ legacy_file (const char *filename)
|
|||||||
|
|
||||||
file = grub_file_open (filename);
|
file = grub_file_open (filename);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
{
|
||||||
|
grub_free (suffix);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
menu = grub_env_get_menu ();
|
menu = grub_env_get_menu ();
|
||||||
if (! menu)
|
if (! menu)
|
||||||
{
|
{
|
||||||
menu = grub_zalloc (sizeof (*menu));
|
menu = grub_zalloc (sizeof (*menu));
|
||||||
if (! menu)
|
if (! menu)
|
||||||
return grub_errno;
|
{
|
||||||
|
grub_free (suffix);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
grub_env_set_menu (menu);
|
grub_env_set_menu (menu);
|
||||||
}
|
}
|
||||||
@@ -77,6 +83,7 @@ legacy_file (const char *filename)
|
|||||||
if (!buf && grub_errno)
|
if (!buf && grub_errno)
|
||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
|
grub_free (suffix);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,6 +180,8 @@ legacy_file (const char *filename)
|
|||||||
if (!args)
|
if (!args)
|
||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
|
grub_free (suffix);
|
||||||
|
grub_free (entrysrc);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
args[0] = entryname;
|
args[0] = entryname;
|
||||||
@@ -244,6 +253,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
struct grub_command *cmd;
|
struct grub_command *cmd;
|
||||||
char **cutargs;
|
char **cutargs;
|
||||||
int cutargc;
|
int cutargc;
|
||||||
|
grub_err_t err = GRUB_ERR_NONE;
|
||||||
|
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
@@ -305,6 +315,8 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||||
|
|
||||||
cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
|
cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
|
||||||
|
if (!cutargs)
|
||||||
|
return grub_errno;
|
||||||
cutargc = argc - 1;
|
cutargc = argc - 1;
|
||||||
grub_memcpy (cutargs + 1, args + 2, sizeof (cutargs[0]) * (argc - 2));
|
grub_memcpy (cutargs + 1, args + 2, sizeof (cutargs[0]) * (argc - 2));
|
||||||
cutargs[0] = args[0];
|
cutargs[0] = args[0];
|
||||||
@@ -324,7 +336,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, cutargc, cutargs))
|
if (!(cmd->func) (cmd, cutargc, cutargs))
|
||||||
{
|
{
|
||||||
kernel_type = LINUX;
|
kernel_type = LINUX;
|
||||||
return GRUB_ERR_NONE;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -339,7 +351,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, argc, args))
|
if (!(cmd->func) (cmd, argc, args))
|
||||||
{
|
{
|
||||||
kernel_type = MULTIBOOT;
|
kernel_type = MULTIBOOT;
|
||||||
return GRUB_ERR_NONE;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -376,6 +388,8 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (part && grub_strcmp (part->partmap->name, "msdos") == 0)
|
if (part && grub_strcmp (part->partmap->name, "msdos") == 0)
|
||||||
bsd_slice = part->number;
|
bsd_slice = part->number;
|
||||||
}
|
}
|
||||||
|
if (dev)
|
||||||
|
grub_device_close (dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* k*BSD didn't really work well with grub-legacy. */
|
/* k*BSD didn't really work well with grub-legacy. */
|
||||||
@@ -402,7 +416,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, cutargc, cutargs))
|
if (!(cmd->func) (cmd, cutargc, cutargs))
|
||||||
{
|
{
|
||||||
kernel_type = KFREEBSD;
|
kernel_type = KFREEBSD;
|
||||||
return GRUB_ERR_NONE;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -411,6 +425,8 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
char **bsdargs;
|
char **bsdargs;
|
||||||
int bsdargc;
|
int bsdargc;
|
||||||
char bsddevname[sizeof ("wdXXXXXXXXXXXXY")];
|
char bsddevname[sizeof ("wdXXXXXXXXXXXXY")];
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
if (bsd_device == -1)
|
if (bsd_device == -1)
|
||||||
{
|
{
|
||||||
bsdargs = cutargs;
|
bsdargs = cutargs;
|
||||||
@@ -421,6 +437,11 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
char rbuf[3] = "-r";
|
char rbuf[3] = "-r";
|
||||||
bsdargc = cutargc + 2;
|
bsdargc = cutargc + 2;
|
||||||
bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
|
bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
|
||||||
|
if (!bsdargs)
|
||||||
|
{
|
||||||
|
err = grub_errno;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
grub_memcpy (bsdargs, args, argc * sizeof (bsdargs[0]));
|
grub_memcpy (bsdargs, args, argc * sizeof (bsdargs[0]));
|
||||||
bsdargs[argc] = rbuf;
|
bsdargs[argc] = rbuf;
|
||||||
bsdargs[argc + 1] = bsddevname;
|
bsdargs[argc + 1] = bsddevname;
|
||||||
@@ -436,7 +457,8 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
||||||
{
|
{
|
||||||
kernel_type = KNETBSD;
|
kernel_type = KNETBSD;
|
||||||
return GRUB_ERR_NONE;
|
found = 1;
|
||||||
|
goto free_bsdargs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -449,20 +471,28 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
||||||
{
|
{
|
||||||
kernel_type = KOPENBSD;
|
kernel_type = KOPENBSD;
|
||||||
return GRUB_ERR_NONE;
|
found = 1;
|
||||||
|
goto free_bsdargs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free_bsdargs:
|
||||||
if (bsdargs != cutargs)
|
if (bsdargs != cutargs)
|
||||||
grub_free (bsdargs);
|
grub_free (bsdargs);
|
||||||
|
if (found)
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (0);
|
while (0);
|
||||||
|
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "couldn't load file %s",
|
err = grub_error (GRUB_ERR_BAD_OS, "couldn't load file %s",
|
||||||
args[0]);
|
args[0]);
|
||||||
|
out:
|
||||||
|
grub_free (cutargs);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -523,15 +553,17 @@ grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused
|
|||||||
char **newargs;
|
char **newargs;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
char nounzipbuf[10] = "--nounzip";
|
char nounzipbuf[10] = "--nounzip";
|
||||||
|
|
||||||
|
cmd = grub_command_find ("module");
|
||||||
|
if (!cmd)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
||||||
|
"module");
|
||||||
|
|
||||||
newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
|
newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
|
||||||
if (!newargs)
|
if (!newargs)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
||||||
newargs[0] = nounzipbuf;
|
newargs[0] = nounzipbuf;
|
||||||
cmd = grub_command_find ("module");
|
|
||||||
if (!cmd)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
|
||||||
"module");
|
|
||||||
|
|
||||||
err = cmd->func (cmd, argc + 1, newargs);
|
err = cmd->func (cmd, argc + 1, newargs);
|
||||||
grub_free (newargs);
|
grub_free (newargs);
|
||||||
@@ -580,7 +612,7 @@ check_password_md5_real (const char *entered,
|
|||||||
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
||||||
digest = GRUB_MD_MD5->read (ctx);
|
digest = GRUB_MD_MD5->read (ctx);
|
||||||
GRUB_MD_MD5->final (ctx);
|
GRUB_MD_MD5->final (ctx);
|
||||||
memcpy (alt_result, digest, MD5_HASHLEN);
|
grub_memcpy (alt_result, digest, MD5_HASHLEN);
|
||||||
|
|
||||||
GRUB_MD_MD5->init (ctx);
|
GRUB_MD_MD5->init (ctx);
|
||||||
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
||||||
@@ -596,7 +628,7 @@ check_password_md5_real (const char *entered,
|
|||||||
|
|
||||||
for (i = 0; i < 1000; i++)
|
for (i = 0; i < 1000; i++)
|
||||||
{
|
{
|
||||||
memcpy (alt_result, digest, 16);
|
grub_memcpy (alt_result, digest, 16);
|
||||||
|
|
||||||
GRUB_MD_MD5->init (ctx);
|
GRUB_MD_MD5->init (ctx);
|
||||||
if ((i & 1) != 0)
|
if ((i & 1) != 0)
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
|||||||
for (q = p->next; q; q = q->next)
|
for (q = p->next; q; q = q->next)
|
||||||
{
|
{
|
||||||
grub_disk_addr_t s1, s2;
|
grub_disk_addr_t s1, s2;
|
||||||
grub_disk_addr_t e1, e2, t;
|
grub_disk_addr_t e1, e2;
|
||||||
|
|
||||||
s1 = p->sector;
|
s1 = p->sector;
|
||||||
e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
||||||
@@ -271,16 +271,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
|||||||
s2 = q->sector;
|
s2 = q->sector;
|
||||||
e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
||||||
|
|
||||||
if (s2 > s1)
|
if (s1 < e2 && s2 < e1)
|
||||||
{
|
|
||||||
t = s2;
|
|
||||||
s2 = s1;
|
|
||||||
s1 = t;
|
|
||||||
t = e2;
|
|
||||||
e2 = e1;
|
|
||||||
e1 = t;
|
|
||||||
}
|
|
||||||
if (e1 > s2)
|
|
||||||
{
|
{
|
||||||
/* This might be actually valid, but it is unbelievable that
|
/* This might be actually valid, but it is unbelievable that
|
||||||
any filesystem makes such a silly allocation. */
|
any filesystem makes such a silly allocation. */
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ static const char *names[] =
|
|||||||
is required to save accross hibernations. */
|
is required to save accross hibernations. */
|
||||||
[GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"),
|
[GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"),
|
||||||
[GRUB_MEMORY_BADRAM] = N_("faulty RAM (BadRAM)"),
|
[GRUB_MEMORY_BADRAM] = N_("faulty RAM (BadRAM)"),
|
||||||
|
[GRUB_MEMORY_PERSISTENT] = N_("persistent RAM"),
|
||||||
|
[GRUB_MEMORY_PERSISTENT_LEGACY] = N_("persistent RAM (legacy)"),
|
||||||
[GRUB_MEMORY_COREBOOT_TABLES] = N_("RAM holding coreboot tables"),
|
[GRUB_MEMORY_COREBOOT_TABLES] = N_("RAM holding coreboot tables"),
|
||||||
[GRUB_MEMORY_CODE] = N_("RAM holding firmware code")
|
[GRUB_MEMORY_CODE] = N_("RAM holding firmware code")
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ struct find_node_context
|
|||||||
grub_uint64_t inode_found;
|
grub_uint64_t inode_found;
|
||||||
char *dirname;
|
char *dirname;
|
||||||
enum
|
enum
|
||||||
{ NONE, FILE, DIR } found;
|
{ FOUND_NONE, FOUND_FILE, FOUND_DIR } found;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -53,7 +53,7 @@ find_inode (const char *filename,
|
|||||||
&& grub_strcasecmp (ctx->dirname, filename) == 0)))
|
&& grub_strcasecmp (ctx->dirname, filename) == 0)))
|
||||||
{
|
{
|
||||||
ctx->inode_found = info->inode;
|
ctx->inode_found = info->inode;
|
||||||
ctx->found = info->dir ? DIR : FILE;
|
ctx->found = info->dir ? FOUND_DIR : FOUND_FILE;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ grub_mac_bless_inode (grub_device_t dev, grub_uint32_t inode, int is_dir,
|
|||||||
ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz);
|
ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz);
|
||||||
ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block);
|
ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block);
|
||||||
embedded_offset = (ablk_start
|
embedded_offset = (ablk_start
|
||||||
+ extent_start
|
+ ((grub_uint64_t) extent_start)
|
||||||
* (ablk_size >> GRUB_DISK_SECTOR_BITS));
|
* (ablk_size >> GRUB_DISK_SECTOR_BITS));
|
||||||
|
|
||||||
err =
|
err =
|
||||||
@@ -175,7 +175,7 @@ grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel)
|
|||||||
grub_free (path);
|
grub_free (path);
|
||||||
|
|
||||||
return grub_mac_bless_inode (dev, (grub_uint32_t) ctx.inode_found,
|
return grub_mac_bless_inode (dev, (grub_uint32_t) ctx.inode_found,
|
||||||
(ctx.found == DIR), intel);
|
(ctx.found == FOUND_DIR), intel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -183,7 +183,7 @@ grub_cmd_macbless (grub_command_t cmd, int argc, char **args)
|
|||||||
{
|
{
|
||||||
char *device_name;
|
char *device_name;
|
||||||
char *path = 0;
|
char *path = 0;
|
||||||
grub_device_t dev;
|
grub_device_t dev = 0;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
|
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
@@ -197,13 +197,12 @@ grub_cmd_macbless (grub_command_t cmd, int argc, char **args)
|
|||||||
else
|
else
|
||||||
path = path + 1;
|
path = path + 1;
|
||||||
|
|
||||||
if (!path || *path == 0 || !device_name)
|
if (!path || *path == 0 || !dev)
|
||||||
{
|
{
|
||||||
if (dev)
|
if (dev)
|
||||||
grub_device_close (dev);
|
grub_device_close (dev);
|
||||||
|
|
||||||
grub_free (device_name);
|
grub_free (device_name);
|
||||||
grub_free (path);
|
|
||||||
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ get_uuid (const char *name, char **uuid, int getnative)
|
|||||||
if (!dev->disk)
|
if (!dev->disk)
|
||||||
{
|
{
|
||||||
grub_dprintf ("nativedisk", "Skipping non-disk\n");
|
grub_dprintf ("nativedisk", "Skipping non-disk\n");
|
||||||
|
grub_device_close (dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +91,7 @@ get_uuid (const char *name, char **uuid, int getnative)
|
|||||||
case GRUB_DISK_DEVICE_MEMDISK_ID:
|
case GRUB_DISK_DEVICE_MEMDISK_ID:
|
||||||
grub_dprintf ("nativedisk", "Skipping native disk %s\n",
|
grub_dprintf ("nativedisk", "Skipping native disk %s\n",
|
||||||
dev->disk->name);
|
dev->disk->name);
|
||||||
|
grub_device_close (dev);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* FIXME: those probably need special handling. */
|
/* FIXME: those probably need special handling. */
|
||||||
@@ -196,7 +198,10 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (get_uuid (NULL, &uuid_root, 0))
|
if (get_uuid (NULL, &uuid_root, 0))
|
||||||
return grub_errno;
|
{
|
||||||
|
grub_free (mods);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
prefdev = grub_file_get_device_name (prefix);
|
prefdev = grub_file_get_device_name (prefix);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
@@ -208,6 +213,8 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
if (get_uuid (prefdev, &uuid_prefix, 0))
|
if (get_uuid (prefdev, &uuid_prefix, 0))
|
||||||
{
|
{
|
||||||
grub_free (uuid_root);
|
grub_free (uuid_root);
|
||||||
|
grub_free (prefdev);
|
||||||
|
grub_free (mods);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,12 +294,15 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
grub_free (uuid_root);
|
grub_free (uuid_root);
|
||||||
grub_free (uuid_prefix);
|
grub_free (uuid_prefix);
|
||||||
|
grub_free (prefdev);
|
||||||
|
grub_free (mods);
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
grub_free (uuid_root);
|
grub_free (uuid_root);
|
||||||
grub_free (uuid_prefix);
|
grub_free (uuid_prefix);
|
||||||
|
grub_free (prefdev);
|
||||||
|
|
||||||
for (i = 0; i < mods_loaded; i++)
|
for (i = 0; i < mods_loaded; i++)
|
||||||
if (mods[i])
|
if (mods[i])
|
||||||
@@ -300,6 +310,8 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
mods[i]->fini = 0;
|
mods[i]->fini = 0;
|
||||||
grub_dl_unload (mods[i]);
|
grub_dl_unload (mods[i]);
|
||||||
}
|
}
|
||||||
|
grub_free (mods);
|
||||||
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -243,11 +243,19 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
return show_help (dev);
|
{
|
||||||
|
err = show_help (dev);
|
||||||
|
grub_device_close (dev);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
if (grub_strcmp (args[i], "help") == 0)
|
if (grub_strcmp (args[i], "help") == 0)
|
||||||
return show_help (dev);
|
{
|
||||||
|
err = show_help (dev);
|
||||||
|
grub_device_close (dev);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
parsed = (int *) grub_zalloc (argc * sizeof (int));
|
parsed = (int *) grub_zalloc (argc * sizeof (int));
|
||||||
|
|
||||||
@@ -274,8 +282,12 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (! cur)
|
if (! cur)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("unknown argument `%s'"),
|
{
|
||||||
|
grub_free (parsed);
|
||||||
|
grub_device_close (dev);
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("unknown argument `%s'"),
|
||||||
args[i]);
|
args[i]);
|
||||||
|
}
|
||||||
ptool = cur;
|
ptool = cur;
|
||||||
pargs = (struct grub_parttool_args *)
|
pargs = (struct grub_parttool_args *)
|
||||||
grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args));
|
grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args));
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ check_password (const char *user, const char *entered, void *pin)
|
|||||||
grub_uint8_t *buf;
|
grub_uint8_t *buf;
|
||||||
struct pbkdf2_password *pass = pin;
|
struct pbkdf2_password *pass = pin;
|
||||||
gcry_err_code_t err;
|
gcry_err_code_t err;
|
||||||
|
grub_err_t ret;
|
||||||
|
|
||||||
buf = grub_malloc (pass->buflen);
|
buf = grub_malloc (pass->buflen);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
@@ -55,17 +56,17 @@ check_password (const char *user, const char *entered, void *pin)
|
|||||||
pass->salt, pass->saltlen, pass->c,
|
pass->salt, pass->saltlen, pass->c,
|
||||||
buf, pass->buflen);
|
buf, pass->buflen);
|
||||||
if (err)
|
if (err)
|
||||||
|
ret = grub_crypto_gcry_error (err);
|
||||||
|
else if (grub_crypto_memcmp (buf, pass->expected, pass->buflen) != 0)
|
||||||
|
ret = GRUB_ACCESS_DENIED;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
grub_free (buf);
|
grub_auth_authenticate (user);
|
||||||
return grub_crypto_gcry_error (err);
|
ret = GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_crypto_memcmp (buf, pass->expected, pass->buflen) != 0)
|
grub_free (buf);
|
||||||
return GRUB_ACCESS_DENIED;
|
return ret;
|
||||||
|
|
||||||
grub_auth_authenticate (user);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@@ -104,7 +105,10 @@ grub_cmd_password (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
pass->c = grub_strtoul (ptr, &ptr, 0);
|
pass->c = grub_strtoul (ptr, &ptr, 0);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
return grub_errno;
|
{
|
||||||
|
grub_free (pass);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
if (*ptr != '.')
|
if (*ptr != '.')
|
||||||
{
|
{
|
||||||
grub_free (pass);
|
grub_free (pass);
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ iterate_device (const char *name, void *data)
|
|||||||
/* Skip floppy drives when requested. */
|
/* Skip floppy drives when requested. */
|
||||||
if (ctx->no_floppy &&
|
if (ctx->no_floppy &&
|
||||||
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
||||||
return 0;
|
return 1;
|
||||||
|
|
||||||
#ifdef DO_SEARCH_FS_UUID
|
#ifdef DO_SEARCH_FS_UUID
|
||||||
#define compare_fn grub_strcasecmp
|
#define compare_fn grub_strcasecmp
|
||||||
@@ -210,10 +210,10 @@ try (struct search_ctx *ctx)
|
|||||||
/* Cache entry was outdated. Remove it. */
|
/* Cache entry was outdated. Remove it. */
|
||||||
if (!ctx->count)
|
if (!ctx->count)
|
||||||
{
|
{
|
||||||
|
*prev = cache_ent->next;
|
||||||
grub_free (cache_ent->key);
|
grub_free (cache_ent->key);
|
||||||
grub_free (cache_ent->value);
|
grub_free (cache_ent->value);
|
||||||
grub_free (cache_ent);
|
grub_free (cache_ent);
|
||||||
*prev = cache_ent->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -175,7 +175,10 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
var = "root";
|
var = "root";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (state[SEARCH_LABEL].set)
|
if (state[SEARCH_LABEL].set)
|
||||||
grub_search_label (id, var, state[SEARCH_NO_FLOPPY].set,
|
grub_search_label (id, var, state[SEARCH_NO_FLOPPY].set,
|
||||||
@@ -187,8 +190,10 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
grub_search_fs_file (id, var, state[SEARCH_NO_FLOPPY].set,
|
grub_search_fs_file (id, var, state[SEARCH_NO_FLOPPY].set,
|
||||||
hints, nhints);
|
hints, nhints);
|
||||||
else
|
else
|
||||||
return grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
|
grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
|
||||||
|
|
||||||
|
out:
|
||||||
|
grub_free (hints);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ static const struct grub_arg_option options[] =
|
|||||||
N_("root directory of the syslinux disk [default=/]."),
|
N_("root directory of the syslinux disk [default=/]."),
|
||||||
N_("DIR"), ARG_TYPE_STRING},
|
N_("DIR"), ARG_TYPE_STRING},
|
||||||
{"cwd", 'c', 0,
|
{"cwd", 'c', 0,
|
||||||
N_("current directory of the syslinux [default is parent directory of input file]."),
|
N_("current directory of syslinux [default is parent directory of input file]."),
|
||||||
N_("DIR"), ARG_TYPE_STRING},
|
N_("DIR"), ARG_TYPE_STRING},
|
||||||
{"isolinux", 'i', 0, N_("assume input is an isolinux configuration file."), 0, 0},
|
{"isolinux", 'i', 0, N_("assume input is an isolinux configuration file."), 0, 0},
|
||||||
{"pxelinux", 'p', 0, N_("assume input is a pxelinux configuration file."), 0, 0},
|
{"pxelinux", 'p', 0, N_("assume input is a pxelinux configuration file."), 0, 0},
|
||||||
@@ -119,7 +119,10 @@ syslinux_file (grub_extcmd_context_t ctxt, const char *filename)
|
|||||||
{
|
{
|
||||||
menu = grub_zalloc (sizeof (*menu));
|
menu = grub_zalloc (sizeof (*menu));
|
||||||
if (! menu)
|
if (! menu)
|
||||||
return grub_errno;
|
{
|
||||||
|
grub_free (result);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
grub_env_set_menu (menu);
|
grub_env_set_menu (menu);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
get_fileinfo (args[*argn + 1], &ctx);
|
get_fileinfo (args[*argn + 1], &ctx);
|
||||||
update_val (ctx.file_exists && ctx.file_info.dir, &ctx);
|
update_val (ctx.file_exists && ctx.file_info.dir, &ctx);
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (args[*argn], "-e") == 0)
|
if (grub_strcmp (args[*argn], "-e") == 0)
|
||||||
@@ -340,7 +340,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
get_fileinfo (args[*argn + 1], &ctx);
|
get_fileinfo (args[*argn + 1], &ctx);
|
||||||
update_val (ctx.file_exists, &ctx);
|
update_val (ctx.file_exists, &ctx);
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (args[*argn], "-f") == 0)
|
if (grub_strcmp (args[*argn], "-f") == 0)
|
||||||
@@ -349,7 +349,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
/* FIXME: check for other types. */
|
/* FIXME: check for other types. */
|
||||||
update_val (ctx.file_exists && ! ctx.file_info.dir, &ctx);
|
update_val (ctx.file_exists && ! ctx.file_info.dir, &ctx);
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (args[*argn], "-s") == 0)
|
if (grub_strcmp (args[*argn], "-s") == 0)
|
||||||
@@ -362,7 +362,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* String tests. */
|
/* String tests. */
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ grub_cmd_tr (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
} else if (argc > 3)
|
} else if (argc > 3)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "too many parameters");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "too many parameters");
|
||||||
|
|
||||||
if (argc <= 0 && (!s1 || !s2 || !input))
|
if (!s1 || !s2 || !input)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing parameters");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing parameters");
|
||||||
|
|
||||||
if (grub_strlen (s1) != grub_strlen (s2))
|
if (grub_strlen (s1) != grub_strlen (s2))
|
||||||
|
|||||||
+78
-22
@@ -33,6 +33,13 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
struct grub_verified
|
||||||
|
{
|
||||||
|
grub_file_t file;
|
||||||
|
void *buf;
|
||||||
|
};
|
||||||
|
typedef struct grub_verified *grub_verified_t;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
OPTION_SKIP_SIG = 0
|
OPTION_SKIP_SIG = 0
|
||||||
@@ -301,7 +308,7 @@ grub_load_public_key (grub_file_t f)
|
|||||||
if (!sk)
|
if (!sk)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
grub_memset (fingerprint_context, 0, sizeof (fingerprint_context));
|
grub_memset (fingerprint_context, 0, GRUB_MD_SHA1->contextsize);
|
||||||
GRUB_MD_SHA1->init (fingerprint_context);
|
GRUB_MD_SHA1->init (fingerprint_context);
|
||||||
GRUB_MD_SHA1->write (fingerprint_context, "\x99", 1);
|
GRUB_MD_SHA1->write (fingerprint_context, "\x99", 1);
|
||||||
len_be = grub_cpu_to_be16 (len);
|
len_be = grub_cpu_to_be16 (len);
|
||||||
@@ -317,19 +324,19 @@ grub_load_public_key (grub_file_t f)
|
|||||||
if (grub_file_read (f, &l, sizeof (l)) != sizeof (l))
|
if (grub_file_read (f, &l, sizeof (l)) != sizeof (l))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
goto fail;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
lb = (grub_be_to_cpu16 (l) + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT;
|
lb = (grub_be_to_cpu16 (l) + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT;
|
||||||
if (lb > READBUF_SIZE - sizeof (grub_uint16_t))
|
if (lb > READBUF_SIZE - sizeof (grub_uint16_t))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
goto fail;
|
break;
|
||||||
}
|
}
|
||||||
if (grub_file_read (f, buffer + sizeof (grub_uint16_t), lb) != (grub_ssize_t) lb)
|
if (grub_file_read (f, buffer + sizeof (grub_uint16_t), lb) != (grub_ssize_t) lb)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
goto fail;
|
break;
|
||||||
}
|
}
|
||||||
grub_memcpy (buffer, &l, sizeof (l));
|
grub_memcpy (buffer, &l, sizeof (l));
|
||||||
|
|
||||||
@@ -339,10 +346,16 @@ grub_load_public_key (grub_file_t f)
|
|||||||
buffer, lb + sizeof (grub_uint16_t), 0))
|
buffer, lb + sizeof (grub_uint16_t), 0))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
goto fail;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i < pkalgos[pk].nmpipub)
|
||||||
|
{
|
||||||
|
grub_free (sk);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
GRUB_MD_SHA1->final (fingerprint_context);
|
GRUB_MD_SHA1->final (fingerprint_context);
|
||||||
|
|
||||||
grub_memcpy (sk->fingerprint, GRUB_MD_SHA1->read (fingerprint_context), 20);
|
grub_memcpy (sk->fingerprint, GRUB_MD_SHA1->read (fingerprint_context), 20);
|
||||||
@@ -447,7 +460,7 @@ grub_verify_signature_real (char *buf, grub_size_t size,
|
|||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_size_t i;
|
grub_size_t i;
|
||||||
gcry_mpi_t mpis[10];
|
gcry_mpi_t mpis[10];
|
||||||
grub_uint8_t type;
|
grub_uint8_t type = 0;
|
||||||
|
|
||||||
err = read_packet_header (sig, &type, &len);
|
err = read_packet_header (sig, &type, &len);
|
||||||
if (err)
|
if (err)
|
||||||
@@ -802,19 +815,39 @@ grub_cmd_verify_signature (grub_extcmd_context_t ctxt,
|
|||||||
|
|
||||||
static int sec = 0;
|
static int sec = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
verified_free (grub_verified_t verified)
|
||||||
|
{
|
||||||
|
if (verified)
|
||||||
|
{
|
||||||
|
grub_free (verified->buf);
|
||||||
|
grub_free (verified);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static grub_ssize_t
|
static grub_ssize_t
|
||||||
verified_read (struct grub_file *file, char *buf, grub_size_t len)
|
verified_read (struct grub_file *file, char *buf, grub_size_t len)
|
||||||
{
|
{
|
||||||
grub_memcpy (buf, (char *) file->data + file->offset, len);
|
grub_verified_t verified = file->data;
|
||||||
|
|
||||||
|
grub_memcpy (buf, (char *) verified->buf + file->offset, len);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
verified_close (struct grub_file *file)
|
verified_close (struct grub_file *file)
|
||||||
{
|
{
|
||||||
grub_free (file->data);
|
grub_verified_t verified = file->data;
|
||||||
|
|
||||||
|
grub_file_close (verified->file);
|
||||||
|
verified_free (verified);
|
||||||
file->data = 0;
|
file->data = 0;
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
|
/* device and name are freed by parent */
|
||||||
|
file->device = 0;
|
||||||
|
file->name = 0;
|
||||||
|
|
||||||
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct grub_fs verified_fs =
|
struct grub_fs verified_fs =
|
||||||
@@ -832,10 +865,13 @@ grub_pubkey_open (grub_file_t io, const char *filename)
|
|||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_file_filter_t curfilt[GRUB_FILE_FILTER_MAX];
|
grub_file_filter_t curfilt[GRUB_FILE_FILTER_MAX];
|
||||||
grub_file_t ret;
|
grub_file_t ret;
|
||||||
|
grub_verified_t verified;
|
||||||
|
|
||||||
if (!sec)
|
if (!sec)
|
||||||
return io;
|
return io;
|
||||||
if (io->device->disk && io->device->disk->id == GRUB_DISK_DEVICE_MEMDISK_ID)
|
if (io->device->disk &&
|
||||||
|
(io->device->disk->dev->id == GRUB_DISK_DEVICE_MEMDISK_ID
|
||||||
|
|| io->device->disk->dev->id == GRUB_DISK_DEVICE_PROCFS_ID))
|
||||||
return io;
|
return io;
|
||||||
fsuf = grub_malloc (grub_strlen (filename) + sizeof (".sig"));
|
fsuf = grub_malloc (grub_strlen (filename) + sizeof (".sig"));
|
||||||
if (!fsuf)
|
if (!fsuf)
|
||||||
@@ -855,7 +891,10 @@ grub_pubkey_open (grub_file_t io, const char *filename)
|
|||||||
|
|
||||||
ret = grub_malloc (sizeof (*ret));
|
ret = grub_malloc (sizeof (*ret));
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return NULL;
|
{
|
||||||
|
grub_file_close (sig);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
*ret = *io;
|
*ret = *io;
|
||||||
|
|
||||||
ret->fs = &verified_fs;
|
ret->fs = &verified_fs;
|
||||||
@@ -864,29 +903,46 @@ grub_pubkey_open (grub_file_t io, const char *filename)
|
|||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"big file signature isn't implemented yet");
|
"big file signature isn't implemented yet");
|
||||||
return NULL;
|
grub_file_close (sig);
|
||||||
}
|
|
||||||
ret->data = grub_malloc (ret->size);
|
|
||||||
if (!ret->data)
|
|
||||||
{
|
|
||||||
grub_free (ret);
|
grub_free (ret);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (grub_file_read (io, ret->data, ret->size) != (grub_ssize_t) ret->size)
|
verified = grub_malloc (sizeof (*verified));
|
||||||
|
if (!verified)
|
||||||
|
{
|
||||||
|
grub_file_close (sig);
|
||||||
|
grub_free (ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
verified->buf = grub_malloc (ret->size);
|
||||||
|
if (!verified->buf)
|
||||||
|
{
|
||||||
|
grub_file_close (sig);
|
||||||
|
grub_free (verified);
|
||||||
|
grub_free (ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (grub_file_read (io, verified->buf, ret->size) != (grub_ssize_t) ret->size)
|
||||||
{
|
{
|
||||||
if (!grub_errno)
|
if (!grub_errno)
|
||||||
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
||||||
filename);
|
filename);
|
||||||
|
grub_file_close (sig);
|
||||||
|
verified_free (verified);
|
||||||
|
grub_free (ret);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = grub_verify_signature_real (ret->data, ret->size, 0, sig, NULL);
|
err = grub_verify_signature_real (verified->buf, ret->size, 0, sig, NULL);
|
||||||
grub_file_close (sig);
|
grub_file_close (sig);
|
||||||
if (err)
|
if (err)
|
||||||
return NULL;
|
{
|
||||||
io->device = 0;
|
verified_free (verified);
|
||||||
io->name = 0;
|
grub_free (ret);
|
||||||
grub_file_close (io);
|
return NULL;
|
||||||
|
}
|
||||||
|
verified->file = io;
|
||||||
|
ret->data = verified;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -245,7 +245,10 @@ match_devices_iter (const char *name, void *data)
|
|||||||
|
|
||||||
t = grub_realloc (ctx->devs, sizeof (char*) * (ctx->ndev + 2));
|
t = grub_realloc (ctx->devs, sizeof (char*) * (ctx->ndev + 2));
|
||||||
if (! t)
|
if (! t)
|
||||||
return 1;
|
{
|
||||||
|
grub_free (buffer);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
ctx->devs = t;
|
ctx->devs = t;
|
||||||
ctx->devs[ctx->ndev++] = buffer;
|
ctx->devs[ctx->ndev++] = buffer;
|
||||||
@@ -290,7 +293,8 @@ struct match_files_ctx
|
|||||||
|
|
||||||
/* Helper for match_files. */
|
/* Helper for match_files. */
|
||||||
static int
|
static int
|
||||||
match_files_iter (const char *name, const struct grub_dirhook_info *info,
|
match_files_iter (const char *name,
|
||||||
|
const struct grub_dirhook_info *info __attribute__((unused)),
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct match_files_ctx *ctx = data;
|
struct match_files_ctx *ctx = data;
|
||||||
|
|||||||
@@ -72,13 +72,13 @@ AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, grub_uint8_t * dst,
|
|||||||
grub_size_t i;
|
grub_size_t i;
|
||||||
grub_uint8_t *bufblock;
|
grub_uint8_t *bufblock;
|
||||||
|
|
||||||
|
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN || hash->mdlen == 0)
|
||||||
|
return GPG_ERR_INV_ARG;
|
||||||
|
|
||||||
bufblock = grub_zalloc (blocksize);
|
bufblock = grub_zalloc (blocksize);
|
||||||
if (bufblock == NULL)
|
if (bufblock == NULL)
|
||||||
return GPG_ERR_OUT_OF_MEMORY;
|
return GPG_ERR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN)
|
|
||||||
return GPG_ERR_INV_ARG;
|
|
||||||
|
|
||||||
grub_memset (bufblock, 0, blocksize);
|
grub_memset (bufblock, 0, blocksize);
|
||||||
for (i = 0; i < blocknumbers - 1; i++)
|
for (i = 0; i < blocknumbers - 1; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
+51
-28
@@ -32,7 +32,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
struct grub_ahci_cmd_head
|
struct grub_ahci_cmd_head
|
||||||
{
|
{
|
||||||
grub_uint32_t config;
|
grub_uint32_t config;
|
||||||
grub_uint32_t transfered;
|
grub_uint32_t transferred;
|
||||||
grub_uint64_t command_table_base;
|
grub_uint64_t command_table_base;
|
||||||
grub_uint32_t unused[4];
|
grub_uint32_t unused[4];
|
||||||
};
|
};
|
||||||
@@ -194,13 +194,11 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
||||||
grub_pci_write_word (addr, grub_pci_read_word (addr) |
|
grub_pci_write_word (addr, grub_pci_read_word (addr)
|
||||||
GRUB_PCI_COMMAND_IO_ENABLED
|
| GRUB_PCI_COMMAND_MEM_ENABLED | GRUB_PCI_COMMAND_BUS_MASTER);
|
||||||
| GRUB_PCI_COMMAND_MEM_ENABLED
|
|
||||||
| GRUB_PCI_COMMAND_BUS_MASTER);
|
|
||||||
|
|
||||||
hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK,
|
hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK,
|
||||||
sizeof (hba));
|
sizeof (*hba));
|
||||||
grub_dprintf ("ahci", "dev: %x:%x.%x\n", dev.bus, dev.device, dev.function);
|
grub_dprintf ("ahci", "dev: %x:%x.%x\n", dev.bus, dev.device, dev.function);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "tfd[0]: %x\n",
|
grub_dprintf ("ahci", "tfd[0]: %x\n",
|
||||||
@@ -324,7 +322,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
|
|
||||||
grub_dprintf ("ahci", "GLC:%x\n", hba->global_control);
|
grub_dprintf ("ahci", "GLC:%x\n", hba->global_control);
|
||||||
|
|
||||||
nports = (hba->cap & GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1;
|
nports = (GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1;
|
||||||
|
|
||||||
grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports,
|
grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports,
|
||||||
hba->ports_implemented);
|
hba->ports_implemented);
|
||||||
@@ -357,10 +355,10 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
if (adevs[i])
|
if (adevs[i])
|
||||||
{
|
{
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error = adevs[i]->hba->ports[adevs[i]->port].sata_error;
|
adevs[i]->hba->ports[adevs[i]->port].sata_error = adevs[i]->hba->ports[adevs[i]->port].sata_error;
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
|
|
||||||
adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head));
|
adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head) * 32);
|
||||||
if (!adevs[i]->command_list_chunk)
|
if (!adevs[i]->command_list_chunk)
|
||||||
{
|
{
|
||||||
adevs[i] = 0;
|
adevs[i] = 0;
|
||||||
@@ -378,6 +376,12 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
|
|
||||||
adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk);
|
adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk);
|
||||||
adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk);
|
adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk);
|
||||||
|
|
||||||
|
grub_memset ((void *) adevs[i]->command_list, 0,
|
||||||
|
sizeof (struct grub_ahci_cmd_table));
|
||||||
|
grub_memset ((void *) adevs[i]->command_table, 0,
|
||||||
|
sizeof (struct grub_ahci_cmd_head) * 32);
|
||||||
|
|
||||||
adevs[i]->command_list->command_table_base
|
adevs[i]->command_list->command_table_base
|
||||||
= grub_dma_get_phys (adevs[i]->command_table_chunk);
|
= grub_dma_get_phys (adevs[i]->command_table_chunk);
|
||||||
|
|
||||||
@@ -436,7 +440,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
adevs[i]->hba->ports[adevs[i]->port].intstatus = ~0;
|
adevs[i]->hba->ports[adevs[i]->port].intstatus = ~0;
|
||||||
// adevs[i]->hba->ports[adevs[i]->port].fbs = 0;
|
// adevs[i]->hba->ports[adevs[i]->port].fbs = 0;
|
||||||
|
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
|
|
||||||
adevs[i]->rfis = grub_memalign_dma32 (4096,
|
adevs[i]->rfis = grub_memalign_dma32 (4096,
|
||||||
@@ -450,6 +454,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis);
|
adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis);
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command_list_base
|
adevs[i]->hba->ports[adevs[i]->port].command_list_base
|
||||||
= grub_dma_get_phys (adevs[i]->command_list_chunk);
|
= grub_dma_get_phys (adevs[i]->command_list_chunk);
|
||||||
|
adevs[i]->hba->ports[adevs[i]->port].command_issue = 0;
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE;
|
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -475,7 +480,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (adevs[i])
|
if (adevs[i])
|
||||||
{
|
{
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
fr_running |= (1 << i);
|
fr_running |= (1 << i);
|
||||||
|
|
||||||
@@ -483,7 +488,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_POWER_ON;
|
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_POWER_ON;
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command |= 1 << 28;
|
adevs[i]->hba->ports[adevs[i]->port].command |= 1 << 28;
|
||||||
|
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -510,26 +515,26 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (adevs[i])
|
if (adevs[i])
|
||||||
{
|
{
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
|
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_POWER_ON;
|
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_POWER_ON;
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_SPIN_UP;
|
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_SPIN_UP;
|
||||||
|
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
|
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error = ~0;
|
adevs[i]->hba->ports[adevs[i]->port].sata_error = ~0;
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "offset: %x, tfd:%x, CMD: %x\n",
|
grub_dprintf ("ahci", "port %d, offset: %x, tfd:%x, CMD: %x\n", adevs[i]->port,
|
||||||
(int) ((char *) &adevs[i]->hba->ports[adevs[i]->port].task_file_data -
|
(int) ((char *) &adevs[i]->hba->ports[adevs[i]->port].task_file_data -
|
||||||
(char *) adevs[i]->hba),
|
(char *) adevs[i]->hba),
|
||||||
adevs[i]->hba->ports[adevs[i]->port].task_file_data,
|
adevs[i]->hba->ports[adevs[i]->port].task_file_data,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command);
|
adevs[i]->hba->ports[adevs[i]->port].command);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -537,17 +542,19 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (adevs[i])
|
if (adevs[i])
|
||||||
{
|
{
|
||||||
grub_dprintf ("ahci", "offset: %x, tfd:%x, CMD: %x\n",
|
grub_dprintf ("ahci", "port %d, offset: %x, tfd:%x, CMD: %x\n", adevs[i]->port,
|
||||||
(int) ((char *) &adevs[i]->hba->ports[adevs[i]->port].task_file_data -
|
(int) ((char *) &adevs[i]->hba->ports[adevs[i]->port].task_file_data -
|
||||||
(char *) adevs[i]->hba),
|
(char *) adevs[i]->hba),
|
||||||
adevs[i]->hba->ports[adevs[i]->port].task_file_data,
|
adevs[i]->hba->ports[adevs[i]->port].task_file_data,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command);
|
adevs[i]->hba->ports[adevs[i]->port].command);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "port: %d, err: %x\n", adevs[i]->port,
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
|
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command
|
adevs[i]->hba->ports[adevs[i]->port].command
|
||||||
= (adevs[i]->hba->ports[adevs[i]->port].command & 0x0fffffff) | (1 << 28) | 2 | 4;
|
= (adevs[i]->hba->ports[adevs[i]->port].command & 0x0fffffff) | (1 << 28)
|
||||||
|
| GRUB_AHCI_HBA_PORT_CMD_SPIN_UP
|
||||||
|
| GRUB_AHCI_HBA_PORT_CMD_POWER_ON;
|
||||||
|
|
||||||
/* struct grub_disk_ata_pass_through_parms parms2;
|
/* struct grub_disk_ata_pass_through_parms parms2;
|
||||||
grub_memset (&parms2, 0, sizeof (parms2));
|
grub_memset (&parms2, 0, sizeof (parms2));
|
||||||
@@ -560,14 +567,14 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
while (grub_get_time_ms () < endtime)
|
while (grub_get_time_ms () < endtime)
|
||||||
{
|
{
|
||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].task_file_data & 0x88))
|
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].task_file_data & (GRUB_ATA_STATUS_BUSY | GRUB_ATA_STATUS_DRQ)))
|
||||||
break;
|
break;
|
||||||
if (i == nports)
|
if (i == nports)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].task_file_data & 0x88))
|
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].task_file_data & (GRUB_ATA_STATUS_BUSY | GRUB_ATA_STATUS_DRQ)))
|
||||||
{
|
{
|
||||||
grub_dprintf ("ahci", "port %d is busy\n", i);
|
grub_dprintf ("ahci", "port %d is busy\n", i);
|
||||||
failed_adevs[i] = adevs[i];
|
failed_adevs[i] = adevs[i];
|
||||||
@@ -596,6 +603,9 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
failed_adevs[i] = adevs[i];
|
failed_adevs[i] = adevs[i];
|
||||||
adevs[i] = 0;
|
adevs[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_dprintf ("ahci", "cleaning up failed devs\n");
|
||||||
|
|
||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (failed_adevs[i] && (fr_running & (1 << i)))
|
if (failed_adevs[i] && (fr_running & (1 << i)))
|
||||||
failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE;
|
failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE;
|
||||||
@@ -621,6 +631,10 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14)
|
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14)
|
||||||
adevs[i]->atapi = 1;
|
adevs[i]->atapi = 1;
|
||||||
|
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
||||||
|
grub_pci_write_word (addr, grub_pci_read_word (addr)
|
||||||
|
| GRUB_PCI_COMMAND_BUS_MASTER);
|
||||||
|
|
||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (adevs[i])
|
if (adevs[i])
|
||||||
{
|
{
|
||||||
@@ -847,6 +861,12 @@ grub_ahci_reset_port (struct grub_ahci_device *dev, int force)
|
|||||||
{
|
{
|
||||||
struct grub_disk_ata_pass_through_parms parms2;
|
struct grub_disk_ata_pass_through_parms parms2;
|
||||||
dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST;
|
dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST;
|
||||||
|
dev->hba->ports[dev->port].command_issue = 0;
|
||||||
|
dev->command_list[0].config = 0;
|
||||||
|
dev->command_table[0].prdt[0].unused = 0;
|
||||||
|
dev->command_table[0].prdt[0].size = 0;
|
||||||
|
dev->command_table[0].prdt[0].data_base = 0;
|
||||||
|
|
||||||
endtime = grub_get_time_ms () + 1000;
|
endtime = grub_get_time_ms () + 1000;
|
||||||
while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR))
|
while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR))
|
||||||
if (grub_get_time_ms () > endtime)
|
if (grub_get_time_ms () > endtime)
|
||||||
@@ -914,7 +934,10 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH)
|
if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH)
|
||||||
return grub_error (GRUB_ERR_BUG, "too big data buffer");
|
return grub_error (GRUB_ERR_BUG, "too big data buffer");
|
||||||
|
|
||||||
bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1));
|
if (parms->size)
|
||||||
|
bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1));
|
||||||
|
else
|
||||||
|
bufc = grub_memalign_dma32 (1024, 512);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n",
|
grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n",
|
||||||
dev->hba->ports[dev->port].task_file_data,
|
dev->hba->ports[dev->port].task_file_data,
|
||||||
@@ -924,14 +947,14 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
= (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT)
|
= (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT)
|
||||||
// | GRUB_AHCI_CONFIG_CLEAR_R_OK
|
// | GRUB_AHCI_CONFIG_CLEAR_R_OK
|
||||||
| (0 << GRUB_AHCI_CONFIG_PMP_SHIFT)
|
| (0 << GRUB_AHCI_CONFIG_PMP_SHIFT)
|
||||||
| (1 << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT)
|
| ((parms->size ? 1 : 0) << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT)
|
||||||
| (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0)
|
| (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0)
|
||||||
| (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ)
|
| (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ)
|
||||||
| (parms->taskfile.cmd == 8 ? (1 << 8) : 0);
|
| (parms->taskfile.cmd == 8 ? (1 << 8) : 0);
|
||||||
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
||||||
dev->hba->ports[dev->port].task_file_data);
|
dev->hba->ports[dev->port].task_file_data);
|
||||||
|
|
||||||
dev->command_list[0].transfered = 0;
|
dev->command_list[0].transferred = 0;
|
||||||
dev->command_list[0].command_table_base
|
dev->command_list[0].command_table_base
|
||||||
= grub_dma_get_phys (dev->command_table_chunk);
|
= grub_dma_get_phys (dev->command_table_chunk);
|
||||||
|
|
||||||
@@ -981,7 +1004,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
if (parms->write)
|
if (parms->write)
|
||||||
grub_memcpy ((char *) grub_dma_get_virt (bufc), parms->buffer, parms->size);
|
grub_memcpy ((char *) grub_dma_get_virt (bufc), parms->buffer, parms->size);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "AHCI command schedulded\n");
|
grub_dprintf ("ahci", "AHCI command scheduled\n");
|
||||||
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
||||||
dev->hba->ports[dev->port].task_file_data);
|
dev->hba->ports[dev->port].task_file_data);
|
||||||
grub_dprintf ("ahci", "AHCI inten = %x\n",
|
grub_dprintf ("ahci", "AHCI inten = %x\n",
|
||||||
@@ -1001,7 +1024,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
||||||
dev->hba->ports[dev->port].task_file_data);
|
dev->hba->ports[dev->port].task_file_data);
|
||||||
|
|
||||||
endtime = grub_get_time_ms () + (spinup ? 10000 : 5000);
|
endtime = grub_get_time_ms () + (spinup ? 20000 : 20000);
|
||||||
while ((dev->hba->ports[dev->port].command_issue & 1))
|
while ((dev->hba->ports[dev->port].command_issue & 1))
|
||||||
if (grub_get_time_ms () > endtime)
|
if (grub_get_time_ms () > endtime)
|
||||||
{
|
{
|
||||||
@@ -1021,7 +1044,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
dev->hba->ports[dev->port].command_issue,
|
dev->hba->ports[dev->port].command_issue,
|
||||||
dev->hba->ports[dev->port].intstatus,
|
dev->hba->ports[dev->port].intstatus,
|
||||||
dev->hba->ports[dev->port].task_file_data,
|
dev->hba->ports[dev->port].task_file_data,
|
||||||
dev->command_list[0].transfered,
|
dev->command_list[0].transferred,
|
||||||
dev->hba->ports[dev->port].sata_error,
|
dev->hba->ports[dev->port].sata_error,
|
||||||
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x00],
|
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x00],
|
||||||
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x18]);
|
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x18]);
|
||||||
|
|||||||
@@ -216,6 +216,12 @@ grub_ata_setaddress (struct grub_ata *dev,
|
|||||||
unsigned int head;
|
unsigned int head;
|
||||||
unsigned int sect;
|
unsigned int sect;
|
||||||
|
|
||||||
|
if (dev->sectors_per_track == 0
|
||||||
|
|| dev->heads == 0)
|
||||||
|
return grub_error (GRUB_ERR_OUT_OF_RANGE,
|
||||||
|
"sector %d cannot be addressed "
|
||||||
|
"using CHS addressing", sector);
|
||||||
|
|
||||||
/* Calculate the sector, cylinder and head to use. */
|
/* Calculate the sector, cylinder and head to use. */
|
||||||
sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1;
|
sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1;
|
||||||
cylinder = (((grub_uint32_t) sector / dev->sectors_per_track)
|
cylinder = (((grub_uint32_t) sector / dev->sectors_per_track)
|
||||||
|
|||||||
+61
-37
@@ -25,6 +25,7 @@
|
|||||||
#include <grub/fs.h>
|
#include <grub/fs.h>
|
||||||
#include <grub/file.h>
|
#include <grub/file.h>
|
||||||
#include <grub/procfs.h>
|
#include <grub/procfs.h>
|
||||||
|
#include <grub/partition.h>
|
||||||
|
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
#include <grub/emu/hostdisk.h>
|
#include <grub/emu/hostdisk.h>
|
||||||
@@ -110,20 +111,23 @@ grub_crypto_pcbc_decrypt (grub_crypto_cipher_handle_t cipher,
|
|||||||
{
|
{
|
||||||
grub_uint8_t *inptr, *outptr, *end;
|
grub_uint8_t *inptr, *outptr, *end;
|
||||||
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
||||||
if (cipher->cipher->blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
grub_size_t blocksize;
|
||||||
return GPG_ERR_INV_ARG;
|
|
||||||
if (!cipher->cipher->decrypt)
|
if (!cipher->cipher->decrypt)
|
||||||
return GPG_ERR_NOT_SUPPORTED;
|
return GPG_ERR_NOT_SUPPORTED;
|
||||||
if (size % cipher->cipher->blocksize != 0)
|
blocksize = cipher->cipher->blocksize;
|
||||||
|
if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0)
|
||||||
|
|| ((size & (blocksize - 1)) != 0))
|
||||||
|
return GPG_ERR_INV_ARG;
|
||||||
|
if (blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
||||||
return GPG_ERR_INV_ARG;
|
return GPG_ERR_INV_ARG;
|
||||||
end = (grub_uint8_t *) in + size;
|
end = (grub_uint8_t *) in + size;
|
||||||
for (inptr = in, outptr = out; inptr < end;
|
for (inptr = in, outptr = out; inptr < end;
|
||||||
inptr += cipher->cipher->blocksize, outptr += cipher->cipher->blocksize)
|
inptr += blocksize, outptr += blocksize)
|
||||||
{
|
{
|
||||||
grub_memcpy (ivt, inptr, cipher->cipher->blocksize);
|
grub_memcpy (ivt, inptr, blocksize);
|
||||||
cipher->cipher->decrypt (cipher->ctx, outptr, inptr);
|
cipher->cipher->decrypt (cipher->ctx, outptr, inptr);
|
||||||
grub_crypto_xor (outptr, outptr, iv, cipher->cipher->blocksize);
|
grub_crypto_xor (outptr, outptr, iv, blocksize);
|
||||||
grub_crypto_xor (iv, ivt, outptr, cipher->cipher->blocksize);
|
grub_crypto_xor (iv, ivt, outptr, blocksize);
|
||||||
}
|
}
|
||||||
return GPG_ERR_NO_ERROR;
|
return GPG_ERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
@@ -135,20 +139,23 @@ grub_crypto_pcbc_encrypt (grub_crypto_cipher_handle_t cipher,
|
|||||||
{
|
{
|
||||||
grub_uint8_t *inptr, *outptr, *end;
|
grub_uint8_t *inptr, *outptr, *end;
|
||||||
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
||||||
if (cipher->cipher->blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
grub_size_t blocksize;
|
||||||
return GPG_ERR_INV_ARG;
|
if (!cipher->cipher->encrypt)
|
||||||
if (!cipher->cipher->decrypt)
|
|
||||||
return GPG_ERR_NOT_SUPPORTED;
|
return GPG_ERR_NOT_SUPPORTED;
|
||||||
if (size % cipher->cipher->blocksize != 0)
|
blocksize = cipher->cipher->blocksize;
|
||||||
|
if (blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
||||||
|
return GPG_ERR_INV_ARG;
|
||||||
|
if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0)
|
||||||
|
|| ((size & (blocksize - 1)) != 0))
|
||||||
return GPG_ERR_INV_ARG;
|
return GPG_ERR_INV_ARG;
|
||||||
end = (grub_uint8_t *) in + size;
|
end = (grub_uint8_t *) in + size;
|
||||||
for (inptr = in, outptr = out; inptr < end;
|
for (inptr = in, outptr = out; inptr < end;
|
||||||
inptr += cipher->cipher->blocksize, outptr += cipher->cipher->blocksize)
|
inptr += blocksize, outptr += blocksize)
|
||||||
{
|
{
|
||||||
grub_memcpy (ivt, inptr, cipher->cipher->blocksize);
|
grub_memcpy (ivt, inptr, blocksize);
|
||||||
grub_crypto_xor (outptr, outptr, iv, cipher->cipher->blocksize);
|
grub_crypto_xor (outptr, outptr, iv, blocksize);
|
||||||
cipher->cipher->encrypt (cipher->ctx, outptr, inptr);
|
cipher->cipher->encrypt (cipher->ctx, outptr, inptr);
|
||||||
grub_crypto_xor (iv, ivt, outptr, cipher->cipher->blocksize);
|
grub_crypto_xor (iv, ivt, outptr, blocksize);
|
||||||
}
|
}
|
||||||
return GPG_ERR_NO_ERROR;
|
return GPG_ERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
@@ -372,11 +379,13 @@ grub_cryptodisk_endecrypt (struct grub_cryptodisk *dev,
|
|||||||
break;
|
break;
|
||||||
case GRUB_CRYPTODISK_MODE_ECB:
|
case GRUB_CRYPTODISK_MODE_ECB:
|
||||||
if (do_encrypt)
|
if (do_encrypt)
|
||||||
grub_crypto_ecb_encrypt (dev->cipher, data + i, data + i,
|
err = grub_crypto_ecb_encrypt (dev->cipher, data + i, data + i,
|
||||||
(1U << dev->log_sector_size));
|
(1U << dev->log_sector_size));
|
||||||
else
|
else
|
||||||
grub_crypto_ecb_decrypt (dev->cipher, data + i, data + i,
|
err = grub_crypto_ecb_decrypt (dev->cipher, data + i, data + i,
|
||||||
(1U << dev->log_sector_size));
|
(1U << dev->log_sector_size));
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return GPG_ERR_NOT_IMPLEMENTED;
|
return GPG_ERR_NOT_IMPLEMENTED;
|
||||||
@@ -710,6 +719,7 @@ grub_cryptodisk_insert (grub_cryptodisk_t newdev, const char *name,
|
|||||||
newdev->id = last_cryptodisk_id++;
|
newdev->id = last_cryptodisk_id++;
|
||||||
newdev->source_id = source->id;
|
newdev->source_id = source->id;
|
||||||
newdev->source_dev_id = source->dev->id;
|
newdev->source_dev_id = source->dev->id;
|
||||||
|
newdev->partition_start = grub_partition_get_start (source->partition);
|
||||||
newdev->next = cryptodisk_list;
|
newdev->next = cryptodisk_list;
|
||||||
cryptodisk_list = newdev;
|
cryptodisk_list = newdev;
|
||||||
|
|
||||||
@@ -732,7 +742,9 @@ grub_cryptodisk_get_by_source_disk (grub_disk_t disk)
|
|||||||
grub_cryptodisk_t dev;
|
grub_cryptodisk_t dev;
|
||||||
for (dev = cryptodisk_list; dev != NULL; dev = dev->next)
|
for (dev = cryptodisk_list; dev != NULL; dev = dev->next)
|
||||||
if (dev->source_id == disk->id && dev->source_dev_id == disk->dev->id)
|
if (dev->source_id == disk->id && dev->source_dev_id == disk->dev->id)
|
||||||
return dev;
|
if ((disk->partition && grub_partition_get_start (disk->partition) == dev->partition_start) ||
|
||||||
|
(!disk->partition && dev->partition_start == 0))
|
||||||
|
return dev;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -753,6 +765,7 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name,
|
|||||||
newdev->cheat_fd = GRUB_UTIL_FD_INVALID;
|
newdev->cheat_fd = GRUB_UTIL_FD_INVALID;
|
||||||
newdev->source_id = source->id;
|
newdev->source_id = source->id;
|
||||||
newdev->source_dev_id = source->dev->id;
|
newdev->source_dev_id = source->dev->id;
|
||||||
|
newdev->partition_start = grub_partition_get_start (source->partition);
|
||||||
newdev->id = last_cryptodisk_id++;
|
newdev->id = last_cryptodisk_id++;
|
||||||
newdev->next = cryptodisk_list;
|
newdev->next = cryptodisk_list;
|
||||||
cryptodisk_list = newdev;
|
cryptodisk_list = newdev;
|
||||||
@@ -762,25 +775,26 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name,
|
|||||||
|
|
||||||
void
|
void
|
||||||
grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
|
grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
|
||||||
void (*cb) (const char *val))
|
void (*cb) (const char *val, void *data),
|
||||||
|
void *data)
|
||||||
{
|
{
|
||||||
grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data;
|
grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data;
|
||||||
|
|
||||||
cb ("cryptodisk");
|
cb ("cryptodisk", data);
|
||||||
cb (dev->modname);
|
cb (dev->modname, data);
|
||||||
|
|
||||||
if (dev->cipher)
|
if (dev->cipher)
|
||||||
cb (dev->cipher->cipher->modname);
|
cb (dev->cipher->cipher->modname, data);
|
||||||
if (dev->secondary_cipher)
|
if (dev->secondary_cipher)
|
||||||
cb (dev->secondary_cipher->cipher->modname);
|
cb (dev->secondary_cipher->cipher->modname, data);
|
||||||
if (dev->essiv_cipher)
|
if (dev->essiv_cipher)
|
||||||
cb (dev->essiv_cipher->cipher->modname);
|
cb (dev->essiv_cipher->cipher->modname, data);
|
||||||
if (dev->hash)
|
if (dev->hash)
|
||||||
cb (dev->hash->modname);
|
cb (dev->hash->modname, data);
|
||||||
if (dev->essiv_hash)
|
if (dev->essiv_hash)
|
||||||
cb (dev->essiv_hash->modname);
|
cb (dev->essiv_hash->modname, data);
|
||||||
if (dev->iv_hash)
|
if (dev->iv_hash)
|
||||||
cb (dev->iv_hash->modname);
|
cb (dev->iv_hash->modname, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
@@ -955,33 +969,43 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
grub_disk_t disk;
|
grub_disk_t disk;
|
||||||
grub_cryptodisk_t dev;
|
grub_cryptodisk_t dev;
|
||||||
char *diskname;
|
char *diskname;
|
||||||
char *disklast;
|
char *disklast = NULL;
|
||||||
|
grub_size_t len;
|
||||||
|
|
||||||
search_uuid = NULL;
|
search_uuid = NULL;
|
||||||
check_boot = state[2].set;
|
check_boot = state[2].set;
|
||||||
diskname = args[0];
|
diskname = args[0];
|
||||||
if (diskname[0] == '(' && *(disklast = &diskname[grub_strlen (diskname) - 1]) == ')')
|
len = grub_strlen (diskname);
|
||||||
|
if (len && diskname[0] == '(' && diskname[len - 1] == ')')
|
||||||
{
|
{
|
||||||
|
disklast = &diskname[len - 1];
|
||||||
*disklast = '\0';
|
*disklast = '\0';
|
||||||
disk = grub_disk_open (diskname + 1);
|
diskname++;
|
||||||
*disklast = ')';
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
disk = grub_disk_open (diskname);
|
disk = grub_disk_open (diskname);
|
||||||
if (!disk)
|
if (!disk)
|
||||||
return grub_errno;
|
{
|
||||||
|
if (disklast)
|
||||||
|
*disklast = ')';
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
dev = grub_cryptodisk_get_by_source_disk (disk);
|
dev = grub_cryptodisk_get_by_source_disk (disk);
|
||||||
if (dev)
|
if (dev)
|
||||||
{
|
{
|
||||||
grub_dprintf ("cryptodisk", "already mounted as crypto%lu\n", dev->id);
|
grub_dprintf ("cryptodisk", "already mounted as crypto%lu\n", dev->id);
|
||||||
grub_disk_close (disk);
|
grub_disk_close (disk);
|
||||||
|
if (disklast)
|
||||||
|
*disklast = ')';
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = grub_cryptodisk_scan_device_real (args[0], disk);
|
err = grub_cryptodisk_scan_device_real (diskname, disk);
|
||||||
|
|
||||||
grub_disk_close (disk);
|
grub_disk_close (disk);
|
||||||
|
if (disklast)
|
||||||
|
*disklast = ')';
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|||||||
+152
-18
@@ -71,10 +71,12 @@ is_lv_readable (struct grub_diskfilter_lv *lv, int easily)
|
|||||||
case GRUB_DISKFILTER_RAID6:
|
case GRUB_DISKFILTER_RAID6:
|
||||||
if (!easily)
|
if (!easily)
|
||||||
need--;
|
need--;
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_DISKFILTER_RAID4:
|
case GRUB_DISKFILTER_RAID4:
|
||||||
case GRUB_DISKFILTER_RAID5:
|
case GRUB_DISKFILTER_RAID5:
|
||||||
if (!easily)
|
if (!easily)
|
||||||
need--;
|
need--;
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_DISKFILTER_STRIPED:
|
case GRUB_DISKFILTER_STRIPED:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -354,7 +356,8 @@ grub_diskfilter_memberlist (grub_disk_t disk)
|
|||||||
|
|
||||||
void
|
void
|
||||||
grub_diskfilter_get_partmap (grub_disk_t disk,
|
grub_diskfilter_get_partmap (grub_disk_t disk,
|
||||||
void (*cb) (const char *pm))
|
void (*cb) (const char *pm, void *data),
|
||||||
|
void *data)
|
||||||
{
|
{
|
||||||
struct grub_diskfilter_lv *lv = disk->data;
|
struct grub_diskfilter_lv *lv = disk->data;
|
||||||
struct grub_diskfilter_pv *pv;
|
struct grub_diskfilter_pv *pv;
|
||||||
@@ -376,7 +379,7 @@ grub_diskfilter_get_partmap (grub_disk_t disk,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (s = 0; pv->partmaps[s]; s++)
|
for (s = 0; pv->partmaps[s]; s++)
|
||||||
cb (pv->partmaps[s]);
|
cb (pv->partmaps[s], data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -482,6 +485,96 @@ grub_diskfilter_read_node (const struct grub_diskfilter_node *node,
|
|||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_segment (struct grub_diskfilter_segment *seg);
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_lv (struct grub_diskfilter_lv *lv)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
if (!lv)
|
||||||
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown volume");
|
||||||
|
|
||||||
|
if (!lv->vg || lv->vg->extent_size == 0)
|
||||||
|
return grub_error (GRUB_ERR_READ_ERROR, "invalid volume");
|
||||||
|
|
||||||
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
err = validate_segment (&lv->segments[i]);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_node (const struct grub_diskfilter_node *node)
|
||||||
|
{
|
||||||
|
/* Check whether we actually know the physical volume we want to
|
||||||
|
read from. */
|
||||||
|
if (node->pv)
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
if (node->lv)
|
||||||
|
return validate_lv (node->lv);
|
||||||
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_segment (struct grub_diskfilter_segment *seg)
|
||||||
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
|
if (seg->stripe_size == 0 || seg->node_count == 0)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
|
||||||
|
switch (seg->type)
|
||||||
|
{
|
||||||
|
case GRUB_DISKFILTER_RAID10:
|
||||||
|
{
|
||||||
|
grub_uint8_t near, far;
|
||||||
|
near = seg->layout & 0xFF;
|
||||||
|
far = (seg->layout >> 8) & 0xFF;
|
||||||
|
if ((seg->layout >> 16) == 0 && far == 0)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
if (near > seg->node_count)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case GRUB_DISKFILTER_STRIPED:
|
||||||
|
case GRUB_DISKFILTER_MIRROR:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GRUB_DISKFILTER_RAID4:
|
||||||
|
case GRUB_DISKFILTER_RAID5:
|
||||||
|
if (seg->node_count <= 1)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GRUB_DISKFILTER_RAID6:
|
||||||
|
if (seg->node_count <= 2)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
|
"unsupported RAID level %d", seg->type);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned i;
|
||||||
|
for (i = 0; i < seg->node_count; i++)
|
||||||
|
{
|
||||||
|
err = validate_node (&seg->nodes[i]);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector,
|
read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector,
|
||||||
grub_size_t size, char *buf)
|
grub_size_t size, char *buf)
|
||||||
@@ -493,6 +586,7 @@ read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector,
|
|||||||
if (seg->node_count == 1)
|
if (seg->node_count == 1)
|
||||||
return grub_diskfilter_read_node (&seg->nodes[0],
|
return grub_diskfilter_read_node (&seg->nodes[0],
|
||||||
sector, size, buf);
|
sector, size, buf);
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_DISKFILTER_MIRROR:
|
case GRUB_DISKFILTER_MIRROR:
|
||||||
case GRUB_DISKFILTER_RAID10:
|
case GRUB_DISKFILTER_RAID10:
|
||||||
{
|
{
|
||||||
@@ -847,6 +941,23 @@ grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg)
|
|||||||
|
|
||||||
for (lv = vg->lvs; lv; lv = lv->next)
|
for (lv = vg->lvs; lv; lv = lv->next)
|
||||||
{
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
|
/* RAID 1 and single-disk RAID 0 don't use a chunksize but code
|
||||||
|
assumes one so set one. */
|
||||||
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
|
{
|
||||||
|
if (lv->segments[i].type == 1)
|
||||||
|
lv->segments[i].stripe_size = 64;
|
||||||
|
if (lv->segments[i].type == GRUB_DISKFILTER_STRIPED
|
||||||
|
&& lv->segments[i].node_count == 1
|
||||||
|
&& lv->segments[i].stripe_size == 0)
|
||||||
|
lv->segments[i].stripe_size = 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = validate_lv(lv);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
lv->number = lv_num++;
|
lv->number = lv_num++;
|
||||||
|
|
||||||
if (lv->fullname)
|
if (lv->fullname)
|
||||||
@@ -887,12 +998,6 @@ grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg)
|
|||||||
lv->fullname = tmp;
|
lv->fullname = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* RAID 1 doesn't use a chunksize but code assumes one so set
|
|
||||||
one. */
|
|
||||||
for (i = 0; i < lv->segment_count; i++)
|
|
||||||
if (lv->segments[i].type == 1)
|
|
||||||
lv->segments[i].stripe_size = 64;
|
|
||||||
lv->vg = vg;
|
|
||||||
}
|
}
|
||||||
/* Add our new array to the list. */
|
/* Add our new array to the list. */
|
||||||
vg->next = array_list;
|
vg->next = array_list;
|
||||||
@@ -902,7 +1007,7 @@ grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg)
|
|||||||
|
|
||||||
struct grub_diskfilter_vg *
|
struct grub_diskfilter_vg *
|
||||||
grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
||||||
char *name, grub_uint64_t disk_size,
|
const char *name, grub_uint64_t disk_size,
|
||||||
grub_uint64_t stripe_size,
|
grub_uint64_t stripe_size,
|
||||||
int layout, int level)
|
int layout, int level)
|
||||||
{
|
{
|
||||||
@@ -925,6 +1030,11 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
n = layout & 0xFF;
|
n = layout & 0xFF;
|
||||||
if (n == 1)
|
if (n == 1)
|
||||||
n = (layout >> 8) & 0xFF;
|
n = (layout >> 8) & 0xFF;
|
||||||
|
if (n == 0)
|
||||||
|
{
|
||||||
|
grub_free (uuid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
totsize = grub_divmod64 (nmemb * disk_size, n, 0);
|
totsize = grub_divmod64 (nmemb * disk_size, n, 0);
|
||||||
}
|
}
|
||||||
@@ -938,6 +1048,7 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
grub_free (uuid);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -951,7 +1062,7 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
array->lvs->segments->extent_count = totsize;
|
array->lvs->segments->extent_count = totsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array->lvs->segments
|
if (array->lvs && array->lvs->segments
|
||||||
&& array->lvs->segments->raid_member_size > disk_size)
|
&& array->lvs->segments->raid_member_size > disk_size)
|
||||||
array->lvs->segments->raid_member_size = disk_size;
|
array->lvs->segments->raid_member_size = disk_size;
|
||||||
|
|
||||||
@@ -960,7 +1071,10 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
}
|
}
|
||||||
array = grub_zalloc (sizeof (*array));
|
array = grub_zalloc (sizeof (*array));
|
||||||
if (!array)
|
if (!array)
|
||||||
return NULL;
|
{
|
||||||
|
grub_free (uuid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
array->uuid = uuid;
|
array->uuid = uuid;
|
||||||
array->uuid_len = uuidlen;
|
array->uuid_len = uuidlen;
|
||||||
if (name)
|
if (name)
|
||||||
@@ -982,8 +1096,16 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
goto fail;
|
goto fail;
|
||||||
array->lvs->segment_count = 1;
|
array->lvs->segment_count = 1;
|
||||||
array->lvs->visible = 1;
|
array->lvs->visible = 1;
|
||||||
array->lvs->name = array->name;
|
if (array->name)
|
||||||
array->lvs->fullname = array->name;
|
{
|
||||||
|
array->lvs->name = grub_strdup (array->name);
|
||||||
|
if (!array->lvs->name)
|
||||||
|
goto fail;
|
||||||
|
array->lvs->fullname = grub_strdup (array->name);
|
||||||
|
if (!array->lvs->fullname)
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
array->lvs->vg = array;
|
||||||
|
|
||||||
array->lvs->idname = grub_malloc (sizeof ("mduuid/") + 2 * uuidlen);
|
array->lvs->idname = grub_malloc (sizeof ("mduuid/") + 2 * uuidlen);
|
||||||
if (!array->lvs->idname)
|
if (!array->lvs->idname)
|
||||||
@@ -1033,13 +1155,26 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
return array;
|
return array;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
grub_free (array->lvs);
|
if (array->lvs)
|
||||||
|
{
|
||||||
|
grub_free (array->lvs->name);
|
||||||
|
grub_free (array->lvs->fullname);
|
||||||
|
grub_free (array->lvs->idname);
|
||||||
|
if (array->lvs->segments)
|
||||||
|
{
|
||||||
|
grub_free (array->lvs->segments->nodes);
|
||||||
|
grub_free (array->lvs->segments);
|
||||||
|
}
|
||||||
|
grub_free (array->lvs);
|
||||||
|
}
|
||||||
while (array->pvs)
|
while (array->pvs)
|
||||||
{
|
{
|
||||||
pv = array->pvs->next;
|
pv = array->pvs->next;
|
||||||
grub_free (array->pvs);
|
grub_free (array->pvs);
|
||||||
array->pvs = pv;
|
array->pvs = pv;
|
||||||
}
|
}
|
||||||
|
grub_free (array->name);
|
||||||
|
grub_free (array->uuid);
|
||||||
grub_free (array);
|
grub_free (array);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -1142,10 +1277,9 @@ free_array (void)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
vg->lvs = lv->next;
|
vg->lvs = lv->next;
|
||||||
if (lv->name != lv->fullname)
|
grub_free (lv->fullname);
|
||||||
grub_free (lv->fullname);
|
grub_free (lv->name);
|
||||||
if (lv->name != vg->name)
|
grub_free (lv->idname);
|
||||||
grub_free (lv->name);
|
|
||||||
for (i = 0; i < lv->segment_count; i++)
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
grub_free (lv->segments[i].nodes);
|
grub_free (lv->segments[i].nodes);
|
||||||
grub_free (lv->segments);
|
grub_free (lv->segments);
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ grub_dmraid_nv_detect (grub_disk_t disk,
|
|||||||
struct grub_nv_super sb;
|
struct grub_nv_super sb;
|
||||||
int level;
|
int level;
|
||||||
grub_uint64_t disk_size;
|
grub_uint64_t disk_size;
|
||||||
|
grub_uint32_t capacity;
|
||||||
|
grub_uint8_t total_volumes;
|
||||||
char *uuid;
|
char *uuid;
|
||||||
|
|
||||||
if (disk->partition)
|
if (disk->partition)
|
||||||
@@ -124,11 +126,17 @@ grub_dmraid_nv_detect (grub_disk_t disk,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
capacity = grub_le_to_cpu32 (sb.capacity);
|
||||||
|
total_volumes = sb.array.total_volumes;
|
||||||
|
|
||||||
switch (sb.array.raid_level)
|
switch (sb.array.raid_level)
|
||||||
{
|
{
|
||||||
case NV_LEVEL_0:
|
case NV_LEVEL_0:
|
||||||
level = 0;
|
level = 0;
|
||||||
disk_size = sb.capacity / sb.array.total_volumes;
|
if (total_volumes == 0)
|
||||||
|
/* Not RAID. */
|
||||||
|
return NULL;
|
||||||
|
disk_size = capacity / total_volumes;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV_LEVEL_1:
|
case NV_LEVEL_1:
|
||||||
@@ -138,7 +146,10 @@ grub_dmraid_nv_detect (grub_disk_t disk,
|
|||||||
|
|
||||||
case NV_LEVEL_5:
|
case NV_LEVEL_5:
|
||||||
level = 5;
|
level = 5;
|
||||||
disk_size = sb.capacity / (sb.array.total_volumes - 1);
|
if (total_volumes == 0 || total_volumes == 1)
|
||||||
|
/* Not RAID. */
|
||||||
|
return NULL;
|
||||||
|
disk_size = capacity / (total_volumes - 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -161,7 +172,7 @@ grub_dmraid_nv_detect (grub_disk_t disk,
|
|||||||
|
|
||||||
return grub_diskfilter_make_raid (sizeof (sb.array.signature),
|
return grub_diskfilter_make_raid (sizeof (sb.array.signature),
|
||||||
uuid, sb.array.total_volumes,
|
uuid, sb.array.total_volumes,
|
||||||
NULL, disk_size,
|
"nv", disk_size,
|
||||||
sb.array.stripe_block_size,
|
sb.array.stripe_block_size,
|
||||||
GRUB_RAID_LAYOUT_LEFT_ASYMMETRIC,
|
GRUB_RAID_LAYOUT_LEFT_ASYMMETRIC,
|
||||||
level);
|
level);
|
||||||
|
|||||||
@@ -43,47 +43,6 @@ static struct grub_efidisk_data *fd_devices;
|
|||||||
static struct grub_efidisk_data *hd_devices;
|
static struct grub_efidisk_data *hd_devices;
|
||||||
static struct grub_efidisk_data *cd_devices;
|
static struct grub_efidisk_data *cd_devices;
|
||||||
|
|
||||||
/* Duplicate a device path. */
|
|
||||||
static grub_efi_device_path_t *
|
|
||||||
duplicate_device_path (const grub_efi_device_path_t *dp)
|
|
||||||
{
|
|
||||||
grub_efi_device_path_t *p;
|
|
||||||
grub_size_t total_size = 0;
|
|
||||||
|
|
||||||
for (p = (grub_efi_device_path_t *) dp;
|
|
||||||
;
|
|
||||||
p = GRUB_EFI_NEXT_DEVICE_PATH (p))
|
|
||||||
{
|
|
||||||
total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p);
|
|
||||||
if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = grub_malloc (total_size);
|
|
||||||
if (! p)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
grub_memcpy (p, dp, total_size);
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the device path node right before the end node. */
|
|
||||||
static grub_efi_device_path_t *
|
|
||||||
find_last_device_path (const grub_efi_device_path_t *dp)
|
|
||||||
{
|
|
||||||
grub_efi_device_path_t *next, *p;
|
|
||||||
|
|
||||||
if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p);
|
|
||||||
! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next);
|
|
||||||
p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next))
|
|
||||||
;
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct grub_efidisk_data *
|
static struct grub_efidisk_data *
|
||||||
make_devices (void)
|
make_devices (void)
|
||||||
{
|
{
|
||||||
@@ -110,7 +69,7 @@ make_devices (void)
|
|||||||
if (! dp)
|
if (! dp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ldp = find_last_device_path (dp);
|
ldp = grub_efi_find_last_device_path (dp);
|
||||||
if (! ldp)
|
if (! ldp)
|
||||||
/* This is empty. Why? */
|
/* This is empty. Why? */
|
||||||
continue;
|
continue;
|
||||||
@@ -126,6 +85,12 @@ make_devices (void)
|
|||||||
{
|
{
|
||||||
/* Uggh. */
|
/* Uggh. */
|
||||||
grub_free (handles);
|
grub_free (handles);
|
||||||
|
while (devices)
|
||||||
|
{
|
||||||
|
d = devices->next;
|
||||||
|
grub_free (devices);
|
||||||
|
devices = d;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,11 +115,11 @@ find_parent_device (struct grub_efidisk_data *devices,
|
|||||||
grub_efi_device_path_t *dp, *ldp;
|
grub_efi_device_path_t *dp, *ldp;
|
||||||
struct grub_efidisk_data *parent;
|
struct grub_efidisk_data *parent;
|
||||||
|
|
||||||
dp = duplicate_device_path (d->device_path);
|
dp = grub_efi_duplicate_device_path (d->device_path);
|
||||||
if (! dp)
|
if (! dp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ldp = find_last_device_path (dp);
|
ldp = grub_efi_find_last_device_path (dp);
|
||||||
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||||
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||||
ldp->length = sizeof (*ldp);
|
ldp->length = sizeof (*ldp);
|
||||||
@@ -180,11 +145,11 @@ is_child (struct grub_efidisk_data *child,
|
|||||||
grub_efi_device_path_t *dp, *ldp;
|
grub_efi_device_path_t *dp, *ldp;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
dp = duplicate_device_path (child->device_path);
|
dp = grub_efi_duplicate_device_path (child->device_path);
|
||||||
if (! dp)
|
if (! dp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ldp = find_last_device_path (dp);
|
ldp = grub_efi_find_last_device_path (dp);
|
||||||
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||||
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||||
ldp->length = sizeof (*ldp);
|
ldp->length = sizeof (*ldp);
|
||||||
@@ -207,8 +172,8 @@ add_device (struct grub_efidisk_data **devices, struct grub_efidisk_data *d)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = grub_efi_compare_device_paths (find_last_device_path ((*p)->device_path),
|
ret = grub_efi_compare_device_paths (grub_efi_find_last_device_path ((*p)->device_path),
|
||||||
find_last_device_path (d->device_path));
|
grub_efi_find_last_device_path (d->device_path));
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
ret = grub_efi_compare_device_paths ((*p)->device_path,
|
ret = grub_efi_compare_device_paths ((*p)->device_path,
|
||||||
d->device_path);
|
d->device_path);
|
||||||
@@ -528,8 +493,15 @@ grub_efidisk_open (const char *name, struct grub_disk *disk)
|
|||||||
m = d->block_io->media;
|
m = d->block_io->media;
|
||||||
/* FIXME: Probably it is better to store the block size in the disk,
|
/* FIXME: Probably it is better to store the block size in the disk,
|
||||||
and total sectors should be replaced with total blocks. */
|
and total sectors should be replaced with total blocks. */
|
||||||
grub_dprintf ("efidisk", "m = %p, last block = %llx, block size = %x\n",
|
grub_dprintf ("efidisk",
|
||||||
m, (unsigned long long) m->last_block, m->block_size);
|
"m = %p, last block = %llx, block size = %x, io align = %x\n",
|
||||||
|
m, (unsigned long long) m->last_block, m->block_size,
|
||||||
|
m->io_align);
|
||||||
|
|
||||||
|
/* Ensure required buffer alignment is a power of two (or is zero). */
|
||||||
|
if (m->io_align & (m->io_align - 1))
|
||||||
|
return grub_error (GRUB_ERR_IO, "invalid buffer alignment %d", m->io_align);
|
||||||
|
|
||||||
disk->total_sectors = m->last_block + 1;
|
disk->total_sectors = m->last_block + 1;
|
||||||
/* Don't increase this value due to bug in some EFI. */
|
/* Don't increase this value due to bug in some EFI. */
|
||||||
disk->max_agglomerate = 0xa0000 >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS);
|
disk->max_agglomerate = 0xa0000 >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS);
|
||||||
@@ -559,15 +531,42 @@ grub_efidisk_readwrite (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
{
|
{
|
||||||
struct grub_efidisk_data *d;
|
struct grub_efidisk_data *d;
|
||||||
grub_efi_block_io_t *bio;
|
grub_efi_block_io_t *bio;
|
||||||
|
grub_efi_status_t status;
|
||||||
|
grub_size_t io_align, num_bytes;
|
||||||
|
char *aligned_buf;
|
||||||
|
|
||||||
d = disk->data;
|
d = disk->data;
|
||||||
bio = d->block_io;
|
bio = d->block_io;
|
||||||
|
|
||||||
return efi_call_5 ((wr ? bio->write_blocks : bio->read_blocks), bio,
|
/* Set alignment to 1 if 0 specified */
|
||||||
bio->media->media_id,
|
io_align = bio->media->io_align ? bio->media->io_align : 1;
|
||||||
(grub_efi_uint64_t) sector,
|
num_bytes = size << disk->log_sector_size;
|
||||||
(grub_efi_uintn_t) size << disk->log_sector_size,
|
|
||||||
buf);
|
if ((grub_addr_t) buf & (io_align - 1))
|
||||||
|
{
|
||||||
|
aligned_buf = grub_memalign (io_align, num_bytes);
|
||||||
|
if (! aligned_buf)
|
||||||
|
return GRUB_EFI_OUT_OF_RESOURCES;
|
||||||
|
if (wr)
|
||||||
|
grub_memcpy (aligned_buf, buf, num_bytes);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aligned_buf = buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = efi_call_5 ((wr ? bio->write_blocks : bio->read_blocks), bio,
|
||||||
|
bio->media->media_id, (grub_efi_uint64_t) sector,
|
||||||
|
(grub_efi_uintn_t) num_bytes, aligned_buf);
|
||||||
|
|
||||||
|
if ((grub_addr_t) buf & (io_align - 1))
|
||||||
|
{
|
||||||
|
if (!wr)
|
||||||
|
grub_memcpy (buf, aligned_buf, num_bytes);
|
||||||
|
grub_free (aligned_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -582,7 +581,9 @@ grub_efidisk_read (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
|
|
||||||
status = grub_efidisk_readwrite (disk, sector, size, buf, 0);
|
status = grub_efidisk_readwrite (disk, sector, size, buf, 0);
|
||||||
|
|
||||||
if (status != GRUB_EFI_SUCCESS)
|
if (status == GRUB_EFI_NO_MEDIA)
|
||||||
|
return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name);
|
||||||
|
else if (status != GRUB_EFI_SUCCESS)
|
||||||
return grub_error (GRUB_ERR_READ_ERROR,
|
return grub_error (GRUB_ERR_READ_ERROR,
|
||||||
N_("failure reading sector 0x%llx from `%s'"),
|
N_("failure reading sector 0x%llx from `%s'"),
|
||||||
(unsigned long long) sector,
|
(unsigned long long) sector,
|
||||||
@@ -603,7 +604,9 @@ grub_efidisk_write (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
|
|
||||||
status = grub_efidisk_readwrite (disk, sector, size, (char *) buf, 1);
|
status = grub_efidisk_readwrite (disk, sector, size, (char *) buf, 1);
|
||||||
|
|
||||||
if (status != GRUB_EFI_SUCCESS)
|
if (status == GRUB_EFI_NO_MEDIA)
|
||||||
|
return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name);
|
||||||
|
else if (status != GRUB_EFI_SUCCESS)
|
||||||
return grub_error (GRUB_ERR_WRITE_ERROR,
|
return grub_error (GRUB_ERR_WRITE_ERROR,
|
||||||
N_("failure writing sector 0x%llx to `%s'"),
|
N_("failure writing sector 0x%llx to `%s'"),
|
||||||
(unsigned long long) sector, disk->name);
|
(unsigned long long) sector, disk->name);
|
||||||
@@ -795,7 +798,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||||||
if (! dp)
|
if (! dp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ldp = find_last_device_path (dp);
|
ldp = grub_efi_find_last_device_path (dp);
|
||||||
if (! ldp)
|
if (! ldp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -803,7 +806,6 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||||||
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE
|
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE
|
||||||
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE))
|
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE))
|
||||||
{
|
{
|
||||||
int is_cdrom = 0;
|
|
||||||
struct grub_efidisk_get_device_name_ctx ctx;
|
struct grub_efidisk_get_device_name_ctx ctx;
|
||||||
char *dev_name;
|
char *dev_name;
|
||||||
grub_efi_device_path_t *dup_dp;
|
grub_efi_device_path_t *dup_dp;
|
||||||
@@ -811,22 +813,19 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||||||
|
|
||||||
/* It is necessary to duplicate the device path so that GRUB
|
/* It is necessary to duplicate the device path so that GRUB
|
||||||
can overwrite it. */
|
can overwrite it. */
|
||||||
dup_dp = duplicate_device_path (dp);
|
dup_dp = grub_efi_duplicate_device_path (dp);
|
||||||
if (! dup_dp)
|
if (! dup_dp)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
grub_efi_device_path_t *dup_ldp;
|
grub_efi_device_path_t *dup_ldp;
|
||||||
dup_ldp = find_last_device_path (dup_dp);
|
dup_ldp = grub_efi_find_last_device_path (dup_dp);
|
||||||
if (!(GRUB_EFI_DEVICE_PATH_TYPE (dup_ldp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE
|
if (!(GRUB_EFI_DEVICE_PATH_TYPE (dup_ldp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE
|
||||||
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE
|
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE
|
||||||
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)))
|
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE)
|
|
||||||
is_cdrom = 1;
|
|
||||||
|
|
||||||
dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||||
dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||||
dup_ldp->length = sizeof (*dup_ldp);
|
dup_ldp->length = sizeof (*dup_ldp);
|
||||||
@@ -861,10 +860,13 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||||||
|
|
||||||
if (! ctx.partition_name)
|
if (! ctx.partition_name)
|
||||||
{
|
{
|
||||||
|
/* No partition found. In most cases partition is embed in
|
||||||
|
the root path anyway, so this is not critical.
|
||||||
|
This happens only if partition is on partmap that GRUB
|
||||||
|
doesn't need to access root.
|
||||||
|
*/
|
||||||
grub_disk_close (parent);
|
grub_disk_close (parent);
|
||||||
if (is_cdrom)
|
return grub_strdup (device_name);
|
||||||
return grub_strdup (device_name);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_name = grub_xasprintf ("%s,%s", parent->name,
|
dev_name = grub_xasprintf ("%s,%s", parent->name,
|
||||||
|
|||||||
+38
-10
@@ -212,7 +212,8 @@ grub_util_get_geli_uuid (const char *dev)
|
|||||||
|
|
||||||
s = grub_util_get_fd_size (fd, dev, &log_secsize);
|
s = grub_util_get_fd_size (fd, dev, &log_secsize);
|
||||||
s >>= log_secsize;
|
s >>= log_secsize;
|
||||||
grub_util_fd_seek (fd, (s << log_secsize) - 512);
|
if (grub_util_fd_seek (fd, (s << log_secsize) - 512) < 0)
|
||||||
|
grub_util_error ("%s", _("couldn't read ELI metadata"));
|
||||||
|
|
||||||
uuid = xmalloc (GRUB_MD_SHA256->mdlen * 2 + 1);
|
uuid = xmalloc (GRUB_MD_SHA256->mdlen * 2 + 1);
|
||||||
if (grub_util_fd_read (fd, (void *) &hdr, 512) < 0)
|
if (grub_util_fd_read (fd, (void *) &hdr, 512) < 0)
|
||||||
@@ -225,13 +226,16 @@ grub_util_get_geli_uuid (const char *dev)
|
|||||||
|
|
||||||
/* Look for GELI magic sequence. */
|
/* Look for GELI magic sequence. */
|
||||||
if (grub_memcmp (header->magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
if (grub_memcmp (header->magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
||||||
|| grub_le_to_cpu32 (header->version) > 5
|
|| grub_le_to_cpu32 (header->version) > 7
|
||||||
|| grub_le_to_cpu32 (header->version) < 1)
|
|| grub_le_to_cpu32 (header->version) < 1)
|
||||||
grub_util_error ("%s", _("wrong ELI magic or version"));
|
grub_util_error ("%s", _("wrong ELI magic or version"));
|
||||||
|
|
||||||
err = make_uuid ((void *) &hdr, uuid);
|
err = make_uuid ((void *) &hdr, uuid);
|
||||||
if (err)
|
if (err)
|
||||||
return NULL;
|
{
|
||||||
|
grub_free (uuid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
@@ -265,7 +269,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
|
|
||||||
/* Look for GELI magic sequence. */
|
/* Look for GELI magic sequence. */
|
||||||
if (grub_memcmp (header.magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
if (grub_memcmp (header.magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
||||||
|| grub_le_to_cpu32 (header.version) > 5
|
|| grub_le_to_cpu32 (header.version) > 7
|
||||||
|| grub_le_to_cpu32 (header.version) < 1)
|
|| grub_le_to_cpu32 (header.version) < 1)
|
||||||
{
|
{
|
||||||
grub_dprintf ("geli", "wrong magic %02x\n", header.magic[0]);
|
grub_dprintf ("geli", "wrong magic %02x\n", header.magic[0]);
|
||||||
@@ -332,19 +336,29 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
{
|
{
|
||||||
secondary_cipher = grub_crypto_cipher_open (ciph);
|
secondary_cipher = grub_crypto_cipher_open (ciph);
|
||||||
if (!secondary_cipher)
|
if (!secondary_cipher)
|
||||||
return NULL;
|
{
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_le_to_cpu16 (header.keylen) > 1024)
|
if (grub_le_to_cpu16 (header.keylen) > 1024)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
||||||
grub_le_to_cpu16 (header.keylen));
|
grub_le_to_cpu16 (header.keylen));
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
||||||
if (!newdev)
|
if (!newdev)
|
||||||
return NULL;
|
{
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
newdev->cipher = cipher;
|
newdev->cipher = cipher;
|
||||||
newdev->secondary_cipher = secondary_cipher;
|
newdev->secondary_cipher = secondary_cipher;
|
||||||
newdev->offset = 0;
|
newdev->offset = 0;
|
||||||
@@ -391,6 +405,7 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
|
|||||||
grub_uint8_t geomkey[GRUB_CRYPTO_MAX_MDLEN];
|
grub_uint8_t geomkey[GRUB_CRYPTO_MAX_MDLEN];
|
||||||
grub_uint8_t verify_key[GRUB_CRYPTO_MAX_MDLEN];
|
grub_uint8_t verify_key[GRUB_CRYPTO_MAX_MDLEN];
|
||||||
grub_uint8_t zero[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
grub_uint8_t zero[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
||||||
|
grub_uint8_t geli_cipher_key[64];
|
||||||
char passphrase[MAX_PASSPHRASE] = "";
|
char passphrase[MAX_PASSPHRASE] = "";
|
||||||
unsigned i;
|
unsigned i;
|
||||||
gcry_err_code_t gcry_err;
|
gcry_err_code_t gcry_err;
|
||||||
@@ -514,6 +529,19 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
|
|||||||
continue;
|
continue;
|
||||||
grub_printf_ (N_("Slot %d opened\n"), i);
|
grub_printf_ (N_("Slot %d opened\n"), i);
|
||||||
|
|
||||||
|
if (grub_le_to_cpu32 (header.version) >= 7)
|
||||||
|
{
|
||||||
|
/* GELI >=7 uses the cipher_key */
|
||||||
|
grub_memcpy (geli_cipher_key, candidate_key.cipher_key,
|
||||||
|
sizeof (candidate_key.cipher_key));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* GELI <=6 uses the iv_key */
|
||||||
|
grub_memcpy (geli_cipher_key, candidate_key.iv_key,
|
||||||
|
sizeof (candidate_key.iv_key));
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the master key. */
|
/* Set the master key. */
|
||||||
if (!dev->rekey)
|
if (!dev->rekey)
|
||||||
{
|
{
|
||||||
@@ -530,13 +558,13 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
|
|||||||
grub_size_t real_keysize = keysize;
|
grub_size_t real_keysize = keysize;
|
||||||
if (grub_le_to_cpu16 (header.alg) == 0x16)
|
if (grub_le_to_cpu16 (header.alg) == 0x16)
|
||||||
real_keysize *= 2;
|
real_keysize *= 2;
|
||||||
/* For a reason I don't know, the IV key is used in rekeying. */
|
|
||||||
grub_memcpy (dev->rekey_key, candidate_key.iv_key,
|
grub_memcpy (dev->rekey_key, geli_cipher_key,
|
||||||
sizeof (candidate_key.iv_key));
|
sizeof (geli_cipher_key));
|
||||||
dev->rekey_derived_size = real_keysize;
|
dev->rekey_derived_size = real_keysize;
|
||||||
dev->last_rekey = -1;
|
dev->last_rekey = -1;
|
||||||
COMPILE_TIME_ASSERT (sizeof (dev->rekey_key)
|
COMPILE_TIME_ASSERT (sizeof (dev->rekey_key)
|
||||||
>= sizeof (candidate_key.iv_key));
|
>= sizeof (geli_cipher_key));
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->iv_prefix_len = sizeof (candidate_key.iv_key);
|
dev->iv_prefix_len = sizeof (candidate_key.iv_key);
|
||||||
|
|||||||
@@ -382,7 +382,8 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
|
|||||||
/* Some buggy BIOSes doesn't return the total sectors
|
/* Some buggy BIOSes doesn't return the total sectors
|
||||||
correctly but returns zero. So if it is zero, compute
|
correctly but returns zero. So if it is zero, compute
|
||||||
it by C/H/S returned by the LBA BIOS call. */
|
it by C/H/S returned by the LBA BIOS call. */
|
||||||
total_sectors = drp->cylinders * drp->heads * drp->sectors;
|
total_sectors = ((grub_uint64_t) drp->cylinders)
|
||||||
|
* drp->heads * drp->sectors;
|
||||||
if (drp->bytes_per_sector
|
if (drp->bytes_per_sector
|
||||||
&& !(drp->bytes_per_sector & (drp->bytes_per_sector - 1))
|
&& !(drp->bytes_per_sector & (drp->bytes_per_sector - 1))
|
||||||
&& drp->bytes_per_sector >= 512
|
&& drp->bytes_per_sector >= 512
|
||||||
@@ -419,8 +420,14 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data->sectors == 0)
|
||||||
|
data->sectors = 63;
|
||||||
|
if (data->heads == 0)
|
||||||
|
data->heads = 255;
|
||||||
|
|
||||||
if (! total_sectors)
|
if (! total_sectors)
|
||||||
total_sectors = data->cylinders * data->heads * data->sectors;
|
total_sectors = ((grub_uint64_t) data->cylinders)
|
||||||
|
* data->heads * data->sectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
disk->total_sectors = total_sectors;
|
disk->total_sectors = total_sectors;
|
||||||
@@ -455,6 +462,14 @@ grub_biosdisk_rw (int cmd, grub_disk_t disk,
|
|||||||
{
|
{
|
||||||
struct grub_biosdisk_data *data = disk->data;
|
struct grub_biosdisk_data *data = disk->data;
|
||||||
|
|
||||||
|
/* VirtualBox fails with sectors above 2T on CDs.
|
||||||
|
Since even BD-ROMS are never that big anyway, return error. */
|
||||||
|
if ((data->flags & GRUB_BIOSDISK_FLAG_CDROM)
|
||||||
|
&& (sector >> 32))
|
||||||
|
return grub_error (GRUB_ERR_OUT_OF_RANGE,
|
||||||
|
N_("attempt to read or write outside of disk `%s'"),
|
||||||
|
disk->name);
|
||||||
|
|
||||||
if (data->flags & GRUB_BIOSDISK_FLAG_LBA)
|
if (data->flags & GRUB_BIOSDISK_FLAG_LBA)
|
||||||
{
|
{
|
||||||
struct grub_biosdisk_dap *dap;
|
struct grub_biosdisk_dap *dap;
|
||||||
|
|||||||
@@ -113,6 +113,11 @@ grub_nand_open (const char *name, grub_disk_t disk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
data->block_size = (args.size1 >> GRUB_DISK_SECTOR_BITS);
|
data->block_size = (args.size1 >> GRUB_DISK_SECTOR_BITS);
|
||||||
|
if (!data->block_size)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "invalid block size");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
||||||
args.method = (grub_ieee1275_cell_t) "size";
|
args.method = (grub_ieee1275_cell_t) "size";
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ struct ofdisk_hash_ent
|
|||||||
char *open_path;
|
char *open_path;
|
||||||
char *grub_devpath;
|
char *grub_devpath;
|
||||||
int is_boot;
|
int is_boot;
|
||||||
int is_cdrom;
|
int is_removable;
|
||||||
|
int block_size_fails;
|
||||||
/* Pointer to shortest available name on nodes representing canonical names,
|
/* Pointer to shortest available name on nodes representing canonical names,
|
||||||
otherwise NULL. */
|
otherwise NULL. */
|
||||||
const char *shortest;
|
const char *shortest;
|
||||||
@@ -42,6 +43,10 @@ struct ofdisk_hash_ent
|
|||||||
struct ofdisk_hash_ent *next;
|
struct ofdisk_hash_ent *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size,
|
||||||
|
struct ofdisk_hash_ent *op);
|
||||||
|
|
||||||
#define OFDISK_HASH_SZ 8
|
#define OFDISK_HASH_SZ 8
|
||||||
static struct ofdisk_hash_ent *ofdisk_hash[OFDISK_HASH_SZ];
|
static struct ofdisk_hash_ent *ofdisk_hash[OFDISK_HASH_SZ];
|
||||||
|
|
||||||
@@ -123,7 +128,7 @@ ofdisk_hash_add_real (char *devpath)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
check_string_cdrom (const char *str)
|
check_string_removable (const char *str)
|
||||||
{
|
{
|
||||||
const char *ptr = grub_strrchr (str, '/');
|
const char *ptr = grub_strrchr (str, '/');
|
||||||
|
|
||||||
@@ -131,7 +136,7 @@ check_string_cdrom (const char *str)
|
|||||||
ptr++;
|
ptr++;
|
||||||
else
|
else
|
||||||
ptr = str;
|
ptr = str;
|
||||||
return (grub_strncmp (ptr, "cdrom", 5) == 0);
|
return (grub_strncmp (ptr, "cdrom", 5) == 0 || grub_strncmp (ptr, "fd", 2) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct ofdisk_hash_ent *
|
static struct ofdisk_hash_ent *
|
||||||
@@ -147,8 +152,8 @@ ofdisk_hash_add (char *devpath, char *curcan)
|
|||||||
{
|
{
|
||||||
p->shortest = p->devpath;
|
p->shortest = p->devpath;
|
||||||
p->grub_shortest = p->grub_devpath;
|
p->grub_shortest = p->grub_devpath;
|
||||||
if (check_string_cdrom (devpath))
|
if (check_string_removable (devpath))
|
||||||
p->is_cdrom = 1;
|
p->is_removable = 1;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,8 +163,8 @@ ofdisk_hash_add (char *devpath, char *curcan)
|
|||||||
else
|
else
|
||||||
grub_free (curcan);
|
grub_free (curcan);
|
||||||
|
|
||||||
if (check_string_cdrom (devpath) || check_string_cdrom (curcan))
|
if (check_string_removable (devpath) || check_string_removable (curcan))
|
||||||
pcan->is_cdrom = 1;
|
pcan->is_removable = 1;
|
||||||
|
|
||||||
if (!pcan)
|
if (!pcan)
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -223,6 +228,9 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
|
|||||||
if (grub_ieee1275_open (alias->path, &ihandle))
|
if (grub_ieee1275_open (alias->path, &ihandle))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* This method doesn't need memory allocation for the table. Open
|
||||||
|
firmware takes care of all memory management and the result table
|
||||||
|
stays in memory and is never freed. */
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
||||||
args.method = (grub_ieee1275_cell_t) "vscsi-report-luns";
|
args.method = (grub_ieee1275_cell_t) "vscsi-report-luns";
|
||||||
args.ihandle = ihandle;
|
args.ihandle = ihandle;
|
||||||
@@ -255,6 +263,82 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
|
|||||||
grub_free (buf);
|
grub_free (buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (grub_strcmp (alias->type, "sas_ioa") == 0)
|
||||||
|
{
|
||||||
|
/* The method returns the number of disks and a table where
|
||||||
|
* each ID is 64-bit long. Example of sas paths:
|
||||||
|
* /pci@80000002000001f/pci1014,034A@0/sas/disk@c05db70800
|
||||||
|
* /pci@80000002000001f/pci1014,034A@0/sas/disk@a05db70800
|
||||||
|
* /pci@80000002000001f/pci1014,034A@0/sas/disk@805db70800 */
|
||||||
|
|
||||||
|
struct sas_children
|
||||||
|
{
|
||||||
|
struct grub_ieee1275_common_hdr common;
|
||||||
|
grub_ieee1275_cell_t method;
|
||||||
|
grub_ieee1275_cell_t ihandle;
|
||||||
|
grub_ieee1275_cell_t max;
|
||||||
|
grub_ieee1275_cell_t table;
|
||||||
|
grub_ieee1275_cell_t catch_result;
|
||||||
|
grub_ieee1275_cell_t nentries;
|
||||||
|
}
|
||||||
|
args;
|
||||||
|
char *buf, *bufptr;
|
||||||
|
unsigned i;
|
||||||
|
grub_uint64_t *table;
|
||||||
|
grub_uint16_t table_size;
|
||||||
|
grub_ieee1275_ihandle_t ihandle;
|
||||||
|
|
||||||
|
buf = grub_malloc (grub_strlen (alias->path) +
|
||||||
|
sizeof ("/disk@7766554433221100"));
|
||||||
|
if (!buf)
|
||||||
|
return;
|
||||||
|
bufptr = grub_stpcpy (buf, alias->path);
|
||||||
|
|
||||||
|
/* Power machines documentation specify 672 as maximum SAS disks in
|
||||||
|
one system. Using a slightly larger value to be safe. */
|
||||||
|
table_size = 768;
|
||||||
|
table = grub_malloc (table_size * sizeof (grub_uint64_t));
|
||||||
|
|
||||||
|
if (!table)
|
||||||
|
{
|
||||||
|
grub_free (buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_ieee1275_open (alias->path, &ihandle))
|
||||||
|
{
|
||||||
|
grub_free (buf);
|
||||||
|
grub_free (table);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
INIT_IEEE1275_COMMON (&args.common, "call-method", 4, 2);
|
||||||
|
args.method = (grub_ieee1275_cell_t) "get-sas-children";
|
||||||
|
args.ihandle = ihandle;
|
||||||
|
args.max = table_size;
|
||||||
|
args.table = (grub_ieee1275_cell_t) table;
|
||||||
|
args.catch_result = 0;
|
||||||
|
args.nentries = 0;
|
||||||
|
|
||||||
|
if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
|
||||||
|
{
|
||||||
|
grub_ieee1275_close (ihandle);
|
||||||
|
grub_free (table);
|
||||||
|
grub_free (buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < args.nentries; i++)
|
||||||
|
{
|
||||||
|
grub_snprintf (bufptr, sizeof ("/disk@7766554433221100"),
|
||||||
|
"/disk@%" PRIxGRUB_UINT64_T, table[i]);
|
||||||
|
dev_iterate_real (buf, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_ieee1275_close (ihandle);
|
||||||
|
grub_free (table);
|
||||||
|
grub_free (buf);
|
||||||
|
}
|
||||||
|
|
||||||
if (!grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS)
|
if (!grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS)
|
||||||
&& grub_strcmp (alias->type, "block") == 0)
|
&& grub_strcmp (alias->type, "block") == 0)
|
||||||
@@ -330,7 +414,7 @@ grub_ofdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ent->is_boot && ent->is_cdrom)
|
if (!ent->is_boot && ent->is_removable)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (hook (ent->grub_shortest, hook_data))
|
if (hook (ent->grub_shortest, hook_data))
|
||||||
@@ -375,6 +459,8 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
|||||||
/* XXX: This should be large enough for any possible case. */
|
/* XXX: This should be large enough for any possible case. */
|
||||||
char prop[64];
|
char prop[64];
|
||||||
grub_ssize_t actual;
|
grub_ssize_t actual;
|
||||||
|
grub_uint32_t block_size = 0;
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
if (grub_strncmp (name, "ieee1275/", sizeof ("ieee1275/") - 1) != 0)
|
if (grub_strncmp (name, "ieee1275/", sizeof ("ieee1275/") - 1) != 0)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||||
@@ -405,14 +491,6 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
|||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a block device");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a block device");
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_uint32_t block_size = 0;
|
|
||||||
if (grub_ofdisk_get_block_size (devpath, &block_size) == 0)
|
|
||||||
{
|
|
||||||
for (disk->log_sector_size = 0;
|
|
||||||
(1U << disk->log_sector_size) < block_size;
|
|
||||||
disk->log_sector_size++);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* XXX: There is no property to read the number of blocks. There
|
/* XXX: There is no property to read the number of blocks. There
|
||||||
should be a property `#blocks', but it is not there. Perhaps it
|
should be a property `#blocks', but it is not there. Perhaps it
|
||||||
is possible to use seek for this. */
|
is possible to use seek for this. */
|
||||||
@@ -423,14 +501,31 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
|||||||
op = ofdisk_hash_find (devpath);
|
op = ofdisk_hash_find (devpath);
|
||||||
if (!op)
|
if (!op)
|
||||||
op = ofdisk_hash_add (devpath, NULL);
|
op = ofdisk_hash_add (devpath, NULL);
|
||||||
else
|
|
||||||
grub_free (devpath);
|
|
||||||
if (!op)
|
if (!op)
|
||||||
return grub_errno;
|
{
|
||||||
|
grub_free (devpath);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
disk->id = (unsigned long) op;
|
disk->id = (unsigned long) op;
|
||||||
disk->data = op->open_path;
|
disk->data = op->open_path;
|
||||||
|
|
||||||
|
err = grub_ofdisk_get_block_size (devpath, &block_size, op);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_free (devpath);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
if (block_size != 0)
|
||||||
|
{
|
||||||
|
for (disk->log_sector_size = 0;
|
||||||
|
(1U << disk->log_sector_size) < block_size;
|
||||||
|
disk->log_sector_size++);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
disk->log_sector_size = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_free (devpath);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -589,8 +684,9 @@ grub_ofdisk_init (void)
|
|||||||
grub_disk_dev_register (&grub_ofdisk_dev);
|
grub_disk_dev_register (&grub_ofdisk_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
static grub_err_t
|
||||||
grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size)
|
grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size,
|
||||||
|
struct ofdisk_hash_ent *op)
|
||||||
{
|
{
|
||||||
struct size_args_ieee1275
|
struct size_args_ieee1275
|
||||||
{
|
{
|
||||||
@@ -612,20 +708,34 @@ grub_ofdisk_get_block_size (const char *device, grub_uint32_t *block_size)
|
|||||||
if (! last_ihandle)
|
if (! last_ihandle)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
||||||
|
|
||||||
|
*block_size = 0;
|
||||||
|
|
||||||
|
if (op->block_size_fails >= 2)
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args_ieee1275.common, "call-method", 2, 2);
|
INIT_IEEE1275_COMMON (&args_ieee1275.common, "call-method", 2, 2);
|
||||||
args_ieee1275.method = (grub_ieee1275_cell_t) "block-size";
|
args_ieee1275.method = (grub_ieee1275_cell_t) "block-size";
|
||||||
args_ieee1275.ihandle = last_ihandle;
|
args_ieee1275.ihandle = last_ihandle;
|
||||||
args_ieee1275.result = 1;
|
args_ieee1275.result = 1;
|
||||||
|
|
||||||
*block_size = GRUB_DISK_SECTOR_SIZE;
|
if (IEEE1275_CALL_ENTRY_FN (&args_ieee1275) == -1)
|
||||||
|
{
|
||||||
if ((IEEE1275_CALL_ENTRY_FN (&args_ieee1275) == -1) || (args_ieee1275.result))
|
grub_dprintf ("disk", "can't get block size: failed call-method\n");
|
||||||
grub_dprintf ("disk", "can't get block size\n");
|
op->block_size_fails++;
|
||||||
else
|
}
|
||||||
if (args_ieee1275.size1
|
else if (args_ieee1275.result)
|
||||||
&& !(args_ieee1275.size1 & (args_ieee1275.size1 - 1))
|
{
|
||||||
&& args_ieee1275.size1 >= 512 && args_ieee1275.size1 <= 16384)
|
grub_dprintf ("disk", "can't get block size: %lld\n",
|
||||||
|
(long long) args_ieee1275.result);
|
||||||
|
op->block_size_fails++;
|
||||||
|
}
|
||||||
|
else if (args_ieee1275.size1
|
||||||
|
&& !(args_ieee1275.size1 & (args_ieee1275.size1 - 1))
|
||||||
|
&& args_ieee1275.size1 >= 512 && args_ieee1275.size1 <= 16384)
|
||||||
|
{
|
||||||
|
op->block_size_fails = 0;
|
||||||
*block_size = args_ieee1275.size1;
|
*block_size = args_ieee1275.size1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -963,7 +963,7 @@ grub_util_ldm_embed (struct grub_disk *disk, unsigned int *nsectors,
|
|||||||
|
|
||||||
if (embed_type != GRUB_EMBED_PCBIOS)
|
if (embed_type != GRUB_EMBED_PCBIOS)
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"LDM curently supports only PC-BIOS embedding");
|
"LDM currently supports only PC-BIOS embedding");
|
||||||
if (disk->partition)
|
if (disk->partition)
|
||||||
return grub_error (GRUB_ERR_BUG, "disk isn't LDM");
|
return grub_error (GRUB_ERR_BUG, "disk isn't LDM");
|
||||||
pv = grub_diskfilter_get_pv_from_disk (disk, &vg);
|
pv = grub_diskfilter_get_pv_from_disk (disk, &vg);
|
||||||
|
|||||||
+16
-3
@@ -143,6 +143,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
||||||
grub_be_to_cpu32 (header.keyBytes));
|
grub_be_to_cpu32 (header.keyBytes));
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,9 +182,10 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
}
|
}
|
||||||
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
||||||
cipher->cipher->blocksize);
|
cipher->cipher->blocksize);
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
||||||
@@ -191,6 +193,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
||||||
secondary_cipher->cipher->blocksize);
|
secondary_cipher->cipher->blocksize);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,9 +203,9 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
cipheriv = ciphermode + sizeof ("lrw-") - 1;
|
cipheriv = ciphermode + sizeof ("lrw-") - 1;
|
||||||
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d",
|
||||||
cipher->cipher->blocksize);
|
cipher->cipher->blocksize);
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -225,6 +228,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
|| cipher->cipher->blocksize == 0)
|
|| cipher->cipher->blocksize == 0)
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d",
|
||||||
cipher->cipher->blocksize);
|
cipher->cipher->blocksize);
|
||||||
|
/* FIXME should we return an error here? */
|
||||||
for (benbi_log = 0;
|
for (benbi_log = 0;
|
||||||
(cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE;
|
(cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE;
|
||||||
benbi_log++);
|
benbi_log++);
|
||||||
@@ -243,6 +247,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
if (!essiv_hash)
|
if (!essiv_hash)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
grub_error (GRUB_ERR_FILE_NOT_FOUND,
|
grub_error (GRUB_ERR_FILE_NOT_FOUND,
|
||||||
"Couldn't load %s hash", hash_str);
|
"Couldn't load %s hash", hash_str);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -251,12 +256,14 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
if (!essiv_cipher)
|
if (!essiv_cipher)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s",
|
||||||
cipheriv);
|
cipheriv);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -276,7 +283,12 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
|
|
||||||
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
||||||
if (!newdev)
|
if (!newdev)
|
||||||
return NULL;
|
{
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (essiv_cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
newdev->cipher = cipher;
|
newdev->cipher = cipher;
|
||||||
newdev->offset = grub_be_to_cpu32 (header.payloadOffset);
|
newdev->offset = grub_be_to_cpu32 (header.payloadOffset);
|
||||||
newdev->source_disk = NULL;
|
newdev->source_disk = NULL;
|
||||||
@@ -451,6 +463,7 @@ luks_recover_key (grub_disk_t source,
|
|||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_free (split_key);
|
||||||
return GRUB_ACCESS_DENIED;
|
return GRUB_ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+36
-30
@@ -160,7 +160,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
"we don't support multiple LVM data areas");
|
"we don't support multiple LVM data areas");
|
||||||
|
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("we don't support multiple LVM data areas\n");
|
grub_util_info ("we don't support multiple LVM data areas");
|
||||||
#endif
|
#endif
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@@ -189,7 +189,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"unknown LVM metadata header");
|
"unknown LVM metadata header");
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown LVM metadata header\n");
|
grub_util_info ("unknown LVM metadata header");
|
||||||
#endif
|
#endif
|
||||||
goto fail2;
|
goto fail2;
|
||||||
}
|
}
|
||||||
@@ -213,7 +213,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (q == metadatabuf + mda_size)
|
if (q == metadatabuf + mda_size)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("error parsing metadata\n");
|
grub_util_info ("error parsing metadata");
|
||||||
#endif
|
#endif
|
||||||
goto fail2;
|
goto fail2;
|
||||||
}
|
}
|
||||||
@@ -230,7 +230,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("couldn't find ID\n");
|
grub_util_info ("couldn't find ID");
|
||||||
#endif
|
#endif
|
||||||
goto fail3;
|
goto fail3;
|
||||||
}
|
}
|
||||||
@@ -258,7 +258,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown extent size\n");
|
grub_util_info ("unknown extent size");
|
||||||
#endif
|
#endif
|
||||||
goto fail4;
|
goto fail4;
|
||||||
}
|
}
|
||||||
@@ -306,7 +306,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown pe_start\n");
|
grub_util_info ("unknown pe_start");
|
||||||
#endif
|
#endif
|
||||||
goto pvs_fail;
|
goto pvs_fail;
|
||||||
}
|
}
|
||||||
@@ -315,7 +315,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("error parsing pe_start\n");
|
grub_util_info ("error parsing pe_start");
|
||||||
#endif
|
#endif
|
||||||
goto pvs_fail;
|
goto pvs_fail;
|
||||||
}
|
}
|
||||||
@@ -333,10 +333,10 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p = grub_strstr (p, "logical_volumes");
|
p = grub_strstr (p, "logical_volumes {");
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
p += sizeof ("logical_volumes = ") - 1;
|
p += sizeof ("logical_volumes {") - 1;
|
||||||
|
|
||||||
/* And add all the lvs to the volume group. */
|
/* And add all the lvs to the volume group. */
|
||||||
while (1)
|
while (1)
|
||||||
@@ -402,7 +402,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("couldn't find ID\n");
|
grub_util_info ("couldn't find ID");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_fail;
|
goto lvs_fail;
|
||||||
}
|
}
|
||||||
@@ -422,11 +422,11 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown segment_count\n");
|
grub_util_info ("unknown segment_count");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_fail;
|
goto lvs_fail;
|
||||||
}
|
}
|
||||||
lv->segments = grub_malloc (sizeof (*seg) * lv->segment_count);
|
lv->segments = grub_zalloc (sizeof (*seg) * lv->segment_count);
|
||||||
seg = lv->segments;
|
seg = lv->segments;
|
||||||
|
|
||||||
for (i = 0; i < lv->segment_count; i++)
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
@@ -436,7 +436,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown segment\n");
|
grub_util_info ("unknown segment");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail;
|
goto lvs_segment_fail;
|
||||||
}
|
}
|
||||||
@@ -445,7 +445,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown start_extent\n");
|
grub_util_info ("unknown start_extent");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail;
|
goto lvs_segment_fail;
|
||||||
}
|
}
|
||||||
@@ -453,7 +453,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown extent_count\n");
|
grub_util_info ("unknown extent_count");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail;
|
goto lvs_segment_fail;
|
||||||
}
|
}
|
||||||
@@ -475,7 +475,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown stripe_count\n");
|
grub_util_info ("unknown stripe_count");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail;
|
goto lvs_segment_fail;
|
||||||
}
|
}
|
||||||
@@ -491,7 +491,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown stripes\n");
|
grub_util_info ("unknown stripes");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail2;
|
goto lvs_segment_fail2;
|
||||||
}
|
}
|
||||||
@@ -533,7 +533,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown mirror_count\n");
|
grub_util_info ("unknown mirror_count");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail;
|
goto lvs_segment_fail;
|
||||||
}
|
}
|
||||||
@@ -545,7 +545,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown mirrors\n");
|
grub_util_info ("unknown mirrors");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail2;
|
goto lvs_segment_fail2;
|
||||||
}
|
}
|
||||||
@@ -577,13 +577,17 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (is_pvmove)
|
if (is_pvmove)
|
||||||
seg->node_count = 1;
|
seg->node_count = 1;
|
||||||
}
|
}
|
||||||
else if (grub_memcmp (p, "raid", sizeof ("raid") - 1)
|
else if (grub_memcmp (p, "raid", sizeof ("raid") - 1) == 0
|
||||||
== 0 && (p[sizeof ("raid") - 1] >= '4'
|
&& ((p[sizeof ("raid") - 1] >= '4'
|
||||||
&& p[sizeof ("raid") - 1] <= '6')
|
&& p[sizeof ("raid") - 1] <= '6')
|
||||||
|
|| p[sizeof ("raid") - 1] == '1')
|
||||||
&& p[sizeof ("raidX") - 1] == '"')
|
&& p[sizeof ("raidX") - 1] == '"')
|
||||||
{
|
{
|
||||||
switch (p[sizeof ("raid") - 1])
|
switch (p[sizeof ("raid") - 1])
|
||||||
{
|
{
|
||||||
|
case '1':
|
||||||
|
seg->type = GRUB_DISKFILTER_MIRROR;
|
||||||
|
break;
|
||||||
case '4':
|
case '4':
|
||||||
seg->type = GRUB_DISKFILTER_RAID4;
|
seg->type = GRUB_DISKFILTER_RAID4;
|
||||||
seg->layout = GRUB_RAID_LAYOUT_LEFT_ASYMMETRIC;
|
seg->layout = GRUB_RAID_LAYOUT_LEFT_ASYMMETRIC;
|
||||||
@@ -603,21 +607,23 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown device_count\n");
|
grub_util_info ("unknown device_count");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail;
|
goto lvs_segment_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = ");
|
if (seg->type != GRUB_DISKFILTER_MIRROR)
|
||||||
if (p == NULL)
|
|
||||||
{
|
{
|
||||||
|
seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = ");
|
||||||
|
if (p == NULL)
|
||||||
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown stripe_size\n");
|
grub_util_info ("unknown stripe_size");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail;
|
goto lvs_segment_fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
seg->nodes = grub_zalloc (sizeof (seg->nodes[0])
|
seg->nodes = grub_zalloc (sizeof (seg->nodes[0])
|
||||||
* seg->node_count);
|
* seg->node_count);
|
||||||
|
|
||||||
@@ -625,7 +631,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
grub_util_info ("unknown mirrors\n");
|
grub_util_info ("unknown raids");
|
||||||
#endif
|
#endif
|
||||||
goto lvs_segment_fail2;
|
goto lvs_segment_fail2;
|
||||||
}
|
}
|
||||||
@@ -672,7 +678,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
p2 = grub_strchr (p, '"');
|
p2 = grub_strchr (p, '"');
|
||||||
if (p2)
|
if (p2)
|
||||||
*p2 = 0;
|
*p2 = 0;
|
||||||
grub_util_info ("unknown LVM type %s\n", p);
|
grub_util_info ("unknown LVM type %s", p);
|
||||||
if (p2)
|
if (p2)
|
||||||
*p2 ='"';
|
*p2 ='"';
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -33,16 +33,16 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
#define grub_md_to_cpu64 grub_be_to_cpu64
|
#define grub_md_to_cpu64 grub_be_to_cpu64
|
||||||
#define grub_md_to_cpu32 grub_be_to_cpu32
|
#define grub_md_to_cpu32 grub_be_to_cpu32
|
||||||
#define grub_md_to_cpu16 grub_be_to_cpu16
|
#define grub_md_to_cpu16 grub_be_to_cpu16
|
||||||
#define grub_cpu_to_md64_compile_time grub_cpu_to_be64
|
#define grub_cpu_to_md64_compile_time grub_cpu_to_be64_compile_time
|
||||||
#define grub_cpu_to_md32_compile_time grub_cpu_to_be32
|
#define grub_cpu_to_md32_compile_time grub_cpu_to_be32_compile_time
|
||||||
#define grub_cpu_to_md16_compile_time grub_cpu_to_be16
|
#define grub_cpu_to_md16_compile_time grub_cpu_to_be16_compile_time
|
||||||
#else
|
#else
|
||||||
#define grub_md_to_cpu64 grub_le_to_cpu64
|
#define grub_md_to_cpu64 grub_le_to_cpu64
|
||||||
#define grub_md_to_cpu32 grub_le_to_cpu32
|
#define grub_md_to_cpu32 grub_le_to_cpu32
|
||||||
#define grub_md_to_cpu16 grub_le_to_cpu16
|
#define grub_md_to_cpu16 grub_le_to_cpu16
|
||||||
#define grub_cpu_to_md64_compile_time grub_cpu_to_le64
|
#define grub_cpu_to_md64_compile_time grub_cpu_to_le64_compile_time
|
||||||
#define grub_cpu_to_md32_compile_time grub_cpu_to_le32
|
#define grub_cpu_to_md32_compile_time grub_cpu_to_le32_compile_time
|
||||||
#define grub_cpu_to_md16_compile_time grub_cpu_to_le16
|
#define grub_cpu_to_md16_compile_time grub_cpu_to_le16_compile_time
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RESERVED_BYTES (64 * 1024)
|
#define RESERVED_BYTES (64 * 1024)
|
||||||
|
|||||||
@@ -63,6 +63,16 @@ grub_raid6_init_table (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned
|
||||||
|
mod_255 (unsigned x)
|
||||||
|
{
|
||||||
|
while (x > 0xff)
|
||||||
|
x = (x >> 8) + (x & 0xff);
|
||||||
|
if (x == 0xff)
|
||||||
|
return 0;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_raid6_recover (struct grub_diskfilter_segment *array, int disknr, int p,
|
grub_raid6_recover (struct grub_diskfilter_segment *array, int disknr, int p,
|
||||||
char *buf, grub_disk_addr_t sector, grub_size_t size)
|
char *buf, grub_disk_addr_t sector, grub_size_t size)
|
||||||
@@ -162,11 +172,11 @@ grub_raid6_recover (struct grub_diskfilter_segment *array, int disknr, int p,
|
|||||||
|
|
||||||
grub_crypto_xor (qbuf, qbuf, buf, size);
|
grub_crypto_xor (qbuf, qbuf, buf, size);
|
||||||
|
|
||||||
c = ((255 ^ bad1)
|
c = mod_255((255 ^ bad1)
|
||||||
+ (255 ^ powx_inv[(powx[bad2 + (bad1 ^ 255)] ^ 1)])) % 255;
|
+ (255 ^ powx_inv[(powx[bad2 + (bad1 ^ 255)] ^ 1)]));
|
||||||
grub_raid_block_mulx (c, qbuf, size);
|
grub_raid_block_mulx (c, qbuf, size);
|
||||||
|
|
||||||
c = ((unsigned) bad2 + c) % 255;
|
c = mod_255((unsigned) bad2 + c);
|
||||||
grub_raid_block_mulx (c, pbuf, size);
|
grub_raid_block_mulx (c, pbuf, size);
|
||||||
|
|
||||||
grub_crypto_xor (pbuf, pbuf, qbuf, size);
|
grub_crypto_xor (pbuf, pbuf, qbuf, size);
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ grub_scsi_read_capacity16 (grub_scsi_t scsi)
|
|||||||
rc.opcode = grub_scsi_cmd_read_capacity16;
|
rc.opcode = grub_scsi_cmd_read_capacity16;
|
||||||
rc.lun = (scsi->lun << GRUB_SCSI_LUN_SHIFT) | 0x10;
|
rc.lun = (scsi->lun << GRUB_SCSI_LUN_SHIFT) | 0x10;
|
||||||
rc.logical_block_addr = 0;
|
rc.logical_block_addr = 0;
|
||||||
rc.alloc_len = grub_cpu_to_be32 (sizeof (rcd));
|
rc.alloc_len = grub_cpu_to_be32_compile_time (sizeof (rcd));
|
||||||
rc.PMI = 0;
|
rc.PMI = 0;
|
||||||
rc.control = 0;
|
rc.control = 0;
|
||||||
|
|
||||||
@@ -615,9 +615,10 @@ grub_scsi_open (const char *name, grub_disk_t disk)
|
|||||||
|
|
||||||
if (scsi->blocksize & (scsi->blocksize - 1) || !scsi->blocksize)
|
if (scsi->blocksize & (scsi->blocksize - 1) || !scsi->blocksize)
|
||||||
{
|
{
|
||||||
|
grub_error (GRUB_ERR_IO, "invalid sector size %d",
|
||||||
|
scsi->blocksize);
|
||||||
grub_free (scsi);
|
grub_free (scsi);
|
||||||
return grub_error (GRUB_ERR_IO, "invalid sector size %d",
|
return grub_errno;
|
||||||
scsi->blocksize);
|
|
||||||
}
|
}
|
||||||
for (disk->log_sector_size = 0;
|
for (disk->log_sector_size = 0;
|
||||||
(1U << disk->log_sector_size) < scsi->blocksize;
|
(1U << disk->log_sector_size) < scsi->blocksize;
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
|
|||||||
|
|
||||||
/* Setup the request. */
|
/* Setup the request. */
|
||||||
grub_memset (&cbw, 0, sizeof (cbw));
|
grub_memset (&cbw, 0, sizeof (cbw));
|
||||||
cbw.signature = grub_cpu_to_le32 (0x43425355);
|
cbw.signature = grub_cpu_to_le32_compile_time (0x43425355);
|
||||||
cbw.tag = tag;
|
cbw.tag = tag;
|
||||||
cbw.transfer_length = grub_cpu_to_le32 (size);
|
cbw.transfer_length = grub_cpu_to_le32 (size);
|
||||||
cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT;
|
cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT;
|
||||||
@@ -414,7 +414,7 @@ CheckCSW:
|
|||||||
|
|
||||||
/* If phase error or not valid signature, do bulk-only reset device. */
|
/* If phase error or not valid signature, do bulk-only reset device. */
|
||||||
if ((status.status == 2) ||
|
if ((status.status == 2) ||
|
||||||
(status.signature != grub_cpu_to_le32(0x53425355)))
|
(status.signature != grub_cpu_to_le32_compile_time(0x53425355)))
|
||||||
{ /* Bulk-only reset device. */
|
{ /* Bulk-only reset device. */
|
||||||
grub_dprintf ("usb", "Bulk-only reset device - bad status\n");
|
grub_dprintf ("usb", "Bulk-only reset device - bad status\n");
|
||||||
grub_usbms_reset (dev);
|
grub_usbms_reset (dev);
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ struct virtdisk
|
|||||||
grub_xen_evtchn_t evtchn;
|
grub_xen_evtchn_t evtchn;
|
||||||
void *dma_page;
|
void *dma_page;
|
||||||
grub_xen_grant_t dma_grant;
|
grub_xen_grant_t dma_grant;
|
||||||
|
struct virtdisk *compat_next;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define xen_wmb() mb()
|
#define xen_wmb() mb()
|
||||||
@@ -47,6 +48,7 @@ struct virtdisk
|
|||||||
|
|
||||||
static struct virtdisk *virtdisks;
|
static struct virtdisk *virtdisks;
|
||||||
static grub_size_t vdiskcnt;
|
static grub_size_t vdiskcnt;
|
||||||
|
struct virtdisk *compat_head;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
||||||
@@ -66,20 +68,32 @@ grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
|||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_virtdisk_open (const char *name, grub_disk_t disk)
|
grub_virtdisk_open (const char *name, grub_disk_t disk)
|
||||||
{
|
{
|
||||||
grub_size_t i;
|
int i;
|
||||||
grub_uint32_t secsize;
|
grub_uint32_t secsize;
|
||||||
char fdir[200];
|
char fdir[200];
|
||||||
char *buf;
|
char *buf;
|
||||||
|
int num = -1;
|
||||||
|
struct virtdisk *vd;
|
||||||
|
|
||||||
for (i = 0; i < vdiskcnt; i++)
|
/* For compatibility with pv-grub legacy menu.lst accept hdX as disk name */
|
||||||
if (grub_strcmp (name, virtdisks[i].fullname) == 0)
|
if (name[0] == 'h' && name[1] == 'd' && name[2])
|
||||||
|
{
|
||||||
|
num = grub_strtoul (name + 2, 0, 10);
|
||||||
|
if (grub_errno)
|
||||||
|
{
|
||||||
|
grub_errno = 0;
|
||||||
|
num = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0, vd = compat_head; vd; vd = vd->compat_next, i++)
|
||||||
|
if (i == num || grub_strcmp (name, vd->fullname) == 0)
|
||||||
break;
|
break;
|
||||||
if (i == vdiskcnt)
|
if (!vd)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a virtdisk");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a virtdisk");
|
||||||
disk->data = &virtdisks[i];
|
disk->data = vd;
|
||||||
disk->id = i;
|
disk->id = vd - virtdisks;
|
||||||
|
|
||||||
grub_snprintf (fdir, sizeof (fdir), "%s/sectors", virtdisks[i].backend_dir);
|
grub_snprintf (fdir, sizeof (fdir), "%s/sectors", vd->backend_dir);
|
||||||
buf = grub_xenstore_get_file (fdir, NULL);
|
buf = grub_xenstore_get_file (fdir, NULL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -87,8 +101,7 @@ grub_virtdisk_open (const char *name, grub_disk_t disk)
|
|||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
grub_snprintf (fdir, sizeof (fdir), "%s/sector-size",
|
grub_snprintf (fdir, sizeof (fdir), "%s/sector-size", vd->backend_dir);
|
||||||
virtdisks[i].backend_dir);
|
|
||||||
buf = grub_xenstore_get_file (fdir, NULL);
|
buf = grub_xenstore_get_file (fdir, NULL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -264,6 +277,7 @@ fill (const char *dir, void *data)
|
|||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
void *buf;
|
void *buf;
|
||||||
struct evtchn_alloc_unbound alloc_unbound;
|
struct evtchn_alloc_unbound alloc_unbound;
|
||||||
|
struct virtdisk **prev = &compat_head, *vd = compat_head;
|
||||||
|
|
||||||
/* Shouldn't happen unles some hotplug happened. */
|
/* Shouldn't happen unles some hotplug happened. */
|
||||||
if (vdiskcnt >= *ctr)
|
if (vdiskcnt >= *ctr)
|
||||||
@@ -374,6 +388,19 @@ fill (const char *dir, void *data)
|
|||||||
|
|
||||||
virtdisks[vdiskcnt].frontend_dir = grub_strdup (fdir);
|
virtdisks[vdiskcnt].frontend_dir = grub_strdup (fdir);
|
||||||
|
|
||||||
|
/* For compatibility with pv-grub maintain linked list sorted by handle
|
||||||
|
value in increasing order. This allows mapping of (hdX) disk names
|
||||||
|
from legacy menu.lst */
|
||||||
|
while (vd)
|
||||||
|
{
|
||||||
|
if (vd->handle > virtdisks[vdiskcnt].handle)
|
||||||
|
break;
|
||||||
|
prev = &vd->compat_next;
|
||||||
|
vd = vd->compat_next;
|
||||||
|
}
|
||||||
|
virtdisks[vdiskcnt].compat_next = vd;
|
||||||
|
*prev = &virtdisks[vdiskcnt];
|
||||||
|
|
||||||
vdiskcnt++;
|
vdiskcnt++;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -154,7 +154,10 @@ grub_efiemu_init_segments (grub_efiemu_segment_t *segs, const Elf_Ehdr *e)
|
|||||||
s->sh_flags & SHF_EXECINSTR ? GRUB_EFI_RUNTIME_SERVICES_CODE
|
s->sh_flags & SHF_EXECINSTR ? GRUB_EFI_RUNTIME_SERVICES_CODE
|
||||||
: GRUB_EFI_RUNTIME_SERVICES_DATA);
|
: GRUB_EFI_RUNTIME_SERVICES_DATA);
|
||||||
if (seg->handle < 0)
|
if (seg->handle < 0)
|
||||||
return grub_errno;
|
{
|
||||||
|
grub_free (seg);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
seg->off = 0;
|
seg->off = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,7 +346,7 @@ SUFFIX (grub_efiemu_loadcore_init) (void *core, const char *filename,
|
|||||||
return grub_error (GRUB_ERR_BAD_MODULE, N_("this ELF file is not of the right type"));
|
return grub_error (GRUB_ERR_BAD_MODULE, N_("this ELF file is not of the right type"));
|
||||||
|
|
||||||
/* Make sure that every section is within the core. */
|
/* Make sure that every section is within the core. */
|
||||||
if ((grub_size_t) core_size < e->e_shoff + e->e_shentsize * e->e_shnum)
|
if ((grub_size_t) core_size < e->e_shoff + (grub_uint32_t) e->e_shentsize * e->e_shnum)
|
||||||
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
||||||
filename);
|
filename);
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ grub_efiemu_load_file (const char *filename)
|
|||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
grub_efiemu_unload ();
|
grub_efiemu_unload ();
|
||||||
return grub_errno;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_dprintf ("efiemu", "mm initialized\n");
|
grub_dprintf ("efiemu", "mm initialized\n");
|
||||||
|
|||||||
+22
-3
@@ -99,7 +99,8 @@ grub_efiemu_request_memalign (grub_size_t align, grub_size_t size,
|
|||||||
grub_size_t align_overhead;
|
grub_size_t align_overhead;
|
||||||
struct grub_efiemu_memrequest *ret, *cur, *prev;
|
struct grub_efiemu_memrequest *ret, *cur, *prev;
|
||||||
/* Check that the request is correct */
|
/* Check that the request is correct */
|
||||||
if (type >= GRUB_EFI_MAX_MEMORY_TYPE || type <= GRUB_EFI_LOADER_CODE)
|
if (type <= GRUB_EFI_LOADER_CODE || type == GRUB_EFI_PERSISTENT_MEMORY ||
|
||||||
|
type >= GRUB_EFI_MAX_MEMORY_TYPE)
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
/* Add new size to requested size */
|
/* Add new size to requested size */
|
||||||
@@ -166,6 +167,13 @@ efiemu_alloc_requests (void)
|
|||||||
GRUB_EFI_MEMORY_MAPPED_IO,
|
GRUB_EFI_MEMORY_MAPPED_IO,
|
||||||
GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
|
GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
|
||||||
GRUB_EFI_PAL_CODE
|
GRUB_EFI_PAL_CODE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are not allocatable:
|
||||||
|
* GRUB_EFI_RESERVED_MEMORY_TYPE
|
||||||
|
* GRUB_EFI_PERSISTENT_MEMORY
|
||||||
|
* >= GRUB_EFI_MAX_MEMORY_TYPE
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Compute total memory needed */
|
/* Compute total memory needed */
|
||||||
@@ -402,6 +410,10 @@ fill_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type,
|
|||||||
return grub_efiemu_add_to_mmap (addr, size,
|
return grub_efiemu_add_to_mmap (addr, size,
|
||||||
GRUB_EFI_ACPI_MEMORY_NVS);
|
GRUB_EFI_ACPI_MEMORY_NVS);
|
||||||
|
|
||||||
|
case GRUB_MEMORY_PERSISTENT:
|
||||||
|
case GRUB_MEMORY_PERSISTENT_LEGACY:
|
||||||
|
return grub_efiemu_add_to_mmap (addr, size,
|
||||||
|
GRUB_EFI_PERSISTENT_MEMORY);
|
||||||
default:
|
default:
|
||||||
grub_dprintf ("efiemu",
|
grub_dprintf ("efiemu",
|
||||||
"Unknown memory type %d. Assuming unusable\n", type);
|
"Unknown memory type %d. Assuming unusable\n", type);
|
||||||
@@ -445,7 +457,7 @@ grub_efiemu_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
case GRUB_EFI_MEMORY_MAPPED_IO:
|
case GRUB_EFI_MEMORY_MAPPED_IO:
|
||||||
case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE:
|
case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE:
|
||||||
case GRUB_EFI_PAL_CODE:
|
case GRUB_EFI_PAL_CODE:
|
||||||
case GRUB_EFI_MAX_MEMORY_TYPE:
|
default:
|
||||||
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
||||||
GRUB_MEMORY_RESERVED, hook_data);
|
GRUB_MEMORY_RESERVED, hook_data);
|
||||||
break;
|
break;
|
||||||
@@ -468,6 +480,12 @@ grub_efiemu_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
||||||
GRUB_MEMORY_NVS, hook_data);
|
GRUB_MEMORY_NVS, hook_data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GRUB_EFI_PERSISTENT_MEMORY:
|
||||||
|
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
||||||
|
GRUB_MEMORY_PERSISTENT, hook_data);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -503,7 +521,8 @@ grub_efiemu_mmap_sort_and_uniq (void)
|
|||||||
[GRUB_EFI_ACPI_MEMORY_NVS] = 3,
|
[GRUB_EFI_ACPI_MEMORY_NVS] = 3,
|
||||||
[GRUB_EFI_MEMORY_MAPPED_IO] = 4,
|
[GRUB_EFI_MEMORY_MAPPED_IO] = 4,
|
||||||
[GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE] = 4,
|
[GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE] = 4,
|
||||||
[GRUB_EFI_PAL_CODE] = 4
|
[GRUB_EFI_PAL_CODE] = 4,
|
||||||
|
[GRUB_EFI_PERSISTENT_MEMORY] = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
int i, j, k, done;
|
int i, j, k, done;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <grub/err.h>
|
#include <grub/err.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
#include <grub/efiemu/efiemu.h>
|
#include <grub/efiemu/efiemu.h>
|
||||||
#include <grub/crypto.h>
|
#include <grub/crypto.h>
|
||||||
|
|
||||||
@@ -82,10 +83,16 @@ SUFFIX (grub_efiemu_prepare) (struct grub_efiemu_prepare_hook *prepare_hooks,
|
|||||||
((grub_uint8_t *) grub_efiemu_mm_obtain_request (handle) + off);
|
((grub_uint8_t *) grub_efiemu_mm_obtain_request (handle) + off);
|
||||||
|
|
||||||
/* Put pointer to the list of configuration tables in system table */
|
/* Put pointer to the list of configuration tables in system table */
|
||||||
grub_efiemu_write_value
|
err = grub_efiemu_write_value
|
||||||
(&(SUFFIX (grub_efiemu_system_table)->configuration_table), 0,
|
(&(SUFFIX (grub_efiemu_system_table)->configuration_table), 0,
|
||||||
conftable_handle, 0, 1,
|
conftable_handle, 0, 1,
|
||||||
sizeof (SUFFIX (grub_efiemu_system_table)->configuration_table));
|
sizeof (SUFFIX (grub_efiemu_system_table)->configuration_table));
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_efiemu_unload ();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
SUFFIX(grub_efiemu_system_table)->num_table_entries = cntconftables;
|
SUFFIX(grub_efiemu_system_table)->num_table_entries = cntconftables;
|
||||||
|
|
||||||
/* Fill the list of configuration tables */
|
/* Fill the list of configuration tables */
|
||||||
|
|||||||
@@ -777,6 +777,7 @@ grub_font_get_glyph_internal (grub_font_t font, grub_uint32_t code)
|
|||||||
if (grub_file_read (font->file, glyph->bitmap, len) != len)
|
if (grub_file_read (font->file, glyph->bitmap, len) != len)
|
||||||
{
|
{
|
||||||
remove_font (font);
|
remove_font (font);
|
||||||
|
grub_free (glyph);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1285,7 +1286,7 @@ blit_comb (const struct grub_unicode_glyph *glyph_id,
|
|||||||
- grub_font_get_xheight (combining_glyphs[i]->font) - 1;
|
- grub_font_get_xheight (combining_glyphs[i]->font) - 1;
|
||||||
if (space <= 0)
|
if (space <= 0)
|
||||||
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_UNICODE_STACK_ATTACHED_ABOVE:
|
case GRUB_UNICODE_STACK_ATTACHED_ABOVE:
|
||||||
do_blit (combining_glyphs[i], targetx,
|
do_blit (combining_glyphs[i], targetx,
|
||||||
-(ctx.bounds.height + ctx.bounds.y + space
|
-(ctx.bounds.height + ctx.bounds.y + space
|
||||||
@@ -1326,6 +1327,7 @@ blit_comb (const struct grub_unicode_glyph *glyph_id,
|
|||||||
+ combining_glyphs[i]->height);
|
+ combining_glyphs[i]->height);
|
||||||
if (space <= 0)
|
if (space <= 0)
|
||||||
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
||||||
|
/* Fallthrough. */
|
||||||
|
|
||||||
case GRUB_UNICODE_STACK_ATTACHED_BELOW:
|
case GRUB_UNICODE_STACK_ATTACHED_BELOW:
|
||||||
do_blit (combining_glyphs[i], targetx, -(ctx.bounds.y - space),
|
do_blit (combining_glyphs[i], targetx, -(ctx.bounds.y - space),
|
||||||
|
|||||||
@@ -34,12 +34,12 @@ canonicalize (char *name)
|
|||||||
iptr++;
|
iptr++;
|
||||||
if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0))
|
if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0))
|
||||||
{
|
{
|
||||||
iptr += 2;
|
iptr++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0))
|
if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0))
|
||||||
{
|
{
|
||||||
iptr += 3;
|
iptr += 2;
|
||||||
if (optr == name)
|
if (optr == name)
|
||||||
continue;
|
continue;
|
||||||
for (optr -= 2; optr >= name && *optr != '/'; optr--);
|
for (optr -= 2; optr >= name && *optr != '/'; optr--);
|
||||||
@@ -249,9 +249,10 @@ grub_archelp_open (struct grub_archelp_data *data,
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
grub_uint32_t mode;
|
grub_uint32_t mode;
|
||||||
|
grub_int32_t mtime;
|
||||||
int restart;
|
int restart;
|
||||||
|
|
||||||
if (arcops->find_file (data, &fn, NULL, &mode))
|
if (arcops->find_file (data, &fn, &mtime, &mode))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (mode == GRUB_ARCHELP_ATTR_END)
|
if (mode == GRUB_ARCHELP_ATTR_END)
|
||||||
|
|||||||
+104
-117
@@ -29,6 +29,7 @@
|
|||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
|
#include <grub/fshelp.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -561,10 +562,10 @@ iterate_in_b_tree (grub_disk_t disk,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bfs_strcmp (const char *a, const char *b, grub_size_t alen, grub_size_t blen)
|
bfs_strcmp (const char *a, const char *b, grub_size_t alen)
|
||||||
{
|
{
|
||||||
char ac, bc;
|
char ac, bc;
|
||||||
while (blen && alen)
|
while (*b && alen)
|
||||||
{
|
{
|
||||||
if (*a != *b)
|
if (*a != *b)
|
||||||
break;
|
break;
|
||||||
@@ -572,11 +573,10 @@ bfs_strcmp (const char *a, const char *b, grub_size_t alen, grub_size_t blen)
|
|||||||
a++;
|
a++;
|
||||||
b++;
|
b++;
|
||||||
alen--;
|
alen--;
|
||||||
blen--;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ac = alen ? *a : 0;
|
ac = alen ? *a : 0;
|
||||||
bc = blen ? *b : 0;
|
bc = *b;
|
||||||
|
|
||||||
#ifdef MODE_AFS
|
#ifdef MODE_AFS
|
||||||
return (int) (grub_int8_t) ac - (int) (grub_int8_t) bc;
|
return (int) (grub_int8_t) ac - (int) (grub_int8_t) bc;
|
||||||
@@ -589,7 +589,6 @@ static grub_err_t
|
|||||||
find_in_b_tree (grub_disk_t disk,
|
find_in_b_tree (grub_disk_t disk,
|
||||||
const struct grub_bfs_superblock *sb,
|
const struct grub_bfs_superblock *sb,
|
||||||
const struct grub_bfs_inode *ino, const char *name,
|
const struct grub_bfs_inode *ino, const char *name,
|
||||||
grub_size_t name_len,
|
|
||||||
grub_uint64_t * res)
|
grub_uint64_t * res)
|
||||||
{
|
{
|
||||||
struct grub_bfs_btree_header head;
|
struct grub_bfs_btree_header head;
|
||||||
@@ -637,7 +636,7 @@ find_in_b_tree (grub_disk_t disk,
|
|||||||
end = grub_bfs_to_cpu16 (keylen_idx[(i | (1 << j))]);
|
end = grub_bfs_to_cpu16 (keylen_idx[(i | (1 << j))]);
|
||||||
if (grub_bfs_to_cpu_treehead (node->total_key_len) <= end)
|
if (grub_bfs_to_cpu_treehead (node->total_key_len) <= end)
|
||||||
end = grub_bfs_to_cpu_treehead (node->total_key_len);
|
end = grub_bfs_to_cpu_treehead (node->total_key_len);
|
||||||
cmp = bfs_strcmp (key_data + start, name, end - start, name_len);
|
cmp = bfs_strcmp (key_data + start, name, end - start);
|
||||||
if (cmp == 0 && level == 0)
|
if (cmp == 0 && level == 0)
|
||||||
{
|
{
|
||||||
*res = grub_bfs_to_cpu64 (key_values[i | (1 << j)].val);
|
*res = grub_bfs_to_cpu64 (key_values[i | (1 << j)].val);
|
||||||
@@ -658,7 +657,7 @@ find_in_b_tree (grub_disk_t disk,
|
|||||||
end = grub_bfs_to_cpu16 (keylen_idx[0]);
|
end = grub_bfs_to_cpu16 (keylen_idx[0]);
|
||||||
if (grub_bfs_to_cpu_treehead (node->total_key_len) <= end)
|
if (grub_bfs_to_cpu_treehead (node->total_key_len) <= end)
|
||||||
end = grub_bfs_to_cpu_treehead (node->total_key_len);
|
end = grub_bfs_to_cpu_treehead (node->total_key_len);
|
||||||
cmp = bfs_strcmp (key_data, name, end, name_len);
|
cmp = bfs_strcmp (key_data, name, end);
|
||||||
if (cmp == 0 && level == 0)
|
if (cmp == 0 && level == 0)
|
||||||
{
|
{
|
||||||
*res = grub_bfs_to_cpu64 (key_values[0].val);
|
*res = grub_bfs_to_cpu64 (key_values[0].val);
|
||||||
@@ -707,127 +706,119 @@ find_in_b_tree (grub_disk_t disk,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct grub_fshelp_node
|
||||||
|
{
|
||||||
|
grub_disk_t disk;
|
||||||
|
const struct grub_bfs_superblock *sb;
|
||||||
|
struct grub_bfs_inode ino;
|
||||||
|
};
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
hop_level (grub_disk_t disk,
|
lookup_file (grub_fshelp_node_t dir,
|
||||||
const struct grub_bfs_superblock *sb,
|
const char *name,
|
||||||
struct grub_bfs_inode *ino, const char *name,
|
grub_fshelp_node_t *foundnode,
|
||||||
const char *name_end)
|
enum grub_fshelp_filetype *foundtype)
|
||||||
{
|
{
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
|
struct grub_bfs_inode *new_ino;
|
||||||
grub_uint64_t res = 0;
|
grub_uint64_t res = 0;
|
||||||
|
|
||||||
if (((grub_bfs_to_cpu32 (ino->mode) & ATTR_TYPE) != ATTR_DIR))
|
err = find_in_b_tree (dir->disk, dir->sb, &dir->ino, name, &res);
|
||||||
return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory"));
|
|
||||||
|
|
||||||
err = find_in_b_tree (disk, sb, ino, name, name_end - name, &res);
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
return grub_disk_read (disk, res
|
*foundnode = grub_malloc (sizeof (struct grub_fshelp_node));
|
||||||
<< (grub_bfs_to_cpu32 (sb->log2_bsize)
|
if (!*foundnode)
|
||||||
- GRUB_DISK_SECTOR_BITS), 0,
|
return grub_errno;
|
||||||
sizeof (*ino), (char *) ino);
|
|
||||||
|
(*foundnode)->disk = dir->disk;
|
||||||
|
(*foundnode)->sb = dir->sb;
|
||||||
|
new_ino = &(*foundnode)->ino;
|
||||||
|
|
||||||
|
if (grub_disk_read (dir->disk, res
|
||||||
|
<< (grub_bfs_to_cpu32 (dir->sb->log2_bsize)
|
||||||
|
- GRUB_DISK_SECTOR_BITS), 0,
|
||||||
|
sizeof (*new_ino), (char *) new_ino))
|
||||||
|
{
|
||||||
|
grub_free (*foundnode);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
switch (grub_bfs_to_cpu32 (new_ino->mode) & ATTR_TYPE)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ATTR_REG:
|
||||||
|
*foundtype = GRUB_FSHELP_REG;
|
||||||
|
break;
|
||||||
|
case ATTR_DIR:
|
||||||
|
*foundtype = GRUB_FSHELP_DIR;
|
||||||
|
break;
|
||||||
|
case ATTR_LNK:
|
||||||
|
*foundtype = GRUB_FSHELP_SYMLINK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
read_symlink (grub_fshelp_node_t node)
|
||||||
|
{
|
||||||
|
char *alloc = NULL;
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
|
#ifndef MODE_AFS
|
||||||
|
if (!(grub_bfs_to_cpu32 (node->ino.flags) & LONG_SYMLINK))
|
||||||
|
{
|
||||||
|
alloc = grub_malloc (sizeof (node->ino.inplace_link) + 1);
|
||||||
|
if (!alloc)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
grub_memcpy (alloc, node->ino.inplace_link,
|
||||||
|
sizeof (node->ino.inplace_link));
|
||||||
|
alloc[sizeof (node->ino.inplace_link)] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
grub_size_t symsize = grub_bfs_to_cpu64 (node->ino.size);
|
||||||
|
alloc = grub_malloc (symsize + 1);
|
||||||
|
if (!alloc)
|
||||||
|
return NULL;
|
||||||
|
err = read_bfs_file (node->disk, node->sb, &node->ino, 0, alloc, symsize, 0, 0);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_free (alloc);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
alloc[symsize] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
find_file (const char *path, grub_disk_t disk,
|
find_file (const char *path, grub_disk_t disk,
|
||||||
const struct grub_bfs_superblock *sb, struct grub_bfs_inode *ino)
|
const struct grub_bfs_superblock *sb, struct grub_bfs_inode *ino,
|
||||||
|
enum grub_fshelp_filetype exptype)
|
||||||
{
|
{
|
||||||
const char *ptr, *next = path;
|
|
||||||
char *alloc = NULL;
|
|
||||||
char *wptr;
|
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
struct grub_bfs_inode old_ino;
|
struct grub_fshelp_node root = {
|
||||||
unsigned symlinks_max = 32;
|
.disk = disk,
|
||||||
|
.sb = sb,
|
||||||
|
};
|
||||||
|
struct grub_fshelp_node *found;
|
||||||
|
|
||||||
err = read_extent (disk, sb, &sb->root_dir, 0, 0, ino,
|
err = read_extent (disk, sb, &sb->root_dir, 0, 0, &root.ino,
|
||||||
sizeof (*ino));
|
sizeof (root.ino));
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
err = grub_fshelp_find_file_lookup (path, &root, &found, lookup_file, read_symlink, exptype);
|
||||||
|
if (!err)
|
||||||
|
grub_memcpy (ino, &found->ino, sizeof (*ino));
|
||||||
|
|
||||||
while (1)
|
if (&root != found)
|
||||||
{
|
grub_free (found);
|
||||||
ptr = next;
|
return err;
|
||||||
while (*ptr == '/')
|
|
||||||
ptr++;
|
|
||||||
if (*ptr == 0)
|
|
||||||
{
|
|
||||||
grub_free (alloc);
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
for (next = ptr; *next && *next != '/'; next++);
|
|
||||||
grub_memcpy (&old_ino, ino, sizeof (old_ino));
|
|
||||||
err = hop_level (disk, sb, ino, ptr, next);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
if (((grub_bfs_to_cpu32 (ino->mode) & ATTR_TYPE) == ATTR_LNK))
|
|
||||||
{
|
|
||||||
char *old_alloc = alloc;
|
|
||||||
if (--symlinks_max == 0)
|
|
||||||
{
|
|
||||||
grub_free (alloc);
|
|
||||||
return grub_error (GRUB_ERR_SYMLINK_LOOP,
|
|
||||||
N_("too deep nesting of symlinks"));
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef MODE_AFS
|
|
||||||
if (grub_bfs_to_cpu32 (ino->flags) & LONG_SYMLINK)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
grub_size_t symsize = grub_bfs_to_cpu64 (ino->size);
|
|
||||||
alloc = grub_malloc (grub_strlen (next)
|
|
||||||
+ symsize + 1);
|
|
||||||
if (!alloc)
|
|
||||||
{
|
|
||||||
grub_free (alloc);
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
grub_free (old_alloc);
|
|
||||||
err = read_bfs_file (disk, sb, ino, 0, alloc, symsize, 0, 0);
|
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
grub_free (alloc);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
alloc[symsize] = 0;
|
|
||||||
}
|
|
||||||
#ifndef MODE_AFS
|
|
||||||
else
|
|
||||||
{
|
|
||||||
alloc = grub_malloc (grub_strlen (next)
|
|
||||||
+ sizeof (ino->inplace_link) + 1);
|
|
||||||
if (!alloc)
|
|
||||||
{
|
|
||||||
grub_free (alloc);
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
grub_free (old_alloc);
|
|
||||||
grub_memcpy (alloc, ino->inplace_link,
|
|
||||||
sizeof (ino->inplace_link));
|
|
||||||
alloc[sizeof (ino->inplace_link)] = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (alloc[0] == '/')
|
|
||||||
{
|
|
||||||
err = read_extent (disk, sb, &sb->root_dir, 0, 0, ino,
|
|
||||||
sizeof (*ino));
|
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
grub_free (alloc);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
grub_memcpy (ino, &old_ino, sizeof (old_ino));
|
|
||||||
wptr = alloc + grub_strlen (alloc);
|
|
||||||
if (next)
|
|
||||||
wptr = grub_stpcpy (wptr, next);
|
|
||||||
*wptr = 0;
|
|
||||||
next = alloc;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -909,11 +900,9 @@ grub_bfs_dir (grub_device_t device, const char *path,
|
|||||||
|
|
||||||
{
|
{
|
||||||
struct grub_bfs_inode ino;
|
struct grub_bfs_inode ino;
|
||||||
err = find_file (path, device->disk, &ctx.sb, &ino);
|
err = find_file (path, device->disk, &ctx.sb, &ino, GRUB_FSHELP_DIR);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
if (((grub_bfs_to_cpu32 (ino.mode) & ATTR_TYPE) != ATTR_DIR))
|
|
||||||
return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory"));
|
|
||||||
iterate_in_b_tree (device->disk, &ctx.sb, &ino, grub_bfs_dir_iter,
|
iterate_in_b_tree (device->disk, &ctx.sb, &ino, grub_bfs_dir_iter,
|
||||||
&ctx);
|
&ctx);
|
||||||
}
|
}
|
||||||
@@ -934,11 +923,9 @@ grub_bfs_open (struct grub_file *file, const char *name)
|
|||||||
{
|
{
|
||||||
struct grub_bfs_inode ino;
|
struct grub_bfs_inode ino;
|
||||||
struct grub_bfs_data *data;
|
struct grub_bfs_data *data;
|
||||||
err = find_file (name, file->device->disk, &sb, &ino);
|
err = find_file (name, file->device->disk, &sb, &ino, GRUB_FSHELP_REG);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
if (((grub_bfs_to_cpu32 (ino.mode) & ATTR_TYPE) != ATTR_REG))
|
|
||||||
return grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a regular file"));
|
|
||||||
|
|
||||||
data = grub_zalloc (sizeof (struct grub_bfs_data));
|
data = grub_zalloc (sizeof (struct grub_bfs_data));
|
||||||
if (!data)
|
if (!data)
|
||||||
@@ -1034,7 +1021,7 @@ read_bfs_attr (grub_disk_t disk,
|
|||||||
if (err)
|
if (err)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
err = find_in_b_tree (disk, sb, ino, name, grub_strlen (name), &res);
|
err = find_in_b_tree (disk, sb, ino, name, &res);
|
||||||
if (err)
|
if (err)
|
||||||
return -1;
|
return -1;
|
||||||
grub_disk_read (disk, res
|
grub_disk_read (disk, res
|
||||||
|
|||||||
+23
-16
@@ -680,6 +680,8 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
grub_uint64_t stripen;
|
grub_uint64_t stripen;
|
||||||
grub_uint64_t stripe_offset;
|
grub_uint64_t stripe_offset;
|
||||||
grub_uint64_t off = addr - grub_le_to_cpu64 (key->offset);
|
grub_uint64_t off = addr - grub_le_to_cpu64 (key->offset);
|
||||||
|
grub_uint64_t chunk_stripe_length;
|
||||||
|
grub_uint16_t nstripes;
|
||||||
unsigned redundancy = 1;
|
unsigned redundancy = 1;
|
||||||
unsigned i, j;
|
unsigned i, j;
|
||||||
|
|
||||||
@@ -690,15 +692,17 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
"couldn't find the chunk descriptor");
|
"couldn't find the chunk descriptor");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nstripes = grub_le_to_cpu16 (chunk->nstripes) ? : 1;
|
||||||
|
chunk_stripe_length = grub_le_to_cpu64 (chunk->stripe_length) ? : 512;
|
||||||
grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T
|
grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T
|
||||||
"+0x%" PRIxGRUB_UINT64_T
|
"+0x%" PRIxGRUB_UINT64_T
|
||||||
" (%d stripes (%d substripes) of %"
|
" (%d stripes (%d substripes) of %"
|
||||||
PRIxGRUB_UINT64_T ")\n",
|
PRIxGRUB_UINT64_T ")\n",
|
||||||
grub_le_to_cpu64 (key->offset),
|
grub_le_to_cpu64 (key->offset),
|
||||||
grub_le_to_cpu64 (chunk->size),
|
grub_le_to_cpu64 (chunk->size),
|
||||||
grub_le_to_cpu16 (chunk->nstripes),
|
nstripes,
|
||||||
grub_le_to_cpu16 (chunk->nsubstripes),
|
grub_le_to_cpu16 (chunk->nsubstripes),
|
||||||
grub_le_to_cpu64 (chunk->stripe_length));
|
chunk_stripe_length);
|
||||||
|
|
||||||
switch (grub_le_to_cpu64 (chunk->type)
|
switch (grub_le_to_cpu64 (chunk->type)
|
||||||
& ~GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE)
|
& ~GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE)
|
||||||
@@ -708,8 +712,10 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
grub_uint64_t stripe_length;
|
grub_uint64_t stripe_length;
|
||||||
grub_dprintf ("btrfs", "single\n");
|
grub_dprintf ("btrfs", "single\n");
|
||||||
stripe_length = grub_divmod64 (grub_le_to_cpu64 (chunk->size),
|
stripe_length = grub_divmod64 (grub_le_to_cpu64 (chunk->size),
|
||||||
grub_le_to_cpu16 (chunk->nstripes),
|
nstripes,
|
||||||
NULL);
|
NULL);
|
||||||
|
if (stripe_length == 0)
|
||||||
|
stripe_length = 512;
|
||||||
stripen = grub_divmod64 (off, stripe_length, &stripe_offset);
|
stripen = grub_divmod64 (off, stripe_length, &stripe_offset);
|
||||||
csize = (stripen + 1) * stripe_length - off;
|
csize = (stripen + 1) * stripe_length - off;
|
||||||
break;
|
break;
|
||||||
@@ -730,33 +736,34 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
grub_uint64_t low;
|
grub_uint64_t low;
|
||||||
grub_dprintf ("btrfs", "RAID0\n");
|
grub_dprintf ("btrfs", "RAID0\n");
|
||||||
middle = grub_divmod64 (off,
|
middle = grub_divmod64 (off,
|
||||||
grub_le_to_cpu64 (chunk->stripe_length),
|
chunk_stripe_length,
|
||||||
&low);
|
&low);
|
||||||
|
|
||||||
high = grub_divmod64 (middle, grub_le_to_cpu16 (chunk->nstripes),
|
high = grub_divmod64 (middle, nstripes,
|
||||||
&stripen);
|
&stripen);
|
||||||
stripe_offset =
|
stripe_offset =
|
||||||
low + grub_le_to_cpu64 (chunk->stripe_length) * high;
|
low + chunk_stripe_length * high;
|
||||||
csize = grub_le_to_cpu64 (chunk->stripe_length) - low;
|
csize = chunk_stripe_length - low;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GRUB_BTRFS_CHUNK_TYPE_RAID10:
|
case GRUB_BTRFS_CHUNK_TYPE_RAID10:
|
||||||
{
|
{
|
||||||
grub_uint64_t middle, high;
|
grub_uint64_t middle, high;
|
||||||
grub_uint64_t low;
|
grub_uint64_t low;
|
||||||
|
grub_uint16_t nsubstripes;
|
||||||
|
nsubstripes = grub_le_to_cpu16 (chunk->nsubstripes) ? : 1;
|
||||||
middle = grub_divmod64 (off,
|
middle = grub_divmod64 (off,
|
||||||
grub_le_to_cpu64 (chunk->stripe_length),
|
chunk_stripe_length,
|
||||||
&low);
|
&low);
|
||||||
|
|
||||||
high = grub_divmod64 (middle,
|
high = grub_divmod64 (middle,
|
||||||
grub_le_to_cpu16 (chunk->nstripes)
|
nstripes / nsubstripes ? : 1,
|
||||||
/ grub_le_to_cpu16 (chunk->nsubstripes),
|
|
||||||
&stripen);
|
&stripen);
|
||||||
stripen *= grub_le_to_cpu16 (chunk->nsubstripes);
|
stripen *= nsubstripes;
|
||||||
redundancy = grub_le_to_cpu16 (chunk->nsubstripes);
|
redundancy = nsubstripes;
|
||||||
stripe_offset = low + grub_le_to_cpu64 (chunk->stripe_length)
|
stripe_offset = low + chunk_stripe_length
|
||||||
* high;
|
* high;
|
||||||
csize = grub_le_to_cpu64 (chunk->stripe_length) - low;
|
csize = chunk_stripe_length - low;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -1051,7 +1058,7 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data,
|
|||||||
|
|
||||||
data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size);
|
data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size);
|
||||||
if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR
|
if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR
|
||||||
&& (char *) &data->extent + elemsize
|
&& (char *) data->extent + elemsize
|
||||||
>= (char *) &data->extent->filled + sizeof (data->extent->filled))
|
>= (char *) &data->extent->filled + sizeof (data->extent->filled))
|
||||||
data->extend =
|
data->extend =
|
||||||
data->extstart + grub_le_to_cpu64 (data->extent->filled);
|
data->extstart + grub_le_to_cpu64 (data->extent->filled);
|
||||||
@@ -1201,7 +1208,7 @@ get_root (struct grub_btrfs_data *data, struct grub_btrfs_key *key,
|
|||||||
struct grub_btrfs_key key_out, key_in;
|
struct grub_btrfs_key key_out, key_in;
|
||||||
struct grub_btrfs_root_item ri;
|
struct grub_btrfs_root_item ri;
|
||||||
|
|
||||||
key_in.object_id = GRUB_BTRFS_ROOT_VOL_OBJECTID;
|
key_in.object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_ROOT_VOL_OBJECTID);
|
||||||
key_in.offset = 0;
|
key_in.offset = 0;
|
||||||
key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM;
|
key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM;
|
||||||
err = lower_bound (data, &key_in, &key_out,
|
err = lower_bound (data, &key_in, &key_out,
|
||||||
|
|||||||
Loaded 100 of 506 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user