Commit 0472fbfd3250d1a33d3de78afdcbf24f78ac026b
Committed by
Tom Rini
1 parent
bc8d98713f
Exists in
master
and in
53 other branches
part/dev_desc: Add log2 of blocksize to block_dev_desc data struct
log2 of the device block size serves as the shift value used to calculate the block number to read in file systems when implementing avaiable block sizes. It is needed quite often in file systems thus it is pre-calculated and stored in the block device descriptor. Signed-off-by: Egbert Eich <eich@suse.com>
Showing 9 changed files with 21 additions and 0 deletions Side-by-side Diff
common/cmd_ide.c
... | ... | @@ -455,6 +455,8 @@ |
455 | 455 | ide_dev_desc[i].dev = i; |
456 | 456 | ide_dev_desc[i].part_type = PART_TYPE_UNKNOWN; |
457 | 457 | ide_dev_desc[i].blksz = 0; |
458 | + ide_dev_desc[i].log2blksz = | |
459 | + LOG2_INVALID(typeof(ide_dev_desc[i].log2blksz)); | |
458 | 460 | ide_dev_desc[i].lba = 0; |
459 | 461 | ide_dev_desc[i].block_read = ide_read; |
460 | 462 | ide_dev_desc[i].block_write = ide_write; |
... | ... | @@ -806,6 +808,7 @@ |
806 | 808 | /* assuming HD */ |
807 | 809 | dev_desc->type = DEV_TYPE_HARDDISK; |
808 | 810 | dev_desc->blksz = ATA_BLOCKSIZE; |
811 | + dev_desc->log2blksz = LOG2(dev_desc->blksz); | |
809 | 812 | dev_desc->lun = 0; /* just to fill something in... */ |
810 | 813 | |
811 | 814 | #if 0 /* only used to test the powersaving mode, |
... | ... | @@ -1448,6 +1451,7 @@ |
1448 | 1451 | dev_desc->lun = 0; |
1449 | 1452 | dev_desc->lba = 0; |
1450 | 1453 | dev_desc->blksz = 0; |
1454 | + dev_desc->log2blksz = LOG2_INVALID(typeof(dev_desc->log2blksz)); | |
1451 | 1455 | dev_desc->type = iobuf[0] & 0x1f; |
1452 | 1456 | |
1453 | 1457 | if ((iobuf[1] & 0x80) == 0x80) |
... | ... | @@ -1492,6 +1496,7 @@ |
1492 | 1496 | dev_desc->blksz = ((unsigned long) iobuf[4] << 24) + |
1493 | 1497 | ((unsigned long) iobuf[5] << 16) + |
1494 | 1498 | ((unsigned long) iobuf[6] << 8) + ((unsigned long) iobuf[7]); |
1499 | + dev_desc->log2blksz = LOG2(dev_desc->blksz); | |
1495 | 1500 | #ifdef CONFIG_LBA48 |
1496 | 1501 | /* ATAPI devices cannot use 48bit addressing (ATA/ATAPI v7) */ |
1497 | 1502 | dev_desc->lba48 = 0; |
common/cmd_sata.c
... | ... | @@ -44,6 +44,7 @@ |
44 | 44 | sata_dev_desc[i].type = DEV_TYPE_HARDDISK; |
45 | 45 | sata_dev_desc[i].lba = 0; |
46 | 46 | sata_dev_desc[i].blksz = 512; |
47 | + sata_dev_desc[i].log2blksz = LOG2(sata_dev_desc[i].blksz); | |
47 | 48 | sata_dev_desc[i].block_read = sata_read; |
48 | 49 | sata_dev_desc[i].block_write = sata_write; |
49 | 50 |
common/cmd_scsi.c
... | ... | @@ -106,6 +106,8 @@ |
106 | 106 | scsi_dev_desc[i].lun=0xff; |
107 | 107 | scsi_dev_desc[i].lba=0; |
108 | 108 | scsi_dev_desc[i].blksz=0; |
109 | + scsi_dev_desc[i].log2blksz = | |
110 | + LOG2_INVALID(typeof(scsi_dev_desc[i].log2blksz)); | |
109 | 111 | scsi_dev_desc[i].type=DEV_TYPE_UNKNOWN; |
110 | 112 | scsi_dev_desc[i].vendor[0]=0; |
111 | 113 | scsi_dev_desc[i].product[0]=0; |
... | ... | @@ -166,6 +168,8 @@ |
166 | 168 | } |
167 | 169 | scsi_dev_desc[scsi_max_devs].lba=capacity; |
168 | 170 | scsi_dev_desc[scsi_max_devs].blksz=blksz; |
171 | + scsi_dev_desc[scsi_max_devs].log2blksz = | |
172 | + LOG2(scsi_dev_desc[scsi_max_devs].blksz); | |
169 | 173 | scsi_dev_desc[scsi_max_devs].type=perq; |
170 | 174 | init_part(&scsi_dev_desc[scsi_max_devs]); |
171 | 175 | removable: |
common/usb_storage.c
... | ... | @@ -1430,6 +1430,7 @@ |
1430 | 1430 | *capacity, *blksz); |
1431 | 1431 | dev_desc->lba = *capacity; |
1432 | 1432 | dev_desc->blksz = *blksz; |
1433 | + dev_desc->log2blksz = LOG2(dev_desc->blksz); | |
1433 | 1434 | dev_desc->type = perq; |
1434 | 1435 | USB_STOR_PRINTF(" address %d\n", dev_desc->target); |
1435 | 1436 | USB_STOR_PRINTF("partype: %d\n", dev_desc->part_type); |
drivers/block/ata_piix.c
... | ... | @@ -406,6 +406,7 @@ |
406 | 406 | /* assuming HD */ |
407 | 407 | sata_dev_desc[devno].type = DEV_TYPE_HARDDISK; |
408 | 408 | sata_dev_desc[devno].blksz = ATA_BLOCKSIZE; |
409 | + sata_dev_desc[devno].log2blksz = LOG2(sata_dev_desc[devno].blksz); | |
409 | 410 | sata_dev_desc[devno].lun = 0; /* just to fill something in... */ |
410 | 411 | } |
411 | 412 |
drivers/block/pata_bfin.c
... | ... | @@ -897,6 +897,8 @@ |
897 | 897 | /* assuming HD */ |
898 | 898 | sata_dev_desc[ap->port_no].type = DEV_TYPE_HARDDISK; |
899 | 899 | sata_dev_desc[ap->port_no].blksz = ATA_SECT_SIZE; |
900 | + sata_dev_desc[ap->port_no].log2blksz = | |
901 | + LOG2(sata_dev_desc[ap->port_no].blksz); | |
900 | 902 | sata_dev_desc[ap->port_no].lun = 0; /* just to fill something in... */ |
901 | 903 | |
902 | 904 | printf("PATA device#%d %s is found on ata port#%d.\n", |
drivers/block/systemace.c
... | ... | @@ -127,6 +127,7 @@ |
127 | 127 | systemace_dev.part_type = PART_TYPE_UNKNOWN; |
128 | 128 | systemace_dev.type = DEV_TYPE_HARDDISK; |
129 | 129 | systemace_dev.blksz = 512; |
130 | + systemace_dev.log2blksz = LOG2(systemace_dev.blksz); | |
130 | 131 | systemace_dev.removable = 1; |
131 | 132 | systemace_dev.block_read = systemace_read; |
132 | 133 |
drivers/mmc/mmc.c
... | ... | @@ -1203,6 +1203,7 @@ |
1203 | 1203 | mmc->block_dev.lun = 0; |
1204 | 1204 | mmc->block_dev.type = 0; |
1205 | 1205 | mmc->block_dev.blksz = mmc->read_bl_len; |
1206 | + mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz); | |
1206 | 1207 | mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len); |
1207 | 1208 | sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x", |
1208 | 1209 | mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff), |
include/part.h
... | ... | @@ -38,6 +38,7 @@ |
38 | 38 | #endif |
39 | 39 | lbaint_t lba; /* number of blocks */ |
40 | 40 | unsigned long blksz; /* block size */ |
41 | + int log2blksz; /* for convenience: log2(blksz) */ | |
41 | 42 | char vendor [40+1]; /* IDE model, SCSI Vendor */ |
42 | 43 | char product[20+1]; /* IDE Serial no, SCSI product */ |
43 | 44 | char revision[8+1]; /* firmware revision */ |
... | ... | @@ -58,6 +59,10 @@ |
58 | 59 | #define BLOCK_CNT(size, block_dev_desc) (PAD_COUNT(size, block_dev_desc->blksz)) |
59 | 60 | #define PAD_TO_BLOCKSIZE(size, block_dev_desc) \ |
60 | 61 | (PAD_SIZE(size, block_dev_desc->blksz)) |
62 | +#define LOG2(x) (((x & 0xaaaaaaaa) ? 1 : 0) + ((x & 0xcccccccc) ? 2 : 0) + \ | |
63 | + ((x & 0xf0f0f0f0) ? 4 : 0) + ((x & 0xff00ff00) ? 8 : 0) + \ | |
64 | + ((x & 0xffff0000) ? 16 : 0)) | |
65 | +#define LOG2_INVALID(type) ((type)((sizeof(type)<<3)-1)) | |
61 | 66 | |
62 | 67 | /* Interface types: */ |
63 | 68 | #define IF_TYPE_UNKNOWN 0 |