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