diff options
Diffstat (limited to 'miscutils/hdparm.c')
-rw-r--r-- | miscutils/hdparm.c | 62 |
1 files changed, 27 insertions, 35 deletions
diff --git a/miscutils/hdparm.c b/miscutils/hdparm.c index aa95b89b0..983de6d7b 100644 --- a/miscutils/hdparm.c +++ b/miscutils/hdparm.c | |||
@@ -1228,54 +1228,46 @@ static void dump_identity(const struct hd_driveid *id) | |||
1228 | if (id->tPIO >= 2) printf("pio2 "); | 1228 | if (id->tPIO >= 2) printf("pio2 "); |
1229 | } | 1229 | } |
1230 | if (id->field_valid & 2) { | 1230 | if (id->field_valid & 2) { |
1231 | if (id->eide_pio_modes & 1) printf("pio3 "); | 1231 | static const masks_labels_t pio_modes = { |
1232 | if (id->eide_pio_modes & 2) printf("pio4 "); | 1232 | .masks = { 1, 2, ~3 }, |
1233 | if (id->eide_pio_modes &~3) printf("pio? "); | 1233 | .labels = "pio3 \0""pio4 \0""pio? \0", |
1234 | }; | ||
1235 | print_flags(&pio_modes, id->eide_pio_modes); | ||
1234 | } | 1236 | } |
1235 | if (id->capability & 1) { | 1237 | if (id->capability & 1) { |
1236 | if (id->dma_1word | id->dma_mword) { | 1238 | if (id->dma_1word | id->dma_mword) { |
1239 | static const int dma_wmode_masks[] = { 0x100, 1, 0x200, 2, 0x400, 4, 0xf800, 0xf8 }; | ||
1237 | printf("\n DMA modes: "); | 1240 | printf("\n DMA modes: "); |
1238 | if (id->dma_1word & 0x100) bb_putchar('*'); | 1241 | print_flags_separated(dma_wmode_masks, |
1239 | if (id->dma_1word & 1) printf("sdma0 "); | 1242 | "*\0""sdma0 \0""*\0""sdma1 \0""*\0""sdma2 \0""*\0""sdma? \0", |
1240 | if (id->dma_1word & 0x200) bb_putchar('*'); | 1243 | id->dma_1word, NULL); |
1241 | if (id->dma_1word & 2) printf("sdma1 "); | 1244 | print_flags_separated(dma_wmode_masks, |
1242 | if (id->dma_1word & 0x400) bb_putchar('*'); | 1245 | "*\0""mdma0\0""*\0""mdma1\0""*\0""mdma2\0""*\0""mdma?\0", |
1243 | if (id->dma_1word & 4) printf("sdma2 "); | 1246 | id->dma_mword, NULL); |
1244 | if (id->dma_1word & 0xf800) bb_putchar('*'); | ||
1245 | if (id->dma_1word & 0xf8) printf("sdma? "); | ||
1246 | if (id->dma_mword & 0x100) bb_putchar('*'); | ||
1247 | if (id->dma_mword & 1) printf("mdma0 "); | ||
1248 | if (id->dma_mword & 0x200) bb_putchar('*'); | ||
1249 | if (id->dma_mword & 2) printf("mdma1 "); | ||
1250 | if (id->dma_mword & 0x400) bb_putchar('*'); | ||
1251 | if (id->dma_mword & 4) printf("mdma2 "); | ||
1252 | if (id->dma_mword & 0xf800) bb_putchar('*'); | ||
1253 | if (id->dma_mword & 0xf8) printf("mdma? "); | ||
1254 | } | 1247 | } |
1255 | } | 1248 | } |
1256 | if (((id->capability & 8) || (id->field_valid & 2)) && id->field_valid & 4) { | 1249 | if (((id->capability & 8) || (id->field_valid & 2)) && id->field_valid & 4) { |
1250 | static const masks_labels_t ultra_modes1 = { | ||
1251 | .masks = { 0x100, 0x001, 0x200, 0x002, 0x400, 0x004 }, | ||
1252 | .labels = "*\0""udma0 \0""*\0""udma1 \0""*\0""udma2 \0", | ||
1253 | }; | ||
1254 | |||
1257 | printf("\n UDMA modes: "); | 1255 | printf("\n UDMA modes: "); |
1258 | if (id->dma_ultra & 0x100) bb_putchar('*'); | 1256 | print_flags(&ultra_modes1, id->dma_ultra); |
1259 | if (id->dma_ultra & 0x001) printf("udma0 "); | ||
1260 | if (id->dma_ultra & 0x200) bb_putchar('*'); | ||
1261 | if (id->dma_ultra & 0x002) printf("udma1 "); | ||
1262 | if (id->dma_ultra & 0x400) bb_putchar('*'); | ||
1263 | if (id->dma_ultra & 0x004) printf("udma2 "); | ||
1264 | #ifdef __NEW_HD_DRIVE_ID | 1257 | #ifdef __NEW_HD_DRIVE_ID |
1265 | if (id->hw_config & 0x2000) { | 1258 | if (id->hw_config & 0x2000) { |
1266 | #else /* !__NEW_HD_DRIVE_ID */ | 1259 | #else /* !__NEW_HD_DRIVE_ID */ |
1267 | if (id->word93 & 0x2000) { | 1260 | if (id->word93 & 0x2000) { |
1268 | #endif /* __NEW_HD_DRIVE_ID */ | 1261 | #endif /* __NEW_HD_DRIVE_ID */ |
1269 | if (id->dma_ultra & 0x0800) bb_putchar('*'); | 1262 | static const masks_labels_t ultra_modes2 = { |
1270 | if (id->dma_ultra & 0x0008) printf("udma3 "); | 1263 | .masks = { 0x0800, 0x0008, 0x1000, 0x0010, |
1271 | if (id->dma_ultra & 0x1000) bb_putchar('*'); | 1264 | 0x2000, 0x0020, 0x4000, 0x0040, |
1272 | if (id->dma_ultra & 0x0010) printf("udma4 "); | 1265 | 0x8000, 0x0080 }, |
1273 | if (id->dma_ultra & 0x2000) bb_putchar('*'); | 1266 | .labels = "*\0""udma3 \0""*\0""udma4 \0" |
1274 | if (id->dma_ultra & 0x0020) printf("udma5 "); | 1267 | "*\0""udma5 \0""*\0""udma6 \0" |
1275 | if (id->dma_ultra & 0x4000) bb_putchar('*'); | 1268 | "*\0""udma7 \0" |
1276 | if (id->dma_ultra & 0x0040) printf("udma6 "); | 1269 | }; |
1277 | if (id->dma_ultra & 0x8000) bb_putchar('*'); | 1270 | print_flags(&ultra_modes2, id->dma_ultra); |
1278 | if (id->dma_ultra & 0x0080) printf("udma7 "); | ||
1279 | } | 1271 | } |
1280 | } | 1272 | } |
1281 | printf("\n AdvancedPM=%s", (!(id_regs[83] & 8)) ? "no" : "yes"); | 1273 | printf("\n AdvancedPM=%s", (!(id_regs[83] & 8)) ? "no" : "yes"); |