@ -93,13 +93,13 @@
DECLARE_GLOBAL_DATA_PTR ;
/* special size referring to all the remaining space in a partition */
# define SIZE_REMAINING 0xFFFFFFFF
# define SIZE_REMAINING (~0llu)
/* special offset value, it is used when not provided by user
*
* this value is used temporarily during parsing , later such offests
* are recalculated */
# define OFFSET_NOT_SPECIFIED 0xFFFFFFFF
# define OFFSET_NOT_SPECIFIED (~0llu)
/* minimum partition size */
# define MIN_PART_SIZE 4096
@ -160,9 +160,9 @@ static int device_del(struct mtd_device *dev);
* @ param retptr output pointer to next char after parse completes ( output )
* @ return resulting unsigned int
*/
static unsigned long memsize_parse ( const char * const ptr , const char * * retptr )
static u64 memsize_parse ( const char * const ptr , const char * * retptr )
{
unsigned long ret = simple_strtoul ( ptr , ( char * * ) retptr , 0 ) ;
u64 ret = simple_strtoul l ( ptr , ( char * * ) retptr , 0 ) ;
switch ( * * retptr ) {
case ' G ' :
@ -193,20 +193,20 @@ static unsigned long memsize_parse (const char *const ptr, const char **retptr)
* @ param buf output buffer
* @ param size size to be converted to string
*/
static void memsize_format ( char * buf , u32 size )
static void memsize_format ( char * buf , u64 size )
{
# define SIZE_GB ((u32)1024*1024*1024)
# define SIZE_MB ((u32)1024*1024)
# define SIZE_KB ((u32)1024)
if ( ( size % SIZE_GB ) = = 0 )
sprintf ( buf , " %ug " , size / SIZE_GB ) ;
sprintf ( buf , " %ll ug " , size / SIZE_GB ) ;
else if ( ( size % SIZE_MB ) = = 0 )
sprintf ( buf , " %um " , size / SIZE_MB ) ;
sprintf ( buf , " %ll um " , size / SIZE_MB ) ;
else if ( size % SIZE_KB = = 0 )
sprintf ( buf , " %uk " , size / SIZE_KB ) ;
sprintf ( buf , " %ll uk " , size / SIZE_KB ) ;
else
sprintf ( buf , " %u " , size ) ;
sprintf ( buf , " %ll u " , size ) ;
}
/**
@ -310,6 +310,7 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part)
struct mtd_info * mtd = NULL ;
int i , j ;
ulong start ;
u64 offset , size ;
if ( get_mtd_info ( id - > type , id - > num , & mtd ) )
return 1 ;
@ -321,14 +322,16 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part)
* Only one eraseregion ( NAND , OneNAND or uniform NOR ) ,
* checking for alignment is easy here
*/
if ( ( unsigned long ) part - > offset % mtd - > erasesize ) {
offset = part - > offset ;
if ( do_div ( offset , mtd - > erasesize ) ) {
printf ( " %s%d: partition (%s) start offset "
" alignment incorrect \n " ,
MTD_DEV_TYPE ( id - > type ) , id - > num , part - > name ) ;
return 1 ;
}
if ( part - > size % mtd - > erasesize ) {
size = part - > size ;
if ( do_div ( size , mtd - > erasesize ) ) {
printf ( " %s%d: partition (%s) size alignment incorrect \n " ,
MTD_DEV_TYPE ( id - > type ) , id - > num , part - > name ) ;
return 1 ;
@ -395,7 +398,7 @@ static int part_validate(struct mtdids *id, struct part_info *part)
part - > size = id - > size - part - > offset ;
if ( part - > offset > id - > size ) {
printf ( " %s: offset %08x beyond flash size %08x \n " ,
printf ( " %s: offset %08ll x beyond flash size %08ll x \n " ,
id - > mtd_id , part - > offset , id - > size ) ;
return 1 ;
}
@ -578,8 +581,8 @@ static int part_add(struct mtd_device *dev, struct part_info *part)
static int part_parse ( const char * const partdef , const char * * ret , struct part_info * * retpart )
{
struct part_info * part ;
unsigned long size ;
unsigned long offset ;
u64 size ;
u64 offset ;
const char * name ;
int name_len ;
unsigned int mask_flags ;
@ -598,7 +601,7 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
} else {
size = memsize_parse ( p , & p ) ;
if ( size < MIN_PART_SIZE ) {
printf ( " partition size too small (%lx) \n " , size ) ;
printf ( " partition size too small (%ll x) \n " , size ) ;
return 1 ;
}
}
@ -670,14 +673,14 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
part - > auto_name = 0 ;
} else {
/* auto generated name in form of size@offset */
sprintf ( part - > name , " 0x%08lx@0x%08lx " , size , offset ) ;
sprintf ( part - > name , " 0x%08ll x@0x%08l lx " , size , offset ) ;
part - > auto_name = 1 ;
}
part - > name [ name_len - 1 ] = ' \0 ' ;
INIT_LIST_HEAD ( & part - > link ) ;
debug ( " + partition: name %-22s size 0x%08x offset 0x%08x mask flags %d \n " ,
debug ( " + partition: name %-22s size 0x%08ll x offset 0x%08ll x mask flags %d \n " ,
part - > name , part - > size ,
part - > offset , part - > mask_flags ) ;
@ -693,7 +696,7 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
* @ param size a pointer to the size of the mtd device ( output )
* @ return 0 if device is valid , 1 otherwise
*/
static int mtd_device_validate ( u8 type , u8 num , u32 * size )
static int mtd_device_validate ( u8 type , u8 num , u64 * size )
{
struct mtd_info * mtd = NULL ;
@ -826,7 +829,7 @@ static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_
LIST_HEAD ( tmp_list ) ;
struct list_head * entry , * n ;
u16 num_parts ;
u32 offset ;
u64 offset ;
int err = 1 ;
debug ( " ===device_parse=== \n " ) ;
@ -1071,7 +1074,8 @@ static int generate_mtdparts(char *buf, u32 buflen)
struct part_info * part , * prev_part ;
char * p = buf ;
char tmpbuf [ 32 ] ;
u32 size , offset , len , part_cnt ;
u64 size , offset ;
u32 len , part_cnt ;
u32 maxlen = buflen - 1 ;
debug ( " --- generate_mtdparts --- \n " ) ;
@ -1270,7 +1274,7 @@ static void print_partition_table(void)
list_for_each ( pentry , & dev - > parts ) {
part = list_entry ( pentry , struct part_info , link ) ;
printf ( " %2d: %-20s0x%08x \t 0x%08x \t %d \n " ,
printf ( " %2d: %-20s0x%08ll x \t 0x%08ll x \t %d \n " ,
part_num , part - > name , part - > size ,
part - > offset , part - > mask_flags ) ;
# endif /* defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) */
@ -1297,7 +1301,7 @@ static void list_partitions(void)
if ( current_mtd_dev ) {
part = mtd_part_info ( current_mtd_dev , current_mtd_partnum ) ;
if ( part ) {
printf ( " \n active partition: %s%d,%d - (%s) 0x%08x @ 0x%08x \n " ,
printf ( " \n active partition: %s%d,%d - (%s) 0x%08ll x @ 0x%08ll x \n " ,
MTD_DEV_TYPE ( current_mtd_dev - > id - > type ) ,
current_mtd_dev - > id - > num , current_mtd_partnum ,
part - > name , part - > size , part - > offset ) ;
@ -1397,7 +1401,7 @@ static int delete_partition(const char *id)
if ( find_dev_and_part ( id , & dev , & pnum , & part ) = = 0 ) {
debug ( " delete_partition: device = %s%d, partition %d = (%s) 0x%08x@0x%08x \n " ,
debug ( " delete_partition: device = %s%d, partition %d = (%s) 0x%08ll x@0x%08ll x \n " ,
MTD_DEV_TYPE ( dev - > id - > type ) , dev - > id - > num , pnum ,
part - > name , part - > size , part - > offset ) ;
@ -1589,7 +1593,7 @@ static int parse_mtdids(const char *const ids)
struct list_head * entry , * n ;
struct mtdids * id_tmp ;
u8 type , num ;
u32 size ;
u64 size ;
int ret = 1 ;
debug ( " \n ---parse_mtdids--- \n mtdids = %s \n \n " , ids ) ;
@ -1663,7 +1667,7 @@ static int parse_mtdids(const char *const ids)
id - > mtd_id [ mtd_id_len - 1 ] = ' \0 ' ;
INIT_LIST_HEAD ( & id - > link ) ;
debug ( " + id %s%d \t %16d bytes \t %s \n " ,
debug ( " + id %s%d \t %16ll d bytes \t %s \n " ,
MTD_DEV_TYPE ( id - > type ) , id - > num ,
id - > size , id - > mtd_id ) ;