ReactOS 0.4.17-dev-573-g8315b8c
hardware.c File Reference
#include "ndissys.h"
#include <wdmguid.h>
Include dependency graph for hardware.c:

Go to the source code of this file.

Functions

NTSTATUS NdisQueryPciBusInterface (IN PLOGICAL_ADAPTER Adapter)
 
ULONG EXPORT NdisImmediateReadPciSlotInformation (IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SlotNumber, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length)
 
ULONG EXPORT NdisImmediateWritePciSlotInformation (IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SlotNumber, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length)
 
NDIS_STATUS EXPORT NdisMPciAssignResources (IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG SlotNumber, OUT PNDIS_RESOURCE_LIST *AssignedResources)
 
NDIS_STATUS EXPORT NdisPciAssignResources (IN NDIS_HANDLE NdisMacHandle, IN NDIS_HANDLE NdisWrapperHandle, IN NDIS_HANDLE WrapperConfigurationContext, IN ULONG SlotNumber, OUT PNDIS_RESOURCE_LIST *AssignedResources)
 
VOID EXPORT NdisMQueryAdapterResources (OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PNDIS_RESOURCE_LIST ResourceList, IN OUT PUINT BufferSize)
 
NDIS_STATUS EXPORT NdisQueryMapRegisterCount (IN NDIS_INTERFACE_TYPE BusType, OUT PUINT MapRegisterCount)
 
ULONG EXPORT NdisReadPciSlotInformation (IN NDIS_HANDLE NdisAdapterHandle, IN ULONG SlotNumber, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length)
 
ULONG EXPORT NdisWritePciSlotInformation (IN NDIS_HANDLE NdisAdapterHandle, IN ULONG SlotNumber, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length)
 
VOID EXPORT NdisReadEisaSlotInformation (OUT PNDIS_STATUS Status, IN NDIS_HANDLE WrapperConfigurationContext, OUT PUINT SlotNumber, OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData)
 
ULONG EXPORT NdisReadPcmciaAttributeMemory (IN NDIS_HANDLE NdisAdapterHandle, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length)
 
ULONG EXPORT NdisWritePcmciaAttributeMemory (IN NDIS_HANDLE NdisAdapterHandle, IN ULONG Offset, IN PVOID Buffer, IN ULONG Length)
 
VOID EXPORT NdisOverrideBusNumber (IN NDIS_HANDLE WrapperConfigurationContext, IN NDIS_HANDLE MiniportAdapterHandle OPTIONAL, IN ULONG BusNumber)
 

Function Documentation

◆ NdisImmediateReadPciSlotInformation()

ULONG EXPORT NdisImmediateReadPciSlotInformation ( IN NDIS_HANDLE  WrapperConfigurationContext,
IN ULONG  SlotNumber,
IN ULONG  Offset,
IN PVOID  Buffer,
IN ULONG  Length 
)

Definition at line 74 of file hardware.c.

80{
82 /* Slot number is ignored. */
83 return HalGetBusDataByOffset(PCIConfiguration, WrapperContext->BusNumber,
84 WrapperContext->SlotNumber, Buffer, Offset, Length);
85}
Definition: bufpool.h:45
struct _NDIS_WRAPPER_CONTEXT * PNDIS_WRAPPER_CONTEXT
ULONG NTAPI HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: bus.c:73
_Must_inspect_result_ _Out_ PNDIS_STATUS _Out_ PNDIS_HANDLE _In_ NDIS_HANDLE WrapperConfigurationContext
Definition: ndis.h:3946
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
@ PCIConfiguration
Definition: miniport.h:93

◆ NdisImmediateWritePciSlotInformation()

ULONG EXPORT NdisImmediateWritePciSlotInformation ( IN NDIS_HANDLE  WrapperConfigurationContext,
IN ULONG  SlotNumber,
IN ULONG  Offset,
IN PVOID  Buffer,
IN ULONG  Length 
)

Definition at line 92 of file hardware.c.

98{
100 /* Slot number is ignored. */
101 return HalSetBusDataByOffset(PCIConfiguration, WrapperContext->BusNumber,
102 WrapperContext->SlotNumber, Buffer, Offset, Length);
103}
ULONG NTAPI HalSetBusDataByOffset(IN BUS_DATA_TYPE BusDataType, IN ULONG BusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length)
Definition: bus.c:123

