Changeset 05d9dd89 in mainline for arch/ia64/src


Ignore:
Timestamp:
2005-11-03T21:55:52Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
dd118f0
Parents:
0259524
Message:

ia64 work.
Fix definition of u32.
Add more register manipulation functions.
Add unions describing bit-structured registers.
Distinguish between timer, unhandled and spurious external interrupts.
Initialize interval timer to generate first timer interrupt.

Location:
arch/ia64/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/src/ia64.c

    r0259524 r05d9dd89  
    2929#include <arch.h>
    3030#include <arch/ski/ski.h>
     31#include <arch/asm.h>
     32#include <arch/register.h>
     33#include <arch/barrier.h>
     34#include <arch/interrupt.h>
     35
     36/** TODO: read ticks per second from firmware */
     37#define IT_DELTA        50000000
    3138
    3239void arch_pre_mm_init(void)
     
    3744void arch_post_mm_init(void)
    3845{
     46        cr_itv_t itv;
     47
     48        /* initialize Interval Timer external interrupt vector */
     49        itv.value = itv_read();
     50        itv.vector = INTERRUPT_TIMER;
     51        itv.m = 0;
     52        itv_write(itv.value);
     53        srlz_d();
     54
     55        /* set Interval Timer Counter to zero */
     56        itc_write(0);
     57        srlz_d();
     58       
     59        /* generate first Interval Timer interrupt in IT_DELTA ticks */
     60        itm_write(IT_DELTA);
     61        srlz_d();
    3962}
  • arch/ia64/src/interrupt.c

    r0259524 r05d9dd89  
    3030#include <arch/interrupt.h>
    3131#include <panic.h>
     32#include <print.h>
    3233#include <arch/types.h>
    3334#include <arch/asm.h>
    3435#include <arch/barrier.h>
    3536#include <arch/register.h>
     37#include <arch.h>
    3638
    3739void external_interrupt(void)
    3840{
    39         __u8 ivr;
     41        cr_ivr_t ivr;
    4042       
    41         srlz_d();
    42         ivr = ivr_read() & CR_IVR_MASK;
     43        ivr.value = ivr_read();
    4344        srlz_d();
    4445       
    45         switch(ivr) {
     46        switch(ivr.value) {
     47            case INTERRUPT_TIMER:
     48                panic("cpu%d: timer interrupt\n", CPU->id);
     49                break;
     50            case INTERRUPT_SPURIOUS:
     51                printf("cpu%d: spurious interrupt\n", CPU->id);
     52                break;
    4653            default:
    47                 panic("\nUnhandled External Interrupt Vector %d\n", ivr);
     54                panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector);
     55                break;
    4856        }
    4957}
Note: See TracChangeset for help on using the changeset viewer.