View | Details | Raw Unified | Return to bug 187269
Collapse All | Expand All

(-)sys/cam/ata/ata_all.c (-7 / +10 lines)
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
}
(-)sys/sys/ata.h (+2 lines)
Lines 211-216 Link Here
211
	u_int16_t       reserved104;
211
	u_int16_t       reserved104;
212
/*105*/	u_int16_t       max_dsm_blocks;
212
/*105*/	u_int16_t       max_dsm_blocks;
213
/*106*/	u_int16_t       pss;
213
/*106*/	u_int16_t       pss;
214
#define ATA_PSS_VALID_MASK		0xC000
215
#define ATA_PSS_VALID_VALUE		0x4000
214
#define ATA_PSS_LSPPS			0x000F
216
#define ATA_PSS_LSPPS			0x000F
215
#define ATA_PSS_LSSABOVE512		0x1000
217
#define ATA_PSS_LSSABOVE512		0x1000
216
#define ATA_PSS_MULTLS			0x2000
218
#define ATA_PSS_MULTLS			0x2000

Return to bug 187269