/* ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл (C) Copyright 1998 All rights reserved. ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл Portions of this software are: (C) Copyright 1995, 1999 TriplePoint, Inc. -- http://www.TriplePoint.com License to use this software is granted under the terms outlined in the TriplePoint Software Services Agreement. (C) Copyright 1992 Microsoft Corp. -- http://www.Microsoft.com License to use this software is granted under the terms outlined in the Microsoft Windows Device Driver Development Kit. ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл @doc INTERNAL Adapter Adapter_h @module Adapter.h | This module defines the interface to the . @head3 Contents | @index class,mfunc,func,msg,mdata,struct,enum | Adapter_h @end ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл */ #ifndef _ADAPTER_H #define _ADAPTER_H #define MINIPORT_ADAPTER_OBJECT_TYPE ((ULONG)'A')+\ ((ULONG)'D'<<8)+\ ((ULONG)'A'<<16)+\ ((ULONG)'P'<<24) /* @doc INTERNAL Adapter Adapter_h MINIPORT_ADAPTER_OBJECT ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл @struct MINIPORT_ADAPTER_OBJECT | This structure contains the data associated with a single Miniport adapter instance. Here, Adapter is defined as the manager of specific Network Interface Card (NIC) installed under the NDIS wrapper. This adapter is responsible for managing all interactions between the NIC and the host operating system using the NDIS library. @comm This structure must contain a reference to all other objects being managed by this adapter object. The adapter object is the only reference passed between NDIS and the Miniport. This is the we pass into from . This value is passed as a parameter to the Miniport entry points called by the NDIS wrapper. One of these objects is created each time that our routine is called. The NDIS wrapper calls this routine once for each of our devices installed and enabled in the system. In the case of a hot swappable NIC (e.g. PCMCIA) the adapter might come and go several times during a single Windows session. */ typedef struct MINIPORT_ADAPTER_OBJECT { #if DBG ULONG DbgFlags; // @field // Debug flags control how much debug is displayed in the checked version. // Put it at the front so we can set it easily with debugger. UCHAR DbgID[12]; // @field // This field is initialized to an ASCII decimal string containing the // adapter instance number 1..N. It is only used to output debug messages. #endif // DBG ULONG ObjectType; // @field // Four characters used to identify this type of object 'ADAP'. ULONG ObjectID; // @field // Instance number used to identify a specific object instance. NDIS_HANDLE MiniportAdapterHandle; // @field // Specifies a handle identifying the miniport's NIC, which is assigned // by the NDIS library. MiniportInitialize should save this handle; it // is a required parameter in subsequent calls to NdisXxx functions. NDIS_HANDLE WrapperConfigurationContext;// @field // Specifies a handle used only during initialization for calls to // NdisXxx configuration and initialization functions. For example, // this handle is a required parameter to NdisOpenConfiguration and // the NdisImmediateReadXxx and NdisImmediateWriteXxx functions. PCARD_OBJECT pCard; // @field // Pointer to the hardware specific . Created by // . PDCHANNEL_OBJECT pDChannel; // @field // Pointer to the created by . // One for the entire NIC. ULONG NumBChannels; // @field // The number of 's supported by the NIC. PBCHANNEL_OBJECT * pBChannelArray; // @field // An array of 's created by . // One entry for each logical BChannel on NIC. #if !defined(NDIS50_MINIPORT) ULONG BusNumber; // @field // Identifies which system bus this adapter is plugged in to. ULONG BusType; // @field // Identifies the bus type this adapter is plugged in to. #endif // NDIS50_MINIPORT ULONG RunningWin95; // @field // Set TRUE only if running on Windows 95 or Windows98. ULONG NumLineOpens; // @field // The number of line open calls currently on this adapter. NDIS_SPIN_LOCK TransmitLock; // @field // This spin lock is used to provide mutual exclusion around accesses // to the transmit queue manipulation routines. This is necessary since // we can be called at any time by the B-channel services driver and // we could already be processing an NDIS request. LIST_ENTRY TransmitPendingList; // @field // Packets waiting to be sent when the controller is available. // See . LIST_ENTRY TransmitCompleteList; // @field // Packets waiting for completion processing. After the packet is // transmitted, the protocol stack is given an indication. // See . NDIS_SPIN_LOCK ReceiveLock; // @field // This spin lock is used to provide mutual exclusion around accesses // to the receive queue manipulation routines. This is necessary since // we can be called at any time by the B-channel services driver and // we could already be processing an NDIS request. LIST_ENTRY ReceiveCompleteList; // @field // Buffers waiting to be processed by the NDIS_SPIN_LOCK EventLock; // @field // This spin lock is used to provide mutual exclusion around accesses // to the event queue manipulation routines. This is necessary since // we can be called at any time by the B-channel services driver and // we could already be processing an NDIS request. LIST_ENTRY EventList; // @field // driver callback events waiting to be processed. // See . NDIS_MINIPORT_TIMER EventTimer; // @field // This timer is used to schedule the event processing routine to run // when the system reaches a quiescent state. ULONG NextEvent; // @field // Where do we store the next event. long NestedEventHandler; // @field // Keeps track of entry to and exit from the event handler. long NestedDataHandler; // @field // Keeps track of entry to and exit from the Tx/Rx handlers. ULONG DeviceIdBase; // @field // The ulDeviceIDBase field passed in the PROVIDER_INIT request // informs a miniport of the zero-based starting index that the // Connection Wrapper will use when referring to a single adapter’s // line devices by index. For example, if a ulDeviceIDBase of two is // specified and the adapter supports three line devices, then the // Connection Wrapper will use the identifiers two, three, and four // to refer to the adapter’s three devices. NDIS_WAN_INFO WanInfo; // @field // A copy of our structure is setup at init time // and doesn't change. CHAR ProviderInfo[48]; // @field // This holds the TAPI ProviderInfo string returned from TspiGetDevCaps // This is two null terminated strings packed end to end. // This size is the max allowed by RAS. ULONG ProviderInfoSize; // @field // Size in bytes of both strings. ULONG NoAnswerTimeOut; // @field // How many ms to wait for ALERTING ULONG NoAcceptTimeOut; // @field // How many ms to wait for ACCEPT ANSI_STRING MediaType; // @field // The MediaType configuration parameter is read from the registry // at init time. ANSI_STRING DeviceName; // @field // The DeviceName configuration parameter is read from the registry // at init time. ANSI_STRING TapiAddressList; // @field // The TAPI AddressList configuration parameter is read from the // registry at init time. LINE_CALL_PARAMS DefaultLineCallParams; // @field // The default call parameters used by TspiMakeCall BOOLEAN NeedStatusCompleteIndication; // @field // This flag indicates whether or not // needs to be called after the completion of requests or event processing. // This is set TRUE if is called while // processing a request or event. ULONG TotalRxBytes; // @field // Total bytes read by driver during this session. ULONG TotalTxBytes; // @field // Total bytes written by driver during this session. ULONG TotalRxPackets; // @field // Total packets read by driver during this session. ULONG TotalTxPackets; // @field // Total packets written by driver during this session. ULONG TODO; // @field // Add your data members here. } MINIPORT_ADAPTER_OBJECT; extern PMINIPORT_ADAPTER_OBJECT g_Adapters[MAX_ADAPTERS]; /* ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл Function prototypes. */ NDIS_STATUS AdapterCreate( OUT PMINIPORT_ADAPTER_OBJECT *ppAdapter, IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE WrapperConfigurationContext ); void AdapterDestroy( IN PMINIPORT_ADAPTER_OBJECT pAdapter ); NDIS_STATUS AdapterInitialize( IN PMINIPORT_ADAPTER_OBJECT pAdapter ); #endif // _ADAPTER_H