gdb_hook.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Carsten Langgaard, carstenl@mips.com
  3.  * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved.
  4.  *
  5.  * ########################################################################
  6.  *
  7.  *  This program is free software; you can distribute it and/or modify it
  8.  *  under the terms of the GNU General Public License (Version 2) as
  9.  *  published by the Free Software Foundation.
  10.  *
  11.  *  This program is distributed in the hope it will be useful, but WITHOUT
  12.  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13.  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14.  *  for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License along
  17.  *  with this program; if not, write to the Free Software Foundation, Inc.,
  18.  *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
  19.  *
  20.  * ########################################################################
  21.  *
  22.  * This is the interface to the remote debugger stub.
  23.  *
  24.  */
  25. #include <linux/serialP.h>
  26. #include <linux/serial_reg.h>
  27. #include <asm/serial.h>
  28. #include <asm/io.h>
  29. #include <asm/hp-lj/asic.h>
  30. int putDebugChar(char c);
  31. char getDebugChar(void);
  32. ///////////////////////  andros values ///////////////////////////////////////////////////////
  33. #define SERIAL_REG(offset) (*((volatile unsigned int*)(HPSR_BASE_ADDR|offset)))
  34. // Register set base address
  35. #define HPSR_BASE_ADDR   0xbfe00000UL
  36. // Transmit / Receive Data
  37. #define HPSR_DATA_OFFSET    0x00020010UL
  38. // Transmit control / status
  39. #define HPSR_TX_STAT_OFFSET 0x0002000CUL
  40. // Receive status
  41. #define HPSR_RX_STAT_OFFSET 0x00020008UL
  42. #define HPSR_TX_STAT_READY  0x8UL
  43. #define HPSR_RX_DATA_AVAIL  0x4UL
  44. ///////////////////////  harmony values ///////////////////////////////////////////////////////
  45. // Transmit / Receive Data
  46. #define H_HPSR_DATA_TX       *((volatile unsigned int*)0xbff65014)
  47. // Transmit / Receive Data
  48. #define H_HPSR_DATA_RX       *((volatile unsigned int*)0xbff65018)
  49. // Status
  50. #define H_HPSR_STAT          *((volatile unsigned int*)0xbff65004)
  51. // harmony serial status bits
  52. #define H_SER_STAT_TX_EMPTY       0x04
  53. #define H_SER_STAT_RX_EMPTY       0x10
  54. int putDebugChar(char c)
  55. {
  56. if (GetAsicId() == HarmonyAsic) {
  57. while (!( ( (H_HPSR_STAT) & H_SER_STAT_TX_EMPTY) != 0));
  58. H_HPSR_DATA_TX = (unsigned int) c;
  59. } else if (GetAsicId() == AndrosAsic) {
  60.          while (((SERIAL_REG(HPSR_TX_STAT_OFFSET) & HPSR_TX_STAT_READY) == 0))
  61.               ;
  62.          SERIAL_REG(HPSR_DATA_OFFSET) = (unsigned int) c;
  63.         } 
  64. return 1;
  65. }
  66. char getDebugChar(void)
  67. {
  68. if (GetAsicId() == HarmonyAsic) {
  69. while (!(((H_HPSR_STAT) & H_SER_STAT_RX_EMPTY) == 0));
  70.         return H_HPSR_DATA_RX;
  71.         
  72. } else if (GetAsicId() == AndrosAsic) {
  73.          while ((SERIAL_REG(HPSR_RX_STAT_OFFSET) & HPSR_RX_DATA_AVAIL) == 0)
  74.                ;
  75.          return (SERIAL_REG(HPSR_DATA_OFFSET));
  76. }
  77. }