aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/dev/nve/adapter.h
blob: 82ef8ef3599fca2e2bc9e960b8bfbb80cfdb97bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
/***************************************************************************\
|*                                                                           *|
|*       Copyright 2001-2004 NVIDIA Corporation.  All Rights Reserved.       *|
|*                                                                           *|
|*     THE INFORMATION CONTAINED HEREIN  IS PROPRIETARY AND CONFIDENTIAL     *|
|*     TO NVIDIA, CORPORATION.   USE,  REPRODUCTION OR DISCLOSURE TO ANY     *|
|*     THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP.       *|
|*                                                                           *|
|*     THE INFORMATION CONTAINED HEREIN IS PROVIDED  "AS IS" WITHOUT         *|
|*     EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED        *|
|*     WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A     *|
|*     PARTICULAR PURPOSE.                                                   *|
|*                                                                           *|
\***************************************************************************/ 

/*
    FILE:   adapter.h
    DATE:   2/7/00

    This file contains the hardware interface to the ethernet adapter.
*/

#ifndef _ADAPTER_H_
#define _ADAPTER_H_

#ifdef __cplusplus
extern "C" {
#endif

#define HDA_VERSION_STRING "HDR A: $Revision: #46 $"

#ifdef MODS_NETWORK_BUILD
#ifndef _DRVAPP_H_
#include "drvapp.h"
#endif
#endif

//////////////////////////////////////////////////////////////////
// For the set and get configuration calls.
typedef struct  _ADAPTER_CONFIG
{
    NV_UINT32   ulFlags;
}   ADAPTER_CONFIG, *PADAPTER_CONFIG;
//////////////////////////////////////////////////////////////////

typedef struct _ADAPTER_WRITE_OFFLOAD
{
    NV_UINT32   usBitmask;
    NV_UINT32   ulMss;

} ADAPTER_WRITE_OFFLOAD;

//////////////////////////////////////////////////////////////////
// For the ADAPTER_Write1 call.
/* This scatter gather list should be same as defined in ndis.h by MS.
   For ULONG_PTR MS header file says that it will be of same size as
   pointer. It has been defined to take care of casting between differenet
   sizes.
*/
typedef struct _NVSCATTER_GATHER_ELEMENT {
    NV_UINT32 PhysLow;
    NV_UINT32 PhysHigh;
    NV_UINT32 Length;
    NV_VOID *Reserved;
} NVSCATTER_GATHER_ELEMENT, *PNVSCATTER_GATHER_ELEMENT;

#ifndef linux
#pragma warning(disable:4200)
#endif
typedef struct _NVSCATTER_GATHER_LIST {
    NV_UINT32       NumberOfElements;
    NV_VOID         *Reserved;
    NVSCATTER_GATHER_ELEMENT Elements[0];   // Made 0 sized element to remove MODS compilation error
                                            // Elements[0] and Elements[] have the same effect. 
                                            // sizeof(NVSCATTER_GATHER_LIST) is the same (value of 8) in both cases
                                            // And both lead to Warning 4200 in MSVC
} NVSCATTER_GATHER_LIST, *PNVSCATTER_GATHER_LIST;
#ifndef linux
#pragma warning(default:4200)
#endif

typedef struct  _ADAPTER_WRITE_DATA1
{
    NV_UINT32                   ulTotalLength;
    PNV_VOID                    pvID;
    NV_UINT8                    uc8021pPriority;
    ADAPTER_WRITE_OFFLOAD       *psOffload;
    PNVSCATTER_GATHER_LIST      pNVSGL;
}   ADAPTER_WRITE_DATA1, *PADAPTER_WRITE_DATA1;


//////////////////////////////////////////////////////////////////
// For the ADAPTER_Write call.
typedef struct  _ADAPTER_WRITE_ELEMENT
{
    PNV_VOID   pPhysical;
    NV_UINT32   ulLength;
}   ADAPTER_WRITE_ELEMENT, *PADAPTER_WRITE_ELEMENT;


#define ADAPTER_WRITE_OFFLOAD_BP_SEGOFFLOAD      0
#define ADAPTER_WRITE_OFFLOAD_BP_IPV4CHECKSUM    1
#define ADAPTER_WRITE_OFFLOAD_BP_IPV6CHECKSUM    2
#define ADAPTER_WRITE_OFFLOAD_BP_TCPCHECKSUM     3
#define ADAPTER_WRITE_OFFLOAD_BP_UDPCHECKSUM     4
#define ADAPTER_WRITE_OFFLOAD_BP_IPCHECKSUM      5


// pvID is a value that will be passed back into OSAPI.pfnPacketWasSent
// when the transmission completes. if pvID is NULL, the ADAPTER code
// assumes the caller does not want the pfnPacketWasSent callback.
typedef struct  _ADAPTER_WRITE_DATA
{
    NV_UINT32                   ulNumberOfElements;
    NV_UINT32                   ulTotalLength;
    PNV_VOID                    pvID;
    NV_UINT8                    uc8021pPriority;
    ADAPTER_WRITE_OFFLOAD       *psOffload;
    ADAPTER_WRITE_ELEMENT       sElement[100];
}   ADAPTER_WRITE_DATA, *PADAPTER_WRITE_DATA;
//////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////
// For the ADAPTER_Read call.
typedef struct  _ADAPTER_READ_ELEMENT
{
    PNV_VOID   pPhysical;
    NV_UINT32   ulLength;
}   ADAPTER_READ_ELEMENT, *PADAPTER_READ_ELEMENT;

typedef struct _ADAPTER_READ_OFFLOAD
{
    NV_UINT8  ucChecksumStatus;

} ADAPTER_READ_OFFLOAD;

typedef struct _ADAPTER_READ_DATA
{
    NV_UINT32                   ulNumberOfElements;
    NV_UINT32                   ulTotalLength;
    PNV_VOID                    pvID;
    NV_UINT32                   ulFilterMatch;
    ADAPTER_READ_OFFLOAD        sOffload;
    ADAPTER_READ_ELEMENT        sElement[10];
}   ADAPTER_READ_DATA, *PADAPTER_READ_DATA;


#define RDFLAG_CHK_NOCHECKSUM      0
#define RDFLAG_CHK_IPPASSTCPFAIL   1
#define RDFLAG_CHK_IPPASSUDPFAIL   2
#define RDFLAG_CHK_IPFAIL          3
#define RDFLAG_CHK_IPPASSNOTCPUDP  4
#define RDFLAG_CHK_IPPASSTCPPASS   5
#define RDFLAG_CHK_IPPASSUDPPASS   6
#define RDFLAG_CHK_RESERVED        7


// The ulFilterMatch flag can be a logical OR of the following
#define ADREADFL_UNICAST_MATCH          0x00000001
#define ADREADFL_MULTICAST_MATCH        0x00000002
#define ADREADFL_BROADCAST_MATCH        0x00000004
//////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////
// For the ADAPTER_GetPowerCapabilities call.
typedef struct  _ADAPTER_POWERCAPS
{
    NV_UINT32   ulPowerFlags;
    NV_UINT32   ulMagicPacketWakeUpFlags;
    NV_UINT32   ulPatternWakeUpFlags;
    NV_UINT32   ulLinkChangeWakeUpFlags;
    NV_SINT32     iMaxWakeUpPatterns;
}   ADAPTER_POWERCAPS, *PADAPTER_POWERCAPS;

// For the ADAPTER_GetPowerState and ADAPTER_SetPowerState call.
typedef struct  _ADAPTER_POWERSTATE
{
    NV_UINT32   ulPowerFlags;
    NV_UINT32   ulMagicPacketWakeUpFlags;
    NV_UINT32   ulPatternWakeUpFlags;
    NV_UINT32   ulLinkChangeWakeUpFlags;
}   ADAPTER_POWERSTATE, *PADAPTER_POWERSTATE;

// Each of the flag fields in the POWERCAPS structure above can have
// any of the following bitflags set giving the capabilites of the
// adapter. In the case of the wake up fields, these flags mean that
// wake up can happen from the specified power state.

// For the POWERSTATE structure, the ulPowerFlags field should just
// have one of these bits set to go to that particular power state.
// The WakeUp fields can have one or more of these bits set to indicate
// what states should be woken up from.
#define POWER_STATE_D0          0x00000001
#define POWER_STATE_D1          0x00000002
#define POWER_STATE_D2          0x00000004
#define POWER_STATE_D3          0x00000008

#define POWER_STATE_ALL         (POWER_STATE_D0 | \
                                POWER_STATE_D1  | \
                                POWER_STATE_D2  | \
                                POWER_STATE_D3)
