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#ifndef __DEVICE_H__
30#define __DEVICE_H__
31
32#include <linux/module.h>
33#include <linux/kernel.h>
34#include <linux/slab.h>
35#include <linux/init.h>
36#include <linux/delay.h>
37#include <linux/device.h>
38#include <linux/firmware.h>
39#include <linux/etherdevice.h>
40#include <linux/suspend.h>
41#include <linux/if_arp.h>
42#include <linux/wireless.h>
43#include <net/iw_handler.h>
44#include <net/cfg80211.h>
45#include <linux/timer.h>
46#include <linux/usb.h>
47
48#ifdef SIOCETHTOOL
49#define DEVICE_ETHTOOL_IOCTL_SUPPORT
50#include <linux/ethtool.h>
51#else
52#undef DEVICE_ETHTOOL_IOCTL_SUPPORT
53#endif
54
55
56#define RT_INSMOD_EVENT_FLAG 0x0101
57#define RT_UPDEV_EVENT_FLAG 0x0102
58#define RT_DISCONNECTED_EVENT_FLAG 0x0103
59#define RT_WPACONNECTED_EVENT_FLAG 0x0104
60#define RT_DOWNDEV_EVENT_FLAG 0x0105
61#define RT_RMMOD_EVENT_FLAG 0x0106
62
63
64
65
66
67#include "device_cfg.h"
68#include "80211hdr.h"
69#include "tether.h"
70#include "wmgr.h"
71#include "wcmd.h"
72#include "mib.h"
73#include "srom.h"
74#include "rc4.h"
75#include "desc.h"
76#include "key.h"
77#include "card.h"
78
79#define VNT_USB_VENDOR_ID 0x160a
80#define VNT_USB_PRODUCT_ID 0x3184
81
82#define MAC_MAX_CONTEXT_REG (256+128)
83
84#define MAX_MULTICAST_ADDRESS_NUM 32
85#define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * ETH_ALEN)
86
87#define DUPLICATE_RX_CACHE_LENGTH 5
88
89#define NUM_KEY_ENTRY 11
90
91#define TX_WEP_NONE 0
92#define TX_WEP_OTF 1
93#define TX_WEP_SW 2
94#define TX_WEP_SWOTP 3
95#define TX_WEP_OTPSW 4
96#define TX_WEP_SW232 5
97
98#define KEYSEL_WEP40 0
99#define KEYSEL_WEP104 1
100#define KEYSEL_TKIP 2
101#define KEYSEL_CCMP 3
102
103#define AUTO_FB_NONE 0
104#define AUTO_FB_0 1
105#define AUTO_FB_1 2
106
107#define FB_RATE0 0
108#define FB_RATE1 1
109
110
111#define ANT_A 0
112#define ANT_B 1
113#define ANT_DIVERSITY 2
114#define ANT_RXD_TXA 3
115#define ANT_RXD_TXB 4
116#define ANT_UNKNOWN 0xFF
117#define ANT_TXA 0
118#define ANT_TXB 1
119#define ANT_RXA 2
120#define ANT_RXB 3
121
122#define MAXCHECKHANGCNT 4
123
124
125#define TX_PKT_UNI 0x00
126#define TX_PKT_MULTI 0x01
127#define TX_PKT_BROAD 0x02
128
129#define BB_VGA_LEVEL 4
130#define BB_VGA_CHANGE_THRESHOLD 3
131
132#ifndef RUN_AT
133#define RUN_AT(x) (jiffies+(x))
134#endif
135
136
137#define RESERV_AC0DMA 4
138
139#define PRIVATE_Message 0
140
141#define DBG_PRT(l, p, args...) { if (l <= msglevel) printk(p, ##args); }
142#define PRINT_K(p, args...) { if (PRIVATE_Message) printk(p, ##args); }
143
144typedef enum __device_msg_level {
145 MSG_LEVEL_ERR = 0,
146 MSG_LEVEL_NOTICE = 1,
147 MSG_LEVEL_INFO = 2,
148 MSG_LEVEL_VERBOSE = 3,
149 MSG_LEVEL_DEBUG = 4
150} DEVICE_MSG_LEVEL, *PDEVICE_MSG_LEVEL;
151
152typedef enum __device_init_type {
153 DEVICE_INIT_COLD = 0,
154 DEVICE_INIT_RESET,
155 DEVICE_INIT_DXPL
156} DEVICE_INIT_TYPE, *PDEVICE_INIT_TYPE;
157
158
159
160
161
162
163typedef enum _CONTEXT_TYPE {
164 CONTEXT_DATA_PACKET = 1,
165 CONTEXT_MGMT_PACKET
166} CONTEXT_TYPE;
167
168
169typedef struct _RCB
170{
171 void *Next;
172 signed long Ref;
173 void *pDevice;
174 struct urb *pUrb;
175 struct vnt_rx_mgmt sMngPacket;
176 struct sk_buff *skb;
177 int bBoolInUse;
178
179} RCB, *PRCB;
180
181
182typedef struct _USB_SEND_CONTEXT {
183 void *pDevice;
184 struct sk_buff *pPacket;
185 struct urb *pUrb;
186 unsigned int uBufLen;
187 CONTEXT_TYPE Type;
188 struct ethhdr sEthHeader;
189 void *Next;
190 bool bBoolInUse;
191 unsigned char Data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS];
192} USB_SEND_CONTEXT, *PUSB_SEND_CONTEXT;
193
194
195typedef struct _DEFAULT_CONFIG {
196 signed int ZoneType;
197 signed int eConfigMode;
198 signed int eAuthenMode;
199 signed int bShareKeyAlgorithm;
200 signed int keyidx;
201 signed int eEncryptionStatus;
202} DEFAULT_CONFIG, *PDEFAULT_CONFIG;
203
204
205
206
207typedef struct {
208 unsigned int uDataLen;
209 u8 * pDataBuf;
210
211 bool bInUse;
212} INT_BUFFER, *PINT_BUFFER;
213
214
215typedef enum _VIA_BB_TYPE
216{
217 BB_TYPE_11A = 0,
218 BB_TYPE_11B,
219 BB_TYPE_11G
220} VIA_BB_TYPE, *PVIA_BB_TYPE;
221
222
223typedef enum _VIA_PKT_TYPE
224{
225 PK_TYPE_11A = 0,
226 PK_TYPE_11B,
227 PK_TYPE_11GB,
228 PK_TYPE_11GA
229} VIA_PKT_TYPE, *PVIA_PKT_TYPE;
230
231
232
233typedef enum __DEVICE_NDIS_STATUS {
234 STATUS_SUCCESS = 0,
235 STATUS_FAILURE,
236 STATUS_RESOURCES,
237 STATUS_PENDING,
238} DEVICE_NDIS_STATUS, *PDEVICE_NDIS_STATUS;
239
240#define MAX_BSSIDINFO_4_PMKID 16
241#define MAX_PMKIDLIST 5
242
243#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01
244
245
246typedef unsigned char NDIS_802_11_PMKID_VALUE[16];
247
248typedef enum _NDIS_802_11_WEP_STATUS
249{
250 Ndis802_11WEPEnabled,
251 Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
252 Ndis802_11WEPDisabled,
253 Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
254 Ndis802_11WEPKeyAbsent,
255 Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
256 Ndis802_11WEPNotSupported,
257 Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
258 Ndis802_11Encryption2Enabled,
259 Ndis802_11Encryption2KeyAbsent,
260 Ndis802_11Encryption3Enabled,
261 Ndis802_11Encryption3KeyAbsent
262} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
263 NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
264
265typedef enum _NDIS_802_11_STATUS_TYPE
266{
267 Ndis802_11StatusType_Authentication,
268 Ndis802_11StatusType_MediaStreamMode,
269 Ndis802_11StatusType_PMKID_CandidateList,
270 Ndis802_11StatusTypeMax,
271} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
272
273
274typedef struct _PMKID_CANDIDATE {
275 NDIS_802_11_MAC_ADDRESS BSSID;
276 unsigned long Flags;
277} PMKID_CANDIDATE, *PPMKID_CANDIDATE;
278
279typedef struct _BSSID_INFO
280{
281 NDIS_802_11_MAC_ADDRESS BSSID;
282 NDIS_802_11_PMKID_VALUE PMKID;
283} BSSID_INFO, *PBSSID_INFO;
284
285typedef struct tagSPMKID {
286 unsigned long Length;
287 unsigned long BSSIDInfoCount;
288 BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID];
289} SPMKID, *PSPMKID;
290
291typedef struct tagSPMKIDCandidateEvent {
292 NDIS_802_11_STATUS_TYPE StatusType;
293 unsigned long Version;
294 unsigned long NumCandidates;
295 PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST];
296} SPMKIDCandidateEvent, *PSPMKIDCandidateEvent;
297
298
299#define MAX_QUIET_COUNT 8
300
301typedef struct tagSQuietControl {
302 bool bEnable;
303 u32 dwStartTime;
304 u8 byPeriod;
305 u16 wDuration;
306} SQuietControl, *PSQuietControl;
307
308
309typedef struct tagSCacheEntry{
310 u16 wFmSequence;
311 u8 abyAddr2[ETH_ALEN];
312 u16 wFrameCtl;
313} SCacheEntry, *PSCacheEntry;
314
315typedef struct tagSCache{
316
317
318
319 unsigned int uInPtr;
320 SCacheEntry asCacheEntry[DUPLICATE_RX_CACHE_LENGTH];
321} SCache, *PSCache;
322
323#define CB_MAX_RX_FRAG 64
324
325
326
327typedef struct tagSDeFragControlBlock
328{
329 u16 wSequence;
330 u16 wFragNum;
331 u8 abyAddr2[ETH_ALEN];
332 unsigned int uLifetime;
333 struct sk_buff* skb;
334 u8 * pbyRxBuffer;
335 unsigned int cbFrameLength;
336 bool bInUse;
337} SDeFragControlBlock, *PSDeFragControlBlock;
338
339
340#define DEVICE_FLAGS_UNPLUG 0x00000001UL
341#define DEVICE_FLAGS_PREAMBLE_TYPE 0x00000002UL
342#define DEVICE_FLAGS_OP_MODE 0x00000004UL
343#define DEVICE_FLAGS_PS_MODE 0x00000008UL
344#define DEVICE_FLAGS_80211h_MODE 0x00000010UL
345
346
347#define DEVICE_FLAGS_OPENED 0x00010000UL
348#define DEVICE_FLAGS_WOL_ENABLED 0x00080000UL
349
350#define DEVICE_FLAGS_TX_ALIGN 0x01000000UL
351#define DEVICE_FLAGS_HAVE_CAM 0x02000000UL
352#define DEVICE_FLAGS_FLOW_CTRL 0x04000000UL
353
354
355#define DEVICE_LINK_FAIL 0x00000001UL
356#define DEVICE_SPEED_10 0x00000002UL
357#define DEVICE_SPEED_100 0x00000004UL
358#define DEVICE_SPEED_1000 0x00000008UL
359#define DEVICE_DUPLEX_FULL 0x00000010UL
360#define DEVICE_AUTONEG_ENABLE 0x00000020UL
361#define DEVICE_FORCED_BY_EEPROM 0x00000040UL
362
363#define DEVICE_LINK_CHANGE 0x00000001UL
364
365typedef struct __device_opt {
366 int nRxDescs0;
367 int nTxDescs0;
368 int rts_thresh;
369 int frag_thresh;
370 int OpMode;
371 int data_rate;
372 int channel_num;
373 int short_retry;
374 int long_retry;
375 int bbp_type;
376 u32 flags;
377} OPTIONS, *POPTIONS;
378
379struct vnt_private {
380
381 struct usb_device *usb;
382 struct net_device *dev;
383 struct net_device_stats stats;
384
385 OPTIONS sOpts;
386
387 struct tasklet_struct CmdWorkItem;
388 struct tasklet_struct EventWorkItem;
389 struct tasklet_struct ReadWorkItem;
390 struct tasklet_struct RxMngWorkItem;
391
392 u32 rx_buf_sz;
393 int multicast_limit;
394 u8 byRxMode;
395
396 spinlock_t lock;
397
398 u32 rx_bytes;
399
400 u8 byRevId;
401
402 u32 flags;
403 unsigned long Flags;
404
405 SCache sDupRxCache;
406
407 SDeFragControlBlock sRxDFCB[CB_MAX_RX_FRAG];
408 u32 cbDFCB;
409 u32 cbFreeDFCB;
410 u32 uCurrentDFCBIdx;
411
412
413 struct urb *pControlURB;
414 struct urb *pInterruptURB;
415 struct usb_ctrlrequest sUsbCtlRequest;
416 u32 int_interval;
417
418
419 PRCB pRCBMem;
420 PRCB apRCB[CB_MAX_RX_DESC];
421 u32 cbRD;
422 PRCB FirstRecvFreeList;
423 PRCB LastRecvFreeList;
424 u32 NumRecvFreeList;
425 PRCB FirstRecvMngList;
426 PRCB LastRecvMngList;
427 u32 NumRecvMngList;
428 int bIsRxWorkItemQueued;
429 int bIsRxMngWorkItemQueued;
430 unsigned long ulRcvRefCount;
431
432
433 PUSB_SEND_CONTEXT apTD[CB_MAX_TX_DESC];
434 u32 cbTD;
435
436
437 INT_BUFFER intBuf;
438 int fKillEventPollingThread;
439 int bEventAvailable;
440
441
442 DEFAULT_CONFIG config_file;
443
444
445 unsigned long ulBulkInPosted;
446 unsigned long ulBulkInError;
447 unsigned long ulBulkInContCRCError;
448 unsigned long ulBulkInBytesRead;
449
450 unsigned long ulBulkOutPosted;
451 unsigned long ulBulkOutError;
452 unsigned long ulBulkOutContCRCError;
453 unsigned long ulBulkOutBytesWrite;
454
455 unsigned long ulIntInPosted;
456 unsigned long ulIntInError;
457 unsigned long ulIntInContCRCError;
458 unsigned long ulIntInBytesRead;
459
460
461 u16 wFirmwareVersion;
462 u8 byLocalID;
463 u8 byRFType;
464 u8 byBBRxConf;
465
466 u8 byZoneType;
467 int bZoneRegExist;
468
469 u8 byOriginalZonetype;
470
471 int bLinkPass;
472 u8 abyCurrentNetAddr[ETH_ALEN];
473 u8 abyPermanentNetAddr[ETH_ALEN];
474
475 int bExistSWNetAddr;
476
477
478 SStatCounter scStatistic;
479
480 SDot11Counters s802_11Counter;
481
482
483 unsigned long packetsReceived;
484 unsigned long packetsReceivedDropped;
485 unsigned long packetsReceivedOverflow;
486 unsigned long packetsSent;
487 unsigned long packetsSentDropped;
488 unsigned long SendContextsInUse;
489 unsigned long RcvBuffersInUse;
490
491
492 struct vnt_manager vnt_mgmt;
493
494 u64 qwCurrTSF;
495 u32 cbBulkInMax;
496 int bPSRxBeacon;
497
498
499 u32 uCurrRSSI;
500 u8 byCurrSQ;
501
502
503 int bTxRxAntInv;
504 u32 dwRxAntennaSel;
505 u32 dwTxAntennaSel;
506 u8 byAntennaCount;
507 u8 byRxAntennaMode;
508 u8 byTxAntennaMode;
509 u8 byRadioCtl;
510 u8 bHWRadioOff;
511
512
513 struct timer_list TimerSQ3Tmax1;
514 struct timer_list TimerSQ3Tmax2;
515 struct timer_list TimerSQ3Tmax3;
516
517 int bDiversityRegCtlON;
518 int bDiversityEnable;
519 unsigned long ulDiversityNValue;
520 unsigned long ulDiversityMValue;
521 u8 byTMax;
522 u8 byTMax2;
523 u8 byTMax3;
524 unsigned long ulSQ3TH;
525
526 unsigned long uDiversityCnt;
527 u8 byAntennaState;
528 unsigned long ulRatio_State0;
529 unsigned long ulRatio_State1;
530 unsigned long ulSQ3_State0;
531 unsigned long ulSQ3_State1;
532
533 unsigned long aulSQ3Val[MAX_RATE];
534 unsigned long aulPktNum[MAX_RATE];
535
536
537 u32 uSIFS;
538 u32 uDIFS;
539 u32 uEIFS;
540 u32 uSlot;
541 u32 uCwMin;
542 u32 uCwMax;
543
544
545 u8 bySIFS;
546 u8 byDIFS;
547 u8 byEIFS;
548 u8 bySlot;
549 u8 byCWMaxMin;
550
551
552 VIA_BB_TYPE byBBType;
553 VIA_PKT_TYPE byPacketType;
554 u16 wBasicRate;
555 u8 byACKRate;
556 u8 byTopOFDMBasicRate;
557 u8 byTopCCKBasicRate;
558
559 u32 dwAotoRateTxOkCnt;
560 u32 dwAotoRateTxFailCnt;
561 u32 dwErrorRateThreshold[13];
562 u32 dwTPTable[MAX_RATE];
563 u8 abyEEPROM[EEP_MAX_CONTEXT_SIZE];
564
565 u8 byMinChannel;
566 u8 byMaxChannel;
567 u32 uConnectionRate;
568
569 u8 byPreambleType;
570 u8 byShortPreamble;
571
572 u8 eConfigPHYMode;
573
574
575 u8 byCCKPwr;
576 u8 byOFDMPwrG;
577 u8 byOFDMPwrA;
578 u8 byCurPwr;
579 u8 abyCCKPwrTbl[14];
580 u8 abyOFDMPwrTbl[14];
581 u8 abyOFDMAPwrTbl[42];
582
583 u16 wCurrentRate;
584 u16 wRTSThreshold;
585 u16 wFragmentationThreshold;
586 u8 byShortRetryLimit;
587 u8 byLongRetryLimit;
588 CARD_OP_MODE eOPMode;
589 int bBSSIDFilter;
590 u16 wMaxTransmitMSDULifetime;
591 u8 abyBSSID[ETH_ALEN];
592 u8 abyDesireBSSID[ETH_ALEN];
593
594 u16 wCTSDuration;
595 u16 wACKDuration;
596 u16 wRTSTransmitLen;
597 u8 byRTSServiceField;
598 u8 byRTSSignalField;
599
600 u32 dwMaxReceiveLifetime;
601
602 int bCCK;
603 int bEncryptionEnable;
604 int bLongHeader;
605 int bSoftwareGenCrcErr;
606 int bShortSlotTime;
607 int bProtectMode;
608 int bNonERPPresent;
609 int bBarkerPreambleMd;
610
611 u8 byERPFlag;
612 u16 wUseProtectCntDown;
613
614 int bRadioControlOff;
615 int bRadioOff;
616
617
618 int bEnablePSMode;
619 u16 wListenInterval;
620 int bPWBitOn;
621 WMAC_POWER_MODE ePSMode;
622 unsigned long ulPSModeWaitTx;
623 int bPSModeTxBurst;
624
625
626 u16 wSeqCounter;
627 int bBeaconBufReady;
628 int bBeaconSent;
629 int bFixRate;
630 u8 byCurrentCh;
631 u32 uScanTime;
632
633 CMD_STATE eCommandState;
634
635 CMD_CODE eCommand;
636 int bBeaconTx;
637 u8 byScanBBType;
638
639 int bStopBeacon;
640 int bStopDataPkt;
641 int bStopTx0Pkt;
642 u32 uAutoReConnectTime;
643 u32 uIsroamingTime;
644
645
646
647 CMD_ITEM eCmdQueue[CMD_Q_SIZE];
648 u32 uCmdDequeueIdx;
649 u32 uCmdEnqueueIdx;
650 u32 cbFreeCmdQueue;
651 int bCmdRunning;
652 int bCmdClear;
653 int bNeedRadioOFF;
654
655 int bEnableRoaming;
656 int bIsRoaming;
657 int bFastRoaming;
658 u8 bSameBSSMaxNum;
659 u8 bSameBSSCurNum;
660 int bRoaming;
661 int b11hEable;
662 unsigned long ulTxPower;
663
664
665 NDIS_802_11_WEP_STATUS eEncryptionStatus;
666 int bTransmitKey;
667 NDIS_802_11_WEP_STATUS eOldEncryptionStatus;
668 SKeyManagement sKey;
669 u32 dwIVCounter;
670
671 RC4Ext SBox;
672 u8 abyPRNG[WLAN_WEPMAX_KEYLEN+3];
673 u8 byKeyIndex;
674
675 int bAES;
676
677 u32 uKeyLength;
678 u8 abyKey[WLAN_WEP232_KEYLEN];
679
680
681 u32 uAssocCount;
682 int bMoreData;
683
684
685 int bGrpAckPolicy;
686
687 u8 byAutoFBCtrl;
688
689 int bTxMICFail;
690 int bRxMICFail;
691
692
693 int bUpdateBBVGA;
694 u32 uBBVGADiffCount;
695 u8 byBBVGANew;
696 u8 byBBVGACurrent;
697 u8 abyBBVGA[BB_VGA_LEVEL];
698 signed long ldBmThreshold[BB_VGA_LEVEL];
699
700 u8 byBBPreEDRSSI;
701 u8 byBBPreEDIndex;
702
703 int bRadioCmd;
704 u32 dwDiagRefCount;
705
706
707 u8 byFOETuning;
708
709
710 u8 byAutoPwrTunning;
711
712
713 u8 byBBCR4d;
714 u8 byBBCRc9;
715 u8 byBBCR88;
716 u8 byBBCR09;
717
718
719 struct timer_list sTimerCommand;
720
721 struct timer_list sTimerTxData;
722 unsigned long nTxDataTimeCout;
723 int fTxDataInSleep;
724 int IsTxDataTrigger;
725
726 int fWPA_Authened;
727 u8 byReAssocCount;
728 u8 byLinkWaitCount;
729
730 struct ethhdr sTxEthHeader;
731 struct ethhdr sRxEthHeader;
732 u8 abyBroadcastAddr[ETH_ALEN];
733 u8 abySNAP_RFC1042[ETH_ALEN];
734 u8 abySNAP_Bridgetunnel[ETH_ALEN];
735
736
737 SPMKID gsPMKID;
738 SPMKIDCandidateEvent gsPMKIDCandidate;
739
740
741 int b11hEnable;
742
743 int bChannelSwitch;
744 u8 byNewChannel;
745 u8 byChannelSwitchCount;
746
747
748 int bWPADEVUp;
749 int bwextstep0;
750 int bwextstep1;
751 int bwextstep2;
752 int bwextstep3;
753 int bWPASuppWextEnabled;
754
755
756 int bEnableHostapd;
757 int bEnable8021x;
758 int bEnableHostWEP;
759 struct net_device *apdev;
760 int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
761
762 u32 uChannel;
763
764 struct iw_statistics wstats;
765
766 int bCommit;
767
768};
769
770#define EnqueueRCB(_Head, _Tail, _RCB) \
771{ \
772 if (!_Head) { \
773 _Head = _RCB; \
774 } \
775 else { \
776 _Tail->Next = _RCB; \
777 } \
778 _RCB->Next = NULL; \
779 _Tail = _RCB; \
780}
781
782#define DequeueRCB(Head, Tail) \
783{ \
784 PRCB RCB = Head; \
785 if (!RCB->Next) { \
786 Tail = NULL; \
787 } \
788 Head = RCB->Next; \
789}
790
791#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) { \
792 if ((uVar) >= ((uModulo) - 1)) \
793 (uVar) = 0; \
794 else \
795 (uVar)++; \
796}
797
798#define fMP_RESET_IN_PROGRESS 0x00000001
799#define fMP_DISCONNECTED 0x00000002
800#define fMP_HALT_IN_PROGRESS 0x00000004
801#define fMP_SURPRISE_REMOVED 0x00000008
802#define fMP_RECV_LOOKASIDE 0x00000010
803#define fMP_INIT_IN_PROGRESS 0x00000020
804#define fMP_SEND_SIDE_RESOURCE_ALLOCATED 0x00000040
805#define fMP_RECV_SIDE_RESOURCE_ALLOCATED 0x00000080
806#define fMP_POST_READS 0x00000100
807#define fMP_POST_WRITES 0x00000200
808#define fMP_CONTROL_READS 0x00000400
809#define fMP_CONTROL_WRITES 0x00000800
810
811#define MP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
812#define MP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
813#define MP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
814
815#define MP_IS_READY(_M) (((_M)->Flags & \
816 (fMP_DISCONNECTED | fMP_RESET_IN_PROGRESS | fMP_HALT_IN_PROGRESS | fMP_INIT_IN_PROGRESS | fMP_SURPRISE_REMOVED)) == 0)
817
818int device_alloc_frag_buf(struct vnt_private *, PSDeFragControlBlock pDeF);
819
820#endif
821