#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, OSCX455N, OSCX455C, OSCXII62N, OSCXII62T, OSCXII62C, N_OS }; // get current OS index for Ndless int get_os() { unsigned int vals[N_OS]; 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) || (os >= OSCXII62N && os <= OSCXII62C)) { while(size) { uint32_t tsize = (size > NAND_BLOCK_SIZE) ? NAND_BLOCK_SIZE : size; write_nand_cx2(offset, source, size); size -= tsize; offset += tsize; source += tsize; } } else if (os >= OSCL31N && os <=OSCM31C && nl_ndless_rev() < 989) // Ndless 3.1 return write_nand_31(source, size, offset); else return 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) || (os >= OSCXII62N && os <= OSCXII62C)) { int blocks = (int)((end+1-offset)/NAND_PAGE_SIZE/0x40); return erase_nand_cx2(offset, blocks); } else if (os >= OSCL31N && os <=OSCM31C && nl_ndless_rev() < 989) // Ndless 3.1 return erase_nand_31(offset, end); else return nand_erase_range(offset, end); }