From 1698c8afe5ef49266fae029afee8730e0b860e97 Mon Sep 17 00:00:00 2001 From: Aurora Date: Sun, 20 Mar 2016 01:42:23 +0100 Subject: [PATCH] Cleaned-up i2c code, fixed wrong comments --- source/crypto.c | 8 +++++--- source/fatfs/sdmmc/common.h | 1 + source/fatfs/sdmmc/sdmmc.c | 3 +-- source/i2c.c | 24 ++++++++++++------------ source/i2c.h | 16 +--------------- source/types.h | 1 - 6 files changed, 20 insertions(+), 33 deletions(-) diff --git a/source/crypto.c b/source/crypto.c index 37f5450..6a040b0 100755 --- a/source/crypto.c +++ b/source/crypto.c @@ -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); diff --git a/source/fatfs/sdmmc/common.h b/source/fatfs/sdmmc/common.h index 3b77ae6..90a327e 100644 --- a/source/fatfs/sdmmc/common.h +++ b/source/fatfs/sdmmc/common.h @@ -1,3 +1,4 @@ #pragma once +#include #include "../../types.h" \ No newline at end of file diff --git a/source/fatfs/sdmmc/sdmmc.c b/source/fatfs/sdmmc/sdmmc.c index 0c4c05f..bee13d7 100644 --- a/source/fatfs/sdmmc/sdmmc.c +++ b/source/fatfs/sdmmc/sdmmc.c @@ -402,7 +402,6 @@ int sdmmc_sdcard_init() return result | SD_Init(); } - int sdmmc_get_cid( int isNand, uint32_t *info) { struct mmcdevice *device; @@ -443,4 +442,4 @@ int sdmmc_get_cid( int isNand, uint32_t *info) } return 0; -} +} \ No newline at end of file diff --git a/source/i2c.c b/source/i2c.c index 56266dc..6f03579 100644 --- a/source/i2c.c +++ b/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; } diff --git a/source/i2c.h b/source/i2c.h index b9764ff..00658ea 100644 --- a/source/i2c.h +++ b/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); \ No newline at end of file +u32 i2cWriteRegister(u8 dev_id, u8 reg, u8 data); \ No newline at end of file diff --git a/source/types.h b/source/types.h index be2a914..56d82bb 100644 --- a/source/types.h +++ b/source/types.h @@ -6,7 +6,6 @@ #pragma once -#include #include #include