You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(75) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(70) |
Feb
(20) |
Mar
(52) |
Apr
(149) |
May
(387) |
Jun
(466) |
Jul
(133) |
Aug
(87) |
Sep
(122) |
Oct
(140) |
Nov
(185) |
Dec
(105) |
2010 |
Jan
(85) |
Feb
(45) |
Mar
(75) |
Apr
(17) |
May
(41) |
Jun
(52) |
Jul
(33) |
Aug
(29) |
Sep
(36) |
Oct
(15) |
Nov
(26) |
Dec
(34) |
2011 |
Jan
(26) |
Feb
(25) |
Mar
(26) |
Apr
(29) |
May
(20) |
Jun
(27) |
Jul
(15) |
Aug
(32) |
Sep
(13) |
Oct
(64) |
Nov
(60) |
Dec
(10) |
2012 |
Jan
(64) |
Feb
(63) |
Mar
(39) |
Apr
(43) |
May
(54) |
Jun
(11) |
Jul
(30) |
Aug
(45) |
Sep
(11) |
Oct
(70) |
Nov
(24) |
Dec
(23) |
2013 |
Jan
(17) |
Feb
(8) |
Mar
(35) |
Apr
(40) |
May
(20) |
Jun
(24) |
Jul
(36) |
Aug
(25) |
Sep
(42) |
Oct
(40) |
Nov
(9) |
Dec
(21) |
2014 |
Jan
(29) |
Feb
(24) |
Mar
(60) |
Apr
(22) |
May
(22) |
Jun
(46) |
Jul
(11) |
Aug
(23) |
Sep
(26) |
Oct
(10) |
Nov
(14) |
Dec
(2) |
2015 |
Jan
(28) |
Feb
(47) |
Mar
(33) |
Apr
(58) |
May
(5) |
Jun
(1) |
Jul
|
Aug
(8) |
Sep
(12) |
Oct
(25) |
Nov
(58) |
Dec
(21) |
2016 |
Jan
(12) |
Feb
(40) |
Mar
(2) |
Apr
(1) |
May
(67) |
Jun
(2) |
Jul
(5) |
Aug
(36) |
Sep
|
Oct
(24) |
Nov
(17) |
Dec
(50) |
2017 |
Jan
(14) |
Feb
(16) |
Mar
(2) |
Apr
(35) |
May
(14) |
Jun
(16) |
Jul
(3) |
Aug
(3) |
Sep
|
Oct
(19) |
Nov
|
Dec
(16) |
2018 |
Jan
(55) |
Feb
(11) |
Mar
(34) |
Apr
(14) |
May
(4) |
Jun
(20) |
Jul
(39) |
Aug
(16) |
Sep
(17) |
Oct
(16) |
Nov
(20) |
Dec
(30) |
2019 |
Jan
(29) |
Feb
(24) |
Mar
(37) |
Apr
(26) |
May
(19) |
Jun
(21) |
Jul
(2) |
Aug
(3) |
Sep
(9) |
Oct
(12) |
Nov
(12) |
Dec
(12) |
2020 |
Jan
(47) |
Feb
(36) |
Mar
(54) |
Apr
(44) |
May
(37) |
Jun
(19) |
Jul
(32) |
Aug
(13) |
Sep
(16) |
Oct
(24) |
Nov
(32) |
Dec
(11) |
2021 |
Jan
(14) |
Feb
(5) |
Mar
(40) |
Apr
(32) |
May
(42) |
Jun
(31) |
Jul
(29) |
Aug
(47) |
Sep
(38) |
Oct
(17) |
Nov
(74) |
Dec
(33) |
2022 |
Jan
(11) |
Feb
(15) |
Mar
(40) |
Apr
(21) |
May
(39) |
Jun
(44) |
Jul
(19) |
Aug
(46) |
Sep
(79) |
Oct
(35) |
Nov
(21) |
Dec
(15) |
2023 |
Jan
(56) |
Feb
(13) |
Mar
(43) |
Apr
(28) |
May
(60) |
Jun
(15) |
Jul
(29) |
Aug
(28) |
Sep
(32) |
Oct
(21) |
Nov
(42) |
Dec
(39) |
2024 |
Jan
(35) |
Feb
(17) |
Mar
(28) |
Apr
(7) |
May
(14) |
Jun
(35) |
Jul
(30) |
Aug
(35) |
Sep
(30) |
Oct
(28) |
Nov
(38) |
Dec
(18) |
2025 |
Jan
(21) |
Feb
(28) |
Mar
(36) |
Apr
(35) |
May
(34) |
Jun
(58) |
Jul
(9) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <zw...@ma...> - 2009-05-27 08:44:58
|
Author: zwelch Date: 2009-05-27 08:44:43 +0200 (Wed, 27 May 2009) New Revision: 1918 Added: trunk/src/tcl/board/ trunk/src/tcl/interface/ trunk/src/tcl/target/ trunk/src/tcl/test/ Removed: trunk/src/target/board/ trunk/src/target/interface/ trunk/src/target/target/ trunk/src/target/test/ Modified: trunk/Makefile.am trunk/configure.in trunk/src/Makefile.am trunk/src/target/Makefile.am Log: Move TCL script files -- Step 1 of 2: - Move src/target/{interface,target,board,test}/ into src/tcl/ - Remove existing rules in src/Makefile.am and src/target/Makefile.am. - Add Makefile.am handling of *.cfg and *.tcl files in top Makefile.am: - Add dist-hook to include such files under src/tcl in the distribution. - Add install-data-hook to install contents of '$(top_srcdir)/src/tcl/'. - Add uninstall-hook to remove the installed script files. - Change paths to (un)install script files in '$(pkgdatadir)/scripts'. Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2009-05-27 02:01:15 UTC (rev 1917) +++ trunk/Makefile.am 2009-05-27 06:44:43 UTC (rev 1918) @@ -29,6 +29,29 @@ $(MAKE) Doxyfile doxygen Doxyfile 2>&1 | perl $(srcdir)/tools/logger.pl > doxygen.log +TCL_PATH = src/tcl +# command to find paths of script files, relative to TCL_PATH +TCL_FILES := find $(srcdir)/$(TCL_PATH) -name '*.cfg' -o -name '*.tcl' | \ + sed -e 's,^$(srcdir)/$(TCL_PATH),,' + +dist-hook: + for i in $$($(TCL_FILES)); do \ + j="$(distdir)/$(TCL_PATH)/$$i" && \ + mkdir -p "$$(dirname $$j)" && \ + $(INSTALL_DATA) $(srcdir)/$(TCL_PATH)/$$i $$j; \ + done + +install-data-hook: + for i in $$($(TCL_FILES)); do \ + j="$(DESTDIR)$(pkgdatadir)/scripts/$$i" && \ + mkdir -p "$$(dirname $$j)" && \ + $(INSTALL_DATA) $(srcdir)/$(TCL_PATH)/$$i $$j; \ + done + +uninstall-hook: + rm -rf $(DESTDIR)$(pkgdatadir)/scripts + + distclean-local: rm -rf Doxyfile doxygen Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-05-27 02:01:15 UTC (rev 1917) +++ trunk/configure.in 2009-05-27 06:44:43 UTC (rev 1918) @@ -834,6 +834,7 @@ AM_PROG_CC_C_O AC_PROG_RANLIB AC_PROG_LIBTOOL +AC_PROG_INSTALL dnl configure checks required for Jim files (these are obsolete w/ C99) AC_C_CONST Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2009-05-27 02:01:15 UTC (rev 1917) +++ trunk/src/Makefile.am 2009-05-27 06:44:43 UTC (rev 1918) @@ -92,24 +92,4 @@ libopenocd_la_LIBADD += -lmicrohttpd endif -nobase_dist_pkglib_DATA = \ - tcl/bitsbytes.tcl \ - tcl/chip/atmel/at91/aic.tcl \ - tcl/chip/atmel/at91/at91sam7x128.tcl \ - tcl/chip/atmel/at91/at91sam7x256.tcl \ - tcl/chip/atmel/at91/pmc.tcl \ - tcl/chip/atmel/at91/rtt.tcl \ - tcl/chip/atmel/at91/usarts.tcl \ - tcl/chip/st/stm32/stm32.tcl \ - tcl/chip/st/stm32/stm32_rcc.tcl \ - tcl/chip/st/stm32/stm32_regs.tcl \ - tcl/cpu/arm/arm7tdmi.tcl \ - tcl/cpu/arm/arm920.tcl \ - tcl/cpu/arm/arm946.tcl \ - tcl/cpu/arm/arm966.tcl \ - tcl/cpu/arm/cortex_m3.tcl \ - tcl/memory.tcl \ - tcl/mmr_helpers.tcl \ - tcl/readable.tcl - MAINTAINERCLEANFILES = Makefile.in Modified: trunk/src/target/Makefile.am =================================================================== --- trunk/src/target/Makefile.am 2009-05-27 02:01:15 UTC (rev 1917) +++ trunk/src/target/Makefile.am 2009-05-27 06:44:43 UTC (rev 1918) @@ -26,14 +26,5 @@ nobase_dist_pkglib_DATA = nobase_dist_pkglib_DATA += xscale/debug_handler.bin nobase_dist_pkglib_DATA += ecos/at91eb40a.elf -# Various chip targets -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/target/*.cfg) -# Various jtag interfaces -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/interface/*.cfg) -# Various preconfigured boards -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/board/*.cfg) -# test files -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/test/*.cfg) - MAINTAINERCLEANFILES = Makefile.in Copied: trunk/src/tcl/board (from rev 1917, trunk/src/target/board) Copied: trunk/src/tcl/interface (from rev 1917, trunk/src/target/interface) Copied: trunk/src/tcl/target (from rev 1917, trunk/src/target/target) Copied: trunk/src/tcl/test (from rev 1917, trunk/src/target/test) |
From: <zw...@ma...> - 2009-05-27 04:01:21
|
Author: zwelch Date: 2009-05-27 04:01:15 +0200 (Wed, 27 May 2009) New Revision: 1917 Modified: trunk/Makefile.am Log: Add warning to generated Doxyfile to edit Doxyfile.in. Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2009-05-26 23:58:01 UTC (rev 1916) +++ trunk/Makefile.am 2009-05-27 02:01:15 UTC (rev 1917) @@ -18,7 +18,12 @@ docs: pdf html doxygen Doxyfile: $(srcdir)/Doxyfile.in - sed -e 's,@srcdir\@,$(srcdir),' $< > $@ + @echo "Creating $@ from $<..." + @( \ + echo "### @@@ -= DO NOT EDIT THIS FILE =- @@@ ###" && \ + echo "### @@@ Make changes to Doxyfile.in @@@ ###" && \ + sed -e 's,@srcdir\@,$(srcdir),' $< \ + ) > $@ doxygen:: $(MAKE) Doxyfile |
From: <zw...@ma...> - 2009-05-27 01:58:07
|
Author: zwelch Date: 2009-05-27 01:58:01 +0200 (Wed, 27 May 2009) New Revision: 1916 Modified: trunk/BUGS trunk/PATCHES trunk/TODO Log: Update Doxygen markup in PATCHES, BUGS, and TODO: - In the File List, these files are listed and link to empty pages. - This patch adds @file blocks to reference the pages each file contains. - Remove redundant "OpenOCD" from PATCHES title; it clutters the tree view. Modified: trunk/BUGS =================================================================== --- trunk/BUGS 2009-05-26 01:27:56 UTC (rev 1915) +++ trunk/BUGS 2009-05-26 23:58:01 UTC (rev 1916) @@ -44,3 +44,6 @@ box. Please keep attachments to less than 100KB. */ +/** @file +This file contains the @ref bugs page. +*/ Modified: trunk/PATCHES =================================================================== --- trunk/PATCHES 2009-05-26 01:27:56 UTC (rev 1915) +++ trunk/PATCHES 2009-05-26 23:58:01 UTC (rev 1916) @@ -1,4 +1,4 @@ -/** @page patchguide OpenOCD Patch Policies +/** @page patchguide Patch Policies Please mail patches to: @@ -46,3 +46,6 @@ able to create and apply patches as well... */ +/** @file +This file contains the @ref patchguide page. +*/ Modified: trunk/TODO =================================================================== --- trunk/TODO 2009-05-26 01:27:56 UTC (rev 1915) +++ trunk/TODO 2009-05-26 23:58:01 UTC (rev 1916) @@ -148,3 +148,6 @@ - use bug tracking? we need something! */ +/** @file +This file contains the @ref thelist page. +*/ |
From: <zw...@ma...> - 2009-05-26 03:27:59
|
Author: zwelch Date: 2009-05-26 03:27:56 +0200 (Tue, 26 May 2009) New Revision: 1915 Modified: trunk/src/svf/svf.c Log: SimonQian <sim...@Si...>, reported by R.Doss: This patch fixes a segfault when TDO was not received in XXR command: - allocate space for the value and mask anyway - clear the mask to zero to effectively skip the output comparison step Modified: trunk/src/svf/svf.c =================================================================== --- trunk/src/svf/svf.c 2009-05-26 01:22:23 UTC (rev 1914) +++ trunk/src/svf/svf.c 2009-05-26 01:27:56 UTC (rev 1915) @@ -918,6 +918,27 @@ } buf_set_ones(xxr_para_tmp->mask, xxr_para_tmp->len); } + // If TDO is absent, no comparison is needed, set the mask to 0 + if (!(xxr_para_tmp->data_mask & XXR_TDO)) + { + if (NULL == xxr_para_tmp->tdo) + { + if (ERROR_OK != svf_adjust_array_length(&xxr_para_tmp->tdo, i_tmp, xxr_para_tmp->len)) + { + LOG_ERROR("fail to adjust length of array"); + return ERROR_FAIL; + } + } + if (NULL == xxr_para_tmp->mask) + { + if (ERROR_OK != svf_adjust_array_length(&xxr_para_tmp->mask, i_tmp, xxr_para_tmp->len)) + { + LOG_ERROR("fail to adjust length of array"); + return ERROR_FAIL; + } + } + memset(xxr_para_tmp->mask, 0, (xxr_para_tmp->len + 7) >> 3); + } // do scan if necessary if (SDR == command) { |
From: <zw...@ma...> - 2009-05-26 03:22:28
|
Author: zwelch Date: 2009-05-26 03:22:23 +0200 (Tue, 26 May 2009) New Revision: 1914 Modified: trunk/src/svf/svf.c Log: SimonQian <sim...@Si...>: Add svf_get_mask_u32 to generate a mask according to bitlen. Fix this bug in other functions except for svf_check_tdo. Modified: trunk/src/svf/svf.c =================================================================== --- trunk/src/svf/svf.c 2009-05-26 00:23:23 UTC (rev 1913) +++ trunk/src/svf/svf.c 2009-05-26 01:22:23 UTC (rev 1914) @@ -218,6 +218,26 @@ } } +unsigned svf_get_mask_u32(int bitlen) +{ + u32 bitmask; + + if (bitlen < 0) + { + bitmask = 0; + } + else if (bitlen >= 32) + { + bitmask = 0xFFFFFFFF; + } + else + { + bitmask = (1 << bitlen) - 1; + } + + return bitmask; +} + static const char* tap_state_svf_name(tap_state_t state) { const char* ret; @@ -667,14 +687,8 @@ { unsigned bitmask; unsigned received, expected, tapmask; - if (svf_check_tdo_para[i].bit_len >= 32) - { - bitmask = 0xFFFFFFFF; - } - else - { - bitmask = (1 << svf_check_tdo_para[i].bit_len) - 1; - } + bitmask = svf_get_mask_u32(svf_check_tdo_para[i].bit_len); + memcpy(&received, svf_tdi_buffer + index, sizeof(unsigned)); memcpy(&expected, svf_tdo_buffer + index, sizeof(unsigned)); memcpy(&tapmask, svf_mask_buffer + index, sizeof(unsigned)); @@ -890,7 +904,7 @@ LOG_ERROR("fail to parse hex value"); return ERROR_FAIL; } - LOG_DEBUG("\t%s = 0x%X", argus[i], (**(int**)pbuffer_tmp) & ((1 << (xxr_para_tmp->len)) - 1)); + LOG_DEBUG("\t%s = 0x%X", argus[i], (**(int**)pbuffer_tmp) & svf_get_mask_u32(xxr_para_tmp->len)); } // If a command changes the length of the last scan of the same type and the MASK parameter is absent, // the mask pattern used is all cares @@ -1403,7 +1417,7 @@ int read_value; memcpy(&read_value, svf_tdi_buffer, sizeof(int)); // in debug mode, data is from index 0 - int read_mask = (1 << (svf_check_tdo_para[0].bit_len)) - 1; + int read_mask = svf_get_mask_u32(svf_check_tdo_para[0].bit_len); LOG_DEBUG("\tTDO read = 0x%X", read_value & read_mask); } } |
From: <zw...@ma...> - 2009-05-26 02:23:28
|
Author: zwelch Date: 2009-05-26 02:23:23 +0200 (Tue, 26 May 2009) New Revision: 1913 Modified: trunk/doc/openocd.texi Log: David Brownell <da...@pa...>: Update the "Reset Configuration" information in the User's guide: - Convert to @deffn syntax - Move tutorial text from command descriptions into new sections - Describe several different types of JTAG-visible reset - Expand descriptions of configuration tweaks for SRST and TRST - Link to the "reset" command, and vice versa - Bugfix the "reset_config" description (it didn't match the code) Plus, be more proscriptive: do it in board config files, except for the oddball cases where that won't work. (Current target.cfg files seem to have much goofage there; several seem board-specific.) Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-05-25 15:56:15 UTC (rev 1912) +++ trunk/doc/openocd.texi 2009-05-26 00:23:23 UTC (rev 1913) @@ -1551,67 +1551,133 @@ @cindex Reset Configuration Every system configuration may require a different reset -configuration. This can also be quite confusing. Please see the -various board files for example. +configuration. This can also be quite confusing. +Please see the various board files for examples. -@section jtag_nsrst_delay <@var{ms}> -@cindex jtag_nsrst_delay -@*How long (in milliseconds) OpenOCD should wait after deasserting -nSRST before starting new JTAG operations. +@b{Note} to maintainers and integrators: +Reset configuration touches several things at once. +Normally the board configuration file +should define it and assume that the JTAG adapter supports +everything that's wired up to the board's JTAG connector. +However, the target configuration file could also make note +of something the silicon vendor has done inside the chip, +which will be true for most (or all) boards using that chip. +And when the JTAG adapter doesn't support everything, the +system configuration file will need to override parts of +the reset configuration provided by other files. -@section jtag_ntrst_delay <@var{ms}> -@cindex jtag_ntrst_delay -@*Same @b{jtag_nsrst_delay}, but for nTRST +@section Types of Reset -The jtag_n[st]rst_delay options are useful if reset circuitry (like a -big resistor/capacitor, reset supervisor, or on-chip features). This -keeps the signal asserted for some time after the external reset got -deasserted. +There are many kinds of reset possible through JTAG, but +they may not all work with a given board and adapter. +That's part of why reset configuration can be error prone. -@section reset_config +@itemize @bullet +@item +@emph{System Reset} ... the @emph{SRST} hardware signal +resets all chips connected to the JTAG adapter, such as processors, +power management chips, and I/O controllers. Normally resets triggered +with this signal behave exactly like pressing a RESET button. +@item +@emph{JTAG TAP Reset} ... the @emph{TRST} hardware signal resets +just the TAP controllers connected to the JTAG adapter. +Such resets should not be visible to the rest of the system; resetting a +device's the TAP controller just puts that controller into a known state. +@item +@emph{Emulation Reset} ... many devices can be reset through JTAG +commands. These resets are often distinguishable from system +resets, either explicitly (a "reset reason" register says so) +or implicitly (not all parts of the chip get reset). +@item +@emph{Other Resets} ... system-on-chip devices often support +several other types of reset. +You may need to arrange that a watchdog timer stops +while debugging, preventing a watchdog reset. +There may be individual module resets. +@end itemize -@b{Note:} To maintainers and integrators: Where exactly the -``reset configuration'' goes is a good question. It touches several -things at once. In the end, if you have a board file - the board file -should define it and assume 100% that the DONGLE supports -anything. However, that does not mean the target should not also make -not of something the silicon vendor has done inside the -chip. @i{Grr.... nothing is every pretty.} +In the best case, OpenOCD can hold SRST, then reset +the TAPs via TRST and send commands through JTAG to halt the +CPU at the reset vector before the 1st instruction is executed. +Then when it finally releases the SRST signal, the system is +halted under debugger control before any code has executed. +This is the behavior required to support the @command{reset halt} +and @command{reset init} commands; after @command{reset init} a +board-specific script might do things like setting up DRAM. +(@xref{Reset Command}.) -@* @b{Problems:} -@enumerate -@item Every JTAG Dongle is slightly different, some dongles implement reset differently. -@item Every board is also slightly different; some boards tie TRST and SRST together. -@item Every chip is slightly different; some chips internally tie the two signals together. -@item Some may not implement all of the signals the same way. -@item Some signals might be push-pull, others open-drain/collector. -@end enumerate -@b{Best Case:} OpenOCD can hold the SRST (push-button-reset), then -reset the TAP via TRST and send commands through the JTAG tap to halt -the CPU at the reset vector before the 1st instruction is executed, -and finally release the SRST signal. -@*Depending on your board vendor, chip vendor, etc., these -signals may have slightly different names. +@section SRST and TRST Signal Issues -OpenOCD defines these signals in these terms: +Because SRST and TRST are hardware signals, they can have a +variety of system-specific constraints. Some of the most +common issues are: + @itemize @bullet -@item @b{TRST} - is Tap Reset - and should reset only the TAP. -@item @b{SRST} - is System Reset - typically equal to a reset push button. + +@item @emph{Signal not available} ... Some boards don't wire +SRST or TRST to the JTAG connector. Some JTAG adapters don't +support such signals even if they are wired up. +Use the @command{reset_config} @var{signals} options to say +when one of those signals is not connected. +When SRST is not available, your code might not be able to rely +on controllers having been fully reset during code startup. + +@item @emph{Signals shorted} ... Sometimes a chip, board, or +adapter will connect SRST to TRST, instead of keeping them separate. +Use the @command{reset_config} @var{combination} options to say +when those signals aren't properly independent. + +@item @emph{Timing} ... Reset circuitry like a resistor/capacitor +delay circuit, reset supervisor, or on-chip features can extend +the effect of a JTAG adapter's reset for some time after the adapter +stops issuing the reset. For example, there may be chip or board +requirements that all reset pulses last for at least a +certain amount of time; and reset buttons commonly have +hardware debouncing. +Use the @command{jtag_nsrst_delay} and @command{jtag_ntrst_delay} +commands to say when extra delays are needed. + +@item @emph{Drive type} ... Reset lines often have a pullup +resistor, letting the JTAG interface treat them as open-drain +signals. But that's not a requirement, so the adapter may need +to use push/pull output drivers. +Also, with weak pullups it may be advisable to drive +signals to both levels (push/pull) to minimize rise times. +Use the @command{reset_config} @var{trst_type} and +@var{srst_type} parameters to say how to drive reset signals. @end itemize -The Command: +There can also be other issues. +Some devices don't fully conform to the JTAG specifications. +Others have chip-specific extensions like extra steps needed +during TAP reset, or a requirement to use the normally-optional TRST +signal. +Trivial system-specific differences are common, such as +SRST and TRST using slightly different names. -@itemize @bullet -@item @b{reset_config} <@var{signals}> [@var{combination}] [@var{trst_type}] [@var{srst_type}] -@cindex reset_config -@* The @t{reset_config} command tells OpenOCD the reset configuration -of your combination of Dongle, Board, and Chips. -If the JTAG interface provides SRST, but the target doesn't connect -that signal properly, then OpenOCD can't use it. <@var{signals}> can +@section Commands for Handling Resets + +@deffn {Command} jtag_nsrst_delay milliseconds +How long (in milliseconds) OpenOCD should wait after deasserting +nSRST (active-low system reset) before starting new JTAG operations. +When a board has a reset button connected to SRST line it will +probably have hardware debouncing, implying you should use this. +@end deffn + +@deffn {Command} jtag_ntrst_delay milliseconds +How long (in milliseconds) OpenOCD should wait after deasserting +nTRST (active-low JTAG TAP reset) before starting new JTAG operations. +@end deffn + +@deffn {Command} reset_config signals [combination [trst_type [srst_type]]] +This command tells OpenOCD the reset configuration +of your combination of JTAG interface, board, and target. +If the JTAG interface provides SRST, but the board doesn't connect +that signal properly, then OpenOCD can't use it. @var{signals} can be @option{none}, @option{trst_only}, @option{srst_only} or @option{trst_and_srst}. -[@var{combination}] is an optional value specifying broken reset +The @var{combination} is an optional value specifying broken reset signal implementations. @option{srst_pulls_trst} states that the test logic is reset together with the reset of the system (e.g. Philips LPC2000, "broken" board layout), @option{trst_pulls_srst} says that @@ -1621,19 +1687,16 @@ @option{trst_pulls_srst}. The default behaviour if no option given is @option{separate}. -The [@var{trst_type}] and [@var{srst_type}] parameters allow the +The optional @var{trst_type} and @var{srst_type} parameters allow the driver type of the reset lines to be specified. Possible values are @option{trst_push_pull} (default) and @option{trst_open_drain} for the test reset signal, and @option{srst_open_drain} (default) and @option{srst_push_pull} for the system reset. These values only affect JTAG interfaces with support for different drivers, like the Amontec JTAGkey and JTAGAccelerator. +@end deffn -@comment - end command -@end itemize - - @node Tap Creation @chapter Tap Creation @cindex tap creation @@ -3053,11 +3116,14 @@ @cindex step @*Single-step the target at its current code position, or at an optional address. +@anchor{Reset Command} @subsection reset [@option{run}|@option{halt}|@option{init}] @cindex reset -@*Perform a hard-reset. The optional parameter specifies what should happen after the reset. - -With no arguments a "reset run" is executed +@*Perform a hard-reset. The optional parameter specifies what should +happen after the reset. +If there is no parameter, a @command{reset run} is executed. +The other options will not work on all systems. +@xref{Reset Configuration}. @itemize @minus @item @b{run} @cindex reset run |
From: kc8apf at B. <kc...@ma...> - 2009-05-25 17:56:18
|
Author: kc8apf Date: 2009-05-25 17:56:15 +0200 (Mon, 25 May 2009) New Revision: 1912 Modified: trunk/src/svf/svf.c Log: Author: Simon Qian <sim...@Si...> - add tap_state_svf_name since tap_state_name doesn't use SVF standard names Modified: trunk/src/svf/svf.c =================================================================== --- trunk/src/svf/svf.c 2009-05-25 15:51:30 UTC (rev 1911) +++ trunk/src/svf/svf.c 2009-05-25 15:56:15 UTC (rev 1912) @@ -218,6 +218,34 @@ } } +static const char* tap_state_svf_name(tap_state_t state) +{ + const char* ret; + + switch( state ) + { + case TAP_RESET: ret = "RESET"; break; + case TAP_IDLE: ret = "IDLE"; break; + case TAP_DRSELECT: ret = "DRSELECT"; break; + case TAP_DRCAPTURE: ret = "DRCAPTURE"; break; + case TAP_DRSHIFT: ret = "DRSHIFT"; break; + case TAP_DREXIT1: ret = "DREXIT1"; break; + case TAP_DRPAUSE: ret = "DRPAUSE"; break; + case TAP_DREXIT2: ret = "DREXIT2"; break; + case TAP_DRUPDATE: ret = "DRUPDATE"; break; + case TAP_IRSELECT: ret = "IRSELECT"; break; + case TAP_IRCAPTURE: ret = "IRCAPTURE"; break; + case TAP_IRSHIFT: ret = "IRSHIFT"; break; + case TAP_IREXIT1: ret = "IREXIT1"; break; + case TAP_IRPAUSE: ret = "IRPAUSE"; break; + case TAP_IREXIT2: ret = "IREXIT2"; break; + case TAP_IRUPDATE: ret = "IRUPDATE"; break; + default: ret = "???"; break; + } + + return ret; +} + static int handle_svf_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { #define SVF_NUM_OF_OPTIONS 1 @@ -305,7 +333,7 @@ memcpy(&svf_para, &svf_para_init, sizeof(svf_para)); for (i = 0; i < (int)dimof(svf_tap_state_name); i++) { - svf_tap_state_name[i] = (char *)tap_state_name(i); + svf_tap_state_name[i] = (char *)tap_state_svf_name(i); } // TAP_RESET jtag_add_tlr(); |
From: kc8apf at B. <kc...@ma...> - 2009-05-25 17:51:31
|
Author: kc8apf Date: 2009-05-25 17:51:30 +0200 (Mon, 25 May 2009) New Revision: 1911 Modified: trunk/src/flash/cfi.c Log: Author: Ra?\195?\186l S?\195?\161nchez Siles <rsa...@in...> - cfi flash_address coding style fix Modified: trunk/src/flash/cfi.c =================================================================== --- trunk/src/flash/cfi.c 2009-05-24 21:13:29 UTC (rev 1910) +++ trunk/src/flash/cfi.c 2009-05-25 15:51:30 UTC (rev 1911) @@ -114,9 +114,11 @@ { cfi_flash_bank_t *cfi_info = bank->driver_priv; + if(cfi_info->x16_as_x8) offset*=2; + /* while the sector list isn't built, only accesses to sector 0 work */ if (sector == 0) - return bank->base + (offset * bank->bus_width << cfi_info->x16_as_x8 ); + return bank->base + offset * bank->bus_width; else { if (!bank->sectors) @@ -124,7 +126,7 @@ LOG_ERROR("BUG: sector list not yet built"); exit(-1); } - return bank->base + bank->sectors[sector].offset + (offset * bank->bus_width << cfi_info->x16_as_x8 ); + return bank->base + bank->sectors[sector].offset + offset * bank->bus_width; } } |
From: <zw...@ma...> - 2009-05-24 23:13:34
|
Author: zwelch Date: 2009-05-24 23:13:29 +0200 (Sun, 24 May 2009) New Revision: 1910 Modified: trunk/doc/openocd.texi trunk/src/jtag/ft2232.c trunk/src/jtag/jtag.c Log: David Brownell <da...@pa...>: Doc (mostly) update for jtag_khz: - switch to @deffn syntax - add entry for "jtag_rclk" - move deprecated "jtag_speed" into collection of deprecated calls And for ft2232, don't be the only adapter to *log* an error if RTCK is requested; it's already reported properly, like any other nonfatal command parameter. "jtag_rclk" just works as expected, without any scarey messages. Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-05-24 21:08:42 UTC (rev 1909) +++ trunk/doc/openocd.texi 2009-05-24 21:13:29 UTC (rev 1910) @@ -1493,54 +1493,59 @@ Currently, there are no options available for the ep93xx interface. @section JTAG Speed -@itemize @bullet -@item @b{jtag_khz} <@var{reset speed kHz}> -@cindex jtag_khz +@anchor{JTAG Speed} +JTAG clock setup is part of system setup. +It @emph{does not belong with interface setup} since any interface +only knows a few of the constraints for the JTAG clock speed. +Sometimes the JTAG speed is +changed during the target initialization process: (1) slow at +reset, (2) program the CPU clocks, (3) run fast. +Both the "slow" and "fast" clock rates are functions of the +oscillators used, the chip, the board design, and sometimes +power management software that may be active. -It is debatable if this command belongs here - or in a board -configuration file. In fact, in some situations the JTAG speed is -changed during the target initialisation process (i.e.: (1) slow at -reset, (2) program the CPU clocks, (3) run fast) +The speed used during reset can be adjusted using pre_reset +and post_reset event handlers. +@xref{Target Events}. -Speed 0 (khz) selects RTCK method. A non-zero speed is in KHZ. Hence: 3000 is 3mhz. +If your system supports adaptive clocking (RTCK), configuring +JTAG to use that is probably the most robust approach. +However, it introduces delays to synchronize clocks; so it +may not be the fastest solution. -Not all interfaces support ``rtck''. If the interface device can not -support the rate asked for, or can not translate from kHz to -jtag_speed, then an error is returned. +@b{NOTE:} Script writers should consider using @command{jtag_rclk} +instead of @command{jtag_khz}. -Make sure the JTAG clock is no more than @math{1/6th CPU-Clock}. This is -especially true for synthesized cores (-S). Also see RTCK. +@deffn {Command} jtag_khz max_speed_kHz +A non-zero speed is in KHZ. Hence: 3000 is 3mhz. +JTAG interfaces usually support a limited number of +speeds. The speed actually used won't be faster +than the speed specified. -@b{NOTE: Script writers} If the target chip requires/uses RTCK - -please use the command: 'jtag_rclk FREQ'. This Tcl proc (in -startup.tcl) attempts to enable RTCK, if that fails it falls back to -the specified frequency. +As a rule of thumb, if you specify a clock rate make +sure the JTAG clock is no more than @math{1/6th CPU-Clock}. +This is especially true for synthesized cores (ARMxxx-S). +Speed 0 (khz) selects RTCK method. +@xref{FAQ RTCK}. +If your system uses RTCK, you won't need to change the +JTAG clocking after setup. +Not all interfaces, boards, or targets support ``rtck''. +If the interface device can not +support it, an error is returned when you try to use RTCK. +@end deffn + +@defun jtag_rclk fallback_speed_kHz +@cindex RTCK +This Tcl proc (defined in startup.tcl) attempts to enable RTCK/RCLK. +If that fails (maybe the interface, board, or target doesn't +support it), falls back to the specified frequency. @example - # Fall back to 3mhz if RCLK is not supported - jtag_rclk 3000 +# Fall back to 3mhz if RTCK is not supported +jtag_rclk 3000 @end example +@end defun -@item @b{DEPRECATED} @b{jtag_speed} - please use jtag_khz above. -@cindex jtag_speed -@*Limit the maximum speed of the JTAG interface. Usually, a value of zero means maximum -speed. The actual effect of this option depends on the JTAG interface used. - -The speed used during reset can be adjusted using setting jtag_speed during -pre_reset and post_reset events. -@itemize @minus - -@item wiggler: maximum speed / @var{number} -@item ft2232: 6MHz / (@var{number}+1) -@item amt jtagaccel: 8 / 2**@var{number} -@item jlink: maximum speed in kHz (0-12000), 0 will use RTCK -@item rlink: 24MHz / @var{number}, but only for certain values of @var{number} -@comment end speed list. -@end itemize - -@comment END command list -@end itemize - @node Reset Configuration @chapter Reset Configuration @cindex Reset Configuration @@ -3696,6 +3701,20 @@ @item @b{flash auto_erase} @cindex flash auto_erase @*use @option{flash write_image} command passing @option{erase} as the first parameter. @xref{flash write_image}. + +@item @b{jtag_speed} value +@*@xref{JTAG Speed}. +Usually, a value of zero means maximum +speed. The actual effect of this option depends on the JTAG interface used. +@itemize @minus +@item wiggler: maximum speed / @var{number} +@item ft2232: 6MHz / (@var{number}+1) +@item amt jtagaccel: 8 / 2**@var{number} +@item jlink: maximum speed in kHz (0-12000), 0 will use RTCK +@item rlink: 24MHz / @var{number}, but only for certain values of @var{number} +@comment end speed list. +@end itemize + @item @b{load_binary} @cindex load_binary @*use @option{load_image} command with same args. @xref{load_image}. @@ -3724,6 +3743,7 @@ @cindex faq @enumerate @item @b{RTCK, also known as: Adaptive Clocking - What is it?} +@anchor{FAQ RTCK} @cindex RTCK @cindex adaptive clocking @* Modified: trunk/src/jtag/ft2232.c =================================================================== --- trunk/src/jtag/ft2232.c 2009-05-24 21:08:42 UTC (rev 1909) +++ trunk/src/jtag/ft2232.c 2009-05-24 21:13:29 UTC (rev 1910) @@ -446,7 +446,7 @@ { if (khz==0) { - LOG_ERROR("RCLK not supported"); + LOG_DEBUG("RTCK not supported"); return ERROR_FAIL; } Modified: trunk/src/jtag/jtag.c =================================================================== --- trunk/src/jtag/jtag.c 2009-05-24 21:08:42 UTC (rev 1909) +++ trunk/src/jtag/jtag.c 2009-05-24 21:13:29 UTC (rev 1910) @@ -2315,9 +2315,10 @@ register_command(cmd_ctx, NULL, "interface", handle_interface_command, COMMAND_CONFIG, "try to configure interface"); register_command(cmd_ctx, NULL, "jtag_speed", handle_jtag_speed_command, - COMMAND_ANY, "set jtag speed (if supported)"); + COMMAND_ANY, "(DEPRECATED) set jtag speed (if supported)"); register_command(cmd_ctx, NULL, "jtag_khz", handle_jtag_khz_command, - COMMAND_ANY, "same as jtag_speed, except it takes maximum khz as arguments. 0 KHz = RTCK."); + COMMAND_ANY, "set maximum jtag speed (if supported); " + "parameter is maximum khz, or 0 for adaptive clocking (RTCK)."); register_command(cmd_ctx, NULL, "jtag_device", handle_jtag_device_command, COMMAND_CONFIG, "jtag_device <ir_length> <ir_expected> <ir_mask>"); register_command(cmd_ctx, NULL, "reset_config", handle_reset_config_command, |
From: <zw...@ma...> - 2009-05-24 23:08:48
|
Author: zwelch Date: 2009-05-24 23:08:42 +0200 (Sun, 24 May 2009) New Revision: 1909 Modified: trunk/doc/openocd.texi trunk/src/server/gdb_server.c trunk/src/server/tcl_server.c trunk/src/server/telnet_server.c Log: David Brownell <da...@pa...>: Make startup for the various server ports be quiet, unless debugging is active: don't emit needless scarey messages. Update the relevant documentation and its references: - For these port commands ... cover the default values; convert to @deffn syntax; include their use outside of the configuration stage; and alphabetize. Similar updates to the rest of that small chapter: - Highlight that there even *IS* a configuration stage, after which some command functionality is no longer available. - For GDB commands ... convert to @deffn syntax; alphabetize; include a missing command (!); add missing helptext (!) for one non-missing command; update relevant cross-references and index entries. Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-05-24 20:57:53 UTC (rev 1908) +++ trunk/doc/openocd.texi 2009-05-24 21:08:42 UTC (rev 1909) @@ -686,10 +686,6 @@ @example source [find interface/signalyzer.cfg] -# Change the default telnet port... -telnet_port 4444 -# GDB connects here -gdb_port 3333 # GDB can also flash my flash! gdb_memory_map enable gdb_flash_program enable @@ -1150,11 +1146,26 @@ @node Daemon Configuration @chapter Daemon Configuration +@cindex initialization The commands here are commonly found in the openocd.cfg file and are used to specify what TCP/IP ports are used, and how GDB should be supported. -@section init -@cindex init + +@section Configuration Stage +@cindex configuration stage +@cindex configuration command + +When the OpenOCD server process starts up, it enters a +@emph{configuration stage} which is the only time that +certain commands, @emph{configuration commands}, may be issued. +Those configuration commands include declaration of TAPs +and other basic setup. +The server must leave the configuration stage before it +may access or activate TAPs. +After it leaves this stage, configuration commands may no +longer be issued. + +@deffn {Config Command} init This command terminates the configuration stage and enters the normal command mode. This can be useful to add commands to the startup scripts and commands such as resetting the target, @@ -1169,64 +1180,92 @@ @b{NOTE:} This command normally occurs at or near the end of your openocd.cfg file to force OpenOCD to ``initialize'' and make the targets ready. For example: If your openocd.cfg file needs to -read/write memory on your target - the init command must occur before +read/write memory on your target, @command{init} must occur before the memory read/write commands. This includes @command{nand probe}. +@end deffn @section TCP/IP Ports -@itemize @bullet -@item @b{telnet_port} <@var{number}> -@cindex telnet_port -@*Intended for a human. Port on which to listen for incoming telnet connections. +@cindex TCP port +@cindex server +@cindex port +The OpenOCD server accepts remote commands in several syntaxes. +Each syntax uses a different TCP/IP port, which you may specify +only during configuration (before those ports are opened). -@item @b{tcl_port} <@var{number}> -@cindex tcl_port -@*Intended as a machine interface. Port on which to listen for -incoming Tcl syntax. This port is intended as a simplified RPC -connection that can be used by clients to issue commands and get the +@deffn {Command} gdb_port (number) +@cindex GDB server +Specify or query the first port used for incoming GDB connections. +The GDB port for the +first target will be gdb_port, the second target will listen on gdb_port + 1, and so on. +When not specified during the configuration stage, +the port @var{number} defaults to 3333. +@end deffn + +@deffn {Command} tcl_port (number) +Specify or query the port used for a simplified RPC +connection that can be used by clients to issue TCL commands and get the output from the Tcl engine. +Intended as a machine interface. +When not specified during the configuration stage, +the port @var{number} defaults to 6666. +@end deffn -@item @b{gdb_port} <@var{number}> -@cindex gdb_port -@*First port on which to listen for incoming GDB connections. The GDB port for the -first target will be gdb_port, the second target will listen on gdb_port + 1, and so on. -@end itemize +@deffn {Command} telnet_port (number) +Specify or query the +port on which to listen for incoming telnet connections. +This port is intended for interaction with one human through TCL commands. +When not specified during the configuration stage, +the port @var{number} defaults to 4444. +@end deffn -@section GDB Items -@itemize @bullet -@item @b{gdb_breakpoint_override} <@var{hard|soft|disable}> -@cindex gdb_breakpoint_override +@section GDB Configuration +@anchor{GDB Configuration} +@cindex GDB +@cindex GDB configuration +You can reconfigure some GDB behaviors if needed. +The ones listed here are static and global. +@xref{Target Create}, about declaring individual targets. +@xref{Target Events}, about configuring target-specific event handling. + +@deffn {Command} gdb_breakpoint_override <hard|soft|disable> @anchor{gdb_breakpoint_override} -@*Force breakpoint type for gdb 'break' commands. -The raison d'etre for this option is to support GDB GUI's without -a hard/soft breakpoint concept where the default OpenOCD and -GDB behaviour is not sufficient. Note that GDB will use hardware +Force breakpoint type for gdb @command{break} commands. +The raison d'etre for this option is to support GDB GUI's which don't +distinguish hard versus soft breakpoints, if the default OpenOCD and +GDB behaviour is not sufficient. GDB normally uses hardware breakpoints if the memory map has been set up for flash regions. This option replaces older arm7_9 target commands that addressed the same issue. +@end deffn -@item @b{gdb_detach} <@var{resume|reset|halt|nothing}> -@cindex gdb_detach -@*Configures what OpenOCD will do when GDB detaches from the daemon. -Default behaviour is <@var{resume}> +@deffn {Config command} gdb_detach <resume|reset|halt|nothing> +Configures what OpenOCD will do when GDB detaches from the daemon. +Default behaviour is @var{resume}. +@end deffn -@item @b{gdb_memory_map} <@var{enable|disable}> -@cindex gdb_memory_map -@*Set to <@var{enable}> to cause OpenOCD to send the memory configuration to GDB when +@deffn {Config command} gdb_flash_program <enable|disable> +@anchor{gdb_flash_program} +Set to @var{enable} to cause OpenOCD to program the flash memory when a +vFlash packet is received. +The default behaviour is @var{enable}. +@end deffn + +@deffn {Config command} gdb_memory_map <enable|disable> +Set to @var{enable} to cause OpenOCD to send the memory configuration to GDB when requested. GDB will then know when to set hardware breakpoints, and program flash -using the GDB load command. @option{gdb_flash_program enable} must also be enabled +using the GDB load command. @command{gdb_flash_program enable} must also be enabled for flash programming to work. -Default behaviour is <@var{enable}> +Default behaviour is @var{enable}. @xref{gdb_flash_program}. +@end deffn -@item @b{gdb_flash_program} <@var{enable|disable}> -@cindex gdb_flash_program -@anchor{gdb_flash_program} -@*Set to <@var{enable}> to cause OpenOCD to program the flash memory when a -vFlash packet is received. -Default behaviour is <@var{enable}> -@comment END GDB Items -@end itemize +@deffn {Config command} gdb_report_data_abort <enable|disable> +Specifies whether data aborts cause an error to be reported +by GDB memory read packets. +The default behaviour is @var{disable}; +use @var{enable} see these errors reported. +@end deffn @node Interface - Dongle Configuration @chapter Interface - Dongle Configuration @@ -1806,6 +1845,7 @@ @page @node Target Configuration @chapter Target Configuration +@cindex GDB target This chapter discusses how to create a GDB debug target. Before creating a ``target'' a JTAG tap DOTTED.NAME must exist first. @@ -1945,6 +1985,8 @@ @end itemize @section Target Events +@cindex events +@anchor{Target Events} At various times, certain things can happen, or you want them to happen. Examples: @@ -2062,7 +2104,8 @@ @end example @end itemize -@section target create +@section Target Create +@anchor{Target Create} @cindex target @cindex target creation @@ -2208,8 +2251,8 @@ flash on your board. @item GDB Flashing @* Flashing via GDB requires the flash be configured via ``flash -bank'', and the GDB flash features be enabled. See the daemon -configuration section for more details. +bank'', and the GDB flash features be enabled. +@xref{GDB Configuration}. @end enumerate @section Flash commands @@ -2903,8 +2946,8 @@ or via one of several TCP/IP Ports. @item @b{From the human} -@* A human should interact with the telnet interface (default port: 4444, -or via GDB, default port 3333) +@* A human should interact with the telnet interface (default port: 4444) +or via GDB (default port 3333). To issue commands from within a GDB session, use the @option{monitor} command, e.g. use @option{monitor poll} to issue the @option{poll} @@ -3444,7 +3487,7 @@ @node GDB and OpenOCD @chapter GDB and OpenOCD -@cindex GDB and OpenOCD +@cindex GDB OpenOCD complies with the remote gdbserver protocol, and as such can be used to debug remote targets. @@ -3505,7 +3548,7 @@ Informing GDB of the memory map of the target will enable GDB to protect any flash areas of the target and use hardware breakpoints by default. This means -that the OpenOCD option @option{gdb_breakpoint_override} is not required when +that the OpenOCD option @command{gdb_breakpoint_override} is not required when using a memory map. @xref{gdb_breakpoint_override}. To view the configured memory map in GDB, use the GDB command @option{info mem} @@ -3517,7 +3560,7 @@ set mem inaccessible-by-default off @end example -If @option{gdb_flash_program enable} is also used, GDB will be able to +If @command{gdb_flash_program enable} is also used, GDB will be able to program any flash memory using the vFlash interface. GDB will look at the target memory map when a load command is given, if any @@ -3627,12 +3670,12 @@ @*use @option{arm7_9 fast_memory_access} command with same args. @xref{arm7_9 fast_memory_access}. @item @b{arm7_9 force_hw_bkpts} @cindex arm7_9 force_hw_bkpts -@*Use @option{gdb_breakpoint_override} instead. Note that GDB will use hardware breakpoints +@*Use @command{gdb_breakpoint_override} instead. Note that GDB will use hardware breakpoints for flash if the GDB memory map has been set up(default when flash is declared in target configuration). @xref{gdb_breakpoint_override}. @item @b{arm7_9 sw_bkpts} @cindex arm7_9 sw_bkpts -@*On by default. See also @option{gdb_breakpoint_override}. @xref{gdb_breakpoint_override}. +@*On by default. @xref{gdb_breakpoint_override}. @item @b{daemon_startup} @cindex daemon_startup @*this config option has been removed, simply adding @option{init} and @option{reset halt} to Modified: trunk/src/server/gdb_server.c =================================================================== --- trunk/src/server/gdb_server.c 2009-05-24 20:57:53 UTC (rev 1908) +++ trunk/src/server/gdb_server.c 2009-05-24 21:08:42 UTC (rev 1909) @@ -2188,7 +2188,7 @@ if (gdb_port == 0 && server_use_pipes == 0) { - LOG_WARNING("no gdb port specified, using default port 3333"); + LOG_DEBUG("no gdb port specified, using default port 3333"); gdb_port = 3333; } @@ -2369,17 +2369,15 @@ register_command(command_context, NULL, "gdb_port", handle_gdb_port_command, COMMAND_ANY, "daemon configuration command gdb_port"); register_command(command_context, NULL, "gdb_detach", handle_gdb_detach_command, - COMMAND_CONFIG, ""); + COMMAND_CONFIG, "resume/reset/halt/nothing - " + "specify behavior when GDB detaches from the target"); register_command(command_context, NULL, "gdb_memory_map", handle_gdb_memory_map_command, COMMAND_CONFIG, "enable or disable memory map"); register_command(command_context, NULL, "gdb_flash_program", handle_gdb_flash_program_command, COMMAND_CONFIG, "enable or disable flash program"); register_command(command_context, NULL, "gdb_report_data_abort", handle_gdb_report_data_abort_command, - COMMAND_CONFIG, "enable or disable report data"); + COMMAND_CONFIG, "enable or disable reporting data aborts"); register_command(command_context, NULL, "gdb_breakpoint_override", handle_gdb_breakpoint_override_command, - COMMAND_EXEC, "hard/soft/disable - force breakpoint type for gdb 'break' commands." - "The raison d'etre for this option is to support GDB GUI's without " - "a hard/soft breakpoint concept where the default OpenOCD behaviour " - "is not sufficient"); + COMMAND_EXEC, "hard/soft/disable - force breakpoint type for gdb 'break' commands."); return ERROR_OK; } Modified: trunk/src/server/tcl_server.c =================================================================== --- trunk/src/server/tcl_server.c 2009-05-24 20:57:53 UTC (rev 1908) +++ trunk/src/server/tcl_server.c 2009-05-24 21:08:42 UTC (rev 1909) @@ -165,7 +165,7 @@ if (tcl_port == 0) { - LOG_WARNING("no tcl port specified, using default port 6666"); + LOG_DEBUG("no tcl port specified, using default port 6666"); tcl_port = 6666; } Modified: trunk/src/server/telnet_server.c =================================================================== --- trunk/src/server/telnet_server.c 2009-05-24 20:57:53 UTC (rev 1908) +++ trunk/src/server/telnet_server.c 2009-05-24 21:08:42 UTC (rev 1909) @@ -596,7 +596,7 @@ if (telnet_port == 0) { - LOG_WARNING("no telnet port specified, using default port 4444"); + LOG_DEBUG("no telnet port specified, using default port 4444"); telnet_port = 4444; } |
From: <zw...@ma...> - 2009-05-24 22:57:58
|
Author: zwelch Date: 2009-05-24 22:57:53 +0200 (Sun, 24 May 2009) New Revision: 1908 Modified: trunk/src/helper/command.c Log: David Brownell <da...@pa...>: The "Illegal mode for command" diagnostic is deeply useless. Say "Command '%s' only runs during configuration stage" instead, letting users know what the real issue is. Modified: trunk/src/helper/command.c =================================================================== --- trunk/src/helper/command.c 2009-05-24 20:56:13 UTC (rev 1907) +++ trunk/src/helper/command.c 2009-05-24 20:57:53 UTC (rev 1908) @@ -392,7 +392,7 @@ if (!((context->mode == COMMAND_CONFIG) || (c->mode == COMMAND_ANY) || (c->mode == context->mode) )) { /* Config commands can not run after the config stage */ - LOG_ERROR("Illegal mode for command"); + LOG_ERROR("Command '%s' only runs during configuration stage", c->name); return ERROR_FAIL; } |
From: <zw...@ma...> - 2009-05-24 22:56:17
|
Author: zwelch Date: 2009-05-24 22:56:13 +0200 (Sun, 24 May 2009) New Revision: 1907 Modified: trunk/src/flash/davinci_nand.c Log: David Brownell <da...@pa...>: minor davinci_nand bugfix Fix a bug that joined us at the last minute, when an efficient alloca() call got swapped out for a more portable malloc(). Also log one error, to give a clue in case it appears "in the wild". Modified: trunk/src/flash/davinci_nand.c =================================================================== --- trunk/src/flash/davinci_nand.c 2009-05-24 11:24:14 UTC (rev 1906) +++ trunk/src/flash/davinci_nand.c 2009-05-24 20:56:13 UTC (rev 1907) @@ -258,8 +258,10 @@ return ERROR_NAND_OPERATION_FAILED; /* Always write both data and OOB ... we are not "raw" I/O! */ - if (!data) + if (!data) { + LOG_ERROR("Missing NAND data; try 'nand raw_access enable'\n"); return ERROR_NAND_OPERATION_FAILED; + } /* If we're not given OOB, write 0xff where we don't write ECC codes. */ switch (nand->page_size) { @@ -277,7 +279,7 @@ } if (!oob) { ooballoc = malloc(oob_size); - if (ooballoc) + if (!ooballoc) return ERROR_NAND_OPERATION_FAILED; oob = ooballoc; memset(oob, 0x0ff, oob_size); |
From: <mi...@ma...> - 2009-05-24 13:24:37
|
Author: mifi Date: 2009-05-24 13:24:14 +0200 (Sun, 24 May 2009) New Revision: 1906 Modified: trunk/src/target/target/lpc2148.cfg Log: Added the options calc_checksum to the flash driver. This was forgotten here. All other LPC targets use this option. Modified: trunk/src/target/target/lpc2148.cfg =================================================================== --- trunk/src/target/target/lpc2148.cfg 2009-05-24 02:08:17 UTC (rev 1905) +++ trunk/src/target/target/lpc2148.cfg 2009-05-24 11:24:14 UTC (rev 1906) @@ -53,4 +53,4 @@ } # flash bank lpc2000 <base> <size> 0 0 <target#> <variant> <clock> [calc_checksum] -flash bank lpc2000 0x0 0x7d000 0 0 0 lpc2000_v2 14765 +flash bank lpc2000 0x0 0x7d000 0 0 0 lpc2000_v2 14765 calc_checksum |
From: <zw...@ma...> - 2009-05-24 04:08:21
|
Author: zwelch Date: 2009-05-24 04:08:17 +0200 (Sun, 24 May 2009) New Revision: 1905 Modified: trunk/src/target/board/sheevaplug.cfg Log: Nicolas Pitre <ni...@ca...>: Update sheevaplug interface script: When the CPU is in the WFI state, the JTAG interface simply doesn't respond at all and initial tap examination simply fails. Let's simply do it again when we come around to assert nSRST. Modified: trunk/src/target/board/sheevaplug.cfg =================================================================== --- trunk/src/target/board/sheevaplug.cfg 2009-05-24 01:57:13 UTC (rev 1904) +++ trunk/src/target/board/sheevaplug.cfg 2009-05-24 02:08:17 UTC (rev 1905) @@ -17,7 +17,13 @@ # We need to assert DBGRQ while holding nSRST down. # However DBGACK will be set only when nSRST is released. + # Furthermore, the JTAG interface doesn't respond at all when + # the CPU is in the WFI (wait for interrupts) state, so it is + # possible that initial tap examination failed. So let's + # re-examine the target again here when nSRST is asserted which + # should then succeed. jtag_reset 0 1 + feroceon.cpu arp_examine halt 0 jtag_reset 0 0 wait_halt |
From: <zw...@ma...> - 2009-05-24 03:57:19
|
Author: zwelch Date: 2009-05-24 03:57:13 +0200 (Sun, 24 May 2009) New Revision: 1904 Modified: trunk/doc/openocd.texi trunk/src/flash/nand.c trunk/src/target/board/sheevaplug.cfg Log: David Brownell <da...@pa...>: Update two oddball NAND commands to work with {offset, length} instead of block numbers, matching the other commands as well as usage in U-Boot and the Linux-MTD utilities. Document them accordingly. Update the single in-tree use of those commands (sheevaplug). ALSO: (a) Document the current 2 GByte/chip ceiling for NAND chipsize. (32 bit offset/length values can't represent 4 GBytes.) Maybe after the upcoming release, the code can switch to 64-bits. (b) The "nand check_bad_blocks" should report "bad" blocks. They are not "invalid" blocks; they're "bad" ones. (c) Tweak the "nand info" command to handle the "no arguments" case sanely (show everything, instead of showing garbage) and not listing the blocksize in hex kbytes (duh). Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-05-24 01:38:19 UTC (rev 1903) +++ trunk/doc/openocd.texi 2009-05-24 01:57:13 UTC (rev 1904) @@ -2616,6 +2616,15 @@ de-brick a board. @end enumerate +@b{NOTE:} At the time this text was written, the largest NAND +flash fully supported by OpenOCD is 2 GiBytes (16 GiBits). +This is because the variables used to hold offsets and lengths +are only 32 bits wide. +(Larger chips may work in some cases, unless an offset or length +is larger than 0xffffffff, the largest 32-bit unsigned integer.) +Some larger devices will work, since they are actually multi-chip +modules with two smaller chips and individual chipselect lines. + @section NAND Configuration Commands @cindex NAND configuration @@ -2702,9 +2711,19 @@ @end itemize @end deffn -@deffn Command {nand erase} num ... +@deffn Command {nand erase} num offset length @cindex NAND erasing -@b{NOTE:} Syntax is in flux. +Erases blocks on the specified NAND device, starting at the +specified @var{offset} and continuing for @var{length} bytes. +Both of those values must be exact multiples of the device's +block size, and the region they specify must fit entirely in the chip. +The @var{num} parameter is the value shown by @command{nand list}. + +@b{NOTE:} This command will try to erase bad blocks, when told +to do so, which will probably invalidate the manufacturer's bad +block marker. +For the remainder of the current server session, @command{nand info} +will still report that the block ``is'' bad. @end deffn @deffn Command {nand write} num filename offset [option...] @@ -2768,8 +2787,18 @@ @section Other NAND commands @cindex NAND other commands -@deffn Command {nand check_bad} num ... -@b{NOTE:} Syntax is in flux. +@deffn Command {nand check_bad_blocks} [offset length] +Checks for manufacturer bad block markers on the specified NAND +device. If no parameters are provided, checks the whole +device; otherwise, starts at the specified @var{offset} and +continues for @var{length} bytes. +Both of those values must be exact multiples of the device's +block size, and the region they specify must fit entirely in the chip. +The @var{num} parameter is the value shown by @command{nand list}. + +@b{NOTE:} Before using this command you should force raw access +with @command{nand raw_access enable} to ensure that the underlying +driver will not try to apply hardware ECC. @end deffn @deffn Command {nand info} num Modified: trunk/src/flash/nand.c =================================================================== --- trunk/src/flash/nand.c 2009-05-24 01:38:19 UTC (rev 1903) +++ trunk/src/flash/nand.c 2009-05-24 01:57:13 UTC (rev 1904) @@ -309,12 +309,12 @@ register_command(cmd_ctx, nand_cmd, "probe", handle_nand_probe_command, COMMAND_EXEC, "identify NAND flash device <num>"); register_command(cmd_ctx, nand_cmd, "check_bad_blocks", handle_nand_check_bad_blocks_command, COMMAND_EXEC, - "check NAND flash device <num> for bad blocks [<first> <last>]"); + "check NAND flash device <num> for bad blocks [<offset> <length>]"); register_command(cmd_ctx, nand_cmd, "erase", handle_nand_erase_command, COMMAND_EXEC, - "erase blocks on NAND flash device <num> <first> <last>"); + "erase blocks on NAND flash device <num> <offset> <length>"); register_command(cmd_ctx, nand_cmd, "dump", handle_nand_dump_command, COMMAND_EXEC, "dump from NAND flash device <num> <filename> " - "<offset> <size> [oob_raw|oob_only]"); + "<offset> <length> [oob_raw|oob_only]"); register_command(cmd_ctx, nand_cmd, "write", handle_nand_write_command, COMMAND_EXEC, "write to NAND flash device <num> <filename> <offset> [oob_raw|oob_only|oob_softecc|oob_softecc_kw]"); register_command(cmd_ctx, nand_cmd, "raw_access", handle_nand_raw_access_command, COMMAND_EXEC, @@ -360,7 +360,7 @@ || (((device->page_size == 512) && (oob[5] != 0xff)) || ((device->page_size == 2048) && (oob[0] != 0xff)))) { - LOG_WARNING("invalid block: %i", i); + LOG_WARNING("bad block: %i", i); device->blocks[i].is_bad = 1; } else @@ -1093,20 +1093,20 @@ int first = -1; int last = -1; - if ((argc < 1) || (argc > 3)) - { + switch (argc) { + default: return ERROR_COMMAND_SYNTAX_ERROR; - - } - - if (argc == 2) - { + case 1: + first = 0; + last = INT32_MAX; + break; + case 2: first = last = strtoul(args[1], NULL, 0); - } - else if (argc == 3) - { + break; + case 3: first = strtoul(args[1], NULL, 0); last = strtoul(args[2], NULL, 0); + break; } p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); @@ -1141,7 +1141,7 @@ else bad_state = " (block condition unknown)"; - command_print(cmd_ctx, "\t#%i: 0x%8.8x (0x%xkB) %s%s", + command_print(cmd_ctx, "\t#%i: 0x%8.8x (%dkB) %s%s", j, p->blocks[j].offset, p->blocks[j].size / 1024, erase_state, bad_state); } @@ -1203,13 +1203,32 @@ p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); if (p) { - int first = strtoul(args[1], NULL, 0); - int last = strtoul(args[2], NULL, 0); + char *cp; + unsigned long offset; + unsigned long length; - if ((retval = nand_erase(p, first, last)) == ERROR_OK) + offset = strtoul(args[1], &cp, 0); + if (*cp || offset == ULONG_MAX || offset % p->erase_size) { - command_print(cmd_ctx, "successfully erased blocks %i to %i on NAND flash device '%s'", first, last, p->device->name); + return ERROR_INVALID_ARGUMENTS; } + offset /= p->erase_size; + + length = strtoul(args[2], &cp, 0); + if (*cp || length == ULONG_MAX || length % p->erase_size) + { + return ERROR_INVALID_ARGUMENTS; + } + length -= 1; + length /= p->erase_size; + + retval = nand_erase(p, offset, offset + length); + if (retval == ERROR_OK) + { + command_print(cmd_ctx, "successfully erased blocks " + "%lu to %lu on NAND flash device '%s'", + offset, offset + length, p->device->name); + } else if (retval == ERROR_NAND_OPERATION_FAILED) { command_print(cmd_ctx, "erase failed"); @@ -1240,31 +1259,53 @@ } + p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); + if (!p) { + command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", + args[0]); + return ERROR_INVALID_ARGUMENTS; + } + if (argc == 3) { - first = strtoul(args[1], NULL, 0); - last = strtoul(args[2], NULL, 0); - } + char *cp; + unsigned long offset; + unsigned long length; - p = get_nand_device_by_num(strtoul(args[0], NULL, 0)); - if (p) - { - if ((retval = nand_build_bbt(p, first, last)) == ERROR_OK) + offset = strtoul(args[1], &cp, 0); + if (*cp || offset == ULONG_MAX || offset % p->erase_size) { - command_print(cmd_ctx, "checked NAND flash device for bad blocks, use \"nand info\" command to list blocks"); + return ERROR_INVALID_ARGUMENTS; } - else if (retval == ERROR_NAND_OPERATION_FAILED) + offset /= p->erase_size; + + length = strtoul(args[2], &cp, 0); + if (*cp || length == ULONG_MAX || length % p->erase_size) { - command_print(cmd_ctx, "error when checking for bad blocks on NAND flash device"); + return ERROR_INVALID_ARGUMENTS; } - else - { - command_print(cmd_ctx, "unknown error when checking for bad blocks on NAND flash device"); - } + length -= 1; + length /= p->erase_size; + + first = offset; + last = offset + length; } + + retval = nand_build_bbt(p, first, last); + if (retval == ERROR_OK) + { + command_print(cmd_ctx, "checked NAND flash device for bad blocks, " + "use \"nand info\" command to list blocks"); + } + else if (retval == ERROR_NAND_OPERATION_FAILED) + { + command_print(cmd_ctx, "error when checking for bad blocks on " + "NAND flash device"); + } else { - command_print(cmd_ctx, "NAND flash device '#%s' is out of bounds", args[0]); + command_print(cmd_ctx, "unknown error when checking for bad " + "blocks on NAND flash device"); } return ERROR_OK; Modified: trunk/src/target/board/sheevaplug.cfg =================================================================== --- trunk/src/target/board/sheevaplug.cfg 2009-05-24 01:38:19 UTC (rev 1903) +++ trunk/src/target/board/sheevaplug.cfg 2009-05-24 01:57:13 UTC (rev 1904) @@ -98,7 +98,7 @@ # reflash the u-Boot binary and reboot into it sheevaplug_init nand probe 0 - nand erase 0 0 4 + nand erase 0 0x0 0xa0000 nand write 0 uboot.bin 0 oob_softecc_kw resume |
From: <zw...@ma...> - 2009-05-24 03:38:27
|
Author: zwelch Date: 2009-05-24 03:38:19 +0200 (Sun, 24 May 2009) New Revision: 1903 Added: trunk/src/flash/davinci_nand.c Modified: trunk/doc/openocd.texi trunk/src/flash/Makefile.am trunk/src/flash/nand.c trunk/src/target/board/dm355evm.cfg Log: David Brownell <da...@pa...>: NAND support for DaVinci-family drivers, with HW ECC support. Declare the NAND chip on the DM355 EVM board. Currently tested on DM355 for Linux interop using the standard large page (2KB) chip in the EVM socket; "hwecc1" and "hwecc4" work fine. (Using hwecc4 relies on patches that haven't quite made it through the Linux-MTD bottlenecks yet.) Not yet tested: 1-bit on small-page (although it's hard to see how that could fail); 4-bit on small page (picky layout issues); the "hwecc_infix" mode (primarily for older boot ROMs; testing there is blocked on having new bootloader code). Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-05-24 01:33:54 UTC (rev 1902) +++ trunk/doc/openocd.texi 2009-05-24 01:38:19 UTC (rev 1903) @@ -2804,6 +2804,23 @@ driver-specific options and behaviors. Some controllers also activate controller-specific commands. +@deffn {NAND Driver} davinci +This driver handles the NAND controllers found on DaVinci family +chips from Texas Instruments. +It takes three extra parameters: +address of the NAND chip; +hardware ECC mode to use (hwecc1, hwecc4, hwecc4_infix); +address of the AEMIF controller on this processor. +@example +nand device davinci dm355.arm 0x02000000 hwecc4 0x01e10000 +@end example +All DaVinci processors support the single-bit ECC hardware, +and newer ones also support the four-bit ECC hardware. +The @code{write_page} and @code{read_page} methods are used +to implement those ECC modes, unless they are disabled using +the @command{nand raw_access} command. +@end deffn + @deffn {NAND Driver} lpc3180 These controllers require an extra @command{nand device} parameter: the clock rate used by the controller. Modified: trunk/src/flash/Makefile.am =================================================================== --- trunk/src/flash/Makefile.am 2009-05-24 01:33:54 UTC (rev 1902) +++ trunk/src/flash/Makefile.am 2009-05-24 01:38:19 UTC (rev 1903) @@ -6,7 +6,7 @@ METASOURCES = AUTO noinst_LTLIBRARIES = libflash.la libflash_la_SOURCES = \ - flash.c lpc2000.c cfi.c non_cfi.c at91sam7.c \ + flash.c lpc2000.c cfi.c non_cfi.c at91sam7.c davinci_nand.c \ str7x.c str9x.c aduc702x.c nand.c nand_ecc.c nand_ecc_kw.c \ lpc3180_nand_controller.c stellaris.c str9xpec.c stm32x.c tms470.c \ ecos.c orion_nand.c s3c24xx_nand.c s3c2410_nand.c s3c2412_nand.c \ Added: trunk/src/flash/davinci_nand.c =================================================================== --- trunk/src/flash/davinci_nand.c 2009-05-24 01:33:54 UTC (rev 1902) +++ trunk/src/flash/davinci_nand.c 2009-05-24 01:38:19 UTC (rev 1903) @@ -0,0 +1,744 @@ +/*************************************************************************** + * Copyright (C) 2009 by David Brownell * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +/* + * DaVinci family NAND controller support for OpenOCD. + * + * This driver uses hardware ECC (1-bit or 4-bit) unless + * the chip is accessed in "raw" mode. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "nand.h" + + +enum ecc { + HWECC1, /* all controllers support 1-bit ECC */ + HWECC4, /* newer chips also have 4-bit ECC hardware */ + HWECC4_INFIX, /* avoid this layout, except maybe for boot code */ +}; + +struct davinci_nand { + target_t *target; + + u8 chipsel; /* chipselect 0..3 == CS2..CS5 */ + u8 eccmode; + + /* Async EMIF controller base */ + u32 aemif; + + /* NAND chip addresses */ + u32 data; /* without CLE or ALE */ + u32 cmd; /* with CLE */ + u32 addr; /* with ALE */ + + /* page i/o for the relevant flavor of hardware ECC */ + int (*read_page)(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size); + int (*write_page)(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size); +}; + +#define NANDFCR 0x60 /* flash control register */ +#define NANDFSR 0x64 /* flash status register */ +#define NANDFECC 0x70 /* 1-bit ECC data, CS0, 1st of 4 */ +#define NAND4BITECCLOAD 0xbc /* 4-bit ECC, load saved values */ +#define NAND4BITECC 0xc0 /* 4-bit ECC data, 1st of 4 */ +#define NANDERRADDR 0xd0 /* 4-bit ECC err addr, 1st of 2 */ +#define NANDERRVAL 0xd8 /* 4-bit ECC err value, 1st of 2 */ + +static int halted(target_t *target, const char *label) +{ + if (target->state == TARGET_HALTED) + return true; + + LOG_ERROR("Target must be halted to use NAND controller (%s)", label); + return false; +} + +static int davinci_register_commands(struct command_context_s *cmd_ctx) +{ + return ERROR_OK; +} + +static int davinci_init(struct nand_device_s *nand) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + u32 nandfcr; + + if (!halted(target, "init")) + return ERROR_NAND_OPERATION_FAILED; + + /* We require something else to have configured AEMIF to talk + * to NAND chip in this range (including timings and width). + */ + target_read_u32(target, info->aemif + NANDFCR, &nandfcr); + if (!(nandfcr & (1 << info->chipsel))) { + LOG_ERROR("chip address %08x not NAND-enabled?", info->data); + return ERROR_NAND_OPERATION_FAILED; + } + + /* REVISIT verify: AxCR must be in 8-bit mode, since that's all we + * tested. 16 bit support should work too; but not with 4-bit ECC. + */ + + return ERROR_OK; +} + +static int davinci_reset(struct nand_device_s *nand) +{ + return ERROR_OK; +} + +static int davinci_nand_ready(struct nand_device_s *nand, int timeout) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + u32 nandfsr; + + /* NOTE: return code is zero/error, else success; not ERROR_* */ + + if (!halted(target, "ready")) + return 0; + + do { + target_read_u32(target, info->aemif + NANDFSR, &nandfsr); + + if (nandfsr & 0x01) + return 1; + + alive_sleep(1); + } while (timeout-- > 0); + + return 0; +} + +static int davinci_command(struct nand_device_s *nand, u8 command) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + + if (!halted(target, "command")) + return ERROR_NAND_OPERATION_FAILED; + + target_write_u8(target, info->cmd, command); + return ERROR_OK; +} + +static int davinci_address(struct nand_device_s *nand, u8 address) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + + if (!halted(target, "address")) + return ERROR_NAND_OPERATION_FAILED; + + target_write_u8(target, info->addr, address); + return ERROR_OK; +} + +static int davinci_write_data(struct nand_device_s *nand, u16 data) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + + if (!halted(target, "write_data")) + return ERROR_NAND_OPERATION_FAILED; + + target_write_u8(target, info->data, data); + return ERROR_OK; +} + +static int davinci_read_data(struct nand_device_s *nand, void *data) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + + if (!halted(target, "read_data")) + return ERROR_NAND_OPERATION_FAILED; + + target_read_u8(target, info->data, data); + return ERROR_OK; +} + +/* REVISIT a bit of native code should let block I/O be MUCH faster */ + +static int davinci_read_block_data(struct nand_device_s *nand, + u8 *data, int data_size) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + u32 nfdata = info->data; + u32 tmp; + + if (!halted(target, "read_block")) + return ERROR_NAND_OPERATION_FAILED; + + while (data_size >= 4) { + target_read_u32(target, nfdata, &tmp); + + data[0] = tmp; + data[1] = tmp >> 8; + data[2] = tmp >> 16; + data[3] = tmp >> 24; + + data_size -= 4; + data += 4; + } + + while (data_size > 0) { + target_read_u8(target, nfdata, data); + + data_size -= 1; + data += 1; + } + + return ERROR_OK; +} + +static int davinci_write_block_data(struct nand_device_s *nand, + u8 *data, int data_size) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + u32 nfdata = info->data; + u32 tmp; + + if (!halted(target, "write_block")) + return ERROR_NAND_OPERATION_FAILED; + + while (data_size >= 4) { + tmp = le_to_h_u32(data); + target_write_u32(target, nfdata, tmp); + + data_size -= 4; + data += 4; + } + + while (data_size > 0) { + target_write_u8(target, nfdata, *data); + + data_size -= 1; + data += 1; + } + + return ERROR_OK; +} + +static int davinci_write_page(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size) +{ + struct davinci_nand *info = nand->controller_priv; + u8 *ooballoc = NULL; + int status; + + if (!nand->device) + return ERROR_NAND_DEVICE_NOT_PROBED; + if (!halted(info->target, "write_page")) + return ERROR_NAND_OPERATION_FAILED; + + /* Always write both data and OOB ... we are not "raw" I/O! */ + if (!data) + return ERROR_NAND_OPERATION_FAILED; + + /* If we're not given OOB, write 0xff where we don't write ECC codes. */ + switch (nand->page_size) { + case 512: + oob_size = 16; + break; + case 2048: + oob_size = 64; + break; + case 4096: + oob_size = 128; + break; + default: + return ERROR_NAND_OPERATION_FAILED; + } + if (!oob) { + ooballoc = malloc(oob_size); + if (ooballoc) + return ERROR_NAND_OPERATION_FAILED; + oob = ooballoc; + memset(oob, 0x0ff, oob_size); + } + + status = info->write_page(nand, page, data, data_size, oob, oob_size); + free(ooballoc); + return status; +} + +static int davinci_read_page(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size) +{ + struct davinci_nand *info = nand->controller_priv; + + if (!nand->device) + return ERROR_NAND_DEVICE_NOT_PROBED; + if (!halted(info->target, "read_page")) + return ERROR_NAND_OPERATION_FAILED; + + return info->read_page(nand, page, data, data_size, oob, oob_size); +} + +static void davinci_write_pagecmd(struct nand_device_s *nand, u8 cmd, u32 page) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + int page3 = nand->address_cycles - (nand->page_size == 512); + + /* write command ({page,otp}x{read,program} */ + target_write_u8(target, info->cmd, cmd); + + /* column address (beginning-of-page) */ + target_write_u8(target, info->addr, 0); + if (nand->page_size > 512) + target_write_u8(target, info->addr, 0); + + /* page address */ + target_write_u8(target, info->addr, page); + target_write_u8(target, info->addr, page >> 8); + if (page3) + target_write_u8(target, info->addr, page >> 16); + if (page3 == 2) + target_write_u8(target, info->addr, page >> 24); +} + +static int davinci_writepage_tail(struct nand_device_s *nand, + u8 *oob, u32 oob_size) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + u8 status; + + if (oob_size) + davinci_write_block_data(nand, oob, oob_size); + + /* non-cachemode page program */ + target_write_u8(target, info->cmd, NAND_CMD_PAGEPROG); + + if (!davinci_nand_ready(nand, 100)) + return ERROR_NAND_OPERATION_TIMEOUT; + + if (nand_read_status(nand, &status) != ERROR_OK) { + LOG_ERROR("couldn't read status"); + return ERROR_NAND_OPERATION_FAILED; + } + + if (status & NAND_STATUS_FAIL) { + LOG_ERROR("write operation failed, status: 0x%02x", status); + return ERROR_NAND_OPERATION_FAILED; + } + + return ERROR_OK; +} + +/* + * All DaVinci family chips support 1-bit ECC on a per-chipselect basis. + */ +static int davinci_write_page_ecc1(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size) +{ + unsigned oob_offset; + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + const u32 fcr_addr = info->aemif + NANDFCR; + const u32 ecc1_addr = info->aemif + NANDFECC + info->chipsel; + u32 fcr, ecc1; + + /* Write contiguous ECC bytes starting at specified offset. + * NOTE: Linux reserves twice as many bytes as we need; and + * for 16-bit OOB, those extra bytes are discontiguous. + */ + switch (nand->page_size) { + case 512: + oob_offset = 0; + break; + case 2048: + oob_offset = 40; + break; + default: + oob_offset = 80; + break; + } + + davinci_write_pagecmd(nand, NAND_CMD_SEQIN, page); + + /* scrub any old ECC state */ + target_read_u32(target, ecc1_addr, &ecc1); + + target_read_u32(target, fcr_addr, &fcr); + fcr |= 1 << (8 + info->chipsel); + + do { + /* set "start csX 1bit ecc" bit */ + target_write_u32(target, fcr_addr, fcr); + + /* write 512 bytes */ + davinci_write_block_data(nand, data, 512); + data += 512; + data_size -= 512; + + /* read the ecc, pack to 3 bytes, and invert so the ecc + * in an erased block is correct + */ + target_read_u32(target, ecc1_addr, &ecc1); + ecc1 = (ecc1 & 0x0fff) | ((ecc1 & 0x0fff0000) >> 4); + ecc1 = ~ecc1; + + /* save correct ECC code into oob data */ + oob[oob_offset++] = (u8)(ecc1); + oob[oob_offset++] = (u8)(ecc1 >> 8); + oob[oob_offset++] = (u8)(ecc1 >> 16); + + } while (data_size); + + /* write OOB into spare area */ + return davinci_writepage_tail(nand, oob, oob_size); +} + +/* + * Preferred "new style" ECC layout for use with 4-bit ECC. This somewhat + * slows down large page reads done with error correction (since the OOB + * is read first, so its ECC data can be used incrementally), but the + * manufacturer bad block markers are safe. Contrast: old "infix" style. + */ +static int davinci_write_page_ecc4(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size) +{ + static const u8 ecc512[] = { + 0, 1, 2, 3, 4, /* 5== mfr badblock */ + 6, 7, /* 8..12 for BBT or JFFS2 */ 13, 14, 15, + }; + static const u8 ecc2048[] = { + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + }; + static const u8 ecc4096[] = { + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + }; + + struct davinci_nand *info = nand->controller_priv; + const u8 *l; + target_t *target = info->target; + const u32 fcr_addr = info->aemif + NANDFCR; + const u32 ecc4_addr = info->aemif + NAND4BITECC; + u32 fcr, ecc4; + + /* Use the same ECC layout Linux uses. For small page chips + * it's a bit cramped. + * + * NOTE: at this writing, 4KB pages have issues in Linux + * because they need more than 64 bytes of ECC data, which + * the standard ECC logic can't handle. + */ + switch (nand->page_size) { + case 512: + l = ecc512; + break; + case 2048: + l = ecc2048; + break; + default: + l = ecc4096; + break; + } + + davinci_write_pagecmd(nand, NAND_CMD_SEQIN, page); + + /* scrub any old ECC state */ + target_read_u32(target, info->aemif + NANDERRVAL, &ecc4); + + target_read_u32(target, fcr_addr, &fcr); + fcr &= ~(0x03 << 4); + fcr |= (1 << 12) | (info->chipsel << 4); + + do { + u32 raw_ecc[4], *p; + int i; + + /* start 4bit ecc on csX */ + target_write_u32(target, fcr_addr, fcr); + + /* write 512 bytes */ + davinci_write_block_data(nand, data, 512); + data += 512; + data_size -= 512; + + /* read the ecc, then save it into 10 bytes in the oob */ + for (i = 0; i < 4; i++) { + target_read_u32(target, ecc4_addr + 4 * i, &raw_ecc[i]); + raw_ecc[i] &= 0x03ff03ff; + } + for (i = 0, p = raw_ecc; i < 2; i++, p += 2) { + oob[*l++] = p[0] & 0xff; + oob[*l++] = ((p[0] >> 8) & 0x03) | ((p[0] >> 14) & 0xfc); + oob[*l++] = ((p[0] >> 22) & 0x0f) | ((p[1] << 4) & 0xf0); + oob[*l++] = ((p[1] >> 4) & 0x3f) | ((p[1] >> 10) & 0xc0); + oob[*l++] = (p[1] >> 18) & 0xff; + } + + } while (data_size); + + /* write OOB into spare area */ + return davinci_writepage_tail(nand, oob, oob_size); +} + +/* + * "Infix" OOB ... like Linux ECC_HW_SYNDROME. Avoided because it trashes + * manufacturer bad block markers, except on small page chips. Once you + * write to a page using this scheme, you need specialized code to update + * it (code which ignores now-invalid bad block markers). + * + * This is needed *only* to support older firmware. Older ROM Boot Loaders + * need it to read their second stage loader (UBL) into SRAM, but from then + * on the whole system can use the cleaner non-infix layouts. Systems with + * older second stage loaders (ABL/U-Boot, etc) or other system software + * (MVL 4.x/5.x kernels, filesystems, etc) may need it more generally. + */ +static int davinci_write_page_ecc4infix(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size) +{ + struct davinci_nand *info = nand->controller_priv; + target_t *target = info->target; + const u32 fcr_addr = info->aemif + NANDFCR; + const u32 ecc4_addr = info->aemif + NAND4BITECC; + u32 fcr, ecc4; + + davinci_write_pagecmd(nand, NAND_CMD_SEQIN, page); + + /* scrub any old ECC state */ + target_read_u32(target, info->aemif + NANDERRVAL, &ecc4); + + target_read_u32(target, fcr_addr, &fcr); + fcr &= ~(0x03 << 4); + fcr |= (1 << 12) | (info->chipsel << 4); + + do { + u32 raw_ecc[4], *p; + u8 *l; + int i; + + /* start 4bit ecc on csX */ + target_write_u32(target, fcr_addr, fcr); + + /* write 512 bytes */ + davinci_write_block_data(nand, data, 512); + data += 512; + data_size -= 512; + + /* read the ecc */ + for (i = 0; i < 4; i++) { + target_read_u32(target, ecc4_addr + 4 * i, &raw_ecc[i]); + raw_ecc[i] &= 0x03ff03ff; + } + + /* skip 6 bytes of prepad, then pack 10 packed ecc bytes */ + for (i = 0, l = oob + 6, p = raw_ecc; i < 2; i++, p += 2) { + *l++ = p[0] & 0xff; + *l++ = ((p[0] >> 8) & 0x03) | ((p[0] >> 14) & 0xfc); + *l++ = ((p[0] >> 22) & 0x0f) | ((p[1] << 4) & 0xf0); + *l++ = ((p[1] >> 4) & 0x3f) | ((p[1] >> 10) & 0xc0); + *l++ = (p[1] >> 18) & 0xff; + } + + /* write this "out-of-band" data -- infix */ + davinci_write_block_data(nand, oob, 16); + oob += 16; + oob_size -= 16; + + } while (data_size); + + /* the last data and OOB writes included the spare area */ + return davinci_writepage_tail(nand, NULL, 0); +} + +static int davinci_read_page_ecc4infix(struct nand_device_s *nand, u32 page, + u8 *data, u32 data_size, u8 *oob, u32 oob_size) +{ + davinci_write_pagecmd(nand, NAND_CMD_READ0, page); + + /* large page devices need a start command */ + if (nand->page_size > 512) + davinci_command(nand, NAND_CMD_READSTART); + + if (!davinci_nand_ready(nand, 100)) + return ERROR_NAND_OPERATION_TIMEOUT; + + /* NOTE: not bothering to compute and use ECC data for now */ + + do { + /* write 512 bytes */ + davinci_read_block_data(nand, data, 512); + data += 512; + data_size -= 512; + + /* read this "out-of-band" data -- infix */ + davinci_read_block_data(nand, oob, 16); + oob += 16; + oob_size -= 16; + } while (data_size); + + return ERROR_OK; +} + +static int davinci_nand_device_command(struct command_context_s *cmd_ctx, + char *cmd, char **argv, int argc, + struct nand_device_s *nand) +{ + struct davinci_nand *info; + target_t *target; + unsigned long chip, aemif; + enum ecc eccmode; + int chipsel; + char *ep; + + /* arguments: + * - "davinci" + * - target + * - nand chip address + * - ecc mode + * - aemif address + * Plus someday, optionally, ALE and CLE masks. + */ + if (argc < 5) { + LOG_ERROR("parameters: %s target " + "chip_addr hwecc_mode aemif_addr", + argv[0]); + goto fail; + } + + target = get_target(argv[1]); + if (!target) { + LOG_ERROR("invalid target %s", argv[1]); + goto fail; + } + + chip = strtoul(argv[2], &ep, 0); + if (*ep || chip == 0 || chip == ULONG_MAX) { + LOG_ERROR("Invalid NAND chip address %s", argv[2]); + goto fail; + } + + if (strcmp(argv[3], "hwecc1") == 0) + eccmode = HWECC1; + else if (strcmp(argv[3], "hwecc4") == 0) + eccmode = HWECC4; + else if (strcmp(argv[3], "hwecc4_infix") == 0) + eccmode = HWECC4_INFIX; + else { + LOG_ERROR("Invalid ecc mode %s", argv[3]); + goto fail; + } + + aemif = strtoul(argv[4], &ep, 0); + if (*ep || chip == 0 || chip == ULONG_MAX) { + LOG_ERROR("Invalid AEMIF controller address %s", argv[4]); + goto fail; + } + + /* REVISIT what we'd *like* to do is look up valid ranges using + * target-specific declarations, and not even need to pass the + * AEMIF controller address. + */ + if (aemif == 0x01e00000 /* dm6446, dm357 */ + || aemif == 0x01e10000 /* dm335, dm355 */ + || aemif == 0x01d10000 /* dm365 */ + ) { + if (chip < 0x0200000 || chip >= 0x0a000000) { + LOG_ERROR("NAND address %08lx out of range?", chip); + goto fail; + } + chipsel = (chip - 0x02000000) >> 21; + } else { + LOG_ERROR("unrecognized AEMIF controller address %08lx", aemif); + goto fail; + } + + info = calloc(1, sizeof *info); + if (info == NULL) + goto fail; + + info->target = target; + info->eccmode = eccmode; + info->chipsel = chipsel; + info->aemif = aemif; + info->data = chip; + info->cmd = chip | 0x10; + info->addr = chip | 0x08; + + nand->controller_priv = info; + + /* NOTE: for now we don't do any error correction on read. + * Nothing else in OpenOCD currently corrects read errors, + * and in any case it's *writing* that we care most about. + */ + info->read_page = nand_read_page_raw; + + switch (eccmode) { + case HWECC1: + /* ECC_HW, 1-bit corrections, 3 bytes ECC per 512 data bytes */ + info->write_page = davinci_write_page_ecc1; + break; + case HWECC4: + /* ECC_HW, 4-bit corrections, 10 bytes ECC per 512 data bytes */ + info->write_page = davinci_write_page_ecc4; + break; + case HWECC4_INFIX: + /* Same 4-bit ECC HW, with problematic page/ecc layout */ + info->read_page = davinci_read_page_ecc4infix; + info->write_page = davinci_write_page_ecc4infix; + break; + } + + return ERROR_OK; + +fail: + return ERROR_NAND_OPERATION_FAILED; +} + +nand_flash_controller_t davinci_nand_controller = { + .name = "davinci", + .nand_device_command = davinci_nand_device_command, + .register_commands = davinci_register_commands, + .init = davinci_init, + .reset = davinci_reset, + .command = davinci_command, + .address = davinci_address, + .write_data = davinci_write_data, + .read_data = davinci_read_data, + .write_page = davinci_write_page, + .read_page = davinci_read_page, + .write_block_data = davinci_write_block_data, + .read_block_data = davinci_read_block_data, + .nand_ready = davinci_nand_ready, +}; Property changes on: trunk/src/flash/davinci_nand.c ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/src/flash/nand.c =================================================================== --- trunk/src/flash/nand.c 2009-05-24 01:33:54 UTC (rev 1902) +++ trunk/src/flash/nand.c 2009-05-24 01:38:19 UTC (rev 1903) @@ -48,6 +48,7 @@ /* NAND flash controller */ +extern nand_flash_controller_t davinci_nand_controller; extern nand_flash_controller_t lpc3180_nand_controller; extern nand_flash_controller_t orion_nand_controller; extern nand_flash_controller_t s3c2410_nand_controller; @@ -59,6 +60,7 @@ static nand_flash_controller_t *nand_flash_controllers[] = { + &davinci_nand_controller, &lpc3180_nand_controller, &orion_nand_controller, &s3c2410_nand_controller, Modified: trunk/src/target/board/dm355evm.cfg =================================================================== --- trunk/src/target/board/dm355evm.cfg 2009-05-24 01:33:54 UTC (rev 1902) +++ trunk/src/target/board/dm355evm.cfg 2009-05-24 01:38:19 UTC (rev 1903) @@ -105,7 +105,15 @@ # FIXME setup } +# NAND -- socket has two chipselects, MT29F16G08FAA puts 1GByte on each one. +# +# NOTE: "hwecc4" here presumes that if you're using the standard 2GB NAND +# you either (a) have 'new' DM355 chips, with boot ROMs that don't need to +# use "hwecc4_infix" for the UBL; or else (b) aren't updating anything that +# needs infix layout ... like an old UBL, old U-Boot, old MVL kernel, etc. +nand device davinci 0 0x02000000 hwecc4 0x01e10000 +nand device davinci 0 0x02004000 hwecc4 0x01e10000 + # FIXME -# - declare the NAND flash; use the 4-bit ECC # - support writing UBL with its header (new layout only with new ROMs) -# - support writing ABL/U-Boot with its header (both layouts) +# - support writing ABL/U-Boot with its header (new layout) |
From: <zw...@ma...> - 2009-05-24 03:33:59
|
Author: zwelch Date: 2009-05-24 03:33:54 +0200 (Sun, 24 May 2009) New Revision: 1902 Modified: trunk/doc/openocd.texi Log: Fix two problems with openocd.texi: - Fix minor issues with xrefs not liking parentheses around them. - Change 'Building' section to 'Building OpenOCD'. It reads better. Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-05-24 01:08:16 UTC (rev 1901) +++ trunk/doc/openocd.texi 2009-05-24 01:33:54 UTC (rev 1902) @@ -53,7 +53,7 @@ @menu * About:: About OpenOCD * Developers:: OpenOCD Developers -* Building:: Building OpenOCD +* Building OpenOCD:: Building OpenOCD From SVN * JTAG Hardware Dongles:: JTAG Hardware Dongles * Running:: Running OpenOCD * Simple Configuration Files:: Simple Configuration Files @@ -140,9 +140,9 @@ @section OpenOCD Subversion Repository -The ``Building From Source'' section (@xref{Building}) provides -instructions to retrieve and and build the latest version of the OpenOCD -source code. +The ``Building From Source'' section provides instructions to retrieve +and and build the latest version of the OpenOCD source code. +@xref{Building OpenOCD}. Developers that want to contribute patches to the OpenOCD system are @b{strongly} encouraged to base their work off of the most recent trunk @@ -174,7 +174,7 @@ @uref{https://lists.berlios.de/mailman/listinfo/openocd-svn} -@node Building +@node Building OpenOCD @chapter Building OpenOCD @cindex building |
From: <zw...@ma...> - 2009-05-24 03:08:25
|
Author: zwelch Date: 2009-05-24 03:08:16 +0200 (Sun, 24 May 2009) New Revision: 1901 Added: trunk/Doxyfile.in Removed: trunk/Doxyfile Modified: trunk/Makefile.am Log: Properly fix doxygen out-of-tree build process: - move Doxyfile to Doxyfile.in: type 'make Doxyfile' to recreate it - create Doxyfile from Doxyfile.in with make rule: - use sed substitution of $(srcdir) to location directories - delete all doxygen created files with 'make distclean' - include all required files (including logger.pl) in distribution Deleted: trunk/Doxyfile =================================================================== --- trunk/Doxyfile 2009-05-24 00:47:49 UTC (rev 1900) +++ trunk/Doxyfile 2009-05-24 01:08:16 UTC (rev 1901) @@ -1,1517 +0,0 @@ -# Doxyfile 1.5.8 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = OpenOCD - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, -# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, -# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, -# Spanish, Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = YES - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = NO - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command <command> <input-file>, where <command> is the value of -# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text " - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = doc/manual \ - TODO \ - BUGS \ - PATCHES \ - src \ - config.h - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.h \ - *.c \ - *.txt - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = YES - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = doxygen - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to FRAME, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. Other possible values -# for this tag are: HIERARCHIES, which will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list; -# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which -# disables this behavior completely. For backwards compatibility with previous -# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE -# respectively. - -GENERATE_TREEVIEW = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = NO - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = NO - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = *.h - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = HAVE_CONFIG_H - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will genera... [truncated message content] |
From: <zw...@ma...> - 2009-05-24 02:47:54
|
Author: zwelch Date: 2009-05-24 02:47:49 +0200 (Sun, 24 May 2009) New Revision: 1900 Modified: trunk/src/svf/svf.c Log: SimonQian <sim...@Si...>: Changes svf_check_tdo function (checks tdo output matches desired values): - call buf_cmp_mask function to do comparison instead of using a loop. - fixes a bug when data length is equal to sizeof(int). Modified: trunk/src/svf/svf.c =================================================================== --- trunk/src/svf/svf.c 2009-05-24 00:16:04 UTC (rev 1899) +++ trunk/src/svf/svf.c 2009-05-24 00:47:49 UTC (rev 1900) @@ -628,32 +628,35 @@ static int svf_check_tdo(void) { - int i, j, byte_len, index; + int i, len, index; for (i = 0; i < svf_check_tdo_para_index; i++) { - if (svf_check_tdo_para[i].enabled) + index = svf_check_tdo_para[i].buffer_offset; + len = svf_check_tdo_para[i].bit_len; + if ((svf_check_tdo_para[i].enabled) + && buf_cmp_mask(&svf_tdi_buffer[index], &svf_tdo_buffer[index], &svf_mask_buffer[index], len)) { - byte_len = (svf_check_tdo_para[i].bit_len + 7) >> 3; - index = svf_check_tdo_para[i].buffer_offset; - for (j = 0; j < byte_len; j++) + unsigned bitmask; + unsigned received, expected, tapmask; + if (svf_check_tdo_para[i].bit_len >= 32) { - if ((svf_tdi_buffer[index + j] & svf_mask_buffer[index + j]) != svf_tdo_buffer[index + j]) - { - unsigned bitmask = (1 << svf_check_tdo_para[i].bit_len) - 1; - unsigned received, expected, tapmask; - memcpy(&received, svf_tdi_buffer + index, sizeof(unsigned)); - memcpy(&expected, svf_tdo_buffer + index, sizeof(unsigned)); - memcpy(&tapmask, svf_mask_buffer + index, sizeof(unsigned)); - LOG_ERROR("tdo check error at line %d, " - "read = 0x%X, want = 0x%X, mask = 0x%X", - svf_check_tdo_para[i].line_num, - received & bitmask, - expected & bitmask, - tapmask & bitmask); - return ERROR_FAIL; - } + bitmask = 0xFFFFFFFF; } + else + { + bitmask = (1 << svf_check_tdo_para[i].bit_len) - 1; + } + memcpy(&received, svf_tdi_buffer + index, sizeof(unsigned)); + memcpy(&expected, svf_tdo_buffer + index, sizeof(unsigned)); + memcpy(&tapmask, svf_mask_buffer + index, sizeof(unsigned)); + LOG_ERROR("tdo check error at line %d", + svf_check_tdo_para[i].line_num); + LOG_ERROR("read = 0x%X, want = 0x%X, mask = 0x%X", + received & bitmask, + expected & bitmask, + tapmask & bitmask); + return ERROR_FAIL; } } svf_check_tdo_para_index = 0; |
From: <zw...@ma...> - 2009-05-24 02:16:14
|
Author: zwelch Date: 2009-05-24 02:16:04 +0200 (Sun, 24 May 2009) New Revision: 1899 Modified: trunk/src/target/target/lpc2103.cfg trunk/src/target/target/lpc2124.cfg trunk/src/target/target/lpc2129.cfg Log: Freddie Chopin <fre...@op...>: - add reset delay settings for LPC2103, LPC2124, and LPC2129. Modified: trunk/src/target/target/lpc2103.cfg =================================================================== --- trunk/src/target/target/lpc2103.cfg 2009-05-23 22:53:39 UTC (rev 1898) +++ trunk/src/target/target/lpc2103.cfg 2009-05-24 00:16:04 UTC (rev 1899) @@ -21,6 +21,10 @@ # LPC2000 -> SRST causes TRST reset_config trst_and_srst srst_pulls_trst +# reset delays +jtag_nsrst_delay 100 +jtag_ntrst_delay 100 + jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID set _TARGETNAME [format "%s.cpu" $_CHIPNAME] Modified: trunk/src/target/target/lpc2124.cfg =================================================================== --- trunk/src/target/target/lpc2124.cfg 2009-05-23 22:53:39 UTC (rev 1898) +++ trunk/src/target/target/lpc2124.cfg 2009-05-24 00:16:04 UTC (rev 1899) @@ -22,7 +22,11 @@ #use combined on interfaces or targets that can't set TRST/SRST separately reset_config trst_and_srst srst_pulls_trst -jtag_nsrst_delay 10 + +# reset delays +jtag_nsrst_delay 100 +jtag_ntrst_delay 100 + jtag_khz 1000 #jtag scan chain Modified: trunk/src/target/target/lpc2129.cfg =================================================================== --- trunk/src/target/target/lpc2129.cfg 2009-05-23 22:53:39 UTC (rev 1898) +++ trunk/src/target/target/lpc2129.cfg 2009-05-24 00:16:04 UTC (rev 1899) @@ -23,6 +23,11 @@ #use combined on interfaces or targets that can't set TRST/SRST separately reset_config trst_and_srst srst_pulls_trst + +# reset delays +jtag_nsrst_delay 100 +jtag_ntrst_delay 100 + #jtag scan chain jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID |
From: <zw...@ma...> - 2009-05-24 00:53:47
|
Author: zwelch Date: 2009-05-24 00:53:39 +0200 (Sun, 24 May 2009) New Revision: 1898 Modified: trunk/doc/manual/scripting.txt Log: Add section identifiers to developer scripting introduction. Modified: trunk/doc/manual/scripting.txt =================================================================== --- trunk/doc/manual/scripting.txt 2009-05-23 22:52:47 UTC (rev 1897) +++ trunk/doc/manual/scripting.txt 2009-05-23 22:53:39 UTC (rev 1898) @@ -1,6 +1,6 @@ /** @page scripting OpenOCD Scripting Overview -@section What scripting will not do +@section scriptingisnt What scripting will not do The scripting support is intended for developers of OpenOCD. It is not the intention that normal OpenOCD users will @@ -18,7 +18,7 @@ great in an embedded environment and vind Harboe had experience with it. -@section Uses of scripting +@section scriptinguses Uses of scripting Default implementation of procedures in tcl/procedures.tcl. @@ -52,7 +52,7 @@ be simpler. -@section External scripting +@section scriptingexternal External scripting The embedded Jim Tcl interpreter in OpenOCD is very limited compared to any full scale PC hosted scripting language. |
From: <zw...@ma...> - 2009-05-24 00:52:54
|
Author: zwelch Date: 2009-05-24 00:52:47 +0200 (Sun, 24 May 2009) New Revision: 1897 Modified: trunk/doc/manual/main.txt Log: Update main page of doxygen developer documentation: - Rewrite copy to give a better introduction and overview. - Add subpages: The List, Style Guide, Patch Policies, and Bug Reporting. Modified: trunk/doc/manual/main.txt =================================================================== --- trunk/doc/manual/main.txt 2009-05-23 22:39:03 UTC (rev 1896) +++ trunk/doc/manual/main.txt 2009-05-23 22:52:47 UTC (rev 1897) @@ -1,15 +1,32 @@ /** @mainpage OpenOCD Reference Manual -@ref oocd explains how the code has been organized into layers -of APIs and gives an overview of how they fit together. These pages -attempt to give developers a high-level perspective of the various -code modules provided by OpenOCD. - -@ref primer provide introductory materials for new developers. +Welcome to the OpenOCD Reference Manual -- the developer's resource for +learning about the internal architecture of the OpenOCD project. -The List of @ref thelist enumerates opportunities for improving or -extending the OpenOCD platform. +In addition, this document contains the tactical and strategic plans +and processes that have been devleoped by and for the community. +Developers that want to contribute to OpenOCD should read the following +sections before starting work: + +- The List of @subpage thelist enumerates opportunities for improving or +extending the OpenOCD platform. If your ideas are on The List, you might +check the mailing list archives to find the status of your feature (or bug). +- The @subpage styleguide provides rules that developers should + follow when writing new code for OpenOCD. +- The @subpage patchguide provides policies that developers should + follow when submitting patches to the project. +- The @subpage bugs page contains the content of the BUGS file, which + provides instructions for submitting bug reports to the maintainers. + +@ref primer provide introductory materials for new developers on various +specific topics. + +Finally, the @ref oocd pages explain how the code has been organized +into layers of APIs, providing an overview of how they fit together. +These pages attempt to give developers a high-level perspective of the +various code modules provided by OpenOCD. + */ /** @page primer OpenOCD Technical Primers |
From: <zw...@ma...> - 2009-05-24 00:39:10
|
Author: zwelch Date: 2009-05-24 00:39:03 +0200 (Sun, 24 May 2009) New Revision: 1896 Added: trunk/doc/manual/style.txt Log: Add extended doxygen-based style guide draft; requires more work. Added: trunk/doc/manual/style.txt =================================================================== --- trunk/doc/manual/style.txt 2009-05-23 22:37:19 UTC (rev 1895) +++ trunk/doc/manual/style.txt 2009-05-23 22:39:03 UTC (rev 1896) @@ -0,0 +1,93 @@ +/** @page styleguide OpenOCD Coding C Style Guide + +The following rules describe a formatting, naming, and other conventions +that should be followed when writing or changing the OpenOCD C code. +Many of the general rules should apply to OpenOCD's Jim/TCL code as well. + +The goals of this guide are: +- to produce code that appears clean, consistent, and readable, +- to allow developers to create patches that conform to a standard, +- to eliminate these issues as points of future contention. +consistent. + +Some of these rules may be ignored in the spirit of these stated goals; +however, such exceptions should be fairly rare. + +@section styleformat Formatting Rules + +- remove any trailing white space at the end of lines. +- use TAB characters for indentation; do NOT use spaces. +- displayed TAB width is 4 characters. +- use Unix line endings ('\\n'); do NOT use DOS endings ('\\r\\n') +- limit adjacent empty lines to at most two (2). +- remove any trailing empty lines at the end of source files +- do not "comment out" code from the tree; instead, one should either: + -# remove it entirely (Subversion can retrieve the old version), or + -# use an @c #if/#endif block. + +Finally, try to avoid lines of code that are longer than than 72-80 columns: + +- long lines frequently indicate other style problems: + - insufficient use of static functions, macros, or temporary variables + - poor flow-control structure; "inverted" logical tests +- a few lines may be wider than this limit (typically format strings), but: + - all C compilers will concatenate series of string constants. + - all long string constants should be split across multiple lines. + +@section stylenames Naming Rules + +- most identifiers must use lower-case letters (and digits) only. + - macros must use upper-case letters (and digits) only. + - OpenOCD identifiers should NEVER use @c MixedCaps. +- structure names must end with the '_s' suffix. +- typedef names must end with the '_t' suffix. +- use underline characters between consecutive words in identifiers + (e.g. @c more_than_one_word). + +@section stylec99 C99 Rules + +- inline functions +- @c // comments -- in new code, prefer these for single-line comments +- trailing comma allowed in enum declarations +- designated initializers (@{ .field = value @}) +- variables declarations may be mixed with code +- new block scopes for selection and iteration statements + +@section stylefunc Functions + +- static inline functions should be prefered over macros: +@code +/** do NOT define macro-like functions like this... */ +#define CUBE(x) ((x) * (x) * (x)) +/** instead, define the same expression using a C99 inline function */ +static inline int cube(int x) { return x * x * x; } +@endcode +- Functions should be declared static unless required by other modules + - define static functions before first usage to avoid forward declarations. +- Functions should have no space between its name and its parameter list: +@code +int f(int x1, int x2) +{ + ... + int y = f(x1, x2 - x1); + ... +} +@endcode + +@section styledoxygen Doxygen Rules + +- use @c /// to for one-line documentation +- for multiple lines, use a "block" style with one space +@verbatim +/** + * @brief Short description. + * Full description here. + * @param foo Describe foo. + */ +@endverbatim +- if the total line length will be less than 72 columns, then + - The @c /**< form can be used on the same line. + - This style should be used sparingly; the best use is for fields: + - @code int field /**< field description */ @endcode + + */ Property changes on: trunk/doc/manual/style.txt ___________________________________________________________________ Name: svn:eol-style + native |
From: <zw...@ma...> - 2009-05-24 00:37:24
|
Author: zwelch Date: 2009-05-24 00:37:19 +0200 (Sun, 24 May 2009) New Revision: 1895 Modified: trunk/doc/openocd.texi Log: Update user guide documentation: - Remove style guide from user guide; moved to doxygen manual. - Replace with improved introduction for developers and packagers. - Move introductory paragraph about the project under the About page. Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-05-23 22:05:05 UTC (rev 1894) +++ trunk/doc/openocd.texi 2009-05-23 22:37:19 UTC (rev 1895) @@ -89,6 +89,14 @@ @unnumbered About @cindex about +OpenOCD was created by Dominic Rath as part of a diploma thesis written at the +University of Applied Sciences Augsburg (@uref{http://www.fh-augsburg.de}). +Since that time, the project has grown into an active open-source project, +supported by a diverse community of software and hardware developers from +around the world. + +@section What is OpenOCD? + The Open On-Chip Debugger (OpenOCD) aims to provide debugging, in-system programming and boundary-scan testing for embedded target devices. @@ -98,7 +106,7 @@ @b{Dongles:} OpenOCD currently supports many types of hardware dongles: USB based, parallel port based, and other standalone boxes that run -OpenOCD internally. See the section titled: @xref{JTAG Hardware Dongles}. +OpenOCD internally. @xref{JTAG Hardware Dongles}. @b{GDB Debug:} It allows ARM7 (ARM7TDMI and ARM720t), ARM9 (ARM920T, ARM922T, ARM926EJ--S, ARM966E--S), XScale (PXA25x, IXP42x) and @@ -111,58 +119,64 @@ STM32x). Preliminary support for various NAND flash controllers (LPC3180, Orion, S3C24xx, more) controller is included. +@section OpenOCD Web Site + +The OpenOCD web site provides the latest public news from the community: + +@uref{http://openocd.berlios.de/web/} + + @node Developers -@chapter Developers +@chapter OpenOCD Developer Resources @cindex developers -OpenOCD was created by Dominic Rath as part of a diploma thesis written at the -University of Applied Sciences Augsburg (@uref{http://www.fh-augsburg.de}). -Others interested in improving the state of free and open debug and testing technology -are welcome to participate. +If you are interested in improving the state of OpenOCD's debugging and +testing support, new contributions will be welcome. Motivated developers +can produce new target, flash or interface drivers, improve the +documentation, as well as more conventional bug fixes and enhancements. -Other developers have contributed support for additional targets and flashes as well -as numerous bugfixes and enhancements. See the AUTHORS file for regular contributors. +The resources in this chapter are available for developers wishing to explore +or expand the OpenOCD source code. -The main OpenOCD web site is available at @uref{http://openocd.berlios.de/web/}. +@section OpenOCD Subversion Repository -@section Coding Style -@cindex Coding Style +The ``Building From Source'' section (@xref{Building}) provides +instructions to retrieve and and build the latest version of the OpenOCD +source code. -The following rules try to describe formatting and naming conventions that should be -followed to make the whole OpenOCD code look more consistent. The ultimate goal of -coding style should be readability, and these rules may be ignored for a particular -(small) piece of code if that makes it more readable. +Developers that want to contribute patches to the OpenOCD system are +@b{strongly} encouraged to base their work off of the most recent trunk +revision. Patches created against older versions may require additional +work from their submitter in order to be updated for newer releases. -@subsection Formatting rules: -@itemize @bullet -@item remove any trailing white space -@item use TAB characters for indentation, not spaces -@item displayed TAB width is 4 characters -@item make sure NOT to use DOS '\r\n' line feeds -@item do not add more than 2 empty lines to source files -@item do not add trailing empty lines to source files -@item do not use C++ style comments (//) -@item lines may be reasonably wide - there's no anachronistic 80 characters limit -@end itemize +@section Doxygen Developer Manual -@subsection Naming rules: -@itemize @bullet -@item identifiers use lower-case letters only -@item identifiers consisting of multiple words use underline characters between consecutive words -@item macros use upper-case letters only -@item structure names shall be appended with '_s' -@item typedefs shall be appended with '_t' -@end itemize +During the development of the 0.2.0 release, the OpenOCD project began +providing a Doxygen reference manual. This document contains more +technical information about the software internals, development +processes, and similar documentation: -@subsection Function calls: -@itemize @bullet -@item function calls have no space between the functions name and the parameter -list: my_func(param1, param2, ...) -@end itemize +@uref{http://openocd.berlios.de/doc/doxygen/index.html} +This document is a work-in-progress, but contributions would be welcome +to fill in the gaps. All of the source files are provided in-tree, +listed in the Doxyfile configuration in the top of the repository trunk. + +@section OpenOCD Developer Mailing List + +The OpenOCD Developer Mailing List provides the primary means of +communication between developers: + + @uref{https://lists.berlios.de/mailman/listinfo/openocd-development} + +All drivers developers are enouraged to also subscribe to the list of +SVN commits to keep pace with the ongoing changes: + + @uref{https://lists.berlios.de/mailman/listinfo/openocd-svn} + @node Building -@chapter Building -@cindex building OpenOCD +@chapter Building OpenOCD +@cindex building @section Pre-Built Tools If you are interested in getting actual work done rather than building @@ -181,10 +195,16 @@ @item @b{Build packages} i.e.: RPM files, or DEB files for a Linux Distro @end enumerate -As a @b{PACKAGER} - you are at the top of the food chain. You solve -problems for downstream users. What you fix or solve - solves hundreds -if not thousands of user questions. If something does not work for you -please let us know. That said, would also like you to follow a few +As a @b{PACKAGER}, you will experience first reports of most issues. +When you fix those problems for your users, your solution may help +prevent hundreds (if not thousands) of other questions from other users. + +If something does not work for you, please work to inform the OpenOCD +developers know how to improve the system or documentation to avoid +future problems, and follow-up to help us ensure the issue will be fully +resolved in our future releases. + +That said, the OpenOCD developers would also like you to follow a few suggestions: @enumerate |
From: <zw...@ma...> - 2009-05-24 00:05:12
|
Author: zwelch Date: 2009-05-24 00:05:05 +0200 (Sun, 24 May 2009) New Revision: 1894 Modified: trunk/Doxyfile trunk/PATCHES Log: Include the PATCHES file in Doxygen developer manual. Modified: trunk/Doxyfile =================================================================== --- trunk/Doxyfile 2009-05-23 20:52:18 UTC (rev 1893) +++ trunk/Doxyfile 2009-05-23 22:05:05 UTC (rev 1894) @@ -567,6 +567,7 @@ INPUT = doc/manual \ TODO \ BUGS \ + PATCHES \ src \ config.h Modified: trunk/PATCHES =================================================================== --- trunk/PATCHES 2009-05-23 20:52:18 UTC (rev 1893) +++ trunk/PATCHES 2009-05-23 22:05:05 UTC (rev 1894) @@ -1,3 +1,5 @@ +/** @page patchguide OpenOCD Patch Policies + Please mail patches to: ope...@li... @@ -43,3 +45,4 @@ If you have a decent SVN GUI, then that should be able to create and apply patches as well... + */ |