#include #include "nand.h" // indexes of OSes as used in Ndless enum { OSCL31N,OSCL31C,OSCX31N,OSCX31C,OSCM31N,OSCM31C, OSCL36N,OSCL36C,OSCX36N,OSCX36C, OSCL390N,OSCL390C,OSCX390N,OSCX390C, OSCL391N,OSCL391C,OSCX391N,OSCX391C, OSCX400N,OSCX400C, OSCX403N,OSCX403C, OSCX42N,OSCX42C, OSCX43N,OSCX43C, OSCX44N,OSCX44C, OSCX450N,OSCX450C, OSCX451N,OSCX451C, OSCX453N,OSCX453C, OSCXII52N,OSCXII52T,OSCXII52C, OSCX454N,OSCX454C, OSCXII53N,OSCXII53T,OSCXII53C, }; #define NOS (OSCXII53C+1) // get current OS index for Ndless int get_os() { int vals[NOS]; for(int i=0; i= OSCL31N && os <=OSCM31C && nl_ndless_rev() < 989) // Ndless 3.1 read_nand_31(dest, size, offset, unknown, percent_max, progress_cb); else read_nand(dest, size, offset, unknown, percent_max, progress_cb); } int ext_write_nand(void *source,int size, unsigned int offset) { int os = get_os(); if((os >= OSCXII52N && os <= OSCXII52C) || (os >= OSCXII53N && os <= OSCXII53C)) write_nand_cx2(offset, source, size); else if (os >= OSCL31N && os <=OSCM31C && nl_ndless_rev() < 989) // Ndless 3.1 write_nand_31(source, size, offset); else write_nand(source, size, offset); } int ext_erase_nand(int offset,int end) { int os = get_os(); if((os >= OSCXII52N && os <= OSCXII52C) || (os >= OSCXII53N && os <= OSCXII53C)) { int blocks = (int)((end+1-offset)/NAND_PAGE_SIZE/0x40); erase_nand_cx2(offset, blocks); } else if (os >= OSCL31N && os <=OSCM31C && nl_ndless_rev() < 989) // Ndless 3.1 erase_nand_31(offset, end); else nand_erase_range(offset, end); }