#include "target.h" less wildly
[fw/openocd] / src / flash / at91sam3.c
index e0429ce5b5252ad474178738cc8f0e6341337968..4507888fcbe797d3306fc05dd7cb6333dd83cc9f 100644 (file)
 #include <stdio.h>
 #include <string.h>
 #include <stddef.h>
-#include "log.h"
 #include "types.h"
 #include "flash.h"
-#include "target.h"
 #include "membuf.h"
 #include "at91sam3.h"
 #include "time_support.h"
@@ -175,7 +173,7 @@ struct sam3_bank_private {
        // so we can find the chip we belong to
        struct sam3_chip *pChip;
        // so we can find the orginal bank pointer
-       flash_bank_t *pBank;
+       struct flash_bank *pBank;
        unsigned bank_number;
        uint32_t controller_address;
        uint32_t base_address;
@@ -215,7 +213,7 @@ struct sam3_chip {
 
        // this is "initialized" from the global const structure
        struct sam3_chip_details details;
-       target_t *target;
+       struct target *target;
        struct sam3_cfg cfg;
 
        struct membuf *mbuf;
@@ -231,9 +229,9 @@ struct sam3_reg_list {
 static struct sam3_chip *all_sam3_chips;
 
 static struct sam3_chip *
-get_current_sam3(struct command_context_s *cmd_ctx)
+get_current_sam3(struct command_context *cmd_ctx)
 {
-       target_t *t;
+       struct target *t;
        static struct sam3_chip *p;
 
        t = get_current_target(cmd_ctx);
@@ -554,8 +552,8 @@ static const struct sam3_chip_details all_sam3_details[] = {
  **********************************************************************/
 /* *ATMEL* style code - from the SAM3 driver code */
 
-/** Get the current status of the EEFC
- *
+/**
+ * Get the current status of the EEFC and
  * the value of some status bits (LOCKE, PROGE).
  * @param pPrivate - info about the bank
  * @param v        - result goes here
@@ -574,7 +572,8 @@ EFC_GetStatus(struct sam3_bank_private *pPrivate, uint32_t *v)
        return r;
 }
 
-/** Get the result of the last executed command.
+/**
+ * Get the result of the last executed command.
  * @param pPrivate - info about the bank
  * @param v        - result goes here
  */
@@ -683,8 +682,8 @@ EFC_StartCommand(struct sam3_bank_private *pPrivate,
        return r;
 }
 
-/** Performs the given command and wait until its completion (or an error).
- *
+/**
+ * Performs the given command and wait until its completion (or an error).
  * @param pPrivate - info about the bank
  * @param command  - Command to perform.
  * @param argument - Optional command argument.
@@ -741,13 +740,11 @@ EFC_PerformCommand(struct sam3_bank_private *pPrivate,
 
 
 
-/** Read the unique ID.
- *
- * \param pPrivate - info about the bank
- *
+/**
+ * Read the unique ID.
+ * @param pPrivate - info about the bank
  * The unique ID is stored in the 'pPrivate' structure.
  */
-
 static int
 FLASHD_ReadUniqueID (struct sam3_bank_private *pPrivate)
 {
@@ -787,7 +784,8 @@ FLASHD_ReadUniqueID (struct sam3_bank_private *pPrivate)
 
 }
 
-/** Erases the entire flash.
+/**
+ * Erases the entire flash.
  * @param pPrivate - the info about the bank.
  */
 static int
@@ -799,11 +797,11 @@ FLASHD_EraseEntireBank(struct sam3_bank_private *pPrivate)
 
 
 
-/** Gets current GPNVM state.
+/**
+ * Gets current GPNVM state.
  * @param pPrivate - info about the bank.
  * @param gpnvm    -  GPNVM bit index.
  * @param puthere  - result stored here.
- *
  */
 //------------------------------------------------------------------------------
 static int
@@ -845,10 +843,11 @@ FLASHD_GetGPNVM(struct sam3_bank_private *pPrivate, unsigned gpnvm, unsigned *pu
 
 
 
-/** Clears the selected GPNVM bit.
- * @param gpnvm  GPNVM index.
- *
- * Returns 0 if successful; otherwise returns an error code.
+/**
+ * Clears the selected GPNVM bit.
+ * @param pPrivate info about the bank
+ * @param gpnvm GPNVM index.
+ * @returns 0 if successful; otherwise returns an error code.
  */
 static int
 FLASHD_ClrGPNVM(struct sam3_bank_private *pPrivate, unsigned gpnvm)
@@ -880,9 +879,10 @@ FLASHD_ClrGPNVM(struct sam3_bank_private *pPrivate, unsigned gpnvm)
 
 
 
-/** Sets the selected GPNVM bit.
- *  @param gpnvm  GPNVM index.
- *
+/**
+ * Sets the selected GPNVM bit.
+ * @param pPrivate info about the bank
+ * @param gpnvm GPNVM index.
  */
 static int
 FLASHD_SetGPNVM(struct sam3_bank_private *pPrivate, unsigned gpnvm)
@@ -916,12 +916,11 @@ FLASHD_SetGPNVM(struct sam3_bank_private *pPrivate, unsigned gpnvm)
 }
 
 
-/** Returns a bit field (at most 64) of locked regions within a page.
- * @param pPrivate - info about the bank
- * @param v        - where to store locked bits
- * \param end  End address of range.
+/**
+ * Returns a bit field (at most 64) of locked regions within a page.
+ * @param pPrivate info about the bank
+ * @param v where to store locked bits
  */
-
 static int
 FLASHD_GetLockBits(struct sam3_bank_private *pPrivate, uint32_t *v)
 {
@@ -936,10 +935,11 @@ FLASHD_GetLockBits(struct sam3_bank_private *pPrivate, uint32_t *v)
 }
 
 
-/**Unlocks all the regions in the given address range.
- *
- * \param start_sector - first sector to unlock
- * \param end_sector   - last (inclusive) to unlock
+/**
+ * Unlocks all the regions in the given address range.
+ * @param pPrivate info about the bank
+ * @param start_sector first sector to unlock
+ * @param end_sector last (inclusive) to unlock
  */
 
 static int
@@ -969,13 +969,12 @@ FLASHD_Unlock(struct sam3_bank_private *pPrivate,
 }
 
 
-/** Locks regions
- *
+/**
+ * Locks regions
+ * @param pPrivate - info about the bank
  * @param start_sector - first sector to lock
  * @param end_sector   - last sector (inclusive) to lock
  */
-
-
 static int
 FLASHD_Lock(struct sam3_bank_private *pPrivate,
                         unsigned start_sector,
@@ -1307,9 +1306,9 @@ sam3_explain_ckgr_plla(struct sam3_chip *pChip)
 static void
 sam3_explain_mckr(struct sam3_chip *pChip)
 {
-       uint32_t css, pres,fin;
-       int pdiv;
-       const char *cp;
+       uint32_t css, pres, fin = 0;
+       int pdiv = 0;
+       const char *cp = NULL;
 
        css = sam3_reg_fieldname(pChip, "CSS", pChip->cfg.PMC_MCKR, 0, 2);
        switch (css & 3) {
@@ -1392,7 +1391,7 @@ sam3_explain_mckr(struct sam3_chip *pChip)
 
 #if 0
 static struct sam3_chip *
-target2sam3(target_t *pTarget)
+target2sam3(struct target *pTarget)
 {
        struct sam3_chip *pChip;
 
@@ -1455,14 +1454,14 @@ static const struct sam3_reg_list sam3_all_regs[] = {
 
 
 static struct sam3_bank_private *
-get_sam3_bank_private(flash_bank_t *bank)
+get_sam3_bank_private(struct flash_bank *bank)
 {
        return (struct sam3_bank_private *)(bank->driver_priv);
 }
 
-/*
- * Given a pointer to where it goes in the structure..
- *    Determine the register name, address from the all registers table.
+/**
+ * Given a pointer to where it goes in the structure,
+ * determine the register name, address from the all registers table.
  */
 static const struct sam3_reg_list *
 sam3_GetReg(struct sam3_chip *pChip, uint32_t *goes_here)
@@ -1581,7 +1580,7 @@ sam3_GetInfo(struct sam3_chip *pChip)
 
 
 static int
-sam3_erase_check(struct flash_bank_s *bank)
+sam3_erase_check(struct flash_bank *bank)
 {
        int x;
 
@@ -1605,10 +1604,10 @@ sam3_erase_check(struct flash_bank_s *bank)
 }
 
 static int
-sam3_protect_check(struct flash_bank_s *bank)
+sam3_protect_check(struct flash_bank *bank)
 {
        int r;
-       uint32_t v;
+       uint32_t v=0;
        unsigned x;
        struct sam3_bank_private *pPrivate;
 
@@ -1640,12 +1639,7 @@ sam3_protect_check(struct flash_bank_s *bank)
        return ERROR_OK;
 }
 
-static int
-sam3_flash_bank_command(struct command_context_s *cmd_ctx,
-                           char *cmd,
-                           char **args,
-                           int argc,
-                           struct flash_bank_s *bank)
+FLASH_BANK_COMMAND_HANDLER(sam3_flash_bank_command)
 {
        struct sam3_chip *pChip;
 
@@ -1713,7 +1707,7 @@ sam3_GetDetails(struct sam3_bank_private *pPrivate)
        const struct sam3_chip_details *pDetails;
        struct sam3_chip *pChip;
        void *vp;
-       flash_bank_t *saved_banks[SAM3_MAX_FLASH_BANKS];
+       struct flash_bank *saved_banks[SAM3_MAX_FLASH_BANKS];
 
        unsigned x;
        const char *cp;
@@ -1781,7 +1775,7 @@ sam3_GetDetails(struct sam3_bank_private *pPrivate)
 
 
 static int
-_sam3_probe(struct flash_bank_s *bank, int noise)
+_sam3_probe(struct flash_bank *bank, int noise)
 {
        unsigned x;
        int r;
@@ -1865,13 +1859,13 @@ _sam3_probe(struct flash_bank_s *bank, int noise)
 }
 
 static int
-sam3_probe(struct flash_bank_s *bank)
+sam3_probe(struct flash_bank *bank)
 {
        return _sam3_probe(bank, 1);
 }
 
 static int
-sam3_auto_probe(struct flash_bank_s *bank)
+sam3_auto_probe(struct flash_bank *bank)
 {
        return _sam3_probe(bank, 0);
 }
@@ -1879,7 +1873,7 @@ sam3_auto_probe(struct flash_bank_s *bank)
 
 
 static int
-sam3_erase(struct flash_bank_s *bank, int first, int last)
+sam3_erase(struct flash_bank *bank, int first, int last)
 {
        struct sam3_bank_private *pPrivate;
        int r;
@@ -1911,7 +1905,7 @@ sam3_erase(struct flash_bank_s *bank, int first, int last)
 }
 
 static int
-sam3_protect(struct flash_bank_s *bank, int set, int first, int last)
+sam3_protect(struct flash_bank *bank, int set, int first, int last)
 {
        struct sam3_bank_private *pPrivate;
        int r;
@@ -1940,7 +1934,7 @@ sam3_protect(struct flash_bank_s *bank, int set, int first, int last)
 
 
 static int
-sam3_info(flash_bank_t *bank, char *buf, int buf_size)
+sam3_info(struct flash_bank *bank, char *buf, int buf_size)
 {
        if (bank->target->state != TARGET_HALTED) {
                LOG_ERROR("Target not halted");
@@ -2108,7 +2102,7 @@ sam3_page_write(struct sam3_bank_private *pPrivate, unsigned pagenum, uint8_t *b
 
 
 static int
-sam3_write(struct flash_bank_s *bank,
+sam3_write(struct flash_bank *bank,
                   uint8_t *buffer,
                   uint32_t offset,
                   uint32_t count)
@@ -2265,8 +2259,7 @@ sam3_write(struct flash_bank_s *bank,
        return r;
 }
 
-static int
-sam3_handle_info_command(struct command_context_s *cmd_ctx, char *cmd, char **argv, int argc)
+COMMAND_HANDLER(sam3_handle_info_command)
 {
        struct sam3_chip *pChip;
        void *vp;
@@ -2342,11 +2335,9 @@ sam3_handle_info_command(struct command_context_s *cmd_ctx, char *cmd, char **ar
        return ERROR_OK;
 }
 
-static int
-sam3_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **argv, int argc)
+COMMAND_HANDLER(sam3_handle_gpnvm_command)
 {
        unsigned x,v;
-       uint32_t v32;
        int r,who;
        struct sam3_chip *pChip;
 
@@ -2387,20 +2378,17 @@ sam3_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **a
                who = -1;
                break;
        case 2:
-               if ((0 == strcmp(argv[0], "show")) && (0 == strcmp(argv[1], "all"))) {
+               if ((0 == strcmp(args[0], "show")) && (0 == strcmp(args[1], "all"))) {
                        who = -1;
                } else {
-                       r = parse_u32(argv[1], &v32);
-                       if (r != ERROR_OK) {
-                               command_print(cmd_ctx, "Not a number: %s", argv[1]);
-                               return r;
-                       }
+                       uint32_t v32;
+                       COMMAND_PARSE_NUMBER(u32, args[1], v32);
                        who = v32;
                }
                break;
        }
 
-       if (0 == strcmp("show", argv[0])) {
+       if (0 == strcmp("show", args[0])) {
                if (who == -1) {
                showall:
                        r = ERROR_OK;
@@ -2428,24 +2416,20 @@ sam3_handle_gpnvm_command(struct command_context_s *cmd_ctx, char *cmd, char **a
                return ERROR_COMMAND_SYNTAX_ERROR;
        }
 
-       if (0 == strcmp("set", argv[0])) {
+       if (0 == strcmp("set", args[0])) {
                r = FLASHD_SetGPNVM(&(pChip->details.bank[0]), who);
-       } else if ((0 == strcmp("clr", argv[0])) ||
-                          (0 == strcmp("clear", argv[0]))) { // quietly accept both
+       } else if ((0 == strcmp("clr", args[0])) ||
+                          (0 == strcmp("clear", args[0]))) { // quietly accept both
                r = FLASHD_ClrGPNVM(&(pChip->details.bank[0]), who);
        } else {
-               command_print(cmd_ctx, "Unkown command: %s", argv[0]);
+               command_print(cmd_ctx, "Unkown command: %s", args[0]);
                r = ERROR_COMMAND_SYNTAX_ERROR;
        }
        return r;
 }
 
-static int
-sam3_handle_slowclk_command(struct command_context_s *cmd_ctx, char *cmd, char **argv, int argc)
+COMMAND_HANDLER(sam3_handle_slowclk_command)
 {
-       uint32_t v;
-       int r;
-
        struct sam3_chip *pChip;
 
        pChip = get_current_sam3(cmd_ctx);
@@ -2459,8 +2443,10 @@ sam3_handle_slowclk_command(struct command_context_s *cmd_ctx, char *cmd, char *
                // show
                break;
        case 1:
+       {
                // set
-               r = parse_u32(argv[0], &v);
+               uint32_t v;
+               COMMAND_PARSE_NUMBER(u32, args[0], v);
                if (v > 200000) {
                        // absurd slow clock of 200Khz?
                        command_print(cmd_ctx,"Absurd/illegal slow clock freq: %d\n", (int)(v));
@@ -2468,7 +2454,7 @@ sam3_handle_slowclk_command(struct command_context_s *cmd_ctx, char *cmd, char *
                }
                pChip->cfg.slow_freq = v;
                break;
-
+       }
        default:
                // error
                command_print(cmd_ctx,"Too many parameters");
@@ -2484,9 +2470,9 @@ sam3_handle_slowclk_command(struct command_context_s *cmd_ctx, char *cmd, char *
 
 static int sam3_registered;
 static int
-sam3_register_commands(struct command_context_s *cmd_ctx)
+sam3_register_commands(struct command_context *cmd_ctx)
 {
-       command_t *pCmd;
+       struct command *pCmd;
 
        // only register once
        if (!sam3_registered) {
@@ -2512,29 +2498,16 @@ sam3_register_commands(struct command_context_s *cmd_ctx)
        return ERROR_OK;
 }
 
-
-flash_driver_t at91sam3_flash =
-{
-       .name                                           = "at91sam3",
-       .register_commands                      = sam3_register_commands,
-
-       .flash_bank_command                     = sam3_flash_bank_command,
-       .erase                                          = sam3_erase,
-       .protect                                        = sam3_protect,
-       .write                                          = sam3_write,
-       .probe                                          = sam3_probe,
-       .auto_probe                                     = sam3_auto_probe,
-       .erase_check                            = sam3_erase_check,
-       .protect_check                          = sam3_protect_check,
-       .info                                           = sam3_info
-};
-
-
-
-/**
- * Local Variables: **
- * mode: c **
- * c-basic-offset: 4 **
- * tab-width: 4 **
- * End: **
- */
+struct flash_driver at91sam3_flash = {
+               .name = "at91sam3",
+               .register_commands = &sam3_register_commands,
+               .flash_bank_command = &sam3_flash_bank_command,
+               .erase = &sam3_erase,
+               .protect = &sam3_protect,
+               .write = &sam3_write,
+               .probe = &sam3_probe,
+               .auto_probe = &sam3_auto_probe,
+               .erase_check = &sam3_erase_check,
+               .protect_check = &sam3_protect_check,
+               .info = &sam3_info,
+       };