diff options
Diffstat (limited to 'gdb/rdi-share/adp.h')
-rw-r--r-- | gdb/rdi-share/adp.h | 2528 |
1 files changed, 0 insertions, 2528 deletions
diff --git a/gdb/rdi-share/adp.h b/gdb/rdi-share/adp.h deleted file mode 100644 index 099fa4db14..0000000000 --- a/gdb/rdi-share/adp.h +++ /dev/null @@ -1,2528 +0,0 @@ -/* - * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved. - * - * This software may be freely used, copied, modified, and distributed - * provided that the above copyright notice is preserved in all copies of the - * software. - */ - -/* -*-C-*- - * - * $Revision$ - * $Date$ - * - * - * - * INTRODUCTION - * ------------ - * The early RDP message definitions were held in an ARM Ltd "armdbg" - * source file. Since the relevant header files were not exported - * publicly as part of an ARM Ltd core tools release, it was a problem - * for developers manipulating the target side of the protocol. - * - * For Angel, this new (ANSI 'C' clean) header file defines the ADP - * protocol. The header should be useable by both host and target - * systems, thus avoiding problems that can arise from duplicate - * definitions. Care has been taken in the construction of this header - * file to avoid any host/target differences. - * - * MESSAGE FORMAT - * -------------- - * Format of the "data" section of debug and boot agent messages. This is - * the standard ADP (Angel Debug Protocol) message format: - * - * unsigned32 reason - Main debug reason code. - * unsigned32 debugID - Information describing host debug world; - * - private to host and used in any target initiated - * messages. - * unsigned32 OSinfo1 \ Target OS information to identify process/thread - * unsigned32 OSinfo2 / memory/world, etc. These two fields are target - * defined. - * byte args[n] - Data for message "reason" code. - * - * NOTE: The message format is the same for single threaded debugging, - * except that the "OSinfo" fields should be -1 (0xFFFFFFFF). Even - * single-threaded debugging *MAY* have different host specified - * debugID values, so the Angel debug system will preserve the "debugID" - * information for replies, and the relevant asynchronous target-to-host - * messages. The "debugID" is defined by the host-end of the - * protocol, and is used by the host to ensure that messages are - * routed to the correct handler program/veneer. - * - * The reason there are two target specified "OSinfo" words is because - * thread identifiers may not be unique when processes/tasks have - * private virtual address spaces. It allows more flexibility when - * supporting multi-threaded or O/S aware debugging. - * - * NOTE: The reason that there is no "size" information, is that the - * message IDs themselves encode the format of any arguments. Also it - * would be a duplication of information used by the physical - * transport layer (which is distinct from this logical message - * layer). Any routing of messages through programs, hosts, - * etc. should be performed at the physical layer, or the boundaries - * between physical layers. i.e. packet received on socket in host, - * and transferred to serial packet for passing on down the line. - * - * NOTE: Pointers aren't passed in messages because they are dangerous in - * a multi-threaded environment. - * - * ADP REASON CODE - * --------------- - * The message reason codes contain some information that ties them to - * the channel and direction that the message will be used with. This - * will ensure that even if the message "#define name" is not - * completely descriptive, the message reason code is. - * - * b31 = direction. 0=Host-to-Target; 1=Target-to-Host; - * b30-28 = debug agent multi-threaded control (see below) - * b27-24 = reserved. should be zero. - * b23-16 = channelid. The fixed Angel channel number - * (see "channels.h"). - * b15-0 = message reason code. - * - * It is unfortunate that to aid the error-checking capabilities of - * the Angel communications we have changed the message numbers from - * the original ARM Ltd RDP. However this also has benefits, in that - * the Angel work is meant to be a clean break. - * - * However, it isn't so bad since even though the numbers are - * different, the majority of the reason codes have exactly the same - * functionality as the original RDP messages. - * - * NOTES - * ----- - * It would be ideal to use "rpcgen" (or some equivalent) to - * automatically maintain compatibility between the target and host - * ends of the protocol. However, ARM Ltd expressed that the message - * handling should be hand-coded, to avoid dependance on external - * tools. - * - * All other channels have undefined data formats and are purely - * application defined. The C library "_sys_" support will provide a - * veneer to perform message block operations as required. - * - * It is IMPLIED that all of the ADP messages will fit within the - * buffer DATASIZE. This has a minimum value, calculated from - * BUFFERMINSIZE. - * - * All messages are passed and received to the channel system in little - * endian order (ie. use little endian order when writing a word as - * a sequence of bytes within a message). - * - * A reply / acknowledgement to an ADP message is always sent and has the - * same reason code as the original except that the TtoH / HtoT bit is - * reversed. This makes it simple to check that the reply really - * is a reply to the message which was just sent! [Boot Channel messages - * also require that this protocol is used]. - */ - -#ifndef angel_adp_h -#define angel_adp_h - -#include "chandefs.h" - - -/* - * Buffer minimum sizes - */ - -/* the minimum target internal size */ -#define ADP_BUFFER_MIN_SIZE (256) - -/* a word is always reserved for internal use in the target */ -#define ADP_BUFFER_MAX_INTERNAL (sizeof(word)) - -/* the minimum available data portion */ -#define ADP_BUFFER_MIN_DATASIZE \ - (ADP_BUFFER_MIN_SIZE - ADP_BUFFER_MAX_INTERNAL - CHAN_HEADER_SIZE) - -/* - * the space taken up by the standard ADP header - * (reason, debugID, OSinfo1, OSinfo2) - */ -#define ADP_DEFAULT_HEADER_SIZE (4*sizeof(word)) - - -/* 8bit ADP version identification */ -#define ADPVSN (0x03) -/* This value can be used to identify the protocol version supported - * by target or host systems. This version number should only be - * changed if the protocol undergoes a non-backward compatible - * change. It should *NOT* be used to reflect extensions to the - * protocol. Such extensions can be added to the existing protocol - * version by allocating new reason codes, and by extending the - * ADP_Info message to identify new features. - */ - -/* The following value is used in the OSinfo fields for - * single-threaded messages, or where the host wants to alter the - * global CPU state. NOTE: The "debugID" field should always be - * defined by the host, and returned in target initiated messages. The - * only exception to this rule is the ADP_Booted message at the - * start-of-day. - */ -#define ADP_HandleUnknown (-1) - -/****************************************************************** - * - * ADP reason code subfields - * - */ - -/* The following bits are used to describe the basic direction of - * messages. This allows some extra checking of message validity to be - * performed, as well as providing a description of the message that - * may not be available in the "cpp" macro: - */ -#define HtoT ((unsigned)0 << 31) /* Host-to-Target message */ -#define TtoH ((unsigned)1 << 31) /* Target-to-Host message */ - -/* The following bits are used to control how the target system - * executes whilst processing messages. This allows for O/S specific - * host-based debug programs to interrogate system structures whilst - * ensuring that the access is atomic within the constraints imposed - * by the target O/S. - * - * NOTE: That only the channel is inserted into the reason code - * automatically. Thus both direction and multi thread control bits - * must be added by the host / target. - */ -/* Disable FIQ whilst processing message */ -#define DisableFIQ (1 << 30) -/* Disable IRQ whilst processing message */ -#define DisableIRQ (1 << 29) -/* Disable O/S pre-emption whilst processing message */ -#define DisablePreemption (1 << 28) - -/* The channel identification number is held in the reason code as a - * check: - */ -#define ADPCHANNEL(b) (((b) & 0xFF) << 16) - -/* The following macro constructs the reason code number, from the - * various fields - note that the direction is NOT inlcuded since - * this depends on whether the Host or Target system is including - * this file! - */ -#define ADPREASON(c,r) (ADPCHANNEL(c) | ((r) & 0xFFFF)) - -/* This macros is used when constructing manifests for sub-reason - * codes. At the moment it is identical to the main reason macro. If - * desired we could add a new bit that explicitly identifies the value - * as a sub-reason code, where the corresponding bit in the main - * message ID would be zero. - */ -#define ADPSUBREASON(c,r) (ADPCHANNEL(c) | ((r) & 0xFFFF)) - -/* All other undefined bits are reserved, and should be zero. */ - - - -/***************************************************************** - * - * channel_BOOT messages - * - */ - -/* The BOOT agent only supports a few messages. They are used purely - * to control the "start-of-day" connection to a host program. All - * Angel systems with host communications *MUST* provide the BOOT - * agent, even if they don't have support for either the single- or - * multi-threaded debug agents. - * - * The way the BOOT channel will be used on startup will be as follows: - * - * a) Target board is powered up before host debugger is invoked - * - * After switching on the target and initialisation is completed the - * target will send an ADP_Booted or ADP_Reset message. The debugger - * has not been started yet so this message will not be received. In - * a serial world this makes it important that any buffers on the host - * side are flushed during initialisation of the debugger, and in an - * Ethernet world it makes it important that the target can cope with the - * message not being received. - * - * Eventually the Debugger will be started up and will send an - * ADP_Reboot or ADP_Reset request. The target will respond to this with - * an ADP_Reboot or ADP_Reset acknowldege and will then reboot, finally - * sending an ADP_Rebooted when it has done all it needs to do (very little - * in the case of ADP_Reset, but completely rebooting in the case of - * ADP_Reboot). Note that it is important that an ADP_Rebooted message is - * sent so that the Debugger does not attempt to send any data after it has - * made a request to ADP_Reboot and before it receives an ADP_Rebooted, as - * data can be lost be the target during this time. - * - * The target and host are now ready to start a debug session. - * - * b) Target board is powered up after host debugger is invoked - * - * The debugger will send an ADP_Reboot or ADP_Reset request, but will - * receive no reply until the target is powered up. -/ * - * When the target is powered up then it will send an ADP_Rebooted - * message to the debugger. The debugger should accept this message - * even though it has received no ADP_Reboot or ADP_Reset acknowldege message - * from the target. - * - * The target and host are now ready to start a debug session. - * - * - * If at any point during the bootup sequence and ADP messages are - * sent down the S_DBG channel then they should be responded to with a - * RDI_NotInitialised error. [This should never happen however]. - * - * An ADP_Boot or ADP Rebooted message should be accepted at - * any point, since it is possible for a catastrophe to occur (such as - * disconnecteing the host and target during a debug message) which - * requires that one or other end be reset. - * - */ - -/* - * A list of parameter types - for now just baud rate - */ -typedef enum ADP_Parameter { - AP_PARAMS_START = 0xC000, - AP_BAUD_RATE = AP_PARAMS_START, - /* extra parameters go in here */ -#ifdef TEST_PARAMS - AP_CAFE_MENU, /* extra just for testing */ -#endif - AP_PARAMS_END -} ADP_Parameter; - -#define AP_NUM_PARAMS (AP_PARAMS_END - AP_PARAMS_START) - -/* - * Parameter types should have associated semantics which can be represented - * within one word per parameter, or an associated enum for choices. - * - * AP_BAUD_RATE: the word contains the exact baud rate, eg. 9600, 38400. - */ - -/* this is not strictly necessary, but it's an example */ -typedef enum ADP_BaudRate { - AB_9600 = 9600, - AB_19200 = 19200, - AB_38400 = 38400, - AB_57600 = 57600, - AB_115200 = 115200 -} ADP_BaudRate; - -#define AB_NUM_BAUD_RATES 5 /* this is more useful, for sizing arrays */ - -/* This must be set to the max number of options per parameter type */ -#define AP_MAX_OPTIONS (AB_NUM_BAUD_RATES) - - -#define ADP_Booted ADPREASON(CI_TBOOT,0) -/* This message is sent by the target after the Angel system has been - * initialised. This message also contains information describing the - * Angel world. The information can then be used to check that the - * target debug agent and source debugger are compatible. - * - * Message arguments: - * word Angel message default buffer size. - * word Angel message large buffer size (may be same as default) - * word Angel version ; inc. type (e.g. boot ROM) See (1) - * word ADP version. See (2) - * word ARM Architecture info See (3) - * word ARM CPU information ; including target endianness. See (4) - * word Target hardware status. See (5) - * word Number of bytes in banner message - * bytes Startup banner message (single-threaded readable - * descriptive text - NOT NULL terminated). - * - * Reply: - * word status - * - * 'status' returns RDIError_NoError for success, and otherwise - * indicates an error. - */ - -/* Angel version word [Reference(1)] : */ -/* Angel version number is a 16bit BCD value */ -#define ADP_ANGELVSN_MASK (0x0000FFFF) -#define ADP_ANGELVSN_SHIFT (0) - -/* Type of Angel system */ -#define ADP_ANGELVSN_TYPE_MASK (0x00FF0000) -#define ADP_ANGELVSN_TYPE_SHIFT (16) - -typedef enum { - ADP_AngelType_bootROM, /* Simple ROM system providing download capability */ - ADP_AngelType_appROM, /* ROM based application */ - ADP_AngelType_appDLOAD,/* Downloaded Angel based application */ - ADP_AngelType_Last /* Unknown type. This typedef can be extended */ - /* but if the host and target vsns differ */ - /* Then one will spot that it dies not understand */ -} ADP_Angel_Types ; /* this field and can whinge appropriately */ - -/* First unknown ADP_AngelType */ -#define ADP_ANGELVSN_UNKTYPE_MASK (0xFF000000) -#define ADP_ANGELVSN_UNKYPE_SHIFT (24) - -/* Currently only 8 bits are used in the word: */ -/* ADP protocol supported by target [Reference (2)] */ -#define ADP_ANGELVSN_ADP_MASK (0x000000FF) -#define ADP_ANGELVSN_ADP_SHIFT (0) - -/* ARM Architecture info: [Reference (3)] */ -/* ARM Architecture Verson of target CPU */ -#define ADP_ARM_ARCH_VSN_MASK (0x000000FF) -#define ADP_ARM_ARCH_VSN_SHIFT (0) -/* Does the processor support the Thumb Instruction Set */ -#define ADP_ARM_ARCH_THUMB (0x80000000) -/* Does the processor support Long Multiplies */ -#define ADP_ARM_ARCH_LONGMUL (0x40000000) -/* All other flags are current undefined, and should be zero. */ - -/* The following flags describe the feature set of the processor: */ -/* Set if cpu supports little-endian model [Reference (4)] */ -#define ADP_CPU_LE (1 << 0) -/* Set if cpu supports big-endian model */ -#define ADP_CPU_BE (1 << 1) -/* Set if processor has a cache */ -#define ADP_CPU_CACHE (1 << 2) -/* Set if processor has a MMU */ -#define ADP_CPU_MMU (1 << 3) -/* All other flags are current undefined, and should be zero. */ - -/* The following flags reflect current Target hardware status: */ -/* [Reference (5)] */ -/* 0 = no MMU or MMU off; 1 = MMU on */ -#define ADP_CPU_MMUOn (1 << 29) -/* 0 = no cache or cache off; 1 = cache on */ -#define ADP_CPU_CacheOn (1 << 30) -/* 0 = little-endian; 1 = big-endian */ -#define ADP_CPU_BigEndian (1U << 31) -/* All other flags are current undefined, and should be zero. */ - - -#ifdef LINK_RECOVERY - -#define ADP_TargetResetIndication ADPREASON(CI_TBOOT, 1) -/* - * If parameter negotiation is enabled at the target, it configures itself - * to various likely parameter settings and sends this message at each - * configuration. The message describes the default settings, and after - * sending at each configuration the target sets itself to the defaults - * it has just broadcast, to await either an ack on TBOOT or a request - * or reset indication on HBOOT. - * - * If the host receives this message successfully, it should reset to the - * indicated parameters and send a reply. - * - * Message arguments: - * word status (always 0, makes body same as - * ADP_ParamNegotiate response) - * word n-parameters - * n-parameters * { - * word ADP_Parameter - * word parameter-value - * } - * - * Reply: - * - empty acknowledgement - */ - -#endif /* def LINK_RECOVERY */ - -typedef enum ADP_Boot_Ack { - AB_NORMAL_ACK, /* will comply, immediate booted message */ - AB_LATE_ACK, /* will comply, late startup */ - AB_ERROR /* cannot comply */ -} ADP_Boot_Ack; - -/* If the host sets neither of these in the word sent on a Reset / Reboot - * then it doesn;t care about the endianess of the target - */ -#define ADP_BootHostFeature_LittleEnd 0x80000000 -#define ADP_BootHostFeature_BigEnd 0x40000000 - -#define ADP_Reboot ADPREASON(CI_HBOOT,2) -/* This message is sent when the host wants the target system to be - * completely reset, back to the boot monitor Angel. This is the - * method of the host forcing a cold-reboot. - * Note that an acknowledgement message will be sent immediately and - * that this must be sent before the target can reset. - * - * The parameter to this function is a bitset of host supported - * features. (in fact the same as ADP_Reset below. This can be used by - * the target system to avoid using debug channel bandwidth raising - * messages that will be ignored by the host. - * - * Parameters: - * word host supported features (see above) - * - * Reply: - * word status, one of enum ADP_Boot_Ack above. - * - * Currently there are no such features defined, so the word indicating - * host supported features should be set to 0. - */ - - - -#define ADP_Reset ADPREASON(CI_HBOOT,3) -/* This message is a request from the host, which should eventually - * result in the "ADP_Booted" message being sent by the target. - * Note that an acknowledgement message will be sent immediately and - * that this must be sent before the target can reset. - * This reset message is *ALWAYS* treated as a warm boot, with the target - * preserving as much state as possible. - * - * The parameter to this function is a bitset of host supported - * features. This can be used by the target system to avoid using - * debug channel bandwitdth raising messages that will be ignored by - * the host. - * - * Parameters: - * word host supported features (see above) - * - * Reply: - * word status, one of enum ADP_Boot_Ack above. - * - * Currently there are no such features defined, so the word indicating - * host supported features should be set to 0. - */ - - -#ifdef LINK_RECOVERY - -#define ADP_HostResetIndication ADPREASON(CI_HBOOT, 4) -/* - * This is as for ADP_TargetResetIndication, but is sent by the host when - * it first starts up in case the target is listening at a non-default - * setting. Having sent at various configurations, the host then listens - * at the defaults it has just broadcast, to await either an ack on HBOOT - * or a reset indication on TBOOT. - * - * For arguments and reply, see ADP_TargetResetIndication. - */ - -#endif /* def LINK_RECOVERY */ - - -#define ADP_ParamNegotiate ADPREASON(CI_HBOOT, 5) -/* - * The host sends this messages to negotiate new parameters with the target. - * For each parameter the host specifies a range of possibilities, starting - * with the most favoured. All possible combinations of parameters - * must be valid. - * - * If the target can operate at a combination of the offered parameters, - * it will reply with the parameters it is willing to use. AFTER sending - * the reply, the target switches to this combination. On receiving the - * reply, the host will switch to the new combination and send a LinkCheck - * message (see below). - * - * If the target cannot operate at any combination of the offered parameters, - * it will reply with an error status. - * - * Message arguments: - * word n-parameter-blocks - * n-parameter-blocks * { - * word ADP_Parameter - * word n-options - * n-options * { word parameter-value } - * } - * - * Reply: - * word status - * if (status == RDIError_NoError) { - * word n-parameters - * n-parameters * { - * word ADP_Parameter - * word chosen-value - * } - * } - */ - -#define ADP_LinkCheck ADPREASON(CI_HBOOT, 6) -/* - * This should be the first message that the host sends after a successful - * parameter negotiation. It is really just a 'ping'. - * - * Message arguments: - * - empty message - * - * Reply: - * - empty acknowledgement - */ - - -/******************************************************************** - * - * CI_HADP messages - * - */ - -#define ADP_HADPUnrecognised ADPREASON(CI_HADP,0) -/* This message is unusual in that it is normally sent in reply to - * another message which is not understood. This is an exception - * to the normal protocol which says that a reply must have the - * same base reason code as the original. There is a single reply - * parameter which is the reason code which was not understood. - * - * As well as being a reply this message can also be sent and will - * return as if this message were unrecognised! - * - * Parameters: - * none - * - * Reply: - * word reason code which was not recognised - */ - - -#define ADP_Info ADPREASON(CI_HADP,1) -/* This is the new ADP information message. It is used to interrogate - * the target debug agent. It provides information on the processor, - * as well as the state of the debug world. This allows the host to - * configure itself to the capabilities of the target. - * - * We try not to use feature bitsets, since we could quickly run out - * of known bits. Thus when the feature set is extended, this can be - * done in a couple of supported ways: - * - * If an undivided reason code is to be added (no reason subcodes) - * then add a new ADP_Info code which responds with a flag indicating - * whether that feature is supported by the target. If this has not - * even been implemented then the reply will be ADP_HADPUnrecognised - * - * If a reason code which is subdivided into reason subcodes is - * added then reason subcode 0 should be set aside to indicate - * whether the functionality of that reason code is supported - * by the target. If it is not even implemented then the reply will - * be ADP_Unrecognised. - * - * The first parameter to ADP_Info is a reason subcode, and subsequent - * parameters are defined by that subcode - * - * Parameters: - * word reason subcode - * other arguments as reason subcode determines. - * - * Reply: - * word reason subcode - * other argument as reason subcode determines - */ - -/* ADP_Info reason subcodes: */ - - - -#define ADP_Info_NOP ADPSUBREASON(CI_HADP,0) -/* ADP_Info_NOP - * ------------ - * Summary: This message is used to check for ADP_Info being supported. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' returns RDIError_NoError for success, non-zero indicates an error. - * If an error is returned then there is no handler for the ADP_Info - * message. The normal action will be to return an OK status. - */ - - -#define ADP_Info_Target ADPSUBREASON(CI_HADP,1) -/* ADP_Info_Target - * --------------- - * Summary: - * This reason code is used to interrogate target system details. - * - * Arguments: - * Send: () - * Return: (word status, word bitset, word model) - * - * 'status' is RDIError_NoError to indicate OK, or non-zero to indicate - * some sort of error. - * 'bitset' is described in more detail below, and is mostly compatible - * with the old RDI/RDP system to avoid gratuitous changes to the debugger - * toolbox. - * 'model' is the target hardware ID word, as returned by the ADP_Booted - * message. - * - * NOTE: The minimum and maximum protocol levels are no longer supported. - * It is the Angel view that debugging complexity should be shifted to the - * host if at all possible. This means that the host debugger should - * always try to configure itself to the features available in the target - * debug agent. This can be done by checking individual messages, rather - * than by a blanket version number dictating the feature set. - */ - -/* 'bitset':- */ -/* Target speed in instructions per second = 10**(bits0..3). */ -#define ADP_Info_Target_LogSpeedMask (0xF) - -/* Target is running on [0 = emulator / 1 = hardware] */ -#define ADP_Info_Target_HW (1 << 4) - -/* Bits 5..10 are currently undefined and should be zero. */ -/* Other bis are kept the same as the RDP in order to */ -/* eliminate the need to change the position of some bits */ - -/* If set then the debug agent can be reloaded. */ -#define ADP_Info_Target_CanReloadAgent (1 << 11) - -/* Can request AngelBufferSize information. */ -#define ADP_Info_Target_CanInquireBufferSize (1 << 12) - -/* Bit 13 is no longer required as it inquired whether - * a special RDP Interrupt code was supported - */ - -/* Debug agent can perform profiling. */ -#define ADP_Info_Target_Profiling (1 << 14) - -/* Debug agent can support Thumb code. */ -#define ADP_Info_Target_Thumb (1 << 15) - -/* Bit 16 was the communications channel check. - * This is always available on Angel systems. - */ - -#define ADP_Info_Points ADPSUBREASON(CI_HADP,2) -/* ADP_Info_Points - * --------------- - * Summary: Returns a 32bit wide bitset of break- and watch-point - * features supported by the target debug agent. - * - * Arguments: - * Send: () - * Return: (word status, word breakinfo) - * - * 'status' returns RDIError_NoError on success or non-zero to indicate - * some sort of error. - * 'breakinfo' is a 32bit wide bitset described in detail below. Note - * that only bits 1..12 are used. - */ - -/* 'breakinfo':- */ -/* Can trap on address equality. */ -#define ADP_Info_Points_Comparison (1 << 0) - -/* Can trap on address range. */ -#define ADP_Info_Points_Range (1 << 1) - -/* Can trap on 8bit memory reads. */ -#define ADP_Info_Points_ReadByteWatch (1 << 2) - -/* Can trap on 16bit memory reads. */ -#define ADP_Info_Points_ReadHalfWatch (1 << 3) - -/* Can trap on 32bit memory reads. */ -#define ADP_Info_Points_ReadWordWatch (1 << 4) - -/* Can trap on 8bit write accesses. */ -#define ADP_Info_Points_WriteByteWatch (1 << 5) - -/* Can trap on 16bit write accesses. */ -#define ADP_Info_Points_WriteHalfWatch (1 << 6) - -/* Can trap on 32bit write accesses. */ -#define ADP_Info_Points_WriteWordWatch (1 << 7) - -/* Like range, but based on address bitmask<. */ -#define ADP_Info_Points_Mask (1 << 8) - -/* Multi-threaded support only - thread specific breakpoints. */ -#define ADP_Info_Points_ThreadBreak (1 << 9) - -/* Multi-threaded support only - thread specific watchpoints. */ -#define ADP_Info_Points_ThreadWatch (1 << 10) - -/* Allows conditional breakpoints. */ -#define ADP_Info_Points_Conditionals (1 << 11) - -/* Break- and watch-points can be interrogated */ -#define ADP_Info_Points_Status (1 << 12) - - -#define ADP_Info_Step ADPSUBREASON(CI_HADP,3) -/* ADP_Info_Step - * ------------- - * Summary: Returns a 32bit wide bitmask of the single-stepping - * capabilities of the target debug agent. - * - * Arguments: - * Send: () - * Return: (word status, word stepinfo) - * - * 'status' returns RDIError_NoError on success, or non-zero to indicate - * some kind of error. - * 'stepinfo' is a 32bit wide bitmask described in detail below. Note that - * only 3 bits are used. - */ - -/* 'stepinfo':- */ -/* Single-stepping of more than one instruction is possible. */ -#define ADP_Info_Step_Multiple (1 << 0) - -/* Single-stepping until next direct PC change is possible. */ -#define ADP_Info_Step_PCChange (1 << 1) - -/* Single-stepping of a single instruction is possible. */ -#define ADP_Info_Step_Single (1 << 2) - - -#define ADP_Info_MMU ADPSUBREASON(CI_HADP,4) -/* ADP_Info_MMU - * ------------ - * Summary: Returns information about the memory management system (if - * any). - * - * Arguments: - * Send: () - * Return: (word status, word meminfo) - * - * 'status' returns RDIError_NoError to indicate success or non-zero to - * indicate some kind of error. - * 'meminfo' should be a 32bit unique ID, or zero if there is no MMU - * support on the target. - */ - - -#define ADP_Info_SemiHosting ADPSUBREASON(CI_HADP,5) -/* ADP_Info_SemiHosting - * -------------------- - * Summary: This message is used to check whether semi-hosting info calls - * are available on the target. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' returns RDIError_NoError if semi-hosting info calls are available, - * non-zero otherwise. - */ - - -#define ADP_Info_CoPro ADPSUBREASON(CI_HADP,6) -/* ADP_Info_CoPro - * -------------- - * Summary: This message checks whether CoProcessor info calls are - * supported. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' returns RDIError_NoError to indicate these facilities - * are supported, non-zero otherwise. - */ - - -#define ADP_Info_Cycles ADPSUBREASON(CI_HADP,7) -/* ADP_Info_Cycles - * --------------- - * Summary: Returns the number of instructions and cycles executed since - * the target was initialised. - * - * Arguments: - * Send: () - * Return: (word status, word ninstr, word Scycles, word Ncycles, - * word Icycles, word Ccycles, word Fcycles) - * - * 'status' is RDIError_NoError to indicate success, or non-zero if there - * is no target support for gathering cycle count information. - * 'ninstr' is the number of instructions executed. - * 'Scycles' is the number of S-cycles executed. - * 'Ncycles' is the number of N-cycles executed. - * 'Icycles' is the number of I-cycles executed. - * 'Ccycles' is the number of C-cycles executed. - * 'Fcycles' is the number of F-cycles executed. - */ - - -#define ADP_Info_DescribeCoPro ADPSUBREASON(CI_HADP,8) -/* ADP_Info_DescribeCoPro - * ---------------------- - * Summary: Describe the registers of a coprocessor. Use only if - * ADP_Info_CoPro return RDIError_NoError. - * - * Arguments: - * Send: Arguments of the form: - * (byte cpno, byte rmin, byte rmax, byte nbytes, byte access, - * byte cprt_r_b0, byte cprt_r_b1, byte cprt_w_b0, byte cprt_w_b1) - * And a terminating byte = 0xff. Must be within maximum buffer size. - * Return: (word status) - * - * 'cpno' is the number of the coprocessor to be described. - * 'rmin' is the bottom of a range of registers with the same description. - * 'rmax' is the top of a range of registers with the same description. - * 'nbytes' is the size of the register. - * 'access' describes access to the register and is described in more detail - * below. - * - * If bit 2 of access is set:- - * 'cprt_r0' provides bits 0 to 7, and - * 'cprt_r1' provides bits 16 to 23 of a CPRT instruction to read the - * register. - * 'cprt_w0' provides bits 0 to 7, and - * 'cprt_w1' provides bits 16 to 23 of a CPRT instruction to write the - * register. - * - * Otherwise, 'cprt_r0' provides bits 12 to 15, and 'cprt_r1' bit 22 of CPDT - * instructions to read and write the register ('cprt_w0' and 'cprt_w1' are - * junk). - */ - -/* 'access':- */ -/* Readable. */ -#define ADP_Info_DescribeCoPro_Readable (1 << 0) - -/* Writeable. */ -#define ADP_Info_DescribeCoPro_Writeable (1 << 1) - -/* Registers read or written via CPDT instructions (else CPRT) with this - bit set. */ -#define ADP_Info_DescribeCoPro_CPDT (1 << 2) - -#define ADP_Info_RequestCoProDesc ADPSUBREASON(CI_HADP,9) -/* ADP_Info_RequestCoProDesc - * ------------------------- - * Summary: Requests a description of the registers of a coprocessor. Use - * only if ADP_Info_CoPro return RDIError_NoError. - * - * Arguments: - * Send: (byte cpno) - * Return: Arguments of the form:- - * (word status, byte rmin, byte rmax, byte nbytes, byte access) - * Followed by a terminating byte = 0xFF. Must be within maximum - * buffer size. - * 'cpno' is the number of the coprocessor to describe. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'rmin' is the bottom of a range of registers with the same description. - * 'rmax' is the top of a range of registers with the same description. - * 'nbytes' is the size in bytes of the register(s). - * 'access' is as above in ADP_Info_DescribeCoPro. - */ - - -#define ADP_Info_AngelBufferSize ADPSUBREASON(CI_HADP,10) -/* ADP_Info_AngelBufferSize - * ------------------------ - * Summary: Returns the Angel buffer sizes. - * - * Arguments: - * Send: () - * Return: (word status, word defaultsize, word maxsize) - * - * 'status' returns RDIError_NoError to indicate success or non-zero to - * indicate some kind of error. - * 'defaultsize' is the default Angel ADP buffer size in bytes. This is - * at least 256 bytes. - * 'maxsize' is the largest Angel ADP buffer size in bytes. This will be - * greater than or equal to defaultsize. The target will accept ADP messages - * of up to this length for download, etc. - * - * Was DownLoadSize in RDP/RDI world. This is the amount that the target - * should transmit in a single operation. This should now be the Angel - * buffer size. This information is also given in the ADP_Booted message. - * - * NOTE: The value returned should be the DATASIZE and *NOT* BUFFERDEFSIZE. - * This is needed to ensure that the transport protocol information - * can be wrapped around the data. - */ - -#define ADP_Info_ChangeableSHSWI ADPSUBREASON(CI_HADP,11) -/* ADP_Info_ChangeableSHSWI - * ------------------------ - * Summary: This message is used to check whether it is possible to change - * which SWI's are used for semihosting. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' returns RDIError_NoError if semi-hosting info calls are available, - * non-zero otherwise. - */ - -#define ADP_Info_CanTargetExecute ADPSUBREASON(CI_HADP,12) -/* ADP_Info_CanTargetExecute - * ------------------------- - * Summary: This message is used to see if the target is currently in - * an executable state. Typically this is called after the debugger - * initialises. If a non-error statis is returned then the user is - * allowed to 'go' immediately. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' returns RDIError_NoError if target is ready to execute. - * other values indicate why it cannot execute. - */ - -#define ADP_Info_AgentEndianess ADPSUBREASON(CI_HADP,13) -/* ADP_Info_AgentEndianess - * ------------------------- - * Summary: This message is used to determine the endianess of the - * debug agent - * Arguments: - * Send: () - * Return: (word status) - * - * status should be RDIError_LittleEndian or RDIError_BigEndian - * any other value indicates the target does not support this - * request, so the debugger will have to make a best guess, which - * probably means only allow little endian loadagenting. - */ - - -#define ADP_Control ADPREASON(CI_HADP,2) -/* This message allows for the state of the debug agent to be - * manipulated by the host. - */ - -/* The following are sub reason codes to ADP control, the first parameter - * is the sub reason code which defines the format of subsequent parameters. - * - * word sub reason code - */ - -#define ADP_Ctrl_NOP ADPSUBREASON(CI_HADP,0) -/* ADP_Ctrl_NOP - * ------------ - * Summary: This message is used to check that ADP_Ctrl messages are - * supported. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate ADP_Ctrl messages are - * supported, non-zero otherwise. - */ - -#define ADP_Ctrl_VectorCatch ADPSUBREASON(CI_HADP,1) -/* ADP_Ctrl_VectorCatch - * -------------------- - * Summary: Specifies which hardware exceptions should be reported to the - * debugger. - * - * Arguments: - * Send: (word bitmap) - * Return: (word status) - * - * 'bitmap' is a bit-mask of exceptions to be reported, described in more - * detail below. A set bit indicates that the exception should be - * reported to the debugger, a clear bit indicates that the corresponding - * exception vector should be taken. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - -/* 'bitmap':- */ -/* Reset(branch through zero). */ -#define ADP_Ctrl_VectorCatch_BranchThroughZero (1 << 0) - -/* Undefined Instruction. */ -#define ADP_Ctrl_VectorCatch_UndefinedInstr (1 << 1) - -/* Software Interrupt. */ -#define ADP_Ctrl_VectorCatch_SWI (1 << 2) - -/* Prefetch Abort. */ -#define ADP_Ctrl_VectorCatch_PrefetchAbort (1 << 3) - -/* Data Abort. */ -#define ADP_Ctrl_VectorCatch_DataAbort (1 << 4) - -/* Address Exception. */ -#define ADP_Ctrl_VectorCatch_AddressException (1 << 5) - -/* Interrupt Request. */ -#define ADP_Ctrl_VectorCatch_IRQ (1 << 6) - -/* Fast Interrupt Request. */ -#define ADP_Ctrl_VectorCatch_FIQ (1 << 7) - -/* Error. */ -#define ADP_Ctrl_VectorCatch_Error (1 << 8) - - -#define ADP_Ctrl_PointStatus_Watch ADPSUBREASON(CI_HADP,2) -/* ADP_Ctrl_PointStatus_Watch - * -------------------------- - * Summary: Returns the hardware resource number and the type of that - * resource when given a watchpoint handle. Should only be called if - * the value returned by ADP_Info_Points had ADP_Info_Points_Status set. - * - * Arguments: - * Send: (word handle) - * Return: (word status, word hwresource, word type) - * - * 'handle' is a handle to a watchpoint. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'hwresource' is the hardware resource number. !!!!! - * 'type' is the type of the resource. - */ - - -#define ADP_Ctrl_PointStatus_Break ADPSUBREASON(CI_HADP,3) -/* ADP_Ctrl_PointStatus_Break - * -------------------------- - * Summary: Returns the hardware resource number and the type of that - * resource when given a breakpoint handle. Should only be called if - * the value returned by ADP_Info_Points had ADP_Info_Points_Status set. - * - * Arguments: - * Send: (word handle) - * Return: (word status, word hwresource, word type) - * - * 'handle' is a handle to a breakpoint. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'hwresource' is the hardware resource number. - * 'type' is the type of the resource. - */ - -#define ADP_Ctrl_SemiHosting_SetState ADPSUBREASON(CI_HADP,4) -/* ADP_Ctrl_SemiHosting_SetState - * ----------------------------- - * Summary: Sets whether or not semi-hosting is enabled. - * - * Arguments: - * Send: (word semihostingstate) - * Return: (word status) - * - * 'semihostingstate' sets semi-hosting to enabled if zero, otherwise - * it disables semi-hosting. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: This should only be called if ADP_Info_SemiHosting didn't return - * an error. - */ - - -#define ADP_Ctrl_SemiHosting_GetState ADPSUBREASON(CI_HADP,5) -/* ADP_Ctrl_SemiHosting_GetState - * ----------------------------- - * Summary: Reads whether or not semi-hosting is enabled. - * - * Arguments: - * Send: () - * Return: (word status, word semihostingstate) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'semihostingstate' is zero if semi-hosting is enabled, non-zero otherwise. - * - * NOTE: This should only be called if ADP_Info_SemiHosting didn't return - * an error. - */ - - -#define ADP_Ctrl_SemiHosting_SetVector ADPSUBREASON(CI_HADP,6) -/* ADP_Ctrl_SemiHosting_SetVector - * ------------------------------ - * Summary: Sets the semi-hosting vector. - * - * Arguments: - * Send: (word semihostingvector) - * Return: (word status) - * - * 'semihostingvector' holds the value the vector is to be set to. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: This should only be called if ADP_Info_SemiHosting didn't return - * an error. - */ - - -#define ADP_Ctrl_SemiHosting_GetVector ADPSUBREASON(CI_HADP,7) -/* ADP_Ctrl_SemiHosting_GetVector - * ------------------------------ - * Summary: Gets the value of the semi-hosting vector. - * - * Arguments: - * Send: () - * Return: (word status, word semihostingvector) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'semihostingvector' holds the value of the vector. - * - * NOTE: This should only be called if ADP_Info_SemiHosting didn't return - * an error. - */ - - -#define ADP_Ctrl_Log ADPSUBREASON(CI_HADP,8) -/* ADP_Ctrl_Log - * ------------ - * Summary: Returns the logging state. - * - * Arguments: - * Send: () - * Return: (word status, word logsetting) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'logsetting' is a bitmap specifying the level of logging desired, - * described in more detail below. The bits can be ORed together - */ - -/* 'logsetting':- */ - -/* No logging. */ -#define ADP_Ctrl_Log_NoLogging (0) -/* RDI level logging. */ -#define ADP_Ctrl_Log_RDI (1 << 0) -/* ADP byte level logging. */ -#define ADP_Ctrl_Log_ADP (1 << 1) - - -#define ADP_Ctrl_SetLog ADPSUBREASON(CI_HADP,9) -/* ADP_Ctrl_SetLog - * --------------- - * Summary: Sets the logging state. - * - * Arguments: - * Send: (word logsetting) - * Return: (word status) - * - * 'logsetting' is the same as in ADP_Ctrl_Log above. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - -#define ADP_Ctrl_SemiHosting_SetARMSWI ADPSUBREASON(CI_HADP,10) -/* ADP_Ctrl_SemiHosting_SetARMSWI - * ------------------------------ - * Summary: Sets the number of the ARM SWI used for semihosting - * - * Arguments: - * Send: (word ARM_SWI_number) - * Return: (word status) - * - * The debug agent will interpret ARM SWI's with the SWI number specified - * as semihosting SWI's. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: This should only be called if ADP_Info_ChangeableSHSWI didn't return - * an error. - */ - - -#define ADP_Ctrl_SemiHosting_GetARMSWI ADPSUBREASON(CI_HADP,11) -/* ADP_Ctrl_SemiHosting_GetARMSWI - * ------------------------------ - * Summary: Reads the number of the ARM SWI used for semihosting - * - * Arguments: - * Send: () - * Return: (word status, word ARM_SWI_number) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * ARM_SWI_number is the SWI number which is used for semihosting. - * - * NOTE: This should only be called if ADP_Info_SemiHosting didn't return - * an error. - */ - -#define ADP_Ctrl_SemiHosting_SetThumbSWI ADPSUBREASON(CI_HADP,12) -/* ADP_Ctrl_SemiHosting_SetThumbSWI - * -------------------------------- - * Summary: Sets the number of the Thumb SWI used for semihosting - * - * Arguments: - * Send: (word Thumb_SWI_number) - * Return: (word status) - * - * The debug agent will interpret Thumb SWI's with the SWI number specified - * as semihosting SWI's. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: This should only be called if ADP_Info_ChangeableSHSWI didn't return - * an error. - */ - - -#define ADP_Ctrl_SemiHosting_GetThumbSWI ADPSUBREASON(CI_HADP,13) -/* ADP_Ctrl_SemiHosting_GetThumbSWI - * -------------------------------- - * Summary: Reads the number of the Thumb SWI used for semihosting - * - * Arguments: - * Send: () - * Return: (word status, word ARM_Thumb_number) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * Thumb_SWI_number is the SWI number which is used for semihosting. - * - * NOTE: This should only be called if ADP_Info_SemiHosting didn't return - * an error. - */ - - -#define ADP_Ctrl_Download_Supported ADPSUBREASON(CI_HADP,14) -/* ADP_Ctrl_Download_Supported - * --------------------------- - * Summary: Can configuration be downloaded? - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError if the configuration can be downloaded, - * non-zero otherwise. - * - * NOTE: Equivalent to RDIInfo_DownLoad. - */ - - -#define ADP_Ctrl_Download_Data ADPSUBREASON(CI_HADP,15) -/* ADP_Ctrl_Download_Data - * ---------------------- - * Summary: Loads configuration data. - * - * Arguments: - * Send: (word nbytes, words data) - * Return: (word status) - * - * 'nbytes' is the number of *bytes* being sent. - * 'data' is the configuration data. NOTE: data must not cause the buffer - * size to exceed the maximum allowed buffer size. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDP_LoadConfigData. Should only be used if - * ADP_ICEM_AddConfig didn't return an error. - */ - - -#define ADP_Ctrl_Download_Agent ADPSUBREASON(CI_HADP,16) -/* ADP_Ctrl_Download_Agent - * ----------------------- - * Summary: Prepares Debug Agent to receive configuration data which it - * should interpret as a new version of the Debug Agent code. - * - * Arguments: - * Send: (word loadaddress, word size) - * Return: (word status) - * - * 'loadaddress' is the address where the new Debug Agent code should be - * loaded. - * 'size' is the number of bytes of Debug Agent code to be loaded. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDP_LoadAgent. The data will be downloaded using - * ADP_Ctrl_Download_Data. The new agent is started with ADP_Ctrl_Start_Agent - */ - - -#define ADP_Ctrl_Start_Agent ADPSUBREASON(CI_HADP,17) -/* ADP_Ctrl_Start_Agent - * ----------------------- - * Summary: Instruct Debug Agent to begin execution of new agent, - * which has been downloaded by ADP_Ctrl_Download_Agent. - * - * Arguments: - * Send: (word startaddress) - * Return: (word status) - * - * 'startaddress' is the address where the new Debug Agent code should be - * entered, and must satisfy: - * (loadaddress <= startaddress <= (loadaddress + size)) - * where 'loadaddress' and 'size' were specified in the - * ADP_Ctrl_Download_Agent message. - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - - -#define ADP_Ctrl_SetTopMem ADPSUBREASON(CI_HADP,18) -/* ADP_Ctrl_SetTopMem - * ------------------ - * Summary: Sets the top of memory for ICEman2 systems, so that the C Library - * can allocate the stack in the correct place on startup. - * - * Arguments: - * Send: (word mem_top) - * Return: (word status) - * - * This request should only be supported by ICEman2. Standard Angel systems - * should return an error (unrecognised is fine). - */ - - -#define ADP_Read ADPREASON(CI_HADP,3) -#define ADP_ReadHeaderSize (ADP_DEFAULT_HEADER_SIZE + 2*sizeof(word)) - -/* ADP_Read - * -------- - * Summary: Request for a transer of memory contents from the target to the - * debugger. - * - * Arguments: - * Send: (word address, word nbytes) - * Return: (word status, word rnbytes [, bytes data]) - * - * 'address' is the address from which memory transer should start. - * 'nbytes' is the number of bytes to transfer. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'rnbytes' holds the number of requested bytes NOT read (i.e. zero - * indicates success, non-zero indicates an error). - * 'data' is the number of bytes requested minus 'rnbytes'. - */ - - - -#define ADP_Write ADPREASON(CI_HADP,4) -#define ADP_WriteHeaderSize (ADP_DEFAULT_HEADER_SIZE + 2*sizeof(word)) - -/* ADP_Write - * --------- - * Summary: Request for a transfer of memory contents from the debugger to - * the target. - * - * Arguments: - * Send: (word address, word nbytes, bytes data) - * Return: (word status [, word rnbytes]) - * - * 'address' is the address from which memory transer should start. - * 'nbytes' is the number of bytes to transfer. - * 'data' holds the bytes to be transferred. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'rnbytes' holds the number of requested bytes NOT written (i.e. zero - * indicates success, non-zero indicates an error) if status indicated an - * error. - */ - - - -#define ADP_CPUread ADPREASON(CI_HADP,5) -/* ADP_CPUread - * ----------- - * Summary: This is a request to read values in the CPU. - * - * Arguments: - * Send: (byte mode, word mask) - * Return: (word status, words data) - * - * 'mode' defines the processor mode from which the transfer should be made. - * It is described in more detail below. - * 'mask' indicates which registers should be transferred. Setting a bit to - * one will cause the designated register to be transferred. The details - * of mask are specified below. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'data' holds the values of the registers on successful completion, - * otherwise it just holds rubbish. The lowest numbered register is - * transferred first. NOTE: data must not cause the buffer size to exceed - * the maximum allowed buffer size. - */ - -/* 'mode':- */ -/* The mode number is the same as the mode number used by an ARM; a value of - 255 indicates the current mode. */ -#define ADP_CPUmode_Current (255) - -/* 26bit user mode. */ -#define ADP_CPUread_26bitUser (0x0) - -/* 26bit FIQ mode. */ -#define ADP_CPUread_26bitFIQ (0x1) - -/* 26bit IRQ mode. */ -#define ADP_CPUread_26bitIRQ (0x2) - -/* 26bit Supervisor mode. */ -#define ADP_CPUread_26bitSVC (0x3) - -/* 32bit user mode. */ -#define ADP_CPUread_32bitUser (0x10) - -/* 32bit FIQ mode. */ -#define ADP_CPUread_32bitFIQ (0x11) - -/* 32bit IRQ mode. */ -#define ADP_CPUread_32bitIRQ (0x12) - -/* 32bit Supervisor mode. */ -#define ADP_CPUread_32bitSVC (0x13) - -/* 32bit Abort mode. */ -#define ADP_CPUread_32bitAbort (0x17) - -/* 32bit Undefined mode. */ -#define ADP_CPUread_32bitUndef (0x1B) - -/* #32bit System mode - Added in Architecture 4 ARMs e.g.ARM7TDMI */ -#define ADP_CPUread_32bitSystem (0x1F) - -/* 'mask':- */ -/* Request registers RO-R14. */ -#define ADP_CPUread_RegsMask (0x7FFF) - -/* Request Program Counter (including mode and flag bits in 26-bit modes. */ -#define ADP_CPUread_PCmode (1 << 15) - -/* Request Program Counter (without mode and flag bits in 26-bit modes. */ -#define ADP_CPUread_PCnomode (1 << 16) - -/* Requests the transfer of the CPSR */ -#define ADP_CPUread_CPSR (1 << 17) - -/* In processor modes with an SPSR(non-user modes), bit 19 requests its - transfer */ -#define ADP_CPUread_SPSR (1 << 18) - - - -#define ADP_CPUwrite ADPREASON(CI_HADP,6) -/* ADP_CPUwrite - * ------------ - * Summary: This is a request to write values to the CPU. - * - * Arguments: - * Send: (byte mode, word mask, words data) - * Return: (word status) - * - * 'mode' defines the processor mode to which the transfer should be made. - * The mode number is the same as the mode number used by ARM; a value of - * 255 indicates the current mode. See ADP_CPUread above for more detail. - * 'mask' indicates which registers should be transferred. Setting a bit to - * one will cause the designated register to be transferred. The details - * of mask are specified above in ADP_CPUread. - * 'data' holds the values of the registers to be transferred. The first - * value is written to the lowest numbered register. NOTE: data must not - * cause the buffer size to exceed the maximum allowed buffer size. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - - - -#define ADP_CPread ADPREASON(CI_HADP,7) -/* ADP_CPread - * ---------- - * Summary: This message requests a co-processors internal state. - * - * Arguments: - * Send: (byte CPnum, word mask) - * Return: (word status, words data) - * - * 'CPnum' is the number of the co-processor to transfer values from. - * 'mask' specifies which registers to transfer and is co-processor - * specific. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'data' holds the registers specified in 'mask' if successful, otherwise - * just rubbish. The lowest numbered register is transferred first. - * NOTE: data must not cause the buffer size to exceed the maximum allowed - * buffer size. - */ - - - -#define ADP_CPwrite ADPREASON(CI_HADP,8) -/* ADP_CPwrite - * ----------- - * Summary: This message requests a write to a co-processors internal state. - * - * Arguments: - * Send: (byte CPnum, word mask, words data) - * Return: (word status) - * - * 'CPnum' is the number of the co-processor to transfer values to. - * 'mask' specifies which registers to transfer and is co-processor - * specific. - * 'data' holds the values to transfer to the registers specified in 'mask'. - * The first value is written to the lowest numbered register. - * NOTE: data must not cause the buffer size to exceed the maximum allowed - * buffer size. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - - - -#define ADP_SetBreak ADPREASON(CI_HADP,9) -/* ADP_SetBreak - * ------------ - * Summary: Sets a breakpoint. - * - * Arguments: - * Send: (word address, byte type [, word bound]) - * Return: (word status, word pointhandle, word raddress, word rbound) - * - * 'address' is the address of the instruction to set the breakpoint on. - * 'type' specifies the sort of breakpoint and is described in more detail - * below. - * 'bound' is included if the least significant 4 bits of type are set to - * 5 or above (see below for more detail). - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'pointhandle' returns a handle to the breakpoint, it will be valid if bit - * 7 of 'type' is set. See below for more detail. - * 'raddress' is valid depending on 'type', see below for more detail. - * 'rbound' is valid depending on 'type', see below for more detail. - */ - -/* 'type':- */ -/* The least significant 4 bits define the sort of breakpoint to set:- */ -/* Halt if the pc is equal to 'address'. */ -#define ADP_SetBreak_EqualsAddress (0) - -/* Halt if the pc is greater than 'address'. */ -#define ADP_SetBreak_GreaterAddress (1) - -/* Halt if the pc is greater than or equal to 'address'. */ -#define ADP_SetBreak_GEqualsAddress (2) - -/* Halt if the pc is less than 'address'. */ -#define ADP_SetBreak_LessAddress (3) - -/* Halt if the pc is less than or equal to 'address'. */ -#define ADP_SetBreak_LEqualsAddress (4) - -/* Halt if the pc is in the range from 'address' to 'bound' inclusive. */ -#define ADP_SetBreak_Range (5) - -/* Halt if the pc is not in the range from 'address' to 'bound' inclusive. */ -#define ADP_SetBreak_NotRange (6) - -/* Halt if (pc & 'bound') = 'address'. */ -#define ADP_SetBreak_AndBound (7) - -/* Bits 5,6 and 7 are used as follows :- */ -/* If set this indicates that the breakpoint is on a 16bit (Thumb) - instruction rather than a 32bit (ARM) instruction. */ -#define ADP_SetBreak_Thumb (1 << 4) - -/* This requests that the breakpoint should be conditional (execution halts - only if the breakpointed instruction is executed, not if it is - conditionally skipped). If bit 5 is not set, execution halts whenever - the breakpointed instruction is reached (whether executed or skipped). */ -#define ADP_SetBreak_Cond (1 << 5) - -/* This requests a dry run: the breakpoint is not set and the 'raddress', and - if appropriate the 'rbound', that would be used, are returned (for - comparison and range breakpoints the address and bound used need not be - exactly as requested). A RDIError_NoError 'status' byte indicates that - resources are currently available to set the breakpoint, non-zero - indicates an error. RDIError_NoMorePoints indicates that the required - breakpoint resources are not currently available. */ -#define ADP_SetBreak_DryRun (1 << 6) - -/* If the request is successful, but there are no more breakpoint registers - (of the requested type), then the value RDIError_NoMorePoints is - returned. */ - -/* If a breakpoint is set on a location which already has a breakpoint, the - first breakpoint will be removed before the new breakpoint is set. */ - - - -#define ADP_ClearBreak ADPREASON(CI_HADP,10) -/* ADP_ClearBreak - * -------------- - * Summary: Clears a breakpoint. - * - * Arguments: - * Send: (word pointhandle) - * Return: (word status) - * - * 'pointhandle' is a handle returned by a previous ADP_SetBreak. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - - -#define ADP_SetWatch ADPREASON(CI_HADP,11) -/* ADP_SetWatch - * ------------ - * Summary: Sets a watchpoint. - * - * Arguments: - * Send: (word address, byte type, byte datatype [,word bound]) - * Return: (word status, word pointhandle, word raddress, word rbound) - * - * 'address' is the address at which to set the watchpoint. - * 'type' is the type of watchpoint to set and is described in detail below. - * 'datatype' defines the sort of data access to watch for and is described - * in more detail below. - * 'bound' is included depending on the value of type (see description of - * type below). - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'pointhandle' is valid depending on the value of type (see description - * of type below). - * 'raddress' is valid depending on the value of type (see description - * of type below). - * 'rbound' is valid depending on the value of type (see description - * of type below). - */ - -/* 'type':- */ -/* The least significant 4 bits of 'type' define the sort of watchpoint to - set:- */ -/* Halt on a data access to the address equal to 'address'. */ -#define ADP_SetWatch_EqualsAddress (0) - -/* Halt on a data access to an address greater than 'address'. */ -#define ADP_SetWatch_GreaterAddress (1) - -/* Halt on a data access to an address greater than or equal to 'address'. */ -#define ADP_SetWatch_GEqualsAddress (2) - -/* Halt on a data access to an address less than 'address'. */ -#define ADP_SetWatch_LessAddress (3) - -/* Halt on a data access to an address less than or equal to 'address'. */ -#define ADP_SetWatch_LEqualsAddress (4) - -/* Halt on a data access to an address in the range from 'address' to - 'bound' inclusive. */ -#define ADP_SetWatch_Range (5) - -/* Halt on a data access to an address not in the range from 'address' to - 'bound' inclusive. */ -#define ADP_SetWatch_NotRange (6) - -/* Halt if (data-access-address & 'bound')='address'. */ -#define ADP_SetWatch_AndBound (7) - -/* Bits 6 and 7 of 'type' also have further significance:- - NOTE: they must not be simulataneously set. */ - -/* Bit 6 of 'type' set: Requests a dry run: the watchpoint is not set and - the 'address' and, if appropriate, the 'bound', that would be used are - returned (for range and comparison watchpoints, the 'address' and 'bound' - used need not be exactly as requested). A RDIError_NoError status byte - indicates that resources are currently available to set the watchpoint; - RDIError_NoMorePoints indicates that the required watchpoint resources - are not currently available. */ - -/* Bit 7 of 'type' set: Requests that a handle should be returned for the - watchpoint by which it will be identified subsequently. If bit 7 is - set, a handle will be returned ('pointhandle'), whether or not the - request succeeds or fails (but, obviously, it will only be meaningful - if the request succeesd). */ - -/* 'datatype':- */ -/* The 'datatype' argument defines the sort of data access to watch for, - values can be summed or ORed together to halt on any set of sorts of - memory access. */ - -/* Watch for byte reads. */ -#define ADP_SetWatch_ByteReads (1) - -/* Watch for half-word reads. */ -#define ADP_SetWatch_HalfWordReads (2) - -/* Watch for word reads. */ -#define ADP_SetWatch_WordReads (4) - -/* Watch for half-word reads. */ -#define ADP_SetWatch_ByteWrites (8) - -/* Watch for half-word reads. */ -#define ADP_SetWatch_HalfWordWrites (16) - -/* Watch for half-word reads. */ -#define ADP_SetWatch_WordWrites (32) - -/* On successful completion a RDIError_NoError 'status' byte is returned. On - unsuccessful completion, a non-zero error code byte is returned. If the - request is successful, but there are now no more watchpoint registers - (of the requested type), then the value RDIError_NoMorePoints is - returned. */ - -/* If a watchpoint is set on a location which already has a watchpoint, the - first watchpoint will be removed before the new watchpoint is set. */ - - -#define ADP_ClearWatch ADPREASON(CI_HADP,12) -/* ADP_ClearWatch - * -------------- - * Summary: Clears a watchpoint. - * - * Arguments: - * Send: (word pointhandle) - * Return: (word status) - * - * 'pointhandle' is a handle to a watchpoint returned by a previous - * ADP_SetWatch. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - - - -#define ADP_Execute ADPREASON(CI_HADP,13) -/* ADP_Execute - * ----------- - * Summary: This message requests that the target starts executing from - * the stored CPU state. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * The message will *ALWAYS* respond immediately with an ACK (unlike the - * old RDI definition, which allowed asynchronous message replies). - * - * Execution will stop when allowed system events occur. The host will - * be notified via a ADP_Stopped message (described below). - */ - - - -#define ADP_Step ADPREASON(CI_HADP,14) -/* ADP_Step - * -------- - * Summary: Execute 'ninstr' instructions. - * - * Arguments: - * Send: (word ninstr) - * Return: (word status) - * - * 'ninstr' is the number of instructions to execute, starting at the - * address currently loaded into the CPU program counter. If it is zero, - * the target should execute instructions upto the next instruction that - * explicitly alters the Program Counter. i.e. a branch or ALU operation - * with the PC as the destination. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * The ADP_Step function (unlike the earlier RDI system) will *ALWAYS* - * return an ACK immediately. A subsequent ADP_Stopped message will be - * delivered from the target to the host when the ADP_Step operation - * has completed. - */ - - - -#define ADP_InterruptRequest ADPREASON(CI_HADP,15) -/* ADP_InterruptRequest - * -------------------- - * Summary: Interrupt execution. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * On receiving this message the target should attempt to stop execution. - */ - - - -#define ADP_HW_Emulation ADPREASON(CI_HADP,16) -/* ADP_HW_Emulation - * ---------------- - * The first parameter to ADP_HW_Emulation is a Reason Subcode, and - * subsequent parameters are defined by that subcode - * - * word reason subcode - * other arguments as reason subcode determines - * - */ - -/* ADP__HW_Emulation sub-reason codes: */ - -#define ADP_HW_Emul_Supported ADPSUBREASON(CI_HADP,0) -/* ADP_HW_Emul_Supported - * --------------------- - * Summary: Enquires whether calls to the next 4 messages are available - * (MemoryAccess, MemoryMap, Set_CPUspeed, ReadClock). - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate the messages are available, - * non-zero otherwise. - * - * NOTE: Equivalent to RDI_Info_Memory_Stats. - */ - - -#define ADP_HW_Emul_MemoryAccess ADPSUBREASON(CI_HADP,1) -/* ADP_HW_Emul_MemoryAccess - * ------------------------ - * Summary: Get memory access information for memory block with specified - * handle. - * - * Arguments: - * Send: (word handle) - * Return: (word status, word nreads, word nwrites, word sreads, - * word swrites, word ns, word s) - * - * 'handle' is a handle to a memory block. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'nreads' is the number of non-sequential reads. - * 'nwrites' is the number of non-sequential writes. - * 'sreads' is the number of sequential reads. - * 'swrites' is the number of sequential writes. - * 'ns' is time in nano seconds. - * 's' is time in seconds. - * - * NOTE: Equivalent to RDIMemory_Access. - */ - - -#define ADP_HW_Emul_MemoryMap ADPSUBREASON(CI_HADP,2) -/* ADP_HW_Emul_MemoryMap - * --------------------- - * Summary: Sets memory characteristics. - * - * Arguments: - * Send: (word n, - Then 'n' sets of arguments of the form:- - word handle, word start, word limit, byte width, - byte access, word Nread_ns, word Nwrite_ns, word Sread_ns, - word Swrite_ns) - * Return: (word status) - * - * 'n' is the number of sets of arguments. - * 'handle' is a handle to the region. - * 'start' is the start of this region. - * 'limit' is the limit of this region. - * 'width' is the memory width, described in detail below. - * 'access' is described in detail below. - * 'Nread_ns' is the access time for N read cycles in nano seconds. - * 'Nwrite_ns' is the access time for N write cycles in nano seconds. - * 'Sread_ns' is the access time for S read cycles in nano seconds. - * 'Swrite_ns' is the access time for S write cycles in nano seconds. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * NOTE: Equivalent to RDIMemory_Map. - */ - -/* 'width':- */ -/* 8 bit memory width. */ -#define ADP_HW_Emul_MemoryMap_Width8 (0) - -/* 16 bit memory width. */ -#define ADP_HW_Emul_MemoryMap_Width16 (1) - -/* 32 bit memory width. */ -#define ADP_HW_Emul_MemoryMap_Width32 (2) - -/* 'access':- */ -/* Bit 0 - read access. */ -#define ADP_HW_Emul_MemoryMap_Access_Read (1 << 0) - -/* Bit 1 - write access. */ -#define ADP_HW_Emul_MemoryMap_Access_Write (1 << 1) - -/* Bit 2 - latched 32 bit memory. */ -#define ADP_HW_Emul_MemoryMap_Access_Latched (1 << 2) - - -#define ADP_HW_Emul_SetCPUSpeed ADPSUBREASON(CI_HADP,3) -/* ADP_HW_Emul_SetCPUSpeed - * ----------------------- - * Summary: Sets the speed of the CPU. - * - * Arguments: - * Send: (word speed) - * Return: (word status) - * - * 'speed' is the CPU speed in nano seconds. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDISet_CPUSpeed. - */ - - -#define ADP_HW_Emul_ReadClock ADPSUBREASON(CI_HADP,4) -/* ADP_HW_Emul_ReadClock - * --------------------- - * Summary: Reads simulated time. - * - * Arguments: - * Send: () - * Return: (word status, word ns, word s) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'ns' is time in nano seconds. - * 's' is time in seconds. - * - * NOTE: Equivalent to RDIRead_Clock. - */ - - -#define ADP_ICEbreakerHADP ADPREASON(CI_HADP,17) - -/* The first parameter to ADP_ICEbreaker is a Reason Subcode, and - * subsequent parameters are defined by that subcode - * - * word reason subcode - * other arguments as reason subcode determines - * - */ - -/* ADP_ICEbreaker sub-reason codes: */ - -#define ADP_ICEB_Exists ADPSUBREASON(CI_HADP,0) -/* ADP_ICEB_Exists - * --------------- - * Summary: Is there an ICEbreaker in the system? - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate there is an ICEbreaker, - * non-zero otherwise. - */ - - -#define ADP_ICEB_GetLocks ADPSUBREASON(CI_HADP,1) -/* ADP_ICEB_GetLocks - * ----------------- - * Summary: Returns which ICEbreaker registers are locked. - * - * Arguments: - * Send: () - * Return: (word status, word lockedstate) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'lockedstate' is a bitmap if the ICEbreaker registers locked against use - * by IceMan (because explicitly written by the user). Bit n represents - * hardware breakpoint n, and if set the register is locked. - * - * NOTE: Equivalent to RDIIcebreaker_GetLocks. Should only be used if - * ADP_ICEB_Exists didn't return an error. - */ - - -#define ADP_ICEB_SetLocks ADPSUBREASON(CI_HADP,2) -/* ADP_ICEB_SetLocks - * ----------------- - * Summary: Sets which ICEbreaker registers are locked. - * - * Arguments: - * Send: (word lockedstate) - * Return: (word status) - * - * 'lockedstate' is the same as in ADP_ICEB_GetLocks above. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDIIcebreaker_SetLocks. Should only be used if - * ADP_ICEB_Exists didn't return an error. - */ - - -#define ADP_ICEB_CC_Exists ADPSUBREASON(CI_HADP,3) -/* ADP_ICEB_CC_Exists - * ------------------ - * Summary: Is there an ICEbreaker Comms Channel? - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate there is a Comms Channel, - * non-zero otherwise. - * - * NOTE: Should only be used if ADP_ICEB_Exists didn't return an error. - */ - - -#define ADP_ICEB_CC_Connect_ToHost ADPSUBREASON(CI_HADP,4) -/* ADP_ICEB_CC_Connect_ToHost - * -------------------------- - * Summary: Connect Comms Channel in ToHost direction. - * - * Arguments: - * Send: (byte connect) - * Return: (word status) - * - * 'connect' !!!!! - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDICommsChannel_ToHost. Should only be used if - * ADP_ICEB_CC_Exists didn't return an error. - */ - - -#define ADP_ICEB_CC_Connect_FromHost ADPSUBREASON(CI_HADP,5) -/* ADP_ICEB_CC_Connect_FromHost - * ---------------------------- - * Summary: Connect Comms Channel in FromHost direction. - * - * Arguments: - * Send: (byte connect) - * Return: (word status) - * - * 'connect' is the same as in ADP_ICEB_CC_Connect_ToHost above. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDICommsChannel_FromHost. Should only be used if - * ADP_ICEB_CC_Exists didn't return an error. - */ - - -#define ADP_ICEman ADPREASON(CI_HADP,18) - -/* The first parameter to ADP_ICEman is a Reason Subcode, and - * subsequent parameters are defined by that subcode - * - * word reason subcode - * other arguments as reason subcode determines - * - */ - -/* ADP_ICEman sub-reason codes: */ - - -#define ADP_ICEM_AddConfig ADPSUBREASON(CI_HADP,0) -/* ADP_ICEM_AddConfig - * ------------------ - * Summary: Prepares target to receive configuration data block. - * - * Arguments: - * Send: (word nbytes) - * Return: (word status) - * - * 'nbytes' is the number of bytes in the configuration block. - * 'status' is RDIError_NoError to indicate success, non-zero if a - * configuration block of this size can't be accepted. - * - * NOTE: Equivalent to RDP_AddConfig. - */ - - -#define ADP_ICEM_SelectConfig ADPSUBREASON(CI_HADP,1) -/* ADP_ICEM_SelectConfig - * --------------------- - * Summary: Selects one of the sets of configuration data blocks and - * reinitialises to use the new configuration. - * - * Arguments: - * Send: (byte aspect, byte namelen, byte matchtype, word vsn_req, - bytes name) - * Return: (word status, word vsn_sel) - * - * 'aspect' is one of two values defined below. - * 'namelen' is the number of bytes in 'name'. - * 'matchtype' specifies how the selected version must match that specified, - * and takes one of the values defined below. - * 'vsn_req' is the requested version of the named configuration. - * 'name' is the name of the configuration. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'vsn_sel' is the version number of the configuration selected on success. - * - * NOTE: Equivalent to RDP_SelectConfig. - */ - -/* 'aspect':- */ -#define ADP_ICEM_SelectConfig_ConfigCPU (0) -#define ADP_ICEM_SelectConfig_ConfigSystem (1) - -/* 'matchtype':- */ -#define ADP_ICEM_SelectConfig_MatchAny (0) -#define ADP_ICEM_SelectConfig_MatchExactly (1) -#define ADP_ICEM_SelectConfig_MatchNoEarlier (2) - - -#define ADP_ICEM_ConfigCount ADPSUBREASON(CI_HADP,2) -/* ADP_ICEM_ConfigCount - * -------------------- - * Summary: Return number of configurations. - * - * Arguments: - * Send: () - * Return: (word status [, word count]) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'count' returns the number of configurations if status is zero. - * - * NOTE: Equivalent to RDIConfig_Count. - */ - - -#define ADP_ICEM_ConfigNth ADPSUBREASON(CI_HADP,3) -/* ADP_ICEM_ConfigNth - * ------------------ - * Summary: Gets the nth configuration details. - * - * Arguments: - * Send: (word confign) - * Return: (word status, word version, byte namelen, bytes name) - * - * 'confign' is the number of the configuration. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'version' is the configuration version number. - * 'namelen' is the number of bytes in 'name'. - * 'name' is the name of the configuration. - * - * NOTE: Equivalent to RDIConfig_Nth. - */ - - - -#define ADP_Profile ADPREASON(CI_HADP,19) - -/* The first parameter to ADP_Profile is a Reason Subcode, and - * subsequent parameters are defined by that subcode - * - * word reason subcode - * other arguments as reason subcode determines - * - */ - -/* ADP_Profile sub-reason codes: */ - - -#define ADP_Profile_Supported ADPSUBREASON(CI_HADP,0) -/* ADP_Profile_Supported - * --------------------- - * Summary: Checks whether profiling is supported. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError if profiling is supported, non-zero otherwise. - * - * NOTE: Can also be determined using Info_Target. - */ - - -#define ADP_Profile_Stop ADPSUBREASON(CI_HADP,1) -/* ADP_Profile_Stop - * ---------------- - * Summary: Stops profiling. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDIProfile_Stop. - */ - - -#define ADP_Profile_Start ADPSUBREASON(CI_HADP,2) -/* ADP_Profile_Start - * ----------------- - * Summary: Starts profiling (PC sampling). - * - * Arguments: - * Send: (word interval) - * Return: (word status) - * - * 'interval' is the period of PC sampling in micro seconds. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDIProfile_Start. - */ - - -#define ADP_Profile_WriteMap ADPSUBREASON(CI_HADP,3) -#define ADP_ProfileWriteHeaderSize (ADP_DEFAULT_HEADER_SIZE + 4*sizeof(word)) - -/* ADP_Profile_WriteMap - * -------------------- - * Summary: Downloads a map array, which describes the PC ranges for profiling. - * - * Arguments: A number of messages each of form:- - * Send: (word len, word size, word offset, words map_data) - * Return: (word status) - * - * 'len' is the number of elements in the entire map array being downloaded. - * 'size' is the number of words being downloaded in this message, i.e. the - * length of 'map_data'. - * 'offset' is the offset into the entire map array which this message starts - * from, in words. - * 'map_data' consists of 'size' words of map data. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDIProfile_WriteMap. - */ - - -#define ADP_Profile_ReadMap ADPSUBREASON(CI_HADP,4) -#define ADP_ProfileReadHeaderSize (ADP_DEFAULT_HEADER_SIZE + 2*sizeof(word)) - -/* ADP_Profile_ReadMap - * ------------------- - * Summary: Uploads a set of profile counts which correspond to the current - * profile map. - * - * Arguments: A number of messages, each of the form: - * Send: (word offset, word size) - * Return: (word status, words counts) - * - * 'offset' is the offset in the entire array of counts that this message - * starts from, in words. - * 'size' is the number of words uploaded in this message (in counts). - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'counts' is 'size' words of profile counts. - * - * NOTE: Equivalent to RDIProfile_ReadMap. - */ - - -#define ADP_Profile_ClearCounts ADPSUBREASON(CI_HADP,5) -/* ADP_Profile_ClearCounts - * ----------------------- - * Summary: Requests that PC sample counts be set to zero. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDIProfile_ClearCounts. - */ - -#define ADP_InitialiseApplication ADPREASON(CI_HADP,20) -/* ADP_InitialiseApplication - * ------------------------- - * Summary: Requests that OS setup up the thread/task so that it can be - * executed. - * - * Arguments: - * Send: () - * Return: (word status) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - -#define ADP_End ADPREASON(CI_HADP,21) -/* ADP_End - * ------- - * Summary: Sent by the host debugger to tell angel this debugging session - * is is finished - * Arguments: - * Send: () - * Return: (word status) - * status' is RDIError_NoError to indicate success, non-zero otherwise. - */ - -/****************************************************************** - * - * CI_TADP messages - * - */ - -#define ADP_TADPUnrecognised ADPREASON(CI_TADP,0) -/* This message is unusual in that it is normally sent in reply to - * another message which is not understood. This is an exception - * to the normal protocol which says that a reply must have the - * same base reason code as the original. There is a single reply - * parameter which is the reason code which was not understood. - * - * As well as being a reply this message can also be sent and will - * return as if this message were unrecognised! - * - * Parameters: - * none - * - * Reply: - * word reason code which was not recognised - */ - -/*-------------------------------------------------------------------------*/ - -#define ADP_Stopped ADPREASON(CI_TADP,1) -/* ADP_Stopped - * ----------- - * Summary: This message is sent to the host when the application stops, - * either naturally or due to an exception. - * - * Parameters: - * word reason subcode - * other arguments as reason subcode determines. - * Unless stated otherwise (below) there will be none. - * - * Reply: - * word status unless reason subcode says otherwise - * - * This message is sent to the host when execution has stopped. This - * can be when the end of the application has been reached, or as the - * result of an exception. It can also be the return from an ADP_Step - * process, when the requested number of instructions have been - * executed., or a breakpoint or watchpoint has been hit etc. - */ - -/* The first set of Stopped subreason codes are for the ARM hardware - * vectors. These events will be raised if the - * ADP_Control_Vector_Catch allows, or if the target application has - * not provided its own handlers. - */ -#define ADP_Stopped_BranchThroughZero ADPSUBREASON(CI_TADP,0) -#define ADP_Stopped_UndefinedInstr ADPSUBREASON(CI_TADP,1) -#define ADP_Stopped_SoftwareInterrupt ADPSUBREASON(CI_TADP,2) -#define ADP_Stopped_PrefetchAbort ADPSUBREASON(CI_TADP,3) -#define ADP_Stopped_DataAbort ADPSUBREASON(CI_TADP,4) -#define ADP_Stopped_AddressException ADPSUBREASON(CI_TADP,5) -#define ADP_Stopped_IRQ ADPSUBREASON(CI_TADP,6) -#define ADP_Stopped_FIQ ADPSUBREASON(CI_TADP,7) - -/* We leave the rest of what would be the bits in the VectorCatch - * bitmask free for future expansion. - */ - -/* The following are software reasons for execution stopping: */ -#define ADP_Stopped_BreakPoint ADPSUBREASON(CI_TADP,32) -/* Breakpoint was reached - * extra send parameter: word handle - indicates which breakpoint - */ - -#define ADP_Stopped_WatchPoint ADPSUBREASON(CI_TADP,33) -/* Watchpoint was triggered - * extra send parameter: word handle - indicates which watchpoint - */ - -#define ADP_Stopped_StepComplete ADPSUBREASON(CI_TADP,34) -/* End of ADP_Step request */ - -#define ADP_Stopped_RunTimeErrorUnknown ADPSUBREASON(CI_TADP,35) -/* - * non-specific fatal runtime support error - */ - -#define ADP_Stopped_InternalError ADPSUBREASON(CI_TADP,36) -/* extra send parameter: word error - indicates the nature of the error - * - * An Angel internal error has happened. The error number should be - * displayed for the user to report to his software supplier. Once - * this error has been received the internal state of Angel can no longer - * be trusted. - */ - -#define ADP_Stopped_UserInterruption ADPSUBREASON(CI_TADP,37) -/* Host requested interruption */ - -#define ADP_Stopped_ApplicationExit ADPSUBREASON(CI_TADP,38) -/* extra send parameter: word exitcode - * This indicates that the application has exited via exit(), an exitcode - * of zero indiactes successful termination. - */ - -#define ADP_Stopped_StackOverflow ADPSUBREASON(CI_TADP, 39) -/* - * Software stack overflow has occurred - */ - -#define ADP_Stopped_DivisionByZero ADPSUBREASON(CI_TADP, 40) -/* - * Division by zero has occurred - */ - -#define ADP_Stopped_OSSpecific ADPSUBREASON(CI_TADP, 41) -/* - * The OS has requested that execution stops. The OS will know - * why this has happened. - */ - - - -/****************************************************************** - * - * CI_TTDCC messages (Target-initiated debug comms channel) - * - */ - -#define ADP_TDCC_ToHost ADPREASON(CI_TTDCC,0) -/* ADP_TDCC_ToHost - * ------------------ - * Summary: Send Data down Comms Channel in ToHost direction. - * - * Arguments: - * Send: (word nbytes, words data) - * Return: (word status) - * - * 'nbytes' is number of BYTES to be transferred from the target to the - * host via the Debug Comms channel. - * 'data' is (nbytes/sizeof(word)) WORDS of data to be transferred from - * the target to the host via the Debug Comms channel. - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * - * NOTE: Equivalent to RDP_CCToHost and RDP_CCToHostReply (just set the - * direction bit). - * NOTE II: Current implementations only support single word transfers - * (nbytes = 4). - */ - - -#define ADP_TDCC_FromHost ADPREASON(CI_TTDCC,1) -/* ADP_TDCC_FromHost - * -------------------- - * Summary: Send Data down Comms Channel in FromHost direction. - * - * Arguments: - * Send: () - * Return: (word status, word nbytes, words data) - * - * 'status' is RDIError_NoError to indicate success, non-zero otherwise. - * 'nbytes' is number of BYTES to be transferred from the host to the - * target via the Debug Comms channel, or zero if the host has no data - * to transfer. - * 'data' is (nbytes/sizeof(word)) WORDS of transferred data. - * - * NOTE: Equivalent to RDP_CCFromHost and RDP_CCFromHostReply (just set the - * direction bit). - * NOTE II: Current implementations only support single word transfers - * (nbytes = 4). - */ - - -/******************************************************************* - * - * Error Codes - * - */ - -#define RDIError_NoError 0 - -#define RDIError_Reset 1 -#define RDIError_UndefinedInstruction 2 -#define RDIError_SoftwareInterrupt 3 -#define RDIError_PrefetchAbort 4 -#define RDIError_DataAbort 5 -#define RDIError_AddressException 6 -#define RDIError_IRQ 7 -#define RDIError_FIQ 8 -#define RDIError_Error 9 -#define RDIError_BranchThrough0 10 - -#define RDIError_NotInitialised 128 -#define RDIError_UnableToInitialise 129 -#define RDIError_WrongByteSex 130 -#define RDIError_UnableToTerminate 131 -#define RDIError_BadInstruction 132 -#define RDIError_IllegalInstruction 133 -#define RDIError_BadCPUStateSetting 134 -#define RDIError_UnknownCoPro 135 -#define RDIError_UnknownCoProState 136 -#define RDIError_BadCoProState 137 -#define RDIError_BadPointType 138 -#define RDIError_UnimplementedType 139 -#define RDIError_BadPointSize 140 -#define RDIError_UnimplementedSize 141 -#define RDIError_NoMorePoints 142 -#define RDIError_BreakpointReached 143 -#define RDIError_WatchpointAccessed 144 -#define RDIError_NoSuchPoint 145 -#define RDIError_ProgramFinishedInStep 146 -#define RDIError_UserInterrupt 147 -#define RDIError_CantSetPoint 148 -#define RDIError_IncompatibleRDILevels 149 - -#define RDIError_CantLoadConfig 150 -#define RDIError_BadConfigData 151 -#define RDIError_NoSuchConfig 152 -#define RDIError_BufferFull 153 -#define RDIError_OutOfStore 154 -#define RDIError_NotInDownload 155 -#define RDIError_PointInUse 156 -#define RDIError_BadImageFormat 157 -#define RDIError_TargetRunning 158 -#define RDIError_DeviceWouldNotOpen 159 -#define RDIError_NoSuchHandle 160 -#define RDIError_ConflictingPoint 161 - -#define RDIError_LittleEndian 240 -#define RDIError_BigEndian 241 -#define RDIError_SoftInitialiseError 242 - -#define RDIError_InsufficientPrivilege 253 -#define RDIError_UnimplementedMessage 254 -#define RDIError_UndefinedMessage 255 - - -#endif - -/* EOF adp_h */ |