From bf92da35b8fd8a9b7d6c97765067254f5832ab91 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Fri, 18 Sep 2015 23:49:44 -0700 Subject: [PATCH] Fix crash on access to gpio device. --- sys/include/conf.h | 5 ----- sys/pic32/devsw.c | 53 +++++++++++++++++++++++++++++----------------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/sys/include/conf.h b/sys/include/conf.h index bb56de7..056a2ee 100644 --- a/sys/include/conf.h +++ b/sys/include/conf.h @@ -58,11 +58,6 @@ struct cdevsw extern const struct bdevsw bdevsw[]; extern const struct cdevsw cdevsw[]; -extern int nulldev(); -extern int norw(dev_t dev, struct uio *uio, int flag); -extern int noioctl(dev_t dev, u_int cmd, caddr_t data, int flag); -extern void noroot(caddr_t csr); - int rawrw (dev_t dev, struct uio *uio, int flag); #endif diff --git a/sys/pic32/devsw.c b/sys/pic32/devsw.c index 7dd562e..145a7f1 100644 --- a/sys/pic32/devsw.c +++ b/sys/pic32/devsw.c @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -26,9 +27,6 @@ extern int strcmp(char *s1, char *s2); #ifdef UARTUSB_ENABLED # include #endif -#ifdef GPIO_ENABLED -# include -#endif #ifdef ADC_ENABLED # include #endif @@ -55,12 +53,19 @@ extern int strcmp(char *s1, char *s2); * Null routine; placed in insignificant entries * in the bdevsw and cdevsw tables. */ -int nulldev () +static int nulldev () { return (0); } -int norw (dev, uio, flag) +static int noopen (dev, flag, mode) + dev_t dev; + int flag, mode; +{ + return ENXIO; +} + +static int norw (dev, uio, flag) dev_t dev; struct uio *uio; int flag; @@ -68,7 +73,7 @@ int norw (dev, uio, flag) return (0); } -int noioctl (dev, cmd, data, flag) +static int noioctl (dev, cmd, data, flag) dev_t dev; u_int cmd; caddr_t data; @@ -80,7 +85,7 @@ int noioctl (dev, cmd, data, flag) /* * root attach routine */ -void noroot (csr) +static void noroot (csr) caddr_t csr; { /* Empty. */ @@ -118,6 +123,11 @@ const struct bdevsw bdevsw[] = { const int nblkdev = sizeof(bdevsw) / sizeof(bdevsw[0]) - 1; +#define NOCDEV \ + noopen, noopen, norw, norw, \ + noioctl, nulldev, 0, seltrue, \ + nostrategy, 0, 0, 0 + const struct cdevsw cdevsw[] = { /* @@ -158,7 +168,7 @@ const struct cdevsw cdevsw[] = { logioctl, nulldev, 0, logselect, nostrategy, 0, 0, logdevs #else - 0 + NOCDEV #endif }, { /* 6 - tty uart */ @@ -169,7 +179,7 @@ const struct cdevsw cdevsw[] = { uartioctl, nulldev, uartttys, uartselect, nostrategy, uartgetc, uartputc, uartdevs #else - 0 + NOCDEV #endif }, { /* 7 - tty usb */ @@ -178,7 +188,7 @@ const struct cdevsw cdevsw[] = { usbioctl, nulldev, usbttys, usbselect, nostrategy, usbgetc, usbputc, usbdevs #else - 0 + NOCDEV #endif }, { /* 8, 9 - pty */ @@ -191,16 +201,19 @@ const struct cdevsw cdevsw[] = { ptyioctl, nulldev, pt_tty, ptcselect, nostrategy, 0, 0, ptcdevs #else - 0 }, { 0 + NOCDEV }, { NOCDEV #endif }, { /* 10 - gpio */ -#ifdef GPIO_ENABLED +#if defined(GPIO_ENABLED) || defined(GPIO1_ENABLED) || \ + defined(GPIO2_ENABLED) || defined(GPIO3_ENABLED) || \ + defined(GPIO4_ENABLED) || defined(GPIO5_ENABLED) || \ + defined(GPIO6_ENABLED) gpioopen, gpioclose, gpioread, gpiowrite, gpioioctl, nulldev, 0, seltrue, nostrategy, 0, 0, gpiodevs #else - 0 + NOCDEV #endif }, { /* 11 - adc */ @@ -209,7 +222,7 @@ const struct cdevsw cdevsw[] = { adc_ioctl, nulldev, 0, seltrue, nostrategy, 0, 0, adcdevs #else - 0 + NOCDEV #endif }, { /* 12 - spi */ @@ -219,7 +232,7 @@ const struct cdevsw cdevsw[] = { spidev_ioctl, nulldev, 0, seltrue, nostrategy, 0, 0, spidevs #else - 0 + NOCDEV #endif }, { /* 13 - glcd */ @@ -228,7 +241,7 @@ const struct cdevsw cdevsw[] = { glcd_ioctl, nulldev, 0, seltrue, nostrategy, 0, 0, glcddevs #else - 0 + NOCDEV #endif }, { /* 14 - pwm */ @@ -237,7 +250,7 @@ const struct cdevsw cdevsw[] = { pwm_ioctl, nulldev, 0, seltrue, nostrategy, 0, 0, pwmdevs #else - 0 + NOCDEV #endif }, { /* 15 - picga */ // Ignore this for now - it's WIP. @@ -246,7 +259,7 @@ const struct cdevsw cdevsw[] = { picga_ioctl, nulldev, 0, seltrue, nostrategy, 0, 0, picgadevs #else - 0 + NOCDEV #endif }, { /* 16 - tft */ @@ -255,7 +268,7 @@ const struct cdevsw cdevsw[] = { hx8357_ioctl, nulldev, hx8357_ttys, hx8357_select, nostrategy, hx8357_getc, hx8357_putc, hx8357devs #else - 0 + NOCDEV #endif }, { /* 17 - skel */ @@ -264,7 +277,7 @@ const struct cdevsw cdevsw[] = { skeldev_ioctl, nulldev, 0, seltrue, nostrategy, 0, 0, skeldevs #else - 0 + NOCDEV #endif },