1178173Simp/*-
2178173Simp * Copyright (c) 2005 Olivier Houchard.  All rights reserved.
3178173Simp *
4178173Simp * Redistribution and use in source and binary forms, with or without
5178173Simp * modification, are permitted provided that the following conditions
6178173Simp * are met:
7178173Simp * 1. Redistributions of source code must retain the above copyright
8178173Simp *    notice, this list of conditions and the following disclaimer.
9178173Simp * 2. Redistributions in binary form must reproduce the above copyright
10178173Simp *    notice, this list of conditions and the following disclaimer in the
11178173Simp *    documentation and/or other materials provided with the distribution.
12178173Simp *
13178173Simp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14178173Simp * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15178173Simp * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16178173Simp * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17178173Simp * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18178173Simp * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19178173Simp * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20178173Simp * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21178173Simp * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22178173Simp * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23178173Simp */
24178173Simp
25178173Simp#include <sys/cdefs.h>
26178173Simp__FBSDID("$FreeBSD$");
27178173Simp
28178173Simp#include <sys/param.h>
29178173Simp#include <sys/systm.h>
30178173Simp#include <sys/bus.h>
31178173Simp#include <sys/kernel.h>
32178173Simp#include <sys/malloc.h>
33178173Simp#include <sys/module.h>
34178173Simp#include <sys/rman.h>
35178173Simp#include <sys/types.h>
36178173Simp
37178173Simp#include <vm/vm.h>
38178173Simp#include <vm/vm_kern.h>
39178173Simp#include <vm/pmap.h>
40178173Simp#include <vm/vm_page.h>
41178173Simp#include <vm/vm_extern.h>
42178173Simp
43178173Simp#include <dev/ic/i8259.h>
44178173Simp
45178173Simp#include <machine/bus.h>
46178173Simp#include <machine/intr_machdep.h>
47178173Simp
48182901Sgonzo#include <mips/malta/gtvar.h>
49178173Simp
50178173Simpstatic int
51178173Simpgt_probe(device_t dev)
52178173Simp{
53178173Simp	device_set_desc(dev, "GT64120 chip");
54265999Sian	return (BUS_PROBE_NOWILDCARD);
55178173Simp}
56178173Simp
57178173Simpstatic void
58178173Simpgt_identify(driver_t *drv, device_t parent)
59178173Simp{
60178173Simp	BUS_ADD_CHILD(parent, 0, "gt", 0);
61178173Simp}
62178173Simp
63178173Simpstatic int
64178173Simpgt_attach(device_t dev)
65178173Simp{
66178173Simp	struct gt_softc *sc = device_get_softc(dev);
67178173Simp	sc->dev = dev;
68178173Simp
69178173Simp	device_add_child(dev, "pcib", 0);
70178173Simp	bus_generic_probe(dev);
71178173Simp	bus_generic_attach(dev);
72178173Simp
73178173Simp
74178173Simp	return (0);
75178173Simp}
76178173Simp
77178173Simpstatic struct resource *
78178173Simpgt_alloc_resource(device_t dev, device_t child, int type, int *rid,
79178173Simp    u_long start, u_long end, u_long count, u_int flags)
80178173Simp{
81178173Simp	return (BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
82178173Simp		    type, rid, start, end, count, flags));
83178173Simp
84178173Simp}
85178173Simp
86178173Simpstatic int
87178173Simpgt_setup_intr(device_t dev, device_t child,
88178173Simp    struct resource *ires, int flags, driver_filter_t *filt,
89178173Simp    driver_intr_t *intr, void *arg, void **cookiep)
90178173Simp{
91178173Simp	return BUS_SETUP_INTR(device_get_parent(dev), child, ires, flags,
92178173Simp	    filt, intr, arg, cookiep);
93178173Simp}
94178173Simp
95178173Simpstatic int
96178173Simpgt_teardown_intr(device_t dev, device_t child, struct resource *res,
97178173Simp    void *cookie)
98178173Simp{
99178173Simp	return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, res, cookie));
100178173Simp}
101178173Simp
102178173Simpstatic int
103178173Simpgt_activate_resource(device_t dev, device_t child, int type, int rid,
104178173Simp    struct resource *r)
105178173Simp{
106178173Simp	return (BUS_ACTIVATE_RESOURCE(device_get_parent(dev), child,
107178173Simp		    type, rid, r));
108178173Simp}
109178173Simp
110178173Simpstatic device_method_t gt_methods[] = {
111178173Simp	DEVMETHOD(device_probe, gt_probe),
112178173Simp	DEVMETHOD(device_identify, gt_identify),
113178173Simp	DEVMETHOD(device_attach, gt_attach),
114178173Simp
115178173Simp	DEVMETHOD(bus_setup_intr, gt_setup_intr),
116178173Simp	DEVMETHOD(bus_teardown_intr, gt_teardown_intr),
117178173Simp	DEVMETHOD(bus_alloc_resource, gt_alloc_resource),
118178173Simp	DEVMETHOD(bus_activate_resource, gt_activate_resource),
119178173Simp
120227843Smarius	DEVMETHOD_END
121178173Simp};
122178173Simp
123178173Simpstatic driver_t gt_driver = {
124178173Simp	"gt",
125178173Simp	gt_methods,
126178173Simp	sizeof(struct gt_softc),
127178173Simp};
128178173Simpstatic devclass_t gt_devclass;
129178173Simp
130178173SimpDRIVER_MODULE(gt, nexus, gt_driver, gt_devclass, 0, 0);
131