| GPIOIRQ(4) | Device Drivers Manual | GPIOIRQ(4) | 
gpioirq —
gpioirq* at gpio? offset 0 mask 0x1 flag 0x00
gpioirq driver attaches an interrupt handler to a
  one or more GPIO pins.
The base pin number is specified in the kernel configuration file with the offset locator. The mask locator can be 0x01 or greater to indicate that more pins should have an interrupt handler attached to them.
The flag locator specifies the interrupt mode to use:
0x010x020x040x080x10Note that the interrupts modes are mutually-exclusive, and exactly
    one interrupt mode must be specified. These flags correspond to the
    GPIO_INTR mode bits defined in
    sys/gpio.h. In addition to the interrupt mode,
    setting 0x1000 in flags will
    enable the printing of a message to the console whenever the interrupt
    handler is called.
The offset, mask, and
    flag locators can also be specified when
    gpioirq is attached at runtime using the
    GPIOATTACH
    ioctl(2) on the
    gpio(4) device.
/etc/gpio.conf contains:
gpio0 attach gpioirq 4 0x1ff 0x04
or a kernel was compiled to have the same parameters.
#!/usr/pkg/bin/perl
$dev = "/dev/gpioirq0";
sysopen(DEV,$dev,O_RDONLY) || die "sysopen: $!";
while (sysread(DEV,$b,3)) {
    @v = unpack("CCC",$b);
    print join(',',@v);
    print "\n";
}
gpioirq driver first appeared in
  NetBSD 9.0.
gpioirq driver was written by Brad
  Spencer
  <brad@anduin.eldar.org>.
It is important that if the gpioirq(4) device is opened that it be read, as it may be possible to run the kernel out of memory if the device is opened but not read and interrupts occur on a pin tied to the driver.
| November 5, 2023 | NetBSD 10.1 |