|
Lines 338-347
Link Here
|
| 338 |
uint32_t |
338 |
uint32_t |
| 339 |
ata_logical_sector_size(struct ata_params *ident_data) |
339 |
ata_logical_sector_size(struct ata_params *ident_data) |
| 340 |
{ |
340 |
{ |
| 341 |
if ((ident_data->pss & 0xc000) == 0x4000 && |
341 |
if ((ident_data->pss & ATA_PSS_VALID_MASK) == ATA_PSS_VALID_VALUE && |
| 342 |
(ident_data->pss & ATA_PSS_LSSABOVE512)) { |
342 |
(ident_data->pss & ATA_PSS_LSSABOVE512)) { |
| 343 |
return ((u_int32_t)ident_data->lss_1 | |
343 |
return (u_int32_t) (((u_int32_t)ident_data->lss_1 | |
| 344 |
((u_int32_t)ident_data->lss_2 << 16)); |
344 |
((u_int32_t)ident_data->lss_2 << 16)) << 1); |
| 345 |
} |
345 |
} |
| 346 |
return (512); |
346 |
return (512); |
| 347 |
} |
347 |
} |
|
Lines 349-358
Link Here
|
| 349 |
uint64_t |
349 |
uint64_t |
| 350 |
ata_physical_sector_size(struct ata_params *ident_data) |
350 |
ata_physical_sector_size(struct ata_params *ident_data) |
| 351 |
{ |
351 |
{ |
| 352 |
if ((ident_data->pss & 0xc000) == 0x4000 && |
352 |
if ((ident_data->pss & ATA_PSS_VALID_MASK) == ATA_PSS_VALID_VALUE) { |
| 353 |
(ident_data->pss & ATA_PSS_MULTLS)) { |
353 |
if (ident_data->pss & ATA_PSS_MULTLS) { |
| 354 |
return ((uint64_t)ata_logical_sector_size(ident_data) * |
354 |
return ((uint64_t)ata_logical_sector_size(ident_data) * |
| 355 |
(1 << (ident_data->pss & ATA_PSS_LSPPS))); |
355 |
(1 << (ident_data->pss & ATA_PSS_LSPPS))); |
|
|
356 |
} else { |
| 357 |
return (uint64_t)ata_logical_sector_size(ident_data); |
| 358 |
} |
| 356 |
} |
359 |
} |
| 357 |
return (512); |
360 |
return (512); |
| 358 |
} |
361 |
} |