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

📄 hppa.h

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 H
📖 第 1 页 / 共 2 页
字号:
/* *  Description: *		 * Definitions for HP PA Risc * ref: PA RISC 1.1 Architecture and Instruction Set Reference Manual *	 *  COPYRIGHT (c) 1994 by Division Incorporated * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * * Note: *      This file is included by both C and assembler code ( -DASM ) * *  $Id: hppa.h,v 1.4.2.1 2003/09/04 18:47:25 joel Exp $ */#ifndef _INCLUDE_HPPA_H#define _INCLUDE_HPPA_H#if defined(__cplusplus)extern "C" {#endif/* *  This section contains the information required to build *  RTEMS for a particular member of the Hewlett Packard *  PA-RISC family.  It does this by setting variables to *  indicate which implementation dependent features are *  present in a particular member of the family. *//* *  Hack to allow multlib effort to continue -- known to build. */#define CPU_MODEL_NAME  "hppa 7xxx"#if 0#if defined(rtems_multilib)/* *  Figure out all CPU Model Feature Flags based upon compiler  *  predefines.  */#define CPU_MODEL_NAME  "rtems_multilib"#elif defined(hppa7100)#define CPU_MODEL_NAME  "hppa 7100"#elif defined(hppa7200)#define CPU_MODEL_NAME  "hppa 7200"#else#error "Unsupported CPU Model"#endif#endif          /* *  Define the name of the CPU family. */#if !defined(CPU_NAME)#define CPU_NAME "HP PA-RISC 1.1"#endif/* * Processor Status Word (PSW) Masks */#define HPPA_PSW_Y      0x80000000    /* Data Debug Trap Disable */#define HPPA_PSW_Z      0x40000000    /* Instruction Debug Trap Disable */#define HPPA_PSW_r2     0x20000000    /* reserved */#define HPPA_PSW_r3     0x10000000    /* reserved */#define HPPA_PSW_r4     0x08000000    /* reserved */#define HPPA_PSW_E      0x04000000    /* Little Endian on Memory References */#define HPPA_PSW_S      0x02000000    /* Secure Interval Timer */#define HPPA_PSW_T      0x01000000    /* Taken Branch Trap Enable */#define HPPA_PSW_H      0x00800000    /* Higher-Privilege Transfer Trap Enable*/#define HPPA_PSW_L      0x00400000    /* Lower-Privilege Transfer Trap Enable */#define HPPA_PSW_N      0x00200000    /* PC Queue Front Instruction Nullified */#define HPPA_PSW_X      0x00100000    /* Data Memory Break Disable */#define HPPA_PSW_B      0x00080000    /* Taken Branch in Previous Cycle */#define HPPA_PSW_C      0x00040000    /* Code Address Translation Enable */#define HPPA_PSW_V      0x00020000    /* Divide Step Correction */#define HPPA_PSW_M      0x00010000    /* High-Priority Machine Check Disable */#define HPPA_PSW_CB     0x0000ff00    /* Carry/Borrow Bits */#define HPPA_PSW_r24    0x00000080    /* reserved */#define HPPA_PSW_G      0x00000040    /* Debug trap Enable */#define HPPA_PSW_F      0x00000020    /* Performance monitor interrupt unmask */#define HPPA_PSW_R      0x00000010    /* Recovery Counter Enable */#define HPPA_PSW_Q      0x00000008    /* Interruption State Collection Enable */#define HPPA_PSW_P      0x00000004    /* Protection ID Validation Enable */#define HPPA_PSW_D      0x00000002    /* Data Address Translation Enable */#define HPPA_PSW_I      0x00000001    /* External, Power Failure, */                                      /*   Low-Priority Machine Check */                                      /*   Interruption Enable *//* * HPPA traps and interrupts * basic layout.  Note numbers do not denote priority * *      0-31    basic traps and interrupts defined by HPPA architecture *      0-31    32 external interrupts *     32-...   bsp defined */#define HPPA_TRAP_NON_EXISTENT                     0/* group 1 */#define HPPA_TRAP_HIGH_PRIORITY_MACHINE_CHECK      1/* group 2 */#define HPPA_TRAP_POWER_FAIL                       2#define HPPA_TRAP_RECOVERY_COUNTER                 3#define HPPA_TRAP_EXTERNAL_INTERRUPT               4#define HPPA_TRAP_LOW_PRIORITY_MACHINE_CHECK       5#define HPPA_TRAP_PERFORMANCE_MONITOR             29/* group 3 */#define HPPA_TRAP_INSTRUCTION_TLB_MISS             6#define HPPA_TRAP_INSTRUCTION_MEMORY_PROTECTION    7#define HPPA_TRAP_INSTRUCTION_DEBUG               30#define HPPA_TRAP_ILLEGAL_INSTRUCTION              8#define HPPA_TRAP_BREAK_INSTRUCTION                9#define HPPA_TRAP_PRIVILEGED_OPERATION            10#define HPPA_TRAP_PRIVILEGED_REGISTER             11#define HPPA_TRAP_OVERFLOW                        12#define HPPA_TRAP_CONDITIONAL                     13#define HPPA_TRAP_ASSIST_EXCEPTION                14#define HPPA_TRAP_DATA_TLB_MISS                   15#define HPPA_TRAP_NON_ACCESS_INSTRUCTION_TLB_MISS 16#define HPPA_TRAP_NON_ACCESS_DATA_TLB_MISS        17#define HPPA_TRAP_DATA_MEMORY_ACCESS_RIGHTS       26#define HPPA_TRAP_DATA_MEMORY_PROTECTION_ID       27#define HPPA_TRAP_UNALIGNED_DATA_REFERENCE        28#define HPPA_TRAP_DATA_MEMORY_PROTECTION          18#define HPPA_TRAP_DATA_MEMORY_BREAK               19#define HPPA_TRAP_TLB_DIRTY_BIT                   20#define HPPA_TRAP_PAGE_REFERENCE                  21#define HPPA_TRAP_DATA_DEBUG                      31#define HPPA_TRAP_ASSIST_EMULATION                22/* group 4 */#define HPPA_TRAP_HIGHER_PRIVILEGE_TRANSFER       23#define HPPA_TRAP_LOWER_PRIVILEGE_TRANSFER        24#define HPPA_TRAP_TAKEN_BRANCH                    25#define HPPA_INTERNAL_TRAPS                       32/* External Interrupts via interrupt 4 */#define HPPA_INTERRUPT_EXTERNAL_0                  0#define HPPA_INTERRUPT_EXTERNAL_1                  1#define HPPA_INTERRUPT_EXTERNAL_2                  2#define HPPA_INTERRUPT_EXTERNAL_3                  3#define HPPA_INTERRUPT_EXTERNAL_4                  4#define HPPA_INTERRUPT_EXTERNAL_5                  5#define HPPA_INTERRUPT_EXTERNAL_6                  6#define HPPA_INTERRUPT_EXTERNAL_7                  7#define HPPA_INTERRUPT_EXTERNAL_8                  8#define HPPA_INTERRUPT_EXTERNAL_9                  9#define HPPA_INTERRUPT_EXTERNAL_10                10#define HPPA_INTERRUPT_EXTERNAL_11                11#define HPPA_INTERRUPT_EXTERNAL_12                12#define HPPA_INTERRUPT_EXTERNAL_13                13#define HPPA_INTERRUPT_EXTERNAL_14                14#define HPPA_INTERRUPT_EXTERNAL_15                15#define HPPA_INTERRUPT_EXTERNAL_16                16#define HPPA_INTERRUPT_EXTERNAL_17                17#define HPPA_INTERRUPT_EXTERNAL_18                18#define HPPA_INTERRUPT_EXTERNAL_19                19#define HPPA_INTERRUPT_EXTERNAL_20                20#define HPPA_INTERRUPT_EXTERNAL_21                21#define HPPA_INTERRUPT_EXTERNAL_22                22#define HPPA_INTERRUPT_EXTERNAL_23                23#define HPPA_INTERRUPT_EXTERNAL_24                24#define HPPA_INTERRUPT_EXTERNAL_25                25#define HPPA_INTERRUPT_EXTERNAL_26                26#define HPPA_INTERRUPT_EXTERNAL_27                27#define HPPA_INTERRUPT_EXTERNAL_28                28#define HPPA_INTERRUPT_EXTERNAL_29                29#define HPPA_INTERRUPT_EXTERNAL_30                30#define HPPA_INTERRUPT_EXTERNAL_31                31#define HPPA_INTERRUPT_EXTERNAL_INTERVAL_TIMER    HPPA_INTERRUPT_EXTERNAL_0#define HPPA_EXTERNAL_INTERRUPTS                  32/* BSP defined interrupts begin here */#define HPPA_INTERRUPT_MAX  32/* * Cache characteristics */ #define HPPA_CACHELINE_SIZE     32#define HPPA_CACHELINE_MASK     (HPPA_CACHELINE_SIZE - 1)/* * page size characteristics */#define HPPA_PAGE_SIZE          4096#define HPPA_PAGE_MASK          (0xfffff000)/* * TLB characteristics * * Flags and Access Control layout for using TLB protection insertion * *                      1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 *  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * |?|?|T|D|B|type |PL1|Pl2|U|           access id               |?| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * *//* * Access rights (type + PL1 + PL2) */#define HPPA_PROT_R    0x00c00000   /* Read Only, no Write, no Execute */#define HPPA_PROT_RW   0x01c00000   /* Read & Write Only, no Execute */#define HPPA_PROT_RX   0x02c00000   /* Read & Execute Only, no Write */#define HPPA_PROT_RWX  0x03c00000   /* Read, Write, Execute */#define HPPA_PROT_X0   0x04c00000   /* Execute Only, Promote to Level 0 */#define HPPA_PROT_X1   0x05c00000   /* Execute Only, Promote to Level 1 */#define HPPA_PROT_X2   0x06c00000   /* Execute Only, Promote to Level 2 */#define HPPA_PROT_X3   0x07c00000   /* Execute Only, Promote to Level 3 *//* * Floating point status register definitions */#define HPPA_FPSTATUS_ENABLE_I	  0x00000001	/* inexact operation */#define HPPA_FPSTATUS_ENABLE_U	  0x00000002    /* underflow */#define HPPA_FPSTATUS_ENABLE_O	  0x00000004    /* overflow */#define HPPA_FPSTATUS_ENABLE_Z    0x00000008    /* division by zero */#define HPPA_FPSTATUS_ENABLE_V    0x00000010    /* invalid operation */#define HPPA_FPSTATUS_D           0x00000020    /* denormalize as zero */#define HPPA_FPSTATUS_T           0x00000040    /* delayed trap */#define HPPA_FPSTATUS_RM_MASK     0x00000600    /* rounding mode */#define HPPA_FPSTATUS_RM_SHIFT    9#define HPPA_FPSTATUS_CQ_MASK     0x001FFC00	/* compare queue */#define HPPA_FPSTATUS_CQ_SHIFT	  13#define HPPA_FPSTATUS_C		  0x04000000	/* most recent ompare bit */#define HPPA_FPSTATUS_FLAG_I      0x08000000	/* inexact */#define HPPA_FPSTATUS_FLAG_U	  0x10000000	/* underflow */#define HPPA_FPSTATUS_FLAG_O	  0x20000000	/* overflow */#define HPPA_FPSTATUS_FLAG_Z	  0x40000000	/* division by zero */#define HPPA_FPSTATUS_FLAG_V      0x80000000	/* invalid operation *//* * Inline macros for misc. interesting opcodes *//* generate a global label */#define HPPA_ASM_LABEL(label) \    asm(".export " label ", ! .label " label);/* Return From Interrupt                RFI */#define HPPA_ASM_RFI()                  asm volatile ("rfi")/* Set System Mask                      SSM i,t */#define HPPA_ASM_SSM(i,gr)              asm volatile ("ssm %1, %0" \                                                      : "=r" (gr)   \                                                      : "i"  (i))/* Reset System Mask                    RSM i,t */#define HPPA_ASM_RSM(i,gr)              asm volatile ("rsm %1, %0" \                                                      : "=r" (gr)   \                                                      : "i"  (i))/* Move To System Mask                  MTSM r */#define HPPA_ASM_MTSM(gr)               asm volatile ("mtsm %0" \                                                      : : "r" (gr))/* Load Space Identifier                LDSID (s,b),t */#define HPPA_ASM_LDSID(sr,grb,grt)      asm volatile ("ldsid (%1,%2),%0" \                                                      : "=r" (grt)  \                                                      : "i"  (sr), \                                                        "r"  (grb))/* * Gcc extended asm doesn't really allow for treatment of space registers * as "registers", so we have to use "i" format. * Unfortunately this means that the "=" constraint is not available. *//* Move To Space Register               MTSP r,sr */#define HPPA_ASM_MTSP(gr,sr)            asm volatile ("mtsp %1,%0" \                                                      : : "i"  (sr),  \                                                          "r"  (gr))/* Move From Space Register             MFSP sr,t */#define HPPA_ASM_MFSP(sr,gr)            asm volatile ("mfsp %1,%0" \                                                      : "=r" (gr)  \                                                      : "i"  (sr))/* Move To Control register             MTCTL r,t */#define HPPA_ASM_MTCTL(gr,cr)           asm volatile ("mtctl %1,%0" \                                                      : : "i" (cr), \                                                          "r" (gr))/* Move From Control register           MFCTL r,t */#define HPPA_ASM_MFCTL(cr,gr)           asm volatile ("mfctl %1,%0" \                                                      : "=r" (gr) \                                                      : "i" (cr))/* Synchronize caches                   SYNC */#define HPPA_ASM_SYNC()                 asm volatile ("sync")/* Probe Read Access                    PROBER (s,b),r,t */#define HPPA_ASM_PROBER(sr,groff,gracc,grt) \                                        asm volatile ("prober (%1,%2),%3,%0" \                                                      : "=r" (grt) \                                                      : "i"  (sr), \                                                        "r"  (groff), \                                                        "r"  (gracc))/* Probe Read Access Immediate          PROBERI (s,b),i,t*/#define HPPA_ASM_PROBERI(sr,groff,iacc,grt) \                                        asm volatile ("proberi (%1,%2),%3,%0" \                                                      : "=r" (grt) \                                                      : "i"  (sr), \                                                        "r"  (groff), \                                                        "i"  (iacc))/* Probe Write Access                   PROBEW (s,b),r,t */#define HPPA_ASM_PROBEW(sr,groff,gracc,grt) \                                        asm volatile ("probew (%1,%2),%3,%0" \                                                      : "=r" (grt) \                                                      : "i"  (sr), \                                                        "r"  (groff), \                                                        "r"  (gracc))/* Probe Write Access Immediate         PROBEWI (s,b),i,t */#define HPPA_ASM_PROBEWI(sr,groff,iacc,grt) \                                        asm volatile ("probewi (%1,%2),%3,%0" \                                                      : "=r" (grt) \                                                      : "i"  (sr), \                                                        "r"  (groff), \                                                        "i"  (iacc))/* Load Physical Address                LPA x(s,b),t */#define HPPA_ASM_LPA(sr,grb,grt)        asm volatile ("lpa %%r0(%1,%2),%0" \                                                      : "=r" (grt) \                                                      : "i"  (sr), \                                                        "r"  (grb))/* Load Coherence Index                 LCI x(s,b),t *//* AKA: Load Hash Address               LHA x(s,b),t */#define HPPA_ASM_LCI(grx,sr,grb,grt)    asm volatile ("lha %1(%2,%3),%0" \                                                      : "=r" (grt) \                                                      : "r"  (grx),\                                                        "i"  (sr), \                                                        "r"  (grb))#define HPPA_ASM_LHA(grx,sr,grb,grt)    HPPA_ASM_LCI(grx,sr,grb,grt)/* Purge Data Tlb                       PDTLB  x(s,b) */#define HPPA_ASM_PDTLB(grx,sr,grb)      asm volatile ("pdtlb %0(%1,%2)" \                                                      : : "r"  (grx), \

⌨️ 快捷键说明

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