Changeset 6ac14a70 in mainline for kernel/arch/arm32/src/interrupt.c


Ignore:
Timestamp:
2009-07-28T12:47:31Z (15 years ago)
Author:
Vineeth Pillai <vineethrp@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5e73815
Parents:
7038f55
Message:

ARM port for development board integratorcp(ARM926EJ core module).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/src/interrupt.c

    r7038f55 r6ac14a70  
    3636#include <arch/asm.h>
    3737#include <arch/regutils.h>
    38 #include <arch/drivers/gxemul.h>
     38#include <arch/machine.h>
    3939#include <ddi/irq.h>
    4040#include <ddi/device.h>
     
    4343/** Initial size of a table holding interrupt handlers. */
    4444#define IRQ_COUNT 8
    45 
    46 static irq_t gxemul_timer_irq;
    4745
    4846/** Disable interrupts.
     
    5351{
    5452        ipl_t ipl = current_status_reg_read();
    55        
     53
    5654        current_status_reg_control_write(STATUS_REG_IRQ_DISABLED_BIT | ipl);
    5755       
     
    6664{
    6765        ipl_t ipl = current_status_reg_read();
    68        
     66
    6967        current_status_reg_control_write(ipl & ~STATUS_REG_IRQ_DISABLED_BIT);
    7068       
     
    9290}
    9391
    94 /** Starts gxemul Real Time Clock device, which asserts regular interrupts.
    95  *
    96  * @param frequency Interrupts frequency (0 disables RTC).
    97  */
    98 static void gxemul_timer_start(uint32_t frequency)
    99 {
    100         *((uint32_t *) (gxemul_rtc + GXEMUL_RTC_FREQ_OFFSET))
    101             = frequency;
    102 }
    103 
    104 static irq_ownership_t gxemul_timer_claim(irq_t *irq)
    105 {
    106         return IRQ_ACCEPT;
    107 }
    108 
    109 /** Timer interrupt handler.
    110  *
    111  * @param irq Interrupt information.
    112  * @param arg Not used.
    113  */
    114 static void gxemul_timer_irq_handler(irq_t *irq)
    115 {
    116         /*
    117         * We are holding a lock which prevents preemption.
    118         * Release the lock, call clock() and reacquire the lock again.
    119         */
    120         spinlock_unlock(&irq->lock);
    121         clock();
    122         spinlock_lock(&irq->lock);
    123        
    124         /* acknowledge tick */
    125         *((uint32_t *) (gxemul_rtc + GXEMUL_RTC_ACK_OFFSET))
    126             = 0;
    127 }
    128 
    12992/** Initialize basic tables for exception dispatching
    13093 * and starts the timer.
     
    13396{
    13497        irq_init(IRQ_COUNT, IRQ_COUNT);
     98        machine_timer_irq_start();
    13599       
    136         irq_initialize(&gxemul_timer_irq);
    137         gxemul_timer_irq.devno = device_assign_devno();
    138         gxemul_timer_irq.inr = GXEMUL_TIMER_IRQ;
    139         gxemul_timer_irq.claim = gxemul_timer_claim;
    140         gxemul_timer_irq.handler = gxemul_timer_irq_handler;
    141        
    142         irq_register(&gxemul_timer_irq);
    143        
    144         gxemul_timer_start(GXEMUL_TIMER_FREQ);
    145100}
    146101
Note: See TracChangeset for help on using the changeset viewer.