Tweak family-specific linker file layout.

Move
        support/ld/stm32/f1/performance/vector_symbols.inc
to
        support/ld/stm32/family/f1/performance/vector_symbols.inc

Creating directory "family" under support/ld/stm32 will allow parallel
directories (e.g. support/ld/stm32/mcu) to exist, which allows an
eventual linker script cleanup to go much more smoothly.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move public headers to include directories; related cleanups.

Move libmaple/*.h to (new) libmaple/include/libmaple/. The new
accepted way to include a libmaple header foo.h is with:

    #include <libmaple/foo.h>

This is more polite in terms of the include namespace. It also allows
us to e.g. implement the Arduino SPI library at all (which has header
SPI.h; providing it was previously impossible on case-insensitive
filesystems due to libmaple's spi.h).

Similarly for Wirish.

The old include style (#include "header.h") is now deprecated.

libmaple/*.h:

- Change include guard #defines from _FOO_H_ to _LIBMAPLE_FOO_H_.
- Add license headers where they're missing
- Add conditional extern "C" { ... } blocks where they're missing
  (they aren't always necessary, but we might was well do it against
  the future, while we're at it.).
- Change includes from #include "foo.h" to #include <libmaple/foo.h>.
- Move includes after extern "C".
- Remove extra trailing newlines

Note that this doesn't include the headers under libmaple/usb/ or
libmaple/usb/usb_lib. These will get fixed later.

libmaple/*.c:

- Change includes from #include "foo.h" to #include <libmaple/foo.h>.

Makefile:

- Add I$(LIBMAPLE_PATH)/include/libmaple to GLOBAL_FLAGS.  This allows
  for users (including Wirish) to migrate their code, but should go
  away ASAP, since it slows down compilation.

Wirish:

- Move wirish/**/*.h to (new) wirish/include/wirish/.  This ignores
  the USB headers, which, as usual, are getting handled after
  everything else.

- Similarly generify wirish/boards/ structure. For each supported
  board "foo", move wirish/boards/foo.h and wirish/boards/foo.cpp to
  wirish/boards/foo/include/board/board.h and
  wirish/boards/foo/board.cpp, respectively. Also remove the #ifdef
  hacks around the .cpp files.

- wirish/rules.mk: put wirish/boards/foo/include in the include path
  (and add wirish/boards/foo/board.cpp to the list of sources to be
  compiled). This allows saying:

      #include <board/board.h>

  instead of the hack currently in place. We can allow the user to
  override this setting later to make adding custom board definitions
  easier.

- Disable -Werror in libmaple/rules.mk, as the current USB warnings
  don't let the olimex_stm32_h103 board compile. We can re-enable
  -Werror once we've moved the board-specific bits out of libmaple
  proper.

libraries, examples:

- Update includes accordingly.
- Miscellaneous cosmetic fixups.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move wirish/comm/*.cpp into wirish.

The wirish/comm/ directory is stupid.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
target-config.mk: Remove FLASH_SIZE, SRAM_SIZE settings.

Unused.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
usb_cdcacm.c: Fix warning for non-LeafLabs boards.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Revert "Added libs in libraries/ to the include path"

This reverts commit 628750bf82135cc1ca25784c8b39eb771ae87024.

Don't mess with LIBMAPLE_INCLUDES. This variable comprises include
directories for libmaple proper, not for libraries that depend upon
libmaple.
Make USB its own submodule.

Add libmaple/usb/rules.mk, which compiles the USB FS device firmware
submodule. Move the logic for compiling the USB stack from
libmaple/rules.mk into libmaple/usb/rules.mk.

Move libmaple/usb/usb_cdacm.h to libmaple/include/libmaple/. Its API
is sufficiently general that we'll be able to port it over to USB
OTG (either FS or HS) eventually, and that lets us include it from
Wirish using the new style for libmaple headers.

Fix the includes for public libmaple headers within libmaple/usb.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/rules.mk: Reinstate -Werror.

This is OK across all boards now that USB is its own submodule.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move RCC support for STM32F1 to libmaple/stm32f1/.

This is a backwards-compatible change.

Modify libmaple/rules.mk to include the family's include
directory. This allows libmaple/include/libmaple/rcc.h to include the
STM32F1 RCC header with #include <family/rcc.h>. We'll use this
convention henceforth to distinguish between top-level and
family-specific headers.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move Flash support for STM32F1 to libmaple/stm32f1/.

This is a backwards-compatible change.

The Flash registers on the STM32F2 line are different than on
STM32F1. Therefore, move the register map and bit definitions to new
libmaple/stm32f1/include/family/flash.h.

Move flash_enable_prefetch() from libmaple/flash.c to new
libmaple/stm32f1/flash.c. The remaining pieces of libmaple/flash.c use
a common subset of the Flash registers, so they're's portable to F2,
and that's all we're currently interested in.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move NVIC support for STM32F1 to libmaple/stm32f1.

Backwards-compatible. Only the headers need to change.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/nvic.c: Cosmetics.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move GPIO support for STM32F1 to libmaple/stm32f1.

Make a new family header, libmaple/stm32f1/include/family/gpio.h, and
supporting libmaple/stm32f1/gpio.c.

Beyond registers and devices, these also include anything mentioning
AFIO, which doesn't exist on F2.

Update libmaple/stm32f1/rules.mk for new gpio.c.

Alter gpio_write_bit() to use dev->regs->BSRR only. BRRs are not
present on STM32F2.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple: Add build infrastructure for private headers.

libmaple/rules.mk: Add LIBMAPLE_PRIVATE_INCLUDES, a place for storing
headers which should be commonly available throughout libmaple, but
not made public. Currently, this is just the libmaple directory.

Add LIBMAPLE_PRIVATE_INCLUDES to the target flags in the STM32F1 and
USB submodules.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
RCC: Break out some portable functionality from stm32f1/.

Portions of rcc_clk_enable(), rcc_reset_dev(), and rcc_set_prescaler()
are portable; break these into static inline helpers in
rcc_private.h. These guts of these are portable, but the arrays of
registers etc. are not.

Also add an extern declaration for rcc_dev_table into
rcc_private.h. This lets us put rcc_dev_clk() into a newly resurrected
libmaple/rcc.c, since that's portable.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
stm32f1/rcc.c: Add cautionary comment.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
stm32f1: License headers, portability markers.

Add license headers to libmaple/stm32f1/isrs_performance.S and
libmaple/stm32f1/vector_table_performance.S. Copyright to Perry
Hung. I was present when Perry wrote these files. Also mark these as
STM32F1 specific (rather than "STM32", say "STM32F1").

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
libmaple/nvic.h: Explanatory commenting.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Rename GLOBAL_FLAGS to TARGET_FLAGS, remove from Makefile.

Move into target-config.mk. Build it up bit-by-bit as the build goes
on. Repeat the DENSITY defines once per board in target-config.mk,
since they don't make sense on STM32F2.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Move nonportable bits of libmaple/stm32.h into libmaple/stm32f1.

These go in a new family header, libmaple/stm32f1/include/family/stm32.h.

While we're at it, do some reorganizing.

Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>