Changeset View
Changeset View
Standalone View
Standalone View
head/sys/boot/userboot/userboot/userboot_disk.c
Show First 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | |||||
int userboot_disk_maxunit = 0; | int userboot_disk_maxunit = 0; | ||||
static int userdisk_maxunit = 0; | static int userdisk_maxunit = 0; | ||||
static struct userdisk_info *ud_info; | static struct userdisk_info *ud_info; | ||||
static int userdisk_init(void); | static int userdisk_init(void); | ||||
static void userdisk_cleanup(void); | static void userdisk_cleanup(void); | ||||
static int userdisk_strategy(void *devdata, int flag, daddr_t dblk, | static int userdisk_strategy(void *devdata, int flag, daddr_t dblk, | ||||
size_t offset, size_t size, char *buf, size_t *rsize); | size_t size, char *buf, size_t *rsize); | ||||
static int userdisk_realstrategy(void *devdata, int flag, daddr_t dblk, | static int userdisk_realstrategy(void *devdata, int flag, daddr_t dblk, | ||||
size_t offset, size_t size, char *buf, size_t *rsize); | size_t size, char *buf, size_t *rsize); | ||||
static int userdisk_open(struct open_file *f, ...); | static int userdisk_open(struct open_file *f, ...); | ||||
static int userdisk_close(struct open_file *f); | static int userdisk_close(struct open_file *f); | ||||
static int userdisk_ioctl(struct open_file *f, u_long cmd, void *data); | static int userdisk_ioctl(struct open_file *f, u_long cmd, void *data); | ||||
static int userdisk_print(int verbose); | static int userdisk_print(int verbose); | ||||
struct devsw userboot_disk = { | struct devsw userboot_disk = { | ||||
"disk", | "disk", | ||||
DEVT_DISK, | DEVT_DISK, | ||||
▲ Show 20 Lines • Show All 116 Lines • ▼ Show 20 Lines | userdisk_close(struct open_file *f) | ||||
if (ud_info[dev->d_unit].ud_open == 0) { | if (ud_info[dev->d_unit].ud_open == 0) { | ||||
bcache_free(ud_info[dev->d_unit].ud_bcache); | bcache_free(ud_info[dev->d_unit].ud_bcache); | ||||
ud_info[dev->d_unit].ud_bcache = NULL; | ud_info[dev->d_unit].ud_bcache = NULL; | ||||
} | } | ||||
return (disk_close(dev)); | return (disk_close(dev)); | ||||
} | } | ||||
static int | static int | ||||
userdisk_strategy(void *devdata, int rw, daddr_t dblk, size_t offset, | userdisk_strategy(void *devdata, int rw, daddr_t dblk, size_t size, | ||||
size_t size, char *buf, size_t *rsize) | char *buf, size_t *rsize) | ||||
{ | { | ||||
struct bcache_devdata bcd; | struct bcache_devdata bcd; | ||||
struct disk_devdesc *dev; | struct disk_devdesc *dev; | ||||
dev = (struct disk_devdesc *)devdata; | dev = (struct disk_devdesc *)devdata; | ||||
bcd.dv_strategy = userdisk_realstrategy; | bcd.dv_strategy = userdisk_realstrategy; | ||||
bcd.dv_devdata = devdata; | bcd.dv_devdata = devdata; | ||||
bcd.dv_cache = ud_info[dev->d_unit].ud_bcache; | bcd.dv_cache = ud_info[dev->d_unit].ud_bcache; | ||||
return (bcache_strategy(&bcd, rw, dblk + dev->d_offset, offset, | return (bcache_strategy(&bcd, rw, dblk + dev->d_offset, | ||||
size, buf, rsize)); | size, buf, rsize)); | ||||
} | } | ||||
static int | static int | ||||
userdisk_realstrategy(void *devdata, int rw, daddr_t dblk, size_t offset, | userdisk_realstrategy(void *devdata, int rw, daddr_t dblk, size_t size, | ||||
size_t size, char *buf, size_t *rsize) | char *buf, size_t *rsize) | ||||
{ | { | ||||
struct disk_devdesc *dev = devdata; | struct disk_devdesc *dev = devdata; | ||||
uint64_t off; | uint64_t off; | ||||
size_t resid; | size_t resid; | ||||
int rc; | int rc; | ||||
if (rw == F_WRITE) | if (rw == F_WRITE) | ||||
return (EROFS); | return (EROFS); | ||||
Show All 21 Lines |