mirror of
https://github.com/AuroraWright/SafeA9LHInstaller.git
synced 2025-06-26 13:42:45 +00:00
Cleaned-up i2c code, fixed wrong comments
This commit is contained in:
parent
d522481d44
commit
1698c8afe5
@ -314,12 +314,13 @@ void writeFirm(u8 *inbuf, u32 firm, u32 size){
|
||||
sdmmc_nand_writesectors(offset / 0x200, size / 0x200, inbuf);
|
||||
}
|
||||
|
||||
//Setup keyslot 0x11 for key sector de/encryption
|
||||
void setupKeyslot0x11(const u8 *otp){
|
||||
u8 shasum[0x20];
|
||||
u8 keyX[0x10];
|
||||
u8 keyY[0x10];
|
||||
|
||||
//Set keyX and keyY for key sector encryption
|
||||
//Set keyX and keyY
|
||||
sha(shasum, otp, 0x90, SHA_256_MODE);
|
||||
memcpy(keyX, shasum, 0x10);
|
||||
memcpy(keyY, shasum + 0x10, 0x10);
|
||||
@ -327,7 +328,7 @@ void setupKeyslot0x11(const u8 *otp){
|
||||
aes_setkey(0x11, keyY, AES_KEYY, AES_INPUT_BE | AES_INPUT_NORMAL);
|
||||
}
|
||||
|
||||
//Get Nand CTR key
|
||||
//Generate and encrypt an A9LH key sector
|
||||
void generateSector(u8 *keySector){
|
||||
//Inject A9LH key2
|
||||
memcpy(keySector + 0x10, a9lhKey2, 0x10);
|
||||
@ -338,7 +339,7 @@ void generateSector(u8 *keySector){
|
||||
aes(keySector + (0x10 * i), keySector + (0x10 * i), 1, NULL, AES_ECB_ENCRYPT_MODE, 0);
|
||||
}
|
||||
|
||||
//Get Nand CTR key
|
||||
//Test the OTP to be correct by verifying key2
|
||||
u32 testOtp(u32 mode){
|
||||
//Read keysector from NAND
|
||||
sdmmc_nand_readsectors(0x96, 0x1, (vu8 *)0x24500000);
|
||||
@ -352,6 +353,7 @@ u32 testOtp(u32 mode){
|
||||
return 1;
|
||||
}
|
||||
|
||||
//Check SHA256 hash
|
||||
u32 verifyHash(const void *data, u32 size, const u8 *hash){
|
||||
u8 shasum[0x20];
|
||||
sha(shasum, data, size, SHA_256_MODE);
|
||||
|
@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "../../types.h"
|
@ -402,7 +402,6 @@ int sdmmc_sdcard_init()
|
||||
return result | SD_Init();
|
||||
}
|
||||
|
||||
|
||||
int sdmmc_get_cid( int isNand, uint32_t *info)
|
||||
{
|
||||
struct mmcdevice *device;
|
||||
|
24
source/i2c.c
24
source/i2c.c
@ -10,11 +10,11 @@ static const struct { u8 bus_id, reg_addr; } dev_data[] = {
|
||||
{2, 0xA4}, {2, 0x9A}, {2, 0xA0},
|
||||
};
|
||||
|
||||
inline u8 i2cGetDeviceBusId(u8 device_id) {
|
||||
static inline u8 i2cGetDeviceBusId(u8 device_id) {
|
||||
return dev_data[device_id].bus_id;
|
||||
}
|
||||
|
||||
inline u8 i2cGetDeviceRegAddr(u8 device_id) {
|
||||
static inline u8 i2cGetDeviceRegAddr(u8 device_id) {
|
||||
return dev_data[device_id].reg_addr;
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ static vu8* reg_data_addrs[] = {
|
||||
(vu8*)(I2C3_REG_OFF + I2C_REG_DATA),
|
||||
};
|
||||
|
||||
inline vu8* i2cGetDataReg(u8 bus_id) {
|
||||
static inline vu8* i2cGetDataReg(u8 bus_id) {
|
||||
return reg_data_addrs[bus_id];
|
||||
}
|
||||
|
||||
@ -38,22 +38,22 @@ static vu8* reg_cnt_addrs[] = {
|
||||
(vu8*)(I2C3_REG_OFF + I2C_REG_CNT),
|
||||
};
|
||||
|
||||
inline vu8* i2cGetCntReg(u8 bus_id) {
|
||||
static inline vu8* i2cGetCntReg(u8 bus_id) {
|
||||
return reg_cnt_addrs[bus_id];
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
inline void i2cWaitBusy(u8 bus_id) {
|
||||
static inline void i2cWaitBusy(u8 bus_id) {
|
||||
while (*i2cGetCntReg(bus_id) & 0x80);
|
||||
}
|
||||
|
||||
inline bool i2cGetResult(u8 bus_id) {
|
||||
static inline u32 i2cGetResult(u8 bus_id) {
|
||||
i2cWaitBusy(bus_id);
|
||||
return (*i2cGetCntReg(bus_id) >> 4) & 1;
|
||||
}
|
||||
|
||||
void i2cStop(u8 bus_id, u8 arg0) {
|
||||
static void i2cStop(u8 bus_id, u8 arg0) {
|
||||
*i2cGetCntReg(bus_id) = (arg0 << 5) | 0xC0;
|
||||
i2cWaitBusy(bus_id);
|
||||
*i2cGetCntReg(bus_id) = 0xC5;
|
||||
@ -61,14 +61,14 @@ void i2cStop(u8 bus_id, u8 arg0) {
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
bool i2cSelectDevice(u8 bus_id, u8 dev_reg) {
|
||||
static u32 i2cSelectDevice(u8 bus_id, u8 dev_reg) {
|
||||
i2cWaitBusy(bus_id);
|
||||
*i2cGetDataReg(bus_id) = dev_reg;
|
||||
*i2cGetCntReg(bus_id) = 0xC2;
|
||||
return i2cGetResult(bus_id);
|
||||
}
|
||||
|
||||
bool i2cSelectRegister(u8 bus_id, u8 reg) {
|
||||
static u32 i2cSelectRegister(u8 bus_id, u8 reg) {
|
||||
i2cWaitBusy(bus_id);
|
||||
*i2cGetDataReg(bus_id) = reg;
|
||||
*i2cGetCntReg(bus_id) = 0xC0;
|
||||
@ -77,7 +77,7 @@ bool i2cSelectRegister(u8 bus_id, u8 reg) {
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
bool i2cWriteRegister(u8 dev_id, u8 reg, u8 data) {
|
||||
u32 i2cWriteRegister(u8 dev_id, u8 reg, u8 data) {
|
||||
u8 bus_id = i2cGetDeviceBusId(dev_id);
|
||||
u8 dev_addr = i2cGetDeviceRegAddr(dev_id);
|
||||
|
||||
@ -88,11 +88,11 @@ bool i2cWriteRegister(u8 dev_id, u8 reg, u8 data) {
|
||||
*i2cGetCntReg(bus_id) = 0xC1;
|
||||
i2cStop(bus_id, 0);
|
||||
if (i2cGetResult(bus_id))
|
||||
return true;
|
||||
return 1;
|
||||
}
|
||||
*i2cGetCntReg(bus_id) = 0xC5;
|
||||
i2cWaitBusy(bus_id);
|
||||
}
|
||||
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
16
source/i2c.h
16
source/i2c.h
@ -15,18 +15,4 @@
|
||||
#define I2C_DEV_GYRO 10
|
||||
#define I2C_DEV_IR 13
|
||||
|
||||
u8 i2cGetDeviceBusId(u8 device_id);
|
||||
u8 i2cGetDeviceRegAddr(u8 device_id);
|
||||
|
||||
vu8* i2cGetDataReg(u8 bus_id);
|
||||
vu8* i2cGetCntReg(u8 bus_id);
|
||||
|
||||
void i2cWaitBusy(u8 bus_id);
|
||||
bool i2cGetResult(u8 bus_id);
|
||||
u8 i2cGetData(u8 bus_id);
|
||||
void i2cStop(u8 bus_id, u8 arg0);
|
||||
|
||||
bool i2cSelectDevice(u8 bus_id, u8 dev_reg);
|
||||
bool i2cSelectRegister(u8 bus_id, u8 reg);
|
||||
|
||||
bool i2cWriteRegister(u8 dev_id, u8 reg, u8 data);
|
||||
u32 i2cWriteRegister(u8 dev_id, u8 reg, u8 data);
|
@ -6,7 +6,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user