summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2009-02-03 19:07:41 +0000
committersam <sam@FreeBSD.org>2009-02-03 19:07:41 +0000
commit1e53abb0ad62f1814d2b07c4d51b8ba304995500 (patch)
tree4827bcf177cbbd142145370420aef1be368a76c5
parentb0deb12c847b51986cd4208470c4ff0279c49ffd (diff)
downloadFreeBSD-src-1e53abb0ad62f1814d2b07c4d51b8ba304995500.zip
FreeBSD-src-1e53abb0ad62f1814d2b07c4d51b8ba304995500.tar.gz
reorg ioctl code to simplify adding new requests
-rw-r--r--sys/dev/cfi/cfi_dev.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/sys/dev/cfi/cfi_dev.c b/sys/dev/cfi/cfi_dev.c
index aad1de2..b8db1d2 100644
--- a/sys/dev/cfi/cfi_dev.c
+++ b/sys/dev/cfi/cfi_dev.c
@@ -252,26 +252,31 @@ cfi_devioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
int error;
u_char val;
- if (cmd != CFIOCQRY)
- return (ENOIOCTL);
-
sc = dev->si_drv1;
+ error = 0;
- error = (sc->sc_writing) ? cfi_block_finish(sc) : 0;
- if (error)
- return (error);
-
- rq = (struct cfiocqry *)data;
+ switch(cmd) {
+ case CFIOCQRY:
+ if (sc->sc_writing) {
+ error = cfi_block_finish(sc);
+ if (error)
+ break;
+ }
- if (rq->offset >= sc->sc_size / sc->sc_width)
- return (ESPIPE);
- if (rq->offset + rq->count > sc->sc_size / sc->sc_width)
- return (ENOSPC);
+ rq = (struct cfiocqry *)data;
+ if (rq->offset >= sc->sc_size / sc->sc_width)
+ return (ESPIPE);
+ if (rq->offset + rq->count > sc->sc_size / sc->sc_width)
+ return (ENOSPC);
- while (!error && rq->count--) {
- val = cfi_read_qry(sc, rq->offset++);
- error = copyout(&val, rq->buffer++, 1);
+ while (!error && rq->count--) {
+ val = cfi_read_qry(sc, rq->offset++);
+ error = copyout(&val, rq->buffer++, 1);
+ }
+ break;
+ default:
+ error = ENOIOCTL;
+ break;
}
-
return (error);
}
OpenPOWER on IntegriCloud