/*	Copyright Motorola, Inc. 1993, 1994
	ALL RIGHTS RESERVED

	You are hereby granted a copyright license to use, modify, and
	distribute the SOFTWARE so long as this entire notice is retained
	without alteration in any modified and/or redistributed versions,
	and that such modified versions are clearly identified as such.
	No licenses are granted by implication, estoppel or otherwise under
	any patents or trademarks of Motorola, Inc.

	The SOFTWARE is provided on an "AS IS" basis and without warranty.
	To the maximum extent permitted by applicable law, MOTOROLA DISCLAIMS
	ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING IMPLIED
	WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
	PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH
	REGARD TO THE SOFTWARE (INCLUDING ANY MODIFIED VERSIONS
	THEREOF) AND ANY ACCOMPANYING WRITTEN MATERIALS.

	To the maximum extent permitted by applicable law, IN NO EVENT SHALL
	MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
	(INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF
	BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
	INFORMATION, OR OTHER PECUNIARY LOSS) ARISING OF THE USE OR
	INABILITY TO USE THE SOFTWARE.   Motorola assumes no responsibility
	for the maintenance and support of the SOFTWARE.

*/


#include "config.h"

/*
	 1         2         3         4         5         6         7         8
01234567890123456789012345678901234567890123456789012345678901234567890123456789
*/
/* List define statements here */

/* These are for all the toolboxes and functions to use. These will help
to standardize the error handling in the current project */

				/* this is the "data type" for the error
				messages in the system */
#define STATUS unsigned int

				/* this is a success status code */
#define SUCCESS 1

				/* likewise this is failure */
#define FAILURE 0

#define NUM_ERRORS 47

/* This first section of "defines" are for error codes ONLY.  The called
   routine will return one of these error codes to the caller.  If the final
   returned code is "VALID", then everything is a-okay.  However, if one
   of the functions returns a non-valid status, that error code should be
   propogated back to all the callers.  At the end, the last caller will
   call an error_processing function, and send in the status which was
   returned.  It's up to the error_processing function to determine which
   error occured (as indicated by the status), and print an appropriate
   message back to the user.
*/
/*----------------------------------------------------------------------*/
/* these are specifically for the parser routines 			*/

#define UNKNOWN_COMMAND		0xfb00 /* "unrecognized command " */
#define UNKNOWN_REGISTER	0xfb01 /* "unknown register "*/
#define ILLEGAL_RD_STAGE	0xfb02 /* cannot specify reg. family in range*/
#define ILLEGAL_REG_FAMILY	0xfb03 /* "cannot specify a range of special
					or miscellaneous registers"*/
#define RANGE_CROSS_FAMILY	0xfb04 /* "cannot specify a range across
					register families" */
#define UNIMPLEMENTED_STAGE	0xfb05 /* invalid rd or rmm parameter format */
#define REG_NOT_WRITEABLE	0xfb06 /* "unknown operator in arguements"*/
#define INVALID_FILENAME	0xfb07 /* "invalid download filename" */
#define INVALID_BAUD_RATE	0xfb08 	/* invalid baud rate from sb command */
#define UNSUPPORTED_REGISTER	0xfb09 	/* Special register is not supported */
#define FOR_BOARD_ONLY		0xfb0a  /* "Not available for Unix." */


/*----------------------------------------------------------------------*/
/* these are for the error checking toolbox				*/

#define INVALID			0xfd00 /* NOT valid */
#define VALID			0xfd01 /* valid */

					/* This error is found in the fcn:
					is_right_size_input() to indicate
					that the input was not 8 characters
					long.  */
#define INVALID_SIZE		0xfd02

					/* This error is found in the fcn:
					is_valid_address_range() to indicate
					that the address given falls outside
					of valid memory defined by MEM_START
					to MEM_END.
					*/
