ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

hardware.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.