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