Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenhardware.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS NDIS library 00004 * FILE: ndis/hardware.c 00005 * PURPOSE: Hardware related routines 00006 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net) 00007 * Vizzini (vizzini@plasmic.com) 00008 * REVISIONS: 00009 * CSH 01/08-2000 Created 00010 * 25 Aug 2003 Vizzini - NDIS4/5 and PnP additions 00011 * 3 Oct 2003 Vizzini - formatting and minor bugfixes 00012 * 00013 */ 00014 00015 #include "ndissys.h" 00016 00017 00018 /* 00019 * @implemented 00020 */ 00021 ULONG 00022 EXPORT 00023 NdisImmediateReadPciSlotInformation( 00024 IN NDIS_HANDLE WrapperConfigurationContext, 00025 IN ULONG SlotNumber, 00026 IN ULONG Offset, 00027 IN PVOID Buffer, 00028 IN ULONG Length) 00029 { 00030 PNDIS_WRAPPER_CONTEXT WrapperContext = (PNDIS_WRAPPER_CONTEXT)WrapperConfigurationContext; 00031 /* Slot number is ignored. */ 00032 return HalGetBusDataByOffset(PCIConfiguration, WrapperContext->BusNumber, 00033 WrapperContext->SlotNumber, Buffer, Offset, Length); 00034 } 00035 00036 00037 /* 00038 * @implemented 00039 */ 00040 ULONG 00041 EXPORT 00042 NdisImmediateWritePciSlotInformation( 00043 IN NDIS_HANDLE WrapperConfigurationContext, 00044 IN ULONG SlotNumber, 00045 IN ULONG Offset, 00046 IN PVOID Buffer, 00047 IN ULONG Length) 00048 { 00049 PNDIS_WRAPPER_CONTEXT WrapperContext = (PNDIS_WRAPPER_CONTEXT)WrapperConfigurationContext; 00050 /* Slot number is ignored. */ 00051 return HalSetBusDataByOffset(PCIConfiguration, WrapperContext->BusNumber, 00052 WrapperContext->SlotNumber, Buffer, Offset, Length); 00053 } 00054 00055 00056 /* 00057 * @implemented 00058 */ 00059 NDIS_STATUS 00060 EXPORT 00061 NdisMPciAssignResources( 00062 IN NDIS_HANDLE MiniportAdapterHandle, 00063 IN ULONG SlotNumber, 00064 OUT PNDIS_RESOURCE_LIST *AssignedResources) 00065 { 00066 PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle; 00067 00068 if (Adapter->NdisMiniportBlock.BusType != NdisInterfacePci || 00069 Adapter->NdisMiniportBlock.AllocatedResources == NULL) 00070 { 00071 NDIS_DbgPrint(MIN_TRACE, ("Bad bus type or no resources\n")); 00072 *AssignedResources = NULL; 00073 return NDIS_STATUS_FAILURE; 00074 } 00075 00076 *AssignedResources = &Adapter->NdisMiniportBlock.AllocatedResources->List[0].PartialResourceList; 00077 00078 return NDIS_STATUS_SUCCESS; 00079 } 00080 00081 /* 00082 * @implemented 00083 */ 00084 NDIS_STATUS 00085 EXPORT 00086 NdisPciAssignResources( 00087 IN NDIS_HANDLE NdisMacHandle, 00088 IN NDIS_HANDLE NdisWrapperHandle, 00089 IN NDIS_HANDLE WrapperConfigurationContext, 00090 IN ULONG SlotNumber, 00091 OUT PNDIS_RESOURCE_LIST *AssignedResources) 00092 { 00093 PNDIS_WRAPPER_CONTEXT WrapperContext = (PNDIS_WRAPPER_CONTEXT)WrapperConfigurationContext; 00094 PLOGICAL_ADAPTER Adapter = WrapperContext->DeviceObject->DeviceExtension; 00095 00096 return NdisMPciAssignResources(Adapter, 00097 SlotNumber, 00098 AssignedResources); 00099 } 00100 /* 00101 * @implemented 00102 */ 00103 VOID 00104 EXPORT 00105 NdisMQueryAdapterResources( 00106 OUT PNDIS_STATUS Status, 00107 IN NDIS_HANDLE WrapperConfigurationContext, 00108 OUT PNDIS_RESOURCE_LIST ResourceList, 00109 IN OUT PUINT BufferSize) 00110 /* 00111 * FUNCTION: returns a nic's hardware resources 00112 * ARGUMENTS: 00113 * Status: on return, contains the status of the operation 00114 * WrapperConfigurationContext: handle input to MiniportInitialize 00115 * ResourceList: on return, contains the list of resources for the nic 00116 * BufferSize: size of ResourceList 00117 * NOTES: 00118 * - Caller must allocate Status and ResourceList 00119 * - Must be called at IRQL = PASSIVE_LEVEL; 00120 */ 00121 { 00122 PNDIS_WRAPPER_CONTEXT WrapperContext = (PNDIS_WRAPPER_CONTEXT)WrapperConfigurationContext; 00123 PLOGICAL_ADAPTER Adapter = WrapperContext->DeviceObject->DeviceExtension; 00124 ULONG ResourceListSize; 00125 00126 PAGED_CODE(); 00127 ASSERT((Status && ResourceList) || (BufferSize && *BufferSize == 0)); 00128 00129 NDIS_DbgPrint(MAX_TRACE, ("Called\n")); 00130 00131 if (Adapter->NdisMiniportBlock.AllocatedResources == NULL) 00132 { 00133 NDIS_DbgPrint(MIN_TRACE, ("No allocated resources!\n")); 00134 *Status = NDIS_STATUS_FAILURE; 00135 return; 00136 } 00137 00138 ResourceListSize = 00139 FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors) + 00140 Adapter->NdisMiniportBlock.AllocatedResources->List[0].PartialResourceList.Count * 00141 sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); 00142 00143 if (*BufferSize >= ResourceListSize) 00144 { 00145 RtlCopyMemory(ResourceList, 00146 &Adapter->NdisMiniportBlock.AllocatedResources->List[0].PartialResourceList, 00147 ResourceListSize); 00148 *BufferSize = ResourceListSize; 00149 *Status = NDIS_STATUS_SUCCESS; 00150 } 00151 else 00152 { 00153 *BufferSize = ResourceListSize; 00154 *Status = NDIS_STATUS_RESOURCES; 00155 } 00156 } 00157 00158 00159 /* 00160 * @implemented 00161 */ 00162 NDIS_STATUS 00163 EXPORT 00164 NdisQueryMapRegisterCount( 00165 IN NDIS_INTERFACE_TYPE BusType, 00166 OUT PUINT MapRegisterCount) 00167 /* 00168 * On X86 (and all other current hardware), map registers aren't real hardware, 00169 * and there is no real limit to the number that can be allocated. 00170 * As such, we do what microsoft does on the x86 hals and return as follows 00171 */ 00172 { 00173 return NDIS_STATUS_NOT_SUPPORTED; 00174 } 00175 00176 00177 /* 00178 * @implemented 00179 */ 00180 ULONG 00181 EXPORT 00182 NdisReadPciSlotInformation( 00183 IN NDIS_HANDLE NdisAdapterHandle, 00184 IN ULONG SlotNumber, 00185 IN ULONG Offset, 00186 IN PVOID Buffer, 00187 IN ULONG Length) 00188 { 00189 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle; 00190 /* Slot number is ignored since W2K for all NDIS drivers. */ 00191 return HalGetBusDataByOffset(PCIConfiguration, 00192 Adapter->NdisMiniportBlock.BusNumber, Adapter->NdisMiniportBlock.SlotNumber, 00193 Buffer, Offset, Length); 00194 } 00195 00196 00197 /* 00198 * @implemented 00199 */ 00200 ULONG 00201 EXPORT 00202 NdisWritePciSlotInformation( 00203 IN NDIS_HANDLE NdisAdapterHandle, 00204 IN ULONG SlotNumber, 00205 IN ULONG Offset, 00206 IN PVOID Buffer, 00207 IN ULONG Length) 00208 { 00209 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle; 00210 /* Slot number is ignored since W2K for all NDIS drivers. */ 00211 return HalSetBusDataByOffset(PCIConfiguration, 00212 Adapter->NdisMiniportBlock.BusNumber, Adapter->NdisMiniportBlock.SlotNumber, 00213 Buffer, Offset, Length); 00214 } 00215 00216 00217 /* 00218 * @implemented 00219 */ 00220 VOID 00221 EXPORT 00222 NdisReadEisaSlotInformation( 00223 OUT PNDIS_STATUS Status, 00224 IN NDIS_HANDLE WrapperConfigurationContext, 00225 OUT PUINT SlotNumber, 00226 OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData) 00227 { 00228 PNDIS_WRAPPER_CONTEXT Wrapper = WrapperConfigurationContext; 00229 ULONG Ret; 00230 PVOID Buffer; 00231 00232 NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); 00233 00234 /* We are called only at PASSIVE_LEVEL */ 00235 Buffer = ExAllocatePool(PagedPool, sizeof(NDIS_EISA_FUNCTION_INFORMATION)); 00236 if (!Buffer) { 00237 NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); 00238 *Status = NDIS_STATUS_RESOURCES; 00239 return; 00240 } 00241 00242 Ret = HalGetBusData(EisaConfiguration, 00243 Wrapper->BusNumber, 00244 Wrapper->SlotNumber, 00245 Buffer, 00246 sizeof(NDIS_EISA_FUNCTION_INFORMATION)); 00247 00248 if (Ret == 0 || Ret == 2) { 00249 NDIS_DbgPrint(MIN_TRACE, ("HalGetBusData failed.\n")); 00250 ExFreePool(Buffer); 00251 *Status = NDIS_STATUS_FAILURE; 00252 return; 00253 } 00254 00255 *SlotNumber = Wrapper->SlotNumber; 00256 00257 RtlCopyMemory(EisaData, Buffer, sizeof(NDIS_EISA_FUNCTION_INFORMATION)); 00258 00259 ExFreePool(Buffer); 00260 00261 *Status = NDIS_STATUS_SUCCESS; 00262 } 00263 00264 00265 /* 00266 * @implemented 00267 */ 00268 ULONG 00269 EXPORT 00270 NdisReadPcmciaAttributeMemory( 00271 IN NDIS_HANDLE NdisAdapterHandle, 00272 IN ULONG Offset, 00273 IN PVOID Buffer, 00274 IN ULONG Length) 00275 /* 00276 * FUNCTION: 00277 * ARGUMENTS: 00278 * NOTES: 00279 * NDIS 5.0 00280 */ 00281 { 00282 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle; 00283 00284 NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); 00285 00286 return HalGetBusDataByOffset(PCMCIAConfiguration, 00287 Adapter->NdisMiniportBlock.BusNumber, 00288 Adapter->NdisMiniportBlock.SlotNumber, 00289 Buffer, 00290 Offset, 00291 Length); 00292 } 00293 00294 00295 /* 00296 * @implemented 00297 */ 00298 ULONG 00299 EXPORT 00300 NdisWritePcmciaAttributeMemory( 00301 IN NDIS_HANDLE NdisAdapterHandle, 00302 IN ULONG Offset, 00303 IN PVOID Buffer, 00304 IN ULONG Length) 00305 /* 00306 * FUNCTION: 00307 * ARGUMENTS: 00308 * NOTES: 00309 * NDIS 5.0 00310 */ 00311 { 00312 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle; 00313 00314 NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); 00315 00316 return HalSetBusDataByOffset(PCMCIAConfiguration, 00317 Adapter->NdisMiniportBlock.BusNumber, 00318 Adapter->NdisMiniportBlock.SlotNumber, 00319 Buffer, 00320 Offset, 00321 Length); 00322 } 00323 00324 /* 00325 * @implemented 00326 */ 00327 VOID 00328 EXPORT 00329 NdisOverrideBusNumber( 00330 IN NDIS_HANDLE WrapperConfigurationContext, 00331 IN NDIS_HANDLE MiniportAdapterHandle OPTIONAL, 00332 IN ULONG BusNumber) 00333 /* 00334 * FUNCTION: 00335 * ARGUMENTS: 00336 * NOTES: 00337 * NDIS 4.0 00338 */ 00339 { 00340 PNDIS_WRAPPER_CONTEXT Wrapper = WrapperConfigurationContext; 00341 PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle; 00342 00343 NDIS_DbgPrint(MAX_TRACE, ("Called.\n")); 00344 00345 Wrapper->BusNumber = BusNumber; 00346 00347 if (Adapter) 00348 Adapter->NdisMiniportBlock.BusNumber = BusNumber; 00349 } 00350 00351 /* EOF */ Generated on Sat May 26 2012 04:17:52 for ReactOS by
1.7.6.1
|