//////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////
// The ADAPTER_GetPacketFilterCaps call returns a NV_UINT32 that can
// have the following capability bits set.
#define ACCEPT_UNICAST_PACKETS      0x00000001
#define ACCEPT_MULTICAST_PACKETS    0x00000002
#define ACCEPT_BROADCAST_PACKETS    0x00000004
#define ACCEPT_ALL_PACKETS          0x00000008

#define ETH_LENGTH_OF_ADDRESS        6

// The ADAPTER_SetPacketFilter call uses this structure to know what
// packet filter to set. The ulPacketFilter field can contain some
// union of the bit flags above. The acMulticastMask array holds a
// 48 bit MAC address mask with a 0 in every bit position that should
// be ignored on compare and a 1 in every bit position that should
// be taken into account when comparing to see if the destination
// address of a packet should be accepted for multicast.
typedef struct  _PACKET_FILTER
{
    NV_UINT32   ulFilterFlags;
    NV_UINT8   acMulticastAddress[ETH_LENGTH_OF_ADDRESS];
    NV_UINT8   acMulticastMask[ETH_LENGTH_OF_ADDRESS];
}   PACKET_FILTER, *PPACKET_FILTER;
//////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////
// A WAKE_UP_PATTERN is a 128-byte pattern that the adapter can
// look for in incoming packets to decide when to wake up.  Higher-
// level protocols can use this to, for example, wake up the
// adapter whenever it sees an IP packet that is addressed to it.
// A pattern consists of 128 bits of byte masks that indicate
// which bytes in the packet are relevant to the pattern, plus
// values for each byte.
#define WAKE_UP_PATTERN_SIZE 128