#define OUT_OF_BOUNDS_ADDRESS	0xfd03

					/* This error is found in the fcn:
					is_valid_hex_input() to indicate that
					one of more of the characters entered
					are not valid hex characters.  Valid
					hex characters are 0-9, A-F, a-f.
					*/
#define INVALID_HEX_INPUT	0xfd04

					/* This error is found in the fcn:
					is_valid_register_number() to indicate
					that a given register does not exist.
					*/
#define REG_NOT_READABLE	0xfd05

					/* This error is found in the fcn:
					is_word_aligned_address() to indicate
					that the given address is not word-
					aligned.  A word-aligned address ends
					in 0x0,0x4,0x8,0xc.
					*/
#define	NOT_WORD_ALIGNED	0xfd07

					/* This error is found in the fcn:
					is_valid_address_range() to indicate
					that the starting address is greater
					than the ending address.
					*/
#define REVERSED_ADDRESS	0xfd08

					/* this error tells us that the address
					specified as the destination is within
					the source addresses  */
#define RANGE_OVERLAP		0xfd09


#define	ERROR			0xfd0a /* An error occured */
#define INVALID_PARAM		0xfd0b /* "invalid input parameter " */


#define INVALID_FLAG		0xfd0c	/* invalid flag */

/*----------------------------------------------------------------------*/
/* these are for the getarg toolbox 					*/

#define INVALID_NUMBER_ARGS 	0xFE00 /* invalid number of commd arguements */
#define UNKNOWN_PARAMETER	0xFE01 /* "unknown type of parameter "*/


/*----------------------------------------------------------------------*/
/* these are for the tokenizer toolbox 					*/

#define ILLEGAL_CHARACTER 	0xFF00 /* unrecognized char. in input stream*/
#define TTL_NOT_SORTED 		0xFF01 /* token translation list not sorted */
#define TTL_NOT_DEFINED 	0xFF02 /* token translation list not assigned*/
#define INVALID_STRING 		0xFF03 /* unable to extract string from input */
#define BUFFER_EMPTY 		0xFF04 /* "input buffer is empty" */
#define INVALID_MODE		0xFF05 /* input buf is in an unrecognized mode*/
#define TOK_INTERNAL_ERROR	0xFF06 /* "internal tokenizer error" */
#define TOO_MANY_IBS		0xFF07 /* "too many open input buffers" */
#define NO_OPEN_IBS		0xFF08 /* "no open input buffers" */


/* these are for the read from screen toolbox */

#define RESERVED_WORD		0xFC00 /* used a reserved word as an arguement*/


/* these are for the breakpoint routines */

#define FULL_BPDS		0xFA00 /* breakpoint data structure is full */


/* THESE are for the downloader */

#define NOT_IN_S_RECORD_FORMAT 	0xf900 /* "not in S-Record Format" */
#define UNREC_RECORD_TYPE	0xf901 /* "unrecognized record type" */
#define CONVERSION_ERROR	0xf902 /* "ascii to int conversion error" */
#define INVALID_MEMORY		0xf903 /* "bad s-record memory address " */


/* these are for the compression and decompression stuff */

#define COMP_UNK_CHARACTER	0xf800 /* "unknown compressed character " */

#define COMP_UNKNOWN_STATE	0xf801 /* "unknown binary state" */

#define NOT_IN_COMPRESSED_FORMAT 0xf802 /* not in compressed S-Record format */


/* these are for the DUART handling things */

					/* "unrecognized serial port configuration" */
#define UNKNOWN_PORT_STATE 	0xf700


/* these are for the register toolbox */

					/* "cannot find register in special
					 purpose register file " */
#define SPR_NOT_FOUND		0xf600


/* these are for the duart specific stuff */

					/* "transparent mode needs access to
						two serial ports" */
#define TM_NEEDS_BOTH_PORTS	0xf500


/*----------------------------------------------------------------------*/
/* these are specifically for the flash routines 			*/
#define FLASH_ERROR	 	0xf100		/* general flash error */
