Index: sys/conf/files =================================================================== --- sys/conf/files +++ sys/conf/files @@ -1494,6 +1494,7 @@ dev/firewire/sbp_targ.c optional sbp_targ dev/flash/at45d.c optional at45d dev/flash/mx25l.c optional mx25l +dev/flash/flash_if.m optional mx25l | at45d dev/fxp/if_fxp.c optional fxp dev/fxp/inphy.c optional fxp dev/gem/if_gem.c optional gem Index: sys/dev/flash/at45d.c =================================================================== --- sys/dev/flash/at45d.c +++ sys/dev/flash/at45d.c @@ -137,6 +137,12 @@ return (err); } +static uint64_t +at45d_get_size(device_t dev){ + struct at45d_softc* sc = device_get_softc(dev); + return sc->disk->d_mediasize; +} + static int at45d_get_mfg_info(device_t dev, uint8_t *resp) { @@ -438,6 +444,7 @@ DEVMETHOD(device_attach, at45d_attach), DEVMETHOD(device_detach, at45d_detach), + DEVMETHOD(flash_get_size, at45d_get_size), DEVMETHOD_END }; Index: sys/dev/flash/flash_if.m =================================================================== --- /dev/null +++ sys/dev/flash/flash_if.m @@ -0,0 +1,17 @@ +# $FreeBSD$ + +# Flash chip interface description +# + +#include + +INTERFACE flash; + +# Get flash size +# +# Return values: +# size +# +METHOD uint64_t get_size { + device_t dev; +}; \ No newline at end of file Index: sys/dev/flash/mx25l.c =================================================================== --- sys/dev/flash/mx25l.c +++ sys/dev/flash/mx25l.c @@ -50,6 +50,8 @@ #include #include "spibus_if.h" +#include "flash_if.h" + #include @@ -151,6 +153,12 @@ return (rxBuf[1]); } +static uint64_t +mx25l_get_size(device_t dev){ + struct mx25l_softc* sc = device_get_softc(dev); + return sc->sc_disk->d_mediasize; +} + static void mx25l_wait_for_device_ready(device_t dev) { @@ -626,6 +634,7 @@ DEVMETHOD(device_attach, mx25l_attach), DEVMETHOD(device_detach, mx25l_detach), + DEVMETHOD(flash_get_size, mx25l_get_size), { 0, 0 } };