typedef struct _WAKE_UP_PATTERN
{
    NV_UINT32   aulByteMask[WAKE_UP_PATTERN_SIZE/32];
    NV_UINT8   acData[WAKE_UP_PATTERN_SIZE];
}   WAKE_UP_PATTERN, *PWAKE_UP_PATTERN;



//
//
// Adapter offload
//
typedef struct _ADAPTER_OFFLOAD {

    NV_UINT32 Type;
    NV_UINT32 Value0;

} ADAPTER_OFFLOAD, *PADAPTER_OFFLOAD;

#define ADAPTER_OFFLOAD_VLAN        0x00000001
#define ADAPTER_OFFLOAD_IEEE802_1P    0x00000002
#define ADAPTER_OFFLOAD_IEEE802_1PQ_PAD    0x00000004

//////////////////////////////////////////////////////////////////

//  CMNDATA_OS_ADAPTER
//  Structure common to OS and Adapter layers
//  Used for moving data from the OS layer to the adapter layer through SetCommonData 
//  function call from OS layer to Adapter layer
// 

typedef struct  _CMNDATA_OS_ADAPTER
{
#ifndef linux
    ASF_SEC0_BASE   sRegSec0Base;
#endif
    NV_UINT32           bFPGA; 
    NV_UINT32           ulFPGAEepromSize;
    NV_UINT32           bChecksumOffloadEnable;
    NV_UINT32           ulChecksumOffloadBM;
    NV_UINT32           ulChecksumOffloadOS;
    NV_UINT32           ulMediaIF;
    NV_UINT32           bOemCustomEventRead;

    // Debug only right now
    //!!! Beware mods is relying on the fields blow.
    NV_UINT32           ulWatermarkTFBW;
    NV_UINT32           ulBackoffRseed;
    NV_UINT32           ulBackoffSlotTime;
    NV_UINT32           ulModeRegTxReadCompleteEnable;
    NV_UINT32           ulFatalErrorRegister;

} CMNDATA_OS_ADAPTER;


