提交 1da7b0d0 编写于 作者: T Tejun Heo 提交者: Jeff Garzik

[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: NTejun Heo <htejun@gmail.com>
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 2e755f68
...@@ -232,6 +232,14 @@ int ata_rwcmd_protocol(struct ata_queued_cmd *qc) ...@@ -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[] = { ...@@ -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 { ...@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册