◆ NdisMPciAssignResources()

NDIS_STATUS EXPORT NdisMPciAssignResources ( IN NDIS_HANDLE  MiniportAdapterHandle,
IN ULONG  SlotNumber,
OUT PNDIS_RESOURCE_LIST AssignedResources 
)

Definition at line 110 of file hardware.c.

114{
116
118 Adapter->NdisMiniportBlock.AllocatedResources == NULL)
119 {
120 NDIS_DbgPrint(MIN_TRACE, ("Bad bus type or no resources\n"));
121 *AssignedResources = NULL;
122 return NDIS_STATUS_FAILURE;
123 }
124
125 *AssignedResources = &Adapter->NdisMiniportBlock.AllocatedResources->List[0].PartialResourceList;
126
127 return NDIS_STATUS_SUCCESS;
128}
#define MIN_TRACE
Definition: debug.h:14
#define NULL
Definition: types.h:112
#define NDIS_DbgPrint(_t_, _x_)
Definition: debug.h:40
#define NDIS_STATUS_FAILURE
Definition: ndis.h:465
#define NDIS_STATUS_SUCCESS
Definition: ndis.h:346
@ NdisInterfacePci
Definition: ndis.h:905
_In_ NDIS_HANDLE MiniportAdapterHandle
Definition: ndis.h:4668
NDIS_MINIPORT_BLOCK NdisMiniportBlock
Definition: miniport.h:89
NDIS_INTERFACE_TYPE BusType
Definition: ndis.h:2550

Referenced by NdisPciAssignResources().

◆ NdisMQueryAdapterResources()

VOID EXPORT NdisMQueryAdapterResources ( OUT PNDIS_STATUS  Status,
IN NDIS_HANDLE  WrapperConfigurationContext,
OUT PNDIS_RESOURCE_LIST  ResourceList,
IN OUT PUINT  BufferSize 
)

Definition at line 155 of file hardware.c.

171{
173 PLOGICAL_ADAPTER Adapter = WrapperContext->DeviceObject->DeviceExtension;
174 ULONG ResourceListSize;
175
176 PAGED_CODE();
177 ASSERT((Status && ResourceList) || (BufferSize && *BufferSize == 0));
178
179 NDIS_DbgPrint(MAX_TRACE, ("Called\n"));
180
181 if (Adapter->NdisMiniportBlock.AllocatedResources == NULL)
182 {
183 NDIS_DbgPrint(MIN_TRACE, ("No allocated resources!\n"));
185 return;
186 }
187
188 ResourceListSize =
189 FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors) +
190 Adapter->NdisMiniportBlock.AllocatedResources->List[0].PartialResourceList.Count *
192
193 if (*BufferSize >= ResourceListSize)
194 {
196 &Adapter->NdisMiniportBlock.AllocatedResources->List[0].PartialResourceList,
197 ResourceListSize);
198 *BufferSize = ResourceListSize;
200 }
201 else
202 {
203 *BufferSize = ResourceListSize;
205 }
206}
#define PAGED_CODE()
#define MAX_TRACE
Definition: debug.h:16
Status
Definition: gdiplustypes.h:24
#define ASSERT(a)
Definition: mode.c:44
#define NDIS_STATUS_RESOURCES
Definition: ndis.h:466
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR
PVOID DeviceExtension
Definition: env_spec_w32.h:418
PDEVICE_OBJECT DeviceObject
Definition: miniport.h:79
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint32_t ULONG
Definition: typedefs.h:59
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
Definition: wdfmemory.h:254
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309

Referenced by DcInitializeAdapterResources(), MiniportInitialize(), MiQueryResources(), NvNetInitializeAdapterResources(), and ParaNdis5_Initialize().

◆ NdisOverrideBusNumber()

VOID EXPORT NdisOverrideBusNumber ( IN NDIS_HANDLE  WrapperConfigurationContext,
IN NDIS_HANDLE MiniportAdapterHandle  OPTIONAL,
IN ULONG  BusNumber 
)

Definition at line 406 of file hardware.c.

416{
419
420 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
421
422 Wrapper->BusNumber = BusNumber;
423
424 if (Adapter)
426}
_In_ ULONG BusNumber
Definition: pciidex.h:65

◆ NdisPciAssignResources()

