1 /* 2 * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved. 3 * 4 * This software may be freely used, copied, modified, and distributed 5 * provided that the above copyright notice is preserved in all copies of the 6 * software. 7 */ 8 9 /*> angel.h <*/ 10 /*---------------------------------------------------------------------------*/ 11 /* This header file is the main holder for the declarations and 12 * prototypes for the core Angel system. Some Angel concepts are 13 * described at the start of this file to ensure that a complete view 14 * of the Angel world can be derived purely from the source. 15 * 16 * $Revision: 1.3 $ 17 * $Date: 2004/12/27 14:00:53 $ 18 * 19 * 20 * NOTE: Currently the Angel source is designed to be simple, 21 * understandable and easy to port to new hardware platforms. However, 22 * this does not always yield the highest performing system. The 23 * current layered approach introduces an overhead to the performance 24 * of the system. In a true commercial target, this code should be 25 * re-designed to build a system where the Angel logical message 26 * system, device driver and hardware accesses are merged to provide 27 * the best performance. 28 */ 29 /*---------------------------------------------------------------------------*/ 30 /* Angel overview: 31 32 ... some comments describing Angel ... 33 34 * Angel is designed as a kit-of-parts that can be used to provide 35 * run-time support for the development of ARM applications. The main 36 * core of Angel is in providing support for the "debug" message 37 * communication with a host system. These messages do not just cover 38 * debugging ARM processes, but also the process of downloading ARM 39 * programs or attaching to executing processes on the target. 40 * 41 * A stand-alone ROM based Angel world is the basic starting point for 42 * a system, since it will allow programs to be downloaded to the 43 * target. The ROM version of Angel will provide the generic debug 44 * support, but no system specific routines. The preferred method of 45 * using Angel is as a link library. This ensures that applications 46 * carry with them the Angel routines necessary to support debugging 47 * (and also ensure that the Angel version is up-to-date, independant 48 * of the version in the target ROM). Eventually, once a program has 49 * been fully debugged, a ROMmed version of the program can be 50 * generated with the Angel code being provided in the application. 51 52 .. more comments .. 53 54 * The standard Angel routines do *NOT* perform any dynamic memory 55 * allocation. To simplify the source, and aid the porting to a non C 56 * library world, memory is either pre-allocated (as build-time 57 * globals) or actually given to the particular Angel routine by the 58 * active run-time. This ensures that the interaction between Angel 59 * and the target O/S is minimised. 60 * 61 * Notes: We sub-include more header files to keep the source 62 * modular. Since Angel is a kit-of-parts alternative systems may need 63 * to change the prototypes of particular functions, whilst 64 * maintaining a fixed external interface. e.g. using the standard 65 * DEBUG messages, but with a different communications world. 66 */ 67 /*---------------------------------------------------------------------------*/ 68 69 #ifndef __angel_h 70 #define __angel_h 71 72 /*---------------------------------------------------------------------------*/ 73 /*-- Global Angel definitions and manifests ---------------------------------*/ 74 /*---------------------------------------------------------------------------*/ 75 /* When building Angel we may not include the standard library 76 * headers. However, it is useful coding using standard macro names 77 * since it makes the code easier to understand. 78 */ 79 80 typedef unsigned int word ; 81 typedef unsigned char byte ; 82 83 /* The following typedefs can be used to access I/O registers: */ 84 typedef volatile unsigned int vuword ; 85 typedef volatile unsigned char vubyte ; 86 87 /* 88 * The following typedefs are used when defining objects that may also 89 * be created on a host system, where the word size is not 90 * 32bits. This ensures that the same data values are manipulated. 91 */ 92 #ifdef TARGET 93 typedef unsigned int unsigned32; 94 typedef signed int signed32; 95 typedef int int32; 96 97 typedef unsigned short int unsigned16; 98 typedef signed short int signed16; 99 100 /* 101 * yet another solution for the bool/boolean problem, this one is 102 * copied from Scott's modifications to clx/host.h 103 */ 104 # ifdef IMPLEMENT_BOOL_AS_ENUM 105 enum _bool { _false, _true }; 106 # define _bool enum _bool 107 # elif defined(IMPLEMENT_BOOL_AS_INT) || !defined(__cplusplus) 108 # define _bool int 109 # define _false 0 110 # define _true 1 111 # endif 112 113 # ifdef _bool 114 # define bool _bool 115 # endif 116 117 # ifndef true 118 # define true _true 119 # define false _false 120 # endif 121 122 # ifndef YES 123 # define YES true 124 # define NO false 125 # endif 126 127 # undef TRUE /* some OSF headers define as 1 */ 128 # define TRUE true 129 130 # undef FALSE /* some OSF headers define as 1 */ 131 # define FALSE false 132 133 # ifndef NULL 134 # define NULL 0 135 # endif 136 137 #else 138 139 # include "host.h" 140 141 #endif 142 143 #ifndef IGNORE 144 # define IGNORE(x) ((x)=(x)) 145 #endif 146 147 /* The following typedef allows us to cast between integral and 148 * function pointers. This isn't allowed by direct casting when 149 * conforming to the ANSI spec. 150 */ 151 typedef union ansibodge 152 { 153 word w ; 154 word *wp ; 155 void *vp ; 156 byte *bp ; 157 void (*vfn)(void) ; 158 word (*wfn)(void) ; 159 int (*ifn)(void) ; 160 byte (*bfn)(void) ; 161 } ansibodge ; 162 163 /*---------------------------------------------------------------------------*/ 164 165 /* The amount setup aside by the run-time system for stack overflow 166 * handlers to execute in. This must be at least 256bytes, since that 167 * value is assumed by the current ARM Ltd compiler. 168 * This space is _only_ kept for the USR stack, not any of the privileged 169 * mode stacks, as stack overflow on these is always fatal - there is 170 * no point attemptingto recover. In addition is is important that 171 * Angel should keep privileged stack space requirements to a minimum. 172 */ 173 #define APCS_STACKGUARD 256 174 175 #endif /* __angel_h */ 176 177 /* EOF angel.h */ 178