Changeset View
Changeset View
Standalone View
Standalone View
sys/boot/mips/beri/loader/beri_disk_cfi.c
Show All 38 Lines | |||||
#include <stand.h> | #include <stand.h> | ||||
#include <disk.h> | #include <disk.h> | ||||
#include <cfi.h> | #include <cfi.h> | ||||
static int beri_cfi_disk_init(void); | static int beri_cfi_disk_init(void); | ||||
static int beri_cfi_disk_open(struct open_file *, ...); | static int beri_cfi_disk_open(struct open_file *, ...); | ||||
static int beri_cfi_disk_close(struct open_file *); | static int beri_cfi_disk_close(struct open_file *); | ||||
static void beri_cfi_disk_cleanup(void); | |||||
static int beri_cfi_disk_strategy(void *, int, daddr_t, size_t, | static int beri_cfi_disk_strategy(void *, int, daddr_t, size_t, | ||||
char *, size_t *); | char *, size_t *); | ||||
static int beri_cfi_disk_print(int); | static int beri_cfi_disk_print(int); | ||||
struct devsw beri_cfi_disk = { | struct devsw beri_cfi_disk = { | ||||
.dv_name = "cfi", | .dv_name = "cfi", | ||||
.dv_type = DEVT_DISK, | .dv_type = DEVT_DISK, | ||||
.dv_init = beri_cfi_disk_init, | .dv_init = beri_cfi_disk_init, | ||||
.dv_strategy = beri_cfi_disk_strategy, | .dv_strategy = beri_cfi_disk_strategy, | ||||
.dv_open = beri_cfi_disk_open, | .dv_open = beri_cfi_disk_open, | ||||
.dv_close = beri_cfi_disk_close, | .dv_close = beri_cfi_disk_close, | ||||
.dv_ioctl = noioctl, | .dv_ioctl = noioctl, | ||||
.dv_print = beri_cfi_disk_print, | .dv_print = beri_cfi_disk_print, | ||||
.dv_cleanup = beri_cfi_disk_cleanup, | .dv_cleanup = NULL, | ||||
}; | }; | ||||
static int | static int | ||||
beri_cfi_disk_init(void) | beri_cfi_disk_init(void) | ||||
{ | { | ||||
return (0); | return (0); | ||||
} | } | ||||
Show All 25 Lines | beri_cfi_disk_open(struct open_file *f, ...) | ||||
struct disk_devdesc *dev; | struct disk_devdesc *dev; | ||||
va_start(ap, f); | va_start(ap, f); | ||||
dev = va_arg(ap, struct disk_devdesc *); | dev = va_arg(ap, struct disk_devdesc *); | ||||
va_end(ap); | va_end(ap); | ||||
if (dev->d_unit != 0) | if (dev->d_unit != 0) | ||||
return (EIO); | return (EIO); | ||||
return (disk_open(dev, cfi_get_mediasize(), cfi_get_sectorsize(), 0)); | return (disk_open(dev, cfi_get_mediasize(), cfi_get_sectorsize())); | ||||
} | } | ||||
static int | static int | ||||
beri_cfi_disk_close(struct open_file *f) | beri_cfi_disk_close(struct open_file *f) | ||||
{ | { | ||||
struct disk_devdesc *dev; | struct disk_devdesc *dev; | ||||
dev = (struct disk_devdesc *)f->f_devdata; | dev = (struct disk_devdesc *)f->f_devdata; | ||||
Show All 14 Lines | beri_cfi_disk_print(int verbose) | ||||
snprintf(line, sizeof(line), " cfi%d CFI flash device\n", 0); | snprintf(line, sizeof(line), " cfi%d CFI flash device\n", 0); | ||||
ret = pager_output(line); | ret = pager_output(line); | ||||
if (ret != 0) | if (ret != 0) | ||||
return (ret); | return (ret); | ||||
dev.d_dev = &beri_cfi_disk; | dev.d_dev = &beri_cfi_disk; | ||||
dev.d_unit = 0; | dev.d_unit = 0; | ||||
dev.d_slice = -1; | dev.d_slice = -1; | ||||
dev.d_partition = -1; | dev.d_partition = -1; | ||||
if (disk_open(&dev, cfi_get_mediasize(), | if (disk_open(&dev, cfi_get_mediasize(), cfi_get_sectorsize()) == 0) { | ||||
cfi_get_sectorsize(), 0) == 0) { | |||||
snprintf(line, sizeof(line), " cfi%d", 0); | snprintf(line, sizeof(line), " cfi%d", 0); | ||||
ret = disk_print(&dev, line, verbose); | ret = disk_print(&dev, line, verbose); | ||||
disk_close(&dev); | disk_close(&dev); | ||||
} | } | ||||
return (ret); | return (ret); | ||||
} | |||||
static void | |||||
beri_cfi_disk_cleanup(void) | |||||
{ | |||||
disk_cleanup(&beri_cfi_disk); | |||||
} | } |