diff options
| -rw-r--r-- | common/cmd_ide.c | 5 | ||||
| -rw-r--r-- | common/cmd_sata.c | 1 | ||||
| -rw-r--r-- | common/cmd_scsi.c | 4 | ||||
| -rw-r--r-- | common/usb_storage.c | 1 | ||||
| -rw-r--r-- | drivers/block/ata_piix.c | 1 | ||||
| -rw-r--r-- | drivers/block/pata_bfin.c | 2 | ||||
| -rw-r--r-- | drivers/block/systemace.c | 1 | ||||
| -rw-r--r-- | drivers/mmc/mmc.c | 1 | ||||
| -rw-r--r-- | include/part.h | 5 | 
9 files changed, 21 insertions, 0 deletions
| diff --git a/common/cmd_ide.c b/common/cmd_ide.c index 0105bdbb7..78b4aa70b 100644 --- a/common/cmd_ide.c +++ b/common/cmd_ide.c @@ -455,6 +455,8 @@ void ide_init(void)  		ide_dev_desc[i].dev = i;  		ide_dev_desc[i].part_type = PART_TYPE_UNKNOWN;  		ide_dev_desc[i].blksz = 0; +		ide_dev_desc[i].log2blksz = +			LOG2_INVALID(typeof(ide_dev_desc[i].log2blksz));  		ide_dev_desc[i].lba = 0;  		ide_dev_desc[i].block_read = ide_read;  		ide_dev_desc[i].block_write = ide_write; @@ -806,6 +808,7 @@ static void ide_ident(block_dev_desc_t *dev_desc)  	/* assuming HD */  	dev_desc->type = DEV_TYPE_HARDDISK;  	dev_desc->blksz = ATA_BLOCKSIZE; +	dev_desc->log2blksz = LOG2(dev_desc->blksz);  	dev_desc->lun = 0;	/* just to fill something in... */  #if 0				/* only used to test the powersaving mode, @@ -1448,6 +1451,7 @@ static void atapi_inquiry(block_dev_desc_t *dev_desc)  	dev_desc->lun = 0;  	dev_desc->lba = 0;  	dev_desc->blksz = 0; +	dev_desc->log2blksz = LOG2_INVALID(typeof(dev_desc->log2blksz));  	dev_desc->type = iobuf[0] & 0x1f;  	if ((iobuf[1] & 0x80) == 0x80) @@ -1492,6 +1496,7 @@ static void atapi_inquiry(block_dev_desc_t *dev_desc)  	dev_desc->blksz = ((unsigned long) iobuf[4] << 24) +  		((unsigned long) iobuf[5] << 16) +  		((unsigned long) iobuf[6] << 8) + ((unsigned long) iobuf[7]); +	dev_desc->log2blksz = LOG2(dev_desc->blksz);  #ifdef CONFIG_LBA48  	/* ATAPI devices cannot use 48bit addressing (ATA/ATAPI v7) */  	dev_desc->lba48 = 0; diff --git a/common/cmd_sata.c b/common/cmd_sata.c index 8d57285d0..5a57a3794 100644 --- a/common/cmd_sata.c +++ b/common/cmd_sata.c @@ -44,6 +44,7 @@ int __sata_initialize(void)  		sata_dev_desc[i].type = DEV_TYPE_HARDDISK;  		sata_dev_desc[i].lba = 0;  		sata_dev_desc[i].blksz = 512; +		sata_dev_desc[i].log2blksz = LOG2(sata_dev_desc[i].blksz);  		sata_dev_desc[i].block_read = sata_read;  		sata_dev_desc[i].block_write = sata_write; diff --git a/common/cmd_scsi.c b/common/cmd_scsi.c index 13b3d996f..294d9f577 100644 --- a/common/cmd_scsi.c +++ b/common/cmd_scsi.c @@ -106,6 +106,8 @@ void scsi_scan(int mode)  		scsi_dev_desc[i].lun=0xff;  		scsi_dev_desc[i].lba=0;  		scsi_dev_desc[i].blksz=0; +		scsi_dev_desc[i].log2blksz = +			LOG2_INVALID(typeof(scsi_dev_desc[i].log2blksz));  		scsi_dev_desc[i].type=DEV_TYPE_UNKNOWN;  		scsi_dev_desc[i].vendor[0]=0;  		scsi_dev_desc[i].product[0]=0; @@ -166,6 +168,8 @@ void scsi_scan(int mode)  			}  			scsi_dev_desc[scsi_max_devs].lba=capacity;  			scsi_dev_desc[scsi_max_devs].blksz=blksz; +			scsi_dev_desc[scsi_max_devs].log2blksz = +				LOG2(scsi_dev_desc[scsi_max_devs].blksz);  			scsi_dev_desc[scsi_max_devs].type=perq;  			init_part(&scsi_dev_desc[scsi_max_devs]);  removable: diff --git a/common/usb_storage.c b/common/usb_storage.c index fb322b401..c5db04416 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -1430,6 +1430,7 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,  			*capacity, *blksz);  	dev_desc->lba = *capacity;  	dev_desc->blksz = *blksz; +	dev_desc->log2blksz = LOG2(dev_desc->blksz);  	dev_desc->type = perq;  	USB_STOR_PRINTF(" address %d\n", dev_desc->target);  	USB_STOR_PRINTF("partype: %d\n", dev_desc->part_type); diff --git a/drivers/block/ata_piix.c b/drivers/block/ata_piix.c index 1e33a66c4..fcae44850 100644 --- a/drivers/block/ata_piix.c +++ b/drivers/block/ata_piix.c @@ -406,6 +406,7 @@ void sata_identify(int num, int dev)  	/* assuming HD */  	sata_dev_desc[devno].type = DEV_TYPE_HARDDISK;  	sata_dev_desc[devno].blksz = ATA_BLOCKSIZE; +	sata_dev_desc[devno].log2blksz = LOG2(sata_dev_desc[devno].blksz);  	sata_dev_desc[devno].lun = 0;	/* just to fill something in... */  } diff --git a/drivers/block/pata_bfin.c b/drivers/block/pata_bfin.c index b847dd91e..27ecaf4f9 100644 --- a/drivers/block/pata_bfin.c +++ b/drivers/block/pata_bfin.c @@ -897,6 +897,8 @@ static void bfin_ata_identify(struct ata_port *ap, int dev)  	/* assuming HD */  	sata_dev_desc[ap->port_no].type = DEV_TYPE_HARDDISK;  	sata_dev_desc[ap->port_no].blksz = ATA_SECT_SIZE; +	sata_dev_desc[ap->port_no].log2blksz = +		LOG2(sata_dev_desc[ap->port_no].blksz);  	sata_dev_desc[ap->port_no].lun = 0;	/* just to fill something in... */  	printf("PATA device#%d %s is found on ata port#%d.\n", diff --git a/drivers/block/systemace.c b/drivers/block/systemace.c index bf29cbbb7..b08715f7c 100644 --- a/drivers/block/systemace.c +++ b/drivers/block/systemace.c @@ -127,6 +127,7 @@ block_dev_desc_t *systemace_get_dev(int dev)  		systemace_dev.part_type = PART_TYPE_UNKNOWN;  		systemace_dev.type = DEV_TYPE_HARDDISK;  		systemace_dev.blksz = 512; +		systemace_dev.log2blksz = LOG2(systemace_dev.blksz);  		systemace_dev.removable = 1;  		systemace_dev.block_read = systemace_read; diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 23aeec192..2590f1bcc 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1203,6 +1203,7 @@ static int mmc_startup(struct mmc *mmc)  	mmc->block_dev.lun = 0;  	mmc->block_dev.type = 0;  	mmc->block_dev.blksz = mmc->read_bl_len; +	mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);  	mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);  	sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",  		mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff), diff --git a/include/part.h b/include/part.h index 12e9b056e..f7c7cc59f 100644 --- a/include/part.h +++ b/include/part.h @@ -38,6 +38,7 @@ typedef struct block_dev_desc {  #endif  	lbaint_t	lba;		/* number of blocks */  	unsigned long	blksz;		/* block size */ +	int		log2blksz;	/* for convenience: log2(blksz) */  	char		vendor [40+1];	/* IDE model, SCSI Vendor */  	char		product[20+1];	/* IDE Serial no, SCSI product */  	char		revision[8+1];	/* firmware revision */ @@ -58,6 +59,10 @@ typedef struct block_dev_desc {  #define BLOCK_CNT(size, block_dev_desc) (PAD_COUNT(size, block_dev_desc->blksz))  #define PAD_TO_BLOCKSIZE(size, block_dev_desc) \  	(PAD_SIZE(size, block_dev_desc->blksz)) +#define LOG2(x) (((x & 0xaaaaaaaa) ? 1 : 0) + ((x & 0xcccccccc) ? 2 : 0) + \ +		 ((x & 0xf0f0f0f0) ? 4 : 0) + ((x & 0xff00ff00) ? 8 : 0) + \ +		 ((x & 0xffff0000) ? 16 : 0)) +#define LOG2_INVALID(type) ((type)((sizeof(type)<<3)-1))  /* Interface types: */  #define IF_TYPE_UNKNOWN		0 |