//////////////////////////////////////////////////////////////////
// The functional typedefs for the ADAPTER Api
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLOSE)  (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_INIT)  (PNV_VOID pvContext, NV_UINT16 usForcedSpeed, NV_UINT8 ucForceDpx, NV_UINT8 ucForceMode, NV_UINT8 ucAsyncMode, NV_UINT32 *puiLinkState);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DEINIT)  (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_START)  (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_STOP)   (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_WRITE_SLOTS) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE) (PNV_VOID pvContext, ADAPTER_WRITE_DATA *pADWriteData);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE1) (PNV_VOID pvContext, ADAPTER_WRITE_DATA1 *pADWriteData1);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_INTERRUPT) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_HANDLE_INTERRUPT) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DISABLE_INTERRUPTS) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_INTERRUPTS) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_INTERRUPTS) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_TX_DESC) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_SPEED) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_MODE) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_STATE) (PNV_VOID pvContext, NV_UINT32 *pulLinkState);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_IS_LINK_INITIALIZING) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_RESET_PHY_INIT_STATE) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_STATISTICS) (PNV_VOID pvContext, PADAPTER_STATS pADStats);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_CAPS) (PNV_VOID pvContext, PADAPTER_POWERCAPS pADPowerCaps);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_LOW_SPEED_FOR_PM) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_PACKET_FILTER_CAPS) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_PACKET_FILTER) (PNV_VOID pvContext, PPACKET_FILTER pPacketFilter);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, PWAKE_UP_PATTERN pPattern);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, NV_SINT32 iEnable);
typedef NV_API_CALL NV_SINT32 (* PFN_SET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
typedef NV_API_CALL NV_SINT32 (* PFN_GET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
typedef NV_API_CALL NV_SINT32 (* PFN_GET_ADAPTER_INFO) (PNV_VOID pvContext, PNV_VOID pVoidPtr, NV_SINT32 iType, NV_SINT32 *piLength);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_READ_PHY)  (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 *pulValue);
typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE_PHY) (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 ulValue);
typedef NV_API_CALL NV_VOID(* PFN_ADAPTER_SET_SPPED_DUPLEX) (PNV_VOID pvContext);
typedef NV_API_CALL NV_SINT32 (*PFN_REGISTER_OFFLOAD) (PNV_VOID pvContext,  PADAPTER_OFFLOAD pOffload);
typedef NV_API_CALL NV_SINT32 (*PFN_DEREGISTER_OFFLOAD) (PNV_VOID pvContext, PADAPTER_OFFLOAD pOffload);
typedef NV_API_CALL NV_SINT32 (*PFN_RX_BUFF_READY) (PNV_VOID pvContext, PMEMORY_BLOCK pMemBlock, PNV_VOID pvID);

#ifndef linux
typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETUPREGISTERS) (PNV_VOID pvContext, NV_SINT32 bInitTime);
typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSEC0BASEADDRESS) (PNV_VOID pvContext, ASF_SEC0_BASE **ppsSec0Base);
typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETSOURCEIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcIPAddress);
typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
typedef NV_SINT32 (*PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS) (PNV_VOID pvContext, NV_BOOLEAN bCompare, PNV_VOID pucValue, PNV_VOID pszSec0BaseMember, 
                                      NV_UINT16 usCount, NV_UINT32 ulAddressOffset);

typedef NV_SINT32 (*PFN_ADAPTER_ASF_ISASFREADY) (PNV_VOID pvContext, ASF_ASFREADY *psASFReady);

typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestMACAddress);
typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSOURCEMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcMACAddress);

typedef NV_SINT32 (*PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE)  (PNV_VOID pvContext);
#endif

typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_COMMONDATA) (PNV_VOID pvContext, CMNDATA_OS_ADAPTER *psOSAdpater);
typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_CHECKSUMOFFLOAD) (PNV_VOID pvContext, NV_UINT32 bSet);


 
typedef struct  _ADAPTER_API
{
    // The adapter context
    PNV_VOID                                   pADCX;

    // The adapter interface
    PFN_ADAPTER_CLOSE                       pfnClose;
    PFN_ADAPTER_INIT                        pfnInit;
    PFN_ADAPTER_DEINIT                      pfnDeinit;
    PFN_ADAPTER_START                       pfnStart;
    PFN_ADAPTER_STOP                        pfnStop;
    PFN_ADAPTER_QUERY_WRITE_SLOTS           pfnQueryWriteSlots;
    PFN_ADAPTER_WRITE                       pfnWrite;
    PFN_ADAPTER_WRITE1                      pfnWrite1;
    PFN_ADAPTER_QUERY_INTERRUPT             pfnQueryInterrupt;
    PFN_ADAPTER_HANDLE_INTERRUPT            pfnHandleInterrupt;
    PFN_ADAPTER_DISABLE_INTERRUPTS          pfnDisableInterrupts;
    PFN_ADAPTER_ENABLE_INTERRUPTS           pfnEnableInterrupts;
    PFN_ADAPTER_CLEAR_INTERRUPTS            pfnClearInterrupts;
    PFN_ADAPTER_CLEAR_TX_DESC                pfnClearTxDesc;
    PFN_ADAPTER_GET_LINK_SPEED              pfnGetLinkSpeed;
    PFN_ADAPTER_GET_LINK_MODE               pfnGetLinkMode;
    PFN_ADAPTER_GET_LINK_STATE              pfnGetLinkState;
    PFN_ADAPTER_IS_LINK_INITIALIZING        pfnIsLinkInitializing;
    PFN_ADAPTER_RESET_PHY_INIT_STATE        pfnResetPhyInitState;
    PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE     pfnGetTransmitQueueSize;
    PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE      pfnGetReceiveQueueSize;
    PFN_ADAPTER_GET_STATISTICS              pfnGetStatistics;
    PFN_ADAPTER_GET_POWER_CAPS              pfnGetPowerCaps;
    PFN_ADAPTER_GET_POWER_STATE             pfnGetPowerState;
    PFN_ADAPTER_SET_POWER_STATE             pfnSetPowerState;
    PFN_ADAPTER_SET_LOW_SPEED_FOR_PM        pfnSetLowSpeedForPM;
    PFN_ADAPTER_GET_PACKET_FILTER_CAPS      pfnGetPacketFilterCaps;
    PFN_ADAPTER_SET_PACKET_FILTER           pfnSetPacketFilter;
    PFN_ADAPTER_SET_WAKE_UP_PATTERN         pfnSetWakeUpPattern;
    PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN      pfnEnableWakeUpPattern;
    PFN_SET_NODE_ADDRESS                    pfnSetNodeAddress;
    PFN_GET_NODE_ADDRESS                    pfnGetNodeAddress;
    PFN_GET_ADAPTER_INFO                    pfnGetAdapterInfo;
    PFN_ADAPTER_SET_SPPED_DUPLEX            pfnSetSpeedDuplex;
    PFN_ADAPTER_READ_PHY                    pfnReadPhy;
    PFN_ADAPTER_WRITE_PHY                    pfnWritePhy;
    PFN_REGISTER_OFFLOAD                    pfnRegisterOffload;
    PFN_DEREGISTER_OFFLOAD                    pfnDeRegisterOffload;
    PFN_RX_BUFF_READY                        pfnRxBuffReady;
#ifndef linux
    PFN_ADAPTER_ASF_SETUPREGISTERS          pfnASFSetupRegisters;
    PFN_ADAPTER_ASF_GETSEC0BASEADDRESS      pfnASFGetSec0BaseAddress;
    PFN_ADAPTER_ASF_SETSOURCEIPADDRESS      pfnASFSetSourceIPAddress;
    PFN_ADAPTER_ASF_GETDESTIPADDRESS        pfnASFGetDestIPAddress;
    PFN_ADAPTER_ASF_SETDESTIPADDRESS        pfnASFSetDestIPAddress;
    PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS pfnASFWriteEEPROMAndSetupRegisters;
    PFN_ADAPTER_ASF_SETDESTMACADDRESS       pfnASFSetDestMACAddress;
    PFN_ADAPTER_ASF_GETSOURCEMACADDRESS     pfnASFGetSourceMACAddress;
    PFN_ADAPTER_ASF_ISASFREADY              pfnASFIsASFReady;
    PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE pfnASFCheckForEepromPresence;
#endif
    PFN_ADAPTER_SET_COMMONDATA              pfnSetCommonData;

    PFN_ADAPTER_SET_CHECKSUMOFFLOAD         pfnSetChecksumOffload;

}   ADAPTER_API, *PADAPTER_API;
//////////////////////////////////////////////////////////////////

