| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024 |
- /*
- xtensa/hal.h -- contains a definition of the Core HAL interface
- All definitions in this header file are independent of any specific
- Xtensa processor configuration. Thus software (eg. OS, application,
- etc) can include this header file and be compiled into configuration-
- independent objects that can be distributed and eventually linked
- to the HAL library (libhal.a) to create a configuration-specific
- final executable.
- Certain definitions, however, are release/version-specific -- such as
- the XTHAL_RELEASE_xxx macros (or additions made in later versions).
- $Id: //depot/rel/Eaglenest/Xtensa/OS/target-os-src/hal.h.tpp#4 $
- Copyright (c) 1999-2014 Cadence Design Systems, Inc.
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
- #ifndef XTENSA_HAL_H
- #define XTENSA_HAL_H
- /****************************************************************************
- Definitions Useful for Any Code, USER or PRIVILEGED
- ****************************************************************************/
- /*----------------------------------------------------------------------
- Constant Definitions (shared with assembly)
- ----------------------------------------------------------------------*/
- /*
- * Software (Xtensa Tools) version information. Not configuration-specific!
- *
- * NOTE: "release" is a misnomer here, these are really product "version"
- * numbers. A "release" is a collection of product versions
- * made available at once (together) to customers.
- * In the past, release and version names all matched in T####.# form,
- * making the distinction irrelevant. This is no longer the case.
- */
- #define XTHAL_RELEASE_MAJOR 11000
- #define XTHAL_RELEASE_MINOR 3
- #define XTHAL_RELEASE_NAME "11.0.3"
- #define XTHAL_REL_11 1
- #define XTHAL_REL_11_0 1
- #define XTHAL_REL_11_0_3 1
- /* HAL version numbers (these names are for backward compatibility): */
- #define XTHAL_MAJOR_REV XTHAL_RELEASE_MAJOR
- #define XTHAL_MINOR_REV XTHAL_RELEASE_MINOR
- /*
- * A bit of software release/version history on values of XTHAL_{MAJOR,MINOR}_REV:
- *
- * SW Version MAJOR MINOR Comment
- * ======= ===== ===== =======
- * T1015.n n/a n/a (HAL not yet available)
- * T1020.{0,1,2} 0 1 (HAL beta)
- * T1020.{3,4} 0 2 First release.
- * T1020.n (n>4) 0 2 or >3 (TBD)
- * T1030.0 0 1 (HAL beta)
- * T1030.{1,2} 0 3 Equivalent to first release.
- * T1030.n (n>=3) 0 >= 3 (TBD)
- * T1040.n 1040 n Full CHAL available from T1040.2
- * T1050.n 1050 n .
- * 6.0.n 6000 n Xtensa Tools v6 (RA-200x.n)
- * 7.0.n 7000 n Xtensa Tools v7 (RB-200x.n)
- * 7.1.n 7010 n Xtensa Tools v7.1 (RB-200x.(n+2))
- * 8.0.n 8000 n Xtensa Tools v8 (RC-20xx.n)
- * 9.0.n 9000 n Xtensa Tools v9 (RD-201x.n)
- * 10.0.n 10000 n Xtensa Tools v10 (RE-201x.n)
- *
- *
- * Note: there is a distinction between the software version with
- * which something is compiled (accessible using XTHAL_RELEASE_* macros)
- * and the software version with which the HAL library was compiled
- * (accessible using Xthal_release_* global variables). This
- * distinction is particularly relevant for vendors that distribute
- * configuration-independent binaries (eg. an OS), where their customer
- * might link it with a HAL of a different Xtensa software version.
- * In this case, it may be appropriate for the OS to verify at run-time
- * whether XTHAL_RELEASE_* and Xthal_release_* are compatible.
- * [Guidelines as to which version is compatible with which are not
- * currently provided explicitly, but might be inferred from reading
- * OSKit documentation for all releases -- compatibility is also highly
- * dependent on which HAL features are used. Each version is usually
- * backward compatible, with very few exceptions if any.]
- */
- /* Version comparison operators (among major/minor pairs): */
- #define XTHAL_REL_GE(maja,mina, majb,minb) ((maja) > (majb) || \
- ((maja) == (majb) && (mina) >= (minb)))
- #define XTHAL_REL_GT(maja,mina, majb,minb) ((maja) > (majb) || \
- ((maja) == (majb) && (mina) > (minb)))
- #define XTHAL_REL_LE(maja,mina, majb,minb) ((maja) < (majb) || \
- ((maja) == (majb) && (mina) <= (minb)))
- #define XTHAL_REL_LT(maja,mina, majb,minb) ((maja) < (majb) || \
- ((maja) == (majb) && (mina) < (minb)))
- #define XTHAL_REL_EQ(maja,mina, majb,minb) ((maja) == (majb) && (mina) == (minb))
- /* Fuzzy (3-way) logic operators: */
- #define XTHAL_MAYBE -1 /* 0=NO, 1=YES, -1=MAYBE */
- #define XTHAL_FUZZY_AND(a,b) (((a)==0 || (b)==0) ? 0 : ((a)==1 && (b)==1) ? 1 : XTHAL_MAYBE)
- #define XTHAL_FUZZY_OR(a,b) (((a)==1 || (b)==1) ? 1 : ((a)==0 && (b)==0) ? 0 : XTHAL_MAYBE)
- #define XTHAL_FUZZY_NOT(a) (((a)==0 || (a)==1) ? (1-(a)) : XTHAL_MAYBE)
- /*
- * Architectural limit, independent of configuration:
- */
- #define XTHAL_MAX_CPS 8 /* max number of coprocessors (0..7) */
- /* Misc: */
- #define XTHAL_LITTLEENDIAN 0
- #define XTHAL_BIGENDIAN 1
- #if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__)
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*----------------------------------------------------------------------
- HAL
- ----------------------------------------------------------------------*/
- /* Constant to be checked in build = (XTHAL_MAJOR_REV<<16)|XTHAL_MINOR_REV */
- extern const unsigned int Xthal_rev_no;
- /*----------------------------------------------------------------------
- Optional/Custom Processor State
- ----------------------------------------------------------------------*/
- /* save & restore the extra processor state */
- extern void xthal_save_extra(void *base);
- extern void xthal_restore_extra(void *base);
- extern void xthal_save_cpregs(void *base, int);
- extern void xthal_restore_cpregs(void *base, int);
- /* versions specific to each coprocessor id */
- extern void xthal_save_cp0(void *base);
- extern void xthal_save_cp1(void *base);
- extern void xthal_save_cp2(void *base);
- extern void xthal_save_cp3(void *base);
- extern void xthal_save_cp4(void *base);
- extern void xthal_save_cp5(void *base);
- extern void xthal_save_cp6(void *base);
- extern void xthal_save_cp7(void *base);
- extern void xthal_restore_cp0(void *base);
- extern void xthal_restore_cp1(void *base);
- extern void xthal_restore_cp2(void *base);
- extern void xthal_restore_cp3(void *base);
- extern void xthal_restore_cp4(void *base);
- extern void xthal_restore_cp5(void *base);
- extern void xthal_restore_cp6(void *base);
- extern void xthal_restore_cp7(void *base);
- /* pointers to each of the functions above */
- extern void* Xthal_cpregs_save_fn[XTHAL_MAX_CPS];
- extern void* Xthal_cpregs_restore_fn[XTHAL_MAX_CPS];
- /* similarly for non-windowed ABI (may be same or different) */
- extern void* Xthal_cpregs_save_nw_fn[XTHAL_MAX_CPS];
- extern void* Xthal_cpregs_restore_nw_fn[XTHAL_MAX_CPS];
- /*extern void xthal_save_all_extra(void *base);*/
- /*extern void xthal_restore_all_extra(void *base);*/
- /* space for processor state */
- extern const unsigned int Xthal_extra_size;
- extern const unsigned int Xthal_extra_align;
- extern const unsigned int Xthal_cpregs_size[XTHAL_MAX_CPS];
- extern const unsigned int Xthal_cpregs_align[XTHAL_MAX_CPS];
- extern const unsigned int Xthal_all_extra_size;
- extern const unsigned int Xthal_all_extra_align;
- /* coprocessor names */
- extern const char * const Xthal_cp_names[XTHAL_MAX_CPS];
- /* initialize the extra processor */
- /*extern void xthal_init_extra(void);*/
- /* initialize the TIE coprocessor */
- /*extern void xthal_init_cp(int);*/
- /* initialize the extra processor */
- extern void xthal_init_mem_extra(void *);
- /* initialize the TIE coprocessor */
- extern void xthal_init_mem_cp(void *, int);
- /* the number of TIE coprocessors contiguous from zero (for Tor2) */
- extern const unsigned int Xthal_num_coprocessors;
- /* actual number of coprocessors */
- extern const unsigned char Xthal_cp_num;
- /* index of highest numbered coprocessor, plus one */
- extern const unsigned char Xthal_cp_max;
- /* index of highest allowed coprocessor number, per cfg, plus one */
- /*extern const unsigned char Xthal_cp_maxcfg;*/
- /* bitmask of which coprocessors are present */
- extern const unsigned int Xthal_cp_mask;
- /* read & write extra state register */
- /*extern int xthal_read_extra(void *base, unsigned reg, unsigned *value);*/
- /*extern int xthal_write_extra(void *base, unsigned reg, unsigned value);*/
- /* read & write a TIE coprocessor register */
- /*extern int xthal_read_cpreg(void *base, int cp, unsigned reg, unsigned *value);*/
- /*extern int xthal_write_cpreg(void *base, int cp, unsigned reg, unsigned value);*/
- /* return coprocessor number based on register */
- /*extern int xthal_which_cp(unsigned reg);*/
- /*----------------------------------------------------------------------
- Register Windows
- ----------------------------------------------------------------------*/
- /* number of registers in register window */
- extern const unsigned int Xthal_num_aregs;
- extern const unsigned char Xthal_num_aregs_log2;
- /*----------------------------------------------------------------------
- Cache
- ----------------------------------------------------------------------*/
- /* size of the cache lines in log2(bytes) */
- extern const unsigned char Xthal_icache_linewidth;
- extern const unsigned char Xthal_dcache_linewidth;
- /* size of the cache lines in bytes (2^linewidth) */
- extern const unsigned short Xthal_icache_linesize;
- extern const unsigned short Xthal_dcache_linesize;
- /* size of the caches in bytes (ways * 2^(linewidth + setwidth)) */
- extern const unsigned int Xthal_icache_size;
- extern const unsigned int Xthal_dcache_size;
- /* cache features */
- extern const unsigned char Xthal_dcache_is_writeback;
- /* invalidate the caches */
- extern void xthal_icache_region_invalidate( void *addr, unsigned size );
- extern void xthal_dcache_region_invalidate( void *addr, unsigned size );
- # ifndef XTHAL_USE_CACHE_MACROS
- extern void xthal_icache_line_invalidate(void *addr);
- extern void xthal_dcache_line_invalidate(void *addr);
- # endif
- /* write dirty data back */
- extern void xthal_dcache_region_writeback( void *addr, unsigned size );
- # ifndef XTHAL_USE_CACHE_MACROS
- extern void xthal_dcache_line_writeback(void *addr);
- # endif
- /* write dirty data back and invalidate */
- extern void xthal_dcache_region_writeback_inv( void *addr, unsigned size );
- # ifndef XTHAL_USE_CACHE_MACROS
- extern void xthal_dcache_line_writeback_inv(void *addr);
- /* sync icache and memory */
- extern void xthal_icache_sync( void );
- /* sync dcache and memory */
- extern void xthal_dcache_sync( void );
- #endif
- /* get number of icache ways enabled */
- extern unsigned int xthal_icache_get_ways(void);
- /* set number of icache ways enabled */
- extern void xthal_icache_set_ways(unsigned int ways);
- /* get number of dcache ways enabled */
- extern unsigned int xthal_dcache_get_ways(void);
- /* set number of dcache ways enabled */
- extern void xthal_dcache_set_ways(unsigned int ways);
- /* coherency (low-level -- not normally called directly) */
- extern void xthal_cache_coherence_on( void );
- extern void xthal_cache_coherence_off( void );
- /* coherency (high-level) */
- extern void xthal_cache_coherence_optin( void );
- extern void xthal_cache_coherence_optout( void );
- /*
- * Cache prefetch control.
- * The parameter to xthal_set_cache_prefetch() contains both
- * a PREFCTL register value and a mask of which bits to actually modify.
- * This allows easily combining field macros (below) by ORing,
- * leaving unspecified fields unmodified.
- *
- * For backward compatibility with the older version of this routine
- * (that took 15-bit value and mask in a 32-bit parameter, for pre-RF
- * cores with only the lower 15 bits of PREFCTL defined), the 32-bit
- * value and mask are staggered as follows in a 64-bit parameter:
- * param[63:48] are PREFCTL[31:16] if param[31] is set
- * param[47:32] are mask[31:16] if param[31] is set
- * param[31] is set if mask is used, 0 if not
- * param[31:16] are mask[15:0] if param[31] is set
- * param[31:16] are PREFCTL[31:16] if param[31] is clear
- * param[15:0] are PREFCTL[15:0]
- *
- * Limitation: PREFCTL register bit 31 cannot be set without masking,
- * and bit 15 must always be set when using masking, so it is hoped that
- * these two bits will remain reserved, read-as-zero in PREFCTL.
- */
- #define XTHAL_PREFETCH_ENABLE -1 /* enable inst+data prefetch */
- #define XTHAL_PREFETCH_DISABLE 0xFFFF0000 /* disab inst+data prefetch*/
- #define XTHAL_DCACHE_PREFETCH(n) (0x800F0000+((n)&0xF)) /* data-side */
- #define XTHAL_DCACHE_PREFETCH_OFF XTHAL_DCACHE_PREFETCH(0) /* disable */
- #define XTHAL_DCACHE_PREFETCH_LOW XTHAL_DCACHE_PREFETCH(4) /* less aggr.*/
- #define XTHAL_DCACHE_PREFETCH_MEDIUM XTHAL_DCACHE_PREFETCH(5) /* mid aggr. */
- #define XTHAL_DCACHE_PREFETCH_HIGH XTHAL_DCACHE_PREFETCH(8) /* more aggr.*/
- #define XTHAL_DCACHE_PREFETCH_L1_OFF 0x90000000 /* to prefetch buffers*/
- #define XTHAL_DCACHE_PREFETCH_L1 0x90001000 /* direct to L1 dcache*/
- #define XTHAL_ICACHE_PREFETCH(n) (0x80F00000+(((n)&0xF)<<4)) /* i-side */
- #define XTHAL_ICACHE_PREFETCH_OFF XTHAL_ICACHE_PREFETCH(0) /* disable */
- #define XTHAL_ICACHE_PREFETCH_LOW XTHAL_ICACHE_PREFETCH(4) /* less aggr.*/
- #define XTHAL_ICACHE_PREFETCH_MEDIUM XTHAL_ICACHE_PREFETCH(5) /* mid aggr. */
- #define XTHAL_ICACHE_PREFETCH_HIGH XTHAL_ICACHE_PREFETCH(8) /* more aggr.*/
- #define XTHAL_ICACHE_PREFETCH_L1_OFF 0xA0000000 /* (not implemented) */
- #define XTHAL_ICACHE_PREFETCH_L1 0xA0002000 /* (not implemented) */
- #define _XTHAL_PREFETCH_BLOCKS(n) ((n)<0?0:(n)<5?(n):(n)<15?((n)>>1)+2:9)
- #define XTHAL_PREFETCH_BLOCKS(n) (0x0000000F80000000ULL + \
- (((unsigned long long)_XTHAL_PREFETCH_BLOCKS(n))<<48))
- extern int xthal_get_cache_prefetch( void );
- extern int xthal_set_cache_prefetch( int );
- extern int xthal_set_cache_prefetch_long( unsigned long long );
- /* Only use the new extended function from now on: */
- #define xthal_set_cache_prefetch xthal_set_cache_prefetch_long
- #define xthal_set_cache_prefetch_nw xthal_set_cache_prefetch_long_nw
- /*----------------------------------------------------------------------
- Debug
- ----------------------------------------------------------------------*/
- /* 1 if debug option configured, 0 if not: */
- extern const int Xthal_debug_configured;
- /* Set (plant) and remove software breakpoint, both synchronizing cache: */
- extern unsigned int xthal_set_soft_break(void *addr);
- extern void xthal_remove_soft_break(void *addr, unsigned int);
- /*----------------------------------------------------------------------
- Disassembler
- ----------------------------------------------------------------------*/
- /* Max expected size of the return buffer for a disassembled instruction (hint only): */
- #define XTHAL_DISASM_BUFSIZE 80
- /* Disassembly option bits for selecting what to return: */
- #define XTHAL_DISASM_OPT_ADDR 0x0001 /* display address */
- #define XTHAL_DISASM_OPT_OPHEX 0x0002 /* display opcode bytes in hex */
- #define XTHAL_DISASM_OPT_OPCODE 0x0004 /* display opcode name (mnemonic) */
- #define XTHAL_DISASM_OPT_PARMS 0x0008 /* display parameters */
- #define XTHAL_DISASM_OPT_ALL 0x0FFF /* display everything */
- /* routine to get a string for the disassembled instruction */
- extern int xthal_disassemble( unsigned char *instr_buf, void *tgt_addr,
- char *buffer, unsigned buflen, unsigned options );
- /* routine to get the size of the next instruction. Returns 0 for
- illegal instruction */
- extern int xthal_disassemble_size( unsigned char *instr_buf );
- /*----------------------------------------------------------------------
- Instruction/Data RAM/ROM Access
- ----------------------------------------------------------------------*/
- extern void* xthal_memcpy(void *dst, const void *src, unsigned len);
- extern void* xthal_bcopy(const void *src, void *dst, unsigned len);
- /*----------------------------------------------------------------------
- MP Synchronization
- ----------------------------------------------------------------------*/
- extern int xthal_compare_and_set( int *addr, int test_val, int compare_val );
- /*extern const char Xthal_have_s32c1i;*/
- /*----------------------------------------------------------------------
- Miscellaneous
- ----------------------------------------------------------------------*/
- extern const unsigned int Xthal_release_major;
- extern const unsigned int Xthal_release_minor;
- extern const char * const Xthal_release_name;
- extern const char * const Xthal_release_internal;
- extern const unsigned char Xthal_memory_order;
- extern const unsigned char Xthal_have_windowed;
- extern const unsigned char Xthal_have_density;
- extern const unsigned char Xthal_have_booleans;
- extern const unsigned char Xthal_have_loops;
- extern const unsigned char Xthal_have_nsa;
- extern const unsigned char Xthal_have_minmax;
- extern const unsigned char Xthal_have_sext;
- extern const unsigned char Xthal_have_clamps;
- extern const unsigned char Xthal_have_mac16;
- extern const unsigned char Xthal_have_mul16;
- extern const unsigned char Xthal_have_fp;
- extern const unsigned char Xthal_have_speculation;
- extern const unsigned char Xthal_have_threadptr;
- extern const unsigned char Xthal_have_pif;
- extern const unsigned short Xthal_num_writebuffer_entries;
- extern const unsigned int Xthal_build_unique_id;
- /* Version info for hardware targeted by software upgrades: */
- extern const unsigned int Xthal_hw_configid0;
- extern const unsigned int Xthal_hw_configid1;
- extern const unsigned int Xthal_hw_release_major;
- extern const unsigned int Xthal_hw_release_minor;
- extern const char * const Xthal_hw_release_name;
- extern const char * const Xthal_hw_release_internal;
- /* Clear any remnant code-dependent state (i.e. clear loop count regs). */
- extern void xthal_clear_regcached_code( void );
- #ifdef __cplusplus
- }
- #endif
- #endif /*!_ASMLANGUAGE && !_NOCLANGUAGE && !__ASSEMBLER__ */
- /****************************************************************************
- Definitions Useful for PRIVILEGED (Supervisory or Non-Virtualized) Code
- ****************************************************************************/
- #ifndef XTENSA_HAL_NON_PRIVILEGED_ONLY
- /*----------------------------------------------------------------------
- Constant Definitions (shared with assembly)
- ----------------------------------------------------------------------*/
- /*
- * Architectural limits, independent of configuration.
- * Note that these are ISA-defined limits, not micro-architecture implementation
- * limits enforced by the Xtensa Processor Generator (which may be stricter than
- * these below).
- */
- #define XTHAL_MAX_INTERRUPTS 32 /* max number of interrupts (0..31) */
- #define XTHAL_MAX_INTLEVELS 16 /* max number of interrupt levels (0..15) */
- /* (as of T1040, implementation limit is 7: 0..6) */
- #define XTHAL_MAX_TIMERS 4 /* max number of timers (CCOMPARE0..CCOMPARE3) */
- /* (as of T1040, implementation limit is 3: 0..2) */
- /* Interrupt types: */
- #define XTHAL_INTTYPE_UNCONFIGURED 0
- #define XTHAL_INTTYPE_SOFTWARE 1
- #define XTHAL_INTTYPE_EXTERN_EDGE 2
- #define XTHAL_INTTYPE_EXTERN_LEVEL 3
- #define XTHAL_INTTYPE_TIMER 4
- #define XTHAL_INTTYPE_NMI 5
- #define XTHAL_INTTYPE_WRITE_ERROR 6
- #define XTHAL_INTTYPE_PROFILING 7
- #define XTHAL_MAX_INTTYPES 8 /* number of interrupt types */
- /* Timer related: */
- #define XTHAL_TIMER_UNCONFIGURED -1 /* Xthal_timer_interrupt[] value for non-existent timers */
- #define XTHAL_TIMER_UNASSIGNED XTHAL_TIMER_UNCONFIGURED /* (for backwards compatibility only) */
- /* Local Memory ECC/Parity: */
- #define XTHAL_MEMEP_PARITY 1
- #define XTHAL_MEMEP_ECC 2
- /* Flags parameter to xthal_memep_inject_error(): */
- #define XTHAL_MEMEP_F_LOCAL 0 /* local memory (default) */
- #define XTHAL_MEMEP_F_DCACHE_DATA 4 /* data cache data */
- #define XTHAL_MEMEP_F_DCACHE_TAG 5 /* data cache tag */
- #define XTHAL_MEMEP_F_ICACHE_DATA 6 /* instruction cache data */
- #define XTHAL_MEMEP_F_ICACHE_TAG 7 /* instruction cache tag */
- #define XTHAL_MEMEP_F_CORRECTABLE 16 /* inject correctable error
- (default is non-corr.) */
- /* Access Mode bits (tentative): */ /* bit abbr unit short_name PPC equ - Description */
- #define XTHAL_AMB_EXCEPTION 0 /* 001 E EX fls: EXception none
- exception on any access (aka "illegal") */
- #define XTHAL_AMB_HITCACHE 1 /* 002 C CH fls: use Cache on Hit ~(I CI)
- [or H HC] way from tag match;
- [or U UC] (ISA: same except Isolate case) */
- #define XTHAL_AMB_ALLOCATE 2 /* 004 A AL fl?: ALlocate none
- [or F FI fill] refill cache on miss, way from LRU
- (ISA: Read/Write Miss Refill) */
- #define XTHAL_AMB_WRITETHRU 3 /* 008 W WT --s: WriteThrough W WT
- store immediately to memory (ISA: same) */
- #define XTHAL_AMB_ISOLATE 4 /* 010 I IS fls: ISolate none
- use cache regardless of hit-vs-miss,
- way from vaddr (ISA: use-cache-on-miss+hit) */
- #define XTHAL_AMB_GUARD 5 /* 020 G GU ?l?: GUard G *
- non-speculative; spec/replay refs not permitted */
- #define XTHAL_AMB_COHERENT 6 /* 040 M MC ?ls: Mem/MP Coherent M
- on read, other CPU/bus-master may need to supply data;
- on write, maybe redirect to or flush other CPU dirty line; etc */
- #if 0
- #define XTHAL_AMB_BUFFERABLE x /* 000 B BU --s: BUfferable ?
- write response may return earlier than from final destination */
- #define XTHAL_AMB_ORDERED x /* 000 O OR fls: ORdered G *
- mem accesses cannot be out of order */
- #define XTHAL_AMB_FUSEWRITES x /* 000 F FW --s: FuseWrites none
- allow combining/merging/coalescing multiple writes
- (to same datapath data unit) into one
- (implied by writeback) */
- #define XTHAL_AMB_TRUSTED x /* 000 T TR ?l?: TRusted none
- memory will not bus error (if it does,
- handle as fatal imprecise interrupt) */
- #define XTHAL_AMB_PREFETCH x /* 000 P PR fl?: PRefetch none
- on refill, read line+1 into prefetch buffers */
- #define XTHAL_AMB_STREAM x /* 000 S ST ???: STreaming none
- access one of N stream buffers */
- #endif /*0*/
- #define XTHAL_AM_EXCEPTION (1<<XTHAL_AMB_EXCEPTION)
- #define XTHAL_AM_HITCACHE (1<<XTHAL_AMB_HITCACHE)
- #define XTHAL_AM_ALLOCATE (1<<XTHAL_AMB_ALLOCATE)
- #define XTHAL_AM_WRITETHRU (1<<XTHAL_AMB_WRITETHRU)
- #define XTHAL_AM_ISOLATE (1<<XTHAL_AMB_ISOLATE)
- #define XTHAL_AM_GUARD (1<<XTHAL_AMB_GUARD)
- #define XTHAL_AM_COHERENT (1<<XTHAL_AMB_COHERENT)
- #if 0
- #define XTHAL_AM_BUFFERABLE (1<<XTHAL_AMB_BUFFERABLE)
- #define XTHAL_AM_ORDERED (1<<XTHAL_AMB_ORDERED)
- #define XTHAL_AM_FUSEWRITES (1<<XTHAL_AMB_FUSEWRITES)
- #define XTHAL_AM_TRUSTED (1<<XTHAL_AMB_TRUSTED)
- #define XTHAL_AM_PREFETCH (1<<XTHAL_AMB_PREFETCH)
- #define XTHAL_AM_STREAM (1<<XTHAL_AMB_STREAM)
- #endif /*0*/
- /*
- * Allowed Access Modes (bit combinations).
- *
- * Columns are:
- * "FOGIWACE"
- * Access mode bits (see XTHAL_AMB_xxx above).
- * <letter> = bit is set
- * '-' = bit is clear
- * '.' = bit is irrelevant / don't care, as follows:
- * E=1 makes all others irrelevant
- * W,F relevant only for stores
- * "2345"
- * Indicates which Xtensa releases support the corresponding
- * access mode. Releases for each character column are:
- * 2 = prior to T1020.2: T1015 (V1.5), T1020.0, T1020.1
- * 3 = T1020.2 and later: T1020.2+, T1030
- * 4 = T1040
- * 5 = T1050 (maybe), LX1, LX2, LX2.1
- * 7 = LX2.2
- * 8 = LX3, LX4
- * 9 = LX5
- * And the character column contents are:
- * <number> = supported by release(s)
- * "." = unsupported by release(s)
- * "?" = support unknown
- */
- /* foMGIWACE 2345789 */
- /* For instruction fetch: */
- #define XTHAL_FAM_EXCEPTION 0x001 /* ........E 2345789 exception */
- /*efine XTHAL_FAM_ISOLATE*/ /*0x012*/ /* .---I.-C- ....... isolate */
- #define XTHAL_FAM_BYPASS 0x000 /* .----.--- 2345789 bypass */
- /*efine XTHAL_FAM_NACACHED*/ /*0x002*/ /* .----.-C- ....... cached no-allocate (frozen) */
- #define XTHAL_FAM_CACHED 0x006 /* .----.AC- 2345789 cached */
- /* For data load: */
- #define XTHAL_LAM_EXCEPTION 0x001 /* ........E 2345789 exception */
- #define XTHAL_LAM_ISOLATE 0x012 /* .---I.-C- 2345789 isolate */
- #define XTHAL_LAM_BYPASS 0x000 /* .O---.--- 2...... bypass speculative */
- #define XTHAL_LAM_BYPASSG 0x020 /* .O-G-.--- .345789 bypass guarded */
- #define XTHAL_LAM_CACHED_NOALLOC 0x002 /* .O---.-C- 2345789 cached no-allocate speculative */
- #define XTHAL_LAM_NACACHED XTHAL_LAM_CACHED_NOALLOC
- #define XTHAL_LAM_NACACHEDG 0x022 /* .O-G-.-C- .?..... cached no-allocate guarded */
- #define XTHAL_LAM_CACHED 0x006 /* .----.AC- 2345789 cached speculative */
- #define XTHAL_LAM_COHCACHED 0x046 /* .-M--.AC- ....*89 cached speculative MP-coherent */
- /* For data store: */
- #define XTHAL_SAM_EXCEPTION 0x001 /* ........E 2345789 exception */
- #define XTHAL_SAM_ISOLATE 0x032 /* .--GI--C- 2345789 isolate */
- #define XTHAL_SAM_BYPASS 0x028 /* -O-G-W--- 2345789 bypass */
- #define XTHAL_SAM_WRITETHRU 0x02A /* -O-G-W-C- 2345789 writethrough */
- /*efine XTHAL_SAM_WRITETHRU_ALLOC*/ /*0x02E*/ /* -O-G-WAC- ....... writethrough allocate */
- #define XTHAL_SAM_WRITEBACK 0x026 /* F--G--AC- ...5789 writeback */
- #define XTHAL_SAM_WRITEBACK_NOALLOC 0x022 /* ?--G---C- .....89 writeback no-allocate */
- #define XTHAL_SAM_COHWRITEBACK 0x066 /* F-MG--AC- ....*89 writeback MP-coherent */
- /* For PIF attributes: */ /* -PIwrWCBUUUU ...9 */
- #define XTHAL_PAM_BYPASS 0x000 /* xxx00000xxxx ...9 bypass non-bufferable */
- #define XTHAL_PAM_BYPASS_BUF 0x010 /* xxx0000bxxxx ...9 bypass */
- #define XTHAL_PAM_CACHED_NOALLOC 0x030 /* xxx0001bxxxx ...9 cached no-allocate */
- #define XTHAL_PAM_WRITETHRU 0x0B0 /* xxx0101bxxxx ...9 writethrough (WT) */
- #define XTHAL_PAM_WRITEBACK_NOALLOC 0x0F0 /* xxx0111bxxxx ...9 writeback no-alloc (WBNA) */
- #define XTHAL_PAM_WRITEBACK 0x1F0 /* xxx1111bxxxx ...9 writeback (WB) */
- /*efine XTHAL_PAM_NORMAL*/ /*0x050*/ /* xxx0010bxxxx .... (unimplemented) */
- /*efine XTHAL_PAM_WRITETHRU_WA*/ /*0x130*/ /* xxx1001bxxxx .... (unimplemented, less likely) */
- /*efine XTHAL_PAM_WRITETHRU_RWA*/ /*0x1B0*/ /* xxx1101bxxxx .... (unimplemented, less likely) */
- /*efine XTHAL_PAM_WRITEBACK_WA*/ /*0x170*/ /* xxx1011bxxxx .... (unimplemented, less likely) */
- #if 0
- /*
- Cache attribute encoding for CACHEATTR (per ISA):
- (Note: if this differs from ISA Ref Manual, ISA has precedence)
- Inst-fetches Loads Stores
- ------------- ------------ -------------
- 0x0 FCA_EXCEPTION LCA_NACACHED SCA_WRITETHRU cached no-allocate (previously misnamed "uncached")
- 0x1 FCA_CACHED LCA_CACHED SCA_WRITETHRU cached
- 0x2 FCA_BYPASS LCA_BYPASS_G* SCA_BYPASS bypass cache (what most people call uncached)
- 0x3 FCA_CACHED LCA_CACHED SCA_WRITEALLOCF write-allocate
- or LCA_EXCEPTION SCA_EXCEPTION (if unimplemented)
- 0x4 FCA_CACHED LCA_CACHED SCA_WRITEBACK[M] write-back [MP-coherent]
- or LCA_EXCEPTION SCA_EXCEPTION (if unimplemented)
- 0x5 FCA_CACHED LCA_CACHED SCA_WRITEBACK_NOALLOC write-back no-allocate
- or FCA_EXCEPTION LCA_EXCEPTION SCA_EXCEPTION (if unimplemented)
- 0x6..D FCA_EXCEPTION LCA_EXCEPTION SCA_EXCEPTION (reserved)
- 0xE FCA_EXCEPTION LCA_ISOLATE SCA_ISOLATE isolate
- 0xF FCA_EXCEPTION LCA_EXCEPTION SCA_EXCEPTION illegal
- * Prior to T1020.2?, guard feature not supported, this defaulted to speculative (no _G)
- */
- #endif /*0*/
- #if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__)
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*----------------------------------------------------------------------
- Register Windows
- ----------------------------------------------------------------------*/
- /* This spill any live register windows (other than the caller's):
- * (NOTE: current implementation require privileged code, but
- * a user-callable implementation is possible.) */
- extern void xthal_window_spill( void );
- /*----------------------------------------------------------------------
- Optional/Custom Processor State
- ----------------------------------------------------------------------*/
- /* validate & invalidate the TIE register file */
- extern void xthal_validate_cp(int);
- extern void xthal_invalidate_cp(int);
- /* read and write cpenable register */
- extern void xthal_set_cpenable(unsigned);
- extern unsigned xthal_get_cpenable(void);
- /*----------------------------------------------------------------------
- Interrupts
- ----------------------------------------------------------------------*/
- /* the number of interrupt levels */
- extern const unsigned char Xthal_num_intlevels;
- /* the number of interrupts */
- extern const unsigned char Xthal_num_interrupts;
- /* the highest level of interrupts masked by PS.EXCM */
- extern const unsigned char Xthal_excm_level;
- /* mask for level of interrupts */
- extern const unsigned int Xthal_intlevel_mask[XTHAL_MAX_INTLEVELS];
- /* mask for level 0 to N interrupts */
- extern const unsigned int Xthal_intlevel_andbelow_mask[XTHAL_MAX_INTLEVELS];
- /* level of each interrupt */
- extern const unsigned char Xthal_intlevel[XTHAL_MAX_INTERRUPTS];
- /* type per interrupt */
- extern const unsigned char Xthal_inttype[XTHAL_MAX_INTERRUPTS];
- /* masks of each type of interrupt */
- extern const unsigned int Xthal_inttype_mask[XTHAL_MAX_INTTYPES];
- /* interrupt numbers assigned to each timer interrupt */
- extern const int Xthal_timer_interrupt[XTHAL_MAX_TIMERS];
- /* INTENABLE,INTERRUPT,INTSET,INTCLEAR register access functions: */
- extern unsigned xthal_get_intenable( void );
- extern void xthal_set_intenable( unsigned );
- extern unsigned xthal_get_interrupt( void );
- #define xthal_get_intread xthal_get_interrupt /* backward compatibility */
- extern void xthal_set_intset( unsigned );
- extern void xthal_set_intclear( unsigned );
- /*----------------------------------------------------------------------
- Debug
- ----------------------------------------------------------------------*/
- /* Number of instruction and data break registers: */
- extern const int Xthal_num_ibreak;
- extern const int Xthal_num_dbreak;
- /*----------------------------------------------------------------------
- Core Counter
- ----------------------------------------------------------------------*/
- /* counter info */
- extern const unsigned char Xthal_have_ccount; /* set if CCOUNT register present */
- extern const unsigned char Xthal_num_ccompare; /* number of CCOMPAREn registers */
- /* get CCOUNT register (if not present return 0) */
- extern unsigned xthal_get_ccount(void);
- /* set and get CCOMPAREn registers (if not present, get returns 0) */
- extern void xthal_set_ccompare(int, unsigned);
- extern unsigned xthal_get_ccompare(int);
- /*----------------------------------------------------------------------
- Miscellaneous
- ----------------------------------------------------------------------*/
- extern const unsigned char Xthal_have_prid;
- extern const unsigned char Xthal_have_exceptions;
- extern const unsigned char Xthal_xea_version;
- extern const unsigned char Xthal_have_interrupts;
- extern const unsigned char Xthal_have_highlevel_interrupts;
- extern const unsigned char Xthal_have_nmi;
- extern unsigned xthal_get_prid( void );
- /*----------------------------------------------------------------------
- Virtual interrupt prioritization (DEPRECATED)
- ----------------------------------------------------------------------*/
- /* Convert between interrupt levels (as per PS.INTLEVEL) and virtual interrupt priorities: */
- extern unsigned xthal_vpri_to_intlevel(unsigned vpri);
- extern unsigned xthal_intlevel_to_vpri(unsigned intlevel);
- /* Enables/disables given set (mask) of interrupts; returns previous enabled-mask of all ints: */
- extern unsigned xthal_int_enable(unsigned);
- extern unsigned xthal_int_disable(unsigned);
- /* Set/get virtual priority of an interrupt: */
- extern int xthal_set_int_vpri(int intnum, int vpri);
- extern int xthal_get_int_vpri(int intnum);
- /* Set/get interrupt lockout level for exclusive access to virtual priority data structures: */
- extern void xthal_set_vpri_locklevel(unsigned intlevel);
- extern unsigned xthal_get_vpri_locklevel(void);
- /* Set/get current virtual interrupt priority: */
- extern unsigned xthal_set_vpri(unsigned vpri);
- extern unsigned xthal_get_vpri(void);
- extern unsigned xthal_set_vpri_intlevel(unsigned intlevel);
- extern unsigned xthal_set_vpri_lock(void);
- /*----------------------------------------------------------------------
- Generic Interrupt Trampolining Support (DEPRECATED)
- ----------------------------------------------------------------------*/
- typedef void (XtHalVoidFunc)(void);
- /* Bitmask of interrupts currently trampolining down: */
- extern unsigned Xthal_tram_pending;
- /*
- * Bitmask of which interrupts currently trampolining down synchronously are
- * actually enabled; this bitmask is necessary because INTENABLE cannot hold
- * that state (sync-trampolining interrupts must be kept disabled while
- * trampolining); in the current implementation, any bit set here is not set
- * in INTENABLE, and vice-versa; once a sync-trampoline is handled (at level
- * one), its enable bit must be moved from here to INTENABLE:
- */
- extern unsigned Xthal_tram_enabled;
- /* Bitmask of interrupts configured for sync trampolining: */
- extern unsigned Xthal_tram_sync;
- /* Trampoline support functions: */
- extern unsigned xthal_tram_pending_to_service( void );
- extern void xthal_tram_done( unsigned serviced_mask );
- extern int xthal_tram_set_sync( int intnum, int sync );
- extern XtHalVoidFunc* xthal_set_tram_trigger_func( XtHalVoidFunc *trigger_fn );
- /*----------------------------------------------------------------------
- Internal Memories
- ----------------------------------------------------------------------*/
- extern const unsigned char Xthal_num_instrom;
- extern const unsigned char Xthal_num_instram;
- extern const unsigned char Xthal_num_datarom;
- extern const unsigned char Xthal_num_dataram;
- extern const unsigned char Xthal_num_xlmi;
- /* Each of the following arrays contains at least one entry,
- * or as many entries as needed if more than one: */
- extern const unsigned int Xthal_instrom_vaddr[];
- extern const unsigned int Xthal_instrom_paddr[];
- extern const unsigned int Xthal_instrom_size [];
- extern const unsigned int Xthal_instram_vaddr[];
- extern const unsigned int Xthal_instram_paddr[];
- extern const unsigned int Xthal_instram_size [];
- extern const unsigned int Xthal_datarom_vaddr[];
- extern const unsigned int Xthal_datarom_paddr[];
- extern const unsigned int Xthal_datarom_size [];
- extern const unsigned int Xthal_dataram_vaddr[];
- extern const unsigned int Xthal_dataram_paddr[];
- extern const unsigned int Xthal_dataram_size [];
- extern const unsigned int Xthal_xlmi_vaddr[];
- extern const unsigned int Xthal_xlmi_paddr[];
- extern const unsigned int Xthal_xlmi_size [];
- /*----------------------------------------------------------------------
- Cache
- ----------------------------------------------------------------------*/
- /* number of cache sets in log2(lines per way) */
- extern const unsigned char Xthal_icache_setwidth;
- extern const unsigned char Xthal_dcache_setwidth;
- /* cache set associativity (number of ways) */
- extern const unsigned int Xthal_icache_ways;
- extern const unsigned int Xthal_dcache_ways;
- /* cache features */
- extern const unsigned char Xthal_icache_line_lockable;
- extern const unsigned char Xthal_dcache_line_lockable;
- /* cache attribute register control (used by other HAL routines) */
- extern unsigned xthal_get_cacheattr( void );
- extern unsigned xthal_get_icacheattr( void );
- extern unsigned xthal_get_dcacheattr( void );
- extern void xthal_set_cacheattr( unsigned );
- extern void xthal_set_icacheattr( unsigned );
- extern void xthal_set_dcacheattr( unsigned );
- /* set cache attribute (access modes) for a range of memory */
- extern int xthal_set_region_attribute( void *addr, unsigned size,
- unsigned cattr, unsigned flags );
- /* Bits of flags parameter to xthal_set_region_attribute(): */
- #define XTHAL_CAFLAG_EXPAND 0x000100 /* only expand allowed access to range, don't reduce it */
- #define XTHAL_CAFLAG_EXACT 0x000200 /* return error if can't apply change to exact range specified */
- #define XTHAL_CAFLAG_NO_PARTIAL 0x000400 /* don't apply change to regions partially covered by range */
- #define XTHAL_CAFLAG_NO_AUTO_WB 0x000800 /* don't writeback data after leaving writeback attribute */
- #define XTHAL_CAFLAG_NO_AUTO_INV 0x001000 /* don't invalidate after disabling cache (entering bypass) */
- /* enable caches */
- extern void xthal_icache_enable( void ); /* DEPRECATED */
- extern void xthal_dcache_enable( void ); /* DEPRECATED */
- /* disable caches */
- extern void xthal_icache_disable( void ); /* DEPRECATED */
- extern void xthal_dcache_disable( void ); /* DEPRECATED */
- /* invalidate the caches */
- extern void xthal_icache_all_invalidate( void );
- extern void xthal_dcache_all_invalidate( void );
- /* write dirty data back */
- extern void xthal_dcache_all_writeback( void );
- /* write dirty data back and invalidate */
- extern void xthal_dcache_all_writeback_inv( void );
- /* prefetch and lock specified memory range into cache */
- extern void xthal_icache_region_lock( void *addr, unsigned size );
- extern void xthal_dcache_region_lock( void *addr, unsigned size );
- # ifndef XTHAL_USE_CACHE_MACROS
- extern void xthal_icache_line_lock(void *addr);
- extern void xthal_dcache_line_lock(void *addr);
- # endif
- /* unlock from cache */
- extern void xthal_icache_all_unlock( void );
- extern void xthal_dcache_all_unlock( void );
- extern void xthal_icache_region_unlock( void *addr, unsigned size );
- extern void xthal_dcache_region_unlock( void *addr, unsigned size );
- # ifndef XTHAL_USE_CACHE_MACROS
- extern void xthal_icache_line_unlock(void *addr);
- extern void xthal_dcache_line_unlock(void *addr);
- # endif
- /*----------------------------------------------------------------------
- Local Memory ECC/Parity
- ----------------------------------------------------------------------*/
- /* Inject memory errors; flags is bit combination of XTHAL_MEMEP_F_xxx: */
- extern void xthal_memep_inject_error(void *addr, int size, int flags);
- /*----------------------------------------------------------------------
- Memory Management Unit
- ----------------------------------------------------------------------*/
- extern const unsigned char Xthal_have_spanning_way;
- extern const unsigned char Xthal_have_identity_map;
- extern const unsigned char Xthal_have_mimic_cacheattr;
- extern const unsigned char Xthal_have_xlt_cacheattr;
- extern const unsigned char Xthal_have_cacheattr;
- extern const unsigned char Xthal_have_tlbs;
- extern const unsigned char Xthal_mmu_asid_bits; /* 0 .. 8 */
- extern const unsigned char Xthal_mmu_asid_kernel;
- extern const unsigned char Xthal_mmu_rings; /* 1 .. 4 (perhaps 0 if no MMU and/or no protection?) */
- extern const unsigned char Xthal_mmu_ring_bits;
- extern const unsigned char Xthal_mmu_sr_bits;
- extern const unsigned char Xthal_mmu_ca_bits;
- extern const unsigned int Xthal_mmu_max_pte_page_size;
- extern const unsigned int Xthal_mmu_min_pte_page_size;
- extern const unsigned char Xthal_itlb_way_bits;
- extern const unsigned char Xthal_itlb_ways;
- extern const unsigned char Xthal_itlb_arf_ways;
- extern const unsigned char Xthal_dtlb_way_bits;
- extern const unsigned char Xthal_dtlb_ways;
- extern const unsigned char Xthal_dtlb_arf_ways;
- /* Convert between virtual and physical addresses (through static maps only): */
- /*** WARNING: these two functions may go away in a future release; don't depend on them! ***/
- extern int xthal_static_v2p( unsigned vaddr, unsigned *paddrp );
- extern int xthal_static_p2v( unsigned paddr, unsigned *vaddrp, unsigned cached );
- #define XCHAL_SUCCESS 0
- #define XCHAL_ADDRESS_MISALIGNED -1
- #define XCHAL_INEXACT -2
- #define XCHAL_INVALID_ADDRESS -3
- #define XCHAL_UNSUPPORTED_ON_THIS_ARCH -4
- #define XCHAL_NO_PAGES_MAPPED -5
- #define XTHAL_NO_MAPPING -6
- #define XCHAL_CA_R (0xC0 | 0x40000000)
- #define XCHAL_CA_RX (0xD0 | 0x40000000)
- #define XCHAL_CA_RW (0xE0 | 0x40000000)
- #define XCHAL_CA_RWX (0xF0 | 0x40000000)
- extern int xthal_set_region_translation(void* vaddr, void* paddr, unsigned size, unsigned cache_atr, unsigned flags);
- extern int xthal_v2p(void*, void**, unsigned*, unsigned*);
- extern int xthal_invalidate_region(void* addr);
- extern int xthal_set_region_translation_raw(void *vaddr, void *paddr, unsigned cattr);
- #ifdef __cplusplus
- }
- #endif
- #endif /*!_ASMLANGUAGE && !_NOCLANGUAGE && !__ASSEMBLER__ */
- #endif /* !XTENSA_HAL_NON_PRIVILEGED_ONLY */
- /****************************************************************************
- EXPERIMENTAL and DEPRECATED Definitions
- ****************************************************************************/
- #if !defined(_ASMLANGUAGE) && !defined(_NOCLANGUAGE) && !defined(__ASSEMBLER__)
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifdef INCLUDE_DEPRECATED_HAL_CODE
- extern const unsigned char Xthal_have_old_exc_arch;
- extern const unsigned char Xthal_have_mmu;
- extern const unsigned int Xthal_num_regs;
- extern const unsigned char Xthal_num_iroms;
- extern const unsigned char Xthal_num_irams;
- extern const unsigned char Xthal_num_droms;
- extern const unsigned char Xthal_num_drams;
- extern const unsigned int Xthal_configid0;
- extern const unsigned int Xthal_configid1;
- #endif
- #ifdef INCLUDE_DEPRECATED_HAL_DEBUG_CODE
- #define XTHAL_24_BIT_BREAK 0x80000000
- #define XTHAL_16_BIT_BREAK 0x40000000
- extern const unsigned short Xthal_ill_inst_16[16];
- #define XTHAL_DEST_REG 0xf0000000 /* Mask for destination register */
- #define XTHAL_DEST_REG_INST 0x08000000 /* Branch address is in register */
- #define XTHAL_DEST_REL_INST 0x04000000 /* Branch address is relative */
- #define XTHAL_RFW_INST 0x00000800
- #define XTHAL_RFUE_INST 0x00000400
- #define XTHAL_RFI_INST 0x00000200
- #define XTHAL_RFE_INST 0x00000100
- #define XTHAL_RET_INST 0x00000080
- #define XTHAL_BREAK_INST 0x00000040
- #define XTHAL_SYSCALL_INST 0x00000020
- #define XTHAL_LOOP_END 0x00000010 /* Not set by xthal_inst_type */
- #define XTHAL_JUMP_INST 0x00000008 /* Call or jump instruction */
- #define XTHAL_BRANCH_INST 0x00000004 /* Branch instruction */
- #define XTHAL_24_BIT_INST 0x00000002
- #define XTHAL_16_BIT_INST 0x00000001
- typedef struct xthal_state {
- unsigned pc;
- unsigned ar[16];
- unsigned lbeg;
- unsigned lend;
- unsigned lcount;
- unsigned extra_ptr;
- unsigned cpregs_ptr[XTHAL_MAX_CPS];
- } XTHAL_STATE;
- extern unsigned int xthal_inst_type(void *addr);
- extern unsigned int xthal_branch_addr(void *addr);
- extern unsigned int xthal_get_npc(XTHAL_STATE *user_state);
- #endif /* INCLUDE_DEPRECATED_HAL_DEBUG_CODE */
- #ifdef __cplusplus
- }
- #endif
- #endif /*!_ASMLANGUAGE && !_NOCLANGUAGE && !__ASSEMBLER__ */
- #endif /*XTENSA_HAL_H*/
|