NDIS_STATUS EXPORT NdisPciAssignResources ( IN NDIS_HANDLE  NdisMacHandle,
IN NDIS_HANDLE  NdisWrapperHandle,
IN NDIS_HANDLE  WrapperConfigurationContext,
IN ULONG  SlotNumber,
OUT PNDIS_RESOURCE_LIST AssignedResources 
)

Definition at line 135 of file hardware.c.

141{
143 PLOGICAL_ADAPTER Adapter = WrapperContext->DeviceObject->DeviceExtension;
144
145 return NdisMPciAssignResources(Adapter,
147 AssignedResources);
148}
NDIS_STATUS EXPORT NdisMPciAssignResources(IN NDIS_HANDLE MiniportAdapterHandle, IN ULONG SlotNumber, OUT PNDIS_RESOURCE_LIST *AssignedResources)
Definition: hardware.c:110
_In_ WDFIORESREQLIST _In_ ULONG SlotNumber
Definition: wdfresource.h:68

◆ NdisQueryMapRegisterCount()

NDIS_STATUS EXPORT NdisQueryMapRegisterCount ( IN NDIS_INTERFACE_TYPE  BusType,
OUT PUINT  MapRegisterCount 
)

Definition at line 214 of file hardware.c.

222{
224}
#define NDIS_STATUS_NOT_SUPPORTED
Definition: ndis.h:479

◆ NdisQueryPciBusInterface()

NTSTATUS NdisQueryPciBusInterface ( IN PLOGICAL_ADAPTER  Adapter)

Definition at line 19 of file hardware.c.

21{
24 PIRP Irp;
26 PIO_STACK_LOCATION IrpStack;
27
28 if (Adapter->BusInterfaceQueried)
29 return (Adapter->BusInterface.GetBusData != NULL) ? STATUS_SUCCESS : STATUS_NOT_SUPPORTED;
30
31 Adapter->BusInterfaceQueried = TRUE;
32
34
36 Adapter->NdisMiniportBlock.NextDeviceObject,
37 NULL,
38 0,
39 NULL,
40 &Event,
42 if (Irp == NULL)
44
46 IrpStack->MajorFunction = IRP_MJ_PNP;
48 IrpStack->Parameters.QueryInterface.InterfaceType = &GUID_BUS_INTERFACE_STANDARD;
49 IrpStack->Parameters.QueryInterface.Size = sizeof(Adapter->BusInterface);
51 IrpStack->Parameters.QueryInterface.Interface = (PINTERFACE)&Adapter->BusInterface;
52 IrpStack->Parameters.QueryInterface.InterfaceSpecificData = NULL;
53
54 Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
55
56 Status = IoCallDriver(Adapter->NdisMiniportBlock.NextDeviceObject, Irp);
58 {
61 }
62
63 if (!NT_SUCCESS(Status))
64 RtlZeroMemory(&Adapter->BusInterface, sizeof(Adapter->BusInterface));
65
66 return Status;
67}
LONG NTSTATUS
Definition: precomp.h:26
#define IRP_MJ_PNP
Definition: cdrw_usr.h:52
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
Definition: env_spec_w32.h:478
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define KernelMode
Definition: asm.h:38
@ NotificationEvent
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:100
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
Definition: irp.c:1069
#define IoCallDriver
Definition: irp.c:1225
struct _INTERFACE * PINTERFACE
#define STATUS_SUCCESS
Definition: shellext.h:65
union _IO_STACK_LOCATION::@1709 Parameters
struct _IO_STACK_LOCATION::@4481::@4507 QueryInterface
#define STATUS_PENDING
Definition: telnetd.h:14
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2695
#define PCI_BUS_INTERFACE_STANDARD_VERSION
Definition: iotypes.h:5339
#define IRP_MN_QUERY_INTERFACE
@ Executive
Definition: ketypes.h:467

Referenced by NdisIPnPStartDevice().

◆ NdisReadEisaSlotInformation()

VOID EXPORT NdisReadEisaSlotInformation ( OUT PNDIS_STATUS  Status,
IN NDIS_HANDLE  WrapperConfigurationContext,
OUT PUINT  SlotNumber,
OUT PNDIS_EISA_FUNCTION_INFORMATION  EisaData 
)

Definition at line 299 of file hardware.c.