#define MAX_PACKET_TO_ACCUMULATE    16

typedef struct _ADAPTER_OPEN_PARAMS
{
    PNV_VOID pOSApi; //pointer to OSAPI structure passed from higher layer
    PNV_VOID pvHardwareBaseAddress; //memory mapped address passed from higher layer
    NV_UINT32 ulPollInterval; //poll interval in micro seconds. Used in polling mode
    NV_UINT32 MaxDpcLoop; //Maximum number of times we loop to in function ADAPTER_HandleInterrupt
    NV_UINT32 MaxRxPkt; //Maximum number of packet we process each time in function UpdateReceiveDescRingData
    NV_UINT32 MaxTxPkt; //Maximum number of packet we process each time in function UpdateTransmitDescRingData
    NV_UINT32 MaxRxPktToAccumulate; //maximum number of rx packet we accumulate in UpdateReceiveDescRingData before
                                //indicating packets to OS.
    NV_UINT32 SentPacketStatusSuccess; //Status returned from adapter layer to higher layer when packet was sent successfully
    NV_UINT32 SentPacketStatusFailure; ////Status returned from adapter layer to higher layer when packet send was unsuccessful
    NV_UINT32 SetForcedModeEveryNthRxPacket; //NOT USED: For experiment with descriptor based interrupt
    NV_UINT32 SetForcedModeEveryNthTxPacket; //NOT USED: For experiment with descriptor based interrupt
    NV_UINT32 RxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt
    NV_UINT32 TxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt
    NV_UINT32 DeviceId; //Of MAC
    NV_UINT32 DeviceType;
    NV_UINT32 PollIntervalInusForThroughputMode; //Of MAC
    NV_UINT32 bASFEnabled;
    NV_UINT32 ulDescriptorVersion;
    NV_UINT32 ulMaxPacketSize;


#define MEDIA_IF_AUTO       0
#define MEDIA_IF_RGMII      1
#define MEDIA_IF_MII        2
    NV_UINT32 ulMediaIF;

	NV_UINT32	PhyPowerIsolationTimeoutInms;
	NV_UINT32	PhyResetTimeoutInms;
	NV_UINT32	PhyAutonegotiateTimeoutInms;
	NV_UINT32	PhyLinkupTimeoutInms;
	NV_UINT32	PhyRdWrTimeoutInus;
	NV_UINT32	PhyPowerdownOnClose;

    // Added for Bug 100715
    NV_UINT32   bDisableMIIInterruptAndReadPhyStatus;

}ADAPTER_OPEN_PARAMS, *PADAPTER_OPEN_PARAMS;

//////////////////////////////////////////////////////////////////
// This is the one function in the adapter interface that is publicly
// available. The rest of the interface is returned in the pAdapterApi.
// The first argument needs to be cast to a OSAPI structure pointer.
// The second argument should be cast to a ADPATER_API structure pointer.
NV_API_CALL NV_SINT32 ADAPTER_Open (PADAPTER_OPEN_PARAMS pAdapterOpenParams, PNV_VOID *pvpAdapterApi, NV_UINT32 *pulPhyAddr);

//////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////
// Here are the error codes the adapter function calls return.
#define ADAPTERERR_NONE                             0x0000
#define ADAPTERERR_COULD_NOT_ALLOC_CONTEXT          0x0001
#define ADAPTERERR_COULD_NOT_CREATE_CONTEXT         0x0002
#define ADAPTERERR_COULD_NOT_OPEN_PHY               0x0003
#define ADAPTERERR_TRANSMIT_QUEUE_FULL              0x0004
#define ADAPTERERR_COULD_NOT_INIT_PHY               0x0005
#define ADAPTERERR_PHYS_SIZE_SMALL                    0x0006
#define ADAPTERERR_ERROR                            0x0007  // Generic error
//////////////////////////////////////////////////////////////////

