Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:59

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  * RTEMS virtex BSP
0005  *
0006  * This file declares constants of the interrupt controller.
0007  */
0008 
0009 /*
0010  * Copyright (c) 2007 embedded brains GmbH & Co. KG
0011  *
0012  * Redistribution and use in source and binary forms, with or without
0013  * modification, are permitted provided that the following conditions
0014  * are met:
0015  * 1. Redistributions of source code must retain the above copyright
0016  *    notice, this list of conditions and the following disclaimer.
0017  * 2. Redistributions in binary form must reproduce the above copyright
0018  *    notice, this list of conditions and the following disclaimer in the
0019  *    documentation and/or other materials provided with the distribution.
0020  *
0021  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0022  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0024  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0025  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0026  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0027  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0028  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0029  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0030  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0031  * POSSIBILITY OF SUCH DAMAGE.
0032  */
0033 
0034 #ifndef VIRTEX_IRQ_IRQ_H
0035 #define VIRTEX_IRQ_IRQ_H
0036 
0037 #include <rtems/irq.h>
0038 #include <rtems/irq-extension.h>
0039 #include <bsp/opbintctrl.h>
0040 
0041 /*
0042  * the following definitions specify the indices used
0043  * to interface the interrupt handler API
0044  */
0045 
0046 /*
0047  * Peripheral IRQ handlers related definitions
0048  */
0049 #define BSP_OPBINTC_PER_IRQ_NUMBER  XPAR_INTC_MAX_NUM_INTR_INPUTS
0050 #define BSP_OPBINTC_IRQ_LOWEST_OFFSET   0
0051 #define BSP_OPBINTC_IRQ_MAX_OFFSET      (BSP_OPBINTC_IRQ_LOWEST_OFFSET\
0052                                          +BSP_OPBINTC_PER_IRQ_NUMBER-1)
0053 
0054 #define BSP_IS_OPBINTC_IRQ(irqnum)              \
0055           (((irqnum) >= BSP_OPBINTC_IRQ_LOWEST_OFFSET) &&   \
0056        ((irqnum) <= BSP_OPBINTC_IRQ_MAX_OFFSET))
0057 /*
0058  * Processor IRQ handlers related definitions
0059  */
0060 #define BSP_PROCESSOR_IRQ_NUMBER        3
0061 #define BSP_PROCESSOR_IRQ_LOWEST_OFFSET (BSP_OPBINTC_IRQ_MAX_OFFSET+1)
0062 #define BSP_PROCESSOR_IRQ_MAX_OFFSET    (BSP_PROCESSOR_IRQ_LOWEST_OFFSET\
0063                                          +BSP_PROCESSOR_IRQ_NUMBER-1)
0064 
0065 #define BSP_IS_PROCESSOR_IRQ(irqnum)                \
0066           (((irqnum) >= BSP_PROCESSOR_IRQ_LOWEST_OFFSET) && \
0067        ((irqnum) <= BSP_PROCESSOR_IRQ_MAX_OFFSET))
0068 /*
0069  * Summary
0070  */
0071 #define BSP_IRQ_NUMBER                  (BSP_PROCESSOR_IRQ_MAX_OFFSET+1)
0072 #define BSP_LOWEST_OFFSET       BSP_OPBINTC_IRQ_LOWEST_OFFSET
0073 #define BSP_MAX_OFFSET                  BSP_PROCESSOR_IRQ_MAX_OFFSET
0074 
0075 #define BSP_IS_VALID_IRQ(irqnum)    \
0076           (BSP_IS_PROCESSOR_IRQ(irqnum) \
0077            || BSP_IS_OPBINTC_IRQ(irqnum))
0078 
0079 #define BSP_INTERRUPT_VECTOR_COUNT (BSP_PROCESSOR_IRQ_MAX_OFFSET + 1)
0080 
0081 #ifndef ASM
0082 #ifdef __cplusplus
0083 extern "C" {
0084 #endif
0085 
0086 /*
0087  * index table for the module specific handlers, a few entries are only placeholders
0088  */
0089   typedef enum {
0090     BSP_OPBINTC_IRQ_FIRST   = BSP_OPBINTC_IRQ_LOWEST_OFFSET,
0091     /*
0092      * Note: for this BSP, the peripheral names are derived
0093      * from the Xilinx parameter file
0094      */
0095     BSP_OPBINTC_IRQ_LAST    = BSP_OPBINTC_IRQ_MAX_OFFSET,
0096     BSP_EXT               = BSP_PROCESSOR_IRQ_LOWEST_OFFSET + 0,
0097     BSP_PIT               = BSP_PROCESSOR_IRQ_LOWEST_OFFSET + 1,
0098     BSP_CRIT              = BSP_PROCESSOR_IRQ_LOWEST_OFFSET + 2
0099   } rtems_irq_symbolic_name;
0100 
0101 #define BSP_OPBINTC_XPAR(xname) (BSP_OPBINTC_IRQ_LOWEST_OFFSET+xname)
0102 
0103 #ifdef __cplusplus
0104 }
0105 #endif
0106 #endif /* ASM */
0107 
0108 #endif /* VIRTEX_IRQ_IRQ_H */