Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:22:49

0001 /*
0002  * Copyright (c) 2010 embedded brains GmbH & Co. KG
0003  *
0004  * PXA255 Interrupt handler by Yang Xi <hiyangxi@gmail.com>
0005  * Copyright (c) 2004 by Jay Monkman <jtm@lopingdog.com>
0006  *
0007  *  The license and distribution terms for this file may be
0008  *  found in the file LICENSE in this distribution or at
0009  *  http://www.rtems.org/license/LICENSE.
0010  */
0011 
0012 #include <rtems/score/armv4.h>
0013 
0014 #include <bsp.h>
0015 #include <bsp/irq.h>
0016 #include <bsp/irq-generic.h>
0017 
0018 #include <pxa255.h>
0019 
0020 void bsp_interrupt_dispatch(void)
0021 {
0022   rtems_vector_number vector = 31 - __builtin_clz(XSCALE_INT_ICIP);
0023 
0024   bsp_interrupt_handler_dispatch(vector);
0025 }
0026 
0027 rtems_status_code bsp_interrupt_get_attributes(
0028   rtems_vector_number         vector,
0029   rtems_interrupt_attributes *attributes
0030 )
0031 {
0032   return RTEMS_SUCCESSFUL;
0033 }
0034 
0035 rtems_status_code bsp_interrupt_is_pending(
0036   rtems_vector_number vector,
0037   bool               *pending
0038 )
0039 {
0040   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0041   bsp_interrupt_assert(pending != NULL);
0042   *pending = false;
0043   return RTEMS_UNSATISFIED;
0044 }
0045 
0046 rtems_status_code bsp_interrupt_raise(rtems_vector_number vector)
0047 {
0048   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0049   return RTEMS_UNSATISFIED;
0050 }
0051 
0052 rtems_status_code bsp_interrupt_clear(rtems_vector_number vector)
0053 {
0054   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0055   return RTEMS_UNSATISFIED;
0056 }
0057 
0058 rtems_status_code bsp_interrupt_vector_is_enabled(
0059   rtems_vector_number vector,
0060   bool               *enabled
0061 )
0062 {
0063   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0064   bsp_interrupt_assert(enabled != NULL);
0065   *enabled = false;
0066   return RTEMS_UNSATISFIED;
0067 }
0068 
0069 rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
0070 {
0071   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0072   XSCALE_INT_ICMR |= 1 << vector;
0073   return RTEMS_SUCCESSFUL;
0074 }
0075 
0076 rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
0077 {
0078   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0079   XSCALE_INT_ICMR  &= ~(1 << vector);
0080   return RTEMS_SUCCESSFUL;
0081 }
0082 
0083 rtems_status_code bsp_interrupt_set_priority(
0084   rtems_vector_number vector,
0085   uint32_t priority
0086 )
0087 {
0088   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0089   return RTEMS_UNSATISFIED;
0090 }
0091 
0092 rtems_status_code bsp_interrupt_get_priority(
0093   rtems_vector_number vector,
0094   uint32_t *priority
0095 )
0096 {
0097   bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0098   bsp_interrupt_assert(priority != NULL);
0099   return RTEMS_UNSATISFIED;
0100 }
0101 
0102 void bsp_interrupt_facility_initialize(void)
0103 {
0104   /* disable all interrupts */
0105   XSCALE_INT_ICMR = 0x0;
0106 
0107   /* Direct the interrupt to IRQ*/
0108   XSCALE_INT_ICLR = 0x0;
0109 
0110   /* Install the IRQ exception handler */
0111   _CPU_ISR_install_vector(ARM_EXCEPTION_IRQ, _ARMV4_Exception_interrupt, NULL);
0112 }