// This block moved from myadap.h
// nFlag for Stop/Start ReceiverAndOrTransmitter can be an OR of
// the following two flags
#define AFFECT_RECEIVER     0x01
#define AFFECT_TRANSMITTER  0x02

#define REDUCE_LENGTH_BY 48

#define EXTRA_WRITE_SLOT_TO_REDUCE_PER_SEND    4
#define MAX_TX_DESCS                    256 
#define MAX_TX_DESCS_VER2               (256 * 4)

typedef struct _TX_INFO_ADAP
{
    NV_UINT32   NoOfDesc; 
    PNV_VOID    pvVar2; 
}TX_INFO_ADAP, *PTX_INFO_ADAP;

#define WORKAROUND_FOR_MCP3_TX_STALL

#ifdef WORKAROUND_FOR_MCP3_TX_STALL
NV_SINT32 ADAPTER_WorkaroundTXHang(PNV_VOID pvContext);
#endif

//#define TRACK_INIT_TIME

#ifdef TRACK_INIT_TIME
//This routine is defined in entry.c adapter doesn't link int64.lib
//We defined here so that its easy to use it in phy as well as mswin

#define MAX_PRINT_INDEX        32
extern NV_VOID PrintTime(NV_UINT32 ulIndex);
#define PRINT_INIT_TIME(_a) PrintTime((_a))
#else
#define PRINT_INIT_TIME(_a)
#endif

// Segmentation offload info
#define DEVCAPS_SEGOL_BP_ENABLE       0   
#define DEVCAPS_SEGOL_BP_IPOPTIONS    1
#define DEVCAPS_SEGOL_BP_TCPOPTIONS   2
#define DEVCAPS_SEGOL_BP_SEGSIZE_LO   8
#define DEVCAPS_SEGOL_BP_SEGSIZE_HI   31


// Checksum offload info
// Byte 0 : V4 TX
#define DEVCAPS_V4_TX_BP_IPOPTIONS      0
#define DEVCAPS_V4_TX_BP_TCPOPTIONS     1
#define DEVCAPS_V4_TX_BP_TCPCHECKSUM    2
#define DEVCAPS_V4_TX_BP_UDPCHECKSUM    3
#define DEVCAPS_V4_TX_BP_IPCHECKSUM     4

// Byte 0 : V4 RX
#define DEVCAPS_V4_RX_BP_IPOPTIONS      8
#define DEVCAPS_V4_RX_BP_TCPOPTIONS     9
#define DEVCAPS_V4_RX_BP_TCPCHECKSUM    10
#define DEVCAPS_V4_RX_BP_UDPCHECKSUM    11
#define DEVCAPS_V4_RX_BP_IPCHECKSUM     12

// Byte 1 : V6 TX
#define DEVCAPS_V6_TX_BP_IPOPTIONS      16
#define DEVCAPS_V6_TX_BP_TCPOPTIONS     17
#define DEVCAPS_V6_TX_BP_TCPCHECKSUM    18
#define DEVCAPS_V6_TX_BP_UDPCHECKSUM    19

// Byte 2 : V6 RX
#define DEVCAPS_V6_RX_BP_IPOPTIONS      24
#define DEVCAPS_V6_RX_BP_TCPOPTIONS     25
#define DEVCAPS_V6_RX_BP_TCPCHECKSUM    26
#define DEVCAPS_V6_RX_BP_UDPCHECKSUM    27


#define DESCR_VER_1         1       // MCP1, MCP2 and CK8 descriptor version
#define DESCR_VER_2         2       // The decsriptor structure for CK8G

// Get device and vendor IDs from 32 bit DeviceVendorID 
#define GET_DEVICEID(x)   (((x) >> 16) & 0xFFFF)
#define GET_VENDORID(x)   ((x) & 0xFFFF)

#ifdef __cplusplus
} // extern "C"
#endif

#endif // _ADAPTER_H_