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

📄 sysdefs.h

📁 ADAM2 sources (modified by Oleg)
💻 H
字号:
/*-----------------------------------------------------------------------------*/
/*                                                                             */
/*   Copyright (C) 1996-2003 by Texas Instruments, Inc.  All rights reserved.  */
/*   Copyright (C) 2001-2003 Telogy Networks.	    						   */
/*                                                                             */
/*-----------------------------------------------------------------------------*/

/************************************************************************
 *
 *  sysdefs.h
 *
 *  System definitions
 *
 * ######################################################################
 *
 * Copyright (C) 1999 MIPS Technologies, Inc. All rights reserved.
 *
 * Unpublished rights reserved under the Copyright Laws of the United
 * States of America.
 *
 * This document contains information that is confidential and proprietary
 * to MIPS Technologies, Inc. and may be disclosed only to those employees
 * of MIPS Technologies, Inc. with a need to know, or as otherwise
 * permitted in writing by MIPS Technologies, Inc. or a
 * contractually-authorized third party. Any copying, modifying, use or
 * disclosure of this information (in whole or in part) which is not
 * expressly permitted in writing by MIPS Technologies, Inc. or a
 * contractually-authorized third party is strictly prohibited. At a
 * minimum, this information is protected under trade secret and unfair
 * competition laws and the expression of the information contained herein
 * is protected under federal copyright laws. Violations thereof may
 * result in criminal penalties and fines.
 *
 * MIPS Technologies, Inc. or any contractually-authorized third party
 * reserves the right to change the information contained in this document
 * to improve function, design or otherwise. MIPS Technologies, Inc. does
 * not assume any liability arising out of the application or use of this
 * information. Any license under patent rights or any other intellectual
 * property rights owned by MIPS Technologies or third parties shall be
 * conveyed by MIPS Technologies, Inc. or any contractually-authorized
 * third party in a separate license agreement fully executed by the
 * parties.
 *
 * The information contained in this document constitutes "Commercial
 * Computer Software" or "Commercial Computer Software Documentation," as
 * described in FAR 12.212 for civilian agencies, and DFARS 227.7202 for
 * military agencies. This information may only be disclosed to the U.S.
 * Government, or to U.S. Government users, with prior written consent from
 * MIPS Technologies, Inc. or a contractually-authorized third party. Such
 * disclosure to the U.S. Government, or to U.S. Government users, shall
 * be subject to license terms and conditions at least as restrictive and
 * protective of the confidentiality of this information as the terms and
 * conditions used by MIPS Technologies, Inc. in its license agreements
 * covering this information.
 *
 ************************************************************************/

#ifndef SYSDEFS_H
#define SYSDEFS_H

/************************************************************************
 *  Include files
 ************************************************************************/

/************************************************************************
 *  Definitions
*************************************************************************/

#ifdef _ASSEMBLER_
/******** ASSEMBLER SPECIFIC DEFINITIONS ********/
#define SWAPEND32( src, tmp0, tmp1 )\
		and	tmp0, src, 0xff;\
		srl	src,  8;\
		sll	tmp0, 8;\
		and	tmp1, src, 0xff;\
		or	tmp0, tmp1;\
		srl	src,  8;\
		sll	tmp0, 8;\
		and	tmp1, src, 0xff;\
		or	tmp0, tmp1;\
		srl	src,  8;\
		sll	tmp0, 8;\
		or	src,  tmp0

#define KSEG0A(reg)\
	  	and reg, ~KSEG_MSK;\
	  	or  reg, KSEG0BASE;

#define KSEG1A(reg)\
	  	and reg, ~KSEG_MSK;\
	  	or  reg, KSEG1BASE;

#define KUSEGA(reg)\
		and reg, ~KSEG_MSK

#define LEAF(name)\
  		.text;\
  		.globl	name;\
  		.ent	name;\
name:


#define SLEAF(name)\
  		.text;\
  		.ent	name;\
name:


#define END(name)\
  		.size name,.-name;\
  		.end	name

#define EXTERN(name)

#else

/******** C specific definitions ********/
#define SWAPEND32(d)    ((BYTE(d,0) << 24) |\
		         (BYTE(d,1) << 16) |\
		         (BYTE(d,2) << 8)  |\
		         (BYTE(d,3) << 0))

typedef signed char    	bit8;
typedef signed short   	bit16;
typedef signed int     	bit32;

typedef unsigned char  	bit8u;
typedef unsigned short 	bit16u;
typedef unsigned int   	bit32u;

typedef signed char     INT8;
typedef signed short   	INT16;
typedef signed int 		INT32;

typedef unsigned char  	UINT8;
typedef unsigned short 	UINT16;
typedef unsigned int   	UINT32;

typedef unsigned int   	size_t;

typedef unsigned char  	BOOL;
typedef unsigned char  	bool;

typedef unsigned char	byte;
typedef unsigned short	word;
typedef unsigned int	longword;
typedef unsigned char	octet;

typedef signed char    s1;
typedef signed short   s2;
typedef signed int     s4;

