diff packages/redboot/current/include/redboot.h @ 115:6ed91473a1cd ecos-sw-2000-08-21

Merge from eCos master repository on 2000-08-21-22:40:54-BST
author jlarmour
date Fri, 25 Aug 2000 17:32:38 +0000
parents
children bd1a71e3e476
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/redboot/current/include/redboot.h
@@ -0,0 +1,204 @@
+//==========================================================================
+//
+//      redboot.h
+//
+//      Standard interfaces for RedBoot
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//                                                                          
+// -------------------------------------------                              
+// The contents of this file are subject to the Red Hat eCos Public License 
+// Version 1.1 (the "License"); you may not use this file except in         
+// compliance with the License.  You may obtain a copy of the License at    
+// http://www.redhat.com/                                                   
+//                                                                          
+// Software distributed under the License is distributed on an "AS IS"      
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
+// License for the specific language governing rights and limitations under 
+// the License.                                                             
+//                                                                          
+// The Original Code is eCos - Embedded Configurable Operating System,      
+// released September 30, 1998.                                             
+//                                                                          
+// The Initial Developer of the Original Code is Red Hat.                   
+// Portions created by Red Hat are                                          
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.                             
+// All Rights Reserved.                                                     
+// -------------------------------------------                              
+//                                                                          
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s):    gthomas
+// Contributors: gthomas
+// Date:         2000-07-14
+// Purpose:      
+// Description:  
+//              
+// This code is part of RedBoot (tm).
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#ifndef _REDBOOT_H_
+#define _REDBOOT_H_
+
+#include <pkgconf/redboot.h>
+#include <pkgconf/hal.h>
+#include <cyg/hal/hal_if.h>
+#include <cyg/hal/hal_tables.h>
+
+#ifdef CYGPKG_REDBOOT_NETWORKING
+#include <net/net.h>
+#include <net/tftp_support.h>
+#include <net/bootp.h>
+// Determine an IP address for this node, using BOOTP
+extern int __bootp_find_local_ip(bootp_header_t *info);
+#endif
+
+#ifdef DEFINE_VARS
+#define EXTERN
+#else
+#define EXTERN extern
+#endif
+
+// Global variables
+EXTERN int argc;
+#define MAX_ARGV 32
+EXTERN char *argv[MAX_ARGV];
+EXTERN unsigned char *ram_start, *ram_end;
+EXTERN unsigned long *entry_address;
+EXTERN bool config_ok;
+
+#ifdef CYGPKG_REDBOOT_ANY_CONSOLE
+EXTERN bool console_selected;
+#endif
+
+#ifdef CYGPKG_REDBOOT_NETWORKING
+EXTERN bool have_net, use_bootp;
+EXTERN bootp_header_t my_bootp_info;
+EXTERN int gdb_port;
+#endif
+
+#ifdef CYGSEM_REDBOOT_FLASH_CONFIG
+EXTERN unsigned char *script;
+EXTERN int script_timeout;
+#endif
+
+// Prototypes
+int  printf(char *fmt, ...);
+int  vprintf(char *fmt, va_list ap);
+int  sprintf(char *buf, char *fmt, ...);
+int  strlen(const char *str);
+int  strcmp(const char *s1, const char *s2);
+int  strncmp(const char *s1, const char *s2, int len);
+int  strcmpci(const char *s1, const char *s2);
+int  strncmpci(const char *s1, const char *s2, int len);
+
+void mon_write_char(char c);
+int  gets(char *line, int len, int timeout);
+bool verify_action(char *fmt, ...);
+void dump_buf(void *, CYG_ADDRWORD);
+
+// "console" selection
+int  start_console(void);
+void end_console(int old_console);
+
+// CLI support functions
+bool parse_num(char *s, unsigned long *val, char **es, char *delim);
+bool parse_bool(char *s, bool *val);
+
+typedef void cmd_fun(int argc, char *argv[]);
+struct cmd {
+    char    *str;
+    char    *help;
+    char    *usage;
+    cmd_fun *fun;
+};
+extern struct cmd *cmd_search(struct cmd *tab, struct cmd *tabend, char *arg);
+extern void        cmd_usage(struct cmd *tab, struct cmd *tabend, char *prefix);
+#define RedBoot_cmd(_s_,_h_,_u_,_f_) cmd_entry(_s_,_h_,_u_,_f_,RedBoot_commands)
+#define _cmd_entry(_s_,_h_,_u_,_f_,_n_)                                   \
+cmd_fun _f_;                                                      \
+struct cmd _cmd_tab_##_f_ CYG_HAL_TABLE_ENTRY(_n_) = {_s_, _h_, _u_, _f_};
+#define cmd_entry(_s_,_h_,_u_,_f_,_n_)                                   \
+extern _cmd_entry(_s_,_h_,_u_,_f_,_n_)
+#define local_cmd_entry(_s_,_h_,_u_,_f_,_n_)                             \
+static _cmd_entry(_s_,_h_,_u_,_f_,_n_)
+
+// Initialization functions
+#define RedBoot_INIT_FIRST 0000
+#define RedBoot_INIT_PRIO(_n_) 1000+_n_
+#define RedBoot_INIT_LAST  9999
+typedef void void_fun(void);
+typedef void_fun *void_fun_ptr;
+#define _RedBoot_init(_f_,_p_)                                          \
+void_fun_ptr _init_tab_##_p_##_f_ CYG_HAL_TABLE_ENTRY(RedBoot_inits) = _f_; 
+#define RedBoot_init(_f_,_p_) _RedBoot_init(_f_,_p_)
+
+
+// Option processing support
+
+struct option_info {
+    char flag;
+    bool takes_arg;
+    int  arg_type;
+    void **arg;
+    bool *arg_set;
+    char *name;
+};
+
+#define OPTION_ARG_TYPE_NUM 0
+#define OPTION_ARG_TYPE_STR 1
+
+extern void init_opts(struct option_info *opts, char flag, bool takes_arg, 
+                      int arg_type, void **arg, bool *arg_set, char *name);
+extern bool scan_opts(int argc, char *argv[], int first, 
+                      struct option_info *opts, int num_opts, 
+                      void **def_arg, int def_arg_type, char *def_descr);
+
+//
+// Validate a hex character
+//
+__inline__ static bool
+_is_hex(char c)
+{
+    return (((c >= '0') && (c <= '9')) ||
+            ((c >= 'A') && (c <= 'F')) ||            
+            ((c >= 'a') && (c <= 'f')));
+}
+
+//
+// Convert a single hex nibble
+//
+__inline__ static int
+_from_hex(char c) 
+{
+    int ret = 0;
+
+    if ((c >= '0') && (c <= '9')) {
+        ret = (c - '0');
+    } else if ((c >= 'a') && (c <= 'f')) {
+        ret = (c - 'a' + 0x0a);
+    } else if ((c >= 'A') && (c <= 'F')) {
+        ret = (c - 'A' + 0x0A);
+    }
+    return ret;
+}
+
+//
+// Convert a character to lower case
+//
+__inline__ static char
+tolower(char c)
+{
+    if ((c >= 'A') && (c <= 'Z')) {
+        c = (c - 'A') + 'a';
+    }
+    return c;
+}
+
+#endif // _REDBOOT_H_