blob: d278acd303a11c1760de2a1a774ce3d928ee5970 [file] [log] [blame]
/* Target dependent code for ARC processor family, for GDB, the GNU debugger.
Copyright 2005, 2008, 2009 Free Software Foundation, Inc.
Contributed by Codito Technologies Pvt. Ltd. (www.codito.com)
Authors:
Sameer Dhavale <sameer.dhavale@codito.com>
Soam Vasani <soam.vasani@codito.com>
Richard Stuckey <richard.stuckey@arc.com>
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/******************************************************************************/
/* */
/* Outline: */
/* This header file defines the JTAG interface to an ARC processor. */
/* */
/* Operations are provided for: */
/* 1) controlling the interface */
/* 2) reading/writing the core registers of the processor */
/* 3) reading/writing the auxiliary registers of the processor */
/* 4) reading/writing single words in the target memory */
/* 5) reading/writing blocks in the target memory */
/* */
/* The addresses specified for the memory word read/write operations must */
/* be word-aligned. Those specified for the memory block read/write */
/* operations may have any alignment; these operations may transfer an */
/* arbitrary number of bytes. */
/* */
/* Usage: */
/* The module exports a global variable arc_jtag_ops which holds pointers */
/* to the functions for the operations, as well as some state information.*/
/* This variable is initialized by the module's initialization function */
/* which must be called before any use is made of the module (N.B. the */
/* call to this function is generated by the gdb build mechanism, so this */
/* function should not be explicitly called). */
/* */
/* The variable arc_jtag_ops.retry_count controls how many repeated */
/* attempts are made if a read/write operation fail; this variable is */
/* initially set to 50. */
/* */
/* Debugging Facilities: */
/* If the variable arc_jtag_ops.state_machine_debug is set to TRUE then */
/* trace information will be output. */
/* */
/* Host/Target Byte Order: */
/* The register contents returned by the read/write aux/core register */
/* functions, or supplied to them, are in little-endian byte order. */
/* */
/* The memory contents returned by the read/write word/chunk/pattern */
/* functions, or supplied to them, are in host byte order; the functions */
/* perform whatever byte-swapping is required by the endiannness of the */
/* target. */
/* */
/******************************************************************************/
#ifndef ARC_JTAG_OPS
#define ARC_JTAG_OPS
/* ARC header files */
#include "arc-support.h"
#define ARC_TARGET_NAME "arcjtag"
typedef enum
{
JTAG_SUCCESS,
JTAG_READ_FAILURE,
JTAG_WRITE_FAILURE
} JTAG_OperationStatus;
typedef enum
{
JTAG_OPENED,
JTAG_CLOSED
} JTAG_Status;
typedef struct
{
JTAG_Status status;
unsigned int retry_count;
Boolean state_machine_debug;
Boolean (*open) (ARC_RegisterNumber mem_subsys);
void (*close) (void);
void (*reset) (void);
void (*reset_board) (void);
void (*check_open) (void);
/* These operations return the number of bytes read/written. */
unsigned int (*memory_read_word) (ARC_Address address, ARC_Word *data); /* single word. */
unsigned int (*memory_write_word) (ARC_Address address, ARC_Word data); /* single word. */
unsigned int (*memory_read_chunk) (ARC_Address address, ARC_Byte *data, unsigned int words); /* block. */
unsigned int (*memory_write_chunk) (ARC_Address address, ARC_Byte *data, unsigned int words); /* block. */
unsigned int (*memory_write_pattern) (ARC_Address address, ARC_Word pattern, unsigned int words); /* block. */
JTAG_OperationStatus (*read_aux_reg) (ARC_RegisterNumber reg, ARC_RegisterContents *contents);
JTAG_OperationStatus (*write_aux_reg) (ARC_RegisterNumber reg, ARC_RegisterContents contents);
JTAG_OperationStatus (*read_core_reg) (ARC_RegisterNumber reg, ARC_RegisterContents *contents);
JTAG_OperationStatus (*write_core_reg) (ARC_RegisterNumber reg, ARC_RegisterContents contents);
} JTAG_Operations;
extern JTAG_Operations arc_jtag_ops;
#endif /* ARC_JTAG_OPS */
/******************************************************************************/