diff options
-rw-r--r-- | sys/fs/devfs.c | 12 | ||||
-rw-r--r-- | sys/include/sys/device.h | 4 |
2 files changed, 14 insertions, 2 deletions
diff --git a/sys/fs/devfs.c b/sys/fs/devfs.c index e320973..81c2a43 100644 --- a/sys/fs/devfs.c +++ b/sys/fs/devfs.c @@ -55,6 +55,14 @@ cdevsw_read(void *devsw, dev_t dev, struct sio_txn *sio) return cdevsw->read(dev, sio, 0); } +static inline int +bdevsw_read(void *devsw, dev_t dev, struct sio_txn *sio) +{ + struct bdevsw *bdevsw = devsw; + + return bdevsw->read(dev, sio, 0); +} + /* * Get a devfs node by name. * @@ -134,8 +142,8 @@ devfs_read(struct vnode *vp, struct sio_txn *sio) if (!dnp->is_block) return cdevsw_read(devsw, dnp->dev, sio); - /* TODO: Block devices */ - return -EIO; + /* Block device */ + return bdevsw_read(devsw, dnp->dev, sio); } static int diff --git a/sys/include/sys/device.h b/sys/include/sys/device.h index 3ba7141..edf83ae 100644 --- a/sys/include/sys/device.h +++ b/sys/include/sys/device.h @@ -44,6 +44,10 @@ struct cdevsw { int(*read)(dev_t dev, struct sio_txn *sio, int flags); }; +struct bdevsw { + int(*read)(dev_t dev, struct sio_txn *sio, int flags); +}; + void *dev_get(devmajor_t major, dev_t dev); dev_t dev_alloc(devmajor_t major); |