]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/arm/annapurna/alpine/alpine_common.c
MFV 354917, 354918, 354919
[FreeBSD/FreeBSD.git] / sys / arm / annapurna / alpine / alpine_common.c
1 /*-
2  * Copyright (c) 2013 Ruslan Bukin <br@bsdpad.com>
3  * Copyright (c) 2015 Semihalf.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  *
27  */
28
29 #include <sys/cdefs.h>
30 __FBSDID("$FreeBSD$");
31
32 #include "opt_platform.h"
33
34 #include <sys/param.h>
35 #include <sys/systm.h>
36 #include <sys/bus.h>
37 #include <sys/kernel.h>
38
39 #include <dev/fdt/fdt_common.h>
40 #include <dev/ofw/openfirm.h>
41
42 #include <machine/bus.h>
43 #include <machine/fdt.h>
44 #include <machine/intr.h>
45
46 #ifndef INTRNG
47 static int alpine_pic_decode_fdt(uint32_t iparent, uint32_t *intr,
48     int *interrupt, int *trig, int *pol);
49
50 static int
51 alpine_pic_decode_fdt(uint32_t iparent, uint32_t *intr, int *interrupt,
52     int *trig, int *pol)
53 {
54         int rv = 0;
55
56         rv = gic_decode_fdt(iparent, intr, interrupt, trig, pol);
57         if (rv == 0) {
58                 /* This was recognized as our PIC and decoded. */
59                 interrupt = FDT_MAP_IRQ(iparent, interrupt);
60
61                 /* Configure the interrupt if callback provided */
62                 if (arm_config_irq)
63                         (*arm_config_irq)(*interrupt, *trig, *pol);
64         }
65         return (rv);
66 }
67
68 fdt_pic_decode_t fdt_pic_table[] = {
69         &alpine_pic_decode_fdt,
70         NULL
71 };
72 #endif