Commit 0472fbfd3250d1a33d3de78afdcbf24f78ac026b

Authored by Egbert Eich
Committed by Tom Rini
1 parent bc8d98713f

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

... ... @@ -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;
... ... @@ -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  
... ... @@ -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  
... ... @@ -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),
... ... @@ -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