You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

490 lines
18 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2005 by Dominic Rath *
  3. * Dominic.Rath@gmx.de *
  4. * *
  5. * Copyright (C) 2007,2008,2009 Øyvind Harboe *
  6. * oyvind.harboe@zylin.com *
  7. * *
  8. * Copyright (C) 2008 by Spencer Oliver *
  9. * spen@spen-soft.co.uk *
  10. * *
  11. * This program is free software; you can redistribute it and/or modify *
  12. * it under the terms of the GNU General Public License as published by *
  13. * the Free Software Foundation; either version 2 of the License, or *
  14. * (at your option) any later version. *
  15. * *
  16. * This program is distributed in the hope that it will be useful, *
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  19. * GNU General Public License for more details. *
  20. * *
  21. * You should have received a copy of the GNU General Public License *
  22. * along with this program; if not, write to the *
  23. * Free Software Foundation, Inc., *
  24. * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
  25. ***************************************************************************/
  26. #ifndef TARGET_H
  27. #define TARGET_H
  28. #include <stddef.h>
  29. #include "breakpoints.h"
  30. #include "algorithm.h"
  31. #include "command.h"
  32. struct reg_s;
  33. struct trace_s;
  34. struct command_context_s;
  35. /**
  36. * Cast a member of a structure out to the containing structure.
  37. * @param ptr The pointer to the member.
  38. * @param type The type of the container struct this is embedded in.
  39. * @param member The name of the member within the struct.
  40. *
  41. * This is a mechanism which is used throughout the Linux kernel.
  42. */
  43. #define container_of(ptr, type, member) ({ \
  44. const typeof( ((type *)0)->member ) *__mptr = (ptr); \
  45. (type *)( (char *)__mptr - offsetof(type,member) );})
  46. /*
  47. * TARGET_UNKNOWN = 0: we don't know anything about the target yet
  48. * TARGET_RUNNING = 1: the target is executing user code
  49. * TARGET_HALTED = 2: the target is not executing code, and ready to talk to the
  50. * debugger. on an xscale it means that the debug handler is executing
  51. * TARGET_RESET = 3: the target is being held in reset (only a temporary state,
  52. * not sure how this is used with all the recent changes)
  53. * TARGET_DEBUG_RUNNING = 4: the target is running, but it is executing code on
  54. * behalf of the debugger (e.g. algorithm for flashing)
  55. *
  56. * also see: target_state_name();
  57. */
  58. enum target_state
  59. {
  60. TARGET_UNKNOWN = 0,
  61. TARGET_RUNNING = 1,
  62. TARGET_HALTED = 2,
  63. TARGET_RESET = 3,
  64. TARGET_DEBUG_RUNNING = 4,
  65. };
  66. extern const Jim_Nvp nvp_target_state[];
  67. enum nvp_assert {
  68. NVP_DEASSERT,
  69. NVP_ASSERT,
  70. };
  71. extern const Jim_Nvp nvp_assert[];
  72. enum target_reset_mode
  73. {
  74. RESET_UNKNOWN = 0,
  75. RESET_RUN = 1, /* reset and let target run */
  76. RESET_HALT = 2, /* reset and halt target out of reset */
  77. RESET_INIT = 3, /* reset and halt target out of reset, then run init script */
  78. };
  79. extern const Jim_Nvp nvp_reset_mode[];
  80. enum target_debug_reason
  81. {
  82. DBG_REASON_DBGRQ = 0,
  83. DBG_REASON_BREAKPOINT = 1,
  84. DBG_REASON_WATCHPOINT = 2,
  85. DBG_REASON_WPTANDBKPT = 3,
  86. DBG_REASON_SINGLESTEP = 4,
  87. DBG_REASON_NOTHALTED = 5,
  88. DBG_REASON_UNDEFINED = 6
  89. };
  90. extern const Jim_Nvp nvp_target_debug_reason[];
  91. enum target_endianess
  92. {
  93. TARGET_ENDIAN_UNKNOWN = 0,
  94. TARGET_BIG_ENDIAN = 1, TARGET_LITTLE_ENDIAN = 2
  95. };
  96. extern const Jim_Nvp nvp_target_endian[];
  97. struct target_s;
  98. struct working_area
  99. {
  100. uint32_t address;
  101. uint32_t size;
  102. int free;
  103. uint8_t *backup;
  104. struct working_area **user;
  105. struct working_area *next;
  106. };
  107. // target_type.h contains the full definitionof struct target_type_s
  108. struct target_type_s;
  109. typedef struct target_type_s target_type_t;
  110. typedef struct target_s
  111. {
  112. target_type_t *type; /* target type definition (name, access functions) */
  113. const char *cmd_name; /* tcl Name of target */
  114. int target_number; /* DO NOT USE! field to be removed in 2010 */
  115. struct jtag_tap *tap; /* where on the jtag chain is this */
  116. const char *variant; /* what varient of this chip is it? */
  117. struct target_event_action *event_action;
  118. int reset_halt; /* attempt resetting the CPU into the halted mode? */
  119. uint32_t working_area; /* working area (initialized RAM). Evaluated
  120. * upon first allocation from virtual/physical address. */
  121. bool working_area_virt_spec; /* virtual address specified? */
  122. uint32_t working_area_virt; /* virtual address */
  123. bool working_area_phys_spec; /* virtual address specified? */
  124. uint32_t working_area_phys; /* physical address */
  125. uint32_t working_area_size; /* size in bytes */
  126. uint32_t backup_working_area; /* whether the content of the working area has to be preserved */
  127. struct working_area *working_areas;/* list of allocated working areas */
  128. enum target_debug_reason debug_reason;/* reason why the target entered debug state */
  129. enum target_endianess endianness; /* target endianess */
  130. // also see: target_state_name()
  131. enum target_state state; /* the current backend-state (running, halted, ...) */
  132. struct reg_cache *reg_cache; /* the first register cache of the target (core regs) */
  133. struct breakpoint *breakpoints; /* list of breakpoints */
  134. struct watchpoint *watchpoints; /* list of watchpoints */
  135. struct trace_s *trace_info; /* generic trace information */
  136. struct debug_msg_receiver *dbgmsg;/* list of debug message receivers */
  137. uint32_t dbg_msg_enabled; /* debug message status */
  138. void *arch_info; /* architecture specific information */
  139. struct target_s *next; /* next target in list */
  140. int display; /* display async info in telnet session. Do not display
  141. * lots of halted/resumed info when stepping in debugger. */
  142. bool halt_issued; /* did we transition to halted state? */
  143. long long halt_issued_time; /* Note time when halt was issued */
  144. } target_t;
  145. enum target_event
  146. {
  147. /* LD historical names
  148. * - Prior to the great TCL change
  149. * - June/July/Aug 2008
  150. * - Duane Ellis */
  151. TARGET_EVENT_OLD_gdb_program_config,
  152. TARGET_EVENT_OLD_pre_reset,
  153. TARGET_EVENT_OLD_post_reset,
  154. TARGET_EVENT_OLD_pre_resume,
  155. /* allow GDB to do stuff before others handle the halted event,
  156. * this is in lieu of defining ordering of invocation of events,
  157. * which would be more complicated
  158. *
  159. * Telling GDB to halt does not mean that the target stopped running,
  160. * simply that we're dropping out of GDB's waiting for step or continue.
  161. *
  162. * This can be useful when e.g. detecting power dropout.
  163. */
  164. TARGET_EVENT_GDB_HALT,
  165. TARGET_EVENT_HALTED, /* target entered debug state from normal execution or reset */
  166. TARGET_EVENT_RESUMED, /* target resumed to normal execution */
  167. TARGET_EVENT_RESUME_START,
  168. TARGET_EVENT_RESUME_END,
  169. TARGET_EVENT_GDB_START, /* debugger started execution (step/run) */
  170. TARGET_EVENT_GDB_END, /* debugger stopped execution (step/run) */
  171. TARGET_EVENT_RESET_START,
  172. TARGET_EVENT_RESET_ASSERT_PRE,
  173. TARGET_EVENT_RESET_ASSERT_POST,
  174. TARGET_EVENT_RESET_DEASSERT_PRE,
  175. TARGET_EVENT_RESET_DEASSERT_POST,
  176. TARGET_EVENT_RESET_HALT_PRE,
  177. TARGET_EVENT_RESET_HALT_POST,
  178. TARGET_EVENT_RESET_WAIT_PRE,
  179. TARGET_EVENT_RESET_WAIT_POST,
  180. TARGET_EVENT_RESET_INIT,
  181. TARGET_EVENT_RESET_END,
  182. TARGET_EVENT_DEBUG_HALTED, /* target entered debug state, but was executing on behalf of the debugger */
  183. TARGET_EVENT_DEBUG_RESUMED, /* target resumed to execute on behalf of the debugger */
  184. TARGET_EVENT_EXAMINE_START,
  185. TARGET_EVENT_EXAMINE_END,
  186. TARGET_EVENT_GDB_ATTACH,
  187. TARGET_EVENT_GDB_DETACH,
  188. TARGET_EVENT_GDB_FLASH_ERASE_START,
  189. TARGET_EVENT_GDB_FLASH_ERASE_END,
  190. TARGET_EVENT_GDB_FLASH_WRITE_START,
  191. TARGET_EVENT_GDB_FLASH_WRITE_END,
  192. };
  193. struct target_event_action {
  194. enum target_event event;
  195. Jim_Obj *body;
  196. int has_percent;
  197. struct target_event_action *next;
  198. };
  199. struct target_event_callback
  200. {
  201. int (*callback)(struct target_s *target, enum target_event event, void *priv);
  202. void *priv;
  203. struct target_event_callback *next;
  204. };
  205. struct target_timer_callback
  206. {
  207. int (*callback)(void *priv);
  208. int time_ms;
  209. int periodic;
  210. struct timeval when;
  211. void *priv;
  212. struct target_timer_callback *next;
  213. };
  214. int target_register_commands(struct command_context_s *cmd_ctx);
  215. int target_register_user_commands(struct command_context_s *cmd_ctx);
  216. int target_init(struct command_context_s *cmd_ctx);
  217. int target_examine(void);
  218. int handle_target(void *priv);
  219. int target_process_reset(struct command_context_s *cmd_ctx,
  220. enum target_reset_mode reset_mode);
  221. int target_register_event_callback(
  222. int (*callback)(struct target_s *target,
  223. enum target_event event, void *priv),
  224. void *priv);
  225. int target_unregister_event_callback(
  226. int (*callback)(struct target_s *target,
  227. enum target_event event, void *priv),
  228. void *priv);
  229. int target_poll(target_t *target);
  230. int target_resume(target_t *target, int current, uint32_t address,
  231. int handle_breakpoints, int debug_execution);
  232. int target_halt(target_t *target);
  233. int target_call_event_callbacks(target_t *target, enum target_event event);
  234. /**
  235. * The period is very approximate, the callback can happen much more often
  236. * or much more rarely than specified
  237. */
  238. int target_register_timer_callback(int (*callback)(void *priv),
  239. int time_ms, int periodic, void *priv);
  240. int target_unregister_timer_callback(int (*callback)(void *priv), void *priv);
  241. int target_call_timer_callbacks(void);
  242. /**
  243. * Invoke this to ensure that e.g. polling timer callbacks happen before
  244. * a syncrhonous command completes.
  245. */
  246. int target_call_timer_callbacks_now(void);
  247. target_t* get_current_target(struct command_context_s *cmd_ctx);
  248. target_t *get_target(const char *id);
  249. /**
  250. * Get the target name.
  251. *
  252. * This routine is a wrapper for the target->type->name field.
  253. */
  254. const char *target_get_name(struct target_s *target);
  255. /**
  256. * Examine the specified @a target.
  257. *
  258. * This routine is a wrapper for target->type->examine.
  259. */
  260. int target_examine_one(struct target_s *target);
  261. /// @returns @c true if the target has been examined.
  262. bool target_was_examined(struct target_s *target);
  263. /// Sets the @c examined flag for the given target.
  264. void target_set_examined(struct target_s *target);
  265. /// Reset the @c examined flag for the given target.
  266. void target_reset_examined(struct target_s *target);
  267. /**
  268. * Add the @a breakpoint for @a target.
  269. *
  270. * This routine is a wrapper for target->type->add_breakpoint.
  271. */
  272. int target_add_breakpoint(struct target_s *target,
  273. struct breakpoint *breakpoint);
  274. /**
  275. * Remove the @a breakpoint for @a target.
  276. *
  277. * This routine is a wrapper for target->type->remove_breakpoint.
  278. */
  279. int target_remove_breakpoint(struct target_s *target,
  280. struct breakpoint *breakpoint);
  281. /**
  282. * Add the @a watchpoint for @a target.
  283. *
  284. * This routine is a wrapper for target->type->add_watchpoint.
  285. */
  286. int target_add_watchpoint(struct target_s *target,
  287. struct watchpoint *watchpoint);
  288. /**
  289. * Remove the @a watchpoint for @a target.
  290. *
  291. * This routine is a wrapper for target->type->remove_watchpoint.
  292. */
  293. int target_remove_watchpoint(struct target_s *target,
  294. struct watchpoint *watchpoint);
  295. /**
  296. * Obtain the registers for GDB.
  297. *
  298. * This routine is a wrapper for target->type->get_gdb_reg_list.
  299. */
  300. int target_get_gdb_reg_list(struct target_s *target,
  301. struct reg_s **reg_list[], int *reg_list_size);
  302. /**
  303. * Step the target.
  304. *
  305. * This routine is a wrapper for target->type->step.
  306. */
  307. int target_step(struct target_s *target,
  308. int current, uint32_t address, int handle_breakpoints);
  309. /**
  310. * Run an algorithm on the @a target given.
  311. *
  312. * This routine is a wrapper for target->type->run_algorithm.
  313. */
  314. int target_run_algorithm(struct target_s *target,
  315. int num_mem_params, struct mem_param *mem_params,
  316. int num_reg_params, struct reg_param *reg_param,
  317. uint32_t entry_point, uint32_t exit_point,
  318. int timeout_ms, void *arch_info);
  319. /**
  320. * Read @a count items of @a size bytes from the memory of @a target at
  321. * the @a address given.
  322. *
  323. * This routine is a wrapper for target->type->read_memory.
  324. */
  325. int target_read_memory(struct target_s *target,
  326. uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
  327. /**
  328. * Write @a count items of @a size bytes to the memory of @a target at
  329. * the @a address given.
  330. *
  331. * This routine is wrapper for target->type->write_memory.
  332. */
  333. int target_write_memory(struct target_s *target,
  334. uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
  335. /**
  336. * Write @a count items of 4 bytes to the memory of @a target at
  337. * the @a address given. Because it operates only on whole words,
  338. * this should be faster than target_write_memory().
  339. *
  340. * This routine is wrapper for target->type->bulk_write_memory.
  341. */
  342. int target_bulk_write_memory(struct target_s *target,
  343. uint32_t address, uint32_t count, uint8_t *buffer);
  344. /*
  345. * Write to target memory using the virtual address.
  346. *
  347. * Note that this fn is used to implement software breakpoints. Targets
  348. * can implement support for software breakpoints to memory marked as read
  349. * only by making this fn write to ram even if it is read only(MMU or
  350. * MPUs).
  351. *
  352. * It is sufficient to implement for writing a single word(16 or 32 in
  353. * ARM32/16 bit case) to write the breakpoint to ram.
  354. *
  355. * The target should also take care of "other things" to make sure that
  356. * software breakpoints can be written using this function. E.g.
  357. * when there is a separate instruction and data cache, this fn must
  358. * make sure that the instruction cache is synced up to the potential
  359. * code change that can happen as a result of the memory write(typically
  360. * by invalidating the cache).
  361. *
  362. * The high level wrapper fn in target.c will break down this memory write
  363. * request to multiple write requests to the target driver to e.g. guarantee
  364. * that writing 4 bytes to an aligned address happens with a single 32 bit
  365. * write operation, thus making this fn suitable to e.g. write to special
  366. * peripheral registers which do not support byte operations.
  367. */
  368. int target_write_buffer(struct target_s *target,
  369. uint32_t address, uint32_t size, uint8_t *buffer);
  370. int target_read_buffer(struct target_s *target,
  371. uint32_t address, uint32_t size, uint8_t *buffer);
  372. int target_checksum_memory(struct target_s *target,
  373. uint32_t address, uint32_t size, uint32_t* crc);
  374. int target_blank_check_memory(struct target_s *target,
  375. uint32_t address, uint32_t size, uint32_t* blank);
  376. int target_wait_state(target_t *target, enum target_state state, int ms);
  377. /** Return the *name* of this targets current state */
  378. const char *target_state_name( target_t *target );
  379. /* DANGER!!!!!
  380. *
  381. * if "area" passed in to target_alloc_working_area() points to a memory
  382. * location that goes out of scope (e.g. a pointer on the stack), then
  383. * the caller of target_alloc_working_area() is responsible for invoking
  384. * target_free_working_area() before "area" goes out of scope.
  385. *
  386. * target_free_all_working_areas() will NULL out the "area" pointer
  387. * upon resuming or resetting the CPU.
  388. *
  389. */
  390. int target_alloc_working_area(struct target_s *target,
  391. uint32_t size, struct working_area **area);
  392. int target_free_working_area(struct target_s *target, struct working_area *area);
  393. int target_free_working_area_restore(struct target_s *target,
  394. struct working_area *area, int restore);
  395. void target_free_all_working_areas(struct target_s *target);
  396. void target_free_all_working_areas_restore(struct target_s *target, int restore);
  397. extern target_t *all_targets;
  398. extern struct target_event_callback *target_event_callbacks;
  399. extern struct target_timer_callback *target_timer_callbacks;
  400. uint32_t target_buffer_get_u32(target_t *target, const uint8_t *buffer);
  401. uint16_t target_buffer_get_u16(target_t *target, const uint8_t *buffer);
  402. uint8_t target_buffer_get_u8 (target_t *target, const uint8_t *buffer);
  403. void target_buffer_set_u32(target_t *target, uint8_t *buffer, uint32_t value);
  404. void target_buffer_set_u16(target_t *target, uint8_t *buffer, uint16_t value);
  405. void target_buffer_set_u8 (target_t *target, uint8_t *buffer, uint8_t value);
  406. int target_read_u32(struct target_s *target, uint32_t address, uint32_t *value);
  407. int target_read_u16(struct target_s *target, uint32_t address, uint16_t *value);
  408. int target_read_u8(struct target_s *target, uint32_t address, uint8_t *value);
  409. int target_write_u32(struct target_s *target, uint32_t address, uint32_t value);
  410. int target_write_u16(struct target_s *target, uint32_t address, uint16_t value);
  411. int target_write_u8(struct target_s *target, uint32_t address, uint8_t value);
  412. /* Issues USER() statements with target state information */
  413. int target_arch_state(struct target_s *target);
  414. void target_handle_event(target_t *t, enum target_event e);
  415. void target_all_handle_event(enum target_event e);
  416. #define ERROR_TARGET_INVALID (-300)
  417. #define ERROR_TARGET_INIT_FAILED (-301)
  418. #define ERROR_TARGET_TIMEOUT (-302)
  419. #define ERROR_TARGET_NOT_HALTED (-304)
  420. #define ERROR_TARGET_FAILURE (-305)
  421. #define ERROR_TARGET_UNALIGNED_ACCESS (-306)
  422. #define ERROR_TARGET_DATA_ABORT (-307)
  423. #define ERROR_TARGET_RESOURCE_NOT_AVAILABLE (-308)
  424. #define ERROR_TARGET_TRANSLATION_FAULT (-309)
  425. #define ERROR_TARGET_NOT_RUNNING (-310)
  426. #define ERROR_TARGET_NOT_EXAMINED (-311)
  427. extern const Jim_Nvp nvp_error_target[];
  428. const char *target_strerror_safe(int err);
  429. #endif /* TARGET_H */