/************************************************************* * File: iceif.h * Purpose: Header file for SerialICE interface * Author: Phil Bunce (pjb@carmel.com) * Revision History: * 970310 Created from stuff extracted from iceif.c * 980707 Added readonly and map to OcmRec. * 980720 Added nobrkRemove. */ #ifndef _ICEIF_H_ #define _ICEIF_H_ #define NEW_KERNEL #define EJTAG /* enable ejtag support */ #define EJTAG_INIT 0 /* info=x argp=x -- Init the ejtag subsystem */ #define EJTAG_RUN 1 /* info=x argp=x -- Run the application */ #define EJTAG_CHECK 2 /* info=x argp=x -- Check the target status */ #define EJTAG_STOP 3 /* info=x argp=x -- Stop the target */ #define EJTAG_WRITE 4 /* info=v argp=x -- append v to instr buffer */ #define EJTAG_EXE 5 /* info=x argp=vp -- run instr buffer a0 to *vp */ #define EJTAG_WORD 6 /* info=v argp=x -- download v to memory */ #define EJTAG_SAP 7 /* info=x argp=vp -- Get SAP from target */ #define EJTAG_WAKEUP 8 /* info=x argp=x -- wakeup target */ #define EJTAG_DIAG 9 /* info=v argp=vp -- send diagfp to ejtag dll */ #define EJTAG_HWIB 10 /* info=x argp=vp -- set hw instr bpt */ #define EJTAG_HWDB 11 /* info=x argp=vp -- set hw data bpt */ #define EJTAG_CBPTS 12 /* info=x argp=x -- clear all hw bpts */ #define EJTAG_BLOCK 13 /* info=x argp=vp -- download block */ #define EJTAG_PORT 14 /* info=v argp=x -- set port */ #define EJTAG_SPEED 15 /* info=v argp=x -- set speed */ #define EJTAG_INFO 16 /* info=x argp=vp -- get info (vp=&TargetInfo) */ #define EJTAG_EXE64 17 /* info=x argp=vp -- EXE (vp=&U64) */ #define EJTAG_FILL 22 /* info=v argp=x -- fill via dma */ #define SDBBP_CODE 0x7000003f #define TINY_SDBBP_CODE 0xe801 #ifdef PMCC #include #endif #include "mips.h" #include "imon.h" #include "utypes.h" typedef int Bool; typedef enum {clean,dirty,stale} Dstate; extern Dstate dstate; extern BrkList brkList[MAX_BPT]; extern int icache_line_size; extern int iflush_needed; extern int icache_size; extern char *ice_device; extern int dcache_line_size; extern int dflush_needed; extern int dcache_size; extern int dbx_needs_pa; extern int need_initial_flush; extern int has_ilock; extern int has_nhwib; extern int has_nhwdb; extern int has_wb_dcache; extern int instr_buffer_cnt; extern int v1ibs; extern Ulong v1regmap; extern int nobrkRemove; extern int diaglevel; extern int undoc1; extern int ejtag_mode; extern int _cputype; extern int force_getsap; extern U64 current_r8,current_r9; extern int target_stopped; extern int lendian_target; extern int lendian_host; extern int slow_target; extern int send_ack_each_word; extern int no_gpr30; extern Ulong breakcode; extern int kernel_ibs; extern Ulong kernel_map; extern int resyncOk; extern int has_nhwib; extern int has_nhwdb; #define brkInstall(t) (* brkInstall_ptr)(t) #define ilockReq(a) (* ilockReq_ptr)(a) #define flush_target(m) (* flush_target_ptr)(m) #define brkRemove(a) (* brkRemove_ptr)(a) #define setFlushneeded(a,s) (* setFlushneeded_ptr)(a,s) extern vFunc *brkInstall_ptr; extern Func *ilockReq_ptr; extern Func *flush_target_ptr; extern Func *brkRemove_ptr; extern vFunc *setFlushneeded_ptr; #ifdef NOANSI void brkInstall_400x(); int ilockReq_400x(); int flush_target_400x(); int flush_target_400x_ejtag(); int brkRemove_400x(); void setFlushneeded_400x(); void setFlushneeded_ejtag(); void init_4101(void); void init_4102(void); void brkInstall_401x(); int ilockReq_401x(); int flush_target_401x(); int brkRemove_401x(); void setFlushneeded_401x(); void init_4011(void); #else int init_4001(void); int init_4003(void); void init_4101(void ); void init_4102(void ); int flush_target_400x(int mode); unsigned long readCache_400x(int set,int what,unsigned long addr); int cache_cmd_400x(int ac,char **av ); void brkInstall_400x(int type); int brkRemove_400x(unsigned long epc); void setupcacheline_400x(unsigned long addr); int ilockReq_400x(unsigned long addr); void setFlushneeded_400x(unsigned long addr,int size); void setFlushneeded_ejtag(unsigned long addr,int size); void setilockbpt_400x(unsigned long addr,unsigned long bptcode,int sz); void clrilockbpt_400x(unsigned long addr); int flush_target_400x_ejtag(int mode); void init_4011(void ); int flush_target_401x(int mode); unsigned long readCache_401x(int set,int what,unsigned long addr); int cache_cmd_401x(int ac,char **av ); void setupcacheline_401x(unsigned long addr); void wrwdtocache_401x(unsigned long addr,unsigned long val); int ilockReq_401x(unsigned long addr); void setFlushneeded_401x(unsigned long addr,int size); void brkInstall_401x(int type); void init_4020(void ); unsigned long readCache_402x(int set,int what,unsigned long addr); int brkRemove_401x(unsigned long epc); int flush_target_402x(int mode); int ilockReq_402x(unsigned long addr); void setFlushneeded_402x(unsigned long addr,int size); void brkInstall_402x(int type); int brkRemove_402x(unsigned long epc); void init_4300(void ); int main(void); int init(void); int dvrInit(void); int wakeup(void ); int resync(void ); int send_instr(unsigned long v); struct U64 readWord(void ); unsigned long * save_instr_buffer(void); void restore_instr_buffer(unsigned long *p); struct U64 readA0(void ); struct U64 read_target(int type,unsigned long addr,int sz); struct U64 readUgpr(int reg); int writeUgpr(int reg,struct U64 v); int writeGpri(int reg,unsigned long cv); int writeGpr(int reg,struct U64 v); void swap32n(unsigned char *p,int n); unsigned long read_unaligned_long(unsigned char *a); void flushInput(void ); int checkSAP(void ); int getSAP(void ); int hwibReq(unsigned long addr); int hwdbReq(unsigned long addr); void printBpts(void); int is_cacheable(unsigned long addr); int setbp_target(int n,int type,unsigned long addr,unsigned long addr2,unsigned long value); int clrbp_target(int n); int which_bpt(unsigned long addr,int type); int which_dbpt(int hwbptno); int is_bpt(unsigned long addr); void brkDelete(unsigned long type); int is_writeable_target(unsigned long adr); int send_buffer(void ); int write_target_byte(unsigned long addr,unsigned long v); int send_byte(unsigned long addr,unsigned char v); int set_bytes(unsigned long addr,unsigned char v,int n); int send_bhw(unsigned long addr,unsigned long v,int sz); int send_words(unsigned long addr,unsigned long *vp,int n); int is_bptReq(unsigned long addr,unsigned long v); int write_target(int type,unsigned long addr,struct U64 v,int sz); void freeOcmRec(struct OcmRec *p); struct OcmRec * mallocOcmRec(void ); struct OcmRec * addOcmRec(unsigned long addr,unsigned long size,unsigned long *func,int funclen); int deleteOcmRec(unsigned long addr); struct OcmRec * is_ocm(unsigned long addr); struct U64 run_ocm(struct OcmRec *ocm,int mode,unsigned long addr,int sz,unsigned long value); unsigned long domt1(unsigned long sadr,unsigned long eadr); int domt2(unsigned long sadr,unsigned long eadr); unsigned long domt3(unsigned long sadr,unsigned long eadr); int run_target(int mode,int flags,int count); int sync_cmd(int ac,char **av ); int tx_cmd(int ac,char **av ); int rx_cmd(int ac,char **av ); int tstate_cmd(int ac,char **av ); int do_verbose(char *name,char *value); int addicecmds(void); void iceInit(void); void PUT_BYTES(unsigned char *buf,int len); int GET_BYTE(unsigned char *buf,int timeout); void printDiag(int level,char *fmt,...); void diagCntrl(char *str); int writeGpr(int reg,struct U64 v); void do_lui(int dst,unsigned long v); void do_ori(int dst,int src,unsigned long v); void do_dsll(int dst,int src,int amt); void do_addiu(int dst,int src,unsigned long v); char * sprintRV(char *dst,struct U64 v); int EjtagControl(int op, unsigned long info,const void *argp); int EjtagDownload(unsigned long addr,int words); int sload_init(char *fname); #endif /* info about the serialice kernel */ typedef struct SaveArea { Ulong vers; /* header version 1=old 2=new */ Ulong hsize; /* header size */ Ulong map; /* regmap */ Ulong ibs; /* instr buffer size */ Ulong gwp; /* addr of getword routine */ Ulong *sap; /* base address of savearea */ Ulong le; /* target endian 0=be 1=le */ } SaveArea; extern SaveArea savearea; #endif