summaryrefslogtreecommitdiffstats
path: root/sys/dev/mmc
diff options
context:
space:
mode:
authorjchandra <jchandra@FreeBSD.org>2011-05-30 06:23:51 +0000
committerjchandra <jchandra@FreeBSD.org>2011-05-30 06:23:51 +0000
commit861907aeb2a72e77dcc62ead2385783cfd29f170 (patch)
treeb59618edfa1e2aca4e43a08e1267750f30b498ad /sys/dev/mmc
parent430ebf5dcf509df6b2222dddb06d283642ad2f28 (diff)
downloadFreeBSD-src-861907aeb2a72e77dcc62ead2385783cfd29f170.zip
FreeBSD-src-861907aeb2a72e77dcc62ead2385783cfd29f170.tar.gz
Fix read_ivar implementation for MMC and SD.
1. Both mmc_read_ivar() and sdhci_read_ivar() use the expression '*(int *)result = val' to assign to result which is uintptr_t *. This does not work on big-endian 64 bit systems. 2. The media_size ivar is declared as 'off_t' which does not fit into uintptr_t in 32bit systems, change this to long. Submitted by: kanthms at netlogicmicro com (initial version)
Diffstat (limited to 'sys/dev/mmc')
-rw-r--r--sys/dev/mmc/mmc.c22
-rw-r--r--sys/dev/mmc/mmcvar.h2
2 files changed, 12 insertions, 12 deletions
diff --git a/sys/dev/mmc/mmc.c b/sys/dev/mmc/mmc.c
index 45ddd56..6ff47c3 100644
--- a/sys/dev/mmc/mmc.c
+++ b/sys/dev/mmc/mmc.c
@@ -1445,37 +1445,37 @@ mmc_read_ivar(device_t bus, device_t child, int which, uintptr_t *result)
default:
return (EINVAL);
case MMC_IVAR_DSR_IMP:
- *(int *)result = ivar->csd.dsr_imp;
+ *result = ivar->csd.dsr_imp;
break;
case MMC_IVAR_MEDIA_SIZE:
- *(off_t *)result = ivar->sec_count;
+ *result = ivar->sec_count;
break;
case MMC_IVAR_RCA:
- *(int *)result = ivar->rca;
+ *result = ivar->rca;
break;
case MMC_IVAR_SECTOR_SIZE:
- *(int *)result = MMC_SECTOR_SIZE;
+ *result = MMC_SECTOR_SIZE;
break;
case MMC_IVAR_TRAN_SPEED:
- *(int *)result = mmcbr_get_clock(bus);
+ *result = mmcbr_get_clock(bus);
break;
case MMC_IVAR_READ_ONLY:
- *(int *)result = ivar->read_only;
+ *result = ivar->read_only;
break;
case MMC_IVAR_HIGH_CAP:
- *(int *)result = ivar->high_cap;
+ *result = ivar->high_cap;
break;
case MMC_IVAR_CARD_TYPE:
- *(int *)result = ivar->mode;
+ *result = ivar->mode;
break;
case MMC_IVAR_BUS_WIDTH:
- *(int *)result = ivar->bus_width;
+ *result = ivar->bus_width;
break;
case MMC_IVAR_ERASE_SECTOR:
- *(int *)result = ivar->erase_sector;
+ *result = ivar->erase_sector;
break;
case MMC_IVAR_MAX_DATA:
- *(int *)result = mmcbr_get_max_data(bus);
+ *result = mmcbr_get_max_data(bus);
break;
}
return (0);
diff --git a/sys/dev/mmc/mmcvar.h b/sys/dev/mmc/mmcvar.h
index 9126439..a28d3ac 100644
--- a/sys/dev/mmc/mmcvar.h
+++ b/sys/dev/mmc/mmcvar.h
@@ -79,7 +79,7 @@ enum mmc_device_ivars {
__BUS_ACCESSOR(mmc, var, MMC, ivar, type)
MMC_ACCESSOR(dsr_imp, DSR_IMP, int)
-MMC_ACCESSOR(media_size, MEDIA_SIZE, off_t)
+MMC_ACCESSOR(media_size, MEDIA_SIZE, long)
MMC_ACCESSOR(rca, RCA, int)
MMC_ACCESSOR(sector_size, SECTOR_SIZE, int)
MMC_ACCESSOR(tran_speed, TRAN_SPEED, int)
OpenPOWER on IntegriCloud