typedef unsigned char  u1;
typedef unsigned short u2;
typedef unsigned int   u4;

#endif /* #ifdef _ASSEMBLER_ */

/******** DEFINITIONS FOR BOTH ASSEMBLER AND C ********/
#ifndef FALSE
#define FALSE 	(1==2)
#endif

#ifndef TRUE
#define TRUE 	(1==1)
#endif

#ifndef NULL
#define NULL	((void *)0)
#endif

#ifndef EOF
#define EOF		(-1)
#endif		

#define MIN(x,y)	 	((x) < (y) ? (x) : (y))
#define MAX(x,y)     	((x) > (y) ? (x) : (y))
 
#define INCWRAP( ptr, size )      (ptr) = ((ptr)+1) % (size)
#define DECWRAP( ptr, size )      (ptr) = (((ptr) == 0) ? ((size) - 1) : ((ptr) - 1))

#define MAXUINT(w)	(\
		((w) == sizeof(UINT8))  ? 0xFFU :\
		((w) == sizeof(UINT16)) ? 0xFFFFU :\
		((w) == sizeof(UINT32)) ? 0xFFFFFFFFU : 0\
		        )

#define MAXINT(w)	(\
		((w) == sizeof(INT8))  ? 0x7F :\
		((w) == sizeof(INT16)) ? 0x7FFF :\
		((w) == sizeof(INT32)) ? 0x7FFFFFFF : 0\
		        )

#define MSK(n)			  ((1 << (n)) - 1)


#define REG8( addr )		  (*(volatile UINT8 *) (addr))
#define REG16( addr )		  (*(volatile UINT16 *)(addr))
#define REG32( addr )		  (*(volatile UINT32 *)(addr))

#if defined(AR7DB) || defined(AR7RD) || defined(AR7WRD)
/*
 * Register Interface routines:
 * All register interfaces should use these.
 *
 * Macros supported for:
 * - mask   : Mask creation with bit fields,
 * - reg_r  :  register read, with bit manipulation,
 * - reg_w  :  register write, invalidation old contents,
 * - reg_rmw:  register read-modify-write, updating only a defined
 *            location of the register.
 *
 * {hi, lo} set defines the bit locations in a register.
 */

#define MASK(hi, lo) (((~(~0 << (hi))) & (~0 << (lo))) | (1 << (hi)))

#define REG32_R(addr, hi, lo) \
        			 ((*(volatile int *)(addr) & MASK((hi), (lo))) >> (lo))

#define REG32_W(addr, val) *(volatile int *)(addr) =  val

#define REG32_RMW(addr, hi, lo, val)\
        *(volatile int *)(addr) =    \
        ((*(volatile int *)(addr) & ~MASK((hi), (lo))) | ((val) << (lo)))
	
#endif /* AR7DB | AR7RD | AR7WRD */

/* Register field mapping */
#define REGFIELD(reg, rfld)	  (((reg) & rfld##_MSK) >> rfld##_SHF)

/* absolute register address, access 					*/
#define	REGA(addr)	(*((volatile UINT32 *) (addr)))

/* 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);
 */

/* relative register address, access: base address + offsett		*/
#define	REG(base,offs)	(*((volatile UINT32 *)((UINT32)(base) + offs##_##OFS) ))

/* 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))

/* 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 address, access: base address + offsett		*/
#define	REGP(base,phys)	(*((volatile UINT32 *)((UINT32)(base) + (phys)) ))

/* 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))


/* Endian related macros */

#define SWAP_BYTEADDR32( addr )	  ( ((addr) & ~0x3) | (3 - ((addr) & 0x3)) )
#define BYTE(d,n)		  (((d) >> ((n) << 3)) & 0xFF)

#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

#define REGW8LE(addr, data)       REG8(addr) = (data)
#define REGR8LE(addr, data)       (data)     = REG32(addr)


/* 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 GDB_PORT	PORT_TTY1

/* 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

#ifndef _ASSEMBLER_
extern unsigned int _CpuFrequency;
extern unsigned int _PbusFrequency;
#define GetTicks(secs)		(((_CpuFrequency * secs) + 1) / 2)
#define GetUSecs(ticks)		((((ticks * 2) - 1) * 1000000) / _CpuFrequency)
#define GetSecs(ticks)		((((ticks * 2) - 1)) / _CpuFrequency)

#define MEM_READ(addr)         	(*((volatile unsigned int *)(addr)))
#define MEM_WRITE(addr,val)    	((*((volatile unsigned int *)(addr)))=(val))

#define MEM_WRITE16(addr,val)  	((*((volatile unsigned short *)(addr)))=(val))
#define MEM_READ16(addr)       	(*((volatile unsigned short *)(addr)))

#define MEM_WRITE8(adr,val)  	((*((volatile char *)(addr)))=(val))

#endif

/************************************************************************
 *  Public variables
 ************************************************************************/

/************************************************************************
 *  Public functions
 ************************************************************************/

#endif /* #ifndef SYSDEFS_H */

⌨️ 快捷键说明

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