Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
CTCaer
GitHub Repository: CTCaer/hekate
Path: blob/master/bdk/storage/nx_emmc_bis.h
3694 views
1
/*
2
* Copyright (c) 2019 shchmue
3
* Copyright (c) 2019 CTCaer
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms and conditions of the GNU General Public License,
7
* version 2, as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
* more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
*/
17
18
#ifndef NX_EMMC_BIS_H
19
#define NX_EMMC_BIS_H
20
21
#include <storage/emmc.h>
22
#include <storage/sdmmc.h>
23
24
#define NAND_PATROL_SECTOR 0xC20
25
26
typedef struct _nx_emmc_cal0_spk_t
27
{
28
u16 unk0;
29
u16 unk1;
30
u16 eq_bw_lop;
31
u16 eq_gn_lop;
32
u16 eq_fc_bp1;
33
u16 eq_bw_bp1;
34
u16 eq_gn_bp1;
35
u16 eq_fc_bp2;
36
u16 eq_bw_bp2;
37
u16 eq_gn_bp2;
38
u16 eq_fc_bp3;
39
u16 eq_bw_bp3;
40
u16 eq_gn_bp3;
41
u16 eq_fc_bp4;
42
u16 eq_bw_bp4;
43
u16 eq_gn_bp4;
44
u16 eq_fc_hip1;
45
u16 eq_gn_hip1;
46
u16 eq_fc_hip2;
47
u16 eq_bw_hip2;
48
u16 eq_gn_hip2;
49
u16 eq_pre_vol;
50
u16 eq_pst_vol;
51
u16 eq_ctrl2;
52
u16 eq_ctrl1;
53
u16 drc_agc_2;
54
u16 drc_agc_3;
55
u16 drc_agc_1;
56
u16 spk_vol;
57
u16 hp_vol;
58
u16 dac1_min_vol_spk;
59
u16 dac1_max_vol_spk;
60
u16 dac1_min_vol_hp;
61
u16 dac1_max_vol_hp;
62
u16 in1_in2;
63
u16 adc_vol_min;
64
u16 adc_vol_max;
65
u8 unk4[16];
66
} __attribute__((packed)) nx_emmc_cal0_spk_t;
67
68
typedef struct _nx_emmc_cal0_t
69
{
70
// Header.
71
u32 magic; // 'CAL0'.
72
u32 version;
73
u32 body_size;
74
u16 model;
75
u16 update_cnt;
76
u8 pad_crc16_hdr[0x10];
77
78
// SHA256 for body.
79
u8 body_sha256[0x20];
80
81
// Body.
82
char cfg_id1[0x1E];
83
u8 crc16_pad1[2];
84
u8 rsvd0[0x20];
85
u32 wlan_cc_num;
86
u32 wlan_cc_last;
87
char wlan_cc[128][3];
88
u8 crc16_pad2[8];
89
u8 wlan_mac[6];
90
u8 crc16_pad3[2];
91
u8 rsvd1[8];
92
u8 bd_mac[6];
93
u8 crc16_pad4[2];
94
u8 rsvd2[8];
95
u16 acc_offset[3];
96
u8 crc16_pad5[2];
97
u16 acc_scale[3];
98
u8 crc16_pad6[2];
99
u16 gyro_offset[3];
100
u8 crc16_pad7[2];
101
u16 gyro_scale[3];
102
u8 crc16_pad8[2];
103
char serial_number[0x18];
104
u8 crc16_pad9[8];
105
106
u8 ecc_p256_device_key[0x30];
107
u8 crc16_pad10[0x10];
108
u8 ecc_p256_device_cert[0x180];
109
u8 crc16_pad11[0x10];
110
u8 ecc_p233_device_key[0x30];
111
u8 crc16_pad12[0x10];
112
u8 ecc_p33_device_cert[0x180];
113
u8 crc16_pad13[0x10];
114
u8 ecc_p256_ticket_key[0x30];
115
u8 crc16_pad14[0x10];
116
u8 ecc_p256_ticket_cert[0x180];
117
u8 crc16_pad15[0x10];
118
u8 ecc_p233_ticket_key[0x30];
119
u8 crc16_pad16[0x10];
120
u8 ecc_p33_ticket_cert[0x180];
121
u8 crc16_pad17[0x10];
122
u8 ssl_key[0x110];
123
u8 crc16_pad18[0x10];
124
u32 ssl_cert_size;
125
u8 crc16_pad19[0xC];
126
u8 ssl_cert[0x800];
127
u8 ssl_sha256[0x20];
128
u8 random_number[0x1000];
129
u8 random_number_sha256[0x20];
130
u8 gc_key[0x110];
131
u8 crc16_pad20[0x10];
132
u8 gc_cert[0x400];
133
u8 gc_cert_sha256[0x20];
134
u8 rsa2048_eticket_key[0x220];
135
u8 crc16_pad21[0x10];
136
u8 rsa2048_eticket_cert[0x240];
137
u8 crc16_pad22[0x10];
138
139
char battery_lot[0x1E];
140
u8 crc16_pad23[2];
141
nx_emmc_cal0_spk_t spk_cal;
142
u8 spk_cal_rsvd[0x800 - sizeof(nx_emmc_cal0_spk_t)];
143
u8 crc16_pad24[0x10];
144
u32 region_code;
145
u8 crc16_pad25[0xC];
146
147
u8 amiibo_key[0x50];
148
u8 crc16_pad26[0x10];
149
u8 amiibo_ecqv_cert[0x14];
150
u8 crc16_pad27[0xC];
151
u8 amiibo_ecqdsa_cert[0x70];
152
u8 crc16_pad28[0x10];
153
u8 amiibo_ecqv_bls_key[0x40];
154
u8 crc16_pad29[0x10];
155
u8 amiibo_ecqv_bls_cert[0x20];
156
u8 crc16_pad30[0x10];
157
u8 amiibo_ecqv_bls_root_cert[0x90];
158
u8 crc16_pad31[0x10];
159
160
u32 product_model; // 1: Nx, 2: Copper, 4: Hoag.
161
u8 crc16_pad32[0xC];
162
u8 home_menu_scheme_main_color[6];
163
u8 crc16_pad33[0xA];
164
u32 lcd_bl_brightness_mapping[3]; // Floats. Normally 100%, 0% and 2%.
165
u8 crc16_pad34[0x4];
166
167
u8 ext_ecc_b233_device_key[0x50];
168
u8 crc16_pad35[0x10];
169
u8 ext_ecc_p256_eticket_key[0x50];
170
u8 crc16_pad36[0x10];
171
u8 ext_ecc_b233_eticket_key[0x50];
172
u8 crc16_pad37[0x10];
173
u8 ext_ecc_rsa2048_eticket_key[0x240];
174
u8 crc16_pad38[0x10];
175
u8 ext_ssl_key[0x130];
176
u8 crc16_pad39[0x10];
177
u8 ext_gc_key[0x130];
178
u8 crc16_pad40[0x10];
179
180
u32 lcd_vendor;
181
u8 crc16_pad41[0xC];
182
183
// 5.0.0 and up.
184
u8 ext_rsa2048_device_key[0x240];
185
u8 crc16_pad42[0x10];
186
u8 rsa2048_device_cert[0x240];
187
u8 crc16_pad43[0x10];
188
189
u8 usbc_pwr_src_circuit_ver;
190
u8 crc16_pad44[0xF];
191
192
// 9.0.0 and up.
193
u32 home_menu_scheme_sub_color;
194
u8 crc16_pad45[0xC];
195
u32 home_menu_scheme_bezel_color;
196
u8 crc16_pad46[0xC];
197
u32 home_menu_scheme_main_color1;
198
u8 crc16_pad47[0xC];
199
u32 home_menu_scheme_main_color2;
200
u8 crc16_pad48[0xC];
201
u32 home_menu_scheme_main_color3;
202
u8 crc16_pad49[0xC];
203
204
u8 analog_stick_type_l;
205
u8 crc16_pad50[0xF];
206
u8 analog_stick_param_l[0x12];
207
u8 crc16_pad51[0xE];
208
u8 analog_stick_cal_l[0x9];
209
u8 crc16_pad52[0x7];
210
u8 analog_stick_type_r;
211
u8 crc16_pad53[0xF];
212
u8 analog_stick_param_r[0x12];
213
u8 crc16_pad54[0xE];
214
u8 analog_stick_cal_r[0x9];
215
u8 crc16_pad55[0x7];
216
u8 console_6axis_sensor_type;
217
u8 crc16_pad56[0xF];
218
u8 console_6axis_sensor_hor_off[0x6];
219
u8 crc16_pad57[0xA];
220
221
// 6.0.0 and up.
222
u8 battery_ver;
223
u8 crc16_pad58[0xF];
224
225
// 10.0.0 and up.
226
u8 touch_ic_vendor_id;
227
u8 crc16_pad59[0xF];
228
229
// 9.0.0 and up.
230
u32 color_model;
231
u8 crc16_pad60[0xC];
232
233
// 10.0.0 and up.
234
u8 console_6axis_sensor_mount_type;
235
u8 crc16_pad61[0xF];
236
} __attribute__((packed)) nx_emmc_cal0_t;
237
238
int nx_emmc_bis_read(u32 sector, u32 count, void *buff);
239
int nx_emmc_bis_write(u32 sector, u32 count, void *buff);
240
void nx_emmc_bis_init(emmc_part_t *part, bool enable_cache, u32 emummc_offset);
241
void nx_emmc_bis_end();
242
243
#endif
244
245