summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2015-02-23 13:47:32 +0100
committerDaniel Hellstrom <daniel@gaisler.com>2015-04-17 01:10:18 +0200
commitb583cc5f7570ac0961ab2bbb8d6f7925041cdfe3 (patch)
tree639cdf16aa3fe8e40f0403cedfe05bdae59357f6 /c/src/lib/libbsp/sparc/shared
parentGRSPW: Make sure buffers are 64-bit aligned (diff)
downloadrtems-b583cc5f7570ac0961ab2bbb8d6f7925041cdfe3.tar.bz2
leon,gpiolib: add mask/unmask interrupt support
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared')
-rw-r--r--c/src/lib/libbsp/sparc/shared/gpio/gpiolib.c11
-rw-r--r--c/src/lib/libbsp/sparc/shared/gpio/grgpio.c12
-rw-r--r--c/src/lib/libbsp/sparc/shared/include/gpiolib.h4
3 files changed, 27 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/gpio/gpiolib.c b/c/src/lib/libbsp/sparc/shared/gpio/gpiolib.c
index 22f1baa5f3..4eca013267 100644
--- a/c/src/lib/libbsp/sparc/shared/gpio/gpiolib.c
+++ b/c/src/lib/libbsp/sparc/shared/gpio/gpiolib.c
@@ -251,6 +251,17 @@ int gpiolib_irq_disable(void *handle)
return gpiolib_irq_opts(handle, GPIOLIB_IRQ_DISABLE);
}
+int gpiolib_irq_mask(void *handle)
+{
+ return gpiolib_irq_opts(handle, GPIOLIB_IRQ_MASK);
+}
+
+int gpiolib_irq_unmask(void *handle)
+{
+ return gpiolib_irq_opts(handle, GPIOLIB_IRQ_UNMASK);
+}
+
+
/*** Initialization ***/
int gpiolib_initialize(void)
{
diff --git a/c/src/lib/libbsp/sparc/shared/gpio/grgpio.c b/c/src/lib/libbsp/sparc/shared/gpio/grgpio.c
index 92e9657833..eab8ef94d2 100644
--- a/c/src/lib/libbsp/sparc/shared/gpio/grgpio.c
+++ b/c/src/lib/libbsp/sparc/shared/gpio/grgpio.c
@@ -262,6 +262,18 @@ int grgpio_grpiolib_irq_opts(void *handle, unsigned int options)
return -1;
}
}
+ if ( options & GPIOLIB_IRQ_MASK ) {
+ /* Mask (disable) interrupt at interrupt controller */
+ if ( drvmgr_interrupt_mask(priv->dev, portnr) ) {
+ return -1;
+ }
+ }
+ if ( options & GPIOLIB_IRQ_UNMASK ) {
+ /* Unmask (enable) interrupt at interrupt controller */
+ if ( drvmgr_interrupt_unmask(priv->dev, portnr) ) {
+ return -1;
+ }
+ }
return 0;
}
diff --git a/c/src/lib/libbsp/sparc/shared/include/gpiolib.h b/c/src/lib/libbsp/sparc/shared/include/gpiolib.h
index 466a131830..c8bfe0f6ed 100644
--- a/c/src/lib/libbsp/sparc/shared/include/gpiolib.h
+++ b/c/src/lib/libbsp/sparc/shared/include/gpiolib.h
@@ -51,6 +51,8 @@ extern int gpiolib_get(void *handle, int *inval);
extern int gpiolib_irq_clear(void *handle);
extern int gpiolib_irq_enable(void *handle);
extern int gpiolib_irq_disable(void *handle);
+extern int gpiolib_irq_mask(void *handle);
+extern int gpiolib_irq_unmask(void *handle);
extern int gpiolib_irq_force(void *handle);
extern int gpiolib_irq_register(void *handle, void *func, void *arg);
@@ -75,6 +77,8 @@ struct gpiolib_drv_ops {
#define GPIOLIB_IRQ_DISABLE 0x02
#define GPIOLIB_IRQ_CLEAR 0x04
#define GPIOLIB_IRQ_FORCE 0x08
+#define GPIOLIB_IRQ_MASK 0x10
+#define GPIOLIB_IRQ_UNMASK 0x20
struct gpiolib_drv {
struct gpiolib_drv_ops *ops;