/* * Carsten Langgaard, carstenl@mips.com * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved. * * ######################################################################## * * This program is free software; you can distribute it and/or modify it * under the terms of the GNU General Public License (Version 2) as * published by the Free Software Foundation. * * This program is distributed in the hope 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, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. * * ######################################################################## * * This is the interface to the remote debugger stub. * */ #include #include #include #include #include #include int putDebugChar(char c); char getDebugChar(void); /////////////////////// andros values /////////////////////////////////////////////////////// #define SERIAL_REG(offset) (*((volatile unsigned int*)(HPSR_BASE_ADDR|offset))) // Register set base address #define HPSR_BASE_ADDR 0xbfe00000UL // Transmit / Receive Data #define HPSR_DATA_OFFSET 0x00020010UL // Transmit control / status #define HPSR_TX_STAT_OFFSET 0x0002000CUL // Receive status #define HPSR_RX_STAT_OFFSET 0x00020008UL #define HPSR_TX_STAT_READY 0x8UL #define HPSR_RX_DATA_AVAIL 0x4UL /////////////////////// harmony values /////////////////////////////////////////////////////// // Transmit / Receive Data #define H_HPSR_DATA_TX *((volatile unsigned int*)0xbff65014) // Transmit / Receive Data #define H_HPSR_DATA_RX *((volatile unsigned int*)0xbff65018) // Status #define H_HPSR_STAT *((volatile unsigned int*)0xbff65004) // harmony serial status bits #define H_SER_STAT_TX_EMPTY 0x04 #define H_SER_STAT_RX_EMPTY 0x10 int putDebugChar(char c) { if (GetAsicId() == HarmonyAsic) { while (!( ( (H_HPSR_STAT) & H_SER_STAT_TX_EMPTY) != 0)); H_HPSR_DATA_TX = (unsigned int) c; } else if (GetAsicId() == AndrosAsic) { while (((SERIAL_REG(HPSR_TX_STAT_OFFSET) & HPSR_TX_STAT_READY) == 0)) ; SERIAL_REG(HPSR_DATA_OFFSET) = (unsigned int) c; } return 1; } char getDebugChar(void) { if (GetAsicId() == HarmonyAsic) { while (!(((H_HPSR_STAT) & H_SER_STAT_RX_EMPTY) == 0)); return H_HPSR_DATA_RX; } else if (GetAsicId() == AndrosAsic) { while ((SERIAL_REG(HPSR_RX_STAT_OFFSET) & HPSR_RX_DATA_AVAIL) == 0) ; return (SERIAL_REG(HPSR_DATA_OFFSET)); } }