diff options
| -rw-r--r-- | board/esd/common/auto_update.c | 3 | ||||
| -rw-r--r-- | board/mcc200/auto_update.c | 3 | ||||
| -rw-r--r-- | board/mpl/mip405/mip405.c | 3 | ||||
| -rw-r--r-- | board/trab/auto_update.c | 1 | ||||
| -rw-r--r-- | common/cmd_ext2.c | 40 | ||||
| -rw-r--r-- | common/cmd_fat.c | 37 | ||||
| -rw-r--r-- | common/cmd_ide.c | 8 | ||||
| -rw-r--r-- | common/cmd_reiser.c | 40 | ||||
| -rw-r--r-- | common/cmd_scsi.c | 2 | ||||
| -rw-r--r-- | common/cmd_usb.c | 1 | ||||
| -rw-r--r-- | common/usb_storage.c | 3 | ||||
| -rw-r--r-- | cpu/pxa/mmc.c | 2 | ||||
| -rw-r--r-- | disk/part.c | 49 | ||||
| -rw-r--r-- | include/ide.h | 6 | ||||
| -rw-r--r-- | include/part.h | 9 | 
15 files changed, 82 insertions, 125 deletions
| diff --git a/board/esd/common/auto_update.c b/board/esd/common/auto_update.c index 5cd342332..001fd68da 100644 --- a/board/esd/common/auto_update.c +++ b/board/esd/common/auto_update.c @@ -33,6 +33,7 @@  #include <asm/byteorder.h>  #include <linux/mtd/nand_legacy.h>  #include <fat.h> +#include <part.h>  #include "auto_update.h" @@ -71,8 +72,6 @@ extern int transfer_pic(unsigned char, unsigned char *, int, int);  extern int flash_sect_erase(ulong, ulong);  extern int flash_sect_protect (int, ulong, ulong);  extern int flash_write (char *, ulong, ulong); -/* change char* to void* to shutup the compiler */ -extern block_dev_desc_t *get_dev (char*, int);  #if (CONFIG_COMMANDS & CFG_CMD_NAND) && defined(CFG_NAND_LEGACY)  /* references to names in cmd_nand.c */ diff --git a/board/mcc200/auto_update.c b/board/mcc200/auto_update.c index 12091fd78..df003fe8b 100644 --- a/board/mcc200/auto_update.c +++ b/board/mcc200/auto_update.c @@ -23,6 +23,7 @@  #include <image.h>  #include <asm/byteorder.h>  #include <usb.h> +#include <part.h>  #ifdef CFG_HUSH_PARSER  #include <hush.h> @@ -128,8 +129,6 @@ extern int i2c_read (unsigned char, unsigned int, int , unsigned char* , int);  extern int flash_sect_erase(ulong, ulong);  extern int flash_sect_protect (int, ulong, ulong);  extern int flash_write (char *, ulong, ulong); -/* change char* to void* to shutup the compiler */ -extern block_dev_desc_t *get_dev (char*, int);  extern int u_boot_hush_start(void);  int au_check_cksum_valid(int idx, long nbytes) diff --git a/board/mpl/mip405/mip405.c b/board/mpl/mip405/mip405.c index 34f328999..13249787d 100644 --- a/board/mpl/mip405/mip405.c +++ b/board/mpl/mip405/mip405.c @@ -73,9 +73,6 @@  DECLARE_GLOBAL_DATA_PTR; -extern block_dev_desc_t * scsi_get_dev(int dev); -extern block_dev_desc_t * ide_get_dev(int dev); -  #undef SDRAM_DEBUG  #define ENABLE_ECC /* for ecc boards */  #define FALSE           0 diff --git a/board/trab/auto_update.c b/board/trab/auto_update.c index d2c8d44a7..f4074aecb 100644 --- a/board/trab/auto_update.c +++ b/board/trab/auto_update.c @@ -203,7 +203,6 @@ extern int flash_write (char *, ulong, ulong);  /* change char* to void* to shutup the compiler */  extern int i2c_write_multiple (uchar, uint, int, void *, int);  extern int i2c_read_multiple (uchar, uint, int, void *, int); -extern block_dev_desc_t *get_dev (char*, int);  extern int u_boot_hush_start(void);  int diff --git a/common/cmd_ext2.c b/common/cmd_ext2.c index 5db42f2b0..94bd9b61e 100644 --- a/common/cmd_ext2.c +++ b/common/cmd_ext2.c @@ -33,6 +33,7 @@   * Ext2fs support   */  #include <common.h> +#include <part.h>  #if (CONFIG_COMMANDS & CFG_CMD_EXT2)  #include <config.h> @@ -57,41 +58,6 @@  #define PRINTF(fmt,args...)  #endif -static block_dev_desc_t *get_dev (char* ifname, int dev) -{ -#if (CONFIG_COMMANDS & CFG_CMD_IDE) -	if (strncmp(ifname,"ide",3)==0) { -		extern block_dev_desc_t * ide_get_dev(int dev); -		return((dev >= CFG_IDE_MAXDEVICE) ? NULL : ide_get_dev(dev)); -	} -#endif -#if (CONFIG_COMMANDS & CFG_CMD_SCSI) -	if (strncmp(ifname,"scsi",4)==0) { -		extern block_dev_desc_t * scsi_get_dev(int dev); -		return((dev >= CFG_SCSI_MAXDEVICE) ? NULL : scsi_get_dev(dev)); -	} -#endif -#if ((CONFIG_COMMANDS & CFG_CMD_USB) && defined(CONFIG_USB_STORAGE)) -	if (strncmp(ifname,"usb",3)==0) { -		extern block_dev_desc_t * usb_stor_get_dev(int dev); -		return((dev >= USB_MAX_STOR_DEV) ? NULL : usb_stor_get_dev(dev)); -	} -#endif -#if defined(CONFIG_MMC) -	if (strncmp(ifname,"mmc",3)==0) { -		extern block_dev_desc_t *  mmc_get_dev(int dev); -		return((dev >= 1) ? NULL : mmc_get_dev(dev)); -	} -#endif -#if defined(CONFIG_SYSTEMACE) -	if (strcmp(ifname,"ace")==0) { -		extern block_dev_desc_t *  systemace_get_dev(int dev); -		return((dev >= 1) ? NULL : systemace_get_dev(dev)); -	} -#endif -	return(NULL); -} -  int do_ext2ls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  {  	char *filename = "/"; @@ -106,7 +72,7 @@ int do_ext2ls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		return(1);  	}  	dev = (int)simple_strtoul (argv[2], &ep, 16); -	dev_desc=get_dev(argv[1],dev); +	dev_desc = get_dev(argv[1],dev);  	if (dev_desc == NULL) {  		printf ("\n** Block device %s %d not supported\n", argv[1], dev); @@ -210,7 +176,7 @@ int do_ext2load (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	}  	dev = (int)simple_strtoul (argv[2], &ep, 16); -	dev_desc=get_dev(argv[1],dev); +	dev_desc = get_dev(argv[1],dev);  	if (dev_desc==NULL) {  		printf ("\n** Block device %s %d not supported\n", argv[1], dev);  		return(1); diff --git a/common/cmd_fat.c b/common/cmd_fat.c index 6844c103f..afaf29956 100644 --- a/common/cmd_fat.c +++ b/common/cmd_fat.c @@ -29,6 +29,7 @@  #include <s_record.h>  #include <net.h>  #include <ata.h> +#include <part.h>  #if (CONFIG_COMMANDS & CFG_CMD_FAT) @@ -37,42 +38,6 @@  #include <fat.h> -block_dev_desc_t *get_dev (char* ifname, int dev) -{ -#if (CONFIG_COMMANDS & CFG_CMD_IDE) -	if (strncmp(ifname,"ide",3)==0) { -		extern block_dev_desc_t * ide_get_dev(int dev); -		return(ide_get_dev(dev)); -	} -#endif -#if (CONFIG_COMMANDS & CFG_CMD_SCSI) -	if (strncmp(ifname,"scsi",4)==0) { -		extern block_dev_desc_t * scsi_get_dev(int dev); -		return(scsi_get_dev(dev)); -	} -#endif -#if ((CONFIG_COMMANDS & CFG_CMD_USB) && defined(CONFIG_USB_STORAGE)) -	if (strncmp(ifname,"usb",3)==0) { -		extern block_dev_desc_t * usb_stor_get_dev(int dev); -		return(usb_stor_get_dev(dev)); -	} -#endif -#if defined(CONFIG_MMC) -	if (strncmp(ifname,"mmc",3)==0) { -		extern block_dev_desc_t *  mmc_get_dev(int dev); -		return(mmc_get_dev(dev)); -	} -#endif -#if defined(CONFIG_SYSTEMACE) -	if (strcmp(ifname,"ace")==0) { -		extern block_dev_desc_t *  systemace_get_dev(int dev); -		return(systemace_get_dev(dev)); -	} -#endif -	return NULL; -} - -  int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  {  	long size; diff --git a/common/cmd_ide.c b/common/cmd_ide.c index a4155029a..ebc080c72 100644 --- a/common/cmd_ide.c +++ b/common/cmd_ide.c @@ -31,20 +31,26 @@  #include <command.h>  #include <image.h>  #include <asm/byteorder.h> +  #if defined(CONFIG_IDE_8xx_DIRECT) || defined(CONFIG_IDE_PCMCIA)  # include <pcmcia.h>  #endif +  #ifdef CONFIG_8xx  # include <mpc8xx.h>  #endif +  #ifdef CONFIG_MPC5xxx  #include <mpc5xxx.h>  #endif +  #include <ide.h>  #include <ata.h> +  #ifdef CONFIG_STATUS_LED  # include <status_led.h>  #endif +  #ifndef __PPC__  #include <asm/io.h>  #ifdef __MIPS__ @@ -697,7 +703,7 @@ void ide_init (void)  block_dev_desc_t * ide_get_dev(int dev)  { -	return ((block_dev_desc_t *)&ide_dev_desc[dev]); +	return (dev < CFG_IDE_MAXDEVICE) ? &ide_dev_desc[dev] : NULL;  } diff --git a/common/cmd_reiser.c b/common/cmd_reiser.c index 508ffcbda..09c86e66d 100644 --- a/common/cmd_reiser.c +++ b/common/cmd_reiser.c @@ -35,6 +35,7 @@  #include <linux/ctype.h>  #include <asm/byteorder.h>  #include <reiserfs.h> +#include <part.h>  #ifndef CONFIG_DOS_PARTITION  #error DOS partition support must be selected @@ -48,41 +49,6 @@  #define PRINTF(fmt,args...)  #endif -static block_dev_desc_t *get_dev (char* ifname, int dev) -{ -#if (CONFIG_COMMANDS & CFG_CMD_IDE) -	if (strncmp(ifname,"ide",3)==0) { -		extern block_dev_desc_t * ide_get_dev(int dev); -		return((dev >= CFG_IDE_MAXDEVICE) ? NULL : ide_get_dev(dev)); -	} -#endif -#if (CONFIG_COMMANDS & CFG_CMD_SCSI) -	if (strncmp(ifname,"scsi",4)==0) { -		extern block_dev_desc_t * scsi_get_dev(int dev); -		return((dev >= CFG_SCSI_MAXDEVICE) ? NULL : scsi_get_dev(dev)); -	} -#endif -#if ((CONFIG_COMMANDS & CFG_CMD_USB) && defined(CONFIG_USB_STORAGE)) -	if (strncmp(ifname,"usb",3)==0) { -		extern block_dev_desc_t * usb_stor_get_dev(int dev); -		return((dev >= USB_MAX_STOR_DEV) ? NULL : usb_stor_get_dev(dev)); -	} -#endif -#if defined(CONFIG_MMC) -	if (strncmp(ifname,"mmc",3)==0) { -		extern block_dev_desc_t *  mmc_get_dev(int dev); -		return((dev >= 1) ? NULL : mmc_get_dev(dev)); -	} -#endif -#if defined(CONFIG_SYSTEMACE) -	if (strcmp(ifname,"ace")==0) { -		extern block_dev_desc_t *  systemace_get_dev(int dev); -		return((dev >= 1) ? NULL : systemace_get_dev(dev)); -	} -#endif -	return NULL; -} -  int do_reiserls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  {  	char *filename = "/"; @@ -97,7 +63,7 @@ int do_reiserls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		return 1;  	}  	dev = (int)simple_strtoul (argv[2], &ep, 16); -	dev_desc=get_dev(argv[1],dev); +	dev_desc = get_dev(argv[1],dev);  	if (dev_desc == NULL) {  		printf ("\n** Block device %s %d not supported\n", argv[1], dev); @@ -196,7 +162,7 @@ int do_reiserload (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	}  	dev = (int)simple_strtoul (argv[2], &ep, 16); -	dev_desc=get_dev(argv[1],dev); +	dev_desc = get_dev(argv[1],dev);  	if (dev_desc==NULL) {  		printf ("\n** Block device %s %d not supported\n", argv[1], dev);  		return 1; diff --git a/common/cmd_scsi.c b/common/cmd_scsi.c index cc08743d5..b17bebbac 100644 --- a/common/cmd_scsi.c +++ b/common/cmd_scsi.c @@ -194,7 +194,7 @@ void scsi_init(void)  block_dev_desc_t * scsi_get_dev(int dev)  { -	return((block_dev_desc_t *)&scsi_dev_desc[dev]); +	return (dev < CFG_SCSI_MAX_DEVICE) ? &scsi_dev_desc[dev] : NULL;  } diff --git a/common/cmd_usb.c b/common/cmd_usb.c index 28c05aa20..904df7159 100644 --- a/common/cmd_usb.c +++ b/common/cmd_usb.c @@ -28,6 +28,7 @@  #include <common.h>  #include <command.h>  #include <asm/byteorder.h> +#include <part.h>  #if (CONFIG_COMMANDS & CFG_CMD_USB) diff --git a/common/usb_storage.c b/common/usb_storage.c index 06ea99b2f..b4b791408 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -56,6 +56,7 @@  #if (CONFIG_COMMANDS & CFG_CMD_USB) +#include <part.h>  #include <usb.h>  #ifdef CONFIG_USB_STORAGE @@ -174,7 +175,7 @@ void uhci_show_temp_int_td(void);  block_dev_desc_t *usb_stor_get_dev(int index)  { -	return &usb_dev_desc[index]; +	return (index < USB_MAX_STOR_DEV) ? &usb_dev_desc[index] : NULL;  } diff --git a/cpu/pxa/mmc.c b/cpu/pxa/mmc.c index f7020eec9..c57d0d5c3 100644 --- a/cpu/pxa/mmc.c +++ b/cpu/pxa/mmc.c @@ -37,7 +37,7 @@ static block_dev_desc_t mmc_dev;  block_dev_desc_t * mmc_get_dev(int dev)  { -	return ((block_dev_desc_t *)&mmc_dev); +	return (dev == 0) ? &mmc_dev : NULL;  }  /* diff --git a/disk/part.c b/disk/part.c index 2255e726c..f1026c5ef 100644 --- a/disk/part.c +++ b/disk/part.c @@ -24,6 +24,7 @@  #include <common.h>  #include <command.h>  #include <ide.h> +#include <part.h>  #undef	PART_DEBUG @@ -39,6 +40,54 @@       defined(CONFIG_MMC) || \       defined(CONFIG_SYSTEMACE) ) +struct block_drvr { +	char *name; +	block_dev_desc_t* (*get_dev)(int dev); +}; + +static const struct block_drvr block_drvr[] = { +#if (CONFIG_COMMANDS & CFG_CMD_IDE) +	{ .name = "ide", .get_dev = ide_get_dev, }, +#endif +#if (CONFIG_COMMANDS & CFG_CMD_SCSI) +	{ .name = "scsi", .get_dev = scsi_get_dev, }, +#endif +#if ((CONFIG_COMMANDS & CFG_CMD_USB) && defined(CONFIG_USB_STORAGE)) +	{ .name = "usb", .get_dev = usb_stor_get_dev, }, +#endif +#if defined(CONFIG_MMC) +	{ .name = "mmc", .get_dev = mmc_get_dev, }, +#endif +#if defined(CONFIG_SYSTEMACE) +	{ .name = "ace", .get_dev = systemace_get_dev, }, +#endif +	{ }, +}; + +block_dev_desc_t *get_dev(char* ifname, int dev) +{ +	const struct block_drvr *drvr = block_drvr; + +	while (drvr->name) { +		if (strncmp(ifname, drvr->name, strlen(drvr->name)) == 0) +			return drvr->get_dev(dev); +		drvr++; +	} +	return NULL; +} +#else +block_dev_desc_t *get_dev(char* ifname, int dev) +{ +	return NULL; +} +#endif + +#if ((CONFIG_COMMANDS & CFG_CMD_IDE)	|| \ +     (CONFIG_COMMANDS & CFG_CMD_SCSI)	|| \ +     (CONFIG_COMMANDS & CFG_CMD_USB)	|| \ +     defined(CONFIG_MMC) || \ +     defined(CONFIG_SYSTEMACE) ) +  /* ------------------------------------------------------------------------- */  /*   * reports device info to the user diff --git a/include/ide.h b/include/ide.h index dfef32f26..e29ed36de 100644 --- a/include/ide.h +++ b/include/ide.h @@ -48,8 +48,8 @@ typedef ulong lbaint_t;   * Function Prototypes   */ -void  ide_init  (void); -ulong ide_read	(int device, lbaint_t blknr, ulong blkcnt, ulong *buffer); -ulong ide_write (int device, lbaint_t blknr, ulong blkcnt, ulong *buffer); +void ide_init(void); +ulong ide_read(int device, lbaint_t blknr, ulong blkcnt, ulong *buffer); +ulong ide_write(int device, lbaint_t blknr, ulong blkcnt, ulong *buffer);  #endif /* _IDE_H */ diff --git a/include/part.h b/include/part.h index 318aa3cb3..f89ebc6e7 100644 --- a/include/part.h +++ b/include/part.h @@ -22,6 +22,7 @@   */  #ifndef _PART_H  #define _PART_H +  #include <ide.h>  typedef struct block_dev_desc { @@ -83,6 +84,14 @@ typedef struct disk_partition {  	uchar	type[32];	/* string type description		*/  } disk_partition_t; +/* Misc _get_dev functions */ +block_dev_desc_t* get_dev(char* ifname, int dev); +block_dev_desc_t* ide_get_dev(int dev); +block_dev_desc_t* scsi_get_dev(int dev); +block_dev_desc_t* usb_stor_get_dev(int dev); +block_dev_desc_t* mmc_get_dev(int dev); +block_dev_desc_t* systemace_get_dev(int dev); +  /* disk/part.c */  int get_partition_info (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);  void print_part (block_dev_desc_t *dev_desc); |