summaryrefslogtreecommitdiffstats
path: root/sys/dev/exca/excavar.h
blob: e79bd6a3d1176732ae086345b17342669521f15a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/* $FreeBSD$ */

/*
 * Copyright (c) 2002 M Warner Losh.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software may be derived from NetBSD i82365.c and other files with
 * the following copyright:
 *
 * Copyright (c) 1997 Marc Horowitz.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by Marc Horowitz.
 * 4. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _SYS_DEV_EXCA_EXCAVAR_H
#define _SYS_DEV_EXCA_EXCAVAR_H

/*
 * Structure to manage the ExCA part of the chip.
 */
struct exca_softc;
typedef uint8_t (exca_getb_fn)(struct exca_softc *, int);
typedef void (exca_putb_fn)(struct exca_softc *, int, uint8_t);

struct exca_softc 
{
	device_t	dev;
	int		memalloc;
	struct		pccard_mem_handle mem[EXCA_MEM_WINS];
	int		ioalloc;
	struct		pccard_io_handle io[EXCA_IO_WINS];
	bus_space_tag_t	bst;
	bus_space_handle_t bsh;
	uint32_t	flags;
#define EXCA_SOCKET_PRESENT	0x00000001
#define EXCA_HAS_MEMREG_WIN	0x00000002
#define EXCA_CARD_OK		0x00000004
#define	EXCA_KTHREAD_RUNNING	0x00000008
#define	EXCA_KTHREAD_DONE	0x00000010
	uint32_t	offset;
	int		chipset;
#define EXCA_CARDBUS	0
#define	EXCA_I82365	1		/* Intel i82365SL-A/B or clone */
#define EXCA_I82365SL_DF 2		/* Intel i82365sl-DF step */
#define	EXCA_VLSI	3		/* VLSI chip */
#define	EXCA_PD6710	4		/* Cirrus logic PD6710 */
#define	EXCA_PD6722	5		/* Cirrus logic PD6722 */
#define EXCA_PD6729	6		/* Cirrus Logic PD6729 */
#define	EXCA_VG365	7		/* Vadem 365 */
#define	EXCA_VG465      8		/* Vadem 465 */
#define	EXCA_VG468	9		/* Vadem 468 */
#define	EXCA_VG469	10		/* Vadem 469 */
#define	EXCA_RF5C296	11		/* Ricoh RF5C296 */
#define	EXCA_RF5C396	12		/* Ricoh RF5C396 */
#define	EXCA_IBM	13		/* IBM clone */
#define	EXCA_IBM_KING	14		/* IBM KING PCMCIA Controller */
#define EXCA_BOGUS	-1		/* Invalid/not present/etc */
	exca_getb_fn	*getb;
	exca_putb_fn	*putb;
	struct proc	*event_thread;
	struct mtx	mtx;
	struct cv	cv;
	device_t	pccarddev;
};

void exca_init(struct exca_softc *sc, device_t dev, 
    bus_space_tag_t, bus_space_handle_t, uint32_t);
void exca_insert(struct exca_softc *sc);
int exca_io_map(struct exca_softc *sc, int width, struct resource *r);
int exca_io_unmap_res(struct exca_softc *sc, struct resource *res);
int exca_is_pcic(struct exca_softc *sc);
int exca_mem_map(struct exca_softc *sc, int kind, struct resource *res);
int exca_mem_set_flags(struct exca_softc *sc, struct resource *res,
    uint32_t flags);
int exca_mem_set_offset(struct exca_softc *sc, struct resource *res,
    uint32_t cardaddr, uint32_t *deltap);
int exca_mem_unmap_res(struct exca_softc *sc, struct resource *res);
int exca_probe_slots(device_t dev, struct exca_softc *exca,
    bus_space_tag_t iot, bus_space_handle_t ioh);
void exca_removal(struct exca_softc *);
void exca_reset(struct exca_softc *, device_t child);

/* bus/device interfaces */
int exca_activate_resource(struct exca_softc *exca, device_t child, int type,
    int rid, struct resource *res);
int exca_deactivate_resource(struct exca_softc *exca, device_t child, int type,
    int rid, struct resource *res);

static __inline uint8_t
exca_getb(struct exca_softc *sc, int reg)
{
	return (sc->getb(sc, reg));
}

static __inline void
exca_putb(struct exca_softc *sc, int reg, uint8_t val)
{
	sc->putb(sc, reg, val);
}

static __inline void
exca_setb(struct exca_softc *sc, int reg, uint8_t mask)
{
	exca_putb(sc, reg, exca_getb(sc, reg) | mask);
}

static __inline void
exca_clrb(struct exca_softc *sc, int reg, uint8_t mask)
{
	exca_putb(sc, reg, exca_getb(sc, reg) & ~mask);
}

#endif /* !_SYS_DEV_EXCA_EXCAVAR_H */
OpenPOWER on IntegriCloud