+int target_register_commands(struct command_context_s *cmd_ctx);
+int target_register_user_commands(struct command_context_s *cmd_ctx);
+int target_init(struct command_context_s *cmd_ctx);
+int target_examine(void);
+int handle_target(void *priv);
+int target_process_reset(struct command_context_s *cmd_ctx,
+ enum target_reset_mode reset_mode);
+
+int target_register_event_callback(
+ int (*callback)(struct target_s *target,
+ enum target_event event, void *priv),
+ void *priv);
+int target_unregister_event_callback(
+ int (*callback)(struct target_s *target,
+ enum target_event event, void *priv),
+ void *priv);
+int target_poll(target_t *target);
+int target_resume(target_t *target, int current, uint32_t address,
+ int handle_breakpoints, int debug_execution);
+int target_halt(target_t *target);
+int target_call_event_callbacks(target_t *target, enum target_event event);
+
+/**
+ * The period is very approximate, the callback can happen much more often
+ * or much more rarely than specified
+ */
+int target_register_timer_callback(int (*callback)(void *priv),
+ int time_ms, int periodic, void *priv);
+int target_unregister_timer_callback(int (*callback)(void *priv), void *priv);
+
+int target_call_timer_callbacks(void);
+/**
+ * Invoke this to ensure that e.g. polling timer callbacks happen before
+ * a syncrhonous command completes.
+ */
+int target_call_timer_callbacks_now(void);
+
+target_t* get_current_target(struct command_context_s *cmd_ctx);
+target_t *get_target(const char *id);
+
+/**
+ * Get the target name.
+ *
+ * This routine is a wrapper for the target->type->name field.
+ */
+const char *target_get_name(struct target_s *target);
+
+/**
+ * Examine the specified @a target.
+ *
+ * This routine is a wrapper for target->type->examine.
+ */
+int target_examine_one(struct target_s *target);
+/// @returns @c true if the target has been examined.
+bool target_was_examined(struct target_s *target);
+/// Sets the @c examined flag for the given target.
+void target_set_examined(struct target_s *target);
+/// Reset the @c examined flag for the given target.
+void target_reset_examined(struct target_s *target);
+
+
+/**
+ * Add the @a breakpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->add_breakpoint.
+ */
+int target_add_breakpoint(struct target_s *target,
+ struct breakpoint_s *breakpoint);
+/**
+ * Remove the @a breakpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->remove_breakpoint.
+ */
+int target_remove_breakpoint(struct target_s *target,
+ struct breakpoint_s *breakpoint);
+/**
+ * Add the @a watchpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->add_watchpoint.
+ */
+int target_add_watchpoint(struct target_s *target,
+ struct watchpoint *watchpoint);
+/**
+ * Remove the @a watchpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->remove_watchpoint.
+ */
+int target_remove_watchpoint(struct target_s *target,
+ struct watchpoint *watchpoint);
+
+/**
+ * Obtain the registers for GDB.
+ *
+ * This routine is a wrapper for target->type->get_gdb_reg_list.
+ */
+int target_get_gdb_reg_list(struct target_s *target,
+ struct reg_s **reg_list[], int *reg_list_size);
+
+/**
+ * Step the target.
+ *
+ * This routine is a wrapper for target->type->step.
+ */
+int target_step(struct target_s *target,
+ int current, uint32_t address, int handle_breakpoints);
+/**
+ * Run an algorithm on the @a target given.
+ *
+ * This routine is a wrapper for target->type->run_algorithm.
+ */
+int target_run_algorithm(struct target_s *target,
+ int num_mem_params, struct mem_param *mem_params,
+ int num_reg_params, struct reg_param *reg_param,
+ uint32_t entry_point, uint32_t exit_point,
+ int timeout_ms, void *arch_info);
+
+/**
+ * Read @a count items of @a size bytes from the memory of @a target at
+ * the @a address given.
+ *
+ * This routine is a wrapper for target->type->read_memory.
+ */
+int target_read_memory(struct target_s *target,
+ uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+/**
+ * Write @a count items of @a size bytes to the memory of @a target at
+ * the @a address given.
+ *
+ * This routine is wrapper for target->type->write_memory.
+ */
+int target_write_memory(struct target_s *target,
+ uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+
+/**
+ * Write @a count items of 4 bytes to the memory of @a target at
+ * the @a address given. Because it operates only on whole words,
+ * this should be faster than target_write_memory().
+ *
+ * This routine is wrapper for target->type->bulk_write_memory.
+ */
+int target_bulk_write_memory(struct target_s *target,
+ uint32_t address, uint32_t count, uint8_t *buffer);