Changeset e2ec980f in mainline for arch/ia64/include


Ignore:
Timestamp:
2005-11-09T01:21:46Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b183865e
Parents:
0b5ac364
Message:

ia64 work.
Big cleanup of IA-64 interrupt processing.
Merge of interrupt.c and interrupt_handler.c.
Rewrite of ivt.S and interrupt.c.
Higher level interrupt handlers are now passed a vector number and a pointer to stack structure.

ia32 work.
ia32 has ordered writes. Until it deploys weaker memory ordering model, write_barrier() can be empty statement.

Location:
arch/ia64/include
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/include/asm.h

    r0b5ac364 re2ec980f  
    4949}
    5050
     51/** Read IVA (Interruption Vector Address).
     52 *
     53 * @return Return location of interruption vector table.
     54 */
     55static inline __u64 iva_read(void)
     56{
     57        __u64 v;
     58       
     59        __asm__ volatile ("mov %0 = cr.iva\n" : "=r" (v));
     60       
     61        return v;
     62}
     63
     64/** Write IVA (Interruption Vector Address) register.
     65 *
     66 * @param New location of interruption vector table.
     67 */
     68static inline void iva_write(__u64 v)
     69{
     70        __asm__ volatile ("mov cr.iva = %0\n" : : "r" (v));
     71}
     72
     73
    5174/** Read IVR (External Interrupt Vector Register).
    5275 *
     
    219242}
    220243
    221 #define set_shadow_register(reg,val) {__u64 v = val; __asm__  volatile("mov r15 = %0;;\n""bsw.0;;\n""mov "   #reg   " = r15;;\n""bsw.1;;\n" : : "r" (v) : "r15" ); }
    222 #define get_shadow_register(reg,val) {__u64 v ; __asm__  volatile("bsw.0;;\n" "mov r15 = r" #reg ";;\n" "bsw.1;;\n" "mov %0 = r15;;\n" : "=r" (v) : : "r15" ); val=v; }
    223 
    224 #define get_control_register(reg,val) {__u64 v ; __asm__  volatile("mov r15 = cr" #reg ";;\n" "mov %0 = r15;;\n" : "=r" (v) : : "r15" ); val=v; }
    225 #define get_aplication_register(reg,val) {__u64 v ; __asm__  volatile("mov r15 = ar" #reg ";;\n" "mov %0 = r15;;\n" : "=r" (v) : : "r15" ); val=v; }
    226 #define get_psr(val) {__u64 v ; __asm__  volatile("mov r15 = psr;;\n" "mov %0 = r15;;\n" : "=r" (v) : : "r15" ); val=v; }
    227 
    228244extern void cpu_halt(void);
    229245extern void cpu_sleep(void);
  • arch/ia64/include/interrupt.h

    r0b5ac364 re2ec980f  
    3030#define __ia64_INTERRUPT_H__
    3131
     32#include <arch/types.h>
     33
     34/** External interrupt vectors. */
    3235#define INTERRUPT_TIMER         0
    3336#define INTERRUPT_SPURIOUS      15
     
    3538#define EOI     0               /**< The actual value doesn't matter. */
    3639
    37 extern void external_interrupt(void);
     40struct exception_regdump {
     41        __address ar_bsp;
     42        __address ar_bspstore;
     43        __u64 ar_rnat;
     44        __u64 ar_ifs;
     45        __u64 ar_pfs;
     46        __u64 ar_rsc;
     47        __address cr_ifa;
     48        __u64 cr_isr;
     49        __address cr_iipa;
     50        __u64 cr_ips;
     51        __address cr_iip;
     52        __u64 pr;
     53} __attribute__ ((packed));
     54
     55extern void *ivt;
     56
     57extern void general_exception(__u64 vector, struct exception_regdump *pstate);
     58extern void break_instruction(__u64 vector, struct exception_regdump *pstate);
     59extern void universal_handler(__u64 vector, struct exception_regdump *pstate);
     60extern void external_interrupt(__u64 vector, struct exception_regdump *pstate);
    3861
    3962#endif
  • arch/ia64/include/register.h

    r0b5ac364 re2ec980f  
    3434#define CR_IVR_MASK     0xf
    3535#define PSR_I_MASK      0x4000
     36
     37/** Application registers. */
     38#define AR_KR0          0
     39#define AR_KR1          1
     40#define AR_KR2          2
     41#define AR_KR3          3
     42#define AR_KR4          4
     43#define AR_KR5          5
     44#define AR_KR6          6
     45#define AR_KR7          7
     46/* AR 8-15 reserved */
     47#define AR_RSC          16
     48#define AR_BSP          17
     49#define AR_BSPSTORE     18
     50#define AR_RNAT         19
     51/* AR 20 reserved */
     52#define AR_FCR          21
     53/* AR 22-23 reserved */
     54#define AR_EFLAG        24
     55#define AR_CSD          25
     56#define AR_SSD          26
     57#define AR_CFLG         27
     58#define AR_FSR          28
     59#define AR_FIR          29
     60#define AR_FDR          30
     61/* AR 31 reserved */
     62#define AR_CCV          32
     63/* AR 33-35 reserved */
     64#define AR_UNAT         36
     65/* AR 37-39 reserved */
     66#define AR_FPSR         40
     67/* AR 41-43 reserved */
     68#define AR_ITC          44
     69/* AR 45-47 reserved */
     70/* AR 48-63 ignored */
     71#define AR_PFS          64
     72#define AR_LC           65
     73#define AR_EC           66
     74/* AR 67-111 reserved */
     75/* AR 112-127 ignored */
     76
     77/** Control registers. */
     78#define CR_DCR          0
     79#define CR_ITM          1
     80#define CR_IVA          2
     81/* CR3-CR7 reserved */
     82#define CR_PTA          8
     83/* CR9-CR15 reserved */
     84#define CR_IPSR         16
     85#define CR_ISR          17
     86/* CR18 reserved */
     87#define CR_IIP          19
     88#define CR_IFA          20
     89#define CR_ITIR         21
     90#define CR_IIPA         22
     91#define CR_IFS          23
     92#define CR_IIM          24
     93#define CR_IHA          25
     94/* CR26-CR63 reserved */
     95#define CR_LID          64
     96#define CR_IVR          65
     97#define CR_TPR          66
     98#define CR_EOI          67
     99#define CR_IRR0         68
     100#define CR_IRR1         69
     101#define CR_IRR2         70
     102#define CR_IRR3         71
     103#define CR_ITV          72
     104#define CR_PMV          73
     105#define CR_CMCV         74
     106/* CR75-CR79 reserved */
     107#define CR_LRR0         80
     108#define CR_LRR1         81
     109/* CR82-CR127 reserved */
    36110
    37111/** External Interrupt Vector Register */
Note: See TracChangeset for help on using the changeset viewer.