⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysdefs.h

📁 MIPS YAMON, a famous monitor inc. source, make file and PDF manuals.
💻 H
📖 第 1 页 / 共 2 页
字号:
 *  PHYSA    : Same as PHYS  but operates on register rather than constant. *  CACHED   : Alias for KSEG0 macro . *	       (Note that KSEG0 cache attribute is determined by K0 *	       field of Config register, but this is typically cached). *  UNCACHED : Alias for KSEG1 macro . */#ifdef _ASSEMBLER_#define KSEG0(addr)     (((addr) & ~KSEG_MSK)  | KSEG0BASE)#define KSEG1(addr)     (((addr) & ~KSEG_MSK)  | KSEG1BASE)#define KSSEG(addr)     (((addr) & ~KSEG_MSK)  | KSSEGBASE)#define KSEG3(addr)     (((addr) & ~KSEG_MSK)  | KSEG3BASE)#define KUSEG(addr)     (((addr) & ~KUSEG_MSK) | KUSEGBASE)#define PHYS(addr)      ( (addr) & ~KSEG_MSK)#define KSEG0A(reg) 	and reg, ~KSEG_MSK; or reg, KSEG0BASE#define KSEG1A(reg) 	and reg, ~KSEG_MSK; or reg, KSEG1BASE#define PHYSA(reg)	and reg, ~KSEG_MSK#else#define KSEG0(addr)     (((UINT32)(addr) & ~KSEG_MSK)  | KSEG0BASE)#define KSEG1(addr)     (((UINT32)(addr) & ~KSEG_MSK)  | KSEG1BASE)#define KSSEG(addr)	(((UINT32)(addr) & ~KSEG_MSK)  | KSSEGBASE)#define KSEG3(addr)	(((UINT32)(addr) & ~KSEG_MSK)  | KSEG3BASE)#define KUSEG(addr)	(((UINT32)(addr) & ~KUSEG_MSK) | KUSEGBASE)#define PHYS(addr) 	((UINT32)(addr)  & ~KSEG_MSK)#endif#define CACHED(addr)	KSEG0(addr)#define UNCACHED(addr)	KSEG1(addr)#ifdef _ASSEMBLER_/* Macroes to access variables at constant addresses  * Compensates for signed 16 bit displacement * Typical use:	li	a0, HIKSEG1(ATLAS_ASCIIWORD) *		sw	v1, LO_OFFS(ATLAS_ASCIIWORD)(a0) */#define HIKSEG0(addr)	((KSEG0(addr) + 0x8000) & 0xffff0000)#define HIKSEG1(addr)	((KSEG1(addr) + 0x8000) & 0xffff0000)#define HI_PART(addr)	(((addr) + 0x8000) & 0xffff0000)#define LO_OFFS(addr)	((addr) & 0xffff)#endif/* Most/Least significant 32 bit from 64 bit double word */#define HI32(data64)		  ((UINT32)(data64 >> 32))#define LO32(data64)		  ((UINT32)(data64 & 0xFFFFFFFF))#define REG8( addr )		  (*(volatile UINT8 *) (addr))#define REG16( addr )		  (*(volatile UINT16 *)(addr))#define REG32( addr )		  (*(volatile UINT32 *)(addr))#define REG64( addr )		  (*(volatile UINT64 *)(addr))/* Register field mapping */#define REGFIELD(reg, rfld)	  (((reg) & rfld##_MSK) >> rfld##_SHF)/* absolute register address, access 					*/#define	REGA(addr)		  REG32(addr)/* physical register address, access: base address + offsett		*/#define	REGP(base,phys)	REG32( (UINT32)(base) + (phys) )/* relative register address, access: base address + offsett		*/#define REG(base,offs)  REG32( (UINT32)(base) + offs##_##OFS )/************************************** * Macroes not used by YAMON any more * (kept for backwards compatibility) *//* register read field							*/#define	REGARD(addr,fld)	((REGA(addr) & addr##_##fld##_##MSK) 	\			 >> addr##_##fld##_##SHF)/* register write numeric field value					*/#define	REGAWRI(addr,fld,intval) ((REGA(addr) & ~(addr##_##fld##_##MSK))\				 | ((intval) << addr##_##fld##_##SHF))/* register write enumerated field value				*/#define	REGAWRE(addr,fld,enumval) ((REGA(addr) & ~(addr##_##fld##_##MSK))\			| ((addr##_##fld##_##enumval) << addr##_##fld##_##SHF))/* Examples: *  *	exccode = REGARD(CPU_CAUSE,EXC); * *	REGA(SDR_CONTROL) = REGAWRI(OSG_CONTROL,TMO,17) *			 | REGAWRE(OSG_CONTROL,DTYPE,PC1); *//* register read field							*/#define	REGRD(base,offs,fld) ((REG(base,offs) & offs##_##fld##_##MSK) 	\			 >> offs##_##fld##_##SHF)/* register write numeric field value					*/#define	REGWRI(base,offs,fld,intval)((REG(base,offs)& ~(offs##_##fld##_##MSK))\                                 | (((intval) << offs##_##fld##_##SHF) & offs##_##fld##_##MSK))/* register write enumerated field value				*/#define	REGWRE(base,offs,fld,enumval)((REG(base,offs) & ~(offs##_##fld##_##MSK))\				| ((offs##_##fld##_##enumval) << offs##_##fld##_##SHF))/* physical register read field							*/#define	REGPRD(base,phys,fld) ((REGP(base,phys) & phys##_##fld##_##MSK) 	\			 >> phys##_##fld##_##SHF)/* physical register write numeric field value					*/#define	REGPWRI(base,phys,fld,intval)((REGP(base,phys)& ~(phys##_##fld##_##MSK))\				 | ((intval) << phys##_##fld##_##SHF))/* physical register write enumerated field value				*/#define	REGPWRE(base,phys,fld,enumval)((REGP(base,phys) & ~(phys##_##fld##_##MSK))\				| ((phys##_##fld##_##enumval) << phys##_##fld##_##SHF))/* * End of macroes not used by YAMON any more *********************************************//* Endian related macros */#define SWAP_BYTEADDR32( addr )   ( (addr) ^ 0x3 )#define SWAP_UINT16ADDR32( addr ) ( (addr) ^ 0x2 )#define BYTE(d,n)		  (((d) >> ((n) << 3)) & 0xFF)/* Set byte address to little endian format */#ifdef EL#define SWAP_BYTEADDR_EL(addr) 	  addr#else#define SWAP_BYTEADDR_EL(addr)    SWAP_BYTEADDR32( addr )#endif/* Set byte address to big endian format */#ifdef EB#define SWAP_BYTEADDR_EB(addr) 	  addr#else#define SWAP_BYTEADDR_EB(addr)    SWAP_BYTEADDR32( addr )#endif/* Set UINT16 address to little endian format */#ifdef EL#define SWAP_UINT16ADDR_EL(addr)  addr#else#define SWAP_UINT16ADDR_EL(addr)  SWAP_UINT16ADDR32( addr )#endif/* Set UINT16 address to big endian format */#ifdef EB#define SWAP_UINT16ADDR_EB(addr)  addr#else#define SWAP_UINT16ADDR_EB(addr)  SWAP_UINT16ADDR32( addr )#endif#ifdef EL#define REGW32LE(addr, data)      REG32(addr) = (data)#define REGR32LE(addr, data)      (data)      = REG32(addr)#else#define REGW32LE(addr, data)      REG32(addr) = SWAPEND32(data)#define REGR32LE(addr, data)      (data)      = REG32(addr), (data) = SWAPEND32(data)#endif/* Set of 'LE'-macros, convert by BE: */#ifdef EL#define CPU_TO_LE32( value ) (value)#define LE32_TO_CPU( value ) (value)#define CPU_TO_LE16( value ) (value)#define LE16_TO_CPU( value ) (value)#else#define CPU_TO_LE32( value ) ( (                ((UINT32)value)  << 24) |   \                               ((0x0000FF00UL & ((UINT32)value)) <<  8) |   \                               ((0x00FF0000UL & ((UINT32)value)) >>  8) |   \                               (                ((UINT32)value)  >> 24)   )#define LE32_TO_CPU( value ) CPU_TO_LE32( value )#define CPU_TO_LE16( value ) ( ((UINT16)(((UINT16)value)  << 8)) |   \                               ((UINT16)(((UINT16)value)  >> 8))   )#define LE16_TO_CPU( value ) CPU_TO_LE16( value )#endif/* Set of 'BE'-macros, convert by LE: */#ifdef EB#define CPU_TO_BE32( value ) (value)#define BE32_TO_CPU( value ) (value)#define CPU_TO_BE16( value ) (value)#define BE16_TO_CPU( value ) (value)#else#define CPU_TO_BE32( value ) ( (                ((UINT32)value)  << 24) |   \                               ((0x0000FF00UL & ((UINT32)value)) <<  8) |   \                               ((0x00FF0000UL & ((UINT32)value)) >>  8) |   \                               (                ((UINT32)value)  >> 24)   )#define BE32_TO_CPU( value ) CPU_TO_BE32( value )#define CPU_TO_BE16( value ) ( ((UINT16)(((UINT16)value)  << 8)) |   \                               ((UINT16)(((UINT16)value)  >> 8))   )#define BE16_TO_CPU( value ) CPU_TO_BE16( value )#endif/* Standard ports */#define PORT_TTY0	 0#define PORT_TTY1	 1#define PORT_NET	 2#define DEFAULT_PORT	 PORT_TTY0#define DEBUG_PORT	 PORT_TTY0#define DEFAULT_GDB_PORT PORT_TTY1/* Env. variable for default serial port used for load */#define DEFAULT_BOOTPORT_ENV   "tty0"/* Control characters */#define CTRL_A          ('A'-0x40)#define CTRL_B          ('B'-0x40)#define CTRL_C          ('C'-0x40)#define CTRL_D          ('D'-0x40)#define CTRL_E          ('E'-0x40)#define CTRL_F          ('F'-0x40)#define CTRL_H          ('H'-0x40)#define CTRL_K          ('K'-0x40)#define CTRL_N          ('N'-0x40)#define CTRL_P          ('P'-0x40)#define CTRL_U          ('U'-0x40)#define DEL             0x7F#define TAB             0x09#define CR              0x0D#define LF              0x0A#define ESC             0x1B#define SP              0x20#define CSI             0x9B#define EOF_SREC        -2#define UART_ERROR      -1/* DEF2STR(x) converts #define symbol to string */#define DEF2STR1(x) #x#define DEF2STR(x)  DEF2STR1(x)#endif /* #ifndef SYSDEFS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -