Compare commits
880 Commits
sdmmc
...
kern_rela_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc52da2819 | ||
|
|
cfc54dbc88 | ||
|
|
fba962ef11 | ||
|
|
9def4b5925 | ||
|
|
578843f92c | ||
|
|
e5cce0f61c | ||
|
|
d14290e357 | ||
|
|
812acb8b68 | ||
|
|
229651fe72 | ||
|
|
41a4bf53f6 | ||
|
|
888b35833e | ||
|
|
afccc35e79 | ||
|
|
e7ca22abd7 | ||
|
|
ffc143860b | ||
|
|
6a53726833 | ||
|
|
e8f1efd01b | ||
|
|
7ca83c9d3b | ||
|
|
e1fbf27398 | ||
|
|
4866e80769 | ||
|
|
d9159f81d2 | ||
|
|
306f413874 | ||
|
|
719ead824e | ||
|
|
69777cf792 | ||
|
|
d97e97258e | ||
|
|
d0041a33ac | ||
|
|
597d521f52 | ||
|
|
6f680fe63b | ||
|
|
77fe5cf6f5 | ||
|
|
6f76066d24 | ||
|
|
a774833790 | ||
|
|
65fd967550 | ||
|
|
18825866ac | ||
|
|
9ecec1b935 | ||
|
|
2b37e5d486 | ||
|
|
00d0c94f2d | ||
|
|
3eac814268 | ||
|
|
82f3416799 | ||
|
|
101e3087fe | ||
|
|
24d6933145 | ||
|
|
7444a68cd1 | ||
|
|
d9b4009f82 | ||
|
|
2d214f5e1e | ||
|
|
c31060f0b8 | ||
|
|
427ab78bc6 | ||
|
|
41ab4c2c68 | ||
|
|
a4fe1bb5d8 | ||
|
|
9b04ff0f54 | ||
|
|
5dc64bc1f7 | ||
|
|
b25218c918 | ||
|
|
c949779b3d | ||
|
|
6b438c7adf | ||
|
|
8fc7d715a5 | ||
|
|
15ff64e03a | ||
|
|
1e7a327a25 | ||
|
|
b8a1ebd11a | ||
|
|
cf5f431058 | ||
|
|
c7634c66c4 | ||
|
|
632b6b3330 | ||
|
|
5e0bbb61b1 | ||
|
|
09570c470c | ||
|
|
d00cec38b0 | ||
|
|
273206f314 | ||
|
|
98f438e742 | ||
|
|
99c74469e6 | ||
|
|
a3d9efb18c | ||
|
|
3fe072a1d0 | ||
|
|
ab81ed2795 | ||
|
|
56bfbb02ec | ||
|
|
006f8022c0 | ||
|
|
296d049257 | ||
|
|
155f158197 | ||
|
|
3dc51e164f | ||
|
|
801f784fae | ||
|
|
ed295c4cb5 | ||
|
|
790f7498c1 | ||
|
|
7cdfa68dd5 | ||
|
|
90732ff311 | ||
|
|
f6fb5f2c8d | ||
|
|
ce7dd55257 | ||
|
|
481ce12b7b | ||
|
|
2f2c36b22b | ||
|
|
2c4bd44d7e | ||
|
|
2b91956051 | ||
|
|
4c73c461f1 | ||
|
|
8b49cea4a9 | ||
|
|
fdf008108c | ||
|
|
252486913b | ||
|
|
44d10da7b8 | ||
|
|
cb28150912 | ||
|
|
29cc3d1c09 | ||
|
|
e6a6fe6f38 | ||
|
|
d80ad222cc | ||
|
|
572cbd8619 | ||
|
|
183243bf16 | ||
|
|
6407786059 | ||
|
|
6cbfaaf835 | ||
|
|
b6b09d6944 | ||
|
|
c1c07af99a | ||
|
|
05b54c4c2a | ||
|
|
619a7b2074 | ||
|
|
a941e4be03 | ||
|
|
e2a74a9e38 | ||
|
|
89541c8042 | ||
|
|
ae54ec5981 | ||
|
|
75d5e2aef0 | ||
|
|
bd240b23d8 | ||
|
|
568a3b62eb | ||
|
|
04cbc06bc1 | ||
|
|
385f00c375 | ||
|
|
23a1cee2e3 | ||
|
|
fedd684a1c | ||
|
|
cb299d9260 | ||
|
|
724bd2b4d2 | ||
|
|
50c1b628a8 | ||
|
|
f2da92184b | ||
|
|
a595091be0 | ||
|
|
0ec23e74b5 | ||
|
|
8acf0a4fa9 | ||
|
|
ebb0bd2b41 | ||
|
|
c10265676f | ||
|
|
9e7b56b33c | ||
|
|
05ea0c53d7 | ||
|
|
4075d24e0c | ||
|
|
904ab19823 | ||
|
|
534c2c76f5 | ||
|
|
d216a77187 | ||
|
|
1401f3520e | ||
|
|
c6fad1b0ee | ||
|
|
9f1f0c7cbd | ||
|
|
649a0052d0 | ||
|
|
a7f9729f63 | ||
|
|
f85df27875 | ||
|
|
db7268de2e | ||
|
|
a2c0cc924b | ||
|
|
206516411f | ||
|
|
b61797224d | ||
|
|
899efec302 | ||
|
|
1a1b1355ba | ||
|
|
aa2dce7316 | ||
|
|
e9849c74cf | ||
|
|
a1fb8a91c8 | ||
|
|
bfeba7c1e8 | ||
|
|
31d44d821f | ||
|
|
44beeecc9e | ||
|
|
844e88bdfe | ||
|
|
a1af1af74d | ||
|
|
5e64460bb9 | ||
|
|
960161741d | ||
|
|
443271de35 | ||
|
|
4ad300c33c | ||
|
|
715eacbf8e | ||
|
|
dda7ea6ac2 | ||
|
|
005aac5a2b | ||
|
|
1e4356cdb9 | ||
|
|
e0f45d54f1 | ||
|
|
8da223468f | ||
|
|
045f9b2f15 | ||
|
|
b7521465ee | ||
|
|
a8f898b591 | ||
|
|
158da95b9f | ||
|
|
36c470ad11 | ||
|
|
62f8408a2e | ||
|
|
a6ea490615 | ||
|
|
da208f8001 | ||
|
|
320f0bbcfd | ||
|
|
2247f97cdc | ||
|
|
0ef9f7ccc8 | ||
|
|
596f5c3f52 | ||
|
|
e5106ffa2c | ||
|
|
968ced677e | ||
|
|
5950ff5b5e | ||
|
|
b520f5c53b | ||
|
|
c5d021c172 | ||
|
|
07779b787a | ||
|
|
cefdda77e5 | ||
|
|
622650623c | ||
|
|
7ea9b533d9 | ||
|
|
c2a930965a | ||
|
|
c4fee796ea | ||
|
|
598edc0a46 | ||
|
|
40e2d4bbe6 | ||
|
|
648ad51056 | ||
|
|
e0a41e9d33 | ||
|
|
1dd0297db3 | ||
|
|
4355a2b036 | ||
|
|
dbad464323 | ||
|
|
565282d06e | ||
|
|
2f7012cbc6 | ||
|
|
8560713a60 | ||
|
|
6c5f2804ab | ||
|
|
51cf28339b | ||
|
|
80999988d4 | ||
|
|
ecbf13e45d | ||
|
|
237b11892e | ||
|
|
d7192343d8 | ||
|
|
d2f3b806d6 | ||
|
|
3bcdd0c3c8 | ||
|
|
4480e7a8a5 | ||
|
|
1a8f886a6e | ||
|
|
ee1d1ea527 | ||
|
|
e7d7d8adfb | ||
|
|
5cff5e629b | ||
|
|
49d0a51d6b | ||
|
|
25cd3d17de | ||
|
|
3b460e94d4 | ||
|
|
349a16ce39 | ||
|
|
f2a1c60218 | ||
|
|
c91f95e8f6 | ||
|
|
53ede217a5 | ||
|
|
669564b022 | ||
|
|
c9bd97192f | ||
|
|
c333a84b6b | ||
|
|
3e81796db7 | ||
|
|
5f60bc7186 | ||
|
|
165c926135 | ||
|
|
d43bc68d0b | ||
|
|
c5edb031fa | ||
|
|
1f065e3bac | ||
|
|
9296a56303 | ||
|
|
481b209ae8 | ||
|
|
17ca463c3f | ||
|
|
f175802136 | ||
|
|
fe79bc253a | ||
|
|
81bf8c577a | ||
|
|
aee89db748 | ||
|
|
f5704d25f8 | ||
|
|
73afa042f1 | ||
|
|
2da31b122f | ||
|
|
43bbfd29bb | ||
|
|
4cb4707f34 | ||
|
|
389c3b6baa | ||
|
|
0c596e682f | ||
|
|
4d430a4c61 | ||
|
|
0c41489f01 | ||
|
|
bd6155bcb4 | ||
|
|
3bedf56512 | ||
|
|
1be74ea6e2 | ||
|
|
14d458522d | ||
|
|
12bf9612cb | ||
|
|
ea7b6e14f9 | ||
|
|
5e3339e866 | ||
|
|
a7c14e03b9 | ||
|
|
9df13781c2 | ||
|
|
283736878d | ||
|
|
f863164648 | ||
|
|
3eb76fcd16 | ||
|
|
2088c5a34a | ||
|
|
846cde52e0 | ||
|
|
a3dd445b32 | ||
|
|
c362838e11 | ||
|
|
e086022b77 | ||
|
|
70c1bad08b | ||
|
|
38f9a76ba0 | ||
|
|
4892ffae15 | ||
|
|
25305257d6 | ||
|
|
e423aef033 | ||
|
|
8a6afe7909 | ||
|
|
c02f32f1bf | ||
|
|
2ab01ad33c | ||
|
|
3dbc79dd5c | ||
|
|
90b54c03b3 | ||
|
|
7821241356 | ||
|
|
8fea8d9b2e | ||
|
|
dcdf46f576 | ||
|
|
df5537b748 | ||
|
|
0f2855ada8 | ||
|
|
c790d03693 | ||
|
|
25be7c5b1b | ||
|
|
7e05e12b83 | ||
|
|
99d7f72c51 | ||
|
|
691a453d77 | ||
|
|
88246f475c | ||
|
|
269d4496b2 | ||
|
|
bb4c7a390b | ||
|
|
b846628362 | ||
|
|
26fb201518 | ||
|
|
01ce7cef14 | ||
|
|
3f3aaa01fa | ||
|
|
bf8de39e69 | ||
|
|
6bb4253df5 | ||
|
|
cfd7121574 | ||
|
|
972681c57e | ||
|
|
0a11cbc2d6 | ||
|
|
32f487abfb | ||
|
|
7d61cab01c | ||
|
|
14ed4e4057 | ||
|
|
e8ba632606 | ||
|
|
dbcb1e1564 | ||
|
|
15381409dc | ||
|
|
10ad6934ac | ||
|
|
03e66efd85 | ||
|
|
7040e8976d | ||
|
|
296a6af058 | ||
|
|
2c332d1cf8 | ||
|
|
243d7dc777 | ||
|
|
355010ad84 | ||
|
|
ef0c15b764 | ||
|
|
0dc308d92a | ||
|
|
eb5542963f | ||
|
|
18673d96cb | ||
|
|
36f6bdc3a0 | ||
|
|
d6fff49845 | ||
|
|
d05e8fb23a | ||
|
|
0767d9f8da | ||
|
|
21f3d29df7 | ||
|
|
4f16106702 | ||
|
|
19be54ff95 | ||
|
|
ed80d6ec8c | ||
|
|
57b6c71c1c | ||
|
|
0a11d341b7 | ||
|
|
8010290472 | ||
|
|
fbc526d163 | ||
|
|
5bb790e4a7 | ||
|
|
0a6219e6e0 | ||
|
|
037b04ac60 | ||
|
|
9e563d590b | ||
|
|
bdcf02a3ef | ||
|
|
88ac85c423 | ||
|
|
2e1a93f1d1 | ||
|
|
997e4dd665 | ||
|
|
aa2d03d8e1 | ||
|
|
274c1deae4 | ||
|
|
d5bbf32a26 | ||
|
|
97a251b4b2 | ||
|
|
9d30917f4e | ||
|
|
c67c29ebd5 | ||
|
|
88dd414721 | ||
|
|
0f6f13a1ac | ||
|
|
b24784f5c1 | ||
|
|
3b3082cf58 | ||
|
|
38a2fdcd76 | ||
|
|
0ca2f962de | ||
|
|
03a98635d8 | ||
|
|
461e2ced6f | ||
|
|
b2d2f65b87 | ||
|
|
b2b0c50802 | ||
|
|
1118421fa6 | ||
|
|
b1b3914ccf | ||
|
|
9be8b32311 | ||
|
|
57c8bc432d | ||
|
|
58776f5ba8 | ||
|
|
affeeb2724 | ||
|
|
822875ecf5 | ||
|
|
e3a65b1405 | ||
|
|
20a7fa1588 | ||
|
|
315b7bdf22 | ||
|
|
ec988c5a99 | ||
|
|
21b883a75c | ||
|
|
e93d71d932 | ||
|
|
dc6a0d7562 | ||
|
|
1d2be0a2eb | ||
|
|
96937a611d | ||
|
|
dc7862882f | ||
|
|
6faa3534bf | ||
|
|
afb1d68d06 | ||
|
|
911e431d65 | ||
|
|
ee91063bbb | ||
|
|
cbdf33260e | ||
|
|
c62a7381f8 | ||
|
|
b4498734e4 | ||
|
|
4407237f5b | ||
|
|
15956fcf9a | ||
|
|
6a368d3d1a | ||
|
|
8e4be9aef9 | ||
|
|
0f8b7be2d2 | ||
|
|
a1e137cc1c | ||
|
|
504472af4e | ||
|
|
19b253fd17 | ||
|
|
01f5c89902 | ||
|
|
44ccbc2a7b | ||
|
|
6e4664ee05 | ||
|
|
85f9355184 | ||
|
|
60b5bd73b7 | ||
|
|
53e7aa0a20 | ||
|
|
561a16a348 | ||
|
|
1fce7b08b1 | ||
|
|
c216f92a91 | ||
|
|
2f930c2d5f | ||
|
|
256eb92f4c | ||
|
|
ec1d9c4c49 | ||
|
|
3356eddcba | ||
|
|
f67d1b7026 | ||
|
|
e64fef109c | ||
|
|
1b2cf173b3 | ||
|
|
2fb258ca7e | ||
|
|
962cf97150 | ||
|
|
b3bd443636 | ||
|
|
4b9e7c7d27 | ||
|
|
46612156f4 | ||
|
|
279bb863df | ||
|
|
252ea97ca5 | ||
|
|
f89cfe41da | ||
|
|
e3e3679cfe | ||
|
|
75a2052144 | ||
|
|
5666c59657 | ||
|
|
c99ce36d7d | ||
|
|
d84dcb653d | ||
|
|
aff0da9427 | ||
|
|
8d9174b227 | ||
|
|
c8404e8452 | ||
|
|
79e4c82d7e | ||
|
|
3afd9a737c | ||
|
|
a7564cf303 | ||
|
|
5362ee9450 | ||
|
|
021d4c88fa | ||
|
|
deb4aece9a | ||
|
|
a6729171d3 | ||
|
|
c9015581ca | ||
|
|
35c816d62f | ||
|
|
18031ae107 | ||
|
|
c7e4f963e8 | ||
|
|
97875c7d2f | ||
|
|
0da3b2b273 | ||
|
|
3cbd99a709 | ||
|
|
6ce2076d92 | ||
|
|
cee1ecd06f | ||
|
|
a739e3fb20 | ||
|
|
953246a175 | ||
|
|
d8faa37de0 | ||
|
|
64c7c6b2a5 | ||
|
|
1c974a387c | ||
|
|
b5ab491603 | ||
|
|
8b32b9eadf | ||
|
|
ce149f996c | ||
|
|
0ec54ed492 | ||
|
|
72de4d85f3 | ||
|
|
d0673aa2fb | ||
|
|
f7fcb54622 | ||
|
|
ec643789ab | ||
|
|
70caadafd5 | ||
|
|
7667104961 | ||
|
|
0c791f2279 | ||
|
|
f71943c03a | ||
|
|
536e3e99a8 | ||
|
|
abff428212 | ||
|
|
1541985222 | ||
|
|
61929d6e21 | ||
|
|
f0ef9fb918 | ||
|
|
7621bd4e13 | ||
|
|
d20bceff75 | ||
|
|
1961cb1034 | ||
|
|
9daec3a66a | ||
|
|
e79417c37c | ||
|
|
b371487525 | ||
|
|
5c97469348 | ||
|
|
99a38dce32 | ||
|
|
f28a410ba0 | ||
|
|
5fc1981061 | ||
|
|
1bd0094bee | ||
|
|
870b45f208 | ||
|
|
9fbbb9fadb | ||
|
|
dec06ff649 | ||
|
|
b898241112 | ||
|
|
10255f7f51 | ||
|
|
cb5a706659 | ||
|
|
4d86863f2c | ||
|
|
79a3f442d6 | ||
|
|
7485a1968a | ||
|
|
3be005b638 | ||
|
|
d60b1abed0 | ||
|
|
1867c31f63 | ||
|
|
82757cd1b4 | ||
|
|
f5e98de1a3 | ||
|
|
0880cebc4d | ||
|
|
1f03b11dbc | ||
|
|
b925344c3b | ||
|
|
42cf3f50d7 | ||
|
|
70aae4e27a | ||
|
|
87165e0f08 | ||
|
|
e20c2450ce | ||
|
|
968ce12492 | ||
|
|
00ab210e66 | ||
|
|
4cb6c63516 | ||
|
|
1963ae7ec0 | ||
|
|
889f144b27 | ||
|
|
4408ad6a47 | ||
|
|
4ed665bcd3 | ||
|
|
df3d62df84 | ||
|
|
0977ee72ca | ||
|
|
2cdfde6637 | ||
|
|
6fc24d8883 | ||
|
|
4e9bc617bb | ||
|
|
679fec2ddc | ||
|
|
8f85cc17dc | ||
|
|
e40eece74e | ||
|
|
2341f18edd | ||
|
|
c9c41e0e8d | ||
|
|
c59388caf1 | ||
|
|
c878123274 | ||
|
|
1687bf2e07 | ||
|
|
cf99f54a34 | ||
|
|
83c1c175ba | ||
|
|
fc060d3777 | ||
|
|
eb50e99748 | ||
|
|
287f4e6fa1 | ||
|
|
cbf3ba9b75 | ||
|
|
95a6b0828f | ||
|
|
1545fa9d44 | ||
|
|
71add1add8 | ||
|
|
a96786fd2c | ||
|
|
74e4e70053 | ||
|
|
26b6216fa0 | ||
|
|
fe5c850e69 | ||
|
|
2b825d56dc | ||
|
|
13b17a5848 | ||
|
|
621520c30b | ||
|
|
846cc0b47a | ||
|
|
e82ad1cdc5 | ||
|
|
b40da8f445 | ||
|
|
a9c6476416 | ||
|
|
c1d93a9495 | ||
|
|
201b17f100 | ||
|
|
c0e3cee657 | ||
|
|
26d8db74f8 | ||
|
|
ee2e9d50fd | ||
|
|
fd1a39996e | ||
|
|
8eb65ab401 | ||
|
|
bcda834980 | ||
|
|
408b81b881 | ||
|
|
d854b94382 | ||
|
|
63440cab18 | ||
|
|
4fa585a23f | ||
|
|
e521ae805d | ||
|
|
6950989552 | ||
|
|
ffbdf29c10 | ||
|
|
135d42ffee | ||
|
|
1306d03136 | ||
|
|
97aa209c43 | ||
|
|
4ce2a6deb3 | ||
|
|
e45d8cd7d8 | ||
|
|
79211e1159 | ||
|
|
ca8e8ce487 | ||
|
|
b30311be65 | ||
|
|
6694d8c2d9 | ||
|
|
658389fc60 | ||
|
|
d6477cf024 | ||
|
|
400f5142ee | ||
|
|
8bf8df43e2 | ||
|
|
a28c60970f | ||
|
|
b5f72b9f20 | ||
|
|
8d10584a51 | ||
|
|
366c265ab2 | ||
|
|
42964992d1 | ||
|
|
4a82d9bf28 | ||
|
|
4190281b2f | ||
|
|
48830d190f | ||
|
|
3389aaefc3 | ||
|
|
f8f987aa8d | ||
|
|
e87e146112 | ||
|
|
5751bcc117 | ||
|
|
eb1e979257 | ||
|
|
204539664b | ||
|
|
f5c6736431 | ||
|
|
d00ebaa28a | ||
|
|
402e4d1adb | ||
|
|
ed7c0605f9 | ||
|
|
c848a830ee | ||
|
|
dbe8add4f4 | ||
|
|
e4e278bb3d | ||
|
|
3761f80592 | ||
|
|
9878c18e47 | ||
|
|
3bb94aa146 | ||
|
|
83c04fa5d7 | ||
|
|
dc4ee1a5bc | ||
|
|
5191f0e305 | ||
|
|
170034aed3 | ||
|
|
21236020cb | ||
|
|
f06de12bea | ||
|
|
8314d015f3 | ||
|
|
49f07b065a | ||
|
|
9e104bb83f | ||
|
|
33457d61da | ||
|
|
b5816b4a91 | ||
|
|
af7233d84c | ||
|
|
8ac8abf295 | ||
|
|
b26ebc12e1 | ||
|
|
b4122da6ad | ||
|
|
6a2ee02409 | ||
|
|
094cede39e | ||
|
|
9cfd259c5c | ||
|
|
4f7f37fae6 | ||
|
|
d2f81d2ca2 | ||
|
|
b8072b1398 | ||
|
|
a6e3a93c07 | ||
|
|
1e643f7ab0 | ||
|
|
4aa18b06e8 | ||
|
|
f051f707ed | ||
|
|
1c9d6b4d90 | ||
|
|
b21f8a5043 | ||
|
|
e53b9cc518 | ||
|
|
99e4920d9d | ||
|
|
428b5b266c | ||
|
|
2b48743265 | ||
|
|
a0769844f4 | ||
|
|
e0fe29743d | ||
|
|
9ace85a4aa | ||
|
|
e53b171693 | ||
|
|
8b1835368a | ||
|
|
cf7ae775e8 | ||
|
|
07202f7c88 | ||
|
|
97157577ab | ||
|
|
6d65aa7e72 | ||
|
|
601c4516bf | ||
|
|
192ea926f6 | ||
|
|
f1d320b6b6 | ||
|
|
6b3a3ecb44 | ||
|
|
dcfd01cf59 | ||
|
|
4b09b5d5ce | ||
|
|
f6833a794a | ||
|
|
b7895ff2a7 | ||
|
|
f7898f3519 | ||
|
|
96f3c0c387 | ||
|
|
f4e763ce40 | ||
|
|
a05e87f78a | ||
|
|
4809ced64d | ||
|
|
222300d03c | ||
|
|
b918d4b2aa | ||
|
|
53c684a17a | ||
|
|
4ffdf8d525 | ||
|
|
7480b6bb80 | ||
|
|
3e8688e19e | ||
|
|
3b05315616 | ||
|
|
2b81ed7315 | ||
|
|
ff7e52a1c1 | ||
|
|
e391f593de | ||
|
|
f600dff961 | ||
|
|
8104beb2e0 | ||
|
|
4cd56f8423 | ||
|
|
198bdacaf4 | ||
|
|
35ab0939fa | ||
|
|
4958d01153 | ||
|
|
b625fd324e | ||
|
|
5e342d8c52 | ||
|
|
d233b482fb | ||
|
|
3e2f776184 | ||
|
|
7a9018dc7a | ||
|
|
f768e3c8f9 | ||
|
|
d42f2e4d1b | ||
|
|
24111d46a1 | ||
|
|
f2a6a4a6e6 | ||
|
|
6633af769e | ||
|
|
131c8609c8 | ||
|
|
30e70e20d8 | ||
|
|
a26e8ac54f | ||
|
|
8bfda27e0e | ||
|
|
0c9cb830f7 | ||
|
|
ee1b638dde | ||
|
|
9826358533 | ||
|
|
113ab8439d | ||
|
|
60c888126b | ||
|
|
d7b14f48d2 | ||
|
|
1085ccbe60 | ||
|
|
8b61537aa3 | ||
|
|
968f50bc07 | ||
|
|
0bf2ade76f | ||
|
|
35a6705d55 | ||
|
|
b8471bcd4e | ||
|
|
f7e83a72a9 | ||
|
|
f6b847177a | ||
|
|
a6d40e85f1 | ||
|
|
6a81206373 | ||
|
|
4be5733c8e | ||
|
|
8dcb07152e | ||
|
|
3b5dff0f83 | ||
|
|
1ca373cd71 | ||
|
|
4ff026224e | ||
|
|
2c39efea4c | ||
|
|
16cd1141d1 | ||
|
|
4b71e3a87e | ||
|
|
d090a7886d | ||
|
|
9a6cca7499 | ||
|
|
1ec2c0c2cb | ||
|
|
569e1bc650 | ||
|
|
652e9bf9e8 | ||
|
|
ca2cc5e179 | ||
|
|
17c8c390fc | ||
|
|
d8ae1d873c | ||
|
|
63e3c02688 | ||
|
|
14a415c4b2 | ||
|
|
734122f20a | ||
|
|
7fb902d8fb | ||
|
|
be8473cf65 | ||
|
|
6df26d674c | ||
|
|
1a6e003a5d | ||
|
|
0acd79c8c2 | ||
|
|
8a4bf6a0a8 | ||
|
|
af259eabda | ||
|
|
16e2f46aed | ||
|
|
bcc7eed037 | ||
|
|
abd7ad2720 | ||
|
|
58c3c8c19a | ||
|
|
f62330c73b | ||
|
|
2de85c633a | ||
|
|
121c981bb4 | ||
|
|
15396dbbc2 | ||
|
|
9ca1d3a7f7 | ||
|
|
32803d9920 | ||
|
|
5ef93778f6 | ||
|
|
7548940efa | ||
|
|
bf55776241 | ||
|
|
73167448cc | ||
|
|
c45088d1cd | ||
|
|
7336dc2b7a | ||
|
|
d2f48d5e36 | ||
|
|
422e9434d8 | ||
|
|
2b93bbd9ee | ||
|
|
021b29d2db | ||
|
|
6da28f4a27 | ||
|
|
bba99d49da | ||
|
|
e760a9d4b0 | ||
|
|
ee91f3fde0 | ||
|
|
f72475872a | ||
|
|
199a9aec8b | ||
|
|
1b83f5169a | ||
|
|
7bb77f44af | ||
|
|
801ce24622 | ||
|
|
1d778b2dc8 | ||
|
|
7c9608021d | ||
|
|
b8fbd0baff | ||
|
|
525da05629 | ||
|
|
2e9db4d113 | ||
|
|
4f1a4e7499 | ||
|
|
972283032a | ||
|
|
57f935391d | ||
|
|
4804e1e1e0 | ||
|
|
4ae74b9b4e | ||
|
|
726d7b6e4d | ||
|
|
390bdc7b6b | ||
|
|
2d8acf9c64 | ||
|
|
9743f63f0d | ||
|
|
ccd2798ae2 | ||
|
|
f3dbab4876 | ||
|
|
41a53075e5 | ||
|
|
ab8de72db0 | ||
|
|
331fa1d00d | ||
|
|
fd745ab2d3 | ||
|
|
972b396f61 | ||
|
|
3c8e7de915 | ||
|
|
1b164613a6 | ||
|
|
3d4ab95ab2 | ||
|
|
152def19c0 | ||
|
|
63974d9bce | ||
|
|
2b483866c7 | ||
|
|
7e1da15f6e | ||
|
|
0a1465f198 | ||
|
|
748893fe77 | ||
|
|
1ca64cf2a1 | ||
|
|
aac8af8bf5 | ||
|
|
5da6b60008 | ||
|
|
e400e2afc7 | ||
|
|
56c6e4244a | ||
|
|
c8ebd7eea0 | ||
|
|
550f5690bf | ||
|
|
28f9b534b6 | ||
|
|
3fd59b61bc | ||
|
|
f86059de70 | ||
|
|
a03ee7b148 | ||
|
|
8b2ed36698 | ||
|
|
1852fe8612 | ||
|
|
b60054dba1 | ||
|
|
c7f37f81ee | ||
|
|
19a279ce45 | ||
|
|
783f1077be | ||
|
|
b0debd72a7 | ||
|
|
24d545701c | ||
|
|
aae565629e | ||
|
|
bee629b8ad | ||
|
|
5cb237d030 | ||
|
|
a4e09fc6c4 | ||
|
|
73d9d5ff47 | ||
|
|
08cfee54fa | ||
|
|
7b279ab863 | ||
|
|
6a85f7225d | ||
|
|
f469dfbeb3 | ||
|
|
cc11d452e5 | ||
|
|
3bce008170 | ||
|
|
3383509da6 | ||
|
|
281dcf232a | ||
|
|
71a2fe1bb6 | ||
|
|
4a216dc928 | ||
|
|
18099e19b1 | ||
|
|
a0a45853dd | ||
|
|
fe9a4cd2fc | ||
|
|
88a66c89e2 | ||
|
|
93128b6b17 | ||
|
|
db2de8ef31 | ||
|
|
05832cec73 | ||
|
|
632c8984c8 | ||
|
|
694e3b579e | ||
|
|
20eba0dc98 | ||
|
|
730ef6d6db | ||
|
|
7cb24713ab | ||
|
|
a685842804 | ||
|
|
ad6dd60474 | ||
|
|
05af215191 | ||
|
|
e06b73aafa | ||
|
|
fd7e4dfb97 | ||
|
|
77d7e6b121 | ||
|
|
ee9585dd57 | ||
|
|
8ba513fefb | ||
|
|
ef4d7dc024 | ||
|
|
87512439a3 | ||
|
|
51aeb280f1 | ||
|
|
078a42f80c | ||
|
|
06dcc6bc17 | ||
|
|
2bc6dec126 | ||
|
|
5382011b0d | ||
|
|
8ba1cdeef2 | ||
|
|
45830472c1 | ||
|
|
7f1a7cfd2d | ||
|
|
24eef96b15 | ||
|
|
1ea49bdae3 | ||
|
|
c98f4f1ff6 | ||
|
|
dd56f8449f | ||
|
|
835aa6b9db | ||
|
|
69f9fb8713 | ||
|
|
a843cc0ee7 | ||
|
|
b96b162b0b | ||
|
|
512fc8f9b1 | ||
|
|
b32c9bf17c | ||
|
|
5f6942aec8 | ||
|
|
a2c89a8f3f | ||
|
|
898fe61034 | ||
|
|
7bcd5c6e3b | ||
|
|
123ed80dc7 | ||
|
|
5dfe355df1 | ||
|
|
c77b76fbd2 | ||
|
|
1525c66de7 | ||
|
|
f72b21d665 | ||
|
|
74da8a4885 | ||
|
|
cb7c6a5d8a | ||
|
|
fc97237447 | ||
|
|
a203ac3f80 | ||
|
|
2ef41f0027 | ||
|
|
ee3a7e7740 | ||
|
|
3c595994df | ||
|
|
b4c908ba9f | ||
|
|
c572024a5e | ||
|
|
71a38ae74d | ||
|
|
f74527d93c | ||
|
|
72f83ea43e | ||
|
|
43ef260c66 | ||
|
|
f2c553be1a | ||
|
|
304b9bfbd1 | ||
|
|
1d8744164e | ||
|
|
d587054f96 | ||
|
|
29facf6141 | ||
|
|
b8c3128d16 | ||
|
|
b62aa044e4 | ||
|
|
affdea9244 | ||
|
|
fdab964e3d | ||
|
|
15c752f52d | ||
|
|
28862f69f8 | ||
|
|
a20f278ede | ||
|
|
7c58a21c4c | ||
|
|
5bd02f128d | ||
|
|
d9350d24a9 | ||
|
|
68f42a14c8 | ||
|
|
4d1c4f1677 | ||
|
|
708f5bf1fb | ||
|
|
485304bd17 | ||
|
|
3d31837ca1 | ||
|
|
35552bac2c | ||
|
|
323e893433 | ||
|
|
258cfb62a2 | ||
|
|
42caa4ffd1 | ||
|
|
b74b309a77 | ||
|
|
09f3b29a98 | ||
|
|
6c4280d27a | ||
|
|
6ff58fa4b3 | ||
|
|
e5bf06254a | ||
|
|
f4e499fed9 | ||
|
|
4a2daa4810 | ||
|
|
21fac86080 | ||
|
|
bd3ab76fd2 | ||
|
|
e1b5d81d65 | ||
|
|
4b4f05b4a6 | ||
|
|
ddf2f5f3c5 | ||
|
|
d2e530c2aa | ||
|
|
166318ba77 |
13
.gitattributes
vendored
13
.gitattributes
vendored
@@ -1 +1,14 @@
|
|||||||
config_templates/hbl_html/accessible-urls/accessible-urls.txt text eol=lf
|
config_templates/hbl_html/accessible-urls/accessible-urls.txt text eol=lf
|
||||||
|
|
||||||
|
# Mark C++ "include" files as C++
|
||||||
|
*.inc linguist-language=C++
|
||||||
|
|
||||||
|
# Mark RapidJSON include as vendored
|
||||||
|
libraries/include/stratosphere/rapidjson/** linguist-vendored
|
||||||
|
|
||||||
|
# Mark emummc as vendored
|
||||||
|
emummc/** linguist-vendored
|
||||||
|
|
||||||
|
# Mark fatfs as vendored
|
||||||
|
exosphere/mariko_fatal/source/fatfs/** linguist-vendored
|
||||||
|
fusee/program/source/fatfs/** linguist-vendored
|
||||||
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -49,6 +49,8 @@ X.X.X</br>
|
|||||||
- [ Ex: Kosmos' distribution of Atmosphère ]
|
- [ Ex: Kosmos' distribution of Atmosphère ]
|
||||||
- Do you have additional kips or sysmodules you're loading:
|
- Do you have additional kips or sysmodules you're loading:
|
||||||
- Homebrew software installed: [ * ]
|
- Homebrew software installed: [ * ]
|
||||||
|
- EmuMMC or SysNAND:
|
||||||
|
- [ If using an EmuMMC, include whether it's partition-based or file-based. ]
|
||||||
|
|
||||||
### Additional context?
|
### Additional context?
|
||||||
|
|
||||||
|
|||||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -79,9 +79,8 @@ dkms.conf
|
|||||||
*.nam
|
*.nam
|
||||||
*.til
|
*.til
|
||||||
|
|
||||||
# KEYS file for sept-secondary.
|
# Compiled python files.
|
||||||
*.pyc
|
*.pyc
|
||||||
sept/sept-secondary/KEYS.py
|
|
||||||
|
|
||||||
.**/
|
.**/
|
||||||
|
|
||||||
@@ -91,3 +90,11 @@ sept/sept-secondary/KEYS.py
|
|||||||
|
|
||||||
**/out
|
**/out
|
||||||
**/build
|
**/build
|
||||||
|
**/build_nintendo_nx_arm64
|
||||||
|
**/build_nintendo_nx_arm
|
||||||
|
**/build_nintendo_nx_x64
|
||||||
|
**/build_nintendo_nx_x86
|
||||||
|
|
||||||
|
package3
|
||||||
|
|
||||||
|
stratosphere/test/
|
||||||
|
|||||||
132
Makefile
132
Makefile
@@ -1,3 +1,9 @@
|
|||||||
|
ifeq ($(strip $(DEVKITPRO)),)
|
||||||
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
||||||
|
endif
|
||||||
|
|
||||||
|
include $(DEVKITPRO)/devkitA64/base_tools
|
||||||
|
|
||||||
TOPTARGETS := all clean dist-no-debug dist
|
TOPTARGETS := all clean dist-no-debug dist
|
||||||
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
||||||
AMSHASH := $(shell git rev-parse --short HEAD)
|
AMSHASH := $(shell git rev-parse --short HEAD)
|
||||||
@@ -7,9 +13,29 @@ ifneq (, $(strip $(shell git status --porcelain 2>/dev/null)))
|
|||||||
AMSREV := $(AMSREV)-dirty
|
AMSREV := $(AMSREV)-dirty
|
||||||
endif
|
endif
|
||||||
|
|
||||||
COMPONENTS := fusee stratosphere mesosphere exosphere thermosphere troposphere libraries
|
COMPONENTS := fusee stratosphere mesosphere exosphere emummc thermosphere troposphere libraries
|
||||||
|
|
||||||
all: $(COMPONENTS)
|
all: $(COMPONENTS)
|
||||||
|
$(eval MAJORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MAJOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||||
|
| tr -s [:blank:] \
|
||||||
|
| cut -d' ' -f3))
|
||||||
|
$(eval MINORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MINOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||||
|
| tr -s [:blank:] \
|
||||||
|
| cut -d' ' -f3))
|
||||||
|
$(eval MICROVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MICRO\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||||
|
| tr -s [:blank:] \
|
||||||
|
| cut -d' ' -f3))
|
||||||
|
$(eval S_MAJORVER = $(shell grep 'define ATMOSPHERE_SUPPORTED_HOS_VERSION_MAJOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||||
|
| tr -s [:blank:] \
|
||||||
|
| cut -d' ' -f3))
|
||||||
|
$(eval S_MINORVER = $(shell grep 'define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||||
|
| tr -s [:blank:] \
|
||||||
|
| cut -d' ' -f3))
|
||||||
|
$(eval S_MICROVER = $(shell grep 'define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||||
|
| tr -s [:blank:] \
|
||||||
|
| cut -d' ' -f3))
|
||||||
|
@python fusee/build_package3.py $(CURDIR) release $(AMSHASH) $(MAJORVER) $(MINORVER) $(MICROVER) 0 $(S_MAJORVER) $(S_MINORVER) $(S_MICROVER) 0
|
||||||
|
@echo "Built package3!"
|
||||||
|
|
||||||
thermosphere:
|
thermosphere:
|
||||||
$(MAKE) -C thermosphere all
|
$(MAKE) -C thermosphere all
|
||||||
@@ -26,10 +52,10 @@ mesosphere: exosphere libraries
|
|||||||
troposphere: stratosphere
|
troposphere: stratosphere
|
||||||
$(MAKE) -C troposphere all
|
$(MAKE) -C troposphere all
|
||||||
|
|
||||||
sept: exosphere
|
emummc:
|
||||||
$(MAKE) -C sept all
|
$(MAKE) -C emummc all
|
||||||
|
|
||||||
fusee: exosphere mesosphere stratosphere sept
|
fusee: exosphere mesosphere stratosphere
|
||||||
$(MAKE) -C $@ all
|
$(MAKE) -C $@ all
|
||||||
|
|
||||||
libraries:
|
libraries:
|
||||||
@@ -37,6 +63,12 @@ libraries:
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(MAKE) -C fusee clean
|
$(MAKE) -C fusee clean
|
||||||
|
$(MAKE) -C emummc clean
|
||||||
|
$(MAKE) -C libraries clean
|
||||||
|
$(MAKE) -C exosphere clean
|
||||||
|
$(MAKE) -C thermosphere clean
|
||||||
|
$(MAKE) -C mesosphere clean
|
||||||
|
$(MAKE) -C stratosphere clean
|
||||||
rm -rf out
|
rm -rf out
|
||||||
|
|
||||||
dist-no-debug: all
|
dist-no-debug: all
|
||||||
@@ -54,60 +86,55 @@ dist-no-debug: all
|
|||||||
rm -rf out
|
rm -rf out
|
||||||
mkdir atmosphere-$(AMSVER)
|
mkdir atmosphere-$(AMSVER)
|
||||||
mkdir atmosphere-$(AMSVER)/atmosphere
|
mkdir atmosphere-$(AMSVER)/atmosphere
|
||||||
mkdir atmosphere-$(AMSVER)/sept
|
|
||||||
mkdir atmosphere-$(AMSVER)/switch
|
mkdir atmosphere-$(AMSVER)/switch
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000008
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/010000000000000D
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/010000000000002B
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000034
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000036
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/010000000000003C
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000042
|
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/fatal_errors
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/fatal_errors
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/config_templates
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/config_templates
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/config
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/config
|
||||||
cp fusee/fusee-primary/fusee-primary.bin atmosphere-$(AMSVER)/atmosphere/reboot_payload.bin
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/flags
|
||||||
cp fusee/fusee-mtc/fusee-mtc.bin atmosphere-$(AMSVER)/atmosphere/fusee-mtc.bin
|
cp fusee/fusee.bin atmosphere-$(AMSVER)/atmosphere/reboot_payload.bin
|
||||||
cp fusee/fusee-secondary/fusee-secondary-experimental.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
cp fusee/package3 atmosphere-$(AMSVER)/atmosphere/package3
|
||||||
cp fusee/fusee-secondary/fusee-secondary-experimental.bin atmosphere-$(AMSVER)/sept/payload.bin
|
cp config_templates/stratosphere.ini atmosphere-$(AMSVER)/atmosphere/config_templates/stratosphere.ini
|
||||||
cp sept/sept-primary/sept-primary.bin atmosphere-$(AMSVER)/sept/sept-primary.bin
|
|
||||||
cp sept/sept-secondary/sept-secondary.bin atmosphere-$(AMSVER)/sept/sept-secondary.bin
|
|
||||||
cp sept/sept-secondary/sept-secondary_00.enc atmosphere-$(AMSVER)/sept/sept-secondary_00.enc
|
|
||||||
cp sept/sept-secondary/sept-secondary_01.enc atmosphere-$(AMSVER)/sept/sept-secondary_01.enc
|
|
||||||
cp sept/sept-secondary/sept-secondary_dev_00.enc atmosphere-$(AMSVER)/sept/sept-secondary_dev_00.enc
|
|
||||||
cp sept/sept-secondary/sept-secondary_dev_01.enc atmosphere-$(AMSVER)/sept/sept-secondary_dev_01.enc
|
|
||||||
cp config_templates/BCT.ini atmosphere-$(AMSVER)/atmosphere/config/BCT.ini
|
|
||||||
cp config_templates/override_config.ini atmosphere-$(AMSVER)/atmosphere/config_templates/override_config.ini
|
cp config_templates/override_config.ini atmosphere-$(AMSVER)/atmosphere/config_templates/override_config.ini
|
||||||
cp config_templates/system_settings.ini atmosphere-$(AMSVER)/atmosphere/config_templates/system_settings.ini
|
cp config_templates/system_settings.ini atmosphere-$(AMSVER)/atmosphere/config_templates/system_settings.ini
|
||||||
cp config_templates/exosphere.ini atmosphere-$(AMSVER)/atmosphere/config_templates/exosphere.ini
|
cp config_templates/exosphere.ini atmosphere-$(AMSVER)/atmosphere/config_templates/exosphere.ini
|
||||||
|
mkdir -p config_templates/kip_patches
|
||||||
cp -r config_templates/kip_patches atmosphere-$(AMSVER)/atmosphere/kip_patches
|
cp -r config_templates/kip_patches atmosphere-$(AMSVER)/atmosphere/kip_patches
|
||||||
cp -r config_templates/hbl_html atmosphere-$(AMSVER)/atmosphere/hbl_html
|
cp -r config_templates/hbl_html atmosphere-$(AMSVER)/atmosphere/hbl_html
|
||||||
cp stratosphere/boot2/boot2.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000008/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008
|
||||||
cp stratosphere/dmnt/dmnt.nsp atmosphere-$(AMSVER)/atmosphere/contents/010000000000000D/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000000D
|
||||||
cp stratosphere/erpt/erpt.nsp atmosphere-$(AMSVER)/atmosphere/contents/010000000000002B/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000017
|
||||||
cp stratosphere/eclct.stub/eclct.stub.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000002B
|
||||||
cp stratosphere/fatal/fatal.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000034/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000032
|
||||||
cp stratosphere/creport/creport.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000036/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000034
|
||||||
cp stratosphere/ro/ro.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000036
|
||||||
cp stratosphere/jpegdec/jpegdec.nsp atmosphere-$(AMSVER)/atmosphere/contents/010000000000003C/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000037
|
||||||
cp stratosphere/pgl/pgl.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000042/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000003C
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032/flags
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000042
|
||||||
touch atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032/flags/boot2.flag
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000420
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037/flags
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000B240
|
||||||
touch atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037/flags/boot2.flag
|
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000D623
|
||||||
|
cp stratosphere/boot2/boot2.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008/exefs.nsp
|
||||||
|
cp stratosphere/dmnt/dmnt.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000000D/exefs.nsp
|
||||||
|
cp stratosphere/cs/cs.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000017/exefs.nsp
|
||||||
|
cp stratosphere/erpt/erpt.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000002B/exefs.nsp
|
||||||
|
cp stratosphere/eclct.stub/eclct.stub.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000032/exefs.nsp
|
||||||
|
cp stratosphere/fatal/fatal.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000034/exefs.nsp
|
||||||
|
cp stratosphere/creport/creport.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000036/exefs.nsp
|
||||||
|
cp stratosphere/ro/ro.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000037/exefs.nsp
|
||||||
|
cp stratosphere/jpegdec/jpegdec.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000003C/exefs.nsp
|
||||||
|
cp stratosphere/pgl/pgl.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000042/exefs.nsp
|
||||||
|
cp stratosphere/LogManager/LogManager.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000420/exefs.nsp
|
||||||
|
cp stratosphere/htc/htc.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000B240/exefs.nsp
|
||||||
|
cp stratosphere/TioServer/TioServer.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000D623/exefs.nsp
|
||||||
|
@build_romfs atmosphere-$(AMSVER)/stratosphere_romfs atmosphere-$(AMSVER)/atmosphere/stratosphere.romfs
|
||||||
|
rm -r atmosphere-$(AMSVER)/stratosphere_romfs
|
||||||
cp troposphere/reboot_to_payload/reboot_to_payload.nro atmosphere-$(AMSVER)/switch/reboot_to_payload.nro
|
cp troposphere/reboot_to_payload/reboot_to_payload.nro atmosphere-$(AMSVER)/switch/reboot_to_payload.nro
|
||||||
cp troposphere/daybreak/daybreak.nro atmosphere-$(AMSVER)/switch/daybreak.nro
|
cp troposphere/daybreak/daybreak.nro atmosphere-$(AMSVER)/switch/daybreak.nro
|
||||||
cd atmosphere-$(AMSVER); zip -r ../atmosphere-EXPERIMENTAL-$(AMSVER).zip ./*; cd ../;
|
|
||||||
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
|
||||||
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/sept/payload.bin
|
|
||||||
cd atmosphere-$(AMSVER); zip -r ../atmosphere-$(AMSVER).zip ./*; cd ../;
|
cd atmosphere-$(AMSVER); zip -r ../atmosphere-$(AMSVER).zip ./*; cd ../;
|
||||||
rm -r atmosphere-$(AMSVER)
|
rm -rf atmosphere-$(AMSVER)
|
||||||
mkdir out
|
mkdir out
|
||||||
mv atmosphere-EXPERIMENTAL-$(AMSVER).zip out/atmosphere-EXPERIMENTAL-$(AMSVER).zip
|
|
||||||
mv atmosphere-$(AMSVER).zip out/atmosphere-$(AMSVER).zip
|
mv atmosphere-$(AMSVER).zip out/atmosphere-$(AMSVER).zip
|
||||||
cp fusee/fusee-primary/fusee-primary.bin out/fusee-primary.bin
|
cp fusee/fusee.bin out/fusee.bin
|
||||||
|
|
||||||
dist: dist-no-debug
|
dist: dist-no-debug
|
||||||
$(eval MAJORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MAJOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
$(eval MAJORVER = $(shell grep 'define ATMOSPHERE_RELEASE_VERSION_MAJOR\b' libraries/libvapours/include/vapours/ams/ams_api_version.h \
|
||||||
@@ -122,33 +149,32 @@ dist: dist-no-debug
|
|||||||
$(eval AMSVER = $(MAJORVER).$(MINORVER).$(MICROVER)-$(AMSREV))
|
$(eval AMSVER = $(MAJORVER).$(MINORVER).$(MICROVER)-$(AMSREV))
|
||||||
rm -rf atmosphere-$(AMSVER)-debug
|
rm -rf atmosphere-$(AMSVER)-debug
|
||||||
mkdir atmosphere-$(AMSVER)-debug
|
mkdir atmosphere-$(AMSVER)-debug
|
||||||
cp fusee/fusee-primary/fusee-primary.elf atmosphere-$(AMSVER)-debug/fusee-primary.elf
|
cp fusee/loader_stub/loader_stub.elf atmosphere-$(AMSVER)-debug/fusee-loader-stub.elf
|
||||||
cp fusee/fusee-mtc/fusee-mtc.elf atmosphere-$(AMSVER)-debug/fusee-mtc.elf
|
cp fusee/program/program.elf atmosphere-$(AMSVER)-debug/fusee-program.elf
|
||||||
cp fusee/fusee-secondary/fusee-secondary-experimental.elf atmosphere-$(AMSVER)-debug/fusee-secondary.elf
|
|
||||||
cp sept/sept-primary/sept-primary.elf atmosphere-$(AMSVER)-debug/sept-primary.elf
|
|
||||||
cp sept/sept-secondary/sept-secondary.elf atmosphere-$(AMSVER)-debug/sept-secondary.elf
|
|
||||||
cp sept/sept-secondary/key_derivation/key_derivation.elf atmosphere-$(AMSVER)-debug/sept-secondary-key-derivation.elf
|
|
||||||
cp exosphere/loader_stub/loader_stub.elf atmosphere-$(AMSVER)-debug/exosphere-loader-stub.elf
|
cp exosphere/loader_stub/loader_stub.elf atmosphere-$(AMSVER)-debug/exosphere-loader-stub.elf
|
||||||
cp exosphere/program/program.elf atmosphere-$(AMSVER)-debug/exosphere-program.elf
|
cp exosphere/program/program.elf atmosphere-$(AMSVER)-debug/exosphere-program.elf
|
||||||
cp exosphere/warmboot/warmboot.elf atmosphere-$(AMSVER)-debug/exosphere-warmboot.elf
|
cp exosphere/warmboot/warmboot.elf atmosphere-$(AMSVER)-debug/exosphere-warmboot.elf
|
||||||
|
cp exosphere/mariko_fatal/mariko_fatal.elf atmosphere-$(AMSVER)-debug/exosphere-mariko-fatal.elf
|
||||||
cp exosphere/program/sc7fw/sc7fw.elf atmosphere-$(AMSVER)-debug/exosphere-sc7fw.elf
|
cp exosphere/program/sc7fw/sc7fw.elf atmosphere-$(AMSVER)-debug/exosphere-sc7fw.elf
|
||||||
cp exosphere/program/rebootstub/rebootstub.elf atmosphere-$(AMSVER)-debug/exosphere-rebootstub.elf
|
cp exosphere/program/rebootstub/rebootstub.elf atmosphere-$(AMSVER)-debug/exosphere-rebootstub.elf
|
||||||
cp mesosphere/kernel_ldr/kernel_ldr.elf atmosphere-$(AMSVER)-debug/kernel_ldr.elf
|
cp mesosphere/kernel_ldr/kernel_ldr.elf atmosphere-$(AMSVER)-debug/kernel_ldr.elf
|
||||||
|
cp mesosphere/kernel/kernel.elf atmosphere-$(AMSVER)-debug/kernel.elf
|
||||||
cp stratosphere/ams_mitm/ams_mitm.elf atmosphere-$(AMSVER)-debug/ams_mitm.elf
|
cp stratosphere/ams_mitm/ams_mitm.elf atmosphere-$(AMSVER)-debug/ams_mitm.elf
|
||||||
cp stratosphere/boot/boot.elf atmosphere-$(AMSVER)-debug/boot.elf
|
cp stratosphere/boot/boot.elf atmosphere-$(AMSVER)-debug/boot.elf
|
||||||
cp stratosphere/boot2/boot2.elf atmosphere-$(AMSVER)-debug/boot2.elf
|
cp stratosphere/boot2/boot2.elf atmosphere-$(AMSVER)-debug/boot2.elf
|
||||||
cp stratosphere/creport/creport.elf atmosphere-$(AMSVER)-debug/creport.elf
|
cp stratosphere/creport/creport.elf atmosphere-$(AMSVER)-debug/creport.elf
|
||||||
cp stratosphere/dmnt/dmnt.elf atmosphere-$(AMSVER)-debug/dmnt.elf
|
cp stratosphere/dmnt/dmnt.elf atmosphere-$(AMSVER)-debug/dmnt.elf
|
||||||
cp stratosphere/eclct.stub/eclct.stub.elf atmosphere-$(AMSVER)-debug/eclct.stub.elf
|
cp stratosphere/eclct.stub/eclct.stub.elf atmosphere-$(AMSVER)-debug/eclct.stub.elf
|
||||||
|
cp stratosphere/erpt/erpt.elf atmosphere-$(AMSVER)-debug/erpt.elf
|
||||||
cp stratosphere/fatal/fatal.elf atmosphere-$(AMSVER)-debug/fatal.elf
|
cp stratosphere/fatal/fatal.elf atmosphere-$(AMSVER)-debug/fatal.elf
|
||||||
|
cp stratosphere/jpegdec/jpegdec.elf atmosphere-$(AMSVER)-debug/jpegdec.elf
|
||||||
cp stratosphere/loader/loader.elf atmosphere-$(AMSVER)-debug/loader.elf
|
cp stratosphere/loader/loader.elf atmosphere-$(AMSVER)-debug/loader.elf
|
||||||
|
cp stratosphere/ncm/ncm.elf atmosphere-$(AMSVER)-debug/ncm.elf
|
||||||
|
cp stratosphere/pgl/pgl.elf atmosphere-$(AMSVER)-debug/pgl.elf
|
||||||
cp stratosphere/pm/pm.elf atmosphere-$(AMSVER)-debug/pm.elf
|
cp stratosphere/pm/pm.elf atmosphere-$(AMSVER)-debug/pm.elf
|
||||||
cp stratosphere/ro/ro.elf atmosphere-$(AMSVER)-debug/ro.elf
|
cp stratosphere/ro/ro.elf atmosphere-$(AMSVER)-debug/ro.elf
|
||||||
cp stratosphere/sm/sm.elf atmosphere-$(AMSVER)-debug/sm.elf
|
cp stratosphere/sm/sm.elf atmosphere-$(AMSVER)-debug/sm.elf
|
||||||
cp stratosphere/spl/spl.elf atmosphere-$(AMSVER)-debug/spl.elf
|
cp stratosphere/spl/spl.elf atmosphere-$(AMSVER)-debug/spl.elf
|
||||||
cp stratosphere/erpt/erpt.elf atmosphere-$(AMSVER)-debug/erpt.elf
|
|
||||||
cp stratosphere/jpegdec/jpegdec.elf atmosphere-$(AMSVER)-debug/jpegdec.elf
|
|
||||||
cp stratosphere/pgl/pgl.elf atmosphere-$(AMSVER)-debug/pgl.elf
|
|
||||||
cp troposphere/daybreak/daybreak.elf atmosphere-$(AMSVER)-debug/daybreak.elf
|
cp troposphere/daybreak/daybreak.elf atmosphere-$(AMSVER)-debug/daybreak.elf
|
||||||
cd atmosphere-$(AMSVER)-debug; zip -r ../atmosphere-$(AMSVER)-debug.zip ./*; cd ../;
|
cd atmosphere-$(AMSVER)-debug; zip -r ../atmosphere-$(AMSVER)-debug.zip ./*; cd ../;
|
||||||
rm -r atmosphere-$(AMSVER)-debug
|
rm -r atmosphere-$(AMSVER)-debug
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
BCT0
|
|
||||||
[stage1]
|
|
||||||
stage2_path = atmosphere/fusee-secondary.bin
|
|
||||||
stage2_mtc_path = atmosphere/fusee-mtc.bin
|
|
||||||
stage2_addr = 0xF0000000
|
|
||||||
stage2_entrypoint = 0xF0000000
|
|
||||||
|
|
||||||
[stratosphere]
|
|
||||||
; To force-enable nogc, add nogc = 1
|
|
||||||
; To force-disable nogc, add nogc = 0
|
|
||||||
|
|
||||||
; To opt out of using Atmosphere's NCM reimplementation, add disable_ncm = 1
|
|
||||||
@@ -35,6 +35,17 @@
|
|||||||
# mmc space, encrypted to prevent detection. This backup can be used
|
# mmc space, encrypted to prevent detection. This backup can be used
|
||||||
# to prevent unrecoverable edits in emergencies.
|
# to prevent unrecoverable edits in emergencies.
|
||||||
|
|
||||||
|
# Key: log_port, default: 0.
|
||||||
|
# Desc: Controls what uart port exosphere will set up for logging.
|
||||||
|
# NOTE: 0 = UART-A, 1 = UART-B, 2 = UART-C, 3 = UART-D
|
||||||
|
|
||||||
|
# Key: log_baud_rate, default: 115200
|
||||||
|
# Desc: Controls the baud rate exosphere will set up for logging.
|
||||||
|
# NOTE: 0 is treated as equivalent to 115200.
|
||||||
|
|
||||||
|
# Key: log_inverted, default: 0.
|
||||||
|
# Desc: Controls whether the logging uart port is inverted.
|
||||||
|
|
||||||
[exosphere]
|
[exosphere]
|
||||||
debugmode=1
|
debugmode=1
|
||||||
debugmode_user=0
|
debugmode_user=0
|
||||||
@@ -43,3 +54,6 @@ enable_user_pmu_access=0
|
|||||||
blank_prodinfo_sysmmc=0
|
blank_prodinfo_sysmmc=0
|
||||||
blank_prodinfo_emummc=0
|
blank_prodinfo_emummc=0
|
||||||
allow_writing_to_cal_sysmmc=0
|
allow_writing_to_cal_sysmmc=0
|
||||||
|
log_port=0
|
||||||
|
log_baud_rate=115200
|
||||||
|
log_inverted=0
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,9 +1,10 @@
|
|||||||
[hbl_config]
|
[hbl_config]
|
||||||
; Program Specific Config
|
; Program Specific Config
|
||||||
; Up to 8 program-specific configurations can be set.
|
; Up to 8 program-specific configurations can be set.
|
||||||
; These use `program_id_#` and `override_key_#`
|
; These use `program_id_#`, `override_address_space_#`, and `override_key_#`
|
||||||
; where # is in range [0,7].
|
; where # is in range [0,7].
|
||||||
; program_id_0=010000000000100D
|
; program_id_0=010000000000100D
|
||||||
|
; override_address_space=39_bit
|
||||||
; override_key_0=!R
|
; override_key_0=!R
|
||||||
|
|
||||||
; Any Application Config
|
; Any Application Config
|
||||||
@@ -12,6 +13,7 @@
|
|||||||
; by a program specific config.
|
; by a program specific config.
|
||||||
; override_any_app=true
|
; override_any_app=true
|
||||||
; override_any_app_key=R
|
; override_any_app_key=R
|
||||||
|
; override_any_app_address_space=39_bit
|
||||||
; path=atmosphere/hbl.nsp
|
; path=atmosphere/hbl.nsp
|
||||||
|
|
||||||
[default_config]
|
[default_config]
|
||||||
|
|||||||
4
config_templates/stratosphere.ini
Normal file
4
config_templates/stratosphere.ini
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
[stratosphere]
|
||||||
|
; To force-enable nogc, add nogc = 1
|
||||||
|
; To force-disable nogc, add nogc = 0
|
||||||
|
|
||||||
@@ -1,10 +1,21 @@
|
|||||||
; Disable uploading error reports to Nintendo
|
|
||||||
[eupld]
|
[eupld]
|
||||||
|
; Disable uploading error reports to Nintendo
|
||||||
; upload_enabled = u8!0x0
|
; upload_enabled = u8!0x0
|
||||||
|
[usb]
|
||||||
|
; Enable USB 3.0 superspeed for homebrew
|
||||||
|
; 0 = USB 3.0 support is system default (usually disabled), 1 = USB 3.0 support is enabled.
|
||||||
|
; usb30_force_enabled = u8!0x0
|
||||||
|
[ro]
|
||||||
; Control whether RO should ease its validation of NROs.
|
; Control whether RO should ease its validation of NROs.
|
||||||
; (note: this is normally not necessary, and ips patches can be used.)
|
; (note: this is normally not necessary, and ips patches can be used.)
|
||||||
[ro]
|
|
||||||
; ease_nro_restriction = u8!0x1
|
; ease_nro_restriction = u8!0x1
|
||||||
|
[lm]
|
||||||
|
; Control whether lm should log to the SD card.
|
||||||
|
; Note that this setting does nothing when log manager is not enabled.
|
||||||
|
; enable_sd_card_logging = u8!0x1
|
||||||
|
; Control the output directory for SD card logs.
|
||||||
|
; Note that this setting does nothing when log manager is not enabled/sd card logging is not enabled.
|
||||||
|
; sd_card_log_output_directory = str!atmosphere/binlogs
|
||||||
; Atmosphere custom settings
|
; Atmosphere custom settings
|
||||||
[atmosphere]
|
[atmosphere]
|
||||||
; Reboot from fatal automatically after some number of milliseconds.
|
; Reboot from fatal automatically after some number of milliseconds.
|
||||||
@@ -32,12 +43,27 @@
|
|||||||
; NOTE: EXPERIMENTAL
|
; NOTE: EXPERIMENTAL
|
||||||
; If you do not know what you are doing, do not touch this yet.
|
; If you do not know what you are doing, do not touch this yet.
|
||||||
; fsmitm_redirect_saves_to_sd = u8!0x0
|
; fsmitm_redirect_saves_to_sd = u8!0x0
|
||||||
; Controls whether to enable the deprecated hid mitm
|
; Controls whether am sees system settings "DebugModeFlag" as
|
||||||
; to fix compatibility with old homebrew.
|
; enabled or disabled.
|
||||||
; 0 = Do not enable, 1 = Enable.
|
; 0 = Disabled (not debug mode), 1 = Enabled (debug mode)
|
||||||
; Please note this setting may be removed in a
|
; enable_am_debug_mode = u8!0x0
|
||||||
; future release of Atmosphere.
|
; Controls whether dns.mitm is enabled
|
||||||
; enable_deprecated_hid_mitm = u8!0x0
|
; 0 = Disabled, 1 = Enabled
|
||||||
|
; enable_dns_mitm = u8!0x1
|
||||||
|
; Controls whether dns.mitm uses the default redirections in addition to
|
||||||
|
; whatever is specified in the user's hosts file.
|
||||||
|
; 0 = Disabled (use hosts file contents), 1 = Enabled (use defaults and hosts file contents)
|
||||||
|
; add_defaults_to_dns_hosts = u8!0x1
|
||||||
|
; Controls whether dns.mitm logs to the sd card for debugging
|
||||||
|
; 0 = Disabled, 1 = Enabled
|
||||||
|
; enable_dns_mitm_debug_log = u8!0x0
|
||||||
|
; Controls whether htc is enabled
|
||||||
|
; 0 = Disabled, 1 = Enabled
|
||||||
|
; enable_htc = u8!0x0
|
||||||
|
; Controls whether atmosphere's log manager is enabled
|
||||||
|
; Note that this setting is ignored (and treated as 1) when htc is enabled.
|
||||||
|
; 0 = Disabled, 1 = Enabled
|
||||||
|
; enable_log_manager = u8!0x0
|
||||||
[hbloader]
|
[hbloader]
|
||||||
; Controls the size of the homebrew heap when running as applet.
|
; Controls the size of the homebrew heap when running as applet.
|
||||||
; If set to zero, all available applet memory is used as heap.
|
; If set to zero, all available applet memory is used as heap.
|
||||||
|
|||||||
@@ -5,23 +5,20 @@ Building Atmosphère is a very straightforward process that relies almost exclus
|
|||||||
+ [devkitA64](https://devkitpro.org)
|
+ [devkitA64](https://devkitpro.org)
|
||||||
+ [devkitARM](https://devkitpro.org)
|
+ [devkitARM](https://devkitpro.org)
|
||||||
+ [Python 2](https://www.python.org) (Python 3 may work as well, but this is not guaranteed)
|
+ [Python 2](https://www.python.org) (Python 3 may work as well, but this is not guaranteed)
|
||||||
|
+ [LZ4](https://pypi.org/project/lz4)
|
||||||
+ [PyCryptodome](https://pypi.org/project/pycryptodome) (optional)
|
+ [PyCryptodome](https://pypi.org/project/pycryptodome) (optional)
|
||||||
|
|
||||||
## Instructions
|
## Instructions
|
||||||
1. Follow the guide located [here](https://devkitpro.org/wiki/Getting_Started) to install and configure all the tools necessary for the build process.
|
1. Follow the guide located [here](https://devkitpro.org/wiki/Getting_Started) to install and configure all the tools necessary for the build process.
|
||||||
|
|
||||||
2. Install the following packages via (dkp-)pacman:
|
2. Install the following packages via (dkp-)pacman:
|
||||||
+ `switch-dev`
|
+ `switch-dev`
|
||||||
|
+ `switch-glm`
|
||||||
+ `switch-libjpeg-turbo`
|
+ `switch-libjpeg-turbo`
|
||||||
+ `devkitARM`
|
+ `devkitARM`
|
||||||
+ `devkitarm-rules`
|
+ `devkitarm-rules`
|
||||||
|
|
||||||
3. (Optional) In order to build [sept](components/sept.md) the pycryptodome PyPi package is required, which can be installed by running `pip install pycryptodome` under the installed Python environment of your choice or by installing the complete zip package to support the `make dist` recipe. This is an optional step included for advanced users who have the ability to provide the necessary encryption/signing keys themselves.
|
3. Install the following library via python's package manager `pip`, required by [exosphere](components/exosphere.md):
|
||||||
|
+ `lz4`
|
||||||
|
|
||||||
4. It is, instead, possible to build [sept](components/sept.md) by providing previously encrypted/signed binaries distributed by official Atmosphère release packages. In order to do so, export the following variables in your current environment:
|
4. Finally, clone the Atmosphère repository and run `make` under its root directory.
|
||||||
+ `SEPT_00_ENC_PATH` (must point to the `sept-secondary_00.enc` file)
|
|
||||||
+ `SEPT_01_ENC_PATH` (must point to the `sept-secondary_01.enc` file)
|
|
||||||
+ `SEPT_DEV_00_ENC_PATH` (must point to the `sept-secondary_dev_00.enc` file)
|
|
||||||
+ `SEPT_DEV_01_ENC_PATH` (must point to the `sept-secondary_dev_01.enc` file)
|
|
||||||
|
|
||||||
5. Finally, clone the Atmosphère repository and run `make` under its root directory.
|
|
||||||
|
|||||||
@@ -1,4 +1,267 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
## 1.1.1
|
||||||
|
+ A bug was fixed which caused some memory to leak when launching a game with mods enabled, eventually causing a crash after enough game launches without rebooting.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.1.0
|
||||||
|
+ Support was implemented for 13.0.0.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `ncm` was updated to reflect the latest official behaviors.
|
||||||
|
+ `erpt` was updated to reflect the latest official behaviors.
|
||||||
|
+ Two new services ("sprofile") were added to `erpt`, and have been fully reimplemented.
|
||||||
|
+ **Please Note**: These services provide a way for settings to be pushed to consoles over the internet without system update.
|
||||||
|
+ Because there appear to be no settings pushed out yet, this implementation fundamentally cannot be fully tested right now, but hopefully there are no issues once settings begin being distributed.
|
||||||
|
+ The `LogManager` system module was reimplemented.
|
||||||
|
+ This system module provides services that some games use for logging.
|
||||||
|
+ Atmosphere's reimplementation supports logging to the SD card (if `lm!enable_sd_card_logging` is true) and to ams.TMA.
|
||||||
|
+ To control the directory where logs are saved, modify the `lm!sd_card_log_output_directory` setting.
|
||||||
|
+ Atmosphere's reimplementation is disabled by default (in order to save memory), but can be enabled by setting `lm!enable_log_manager` to true.
|
||||||
|
+ This will allow reading over logs from games which use the services (or potentially logging from homebrew in the future), which can be useful to developers.
|
||||||
|
+ Please note that when TMA is fully implemented in the future, enabling TMA will forcibly enable `LogManager`.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 1.0.0
|
||||||
|
+ `fusee` was completely re-written in C++ to use the same atmosphere-libs APIs as the rest of atmosphere's code.
|
||||||
|
+ The rewrite was performed with a big emphasis on ensuring a good boot speed, and generally boot should be much faster than it was previously.
|
||||||
|
+ Depending on SD card/environment, boot speed may now be slightly faster than, roughly the same as, or slightly slower than when booting with hekate.
|
||||||
|
+ The obvious low-hanging fruit for performance improvements has been picked, so hopefully the improved performance is to everybody's liking.
|
||||||
|
+ SD card compatibility was improved: fusee should now have SD card compatibility identical to the official OS driver.
|
||||||
|
+ **Please Note**: various components were renamed (fusee-primary.bin -> fusee.bin, fusee-secondary.bin -> package3).
|
||||||
|
+ If you use another bootloader (like hekate), you may need to update your configuration to use the new layout.
|
||||||
|
+ **Please Note**: BCT.ini no longer exists, nogc configuration has been moved to `/atmosphere/stratosphere.ini`.
|
||||||
|
+ If you rely on custom nogc configuration, please be sure to update accordingly.
|
||||||
|
+ Custom splash screen BMP parsing is no longer supported (as it slows down boot for 99% of users).
|
||||||
|
+ To compensate for this, a script to insert a custom splash screen into a `package3` binary has been added to the `utilities` folder of the atmosphere repository.
|
||||||
|
+ The release build should be equivalent to running the following command from the root of the atmosphere repository: `python utilities/insert_splash_screen.py img/splash.png fusee/package3`
|
||||||
|
+ A number of pending changes were made, following the end of the relevant testing periods:
|
||||||
|
+ `mesosphere` is no longer opt-out, and stratosphere code will begin depending on its being present/in use.
|
||||||
|
+ `NCM` is no longer opt-out.
|
||||||
|
+ The cleanup to ease the transition from < 0.19.0 to 0.19.0 has been removed.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 0.20.1
|
||||||
|
+ An issue was fixed that caused severely degraded performance after wake-from-sleep on Mariko hardware.
|
||||||
|
+ This was due to Mariko MTC resulting in a frequency of 1599.999MHz instead of 1600MHz.
|
||||||
|
+ Due to this off-by-one, Nintendo's EMC management code failed to initialize/take over, and after wake from sleep RAM would be in a strange state.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 0.20.0
|
||||||
|
+ DRAM training (MTC) was implemented for Mariko hardware, increasing RAM speed from 204MHz to 1600MHz.
|
||||||
|
+ This significantly optimizes Mariko boot speed, cutting boot time roughly in half.
|
||||||
|
+ Typical boot time reductions (measured as "select fusee" to "home menu visible"):
|
||||||
|
+ Normal (Iowa): ~35 seconds -> ~18 seconds.
|
||||||
|
+ Lite (Hoag): ~65 seconds -> ~30 seconds.
|
||||||
|
+ NOTE: Work is being started on a re-written `fusee` component, with an eye specifically towards ensuring a good boot speed.
|
||||||
|
+ With any luck, boot will be much much faster on all units (Mariko and Erista) in an upcoming release.
|
||||||
|
+ Sept was replaced, and deleted from the repository.
|
||||||
|
+ Erista units now use a custom TSEC firmware to manage key derivation.
|
||||||
|
+ For more details, contact SciresM#0524 on discord.
|
||||||
|
+ This has a number of benefits, including:
|
||||||
|
+ This greatly simplifies key derivation logic by making it consistent on all firmwares.
|
||||||
|
+ Fusee no longer accesses/uses keyblobs at all, so units which have accidentally destroyed/lost keyblobs can boot without them.
|
||||||
|
+ This greatly increases stability (sept was the biggest source of boot failures).
|
||||||
|
+ This improves boot speed (sept rebooted multiple times, performed hardware init multiple times, and was generally very slow).
|
||||||
|
+ Atmosphère build process is now much saner.
|
||||||
|
+ A number of improvements were made to the dmnt cheat engine.
|
||||||
|
+ Cheats which take in a memory region operand may now use types "2" or "3" to perform accesses relative to the alias/aslr regions, respectively.
|
||||||
|
+ Support was added for an "else" opcode in the cheat engine, to make writing certain conditional logic more natural.
|
||||||
|
+ Support was added for a cheat orchestrator homebrew (like edizon) to detach from a cheat process/set the master cheat programmatically.
|
||||||
|
+ Daybreak now provides a warning when attempting to install a firmware newer than the highest version atmosphère knows it supports.
|
||||||
|
+ To facilitate this, exosphere now exposes the supported HOS version via an extension ConfigItem.
|
||||||
|
+ A number of minor issues were fixed, including:
|
||||||
|
+ Several mesosphere debug SVC implementations were updated to reflect the semantics of the latest kernel.
|
||||||
|
+ Support was fixed for deriving BIS encryption keys on certain prototype hardware.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 0.19.5
|
||||||
|
+ Support was added for 12.1.0.
|
||||||
|
+ LayeredFS support was added for OpenDataStorageWithProgramIndex commands.
|
||||||
|
+ Certain games using newer (7.0.0+ APIs) which include multiple programs under a single title previously could not be modified.
|
||||||
|
+ These are now supported as normal, and LayeredFS should have 100% compatibility again.
|
||||||
|
+ A number of minor issues were fixed, including:
|
||||||
|
+ The Reboot to Payload NRO was updated to allow the OS to save state prior to rebooting (thanks @AuroraWright)!
|
||||||
|
+ An issue was fixed that could cause dns.mitm to fail when games requested resolution of an empty string.
|
||||||
|
+ An issue was fixed that caused a memory leak in the erpt system module.
|
||||||
|
+ This would eventually cause a system crash after ~540 reports were generated without rebooting.
|
||||||
|
+ A number of minor improvements were made to improve mesosphere's accuracy.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 0.19.4
|
||||||
|
+ Support was added for 12.0.3.
|
||||||
|
+ A number of minor issues were fixed, including:
|
||||||
|
+ An issue was fixed that could cause heap memory corruption when allocation was highly contended.
|
||||||
|
+ An issue was fixed that could cause sleep to fail under certain conditions.
|
||||||
|
+ An issue was fixed that could cause a scheduler slow path to be taken more often than necessary.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 0.19.3
|
||||||
|
+ Support was added for 12.0.2.
|
||||||
|
+ A number of minor issues were fixed, including:
|
||||||
|
+ An issue was fixed in dns.mitm that caused a crash when games attempted to resolve the IP address of nullptr.
|
||||||
|
+ An issue was fixed in erpt that would cause an abort when booting without having ever booted stock previously.
|
||||||
|
+ An issue was fixed in (file-based) emummc that caused an error on system format/downloading certain games.
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
## 0.19.2
|
||||||
|
+ Atmosphère's components were further updated to reflect latest official behaviors as of 12.0.0.
|
||||||
|
+ Notably, `erpt` was updated to implement the new forced shutdown detection feature.
|
||||||
|
+ When a forced-shutdown occurs, an erpt_report will be generated and saved to the SD card on the next boot.
|
||||||
|
+ Atmosphere-libs was updated to use GCC 11 (latest devkitA64/devkitARM releases).
|
||||||
|
+ Initial inspections show mild-to-moderate optimizer improvements in several important places (kernel is 0x3000 smaller).
|
||||||
|
+ General system stability improvements to enhance the user's experience.
|
||||||
|
+ A number of minor issues were fixed, including:
|
||||||
|
+ A bug was fixed that caused a black screen when attempting to boot firmware versions 2.0.0-4.1.0.
|
||||||
|
+ A bug was fixed that caused sm to abort when at the session limit, rather than returning error codes.
|
||||||
|
+ A bug was fixed that allowed for resource exhaustion on 12.0.0, under certain circumstances.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.19.1
|
||||||
|
+ An issue was fixed that caused a fatal error when using official `migration` services to transfer data between consoles.
|
||||||
|
+ An issue was fixed in `ncm` that caused an error when the OS tried to enumerate installed SD card content.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.19.0
|
||||||
|
+ Support was added for 12.0.0.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `sm`, `boot2`, `pgl` were updated to reflect the latest official behaviors.
|
||||||
|
+ **Please Note**: 12.0.0 added a new protocol for IPC ("tipc"), which has been freshly reimplemented in its entirety.
|
||||||
|
+ It is possible there may be as of yet unfound issues; if there are, please send the appropriate crash reports to SciresM (SciresM#0524 on discord).
|
||||||
|
+ Homebrew which uses atmosphere extensions (including the mitm API) will need to be re-compiled in order to function on 0.19.0.
|
||||||
|
+ I apologize for this, but it's unavoidable for technical reasons. If you're affected by this and mad about it, please contact SciresM to complain.
|
||||||
|
+ `erpt` was partially updated to reflect the latest official behaviors.
|
||||||
|
+ New features were added to erpt to track the activity of running applets, and to detect when a forced shutdown occurs.
|
||||||
|
+ These behaviors have been temporarily stubbed, as they are not necessary for 12.0.0 to run (and their outputs won't be saved anywhere).
|
||||||
|
+ A future atmosphère update will implement these behaviors, in the interest of reflecting official logic as faithfully as we can.
|
||||||
|
+ Atmosphère no longer uses the /contents/ folder for its own programs.
|
||||||
|
+ Atmosphère's system modules are now bundled together in the single file "stratosphere.romfs".
|
||||||
|
+ For those working on developing for atmosphère, executables inside the /contents/ directory will be preferred to those in "stratosphere.romfs".
|
||||||
|
+ **Please Note**: In order to facilitate this change (and the desired behavior), the first time you boot after extracting a release zip, atmosphère system modules inside /contents/ will be deleted.
|
||||||
|
+ This will have no impact on user programs (it only removes programs with specific program ids).
|
||||||
|
+ Improvements were made to mesosphere, including:
|
||||||
|
+ An extension InfoType was added for getting the current process handle, without having to spawn a thread and do IPC with oneself.
|
||||||
|
+ An issue was fixed in SvcSetDebugThreadContext.
|
||||||
|
+ An issue was fixed when doing IPC with user buffers.
|
||||||
|
+ Support was fixed for toggling the custom setting `usb!usb30_force_enabled` on 9.0.0+.
|
||||||
|
+ This was broken by Nintendo's introducing a dependency that made USB a requirement to launch before custom settings are parsed.
|
||||||
|
+ Since the fix, you can now toggle the setting (as you could prior to atmosphère 0.9.4), and it will work as expected.
|
||||||
|
+ **Please Note**: Enabling USB 3.0 often severely impacts wireless communications.
|
||||||
|
+ Because of this, the setting will default to off. If you experience issues with it enabled, consider disabling it.
|
||||||
|
+ A warning was added to daybreak when resetting the console to factory settings.
|
||||||
|
+ Substantial work was completed towards atmosphere's upcoming implementation of the host target connection protocol.
|
||||||
|
+ Once completed, users will be able to interact with a Switch running atmosphère via a PC application ("Starlink") currently under development.
|
||||||
|
+ Planned eventual features for connected consoles include a gdbstub, interacting with memory (for cheat development), streaming gameplay audio and video, and accessing the Switch's SD card filesystem.
|
||||||
|
+ Switch homebrew will also have access to a (configurable and sandboxed) filesystem on the host PC, while connected.
|
||||||
|
+ Towards this end, the following was accomplished:
|
||||||
|
+ The "htc" system module was reimplemented completely.
|
||||||
|
+ The system module which provides remote access to the SD card was reimplemented completely.
|
||||||
|
+ This is currently the active focus of atmosphère's development.
|
||||||
|
+ **Please Note**: Support is not yet completed, and users are disadvised from interacting with the related settings for the time being, unless they particularly know what they're doing.
|
||||||
|
+ A number of minor issues were fixed, including:
|
||||||
|
+ A bug was fixed in `dmnt` that could cause a fatal when launching certain games with cheats active.
|
||||||
|
+ An issue was fixed that could cause an abort in `sm` when using a large number of custom system modules.
|
||||||
|
+ An issue was fixed that prevented launching gamecards on 1.0.0.
|
||||||
|
+ Minor issues were fixed in the cheat virtual machine's behavior.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.18.1
|
||||||
|
+ A number of minor issues were fixed, including:
|
||||||
|
+ The new `dns.mitm` module added in 0.18.0 no longer fatal errors when receiving port=nullptr.
|
||||||
|
+ This fixes youtube ad-blocking, and possibly other usecases.
|
||||||
|
+ A bug was fixed that caused ams.mitm to incorrectly cache data storages.
|
||||||
|
+ This potentially broke DLC when using romfs mods, and could have caused other issues (e.g. with custom themes, and maybe other cases).
|
||||||
|
+ A bug was fixed in power state control module registration.
|
||||||
|
+ This might fix a weird edge case with system module dependencies on sleep/wake, but probably nobody should notice any differences.
|
||||||
|
+ A bug was fixed where mesosphere sometimes treated virtual core IDs as though they were physical core IDs.
|
||||||
|
+ This had zero impact, because for Switch virtual core == physical core, but it could have affected future platforms if it had remained unresolved.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.18.0
|
||||||
|
+ A new mitm module was added (`dns.mitm`).
|
||||||
|
+ This provides a highly configurable mechanism for redirecting DNS resolution requests.
|
||||||
|
+ By default atmosphère redirects resolution requests for official telemetry servers to a loopback address.
|
||||||
|
+ Documentation on how to configure `dns.mitm` to meet your more specific needs may be found [here](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/dns_mitm.md).
|
||||||
|
+ The service framework API (`sf`) was refactored to be more accurate to official logic and greatly reduce memory requirements.
|
||||||
|
+ The comparison of atmosphère module memory usage versus Nintendo's found [here](https://github.com/Atmosphere-NX/Atmosphere/wiki/Memory-Comparisons) was updated to reflect this.
|
||||||
|
+ **Please Note**: If you are a developer using the libstratosphere service APIs, some updating may be required. Contact SciresM#0524 on discord for assistance if required.
|
||||||
|
+ A number of deprecations were removed, following a general codebase cleanup:
|
||||||
|
+ The `sm` extension to not unregister services on connection close was superseded by official opt-in logic in 11.0.0, and has been removed in favor of official logic.
|
||||||
|
+ This should have zero impact on users.
|
||||||
|
+ The temporary `hid-mitm` added in 0.9.0 has finally been removed, following over a year of deprecation.
|
||||||
|
+ There shouldn't be any homebrew in use still affected by this, but the situation will be monitored.
|
||||||
|
+ If this is somehow still a real issue, an unaffiliated hid mitm sysmodule providing the same functionality can be created and released, separate from atmosphère itself.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.17.1
|
||||||
|
+ A number of atmosphère's modules were using more memory than their Nintendo equivalent's in 0.17.0; a number of code generatio tweaks have been applied to fix this across the board.
|
||||||
|
+ A detailed comparison of atmosphère module memory usage versus Nintendo's was made and can be found [here](https://github.com/Atmosphere-NX/Atmosphere/wiki/Memory-Comparisons).
|
||||||
|
+ Several minor bugs were fixed, including:
|
||||||
|
+ A bug was fixed in mesosphère that caused games which attempt to map more memory than the Switch has to fail.
|
||||||
|
+ This affected "Piczle Lines DX 500 More Puzzles!", and possibly other games.
|
||||||
|
+ Enabling configuration to "blank" PRODINFO no longer causes a hang on Mariko devices (or any devices with newer format).
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.17.0
|
||||||
|
+ fusee was heavily rewritten in order to add support for Mariko hardware.
|
||||||
|
+ **Please Note**: Mariko hardware currently has no (and may not ever have any) software exploits; fusee works when loaded from bootloader context with the right keys in the security engine. No means of getting the system into this state is provided.
|
||||||
|
+ An issue was fixed in the way shutdown was performed on Erista hardware.
|
||||||
|
+ This fixes an issue that caused OFW to black screen on boot after power off from atmosphere without first doing a reboot.
|
||||||
|
+ This also substantially improves power drain when the system is shut off; consoles powered off from Atmosphere should now drain battery at the same reduced rate as original firmware.
|
||||||
|
+ A number of minor changes were made, including:
|
||||||
|
+ A number of inconsistencies in the build system were fixed.
|
||||||
|
+ For those building atmosphère at home, the `boot` sysmodule will no longer rebuild every time make is invoked.
|
||||||
|
+ This substantially improves build times during development iteration.
|
||||||
|
+ `sm` was updated to more accurately reflect how official code manages request deferral.
|
||||||
|
+ `mesosphère` was updated to more accurately reflect official kernel management of the trace buffer.
|
||||||
|
+ `mesosphère` was updated to improve kernel loader's logic by taking advantage of the assumption that we only boot our kernel, not Nintendo's.
|
||||||
|
+ As it has been a few months with zero reported issues, `mesosphère` is now opt-out.
|
||||||
|
+ Users who wish to begin using or continue using mesosphere should use the standard/cool kids zip ("atmosphere-").
|
||||||
|
+ Users who wish to opt-out of mesosphere should download and extract the opt-out zip ("atmosphere-WITHOUT_MESOSPHERE-").
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.16.2
|
||||||
|
+ Atmosphère release zips no longer bundle BCT.ini, instead relying on defaults in code.
|
||||||
|
+ This means atmosphere updates should no longer overwrite any user configuration at all.
|
||||||
|
+ If you wish to modify BCT.ini config, copy the template from /config_templates/ as with other configuration.
|
||||||
|
+ `pgl` and `creport` were further updated to reflect differences in official behavior in 11.0.0.
|
||||||
|
+ An issue was fixed that caused creport to be launched multiple times on process crash.
|
||||||
|
+ This fixes the "duplicate reports" issue that sometimes plagued people.
|
||||||
|
+ A new system setting (`atmosphere!enable_am_debug_mode`) configuring am to use debug mode.
|
||||||
|
+ If you are not a developer or don't see a clear use for this, leave it configured to the default (off).
|
||||||
|
+ Reboot to payload NRO was updated to fix support with certain payloads.
|
||||||
|
+ Support was fixed for atmosphere's extension to support homebrew use of new (8.0.0+) kernel mappings.
|
||||||
|
+ In particular, when running tracing debug builds of `mesosphère`, hbloader now has access to the kernel trace buffer.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.16.1
|
||||||
|
+ Support was added for 11.0.1.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ A new svc::InfoType added in 11.0.0 was implemented (it wasn't discovered before 0.16.0 released).
|
||||||
|
+ The new Control Flow Integrity (CFI) logic added in 11.0.0 kernel was implemented.
|
||||||
|
+ `fs` logic was refactored and cleaned up to reflect some newer sysmodule behavioral and structural changes.
|
||||||
|
+ `exosphère` was updated to allow dynamic control of what uart port is used for logging.
|
||||||
|
+ This can be controlled by editing the `log_port`, `log_baud_rate`, and `log_inverted` fields in `exosphere.ini`.
|
||||||
|
+ `mesosphère` was updated to improve debugging capabilities.
|
||||||
|
+ This is still a work in progress, but developers may be interested.
|
||||||
|
+ A bug was fixed that caused `fatal` to fatal error if the fatal process was already being debugged.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
## 0.16.0
|
||||||
|
+ Support was added for 11.0.0.
|
||||||
|
+ `exosphère` was updated to reflect the latest official secure monitor behavior.
|
||||||
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
|
+ `loader`, `sm`, `boot`, `pgl` were updated to reflect the latest official behaviors.
|
||||||
|
+ **Please Note**: 11.0.0 implements an opt-in version of the atmosphère `sm` extension that allows for closing session without unregistering services.
|
||||||
|
+ Correspondingly, the extension will be deprecated in favor of the new official opt-in command. In 0.17.0, it will be removed entirely.
|
||||||
|
+ If your custom system module relies on this extension (however unlikely that seems to me), please update it accordingly.
|
||||||
|
+ `erpt` was partially updated to provide compatibility with 11.0.0.
|
||||||
|
+ The latest firmware attaches additional fields and context information to logs.
|
||||||
|
+ A future atmosphère update will implement this logic, so that users who are interested can also get the new information when examining their logs.
|
||||||
|
+ **Please Note**: 11.0.0 introduced breaking changes to the `usb` system module's `usb:ds` API.
|
||||||
|
+ Homebrew which uses the `usb:ds` service should rebuild with the latest libnx version to support running on 11.0.0.
|
||||||
|
+ The `boot` system module was rewritten to reflect the huge driver changes introduced in 8.0.0.
|
||||||
|
+ This includes a number of improvements to both logo display and battery management logic.
|
||||||
|
+ Support was added for configuring the address space width for `hbl`.
|
||||||
|
+ The `hbl_config!override_address_space_(#)` and `hbl_config!override_any_app_address_space` can now be set to `39_bit`, `36_bit`, or `32_bit` to control the address space for hbl on a per-override basis.
|
||||||
|
+ If a configuration has not been set, hbl will now default to 39-bit address space.
|
||||||
|
+ Previously, a legacy 36-bit address space was always used to maintain compatibility with 1.0.0.
|
||||||
|
+ A new loader extension was added to support 39-bit whenever possible (including mesosphere-on-1.0.0), with fallback to 36-bit when unavailable.
|
||||||
|
+ Support was added to a number of components for running on Mariko hardware.
|
||||||
|
+ The `boot` system module can now safely be run on mariko hardware, performing correct hardware initialization.
|
||||||
|
+ Daybreak (and generally, system update logic) were updated to be usable on Mariko.
|
||||||
|
+ Boot0 protection/management logic was updated to perform correct actions on Mariko.
|
||||||
|
+ Reboot to payload does not and cannot work on Mariko. Correspondingly, A "fatal error" handler was written, to display and save fatal errors from within TrustZone.
|
||||||
|
+ **Please Note:** Atmosphere is still not properly usable on Mariko hardware.
|
||||||
|
+ In particular, wake-from-sleep will not properly function (the magic numbers aren't set correctly), among a few other minor issues.
|
||||||
|
+ `exosphère` received support for building under debug configuration.
|
||||||
|
+ A small (otherwise unused) portion of IRAM is now reserved for debug-only exosphere code (this region is unused/untouched under release config).
|
||||||
|
+ This enables logging (including printf) to uart from the secure monitor, for those interested.
|
||||||
|
+ A number of bugs were fixed, including:
|
||||||
|
+ Minor issues in a number of filesystem related code were fixed.
|
||||||
|
+ An issue was fixed that could cause NCM to abort on consoles which came with 3.0.x and were never updated.
|
||||||
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
## 0.15.0
|
## 0.15.0
|
||||||
+ fusee-primary's panic display was updated to automatically identify and give suggestions to resolve many of the most common errors users encounter.
|
+ fusee-primary's panic display was updated to automatically identify and give suggestions to resolve many of the most common errors users encounter.
|
||||||
+ Having been tested as well as I can alone, `mesosphere` (atmosphère's reimplementation of the Nintendo Switch kernel) is now available for users interested in trying it.
|
+ Having been tested as well as I can alone, `mesosphere` (atmosphère's reimplementation of the Nintendo Switch kernel) is now available for users interested in trying it.
|
||||||
|
|||||||
103
docs/components/detail/exosphere_memory_layout.txt
Normal file
103
docs/components/detail/exosphere_memory_layout.txt
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
exosphere, storage requirements:
|
||||||
|
|
||||||
|
Nonvolatile memory:
|
||||||
|
0xE000
|
||||||
|
|
||||||
|
Volatile memory: 0x2000
|
||||||
|
|
||||||
|
Physical Address Space:
|
||||||
|
-0x7C010000-0x7C012000 - boot code/volatile memory
|
||||||
|
-0x7C012000-0x7C01E000 - program region
|
||||||
|
-0x7C01E000-0x7C01F000 - global data/context
|
||||||
|
-0x7C01F000-0x7C020000 - L2/L3 page table
|
||||||
|
|
||||||
|
-0x7C020000-0x7C040000 - Mariko-only program region
|
||||||
|
-0x7C040000-0x7C048000 - Mariko-only program stack
|
||||||
|
-0x7C048000-0x7C050000 - Reserved Mariko TZRAM (SE context carveouts, etc)
|
||||||
|
|
||||||
|
Virtual Address Space:
|
||||||
|
|
||||||
|
L1: 0x40 bytes.
|
||||||
|
|
||||||
|
L1 Entries:
|
||||||
|
-0 (0x000000000-0x040000000): Empty
|
||||||
|
-1 (0x040000000-0x080000000): Identity Mapping/Empty
|
||||||
|
-2 (0x080000000-0x0C0000000): DRAM Mapping/Empty
|
||||||
|
-3 (0x0C0000000-0x100000000): DRAM Mapping/Empty
|
||||||
|
-4 (0x100000000-0x140000000): Empty
|
||||||
|
-5 (0x140000000-0x180000000): Empty
|
||||||
|
-6 (0x180000000-0x1C0000000): Empty
|
||||||
|
-7 (0x1C0000000-0x200000000): Virtual Region
|
||||||
|
|
||||||
|
L2 Page and L3 page are both0x7C01F000
|
||||||
|
|
||||||
|
L2 Entries:
|
||||||
|
-0x040000000 (Identity IRAM Table)
|
||||||
|
- Entry Used: 0x000
|
||||||
|
-0x07C000000 (Identity TZRAM Table)
|
||||||
|
- Entry Used: 0x1E0
|
||||||
|
-0x1F0000000 (Virtual Region Table)
|
||||||
|
- Entry Used: 0x180
|
||||||
|
|
||||||
|
L3 Entries:
|
||||||
|
- Identity TZRAM mapping (0x7C010000-0x7C020000)
|
||||||
|
- Entry Used: 0x010-0x01F
|
||||||
|
- Identity IRAM mapping (0x40020000-0x40040000)
|
||||||
|
- Entry Used: 0x020-0x03F
|
||||||
|
- Virtual Device region (0x1F0040000-0x1F0080000)
|
||||||
|
- Entry Used: 0x040-0x07F
|
||||||
|
- Read Only TZRAM Alias (0x1F00A0000-0x1F00B0000)
|
||||||
|
- Entry Used: 0x0A0-0x0AF
|
||||||
|
- Program region (0x1F00C0000-0x1F00CC000)
|
||||||
|
- Entry Used: 0x0C0-0x0CB
|
||||||
|
- Mariko Program region (0x1F00D0000-0x1F00F0000)
|
||||||
|
- Entry Used: 0x0D0-0x0EF
|
||||||
|
- Mariko Program stack (0x1F00F4000-0x1F00FC000)
|
||||||
|
- Entry Used: 0x0F4-0x0FB
|
||||||
|
- Secure DRAM Storage (0x1F0100000-0x1F0110000)
|
||||||
|
- Entry Used: 0x100-0x10F
|
||||||
|
- Debug DRAM Storage (0x1F0110000-0x1F0114000)
|
||||||
|
- Entry Used: 0x110-0x113
|
||||||
|
- SC7 IRAM Work Space (0x1F0120000-0x1F0130000)
|
||||||
|
- Entry Used: 0x120-0x12F
|
||||||
|
- SC7 IRAM Firmware (0x1F0140000-0x1F0141000)
|
||||||
|
- Entry Used: 0x140-0x140
|
||||||
|
- Debug Code (0x1F0150000-0x1F0154000)
|
||||||
|
- Entry Used: 0x150-0x153
|
||||||
|
- Reserved For Debug (0x1F0160000-0x1F0170000)
|
||||||
|
- Entry Used: 0x160-0x16F
|
||||||
|
- Boot Code (0x1F01C0000-0x1F01C2000)
|
||||||
|
- Entry Used: 0x1C0-0x1C1
|
||||||
|
- AMS IRAM Page (0x1F01F2000-0x1F01F2000)
|
||||||
|
- Entry Used: 0x1F2-0x1F2
|
||||||
|
- AMS User Page (0x1F01F4000-0x1F01F4000)
|
||||||
|
- Entry Used: 0x1F4-0x1F4
|
||||||
|
- SMC User Page (0x1F01F6000-0x1F01F6000)
|
||||||
|
- Entry Used: 0x1F6-0x1F6
|
||||||
|
- Volatile (Data) (0x1F01F8000-0x1F01F9000)
|
||||||
|
- Entry Used: 0x1F8-0x1F8
|
||||||
|
- Volatile (Stacks) (0x1F01FA000-0x1F01FB000)
|
||||||
|
- Entry Used: 0x1FA-0x1FA
|
||||||
|
- Global Data (0x1F01FC000-0x1F01FD000)
|
||||||
|
|
||||||
|
|
||||||
|
NV Global Data needs:
|
||||||
|
Exosphere + Emummc Config (<=0x200)
|
||||||
|
Boot Config[0x400]
|
||||||
|
RSA Context(0x100)
|
||||||
|
Old Device Keys[0x20][0x10];
|
||||||
|
Old Master Keys[0x20][0x10];
|
||||||
|
Imported Rsa Keys[4][0x200];
|
||||||
|
CPU Ctx[4][0x100];
|
||||||
|
|
||||||
|
Total: 0x1700
|
||||||
|
|
||||||
|
Global Data Page (accessible via X18):
|
||||||
|
0x000-0x200: Exosphere Config
|
||||||
|
0x200-0x400: Emummc Config
|
||||||
|
0x400-0x800: Sealed AES Keys
|
||||||
|
0x800-0xC00: Boot Config
|
||||||
|
0xC00-0xFFF: CPU contexts. Can be replaced, but this fits exactly so minimizes program space waste.
|
||||||
|
|
||||||
|
Volatile Global Data needs:
|
||||||
|
Random Cache 0x400 bytes
|
||||||
@@ -1,22 +1,8 @@
|
|||||||
# fusée
|
# fusée
|
||||||
fusée is a custom bootloader used to start the Atmosphère environment.
|
fusée is a custom bootloader used to start the Atmosphère environment.
|
||||||
It is divided into three sub-components: fusée-primary, fusée-mtc and fusée-secondary.
|
|
||||||
|
|
||||||
fusée is also capable of chainloading other payloads (e.g.: Android).
|
## fusée
|
||||||
|
fusée is the first piece of Atmosphère's code that runs on the hardware.
|
||||||
fusée's behavior can be configured via the [BCT.ini](../features/configurations.md) file located on the SD card.
|
|
||||||
|
|
||||||
## fusée-primary
|
|
||||||
fusée-primary is the first piece of Atmosphère's code that runs on the hardware.
|
|
||||||
It is distributed as a standalone payload designed to be launched via RCM by abusing the CVE-2018-6242 vulnerability.
|
It is distributed as a standalone payload designed to be launched via RCM by abusing the CVE-2018-6242 vulnerability.
|
||||||
|
|
||||||
This payload is responsible for all the low-level hardware initialization required by the Nintendo Switch, plus the extra task of initializing the SD card and reading the next fusée sub-components from it.
|
This payload is responsible for all the low-level hardware initialization required by the Nintendo Switch, setting up the cryptosystem, mounting/emulating the eMMC, injecting/patching system modules, and launching the exosphère component.
|
||||||
|
|
||||||
## fusée-mtc
|
|
||||||
fusée-mtc is an optional, but heavily recommended sub-component that performs DRAM memory training.
|
|
||||||
This ensures a proper environment for running the final fusée sub-component.
|
|
||||||
|
|
||||||
## fusée-secondary
|
|
||||||
fusée-secondary is the last fusée sub-component that runs on the system.
|
|
||||||
It is responsible for configuring and bootstrapping the Atmosphère environment by mimicking the Horizon OS's design.
|
|
||||||
This includes setting up the cryptosystem, mounting or emulating the eMMC, injecting or patching system modules and launching the exosphère component.
|
|
||||||
|
|||||||
@@ -33,3 +33,8 @@ in settings as `#.#.#|AMS #.#.#|?` with `? = S` when running under system eMMC o
|
|||||||
### System Settings
|
### System Settings
|
||||||
set_mitm intercepts the `GetSettingsItemValueSize` and `GetSettingsItemValue` commands for all requesters.
|
set_mitm intercepts the `GetSettingsItemValueSize` and `GetSettingsItemValue` commands for all requesters.
|
||||||
It does so in order to enable user configuration of system settings, which are parsed from `/atmosphere/system_settings.ini` on boot. See [here](../../features/configurations.md) for more information on the system settings format.
|
It does so in order to enable user configuration of system settings, which are parsed from `/atmosphere/system_settings.ini` on boot. See [here](../../features/configurations.md) for more information on the system settings format.
|
||||||
|
|
||||||
|
## dns_mitm
|
||||||
|
dns_mitm enables intercepting requests to dns resolution services, to enable redirecting requests for specified hostnames.
|
||||||
|
|
||||||
|
For documentation, see [here](../../features/dns_mitm.md).
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
# sept
|
|
||||||
Sept is a payload that facilitates booting Atmosphère when targeting firmware version 7.0.0+.
|
|
||||||
|
|
||||||
It consists of a primary and a secondary payload.
|
|
||||||
|
|
||||||
## sept-primary
|
|
||||||
sept-primary is essentially a stand-in for Nintendo's package1ldr, on 7.0.0+. To use it, the caller (normally fusée-secondary) loads the sept-primary binary to `0x4003F000`, loads the 7.0.0+ TSEC firmware to `0x40010F00`, and loads a signed, encrypted payload to `0x40016FE0`.
|
|
||||||
|
|
||||||
This signed, encrypted payload is normally sept-secondary.
|
|
||||||
|
|
||||||
## sept-secondary
|
|
||||||
sept-secondary is a payload that performs 7.0.0+ key derivation, and then chainloads to `sept/payload.bin`.
|
|
||||||
|
|
||||||
It is normally stored encrypted/signed. Therefore, if one wishes to build sept-secondary instead of using release builds, one must bring their own keys.
|
|
||||||
@@ -19,6 +19,8 @@ This behavior ensures that cheat codes are only loaded when the user would want
|
|||||||
|
|
||||||
In cases where `dmnt` has not activated the cheat manager, but the user wants to make it do so anyway, the cheat manager's service API provides a `ForceOpenCheatProcess` command that homebrew can use. This command will cause the cheat manager to try to force itself to attach to the process.
|
In cases where `dmnt` has not activated the cheat manager, but the user wants to make it do so anyway, the cheat manager's service API provides a `ForceOpenCheatProcess` command that homebrew can use. This command will cause the cheat manager to try to force itself to attach to the process.
|
||||||
|
|
||||||
|
In cases where `dmnt` has activated the cheat manager, but the user wants to use an alternate debugger, the cheat manager's service API provides a `ForceCloseCheatProcess` command that homebrew can use. This command will cause the cheat manager to detach itself from the process.
|
||||||
|
|
||||||
By default, all cheat codes listed in the loaded .txt file will be toggled on. This is configurable by the user by editing the `atmosphere!dmnt_cheats_enabled_by_default` [system setting](configurations.md).
|
By default, all cheat codes listed in the loaded .txt file will be toggled on. This is configurable by the user by editing the `atmosphere!dmnt_cheats_enabled_by_default` [system setting](configurations.md).
|
||||||
|
|
||||||
Users may use homebrew programs to toggle cheats on and off at runtime via the cheat manager's service API.
|
Users may use homebrew programs to toggle cheats on and off at runtime via the cheat manager's service API.
|
||||||
@@ -40,30 +42,30 @@ The following provides documentation of the instruction format for the virtual m
|
|||||||
|
|
||||||
Typically, instruction type is encoded in the upper nybble of the first instruction u32.
|
Typically, instruction type is encoded in the upper nybble of the first instruction u32.
|
||||||
|
|
||||||
### Code Type 0: Store Static Value to Memory
|
### Code Type 0x0: Store Static Value to Memory
|
||||||
Code type 0 allows writing a static value to a memory address.
|
Code type 0x0 allows writing a static value to a memory address.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`0TMR00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
`0TMR00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||||
|
|
||||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
||||||
+ R: Register to use as an offset from memory region base.
|
+ R: Register to use as an offset from memory region base.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
+ V: Value to write.
|
+ V: Value to write.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 1: Begin Conditional Block
|
### Code Type 0x1: Begin Conditional Block
|
||||||
Code type 1 performs a comparison of the contents of memory to a static value.
|
Code type 0x1 performs a comparison of the contents of memory to a static value.
|
||||||
|
|
||||||
If the condition is not met, all instructions until the appropriate conditional block terminator are skipped.
|
If the condition is not met, all instructions until the appropriate End or Else conditional block terminator are skipped.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`1TMC00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
`1TMC00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||||
|
|
||||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
||||||
+ C: Condition to use, see below.
|
+ C: Condition to use, see below.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
+ V: Value to compare to.
|
+ V: Value to compare to.
|
||||||
@@ -78,16 +80,20 @@ If the condition is not met, all instructions until the appropriate conditional
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 2: End Conditional Block
|
### Code Type 0x2: End Conditional Block
|
||||||
Code type 2 marks the end of a conditional block (started by Code Type 1 or Code Type 8).
|
Code type 0x2 marks the end of a conditional block (started by Code Type 0x1 or Code Type 0x8).
|
||||||
|
|
||||||
|
When an Else is executed, all instructions until the appropriate End conditional block terminator are skipped.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`20000000`
|
`2X000000`
|
||||||
|
|
||||||
|
+ X: End type (0 = End, 1 = Else).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 3: Start/End Loop
|
### Code Type 0x3: Start/End Loop
|
||||||
Code type 3 allows for iterating in a loop a fixed number of times.
|
Code type 0x3 allows for iterating in a loop a fixed number of times.
|
||||||
|
|
||||||
#### Start Loop Encoding
|
#### Start Loop Encoding
|
||||||
`300R0000 VVVVVVVV`
|
`300R0000 VVVVVVVV`
|
||||||
@@ -102,8 +108,8 @@ Code type 3 allows for iterating in a loop a fixed number of times.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 4: Load Register with Static Value
|
### Code Type 0x4: Load Register with Static Value
|
||||||
Code type 4 allows setting a register to a constant value.
|
Code type 0x4 allows setting a register to a constant value.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`400R0000 VVVVVVVV VVVVVVVV`
|
`400R0000 VVVVVVVV VVVVVVVV`
|
||||||
@@ -113,29 +119,28 @@ Code type 4 allows setting a register to a constant value.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 5: Load Register with Memory Value
|
### Code Type 0x5: Load Register with Memory Value
|
||||||
Code type 5 allows loading a value from memory into a register, either using a fixed address or by dereferencing the destination register.
|
Code type 0x5 allows loading a value from memory into a register, either using a fixed address or by dereferencing the destination register.
|
||||||
|
|
||||||
#### Load From Fixed Address Encoding
|
#### Load From Fixed Address Encoding
|
||||||
`5TMR00AA AAAAAAAA`
|
`5TMR00AA AAAAAAAA`
|
||||||
|
|
||||||
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
||||||
+ R: Register to load value into.
|
+ R: Register to load value into.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
|
|
||||||
#### Load from Register Address Encoding
|
#### Load from Register Address Encoding
|
||||||
`5TMR10AA AAAAAAAA`
|
`5T0R10AA AAAAAAAA`
|
||||||
|
|
||||||
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
+ R: Register to load value into. (This register is also used as the base memory address).
|
||||||
+ R: Register to load value into.
|
|
||||||
+ A: Immediate offset to use from register R.
|
+ A: Immediate offset to use from register R.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 6: Store Static Value to Register Memory Address
|
### Code Type 0x6: Store Static Value to Register Memory Address
|
||||||
Code type 6 allows writing a fixed value to a memory address specified by a register.
|
Code type 0x6 allows writing a fixed value to a memory address specified by a register.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`6T0RIor0 VVVVVVVV VVVVVVVV`
|
`6T0RIor0 VVVVVVVV VVVVVVVV`
|
||||||
@@ -149,10 +154,10 @@ Code type 6 allows writing a fixed value to a memory address specified by a regi
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 7: Legacy Arithmetic
|
### Code Type 0x7: Legacy Arithmetic
|
||||||
Code type 7 allows performing arithmetic on registers.
|
Code type 0x7 allows performing arithmetic on registers.
|
||||||
|
|
||||||
However, it has been deprecated by Code type 9, and is only kept for backwards compatibility.
|
However, it has been deprecated by Code type 0x9, and is only kept for backwards compatibility.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`7T0RC000 VVVVVVVV`
|
`7T0RC000 VVVVVVVV`
|
||||||
@@ -171,8 +176,8 @@ However, it has been deprecated by Code type 9, and is only kept for backwards c
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 8: Begin Keypress Conditional Block
|
### Code Type 0x8: Begin Keypress Conditional Block
|
||||||
Code type 8 enters or skips a conditional block based on whether a key combination is pressed.
|
Code type 0x8 enters or skips a conditional block based on whether a key combination is pressed.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`8kkkkkkk`
|
`8kkkkkkk`
|
||||||
@@ -213,8 +218,8 @@ Note: This is the direct output of `hidKeysDown()`.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 9: Perform Arithmetic
|
### Code Type 0x9: Perform Arithmetic
|
||||||
Code type 9 allows performing arithmetic on registers.
|
Code type 0x9 allows performing arithmetic on registers.
|
||||||
|
|
||||||
#### Register Arithmetic Encoding
|
#### Register Arithmetic Encoding
|
||||||
`9TCRS0s0`
|
`9TCRS0s0`
|
||||||
@@ -248,8 +253,8 @@ Code type 9 allows performing arithmetic on registers.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 10: Store Register to Memory Address
|
### Code Type 0xA: Store Register to Memory Address
|
||||||
Code type 10 allows writing a register to memory.
|
Code type 0xA allows writing a register to memory.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`ATSRIOxa (aaaaaaaa)`
|
`ATSRIOxa (aaaaaaaa)`
|
||||||
@@ -272,13 +277,13 @@ Code type 10 allows writing a register to memory.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 11: Reserved
|
### Code Type 0xB: Reserved
|
||||||
Code Type 11 is currently reserved for future use.
|
Code Type 0xB is currently reserved for future use.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 12-15: Extended-Width Instruction
|
### Code Type 0xC-0xF: Extended-Width Instruction
|
||||||
Code Types 12-15 signal to the VM to treat the upper two nybbles of the first dword as instruction type, instead of just the upper nybble.
|
Code Types 0xC-0xF signal to the VM to treat the upper two nybbles of the first dword as instruction type, instead of just the upper nybble.
|
||||||
|
|
||||||
This reserves an additional 64 opcodes for future use.
|
This reserves an additional 64 opcodes for future use.
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +1,10 @@
|
|||||||
# Configurations
|
# Configurations
|
||||||
Atmosphère provides a variety of customizable configurations to better adjust to users' needs.
|
Atmosphère provides a variety of customizable configurations to better adjust to users' needs.
|
||||||
|
|
||||||
## BCT.ini
|
## stratosphere.ini
|
||||||
This is the configuration file used by fusée.
|
This is the configuration file used by fusée for configuring user-space system modules.
|
||||||
This file is located under the `/atmosphere/config/` folder on your SD card and a default template can be found inside the `/atmosphere/config_templates/` folder.
|
This file is located under the `/atmosphere/config/` folder on your SD card and a default template can be found inside the `/atmosphere/config_templates/` folder.
|
||||||
|
|
||||||
### Adding a Custom Boot Splashscreen
|
|
||||||
Atmosphère provides its own default splashscreen which is displayed at boot time. However, this can be replaced at will.
|
|
||||||
|
|
||||||
The boot splashscreen must be a BMP file, it must be 720x1280 (1280x720 rotated 90 degrees left/counterclockwise/anti-clockwise) resolution, and be in 32-bit ARGB format. You can use image editing software such as GIMP or Photoshop to export the image in this format.
|
|
||||||
|
|
||||||
Add the following lines to BCT.ini and change the value of `custom_splash` to the actual path and filename of your boot splashscreen:
|
|
||||||
```
|
|
||||||
[stage2]
|
|
||||||
custom_splash = /path/to/your/bootlogo.bmp
|
|
||||||
```
|
|
||||||
|
|
||||||
### Configuring "nogc" Protection
|
### Configuring "nogc" Protection
|
||||||
"nogc" is a feature provided by fusée-secondary which disables the Nintendo Switch's Game Card reader. Its purpose is to prevent the reader from being updated when the console has been updated, without burning fuses, from a lower firmware version. More specifically, from firmware versions 4.0.0 or 9.0.0 which introduced updates to the Game Card reader's firmware. By default, Atmosphère will protect the Game Card reader automatically, but you are free to change it.
|
"nogc" is a feature provided by fusée-secondary which disables the Nintendo Switch's Game Card reader. Its purpose is to prevent the reader from being updated when the console has been updated, without burning fuses, from a lower firmware version. More specifically, from firmware versions 4.0.0 or 9.0.0 which introduced updates to the Game Card reader's firmware. By default, Atmosphère will protect the Game Card reader automatically, but you are free to change it.
|
||||||
|
|
||||||
@@ -29,32 +18,15 @@ nogc = X
|
|||||||
0 = force-disable nogc, so Atmosphère will always enable the Game Card reader.
|
0 = force-disable nogc, so Atmosphère will always enable the Game Card reader.
|
||||||
```
|
```
|
||||||
|
|
||||||
### NCM opt-out
|
## Adding a Custom Boot Splashscreen
|
||||||
Atmosphère provides a reimplementation of the [ncm](../components/modules/ncm.md) system module. If you wish to disable this reimplementation add the following line to the `stratosphere` section:
|
Atmosphère provides its own default splashscreen which is displayed at boot time. However, this can be replaced at will.
|
||||||
```
|
|
||||||
[stratosphere]
|
|
||||||
disable_ncm = 1
|
|
||||||
```
|
|
||||||
|
|
||||||
### Logging
|
Boot splash screens must be 1280x720 resolution.
|
||||||
This is an advanced feature aimed at developers trying to debug boot time issues. It enables logging of the fusée stages to be displayed on screen.
|
|
||||||
|
|
||||||
Add the following lines to BCT.ini and change the value of `X` according to the following list:
|
A script can be found inside the source tree (`/utilities/insert_splash_screen.py`) for inserting a custom splash screen into a release binary.
|
||||||
```
|
|
||||||
[config]
|
|
||||||
log_level = X
|
|
||||||
```
|
|
||||||
```
|
|
||||||
0 = NONE
|
|
||||||
1 = ERROR
|
|
||||||
2 = WARNING
|
|
||||||
3 = MANDATORY
|
|
||||||
4 = INFO
|
|
||||||
5 = DEBUG
|
|
||||||
```
|
|
||||||
|
|
||||||
A special level is also provided to prevent prefix creation. To use it, do a bitwise OR with this mask:
|
To do so, execute the following command on the script:
|
||||||
`0x100 = NO_PREFIX`
|
`python insert_splash_screen.py <path to your splash screen image> <path to /atmosphere/package3 on your SD card>`
|
||||||
|
|
||||||
## emummc.ini
|
## emummc.ini
|
||||||
This is the configuration file used for the [emummc](../components/emummc.md) component.
|
This is the configuration file used for the [emummc](../components/emummc.md) component.
|
||||||
|
|||||||
53
docs/features/dns_mitm.md
Normal file
53
docs/features/dns_mitm.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# DNS.mitm
|
||||||
|
As of 0.18.0, atmosphère provides a mechanism for redirecting DNS resolution requests.
|
||||||
|
|
||||||
|
By default, atmosphère redirects resolution requests for official telemetry servers, redirecting them to a loopback address.
|
||||||
|
|
||||||
|
## Hosts files
|
||||||
|
|
||||||
|
DNS.mitm can be configured through the usage of a slightly-extended `hosts` file format, which is parsed only once on system startup.
|
||||||
|
|
||||||
|
In particular, hosts files parsed by DNS.mitm have the following extensions to the usual format:
|
||||||
|
+ `*` is treated as a wildcard character, matching any collection of 0 or more characters wherever it occurs in a hostname.
|
||||||
|
+ `%` is treated as a stand-in for the value of `nsd!environment_identifier`. This is always `lp1`, on production devices.
|
||||||
|
|
||||||
|
If multiple entries in a host file match a domain, the last-defined match is used.
|
||||||
|
|
||||||
|
Please note that homebrew may trigger a hosts file re-parse by sending the extension IPC command 65000 ("AtmosphereReloadHostsFile") to a connected `sfdnsres` session.
|
||||||
|
|
||||||
|
### Hosts file selection
|
||||||
|
|
||||||
|
Atmosphère will try to read hosts from the following file paths, in order, stopping once it successfully performs a file read:
|
||||||
|
|
||||||
|
+ (emummc only) `/atmosphere/hosts/emummc_%04lx.txt`, formatted with the emummc's id number (see `emummc.ini`).
|
||||||
|
+ (emummc only) `/atmosphere/hosts/emummc.txt`.
|
||||||
|
+ (sysmmc only) `/atmosphere/hosts/sysmmc.txt`.
|
||||||
|
+ `/atmosphere/hosts/default.txt`
|
||||||
|
|
||||||
|
If `/atmosphere/hosts/default.txt` does not exist, atmosphère will create it to contain the defaults.
|
||||||
|
|
||||||
|
### Atmosphère defaults
|
||||||
|
|
||||||
|
By default, atmosphère's default redirections are parsed **in addition to** the contents of the loaded hosts file.
|
||||||
|
|
||||||
|
This is equivalent to thinking of the loaded hosts file as having the atmosphère defaults prepended to it.
|
||||||
|
|
||||||
|
This setting is considered desirable, because it minimizes the telemetry risks if a user forgets to update a custom hosts file on a system update which changes the telemetry servers.
|
||||||
|
|
||||||
|
This behavior can be opted-out from by setting `atmosphere!add_defaults_to_dns_hosts = u8!0x0` in `system_settings.ini`.
|
||||||
|
|
||||||
|
The current default redirections are:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Nintendo telemetry servers
|
||||||
|
127.0.0.1 receive-%.dg.srv.nintendo.net receive-%.er.srv.nintendo.net
|
||||||
|
```
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
On startup (or on hosts file re-parse), DNS.mitm will log both what hosts file it selected and the contents of all redirections it parses to `/atmosphere/logs/dns_mitm_startup.log`.
|
||||||
|
|
||||||
|
In addition, if the user sets `atmosphere!enable_dns_mitm_debug_log = u8!0x1` in `system_settings.ini`, DNS.mitm will log all requests to GetHostByName/GetAddrInfo to `/atmosphere/logs/dns_mitm_debug.log`. All redirections will be noted when they occur.
|
||||||
|
|
||||||
|
## Opting-out of DNS.mitm entirely
|
||||||
|
If you wish to disable DNS.mitm entirely, `system_settings.ini` can be edited to set `atmosphere!enable_dns_mitm = u8!0x0`.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2018-2020 Atmosphère-NX
|
Copyright (c) Atmosphère-NX
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ Atmosphère provides six core components, mimicking to some degree the various l
|
|||||||
|
|
||||||
Additionally, Atmosphère also provides the following secondary components:
|
Additionally, Atmosphère also provides the following secondary components:
|
||||||
+ [emummc](components/emummc.md)
|
+ [emummc](components/emummc.md)
|
||||||
+ [sept](components/sept.md)
|
|
||||||
+ [libraries](components/libraries.md)
|
+ [libraries](components/libraries.md)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|||||||
@@ -1,42 +1,32 @@
|
|||||||
# Planned Features
|
# Planned Features
|
||||||
atmosphère has a number of features that are either works-in-progress or planned. Please note that while time-estimates are given, they are loose, and things may be completed sooner or later than advertised.
|
atmosphère has a number of features that are either works-in-progress or planned. Please note that while time-estimates are given, they are loose, and things may be completed sooner or later than advertised.
|
||||||
|
|
||||||
The following descriptions were last updated on July 7th, 2020.
|
The following descriptions were last updated on January 14th, 2021
|
||||||
|
|
||||||
## ams-on-mariko
|
|
||||||
* **Description**: Atmosphere cannot run as-is on Mariko hardware. A large number of changes are needed in many components. Although secure monitor support is complete in exosphere, additional work is needed on the bootloader and stratosphere sides as well. Mariko support will also require further design thought; atmosphere's debugging design heavily relies on reboot-to-payload and (more generally) the ability to perform warmboot bootrom hax at will. This is not possible on Mariko, and will require a new design/software support for whatever solution is chosen.
|
|
||||||
* **Development Status**: Planned.
|
|
||||||
* **Estimated Time**: Summer 2020
|
|
||||||
|
|
||||||
## settings reimplementation
|
|
||||||
* **Description**: A planned reimplementation of the settings system module, and with it a removal of the settings mitm. This will greatly simplify atmosphère's boot process, and will allow much more flexible control over the various system settings.
|
|
||||||
* **Development Status**: Undergoing research/initial development by Adubbz.
|
|
||||||
* **Estimated Time**: Mid 2020
|
|
||||||
|
|
||||||
## mesosphere
|
|
||||||
* **Description**: mesosphère is a reimplementation of the Horizon operating system's Kernel. It aims to provide an open-source reference for Nintendo's code.
|
|
||||||
* **Development Status**: Under active development by SciresM.
|
|
||||||
* **Estimated Time**: Mid-to-Late 2020
|
|
||||||
|
|
||||||
## tma reimplementation
|
## tma reimplementation
|
||||||
* **Description** tma ("target manager agent") is a system module that manages communication between the Switch and a client PC. Atmosphere's implementation will allow homebrew on the switch to communicate with a connected PC to do various operations such as exchanging data or interacting with files. It will also serve as the communicator for Atmosphère's planned debugger. This will also include PC-side software for interacting with the Switch.
|
* **Description** tma ("target manager agent") is a system module that manages communication between the Switch and a client PC. Atmosphere's implementation will allow homebrew on the switch to communicate with a connected PC to do various operations such as exchanging data or interacting with files. It will also serve as the communicator for Atmosphère's planned debugger. This will also include PC-side software for interacting with the Switch.
|
||||||
* **Development Status**: Planned. Switch-side code is fully implemented but needs heavy refactoring/rebasing, as the code was originally authored in 2018.
|
* **Development Status**: Planned. Switch-side code is fully implemented but needs heavy refactoring/rebasing, as the code was originally authored in 2018.
|
||||||
* **Estimated Time**: Late 2020-2021.
|
* **Estimated Time**: 2021-2022.
|
||||||
|
|
||||||
## dmnt.gen2 reimplementation
|
## dmnt.gen2 reimplementation
|
||||||
* **Description**: A reimplementation of the Switch's debug monitor, dmnt will provide an interface for debugging applications or system modules running on the Switch. This will include a gdbstub for debugging actively-running system components or applications.
|
* **Description**: A reimplementation of the Switch's debug monitor, dmnt will provide an interface for debugging applications or system modules running on the Switch. This will include a gdbstub for debugging actively-running system components or applications.
|
||||||
* **Development Status**: Planned
|
* **Development Status**: Planned
|
||||||
* **Estimated Time**: 2021
|
* **Estimated Time**: 2021-2022
|
||||||
|
|
||||||
## fs reimplementation
|
## fs reimplementation
|
||||||
* **Description**: Following mesosphère's completion, atmosphère will have reimplemented all components of the BootImagePackage firmware except for the filesystem services system module. Reimplementing fs will allow for fixing Nintendo bugs (such as corruption when using exFAT filesystems and encoding inconsistencies with UTF-8 and Shift-JIS).
|
* **Description**: Following mesosphère's completion, atmosphère will have reimplemented all components of the BootImagePackage firmware except for the filesystem services system module. Reimplementing fs will allow for fixing Nintendo bugs (such as corruption when using exFAT filesystems and encoding inconsistencies with UTF-8 and Shift-JIS).
|
||||||
* **Development Status**: Planned.
|
* **Development Status**: Planned.
|
||||||
* **Estimated Time**: 2021-2022.
|
* **Estimated Time**: 2021-2022.
|
||||||
|
|
||||||
|
## settings reimplementation
|
||||||
|
* **Description**: A planned reimplementation of the settings system module, and with it a removal of the settings mitm. This will greatly simplify atmosphère's boot process, and will allow much more flexible control over the various system settings.
|
||||||
|
* **Development Status**: Pending development by Adubbz.
|
||||||
|
* **Estimated Time**: Unclear, pending developer availability.
|
||||||
|
|
||||||
## thermosphère
|
## thermosphère
|
||||||
* **Description**: A general-purpose hypervisor, thermosphère will enable the virtualization of the Switch's operating system; this is planned to enable debugging of the Switch's kernel.
|
* **Description**: A general-purpose hypervisor, thermosphère will enable the virtualization of the Switch's operating system; this is planned to enable debugging of the Switch's kernel.
|
||||||
* **Development Status**: Under semi-active development by TuxSH.
|
* **Development Status**: Pending development by TuxSH.
|
||||||
* **Estimated Time**: 2020-2021.
|
* **Estimated Time**: Unclear, pending developer availability.
|
||||||
|
|
||||||
## other planned features
|
## other planned features
|
||||||
* **Description**: General system stability improvements to enhance the user's experience.
|
* **Description**: General system stability improvements to enhance the user's experience.
|
||||||
@@ -59,4 +49,12 @@ Please note that this is not an exhaustive list of features present in atmosphè
|
|||||||
|
|
||||||
## exosphere re-write
|
## exosphere re-write
|
||||||
* **Description**: exosphère, atmosphère's reimplementation of Horizon's Secure Monitor, was the first component authored for the project in early 2018. It is written in C, and in a style very different from the rest of atmosphère's code. In addition, exosphère was written to conform to constraints that no longer apply in an environment where it is not launched from the web browser, and where using a custom firmware image to orchestrate wake-from-sleep is possible. exosphère currently uses all but 1 KB of the space available to it, putting it at risk of breaking as future firmware updates are supported. A re-write will solve these issues.
|
* **Description**: exosphère, atmosphère's reimplementation of Horizon's Secure Monitor, was the first component authored for the project in early 2018. It is written in C, and in a style very different from the rest of atmosphère's code. In addition, exosphère was written to conform to constraints that no longer apply in an environment where it is not launched from the web browser, and where using a custom firmware image to orchestrate wake-from-sleep is possible. exosphère currently uses all but 1 KB of the space available to it, putting it at risk of breaking as future firmware updates are supported. A re-write will solve these issues.
|
||||||
* **Completion Time**: June 2020
|
* **Completion Time**: June 2020
|
||||||
|
|
||||||
|
## mesosphere
|
||||||
|
* **Description**: mesosphère is a reimplementation of the Horizon operating system's Kernel. It aims to provide an open-source reference for Nintendo's code.
|
||||||
|
* **Estimated Time**: September 2020
|
||||||
|
|
||||||
|
## ams-on-mariko
|
||||||
|
* **Description**: Atmosphere cannot run as-is on Mariko hardware. A large number of changes are needed in many components. Although secure monitor support is complete in exosphere, additional work is needed on the bootloader and stratosphere sides as well. Mariko support will also require further design thought; atmosphere's debugging design heavily relies on reboot-to-payload and (more generally) the ability to perform warmboot bootrom hax at will. This is not possible on Mariko, and will require a new design/software support for whatever solution is chosen.
|
||||||
|
* **Completion Time**: January 2021
|
||||||
6
emummc/.gitrepo
vendored
6
emummc/.gitrepo
vendored
@@ -5,8 +5,8 @@
|
|||||||
;
|
;
|
||||||
[subrepo]
|
[subrepo]
|
||||||
remote = https://github.com/m4xw/emuMMC
|
remote = https://github.com/m4xw/emuMMC
|
||||||
branch = exo2
|
branch = develop
|
||||||
commit = 6a814ebbe72cf5245b863b9edea9cd3801437a12
|
commit = f66087313546161a000ee196a788f0626caf80fa
|
||||||
parent = f551ca4461a79908c37307db10cd8cacf8b98f17
|
parent = 38f9a76ba028995ed3274da3a45b0254f09d1f59
|
||||||
method = rebase
|
method = rebase
|
||||||
cmdver = 0.4.1
|
cmdver = 0.4.1
|
||||||
|
|||||||
7
emummc/Makefile
vendored
7
emummc/Makefile
vendored
@@ -32,7 +32,7 @@ CFLAGS += $(INCLUDE) -D__SWITCH__
|
|||||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
|
||||||
|
|
||||||
ASFLAGS := -g $(ARCH)
|
ASFLAGS := -g $(ARCH)
|
||||||
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
LDFLAGS = -specs=$(EMUMMCDIR)/emummc.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
||||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||||
|
|
||||||
@@ -98,7 +98,10 @@ else
|
|||||||
|
|
||||||
DEPENDS := $(OFILES:.o=.d)
|
DEPENDS := $(OFILES:.o=.d)
|
||||||
|
|
||||||
all : $(OUTPUT).kip
|
all : $(OUTPUT)_unpacked.kip
|
||||||
|
|
||||||
|
$(OUTPUT)_unpacked.kip : $(OUTPUT).kip
|
||||||
|
@hactool -t kip --uncompressed=$(OUTPUT)_unpacked.kip $(OUTPUT).kip
|
||||||
|
|
||||||
$(OUTPUT).kip : $(OUTPUT).elf
|
$(OUTPUT).kip : $(OUTPUT).elf
|
||||||
|
|
||||||
|
|||||||
16
emummc/README.md
vendored
16
emummc/README.md
vendored
@@ -1,21 +1,21 @@
|
|||||||
# emuMMC
|
# emuMMC
|
||||||
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
||||||
|
|
||||||
### Supported Horizon Versions
|
### Supported Horizon Versions
|
||||||
**1.0.0 - 10.0.0**
|
**1.0.0 - 13.0.0**
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
* Arbitrary SDMMC backend selection
|
* Arbitrary SDMMC backend selection
|
||||||
**This allows loading eMMC from SD or even SD from eMMC**
|
**This allows loading eMMC from SD or even SD from eMMC**
|
||||||
* On the fly hooking / patching, fully self-infesting
|
* On the fly hooking / patching, fully self-infesting
|
||||||
**Only one payload required for all versions!**
|
**Only one payload required for all versions!**
|
||||||
* File-based SDMMC backend support (from SD)
|
* File-based SDMMC backend support (from SD)
|
||||||
**This allows loading eMMC images from hekate-backups (split or not)**
|
**This allows loading eMMC images from hekate-backups (split or not)**
|
||||||
* SDMMC device based sector offset (*currently eMMC only*)
|
* SDMMC device based sector offset (*currently eMMC only*)
|
||||||
**Raw partition support for eMMC from SD with less performance overhead**
|
**Raw partition support for eMMC from SD with less performance overhead**
|
||||||
* Full support for `/Nintendo` folder redirection to a arbitrary path
|
* Full support for `/Nintendo` folder redirection to a arbitrary path
|
||||||
**No 8 char length restriction!**
|
**No 8 char length restriction!**
|
||||||
* exosphere based context configuration
|
* exosphere based context configuration
|
||||||
**This includes full support for multiple emuMMC images**
|
**This includes full support for multiple emuMMC images**
|
||||||
|
|
||||||
## Compiling
|
## Compiling
|
||||||
|
|||||||
201
emummc/emummc.ld
vendored
Normal file
201
emummc/emummc.ld
vendored
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
OUTPUT_ARCH(aarch64)
|
||||||
|
ENTRY(_start)
|
||||||
|
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
code PT_LOAD FLAGS(5) /* Read | Execute */;
|
||||||
|
rodata PT_LOAD FLAGS(4) /* Read */;
|
||||||
|
data PT_LOAD FLAGS(6) /* Read | Write */;
|
||||||
|
dyn PT_DYNAMIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
/* =========== CODE section =========== */
|
||||||
|
PROVIDE(__start__ = 0x0);
|
||||||
|
. = __start__;
|
||||||
|
__code_start = . ;
|
||||||
|
|
||||||
|
.crt0 :
|
||||||
|
{
|
||||||
|
KEEP (*(.crt0))
|
||||||
|
. = ALIGN(8);
|
||||||
|
} :code
|
||||||
|
|
||||||
|
.init :
|
||||||
|
{
|
||||||
|
KEEP( *(.init) )
|
||||||
|
. = ALIGN(8);
|
||||||
|
} :code
|
||||||
|
|
||||||
|
.plt :
|
||||||
|
{
|
||||||
|
*(.plt)
|
||||||
|
*(.iplt)
|
||||||
|
. = ALIGN(8);
|
||||||
|
} :code
|
||||||
|
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
|
||||||
|
*(.text.exit .text.exit.*)
|
||||||
|
*(.text.startup .text.startup.*)
|
||||||
|
*(.text.hot .text.hot.*)
|
||||||
|
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||||
|
. = ALIGN(8);
|
||||||
|
} :code
|
||||||
|
|
||||||
|
.fini :
|
||||||
|
{
|
||||||
|
KEEP( *(.fini) )
|
||||||
|
. = ALIGN(8);
|
||||||
|
} :code
|
||||||
|
|
||||||
|
/* =========== RODATA section =========== */
|
||||||
|
. = ALIGN(0x1000);
|
||||||
|
__rodata_start = . ;
|
||||||
|
|
||||||
|
.nx-module-name : { KEEP (*(.nx-module-name)) } :rodata
|
||||||
|
|
||||||
|
.rodata :
|
||||||
|
{
|
||||||
|
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||||
|
. = ALIGN(8);
|
||||||
|
} :rodata
|
||||||
|
|
||||||
|
.eh_frame_hdr : { __eh_frame_hdr_start = .; *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) __eh_frame_hdr_end = .; } :rodata
|
||||||
|
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } :rodata
|
||||||
|
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } :rodata
|
||||||
|
.gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } : rodata
|
||||||
|
|
||||||
|
.dynamic : { *(.dynamic) } :rodata :dyn
|
||||||
|
.dynsym : { *(.dynsym) } :rodata
|
||||||
|
.dynstr : { *(.dynstr) } :rodata
|
||||||
|
.rela.dyn : { *(.rela.*) } :rodata
|
||||||
|
.interp : { *(.interp) } :rodata
|
||||||
|
.hash : { *(.hash) } :rodata
|
||||||
|
.gnu.hash : { *(.gnu.hash) } :rodata
|
||||||
|
.gnu.version : { *(.gnu.version) } :rodata
|
||||||
|
.gnu.version_d : { *(.gnu.version_d) } :rodata
|
||||||
|
.gnu.version_r : { *(.gnu.version_r) } :rodata
|
||||||
|
.note.gnu.build-id : { *(.note.gnu.build-id) } :rodata
|
||||||
|
|
||||||
|
/* =========== DATA section =========== */
|
||||||
|
. = ALIGN(0x1000);
|
||||||
|
__data_start = . ;
|
||||||
|
|
||||||
|
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } :data
|
||||||
|
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } :data
|
||||||
|
.gnu_extab : ONLY_IF_RW { *(.gnu_extab*) } : data
|
||||||
|
.exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) } :data
|
||||||
|
|
||||||
|
.tdata ALIGN(8) :
|
||||||
|
{
|
||||||
|
__tdata_lma = .;
|
||||||
|
*(.tdata .tdata.* .gnu.linkonce.td.*)
|
||||||
|
. = ALIGN(8);
|
||||||
|
__tdata_lma_end = .;
|
||||||
|
} :data
|
||||||
|
|
||||||
|
.tbss ALIGN(8) :
|
||||||
|
{
|
||||||
|
*(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
|
||||||
|
. = ALIGN(8);
|
||||||
|
} :data
|
||||||
|
|
||||||
|
.preinit_array ALIGN(8) :
|
||||||
|
{
|
||||||
|
PROVIDE (__preinit_array_start = .);
|
||||||
|
KEEP (*(.preinit_array))
|
||||||
|
PROVIDE (__preinit_array_end = .);
|
||||||
|
} :data
|
||||||
|
|
||||||
|
.init_array ALIGN(8) :
|
||||||
|
{
|
||||||
|
PROVIDE (__init_array_start = .);
|
||||||
|
KEEP( *(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)) )
|
||||||
|
KEEP( *(.init_array .ctors) )
|
||||||
|
PROVIDE (__init_array_end = .);
|
||||||
|
} :data
|
||||||
|
|
||||||
|
.fini_array ALIGN(8) :
|
||||||
|
{
|
||||||
|
PROVIDE (__fini_array_start = .);
|
||||||
|
KEEP( *(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)) )
|
||||||
|
KEEP( *(.fini_array .dtors) )
|
||||||
|
PROVIDE (__fini_array_end = .);
|
||||||
|
} :data
|
||||||
|
|
||||||
|
__got_start__ = .;
|
||||||
|
|
||||||
|
.got : { *(.got) *(.igot) } :data
|
||||||
|
.got.plt : { *(.got.plt) *(.igot.plt) } :data
|
||||||
|
|
||||||
|
__got_end__ = .;
|
||||||
|
|
||||||
|
.data ALIGN(8) :
|
||||||
|
{
|
||||||
|
*(.data .data.* .gnu.linkonce.d.*)
|
||||||
|
SORT(CONSTRUCTORS)
|
||||||
|
} :data
|
||||||
|
|
||||||
|
__bss_start__ = .;
|
||||||
|
.bss ALIGN(8) :
|
||||||
|
{
|
||||||
|
*(.dynbss)
|
||||||
|
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(8);
|
||||||
|
|
||||||
|
/* Reserve space for the TLS segment of the main thread */
|
||||||
|
__tls_start = .;
|
||||||
|
. += + SIZEOF(.tdata) + SIZEOF(.tbss);
|
||||||
|
__tls_end = .;
|
||||||
|
} : data
|
||||||
|
__bss_end__ = .;
|
||||||
|
|
||||||
|
__end__ = ABSOLUTE(.) ;
|
||||||
|
|
||||||
|
. = ALIGN(0x1000);
|
||||||
|
__argdata__ = ABSOLUTE(.) ;
|
||||||
|
|
||||||
|
/* ==================
|
||||||
|
==== Metadata ====
|
||||||
|
================== */
|
||||||
|
|
||||||
|
/* Discard sections that difficult post-processing */
|
||||||
|
/DISCARD/ : { *(.group .comment .note) }
|
||||||
|
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
|
||||||
|
/* DWARF debug sections.
|
||||||
|
Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
of the section so we begin them at 0. */
|
||||||
|
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
}
|
||||||
8
emummc/emummc.specs
vendored
Normal file
8
emummc/emummc.specs
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
%rename link old_link
|
||||||
|
|
||||||
|
*link:
|
||||||
|
%(old_link) -T %:getenv(TOPDIR /emummc.ld) -pie --no-dynamic-linker --spare-dynamic-tags=0 --gc-sections -z text -z nodynamic-undefined-weak --build-id=sha1 --nx-module-name
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
crti%O%s crtbegin%O%s
|
||||||
|
|
||||||
11
emummc/source/FS/FS.h
vendored
11
emummc/source/FS/FS.h
vendored
@@ -37,4 +37,15 @@
|
|||||||
#define BOOT_PARTITION_SIZE 0x2000
|
#define BOOT_PARTITION_SIZE 0x2000
|
||||||
#define FS_READ_WRITE_ERROR 1048
|
#define FS_READ_WRITE_ERROR 1048
|
||||||
|
|
||||||
|
#define NAND_PATROL_SECTOR 0xC20
|
||||||
|
#define NAND_PATROL_OFFSET 0x184000
|
||||||
|
|
||||||
|
typedef struct _fs_nand_patrol_t
|
||||||
|
{
|
||||||
|
uint8_t hmac[0x20];
|
||||||
|
unsigned int offset;
|
||||||
|
unsigned int count;
|
||||||
|
uint8_t rsvd[0x1D8];
|
||||||
|
} fs_nand_patrol_t;
|
||||||
|
|
||||||
#endif /* __FS_H__ */
|
#endif /* __FS_H__ */
|
||||||
|
|||||||
33
emummc/source/FS/FS_offsets.c
vendored
33
emummc/source/FS/FS_offsets.c
vendored
@@ -49,6 +49,14 @@
|
|||||||
#include "offsets/1000_exfat.h"
|
#include "offsets/1000_exfat.h"
|
||||||
#include "offsets/1020.h"
|
#include "offsets/1020.h"
|
||||||
#include "offsets/1020_exfat.h"
|
#include "offsets/1020_exfat.h"
|
||||||
|
#include "offsets/1100.h"
|
||||||
|
#include "offsets/1100_exfat.h"
|
||||||
|
#include "offsets/1200.h"
|
||||||
|
#include "offsets/1200_exfat.h"
|
||||||
|
#include "offsets/1203.h"
|
||||||
|
#include "offsets/1203_exfat.h"
|
||||||
|
#include "offsets/1300.h"
|
||||||
|
#include "offsets/1300_exfat.h"
|
||||||
#include "../utils/fatal.h"
|
#include "../utils/fatal.h"
|
||||||
|
|
||||||
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
||||||
@@ -69,6 +77,7 @@ static const fs_offsets_t GET_OFFSET_STRUCT_NAME(vers) = { \
|
|||||||
.nand_mutex = FS_OFFSET##vers##_NAND_MUTEX, \
|
.nand_mutex = FS_OFFSET##vers##_NAND_MUTEX, \
|
||||||
.active_partition = FS_OFFSET##vers##_ACTIVE_PARTITION, \
|
.active_partition = FS_OFFSET##vers##_ACTIVE_PARTITION, \
|
||||||
.sdmmc_das_handle = FS_OFFSET##vers##_SDMMC_DAS_HANDLE, \
|
.sdmmc_das_handle = FS_OFFSET##vers##_SDMMC_DAS_HANDLE, \
|
||||||
|
.sdmmc_accessor_controller_open = FS_OFFSET##vers##_SDMMC_WRAPPER_CONTROLLER_OPEN, \
|
||||||
.sdmmc_accessor_controller_close = FS_OFFSET##vers##_SDMMC_WRAPPER_CONTROLLER_CLOSE, \
|
.sdmmc_accessor_controller_close = FS_OFFSET##vers##_SDMMC_WRAPPER_CONTROLLER_CLOSE, \
|
||||||
.sd_das_init = FS_OFFSET##vers##_SD_DAS_INIT, \
|
.sd_das_init = FS_OFFSET##vers##_SD_DAS_INIT, \
|
||||||
.nintendo_paths = FS_OFFSET##vers##_NINTENDO_PATHS, \
|
.nintendo_paths = FS_OFFSET##vers##_NINTENDO_PATHS, \
|
||||||
@@ -108,6 +117,14 @@ DEFINE_OFFSET_STRUCT(_1000);
|
|||||||
DEFINE_OFFSET_STRUCT(_1000_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1000_EXFAT);
|
||||||
DEFINE_OFFSET_STRUCT(_1020);
|
DEFINE_OFFSET_STRUCT(_1020);
|
||||||
DEFINE_OFFSET_STRUCT(_1020_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1020_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1100);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1100_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1200);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1200_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1203);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1203_EXFAT);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1300);
|
||||||
|
DEFINE_OFFSET_STRUCT(_1300_EXFAT);
|
||||||
|
|
||||||
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
@@ -177,6 +194,22 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
|||||||
return &(GET_OFFSET_STRUCT_NAME(_1020));
|
return &(GET_OFFSET_STRUCT_NAME(_1020));
|
||||||
case FS_VER_10_2_0_EXFAT:
|
case FS_VER_10_2_0_EXFAT:
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1020_EXFAT));
|
return &(GET_OFFSET_STRUCT_NAME(_1020_EXFAT));
|
||||||
|
case FS_VER_11_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1100));
|
||||||
|
case FS_VER_11_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1100_EXFAT));
|
||||||
|
case FS_VER_12_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1200));
|
||||||
|
case FS_VER_12_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1200_EXFAT));
|
||||||
|
case FS_VER_12_0_3:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1203));
|
||||||
|
case FS_VER_12_0_3_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1203_EXFAT));
|
||||||
|
case FS_VER_13_0_0:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1300));
|
||||||
|
case FS_VER_13_0_0_EXFAT:
|
||||||
|
return &(GET_OFFSET_STRUCT_NAME(_1300_EXFAT));
|
||||||
default:
|
default:
|
||||||
fatal_abort(Fatal_UnknownVersion);
|
fatal_abort(Fatal_UnknownVersion);
|
||||||
}
|
}
|
||||||
|
|||||||
1
emummc/source/FS/FS_offsets.h
vendored
1
emummc/source/FS/FS_offsets.h
vendored
@@ -41,6 +41,7 @@ typedef struct {
|
|||||||
// Misc funcs
|
// Misc funcs
|
||||||
uintptr_t lock_mutex;
|
uintptr_t lock_mutex;
|
||||||
uintptr_t unlock_mutex;
|
uintptr_t unlock_mutex;
|
||||||
|
uintptr_t sdmmc_accessor_controller_open;
|
||||||
uintptr_t sdmmc_accessor_controller_close;
|
uintptr_t sdmmc_accessor_controller_close;
|
||||||
// Misc data
|
// Misc data
|
||||||
uintptr_t sd_mutex;
|
uintptr_t sd_mutex;
|
||||||
|
|||||||
2
emummc/source/FS/FS_structs.h
vendored
2
emummc/source/FS/FS_structs.h
vendored
@@ -35,7 +35,7 @@ typedef struct sdmmc_accessor_vt
|
|||||||
void *dtor;
|
void *dtor;
|
||||||
void *map_device_addr_space;
|
void *map_device_addr_space;
|
||||||
void *unmap_device_addr_space;
|
void *unmap_device_addr_space;
|
||||||
void *controller_open;
|
uint64_t (*sdmmc_accessor_controller_open)(void *);
|
||||||
uint64_t (*sdmmc_accessor_controller_close)(void *);
|
uint64_t (*sdmmc_accessor_controller_close)(void *);
|
||||||
uint64_t (*read_write)(void *, uint64_t, uint64_t, void *, uint64_t, uint64_t);
|
uint64_t (*read_write)(void *, uint64_t, uint64_t, void *, uint64_t, uint64_t);
|
||||||
// More not included because we don't use it.
|
// More not included because we don't use it.
|
||||||
|
|||||||
12
emummc/source/FS/FS_versions.h
vendored
12
emummc/source/FS/FS_versions.h
vendored
@@ -71,6 +71,18 @@ enum FS_VER
|
|||||||
FS_VER_10_2_0,
|
FS_VER_10_2_0,
|
||||||
FS_VER_10_2_0_EXFAT,
|
FS_VER_10_2_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_11_0_0,
|
||||||
|
FS_VER_11_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_12_0_0,
|
||||||
|
FS_VER_12_0_0_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_12_0_3,
|
||||||
|
FS_VER_12_0_3_EXFAT,
|
||||||
|
|
||||||
|
FS_VER_13_0_0,
|
||||||
|
FS_VER_13_0_0_EXFAT,
|
||||||
|
|
||||||
FS_VER_MAX,
|
FS_VER_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
1
emummc/source/FS/offsets/100.h
vendored
1
emummc/source/FS/offsets/100.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_100_LOCK_MUTEX 0x2884
|
#define FS_OFFSET_100_LOCK_MUTEX 0x2884
|
||||||
#define FS_OFFSET_100_UNLOCK_MUTEX 0x28F0
|
#define FS_OFFSET_100_UNLOCK_MUTEX 0x28F0
|
||||||
|
|
||||||
|
#define FS_OFFSET_100_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_100_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x6A8AC
|
#define FS_OFFSET_100_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x6A8AC
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/1000.h
vendored
1
emummc/source/FS/offsets/1000.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_1000_LOCK_MUTEX 0x28910
|
#define FS_OFFSET_1000_LOCK_MUTEX 0x28910
|
||||||
#define FS_OFFSET_1000_UNLOCK_MUTEX 0x28960
|
#define FS_OFFSET_1000_UNLOCK_MUTEX 0x28960
|
||||||
|
|
||||||
|
#define FS_OFFSET_1000_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_1000_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1422E0
|
#define FS_OFFSET_1000_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1422E0
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/1000_exfat.h
vendored
1
emummc/source/FS/offsets/1000_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_1000_EXFAT_LOCK_MUTEX 0x28910
|
#define FS_OFFSET_1000_EXFAT_LOCK_MUTEX 0x28910
|
||||||
#define FS_OFFSET_1000_EXFAT_UNLOCK_MUTEX 0x28960
|
#define FS_OFFSET_1000_EXFAT_UNLOCK_MUTEX 0x28960
|
||||||
|
|
||||||
|
#define FS_OFFSET_1000_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_1000_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1422E0
|
#define FS_OFFSET_1000_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1422E0
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/1020.h
vendored
1
emummc/source/FS/offsets/1020.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_1020_LOCK_MUTEX 0x28910
|
#define FS_OFFSET_1020_LOCK_MUTEX 0x28910
|
||||||
#define FS_OFFSET_1020_UNLOCK_MUTEX 0x28960
|
#define FS_OFFSET_1020_UNLOCK_MUTEX 0x28960
|
||||||
|
|
||||||
|
#define FS_OFFSET_1020_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_1020_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x142740
|
#define FS_OFFSET_1020_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x142740
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/1020_exfat.h
vendored
1
emummc/source/FS/offsets/1020_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_1020_EXFAT_LOCK_MUTEX 0x28910
|
#define FS_OFFSET_1020_EXFAT_LOCK_MUTEX 0x28910
|
||||||
#define FS_OFFSET_1020_EXFAT_UNLOCK_MUTEX 0x28960
|
#define FS_OFFSET_1020_EXFAT_UNLOCK_MUTEX 0x28960
|
||||||
|
|
||||||
|
#define FS_OFFSET_1020_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_1020_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x142740
|
#define FS_OFFSET_1020_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x142740
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
59
emummc/source/FS/offsets/1100.h
vendored
Normal file
59
emummc/source/FS/offsets/1100.h
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1100_H__
|
||||||
|
#define __FS_1100_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1100_SDMMC_ACCESSOR_GC 0x156D90
|
||||||
|
#define FS_OFFSET_1100_SDMMC_ACCESSOR_SD 0x154F40
|
||||||
|
#define FS_OFFSET_1100_SDMMC_ACCESSOR_NAND 0x1500F0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1100_SDMMC_WRAPPER_READ 0x14B990
|
||||||
|
#define FS_OFFSET_1100_SDMMC_WRAPPER_WRITE 0x14BA70
|
||||||
|
#define FS_OFFSET_1100_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1100_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1100_CLKRST_SET_MIN_V_CLK_RATE 0x14AC40
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1100_LOCK_MUTEX 0x28FF0
|
||||||
|
#define FS_OFFSET_1100_UNLOCK_MUTEX 0x29040
|
||||||
|
|
||||||
|
#define FS_OFFSET_1100_SDMMC_WRAPPER_CONTROLLER_OPEN 0x14B840
|
||||||
|
#define FS_OFFSET_1100_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x14B8F0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1100_SD_MUTEX 0xE323E8
|
||||||
|
#define FS_OFFSET_1100_NAND_MUTEX 0xE2D338
|
||||||
|
#define FS_OFFSET_1100_ACTIVE_PARTITION 0xE2D378
|
||||||
|
#define FS_OFFSET_1100_SDMMC_DAS_HANDLE 0xE15D40
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1100_SD_DAS_INIT 0x273B4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1100_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006D944, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007A3C0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00080708, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092198, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1100_H__
|
||||||
59
emummc/source/FS/offsets/1100_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1100_exfat.h
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1100_EXFAT_H__
|
||||||
|
#define __FS_1100_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_ACCESSOR_GC 0x156D90
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_ACCESSOR_SD 0x154F40
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_ACCESSOR_NAND 0x1500F0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_WRAPPER_READ 0x14B990
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_WRAPPER_WRITE 0x14BA70
|
||||||
|
#define FS_OFFSET_1100_EXFAT_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1100_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1100_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x14AC40
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1100_EXFAT_LOCK_MUTEX 0x28FF0
|
||||||
|
#define FS_OFFSET_1100_EXFAT_UNLOCK_MUTEX 0x29040
|
||||||
|
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x14B840
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x14B8F0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SD_MUTEX 0xE403E8
|
||||||
|
#define FS_OFFSET_1100_EXFAT_NAND_MUTEX 0xE3B338
|
||||||
|
#define FS_OFFSET_1100_EXFAT_ACTIVE_PARTITION 0xE3B378
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SDMMC_DAS_HANDLE 0xE23D40
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1100_EXFAT_SD_DAS_INIT 0x273B4
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1100_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006D944, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007A3C0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x00080708, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092198, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1100_EXFAT_H__
|
||||||
59
emummc/source/FS/offsets/1200.h
vendored
Normal file
59
emummc/source/FS/offsets/1200.h
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1200_H__
|
||||||
|
#define __FS_1200_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1200_SDMMC_ACCESSOR_GC 0x154FD0
|
||||||
|
#define FS_OFFSET_1200_SDMMC_ACCESSOR_SD 0x156DE0
|
||||||
|
#define FS_OFFSET_1200_SDMMC_ACCESSOR_NAND 0x155500
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1200_SDMMC_WRAPPER_READ 0x150970
|
||||||
|
#define FS_OFFSET_1200_SDMMC_WRAPPER_WRITE 0x150A30
|
||||||
|
#define FS_OFFSET_1200_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1200_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1200_CLKRST_SET_MIN_V_CLK_RATE 0x14FCC0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1200_LOCK_MUTEX 0x29350
|
||||||
|
#define FS_OFFSET_1200_UNLOCK_MUTEX 0x293A0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1200_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150850
|
||||||
|
#define FS_OFFSET_1200_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1508E0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1200_SD_MUTEX 0xE3D3E8
|
||||||
|
#define FS_OFFSET_1200_NAND_MUTEX 0xE38768
|
||||||
|
#define FS_OFFSET_1200_ACTIVE_PARTITION 0xE387A8
|
||||||
|
#define FS_OFFSET_1200_SDMMC_DAS_HANDLE 0xE20DB0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1200_SD_DAS_INIT 0x27244
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1200_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006E810, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007AEC0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00081254, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092850, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1200_H__
|
||||||
59
emummc/source/FS/offsets/1200_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1200_exfat.h
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1200_EXFAT_H__
|
||||||
|
#define __FS_1200_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_ACCESSOR_GC 0x154FD0
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_ACCESSOR_SD 0x156DE0
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_ACCESSOR_NAND 0x155500
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_READ 0x150970
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_WRITE 0x150A30
|
||||||
|
#define FS_OFFSET_1200_EXFAT_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1200_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1200_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x14FCC0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1200_EXFAT_LOCK_MUTEX 0x29350
|
||||||
|
#define FS_OFFSET_1200_EXFAT_UNLOCK_MUTEX 0x293A0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150850
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1508E0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SD_MUTEX 0xE4B3E8
|
||||||
|
#define FS_OFFSET_1200_EXFAT_NAND_MUTEX 0xE46768
|
||||||
|
#define FS_OFFSET_1200_EXFAT_ACTIVE_PARTITION 0xE467A8
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SDMMC_DAS_HANDLE 0xE2EDB0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1200_EXFAT_SD_DAS_INIT 0x27244
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1200_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006E810, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007AEC0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00081254, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092850, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1200_EXFAT_H__
|
||||||
60
emummc/source/FS/offsets/1203.h
vendored
Normal file
60
emummc/source/FS/offsets/1203.h
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
* Copyright (c) 2021 CTCaer
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1203_H__
|
||||||
|
#define __FS_1203_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1203_SDMMC_ACCESSOR_GC 0x1550E0
|
||||||
|
#define FS_OFFSET_1203_SDMMC_ACCESSOR_SD 0x156EF0
|
||||||
|
#define FS_OFFSET_1203_SDMMC_ACCESSOR_NAND 0x155610
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1203_SDMMC_WRAPPER_READ 0x150A80
|
||||||
|
#define FS_OFFSET_1203_SDMMC_WRAPPER_WRITE 0x150B40
|
||||||
|
#define FS_OFFSET_1203_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1203_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1203_CLKRST_SET_MIN_V_CLK_RATE 0x14FDD0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1203_LOCK_MUTEX 0x29350
|
||||||
|
#define FS_OFFSET_1203_UNLOCK_MUTEX 0x293A0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1203_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150960
|
||||||
|
#define FS_OFFSET_1203_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1509F0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1203_SD_MUTEX 0xE3D3E8
|
||||||
|
#define FS_OFFSET_1203_NAND_MUTEX 0xE38768
|
||||||
|
#define FS_OFFSET_1203_ACTIVE_PARTITION 0xE387A8
|
||||||
|
#define FS_OFFSET_1203_SDMMC_DAS_HANDLE 0xE20DB0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1203_SD_DAS_INIT 0x27244
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1203_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006E920, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007AFD0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00081364, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092960, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1203_H__
|
||||||
60
emummc/source/FS/offsets/1203_exfat.h
vendored
Normal file
60
emummc/source/FS/offsets/1203_exfat.h
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
* Copyright (c) 2021 CTCaer
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1203_EXFAT_H__
|
||||||
|
#define __FS_1203_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_ACCESSOR_GC 0x1550E0
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_ACCESSOR_SD 0x156EF0
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_ACCESSOR_NAND 0x155610
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_READ 0x150A80
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_WRITE 0x150B40
|
||||||
|
#define FS_OFFSET_1203_EXFAT_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1203_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1203_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x14FDD0
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1203_EXFAT_LOCK_MUTEX 0x29350
|
||||||
|
#define FS_OFFSET_1203_EXFAT_UNLOCK_MUTEX 0x293A0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150960
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1509F0
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SD_MUTEX 0xE4B3E8
|
||||||
|
#define FS_OFFSET_1203_EXFAT_NAND_MUTEX 0xE46768
|
||||||
|
#define FS_OFFSET_1203_EXFAT_ACTIVE_PARTITION 0xE467A8
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SDMMC_DAS_HANDLE 0xE2EDB0
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1203_EXFAT_SD_DAS_INIT 0x27244
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1203_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006E920, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007AFD0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00081364, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00092960, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1203_EXFAT_H__
|
||||||
59
emummc/source/FS/offsets/1300.h
vendored
Normal file
59
emummc/source/FS/offsets/1300.h
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1300_H__
|
||||||
|
#define __FS_1300_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1300_SDMMC_ACCESSOR_GC 0x158C80
|
||||||
|
#define FS_OFFSET_1300_SDMMC_ACCESSOR_SD 0x15AA90
|
||||||
|
#define FS_OFFSET_1300_SDMMC_ACCESSOR_NAND 0x1591B0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1300_SDMMC_WRAPPER_READ 0x154620
|
||||||
|
#define FS_OFFSET_1300_SDMMC_WRAPPER_WRITE 0x1546E0
|
||||||
|
#define FS_OFFSET_1300_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1300_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1300_CLKRST_SET_MIN_V_CLK_RATE 0x153820
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1300_LOCK_MUTEX 0x29690
|
||||||
|
#define FS_OFFSET_1300_UNLOCK_MUTEX 0x296E0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1300_SDMMC_WRAPPER_CONTROLLER_OPEN 0x154500
|
||||||
|
#define FS_OFFSET_1300_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x154590
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1300_SD_MUTEX 0xE133E8
|
||||||
|
#define FS_OFFSET_1300_NAND_MUTEX 0xE0E768
|
||||||
|
#define FS_OFFSET_1300_ACTIVE_PARTITION 0xE0E7A8
|
||||||
|
#define FS_OFFSET_1300_SDMMC_DAS_HANDLE 0xDF6E18
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1300_SD_DAS_INIT 0x27744
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1300_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006EBE0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007BEEC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00082294, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0009422C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1300_H__
|
||||||
59
emummc/source/FS/offsets/1300_exfat.h
vendored
Normal file
59
emummc/source/FS/offsets/1300_exfat.h
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
||||||
|
* Copyright (c) 2019 Atmosphere-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope 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/>.
|
||||||
|
*/
|
||||||
|
#ifndef __FS_1300_EXFAT_H__
|
||||||
|
#define __FS_1300_EXFAT_H__
|
||||||
|
|
||||||
|
// Accessor vtable getters
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_ACCESSOR_GC 0x158C80
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_ACCESSOR_SD 0x15AA90
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_ACCESSOR_NAND 0x1591B0
|
||||||
|
|
||||||
|
// Hooks
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_READ 0x154620
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_WRITE 0x1546E0
|
||||||
|
#define FS_OFFSET_1300_EXFAT_RTLD 0x688
|
||||||
|
#define FS_OFFSET_1300_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
||||||
|
|
||||||
|
#define FS_OFFSET_1300_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x153820
|
||||||
|
|
||||||
|
// Misc funcs
|
||||||
|
#define FS_OFFSET_1300_EXFAT_LOCK_MUTEX 0x29690
|
||||||
|
#define FS_OFFSET_1300_EXFAT_UNLOCK_MUTEX 0x296E0
|
||||||
|
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x154500
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x154590
|
||||||
|
|
||||||
|
// Misc Data
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SD_MUTEX 0xE203E8
|
||||||
|
#define FS_OFFSET_1300_EXFAT_NAND_MUTEX 0xE1B768
|
||||||
|
#define FS_OFFSET_1300_EXFAT_ACTIVE_PARTITION 0xE1B7A8
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SDMMC_DAS_HANDLE 0xE03E18
|
||||||
|
|
||||||
|
// NOPs
|
||||||
|
#define FS_OFFSET_1300_EXFAT_SD_DAS_INIT 0x27744
|
||||||
|
|
||||||
|
// Nintendo Paths
|
||||||
|
#define FS_OFFSET_1300_EXFAT_NINTENDO_PATHS \
|
||||||
|
{ \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0006EBE0, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 3, .adrp_offset = 0x0007BEEC, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x00082294, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 4, .adrp_offset = 0x0009422C, .add_rel_offset = 0x00000004}, \
|
||||||
|
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __FS_1300_EXFAT_H__
|
||||||
1
emummc/source/FS/offsets/200.h
vendored
1
emummc/source/FS/offsets/200.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_200_LOCK_MUTEX 0x3264
|
#define FS_OFFSET_200_LOCK_MUTEX 0x3264
|
||||||
#define FS_OFFSET_200_UNLOCK_MUTEX 0x32D0
|
#define FS_OFFSET_200_UNLOCK_MUTEX 0x32D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_200_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_200_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x733F4
|
#define FS_OFFSET_200_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x733F4
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/200_exfat.h
vendored
1
emummc/source/FS/offsets/200_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_200_EXFAT_LOCK_MUTEX 0x3264
|
#define FS_OFFSET_200_EXFAT_LOCK_MUTEX 0x3264
|
||||||
#define FS_OFFSET_200_EXFAT_UNLOCK_MUTEX 0x32D0
|
#define FS_OFFSET_200_EXFAT_UNLOCK_MUTEX 0x32D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_200_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_200_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x733F4
|
#define FS_OFFSET_200_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x733F4
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/210.h
vendored
1
emummc/source/FS/offsets/210.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_210_LOCK_MUTEX 0x3264
|
#define FS_OFFSET_210_LOCK_MUTEX 0x3264
|
||||||
#define FS_OFFSET_210_UNLOCK_MUTEX 0x32D0
|
#define FS_OFFSET_210_UNLOCK_MUTEX 0x32D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_210_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_210_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x737D4
|
#define FS_OFFSET_210_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x737D4
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/210_exfat.h
vendored
1
emummc/source/FS/offsets/210_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_210_EXFAT_LOCK_MUTEX 0x3264
|
#define FS_OFFSET_210_EXFAT_LOCK_MUTEX 0x3264
|
||||||
#define FS_OFFSET_210_EXFAT_UNLOCK_MUTEX 0x32D0
|
#define FS_OFFSET_210_EXFAT_UNLOCK_MUTEX 0x32D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_210_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_210_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x737D4
|
#define FS_OFFSET_210_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x737D4
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/300.h
vendored
1
emummc/source/FS/offsets/300.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_300_LOCK_MUTEX 0x35CC
|
#define FS_OFFSET_300_LOCK_MUTEX 0x35CC
|
||||||
#define FS_OFFSET_300_UNLOCK_MUTEX 0x3638
|
#define FS_OFFSET_300_UNLOCK_MUTEX 0x3638
|
||||||
|
|
||||||
|
#define FS_OFFSET_300_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_300_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A270
|
#define FS_OFFSET_300_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A270
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/300_exfat.h
vendored
1
emummc/source/FS/offsets/300_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_300_EXFAT_LOCK_MUTEX 0x35CC
|
#define FS_OFFSET_300_EXFAT_LOCK_MUTEX 0x35CC
|
||||||
#define FS_OFFSET_300_EXFAT_UNLOCK_MUTEX 0x3638
|
#define FS_OFFSET_300_EXFAT_UNLOCK_MUTEX 0x3638
|
||||||
|
|
||||||
|
#define FS_OFFSET_300_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_300_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A270
|
#define FS_OFFSET_300_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A270
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/301.h
vendored
1
emummc/source/FS/offsets/301.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_301_LOCK_MUTEX 0x3638
|
#define FS_OFFSET_301_LOCK_MUTEX 0x3638
|
||||||
#define FS_OFFSET_301_UNLOCK_MUTEX 0x36A4
|
#define FS_OFFSET_301_UNLOCK_MUTEX 0x36A4
|
||||||
|
|
||||||
|
#define FS_OFFSET_301_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_301_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A32C
|
#define FS_OFFSET_301_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A32C
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/301_exfat.h
vendored
1
emummc/source/FS/offsets/301_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_301_EXFAT_LOCK_MUTEX 0x3638
|
#define FS_OFFSET_301_EXFAT_LOCK_MUTEX 0x3638
|
||||||
#define FS_OFFSET_301_EXFAT_UNLOCK_MUTEX 0x36A4
|
#define FS_OFFSET_301_EXFAT_UNLOCK_MUTEX 0x36A4
|
||||||
|
|
||||||
|
#define FS_OFFSET_301_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_301_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A32C
|
#define FS_OFFSET_301_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x8A32C
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/400.h
vendored
1
emummc/source/FS/offsets/400.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_400_LOCK_MUTEX 0x39A0
|
#define FS_OFFSET_400_LOCK_MUTEX 0x39A0
|
||||||
#define FS_OFFSET_400_UNLOCK_MUTEX 0x3A0C
|
#define FS_OFFSET_400_UNLOCK_MUTEX 0x3A0C
|
||||||
|
|
||||||
|
#define FS_OFFSET_400_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_400_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DB48
|
#define FS_OFFSET_400_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DB48
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/400_exfat.h
vendored
1
emummc/source/FS/offsets/400_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_400_EXFAT_LOCK_MUTEX 0x39A0
|
#define FS_OFFSET_400_EXFAT_LOCK_MUTEX 0x39A0
|
||||||
#define FS_OFFSET_400_EXFAT_UNLOCK_MUTEX 0x3A0C
|
#define FS_OFFSET_400_EXFAT_UNLOCK_MUTEX 0x3A0C
|
||||||
|
|
||||||
|
#define FS_OFFSET_400_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_400_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DB48
|
#define FS_OFFSET_400_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DB48
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
3
emummc/source/FS/offsets/410.h
vendored
3
emummc/source/FS/offsets/410.h
vendored
@@ -34,7 +34,8 @@
|
|||||||
#define FS_OFFSET_410_LOCK_MUTEX 0x39A0
|
#define FS_OFFSET_410_LOCK_MUTEX 0x39A0
|
||||||
#define FS_OFFSET_410_UNLOCK_MUTEX 0x3A0C
|
#define FS_OFFSET_410_UNLOCK_MUTEX 0x3A0C
|
||||||
|
|
||||||
#define FS_OFFSET_410_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DBAC
|
#define FS_OFFSET_410_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
|
#define FS_OFFSET_410_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DBAC
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
#define FS_OFFSET_410_SD_MUTEX 0xE80268
|
#define FS_OFFSET_410_SD_MUTEX 0xE80268
|
||||||
|
|||||||
1
emummc/source/FS/offsets/410_exfat.h
vendored
1
emummc/source/FS/offsets/410_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_410_EXFAT_LOCK_MUTEX 0x39A0
|
#define FS_OFFSET_410_EXFAT_LOCK_MUTEX 0x39A0
|
||||||
#define FS_OFFSET_410_EXFAT_UNLOCK_MUTEX 0x3A0C
|
#define FS_OFFSET_410_EXFAT_UNLOCK_MUTEX 0x3A0C
|
||||||
|
|
||||||
|
#define FS_OFFSET_410_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_410_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DBAC
|
#define FS_OFFSET_410_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x9DBAC
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/500.h
vendored
1
emummc/source/FS/offsets/500.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_500_LOCK_MUTEX 0x4080
|
#define FS_OFFSET_500_LOCK_MUTEX 0x4080
|
||||||
#define FS_OFFSET_500_UNLOCK_MUTEX 0x40D0
|
#define FS_OFFSET_500_UNLOCK_MUTEX 0x40D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_500_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_500_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9380
|
#define FS_OFFSET_500_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9380
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/500_exfat.h
vendored
1
emummc/source/FS/offsets/500_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_500_EXFAT_LOCK_MUTEX 0x4080
|
#define FS_OFFSET_500_EXFAT_LOCK_MUTEX 0x4080
|
||||||
#define FS_OFFSET_500_EXFAT_UNLOCK_MUTEX 0x40D0
|
#define FS_OFFSET_500_EXFAT_UNLOCK_MUTEX 0x40D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_500_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_500_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9380
|
#define FS_OFFSET_500_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9380
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/510.h
vendored
1
emummc/source/FS/offsets/510.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_510_LOCK_MUTEX 0x4080
|
#define FS_OFFSET_510_LOCK_MUTEX 0x4080
|
||||||
#define FS_OFFSET_510_UNLOCK_MUTEX 0x40D0
|
#define FS_OFFSET_510_UNLOCK_MUTEX 0x40D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_510_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_510_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9750
|
#define FS_OFFSET_510_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9750
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/510_exfat.h
vendored
1
emummc/source/FS/offsets/510_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_510_EXFAT_LOCK_MUTEX 0x4080
|
#define FS_OFFSET_510_EXFAT_LOCK_MUTEX 0x4080
|
||||||
#define FS_OFFSET_510_EXFAT_UNLOCK_MUTEX 0x40D0
|
#define FS_OFFSET_510_EXFAT_UNLOCK_MUTEX 0x40D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_510_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_510_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9750
|
#define FS_OFFSET_510_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0xC9750
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/600.h
vendored
1
emummc/source/FS/offsets/600.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_600_LOCK_MUTEX 0x1412C0
|
#define FS_OFFSET_600_LOCK_MUTEX 0x1412C0
|
||||||
#define FS_OFFSET_600_UNLOCK_MUTEX 0x141310
|
#define FS_OFFSET_600_UNLOCK_MUTEX 0x141310
|
||||||
|
|
||||||
|
#define FS_OFFSET_600_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_600_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x148500
|
#define FS_OFFSET_600_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x148500
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/600_exfat.h
vendored
1
emummc/source/FS/offsets/600_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_600_EXFAT_LOCK_MUTEX 0x14C9C0
|
#define FS_OFFSET_600_EXFAT_LOCK_MUTEX 0x14C9C0
|
||||||
#define FS_OFFSET_600_EXFAT_UNLOCK_MUTEX 0x14CA10
|
#define FS_OFFSET_600_EXFAT_UNLOCK_MUTEX 0x14CA10
|
||||||
|
|
||||||
|
#define FS_OFFSET_600_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_600_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x153C00
|
#define FS_OFFSET_600_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x153C00
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/700.h
vendored
1
emummc/source/FS/offsets/700.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_700_LOCK_MUTEX 0x148A90
|
#define FS_OFFSET_700_LOCK_MUTEX 0x148A90
|
||||||
#define FS_OFFSET_700_UNLOCK_MUTEX 0x148AE0
|
#define FS_OFFSET_700_UNLOCK_MUTEX 0x148AE0
|
||||||
|
|
||||||
|
#define FS_OFFSET_700_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_700_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x14FD50
|
#define FS_OFFSET_700_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x14FD50
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/700_exfat.h
vendored
1
emummc/source/FS/offsets/700_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_700_EXFAT_LOCK_MUTEX 0x154040
|
#define FS_OFFSET_700_EXFAT_LOCK_MUTEX 0x154040
|
||||||
#define FS_OFFSET_700_EXFAT_UNLOCK_MUTEX 0x154090
|
#define FS_OFFSET_700_EXFAT_UNLOCK_MUTEX 0x154090
|
||||||
|
|
||||||
|
#define FS_OFFSET_700_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_700_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x15B300
|
#define FS_OFFSET_700_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x15B300
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/800.h
vendored
1
emummc/source/FS/offsets/800.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_800_LOCK_MUTEX 0x14B6D0
|
#define FS_OFFSET_800_LOCK_MUTEX 0x14B6D0
|
||||||
#define FS_OFFSET_800_UNLOCK_MUTEX 0x14B720
|
#define FS_OFFSET_800_UNLOCK_MUTEX 0x14B720
|
||||||
|
|
||||||
|
#define FS_OFFSET_800_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_800_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1529E0
|
#define FS_OFFSET_800_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1529E0
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/800_exfat.h
vendored
1
emummc/source/FS/offsets/800_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_800_EXFAT_LOCK_MUTEX 0x156C80
|
#define FS_OFFSET_800_EXFAT_LOCK_MUTEX 0x156C80
|
||||||
#define FS_OFFSET_800_EXFAT_UNLOCK_MUTEX 0x156CD0
|
#define FS_OFFSET_800_EXFAT_UNLOCK_MUTEX 0x156CD0
|
||||||
|
|
||||||
|
#define FS_OFFSET_800_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_800_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x15DF90
|
#define FS_OFFSET_800_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x15DF90
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/810.h
vendored
1
emummc/source/FS/offsets/810.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_810_LOCK_MUTEX 0x14B6D0
|
#define FS_OFFSET_810_LOCK_MUTEX 0x14B6D0
|
||||||
#define FS_OFFSET_810_UNLOCK_MUTEX 0x14B720
|
#define FS_OFFSET_810_UNLOCK_MUTEX 0x14B720
|
||||||
|
|
||||||
|
#define FS_OFFSET_810_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_810_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1529E0
|
#define FS_OFFSET_810_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1529E0
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/810_exfat.h
vendored
1
emummc/source/FS/offsets/810_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_810_EXFAT_LOCK_MUTEX 0x156C80
|
#define FS_OFFSET_810_EXFAT_LOCK_MUTEX 0x156C80
|
||||||
#define FS_OFFSET_810_EXFAT_UNLOCK_MUTEX 0x156CD0
|
#define FS_OFFSET_810_EXFAT_UNLOCK_MUTEX 0x156CD0
|
||||||
|
|
||||||
|
#define FS_OFFSET_810_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_810_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x15DF90
|
#define FS_OFFSET_810_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x15DF90
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/900.h
vendored
1
emummc/source/FS/offsets/900.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_900_LOCK_MUTEX 0x25280
|
#define FS_OFFSET_900_LOCK_MUTEX 0x25280
|
||||||
#define FS_OFFSET_900_UNLOCK_MUTEX 0x252D0
|
#define FS_OFFSET_900_UNLOCK_MUTEX 0x252D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_900_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_900_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137740
|
#define FS_OFFSET_900_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137740
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/900_exfat.h
vendored
1
emummc/source/FS/offsets/900_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_900_EXFAT_LOCK_MUTEX 0x25280
|
#define FS_OFFSET_900_EXFAT_LOCK_MUTEX 0x25280
|
||||||
#define FS_OFFSET_900_EXFAT_UNLOCK_MUTEX 0x252D0
|
#define FS_OFFSET_900_EXFAT_UNLOCK_MUTEX 0x252D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_900_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_900_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137740
|
#define FS_OFFSET_900_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137740
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/910.h
vendored
1
emummc/source/FS/offsets/910.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_910_LOCK_MUTEX 0x25280
|
#define FS_OFFSET_910_LOCK_MUTEX 0x25280
|
||||||
#define FS_OFFSET_910_UNLOCK_MUTEX 0x252D0
|
#define FS_OFFSET_910_UNLOCK_MUTEX 0x252D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_910_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_910_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137750
|
#define FS_OFFSET_910_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137750
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
1
emummc/source/FS/offsets/910_exfat.h
vendored
1
emummc/source/FS/offsets/910_exfat.h
vendored
@@ -34,6 +34,7 @@
|
|||||||
#define FS_OFFSET_910_EXFAT_LOCK_MUTEX 0x25280
|
#define FS_OFFSET_910_EXFAT_LOCK_MUTEX 0x25280
|
||||||
#define FS_OFFSET_910_EXFAT_UNLOCK_MUTEX 0x252D0
|
#define FS_OFFSET_910_EXFAT_UNLOCK_MUTEX 0x252D0
|
||||||
|
|
||||||
|
#define FS_OFFSET_910_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0
|
||||||
#define FS_OFFSET_910_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137750
|
#define FS_OFFSET_910_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x137750
|
||||||
|
|
||||||
// Misc Data
|
// Misc Data
|
||||||
|
|||||||
4
emummc/source/emmc/mmc.h
vendored
4
emummc/source/emmc/mmc.h
vendored
@@ -136,8 +136,8 @@ c : clear by read
|
|||||||
#define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */
|
#define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */
|
||||||
#define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */
|
#define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */
|
||||||
#define R1_ERASE_RESET (1 << 13) /* sr, c */
|
#define R1_ERASE_RESET (1 << 13) /* sr, c */
|
||||||
#define R1_STATUS(x) (x & 0xFFFFE000)
|
#define R1_STATUS(x) ((x) & 0xFFFFE000)
|
||||||
#define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */
|
#define R1_CURRENT_STATE(x) (((x) & 0x00001E00) >> 9) /* sx, b (4 bits) */
|
||||||
#define R1_READY_FOR_DATA (1 << 8) /* sx, a */
|
#define R1_READY_FOR_DATA (1 << 8) /* sx, a */
|
||||||
#define R1_SWITCH_ERROR (1 << 7) /* sx, c */
|
#define R1_SWITCH_ERROR (1 << 7) /* sx, c */
|
||||||
#define R1_EXCEPTION_EVENT (1 << 6) /* sr, a */
|
#define R1_EXCEPTION_EVENT (1 << 6) /* sr, a */
|
||||||
|
|||||||
6
emummc/source/emmc/sd.h
vendored
6
emummc/source/emmc/sd.h
vendored
@@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* include/linux/mmc/sd.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2005-2007 Pierre Ossman, All Rights Reserved.
|
* Copyright (c) 2005-2007 Pierre Ossman, All Rights Reserved.
|
||||||
* Copyright (c) 2018 CTCaer
|
* Copyright (c) 2018 CTCaer
|
||||||
*
|
*
|
||||||
@@ -10,8 +8,8 @@
|
|||||||
* your option) any later version.
|
* your option) any later version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LINUX_MMC_SD_H
|
#ifndef MMC_SD_H
|
||||||
#define LINUX_MMC_SD_H
|
#define MMC_SD_H
|
||||||
|
|
||||||
/* SD commands type argument response */
|
/* SD commands type argument response */
|
||||||
/* class 0 */
|
/* class 0 */
|
||||||
|
|||||||
128
emummc/source/emmc/sdmmc.c
vendored
128
emummc/source/emmc/sdmmc.c
vendored
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018-2019 CTCaer
|
* Copyright (c) 2018-2020 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -156,7 +156,7 @@ int sdmmc_calculate_fitting_dma_index(sdmmc_accessor_t *_this, unsigned int num_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sdmmc_memcpy_buf = true;
|
sdmmc_memcpy_buf = true;
|
||||||
return dma_buf_idx;
|
return dma_buf_idx;
|
||||||
}
|
}
|
||||||
@@ -164,15 +164,18 @@ int sdmmc_calculate_fitting_dma_index(sdmmc_accessor_t *_this, unsigned int num_
|
|||||||
static int _sdmmc_storage_check_result(u32 res)
|
static int _sdmmc_storage_check_result(u32 res)
|
||||||
{
|
{
|
||||||
//Error mask:
|
//Error mask:
|
||||||
//R1_OUT_OF_RANGE, R1_ADDRESS_ERROR, R1_BLOCK_LEN_ERROR,
|
//TODO: R1_SWITCH_ERROR can be skipped for certain card types.
|
||||||
//R1_ERASE_SEQ_ERROR, R1_ERASE_PARAM, R1_WP_VIOLATION,
|
if (res &
|
||||||
//R1_LOCK_UNLOCK_FAILED, R1_COM_CRC_ERROR, R1_ILLEGAL_COMMAND,
|
(R1_OUT_OF_RANGE | R1_ADDRESS_ERROR | R1_BLOCK_LEN_ERROR |
|
||||||
//R1_CARD_ECC_FAILED, R1_CC_ERROR, R1_ERROR, R1_CID_CSD_OVERWRITE,
|
R1_ERASE_SEQ_ERROR | R1_ERASE_PARAM | R1_WP_VIOLATION |
|
||||||
//R1_WP_ERASE_SKIP, R1_ERASE_RESET, R1_SWITCH_ERROR
|
R1_LOCK_UNLOCK_FAILED | R1_COM_CRC_ERROR | R1_ILLEGAL_COMMAND |
|
||||||
if (!(res & 0xFDF9A080))
|
R1_CARD_ECC_FAILED | R1_CC_ERROR | R1_ERROR |
|
||||||
return 1;
|
R1_CID_CSD_OVERWRITE | R1_WP_ERASE_SKIP | R1_ERASE_RESET |
|
||||||
//TODO: R1_SWITCH_ERROR we can skip for certain card types.
|
R1_SWITCH_ERROR))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
// No errors.
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _sdmmc_storage_execute_cmd_type1_ex(sdmmc_storage_t *storage, u32 *resp, u32 cmd, u32 arg, u32 check_busy, u32 expected_state, u32 mask)
|
static int _sdmmc_storage_execute_cmd_type1_ex(sdmmc_storage_t *storage, u32 *resp, u32 cmd, u32 arg, u32 check_busy, u32 expected_state, u32 mask)
|
||||||
@@ -285,14 +288,23 @@ int sdmmc_storage_end(sdmmc_storage_t *storage)
|
|||||||
|
|
||||||
sdmmc_end(storage->sdmmc);
|
sdmmc_end(storage->sdmmc);
|
||||||
|
|
||||||
|
storage->initialized = 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _sdmmc_storage_readwrite(sdmmc_storage_t *storage, u32 sector, u32 num_sectors, void *buf, u32 is_write)
|
static int _sdmmc_storage_readwrite(sdmmc_storage_t *storage, u32 sector, u32 num_sectors, void *buf, u32 is_write)
|
||||||
{
|
{
|
||||||
u8 *bbuf = (u8 *)buf;
|
u8 *bbuf = (u8 *)buf;
|
||||||
bool first_reinit = false;
|
u32 sct_off = sector;
|
||||||
while (num_sectors)
|
u32 sct_total = num_sectors;
|
||||||
|
bool first_reinit = true;
|
||||||
|
|
||||||
|
// Exit if not initialized.
|
||||||
|
if (!storage->initialized)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
while (sct_total)
|
||||||
{
|
{
|
||||||
u32 blkcnt = 0;
|
u32 blkcnt = 0;
|
||||||
// Retry 5 times if failed.
|
// Retry 5 times if failed.
|
||||||
@@ -300,7 +312,7 @@ static int _sdmmc_storage_readwrite(sdmmc_storage_t *storage, u32 sector, u32 nu
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
reinit_try:
|
reinit_try:
|
||||||
if (_sdmmc_storage_readwrite_ex(storage, &blkcnt, sector, MIN(num_sectors, 0xFFFF), bbuf, is_write))
|
if (_sdmmc_storage_readwrite_ex(storage, &blkcnt, sct_off, MIN(sct_total, 0xFFFF), bbuf, is_write))
|
||||||
goto out;
|
goto out;
|
||||||
else
|
else
|
||||||
retries--;
|
retries--;
|
||||||
@@ -313,24 +325,33 @@ reinit_try:
|
|||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (!first_reinit)
|
if (first_reinit)
|
||||||
res = nx_sd_initialize(true);
|
res = nx_sd_initialize(true);
|
||||||
else
|
else
|
||||||
res = nx_sd_init_retry(true);
|
res = nx_sd_init_retry(true);
|
||||||
|
|
||||||
|
// Reset values for a retry.
|
||||||
|
blkcnt = 0;
|
||||||
retries = 3;
|
retries = 3;
|
||||||
first_reinit = true;
|
first_reinit = false;
|
||||||
|
|
||||||
|
// If succesful reinit, restart xfer.
|
||||||
if (res)
|
if (res)
|
||||||
|
{
|
||||||
|
bbuf = (u8 *)buf;
|
||||||
|
sct_off = sector;
|
||||||
|
sct_total = num_sectors;
|
||||||
|
|
||||||
goto reinit_try;
|
goto reinit_try;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Failed.
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
DPRINTF("readwrite: %08X\n", blkcnt);
|
sct_off += blkcnt;
|
||||||
sector += blkcnt;
|
sct_total -= blkcnt;
|
||||||
num_sectors -= blkcnt;
|
|
||||||
bbuf += 512 * blkcnt;
|
bbuf += 512 * blkcnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,9 +480,11 @@ static int _mmc_storage_get_op_cond_inner(sdmmc_storage_t *storage, u32 *pout, u
|
|||||||
case SDMMC_POWER_1_8:
|
case SDMMC_POWER_1_8:
|
||||||
arg = SD_OCR_CCS | SD_OCR_VDD_18;
|
arg = SD_OCR_CCS | SD_OCR_VDD_18;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDMMC_POWER_3_3:
|
case SDMMC_POWER_3_3:
|
||||||
arg = SD_OCR_CCS | SD_OCR_VDD_27_34;
|
arg = SD_OCR_CCS | SD_OCR_VDD_27_34;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -518,6 +541,7 @@ static void _mmc_storage_parse_cid(sdmmc_storage_t *storage)
|
|||||||
storage->cid.fwrev = unstuff_bits(raw_cid, 40, 4);
|
storage->cid.fwrev = unstuff_bits(raw_cid, 40, 4);
|
||||||
storage->cid.serial = unstuff_bits(raw_cid, 16, 24);
|
storage->cid.serial = unstuff_bits(raw_cid, 16, 24);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /* MMC v2.0 - v2.2 */
|
case 2: /* MMC v2.0 - v2.2 */
|
||||||
case 3: /* MMC v3.1 - v3.3 */
|
case 3: /* MMC v3.1 - v3.3 */
|
||||||
case 4: /* MMC v4 */
|
case 4: /* MMC v4 */
|
||||||
@@ -527,6 +551,7 @@ static void _mmc_storage_parse_cid(sdmmc_storage_t *storage)
|
|||||||
storage->cid.prv = unstuff_bits(raw_cid, 48, 8);
|
storage->cid.prv = unstuff_bits(raw_cid, 48, 8);
|
||||||
storage->cid.serial = unstuff_bits(raw_cid, 16, 32);
|
storage->cid.serial = unstuff_bits(raw_cid, 16, 32);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -571,6 +596,10 @@ static void _mmc_storage_parse_ext_csd(sdmmc_storage_t *storage, u8 *buf)
|
|||||||
storage->ext_csd.bkops_en = buf[EXT_CSD_BKOPS_EN];
|
storage->ext_csd.bkops_en = buf[EXT_CSD_BKOPS_EN];
|
||||||
storage->ext_csd.bkops_status = buf[EXT_CSD_BKOPS_STATUS];
|
storage->ext_csd.bkops_status = buf[EXT_CSD_BKOPS_STATUS];
|
||||||
|
|
||||||
|
storage->ext_csd.pre_eol_info = buf[EXT_CSD_PRE_EOL_INFO];
|
||||||
|
storage->ext_csd.dev_life_est_a = buf[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A];
|
||||||
|
storage->ext_csd.dev_life_est_b = buf[EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B];
|
||||||
|
|
||||||
storage->sec_cnt = *(u32 *)&buf[EXT_CSD_SEC_CNT];
|
storage->sec_cnt = *(u32 *)&buf[EXT_CSD_SEC_CNT];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -613,6 +642,7 @@ static int _mmc_storage_switch_buswidth(sdmmc_storage_t *storage, u32 bus_width)
|
|||||||
case SDMMC_BUS_WIDTH_4:
|
case SDMMC_BUS_WIDTH_4:
|
||||||
arg = SDMMC_SWITCH(MMC_SWITCH_MODE_WRITE_BYTE, EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_4);
|
arg = SDMMC_SWITCH(MMC_SWITCH_MODE_WRITE_BYTE, EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_4);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDMMC_BUS_WIDTH_8:
|
case SDMMC_BUS_WIDTH_8:
|
||||||
arg = SDMMC_SWITCH(MMC_SWITCH_MODE_WRITE_BYTE, EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_8);
|
arg = SDMMC_SWITCH(MMC_SWITCH_MODE_WRITE_BYTE, EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_8);
|
||||||
break;
|
break;
|
||||||
@@ -671,7 +701,7 @@ static int _mmc_storage_enable_HS400(sdmmc_storage_t *storage)
|
|||||||
if (!_mmc_storage_enable_HS200(storage))
|
if (!_mmc_storage_enable_HS200(storage))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
sdmmc_set_tap_value(storage->sdmmc);
|
sdmmc_save_tap_value(storage->sdmmc);
|
||||||
|
|
||||||
if (!_mmc_storage_enable_HS(storage, 0))
|
if (!_mmc_storage_enable_HS(storage, 0))
|
||||||
return 0;
|
return 0;
|
||||||
@@ -727,7 +757,7 @@ int sdmmc_storage_init_mmc(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 bus_wid
|
|||||||
storage->sdmmc = sdmmc;
|
storage->sdmmc = sdmmc;
|
||||||
storage->rca = 2; //TODO: this could be a config item.
|
storage->rca = 2; //TODO: this could be a config item.
|
||||||
|
|
||||||
if (!sdmmc_init(sdmmc, SDMMC_4, SDMMC_POWER_1_8, SDMMC_BUS_WIDTH_1, SDHCI_TIMING_MMC_ID, SDMMC_AUTO_CAL_DISABLE))
|
if (!sdmmc_init(sdmmc, SDMMC_4, SDMMC_POWER_1_8, SDMMC_BUS_WIDTH_1, SDHCI_TIMING_MMC_ID, SDMMC_POWER_SAVE_DISABLE))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[MMC] after init\n");
|
DPRINTF("[MMC] after init\n");
|
||||||
|
|
||||||
@@ -798,7 +828,9 @@ DPRINTF("[MMC] BKOPS enabled\n");
|
|||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[MMC] succesfully switched to HS mode\n");
|
DPRINTF("[MMC] succesfully switched to HS mode\n");
|
||||||
|
|
||||||
sdmmc_card_clock_ctrl(storage->sdmmc, SDMMC_AUTO_CAL_ENABLE);
|
sdmmc_card_clock_powersave(storage->sdmmc, SDMMC_POWER_SAVE_ENABLE);
|
||||||
|
|
||||||
|
storage->initialized = 1;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -812,6 +844,7 @@ int sdmmc_storage_set_mmc_partition(sdmmc_storage_t *storage, u32 partition)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
storage->partition = partition;
|
storage->partition = partition;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -850,7 +883,7 @@ static int _sd_storage_send_if_cond(sdmmc_storage_t *storage)
|
|||||||
return (resp & 0xFF) == 0xAA ? 0 : 2;
|
return (resp & 0xFF) == 0xAA ? 0 : 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _sd_storage_get_op_cond_once(sdmmc_storage_t *storage, u32 *cond, int is_version_1, int supports_low_voltage)
|
static int _sd_storage_get_op_cond_once(sdmmc_storage_t *storage, u32 *cond, int is_version_1, int bus_low_voltage_support)
|
||||||
{
|
{
|
||||||
sdmmc_cmd_t cmdbuf;
|
sdmmc_cmd_t cmdbuf;
|
||||||
// Support for Current > 150mA
|
// Support for Current > 150mA
|
||||||
@@ -858,7 +891,7 @@ static int _sd_storage_get_op_cond_once(sdmmc_storage_t *storage, u32 *cond, int
|
|||||||
// Support for handling block-addressed SDHC cards
|
// Support for handling block-addressed SDHC cards
|
||||||
arg |= (~is_version_1 & 1) ? SD_OCR_CCS : 0;
|
arg |= (~is_version_1 & 1) ? SD_OCR_CCS : 0;
|
||||||
// Support for 1.8V
|
// Support for 1.8V
|
||||||
arg |= (supports_low_voltage & ~is_version_1 & 1) ? SD_OCR_S18R : 0;
|
arg |= (bus_low_voltage_support & ~is_version_1 & 1) ? SD_OCR_S18R : 0;
|
||||||
// This is needed for most cards. Do not set bit7 even if 1.8V is supported.
|
// This is needed for most cards. Do not set bit7 even if 1.8V is supported.
|
||||||
arg |= SD_OCR_VDD_32_33;
|
arg |= SD_OCR_VDD_32_33;
|
||||||
sdmmc_init_cmd(&cmdbuf, SD_APP_OP_COND, arg, SDMMC_RSP_TYPE_3, 0);
|
sdmmc_init_cmd(&cmdbuf, SD_APP_OP_COND, arg, SDMMC_RSP_TYPE_3, 0);
|
||||||
@@ -868,22 +901,24 @@ static int _sd_storage_get_op_cond_once(sdmmc_storage_t *storage, u32 *cond, int
|
|||||||
return sdmmc_get_rsp(storage->sdmmc, cond, 4, SDMMC_RSP_TYPE_3);
|
return sdmmc_get_rsp(storage->sdmmc, cond, 4, SDMMC_RSP_TYPE_3);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _sd_storage_get_op_cond(sdmmc_storage_t *storage, int is_version_1, int supports_low_voltage)
|
static int _sd_storage_get_op_cond(sdmmc_storage_t *storage, int is_version_1, int bus_low_voltage_support)
|
||||||
{
|
{
|
||||||
u64 timeout = get_tmr_ms() + 1500;
|
u64 timeout = get_tmr_ms() + 1500;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
u32 cond = 0;
|
u32 cond = 0;
|
||||||
if (!_sd_storage_get_op_cond_once(storage, &cond, is_version_1, supports_low_voltage))
|
if (!_sd_storage_get_op_cond_once(storage, &cond, is_version_1, bus_low_voltage_support))
|
||||||
break;
|
break;
|
||||||
if (cond & MMC_CARD_BUSY)
|
if (cond & MMC_CARD_BUSY)
|
||||||
{
|
{
|
||||||
|
DPRINTF("[SD] cond: %08X, lv: %d\n", cond, bus_low_voltage_support);
|
||||||
|
|
||||||
if (cond & SD_OCR_CCS)
|
if (cond & SD_OCR_CCS)
|
||||||
storage->has_sector_access = 1;
|
storage->has_sector_access = 1;
|
||||||
|
|
||||||
// Check if card supports 1.8V signaling.
|
// Check if card supports 1.8V signaling.
|
||||||
if (cond & SD_ROCR_S18A && supports_low_voltage)
|
if (cond & SD_ROCR_S18A && bus_low_voltage_support)
|
||||||
{
|
{
|
||||||
//The low voltage regulator configuration is valid for SDMMC1 only.
|
//The low voltage regulator configuration is valid for SDMMC1 only.
|
||||||
if (storage->sdmmc->id == SDMMC_1 &&
|
if (storage->sdmmc->id == SDMMC_1 &&
|
||||||
@@ -896,6 +931,10 @@ static int _sd_storage_get_op_cond(sdmmc_storage_t *storage, int is_version_1, i
|
|||||||
DPRINTF("-> switched to low voltage\n");
|
DPRINTF("-> switched to low voltage\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINTF("[SD] no low voltage support\n");
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -1050,12 +1089,15 @@ void _sd_storage_set_current_limit(sdmmc_storage_t *storage, u16 current_limit,
|
|||||||
case SD_SET_CURRENT_LIMIT_800:
|
case SD_SET_CURRENT_LIMIT_800:
|
||||||
DPRINTF("[SD] power limit raised to 800mA\n");
|
DPRINTF("[SD] power limit raised to 800mA\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SD_SET_CURRENT_LIMIT_600:
|
case SD_SET_CURRENT_LIMIT_600:
|
||||||
DPRINTF("[SD] power limit raised to 600mA\n");
|
DPRINTF("[SD] power limit raised to 600mA\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SD_SET_CURRENT_LIMIT_400:
|
case SD_SET_CURRENT_LIMIT_400:
|
||||||
DPRINTF("[SD] power limit raised to 400mA\n");
|
DPRINTF("[SD] power limit raised to 400mA\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
case SD_SET_CURRENT_LIMIT_200:
|
case SD_SET_CURRENT_LIMIT_200:
|
||||||
DPRINTF("[SD] power limit defaulted to 200mA\n");
|
DPRINTF("[SD] power limit defaulted to 200mA\n");
|
||||||
@@ -1068,7 +1110,7 @@ int _sd_storage_enable_highspeed(sdmmc_storage_t *storage, u32 hs_type, u8 *buf)
|
|||||||
{
|
{
|
||||||
if (!_sd_storage_switch(storage, buf, SD_SWITCH_CHECK, 0, hs_type))
|
if (!_sd_storage_switch(storage, buf, SD_SWITCH_CHECK, 0, hs_type))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[SD] supports switch to (U)HS mode\n");
|
DPRINTF("[SD] supports (U)HS mode: %d\n", buf[16] & 0xF);
|
||||||
|
|
||||||
u32 type_out = buf[16] & 0xF;
|
u32 type_out = buf[16] & 0xF;
|
||||||
if (type_out != hs_type)
|
if (type_out != hs_type)
|
||||||
@@ -1104,6 +1146,7 @@ int _sd_storage_enable_uhs_low_volt(sdmmc_storage_t *storage, u32 type, u8 *buf)
|
|||||||
|
|
||||||
u8 access_mode = buf[13];
|
u8 access_mode = buf[13];
|
||||||
u16 current_limit = buf[7] | buf[6] << 8;
|
u16 current_limit = buf[7] | buf[6] << 8;
|
||||||
|
DPRINTF("[SD] access: %02X, current: %02X\n", access_mode, current_limit);
|
||||||
|
|
||||||
// Try to raise the current limit to let the card perform better.
|
// Try to raise the current limit to let the card perform better.
|
||||||
_sd_storage_set_current_limit(storage, current_limit, buf);
|
_sd_storage_set_current_limit(storage, current_limit, buf);
|
||||||
@@ -1142,7 +1185,7 @@ DPRINTF("[SD] bus speed set to SDR50\n");
|
|||||||
if (access_mode & SD_MODE_UHS_SDR25)
|
if (access_mode & SD_MODE_UHS_SDR25)
|
||||||
{
|
{
|
||||||
type = SDHCI_TIMING_UHS_SDR25;
|
type = SDHCI_TIMING_UHS_SDR25;
|
||||||
hs_type = UHS_SDR50_BUS_SPEED;
|
hs_type = UHS_SDR25_BUS_SPEED;
|
||||||
DPRINTF("[SD] bus speed set to SDR25\n");
|
DPRINTF("[SD] bus speed set to SDR25\n");
|
||||||
storage->csd.busspeed = 25;
|
storage->csd.busspeed = 25;
|
||||||
break;
|
break;
|
||||||
@@ -1155,6 +1198,7 @@ DPRINTF("[SD] bus speed set to SDR25\n");
|
|||||||
DPRINTF("[SD] bus speed set to SDR12\n");
|
DPRINTF("[SD] bus speed set to SDR12\n");
|
||||||
storage->csd.busspeed = 12;
|
storage->csd.busspeed = 12;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
@@ -1165,10 +1209,10 @@ DPRINTF("[SD] bus speed set to SDR12\n");
|
|||||||
DPRINTF("[SD] card accepted UHS\n");
|
DPRINTF("[SD] card accepted UHS\n");
|
||||||
if (!sdmmc_setup_clock(storage->sdmmc, type))
|
if (!sdmmc_setup_clock(storage->sdmmc, type))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[SD] setup clock\n");
|
DPRINTF("[SD] after setup clock\n");
|
||||||
if (!sdmmc_tuning_execute(storage->sdmmc, type, MMC_SEND_TUNING_BLOCK))
|
if (!sdmmc_tuning_execute(storage->sdmmc, type, MMC_SEND_TUNING_BLOCK))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[SD] config tuning\n");
|
DPRINTF("[SD] after tuning\n");
|
||||||
return _sdmmc_storage_check_status(storage);
|
return _sdmmc_storage_check_status(storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1227,6 +1271,7 @@ static void _sd_storage_parse_csd(sdmmc_storage_t *storage)
|
|||||||
case 0:
|
case 0:
|
||||||
storage->csd.capacity = (1 + unstuff_bits(raw_csd, 62, 12)) << (unstuff_bits(raw_csd, 47, 3) + 2);
|
storage->csd.capacity = (1 + unstuff_bits(raw_csd, 62, 12)) << (unstuff_bits(raw_csd, 47, 3) + 2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
storage->csd.c_size = (1 + unstuff_bits(raw_csd, 48, 22));
|
storage->csd.c_size = (1 + unstuff_bits(raw_csd, 48, 22));
|
||||||
storage->csd.capacity = storage->csd.c_size << 10;
|
storage->csd.capacity = storage->csd.c_size << 10;
|
||||||
@@ -1235,7 +1280,7 @@ static void _sd_storage_parse_csd(sdmmc_storage_t *storage)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool _sdmmc_storage_supports_low_voltage(u32 bus_width, u32 type)
|
static bool _sdmmc_storage_get_low_voltage_support(u32 bus_width, u32 type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
@@ -1261,7 +1306,7 @@ int sdmmc_storage_init_sd(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 bus_widt
|
|||||||
memset(storage, 0, sizeof(sdmmc_storage_t));
|
memset(storage, 0, sizeof(sdmmc_storage_t));
|
||||||
storage->sdmmc = sdmmc;
|
storage->sdmmc = sdmmc;
|
||||||
|
|
||||||
if (!sdmmc_init(sdmmc, SDMMC_1, SDMMC_POWER_3_3, SDMMC_BUS_WIDTH_1, SDHCI_TIMING_SD_ID, SDMMC_AUTO_CAL_DISABLE))
|
if (!sdmmc_init(sdmmc, SDMMC_1, SDMMC_POWER_3_3, SDMMC_BUS_WIDTH_1, SDHCI_TIMING_SD_ID, SDMMC_POWER_SAVE_DISABLE))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[SD] after init\n");
|
DPRINTF("[SD] after init\n");
|
||||||
|
|
||||||
@@ -1276,9 +1321,9 @@ DPRINTF("[SD] went to idle state\n");
|
|||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[SD] after send if cond\n");
|
DPRINTF("[SD] after send if cond\n");
|
||||||
|
|
||||||
bool supports_low_voltage = _sdmmc_storage_supports_low_voltage(bus_width, type);
|
bool bus_low_voltage_support = _sdmmc_storage_get_low_voltage_support(bus_width, type);
|
||||||
|
|
||||||
if (!_sd_storage_get_op_cond(storage, is_version_1, supports_low_voltage))
|
if (!_sd_storage_get_op_cond(storage, is_version_1, bus_low_voltage_support))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[SD] got op cond\n");
|
DPRINTF("[SD] got op cond\n");
|
||||||
|
|
||||||
@@ -1356,7 +1401,7 @@ DPRINTF("[SD] SD does not support wide bus width\n");
|
|||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[SD] enabled UHS\n");
|
DPRINTF("[SD] enabled UHS\n");
|
||||||
|
|
||||||
sdmmc_card_clock_ctrl(sdmmc, SDMMC_AUTO_CAL_ENABLE);
|
sdmmc_card_clock_powersave(sdmmc, SDMMC_POWER_SAVE_ENABLE);
|
||||||
}
|
}
|
||||||
else if (type != SDHCI_TIMING_SD_DS12 && (storage->scr.sda_vsn & 0xF) != 0)
|
else if (type != SDHCI_TIMING_SD_DS12 && (storage->scr.sda_vsn & 0xF) != 0)
|
||||||
{
|
{
|
||||||
@@ -1369,12 +1414,15 @@ DPRINTF("[SD] enabled HS\n");
|
|||||||
case SDMMC_BUS_WIDTH_4:
|
case SDMMC_BUS_WIDTH_4:
|
||||||
storage->csd.busspeed = 25;
|
storage->csd.busspeed = 25;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDMMC_BUS_WIDTH_1:
|
case SDMMC_BUS_WIDTH_1:
|
||||||
storage->csd.busspeed = 6;
|
storage->csd.busspeed = 6;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
storage->initialized = 1;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1414,17 +1462,19 @@ int sdmmc_storage_init_gc(sdmmc_storage_t *storage, sdmmc_t *sdmmc)
|
|||||||
memset(storage, 0, sizeof(sdmmc_storage_t));
|
memset(storage, 0, sizeof(sdmmc_storage_t));
|
||||||
storage->sdmmc = sdmmc;
|
storage->sdmmc = sdmmc;
|
||||||
|
|
||||||
if (!sdmmc_init(sdmmc, SDMMC_2, SDMMC_POWER_1_8, SDMMC_BUS_WIDTH_8, SDHCI_TIMING_MMC_DDR52, SDMMC_AUTO_CAL_DISABLE))
|
if (!sdmmc_init(sdmmc, SDMMC_2, SDMMC_POWER_1_8, SDMMC_BUS_WIDTH_8, SDHCI_TIMING_MMC_HS102, SDMMC_POWER_SAVE_DISABLE))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[gc] after init\n");
|
DPRINTF("[gc] after init\n");
|
||||||
|
|
||||||
usleep(1000 + (10000 + sdmmc->divisor - 1) / sdmmc->divisor);
|
usleep(1000 + (10000 + sdmmc->divisor - 1) / sdmmc->divisor);
|
||||||
|
|
||||||
if (!sdmmc_tuning_execute(storage->sdmmc, SDHCI_TIMING_MMC_DDR52, MMC_SEND_TUNING_BLOCK_HS200))
|
if (!sdmmc_tuning_execute(storage->sdmmc, SDHCI_TIMING_MMC_HS102, MMC_SEND_TUNING_BLOCK_HS200))
|
||||||
return 0;
|
return 0;
|
||||||
DPRINTF("[gc] after tuning\n");
|
DPRINTF("[gc] after tuning\n");
|
||||||
|
|
||||||
sdmmc_card_clock_ctrl(sdmmc, SDMMC_AUTO_CAL_ENABLE);
|
sdmmc_card_clock_powersave(sdmmc, SDMMC_POWER_SAVE_ENABLE);
|
||||||
|
|
||||||
|
storage->initialized = 1;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
11
emummc/source/emmc/sdmmc.h
vendored
11
emummc/source/emmc/sdmmc.h
vendored
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
* Copyright (c) 2018 CTCaer
|
* Copyright (c) 2018-2020 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -54,16 +54,19 @@ typedef struct _mmc_csd
|
|||||||
|
|
||||||
typedef struct _mmc_ext_csd
|
typedef struct _mmc_ext_csd
|
||||||
{
|
{
|
||||||
u8 rev;
|
|
||||||
u32 sectors;
|
u32 sectors;
|
||||||
int bkops; /* background support bit */
|
int bkops; /* background support bit */
|
||||||
int bkops_en; /* manual bkops enable bit */
|
int bkops_en; /* manual bkops enable bit */
|
||||||
|
u8 rev;
|
||||||
u8 ext_struct; /* 194 */
|
u8 ext_struct; /* 194 */
|
||||||
u8 card_type; /* 196 */
|
u8 card_type; /* 196 */
|
||||||
u8 bkops_status; /* 246 */
|
u8 bkops_status; /* 246 */
|
||||||
u16 dev_version;
|
u8 pre_eol_info;
|
||||||
|
u8 dev_life_est_a;
|
||||||
|
u8 dev_life_est_b;
|
||||||
u8 boot_mult;
|
u8 boot_mult;
|
||||||
u8 rpmb_mult;
|
u8 rpmb_mult;
|
||||||
|
u16 dev_version;
|
||||||
} mmc_ext_csd_t;
|
} mmc_ext_csd_t;
|
||||||
|
|
||||||
typedef struct _sd_scr
|
typedef struct _sd_scr
|
||||||
@@ -81,6 +84,7 @@ typedef struct _sd_ssr
|
|||||||
u8 uhs_grade;
|
u8 uhs_grade;
|
||||||
u8 video_class;
|
u8 video_class;
|
||||||
u8 app_class;
|
u8 app_class;
|
||||||
|
u32 protected_size;
|
||||||
} sd_ssr_t;
|
} sd_ssr_t;
|
||||||
|
|
||||||
/*! SDMMC storage context. */
|
/*! SDMMC storage context. */
|
||||||
@@ -99,6 +103,7 @@ typedef struct _sdmmc_storage_t
|
|||||||
mmc_csd_t csd;
|
mmc_csd_t csd;
|
||||||
mmc_ext_csd_t ext_csd;
|
mmc_ext_csd_t ext_csd;
|
||||||
sd_scr_t scr;
|
sd_scr_t scr;
|
||||||
|
int initialized;
|
||||||
} sdmmc_storage_t;
|
} sdmmc_storage_t;
|
||||||
|
|
||||||
extern sdmmc_accessor_t *_current_accessor;
|
extern sdmmc_accessor_t *_current_accessor;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user