[PATCH] libata: improve xfer mask constants and update ata_mode_string()
Add ATA_BITS_*, ATA_MASK_* macros and reorder xfer_mask fields such that higher transfer mode is placed at higher order bit. As thie reordering breaks ata_mode_string(), this patch also rewrites ata_mode_string(). Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
2e755f68ee
commit
1da7b0d01b
2 changed files with 29 additions and 31 deletions
|
@ -232,6 +232,14 @@ int ata_rwcmd_protocol(struct ata_queued_cmd *qc)
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * const xfer_mode_str[] = {
|
static const char * const xfer_mode_str[] = {
|
||||||
|
"PIO0",
|
||||||
|
"PIO1",
|
||||||
|
"PIO2",
|
||||||
|
"PIO3",
|
||||||
|
"PIO4",
|
||||||
|
"MWDMA0",
|
||||||
|
"MWDMA1",
|
||||||
|
"MWDMA2",
|
||||||
"UDMA/16",
|
"UDMA/16",
|
||||||
"UDMA/25",
|
"UDMA/25",
|
||||||
"UDMA/33",
|
"UDMA/33",
|
||||||
|
@ -240,49 +248,31 @@ static const char * const xfer_mode_str[] = {
|
||||||
"UDMA/100",
|
"UDMA/100",
|
||||||
"UDMA/133",
|
"UDMA/133",
|
||||||
"UDMA7",
|
"UDMA7",
|
||||||
"MWDMA0",
|
|
||||||
"MWDMA1",
|
|
||||||
"MWDMA2",
|
|
||||||
"PIO0",
|
|
||||||
"PIO1",
|
|
||||||
"PIO2",
|
|
||||||
"PIO3",
|
|
||||||
"PIO4",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_udma_string - convert UDMA bit offset to string
|
* ata_mode_string - convert xfer_mask to string
|
||||||
* @mask: mask of bits supported; only highest bit counts.
|
* @xfer_mask: mask of bits supported; only highest bit counts.
|
||||||
*
|
*
|
||||||
* Determine string which represents the highest speed
|
* Determine string which represents the highest speed
|
||||||
* (highest bit in @udma_mask).
|
* (highest bit in @modemask).
|
||||||
*
|
*
|
||||||
* LOCKING:
|
* LOCKING:
|
||||||
* None.
|
* None.
|
||||||
*
|
*
|
||||||
* RETURNS:
|
* RETURNS:
|
||||||
* Constant C string representing highest speed listed in
|
* Constant C string representing highest speed listed in
|
||||||
* @udma_mask, or the constant C string "<n/a>".
|
* @mode_mask, or the constant C string "<n/a>".
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const char *ata_mode_string(unsigned int mask)
|
static const char *ata_mode_string(unsigned int xfer_mask)
|
||||||
{
|
{
|
||||||
int i;
|
int highbit;
|
||||||
|
|
||||||
for (i = 7; i >= 0; i--)
|
|
||||||
if (mask & (1 << i))
|
|
||||||
goto out;
|
|
||||||
for (i = ATA_SHIFT_MWDMA + 2; i >= ATA_SHIFT_MWDMA; i--)
|
|
||||||
if (mask & (1 << i))
|
|
||||||
goto out;
|
|
||||||
for (i = ATA_SHIFT_PIO + 4; i >= ATA_SHIFT_PIO; i--)
|
|
||||||
if (mask & (1 << i))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
|
highbit = fls(xfer_mask) - 1;
|
||||||
|
if (highbit >= 0 && highbit < ARRAY_SIZE(xfer_mode_str))
|
||||||
|
return xfer_mode_str[highbit];
|
||||||
return "<n/a>";
|
return "<n/a>";
|
||||||
|
|
||||||
out:
|
|
||||||
return xfer_mode_str[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -188,11 +188,19 @@ enum {
|
||||||
PORT_DISABLED = 2,
|
PORT_DISABLED = 2,
|
||||||
|
|
||||||
/* encoding various smaller bitmaps into a single
|
/* encoding various smaller bitmaps into a single
|
||||||
* unsigned long bitmap
|
* unsigned int bitmap
|
||||||
*/
|
*/
|
||||||
ATA_SHIFT_UDMA = 0,
|
ATA_BITS_PIO = 5,
|
||||||
ATA_SHIFT_MWDMA = 8,
|
ATA_BITS_MWDMA = 3,
|
||||||
ATA_SHIFT_PIO = 11,
|
ATA_BITS_UDMA = 8,
|
||||||
|
|
||||||
|
ATA_SHIFT_PIO = 0,
|
||||||
|
ATA_SHIFT_MWDMA = ATA_SHIFT_PIO + ATA_BITS_PIO,
|
||||||
|
ATA_SHIFT_UDMA = ATA_SHIFT_MWDMA + ATA_BITS_MWDMA,
|
||||||
|
|
||||||
|
ATA_MASK_PIO = ((1 << ATA_BITS_PIO) - 1) << ATA_SHIFT_PIO,
|
||||||
|
ATA_MASK_MWDMA = ((1 << ATA_BITS_MWDMA) - 1) << ATA_SHIFT_MWDMA,
|
||||||
|
ATA_MASK_UDMA = ((1 << ATA_BITS_UDMA) - 1) << ATA_SHIFT_UDMA,
|
||||||
|
|
||||||
/* size of buffer to pad xfers ending on unaligned boundaries */
|
/* size of buffer to pad xfers ending on unaligned boundaries */
|
||||||
ATA_DMA_PAD_SZ = 4,
|
ATA_DMA_PAD_SZ = 4,
|
||||||
|
|
Loading…
Add table
Reference in a new issue