1/*	$NetBSD: sbusvar.h,v 1.26 2008/05/17 18:09:03 macallan Exp $ */
2
3/*-
4 * Copyright (c) 1998 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Paul Kranenburg.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef _SBUS_VAR_H
33#define _SBUS_VAR_H
34
35#if defined(_KERNEL_OPT) && (defined(__sparc__) || defined(__sparc64__))
36#include "opt_sparc_arch.h"
37#endif
38
39#include <machine/bsd_openprom.h>
40
41struct sbus_softc;
42
43typedef u_int32_t sbus_slot_t;
44typedef u_int32_t sbus_offset_t;
45
46/*
47 * Sbus driver attach arguments.
48 */
49struct sbus_attach_args {
50	int		sa_placeholder;	/* for obio attach args sharing */
51	bus_space_tag_t	sa_bustag;
52	bus_dma_tag_t	sa_dmatag;
53	char		*sa_name;	/* PROM node name */
54	int		sa_node;	/* PROM handle */
55	struct openprom_addr *sa_reg;	/* Sbus register space for device */
56	int		sa_nreg;	/* Number of Sbus register spaces */
57#define sa_slot		sa_reg[0].oa_space
58#define sa_offset	sa_reg[0].oa_base
59#define sa_size		sa_reg[0].oa_size
60
61	struct openprom_intr *sa_intr;	/* Sbus interrupts for device */
62	int		sa_nintr;	/* Number of interrupts */
63#define sa_pri		sa_intr[0].oi_pri
64
65	u_int32_t	*sa_promvaddrs;/* PROM-supplied virtual addresses -- 32-bit */
66	int		sa_npromvaddrs;	/* Number of PROM VAs */
67#define sa_promvaddr	sa_promvaddrs[0]
68	int		sa_frequency;	/* SBus clockrate */
69};
70
71/* sbus_attach_internal() is also used from obio.c */
72void	sbus_attach_common(struct sbus_softc *, const char *, int,
73				const char * const *);
74int	sbus_print(void *, const char *);
75
76int	sbus_setup_attach_args(
77		struct sbus_softc *,
78		bus_space_tag_t,
79		bus_dma_tag_t,
80		int,			/*node*/
81		struct sbus_attach_args *);
82
83void	sbus_destroy_attach_args(struct sbus_attach_args *);
84
85#define sbus_bus_map(tag, slot, offset, sz, flags, hp) \
86	bus_space_map(tag, BUS_ADDR(slot,offset), sz, flags, hp)
87bus_addr_t	sbus_bus_addr(bus_space_tag_t, u_int, u_int);
88void	sbus_promaddr_to_handle(bus_space_tag_t, u_int,
89	bus_space_handle_t *);
90
91#if notyet
92/* variables per Sbus */
93struct sbus_softc {
94	device_t sc_dev;		/* base device */
95	bus_space_tag_t	sc_bustag;
96	bus_dma_tag_t	sc_dmatag;
97	int	sc_clockfreq;		/* clock frequency (in Hz) */
98	struct	openprom_range *sc_range;
99	int	sc_nrange;
100	int	sc_burst;		/* burst transfer sizes supported */
101	/* machdep stuff follows here */
102	int	*sc_intr2ipl;		/* Interrupt level translation */
103};
104#endif
105
106
107/*
108 * PROM-reported DMA burst sizes for the SBus
109 */
110#define SBUS_BURST_1	0x1
111#define SBUS_BURST_2	0x2
112#define SBUS_BURST_4	0x4
113#define SBUS_BURST_8	0x8
114#define SBUS_BURST_16	0x10
115#define SBUS_BURST_32	0x20
116#define SBUS_BURST_64	0x40
117
118/* We use #defined(SUN4*) here while the ports are in flux */
119#if defined(SUN4) || defined(SUN4C) || defined(SUN4M) || defined(SUN4D)
120#include <sparc/dev/sbusvar.h>
121#elif defined(SUN4U)
122#include <sparc64/dev/sbusvar.h>
123#endif
124
125#endif /* _SBUS_VAR_H */
126