304{
306 ULONG Ret;
308
309 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
310
311 /* We are called only at PASSIVE_LEVEL */
313 if (!Buffer) {
314 NDIS_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
316 return;
317 }
318
320 Wrapper->BusNumber,
321 Wrapper->SlotNumber,
322 Buffer,
324
325 if (Ret == 0 || Ret == 2) {
326 NDIS_DbgPrint(MIN_TRACE, ("HalGetBusData failed.\n"));
329 return;
330 }
331
332 *SlotNumber = Wrapper->SlotNumber;
333
335
337
339}
NTHALAPI ULONG NTAPI HalGetBusData(BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG)
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
#define PagedPool
Definition: env_spec_w32.h:308
#define ExAllocatePool(type, size)
Definition: fbtusb.h:44
@ EisaConfiguration
Definition: miniport.h:90

◆ NdisReadPciSlotInformation()

ULONG EXPORT NdisReadPciSlotInformation ( IN NDIS_HANDLE  NdisAdapterHandle,
IN ULONG  SlotNumber,
IN ULONG  Offset,
IN PVOID  Buffer,
IN ULONG  Length 
)

Definition at line 232 of file hardware.c.

238{
239 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle;
240
241 /* Slot number is ignored since W2K for all NDIS drivers. */
242 if (Adapter->BusInterface.GetBusData != NULL)
243 {
247 Buffer,
248 Offset,
249 Length);
250 NDIS_DbgPrint(MAX_TRACE, ("NdisReadPciSlotInformation: Using bus interface, read %u bytes\n", Result));
251 return Result;
252 }
253
254 /* Fall back to HAL functions ONLY if bus interface is not available */
256 Adapter->NdisMiniportBlock.BusNumber, Adapter->NdisMiniportBlock.SlotNumber,
258}
PGET_SET_DEVICE_DATA GetBusData
Definition: iotypes.h:916
BUS_INTERFACE_STANDARD BusInterface
Definition: miniport.h:99
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409
#define PCI_WHICHSPACE_CONFIG
Definition: iotypes.h:3646

Referenced by DcPowerSave(), DcRecognizeHardware(), GetAdapterResources(), MiniportInitialize(), MiQueryCard(), NvNetRecognizeHardware(), and PCIReadConfig().

◆ NdisReadPcmciaAttributeMemory()

ULONG EXPORT NdisReadPcmciaAttributeMemory ( IN NDIS_HANDLE  NdisAdapterHandle,
IN ULONG  Offset,
IN PVOID  Buffer,
IN ULONG  Length 
)

Definition at line 347 of file hardware.c.

358{
359 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle;
360
361 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
362
365 Adapter->NdisMiniportBlock.SlotNumber,
366 Buffer,
367 Offset,
368 Length);
369}
@ PCMCIAConfiguration
Definition: miniport.h:96

◆ NdisWritePciSlotInformation()

ULONG EXPORT NdisWritePciSlotInformation ( IN NDIS_HANDLE  NdisAdapterHandle,
IN ULONG  SlotNumber,
IN ULONG  Offset,
IN PVOID  Buffer,
IN ULONG  Length 
)

Definition at line 265 of file hardware.c.

271{
272 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle;
273
274 /* Slot number is ignored since W2K for all NDIS drivers. */
275 if (Adapter->BusInterface.SetBusData != NULL)
276 {
280 Buffer,
281 Offset,
282 Length);
283 NDIS_DbgPrint(MAX_TRACE, ("NdisWritePciSlotInformation: Using bus interface, wrote %u bytes\n", Result));
284 return Result;
285 }
286
287 /* Fall back to HAL functions ONLY if bus interface is not available */
289 Adapter->NdisMiniportBlock.BusNumber, Adapter->NdisMiniportBlock.SlotNumber,
291}
PGET_SET_DEVICE_DATA SetBusData
Definition: iotypes.h:915

Referenced by DcPowerSave(), and MiQueryCard().

◆ NdisWritePcmciaAttributeMemory()

ULONG EXPORT NdisWritePcmciaAttributeMemory ( IN NDIS_HANDLE  NdisAdapterHandle,
IN ULONG  Offset,
IN PVOID  Buffer,
IN ULONG  Length 
)

Definition at line 377 of file hardware.c.

388{
389 PLOGICAL_ADAPTER Adapter = NdisAdapterHandle;
390
391 NDIS_DbgPrint(MAX_TRACE, ("Called.\n"));
392
395 Adapter->NdisMiniportBlock.SlotNumber,
396 Buffer,
397 Offset,
398 Length);
399}