Index: head/sys/boot/mips/beri/loader/beri_disk_cfi.c =================================================================== --- head/sys/boot/mips/beri/loader/beri_disk_cfi.c (revision 283896) +++ head/sys/boot/mips/beri/loader/beri_disk_cfi.c (working copy) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); static int beri_cfi_disk_init(void); static int beri_cfi_disk_open(struct open_file *, ...); static int beri_cfi_disk_close(struct open_file *); +static int beri_cfi_disk_ioctl(struct open_file *, u_long, void *); static void beri_cfi_disk_cleanup(void); static int beri_cfi_disk_strategy(void *, int, daddr_t, size_t, char *, size_t *); @@ -56,7 +57,7 @@ struct devsw beri_cfi_disk = { .dv_strategy = beri_cfi_disk_strategy, .dv_open = beri_cfi_disk_open, .dv_close = beri_cfi_disk_close, - .dv_ioctl = noioctl, + .dv_ioctl = beri_cfi_disk_ioctl, .dv_print = beri_cfi_disk_print, .dv_cleanup = beri_cfi_disk_cleanup, }; @@ -133,6 +134,25 @@ beri_cfi_disk_print(int verbose) } +static int +beri_cfi_disk_ioctl(struct open_file *f, u_long cmd, void *data) +{ + struct disk_devdesc *dev; + + dev = (struct disk_devdesc *)f->f_devdata; + switch (cmd) { + case DIOCGSECTORSIZE: + *(u_int *)data = (u_int)cfi_get_sectorsize(); + break; + case DIOCGMEDIASIZE: + *(off_t *)data = (off_t)cfi_get_mediasize(); + break; + default: + return (ENOTTY); + } + return (0); +} + static void beri_cfi_disk_cleanup(void) { Index: head/sys/boot/mips/beri/loader/beri_disk_sdcard.c =================================================================== --- head/sys/boot/mips/beri/loader/beri_disk_sdcard.c (revision 283896) +++ head/sys/boot/mips/beri/loader/beri_disk_sdcard.c (working copy) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); static int beri_sdcard_disk_init(void); static int beri_sdcard_disk_open(struct open_file *, ...); static int beri_sdcard_disk_close(struct open_file *); +static int beri_sdcard_disk_ioctl(struct open_file *, u_long, void *); static void beri_sdcard_disk_cleanup(void); static int beri_sdcard_disk_strategy(void *, int, daddr_t, size_t, char *, size_t *); @@ -56,7 +57,7 @@ struct devsw beri_sdcard_disk = { .dv_strategy = beri_sdcard_disk_strategy, .dv_open = beri_sdcard_disk_open, .dv_close = beri_sdcard_disk_close, - .dv_ioctl = noioctl, + .dv_ioctl = beri_sdcard_disk_ioctl, .dv_print = beri_sdcard_disk_print, .dv_cleanup = beri_sdcard_disk_cleanup, }; @@ -138,6 +139,25 @@ beri_sdcard_disk_print(int verbose) } } +static int +beri_sdcard_disk_ioctl(struct open_file *f, u_long cmd, void *data) +{ + struct disk_devdesc *dev; + + dev = (struct disk_devdesc *)f->f_devdata; + switch (cmd) { + case DIOCGSECTORSIZE: + *(u_int *)data = (u_int)altera_sdcard_get_sectorsize(); + break; + case DIOCGMEDIASIZE: + *(off_t *)data = (off_t)altera_sdcard_get_mediasize(); + break; + default: + return (ENOTTY); + } + return (0); +} + static void beri_sdcard_disk_cleanup(void) {