#include <stddef.h>
#include <stdint.h>
+/** Supported output drive modes for adaptor GPIO */
+enum adapter_gpio_drive_mode {
+ ADAPTER_GPIO_DRIVE_MODE_PUSH_PULL,
+ ADAPTER_GPIO_DRIVE_MODE_OPEN_DRAIN,
+ ADAPTER_GPIO_DRIVE_MODE_OPEN_SOURCE,
+};
+
+/** Supported GPIO directions */
+enum adapter_gpio_direction {
+ ADAPTER_GPIO_DIRECTION_INPUT,
+ ADAPTER_GPIO_DIRECTION_OUTPUT,
+ ADAPTER_GPIO_DIRECTION_BIDIRECTIONAL,
+};
+
+/** Supported initial states for GPIO */
+enum adapter_gpio_init_state {
+ ADAPTER_GPIO_INIT_STATE_INACTIVE, /* Should be zero so it is the default state */
+ ADAPTER_GPIO_INIT_STATE_ACTIVE,
+ ADAPTER_GPIO_INIT_STATE_INPUT,
+};
+
+/** Supported pull directions for GPIO */
+enum adapter_gpio_pull {
+ ADAPTER_GPIO_PULL_NONE,
+ ADAPTER_GPIO_PULL_UP,
+ ADAPTER_GPIO_PULL_DOWN,
+};
+
+/** Adapter GPIO */
+enum adapter_gpio_config_index {
+ ADAPTER_GPIO_IDX_TDO,
+ ADAPTER_GPIO_IDX_TDI,
+ ADAPTER_GPIO_IDX_TMS,
+ ADAPTER_GPIO_IDX_TCK,
+ ADAPTER_GPIO_IDX_TRST,
+ ADAPTER_GPIO_IDX_SWDIO,
+ ADAPTER_GPIO_IDX_SWDIO_DIR,
+ ADAPTER_GPIO_IDX_SWCLK,
+ ADAPTER_GPIO_IDX_SRST,
+ ADAPTER_GPIO_IDX_LED,
+ ADAPTER_GPIO_IDX_NUM, /* must be the last item */
+};
+
+/** Configuration options for a single GPIO */
+struct adapter_gpio_config {
+ int gpio_num;
+ int chip_num;
+ enum adapter_gpio_drive_mode drive; /* For outputs only */
+ enum adapter_gpio_init_state init_state;
+ bool active_low;
+ enum adapter_gpio_pull pull;
+};
+
struct command_context;
/** Register the adapter's commands */
/** Retrieves the serial number set with command 'adapter serial' */
const char *adapter_get_required_serial(void);
+/**
+ * Retrieves gpio name
+ */
+const char *adapter_gpio_get_name(enum adapter_gpio_config_index idx);
+
+/**
+ * Retrieves gpio configuration set with command 'adapter gpio <signal_name>'
+ */
+const struct adapter_gpio_config *adapter_gpio_get_config(void);
+
#endif /* OPENOCD_JTAG_ADAPTER_H */