#ifndef _SYS_GPIO_KGPIO_H
#define _SYS_GPIO_KGPIO_H
#include <sys/stdint.h>
#include <sys/param.h>
#include <sys/gpio/kgpio_attr.h>
#ifdef __cplusplus
extern "C" {
#endif
#define KGPIO_IOC (('k' << 24) | ('g' << 16) | ('p' << 8))
#define KGPIO_IOC_CTRL_INFO (KGPIO_IOC | 1)
typedef struct {
uint32_t kci_ngroups;
uint32_t kci_ngpios;
uint32_t kci_ndpios;
uint32_t kci_pad;
char kci_devpath[MAXPATHLEN];
} kgpio_ctrl_info_t;
#define KGPIO_IOC_GPIO_INFO (KGPIO_IOC | 2)
typedef enum {
KGPIO_GPIO_F_DPIO = 1 << 0
} kgpio_gpio_flags_t;
typedef struct {
uint32_t kgi_id;
kgpio_gpio_flags_t kgi_flags;
uintptr_t kgi_attr;
size_t kgi_attr_len;
} kgpio_gpio_info_t;
#define KGPIO_IOC_GPIO_UPDATE (KGPIO_IOC | 3)
typedef enum {
KGPIO_UPDATE_ERROR = 1 << 0,
KGPIO_UPDATE_ERR_NVL_VALID = 1 << 1
} kgpio_update_flags_t;
typedef struct {
uint32_t kgu_id;
kgpio_update_flags_t kgu_flags;
uintptr_t kgu_attr;
size_t kgu_attr_len;
uintptr_t kgu_err;
size_t kgu_err_len;
} kgpio_update_t;
#define KGPIO_IOC_DPIO_CREATE (KGPIO_IOC | 4)
typedef enum {
KGPIO_DPIO_F_READ = 1 << 0,
KGPIO_DPIO_F_WRITE = 1 << 1,
KGPIO_DPIO_F_KERNEL = 1 << 2
} kgpio_dpio_flags_t;
#define KGPIO_DPIO_NAMELEN 32
typedef struct {
uint32_t kdc_id;
kgpio_dpio_flags_t kdc_flags;
char kdc_name[KGPIO_DPIO_NAMELEN];
} kgpio_dpio_create_t;
#define KGPIO_IOC_DPIO_DESTROY (KGPIO_IOC | 5)
typedef struct {
uint32_t kdd_id;
uint32_t kdd_pad;
} kgpio_dpio_destroy_t;
#define KGPIO_IOC_GPIO_NAME2ID (KGPIO_IOC | 6)
typedef struct {
char kin_name[MAXPATHLEN];
uint32_t kin_id;
} kgpio_ioc_name2id_t;
#ifdef _KERNEL
typedef struct {
uint32_t kgi_id;
kgpio_gpio_flags_t kgi_flags;
uintptr32_t kgi_attr;
size32_t kgi_attr_len;
} kgpio_gpio_info32_t;
typedef struct {
uint32_t kgu_id;
kgpio_update_flags_t kgu_flags;
uintptr32_t kgu_attr;
size32_t kgu_attr_len;
uintptr32_t kgu_err;
size32_t kgu_err_len;
} kgpio_update32_t;
#endif
#ifdef __cplusplus
}
#endif
#endif