1 /* $NetBSD: mainbus.c,v 1.15 2009/03/14 14:45:56 dsl Exp $ */
4 * Copyright (c) 1994,1995 Mark Brinicombe.
5 * Copyright (c) 1994 Brini.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by Brini.
19 * 4. The name of the company nor the name of the author may be used to
20 * endorse or promote products derived from this software without specific
21 * prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED
24 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26 * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * RiscBSD kernel project
39 * mainbus configuration
44 #include <sys/cdefs.h>
45 __KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.15 2009/03/14 14:45:56 dsl Exp $");
47 #include <sys/param.h>
48 #include <sys/systm.h>
49 #include <sys/kernel.h>
51 #include <sys/malloc.h>
52 #include <sys/device.h>
54 #if defined(arm32) /* XXX */
55 #include <machine/io.h>
57 #include <machine/bus.h>
58 #include <arm/mainbus/mainbus.h>
62 * mainbus is a root device so we a bus space tag to pass to children
64 * The tag is provided by mainbus_io.c and mainbus_io_asm.S
67 extern struct bus_space mainbus_bs_tag
;
69 /* Prototypes for functions provided */
71 static int mainbusmatch(struct device
*, struct cfdata
*, void *);
72 static void mainbusattach(struct device
*, struct device
*, void *);
73 static int mainbusprint(void *aux
, const char *mainbus
);
74 static int mainbussearch(struct device
*, struct cfdata
*,
77 /* attach and device structures for the device */
79 CFATTACH_DECL(mainbus
, sizeof(struct device
),
80 mainbusmatch
, mainbusattach
, NULL
, NULL
);
83 * int mainbusmatch(struct device *parent, struct cfdata *cf, void *aux)
85 * Always match for unit 0
89 mainbusmatch(struct device
*parent
, struct cfdata
*cf
, void *aux
)
95 * int mainbusprint(void *aux, const char *mainbus)
97 * print routine used during config of children
101 mainbusprint(void *aux
, const char *mainbus
)
103 struct mainbus_attach_args
*mb
= aux
;
105 if (mb
->mb_iobase
!= MAINBUSCF_BASE_DEFAULT
)
106 aprint_normal(" base 0x%x", mb
->mb_iobase
);
107 if (mb
->mb_iosize
> 1)
108 aprint_normal("-0x%x", mb
->mb_iobase
+ mb
->mb_iosize
- 1);
109 if (mb
->mb_irq
!= -1)
110 aprint_normal(" irq %d", mb
->mb_irq
);
111 if (mb
->mb_drq
!= -1)
112 aprint_normal(" drq 0x%08x", mb
->mb_drq
);
114 /* XXXX print flags */
119 * int mainbussearch(struct device *parent, struct device *self, void *aux)
121 * search routine used during the config of children
125 mainbussearch(struct device
*parent
, struct cfdata
*cf
, const int *ldesc
, void *aux
)
127 struct mainbus_attach_args mb
;
131 if (cf
->cf_loc
[MAINBUSCF_BASE
] == MAINBUSCF_BASE_DEFAULT
) {
132 mb
.mb_iobase
= MAINBUSCF_BASE_DEFAULT
;
134 mb
.mb_drq
= MAINBUSCF_DACK_DEFAULT
;
135 mb
.mb_irq
= MAINBUSCF_IRQ_DEFAULT
;
137 mb
.mb_iobase
= cf
->cf_loc
[MAINBUSCF_BASE
];
138 #if defined(arm32) && !defined(EB7500ATX)
139 mb
.mb_iobase
+= IO_CONF_BASE
;
141 mb
.mb_iosize
= cf
->cf_loc
[MAINBUSCF_SIZE
];
142 mb
.mb_drq
= cf
->cf_loc
[MAINBUSCF_DACK
];
143 mb
.mb_irq
= cf
->cf_loc
[MAINBUSCF_IRQ
];
145 mb
.mb_iot
= &mainbus_bs_tag
;
148 if (config_match(parent
, cf
, &mb
) > 0) {
149 config_attach(parent
, cf
, &mb
, mainbusprint
);
150 /* tryagain = (cf->cf_fstate == FSTATE_STAR);*/
158 * void mainbusattach(struct device *parent, struct device *self, void *aux)
160 * probe and attach all children
164 mainbusattach(struct device
*parent
, struct device
*self
, void *aux
)
169 config_search_ia(mainbussearch
, self
, "mainbus", NULL
);
172 /* End of mainbus.c */