1/*-
2 * SPDX-License-Identifier: BSD-4-Clause
3 *
4 * Copyright (c) 2005
5 *      Bill Paul <wpaul@windriver.com>.  All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 *    must display the following acknowledgement:
17 *      This product includes software developed by Bill Paul.
18 * 4. Neither the name of the author nor the names of any co-contributors
19 *    may be used to endorse or promote products derived from this software
20 *    without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
26 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 * $FreeBSD$
35 */
36
37#ifndef _RESOURCE_VAR_H_
38#define	_RESOURCE_VAR_H_
39
40typedef int cm_resource_type;
41
42struct physaddr {
43	uint64_t		np_quad;
44#ifdef notdef
45	uint32_t		np_low;
46	uint32_t		np_high;
47#endif
48};
49
50typedef struct physaddr physaddr;
51
52enum interface_type {
53	InterfaceTypeUndefined = -1,
54	Internal,
55	Isa,
56	Eisa,
57	MicroChannel,
58	TurboChannel,
59	PCIBus,
60	VMEBus,
61	NuBus,
62	PCMCIABus,
63	CBus,
64	MPIBus,
65	MPSABus,
66	ProcessorInternal,
67	InternalPowerBus,
68	PNPISABus,
69	PNPBus,
70	MaximumInterfaceType
71};
72
73typedef enum interface_type interface_type;
74
75#define	CmResourceTypeNull                0   /* ResType_All or ResType_None (0x0000) */
76#define	CmResourceTypePort                1   /* ResType_IO (0x0002) */
77#define	CmResourceTypeInterrupt           2   /* ResType_IRQ (0x0004) */
78#define	CmResourceTypeMemory              3   /* ResType_Mem (0x0001) */
79#define	CmResourceTypeDma                 4   /* ResType_DMA (0x0003) */
80#define	CmResourceTypeDeviceSpecific      5   /* ResType_ClassSpecific (0xFFFF) */
81#define	CmResourceTypeBusNumber           6   /* ResType_BusNumber (0x0006) */
82#define	CmResourceTypeMaximum             7
83#define	CmResourceTypeNonArbitrated     128   /* Not arbitrated if 0x80 bit set */
84#define	CmResourceTypeConfigData        128   /* ResType_Reserved (0x8000) */
85#define	CmResourceTypeDevicePrivate     129   /* ResType_DevicePrivate (0x8001) */
86#define	CmResourceTypePcCardConfig      130   /* ResType_PcCardConfig (0x8002) */
87
88enum cm_share_disposition {
89    CmResourceShareUndetermined = 0,    /* Reserved */
90    CmResourceShareDeviceExclusive,
91    CmResourceShareDriverExclusive,
92    CmResourceShareShared
93};
94
95typedef enum cm_share_disposition cm_share_disposition;
96
97/* Define the bit masks for Flags when type is CmResourceTypeInterrupt */
98
99#define	CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE	0
100#define	CM_RESOURCE_INTERRUPT_LATCHED		1
101
102/* Define the bit masks for Flags when type is CmResourceTypeMemory */
103
104#define	CM_RESOURCE_MEMORY_READ_WRITE		0x0000
105#define	CM_RESOURCE_MEMORY_READ_ONLY		0x0001
106#define	CM_RESOURCE_MEMORY_WRITE_ONLY		0x0002
107#define	CM_RESOURCE_MEMORY_PREFETCHABLE		0x0004
108
109#define	CM_RESOURCE_MEMORY_COMBINEDWRITE	0x0008
110#define	CM_RESOURCE_MEMORY_24			0x0010
111#define	CM_RESOURCE_MEMORY_CACHEABLE		0x0020
112
113/* Define the bit masks for Flags when type is CmResourceTypePort */
114
115#define	CM_RESOURCE_PORT_MEMORY			0x0000
116#define	CM_RESOURCE_PORT_IO			0x0001
117#define	CM_RESOURCE_PORT_10_BIT_DECODE		0x0004
118#define	CM_RESOURCE_PORT_12_BIT_DECODE		0x0008
119#define	CM_RESOURCE_PORT_16_BIT_DECODE		0x0010
120#define	CM_RESOURCE_PORT_POSITIVE_DECODE	0x0020
121#define	CM_RESOURCE_PORT_PASSIVE_DECODE		0x0040
122#define	CM_RESOURCE_PORT_WINDOW_DECODE		0x0080
123
124/* Define the bit masks for Flags when type is CmResourceTypeDma */
125
126#define	CM_RESOURCE_DMA_8			0x0000
127#define	CM_RESOURCE_DMA_16			0x0001
128#define	CM_RESOURCE_DMA_32			0x0002
129#define	CM_RESOURCE_DMA_8_AND_16		0x0004
130#define	CM_RESOURCE_DMA_BUS_MASTER		0x0008
131#define	CM_RESOURCE_DMA_TYPE_A			0x0010
132#define	CM_RESOURCE_DMA_TYPE_B			0x0020
133#define	CM_RESOURCE_DMA_TYPE_F			0x0040
134
135struct cm_partial_resource_desc {
136	uint8_t			cprd_type;
137	uint8_t			cprd_sharedisp;
138	uint16_t		cprd_flags;
139	union {
140		struct {
141			physaddr		cprd_start;
142			uint32_t		cprd_len;
143		} cprd_generic;
144		struct {
145			physaddr		cprd_start;
146			uint32_t		cprd_len;
147		} cprd_port;
148		struct {
149			uint32_t		cprd_level;
150			uint32_t		cprd_vector;
151			uint32_t		cprd_affinity;
152		} cprd_intr;
153		struct {
154			physaddr		cprd_start;
155			uint32_t		cprd_len;
156		} cprd_mem;
157		struct {
158			uint32_t		cprd_chan;
159			uint32_t		cprd_port;
160			uint32_t		cprd_rsvd;
161		} cprd_dmachan;
162		struct {
163			uint32_t		cprd_data[3];
164		} cprd_devpriv;
165		struct {
166			uint32_t		cprd_datasize;
167			uint32_t		cprd_rsvd1;
168			uint32_t		cprd_rsvd2;
169		} cprd_devspec;
170	} u __attribute__((packed));
171};
172
173typedef struct cm_partial_resource_desc cm_partial_resource_desc;
174
175struct cm_partial_resource_list {
176	uint16_t		cprl_version;
177	uint16_t		cprl_revision;
178	uint32_t		cprl_count;
179	cm_partial_resource_desc	cprl_partial_descs[1];
180};
181
182typedef struct cm_partial_resource_list cm_partial_resource_list;
183
184struct cm_full_resource_list {
185	interface_type		cfrl_type;
186	uint32_t		cfrl_busnum;
187	cm_partial_resource_desc	cfrl_partiallist;
188};
189
190typedef struct cm_full_resource_list cm_full_resource_list;
191
192struct cm_resource_list {
193	uint32_t		crl_count;
194	cm_full_resource_list	crl_rlist;
195};
196
197typedef struct cm_resource_list cm_resource_list;
198
199typedef cm_partial_resource_list ndis_resource_list;
200
201#endif /* _RESOURCE_VAR_H_ */
202