Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
device.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * File: device.h
20  *
21  * Purpose: MAC Data structure
22  *
23  * Author: Tevin Chen
24  *
25  * Date: Mar 17, 1997
26  *
27  */
28 
29 #ifndef __DEVICE_H__
30 #define __DEVICE_H__
31 
32 #include <linux/module.h>
33 #include <linux/types.h>
34 #include <linux/init.h>
35 #include <linux/mm.h>
36 #include <linux/errno.h>
37 #include <linux/ioport.h>
38 #include <linux/pci.h>
39 #include <linux/kernel.h>
40 #include <linux/netdevice.h>
41 #include <linux/etherdevice.h>
42 #include <linux/skbuff.h>
43 #include <linux/delay.h>
44 #include <linux/timer.h>
45 #include <linux/slab.h>
46 #include <linux/interrupt.h>
47 #include <linux/string.h>
48 #include <linux/wait.h>
49 #include <linux/if_arp.h>
50 #include <linux/sched.h>
51 #include <linux/io.h>
52 #include <linux/if.h>
53 //#include <linux/config.h>
54 #include <linux/uaccess.h>
55 #include <linux/proc_fs.h>
56 #include <linux/inetdevice.h>
57 #include <linux/reboot.h>
58 #ifdef SIOCETHTOOL
59 #define DEVICE_ETHTOOL_IOCTL_SUPPORT
60 #include <linux/ethtool.h>
61 #else
62 #undef DEVICE_ETHTOOL_IOCTL_SUPPORT
63 #endif
64 /* Include Wireless Extension definition and check version - Jean II */
65 #include <linux/wireless.h>
66 #include <net/iw_handler.h> // New driver API
67 
68 //2008-0409-07, <Add> by Einsn Liu
69 #ifndef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
70 #define WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
71 #endif
72 
73 //
74 // device specific
75 //
76 
77 #include "device_cfg.h"
78 #include "ttype.h"
79 #include "80211hdr.h"
80 #include "tether.h"
81 #include "wmgr.h"
82 #include "wcmd.h"
83 #include "mib.h"
84 #include "srom.h"
85 #include "rc4.h"
86 #include "desc.h"
87 #include "key.h"
88 #include "mac.h"
89 
90 
91 /*--------------------- Export Definitions -------------------------*/
92 
93 #define MAC_MAX_CONTEXT_REG (256+128)
94 
95 #define MAX_MULTICAST_ADDRESS_NUM 32
96 #define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * ETH_ALEN)
97 
98 #define DUPLICATE_RX_CACHE_LENGTH 5
99 
100 #define NUM_KEY_ENTRY 11
101 
102 #define TX_WEP_NONE 0
103 #define TX_WEP_OTF 1
104 #define TX_WEP_SW 2
105 #define TX_WEP_SWOTP 3
106 #define TX_WEP_OTPSW 4
107 #define TX_WEP_SW232 5
108 
109 #define KEYSEL_WEP40 0
110 #define KEYSEL_WEP104 1
111 #define KEYSEL_TKIP 2
112 #define KEYSEL_CCMP 3
113 
114 
115 
116 #define AUTO_FB_NONE 0
117 #define AUTO_FB_0 1
118 #define AUTO_FB_1 2
119 
120 #define FB_RATE0 0
121 #define FB_RATE1 1
122 
123 // Antenna Mode
124 #define ANT_A 0
125 #define ANT_B 1
126 #define ANT_DIVERSITY 2
127 #define ANT_RXD_TXA 3
128 #define ANT_RXD_TXB 4
129 #define ANT_UNKNOWN 0xFF
130 
131 #define MAXCHECKHANGCNT 4
132 
133 #define BB_VGA_LEVEL 4
134 #define BB_VGA_CHANGE_THRESHOLD 16
135 
136 
137 
138 #ifndef RUN_AT
139 #define RUN_AT(x) (jiffies+(x))
140 #endif
141 
142 // DMA related
143 #define RESERV_AC0DMA 4
144 
145 
146 // BUILD OBJ mode
147 
148 
149 #define AVAIL_TD(p,q) ((p)->sOpts.nTxDescs[(q)]-((p)->iTDUsed[(q)]))
150 
151 //PLICE_DEBUG ->
152 #define NUM 64
153 //PLICE_DEUBG <-
154 
155 
156 
157 #define PRIVATE_Message 0
158 
159 /*--------------------- Export Types ------------------------------*/
160 
161 
162 #define DBG_PRT(l, p, args...) {if (l<=msglevel) printk( p ,##args);}
163 #define PRINT_K(p, args...) {if (PRIVATE_Message) printk( p ,##args);}
164 
165 //0:11A 1:11B 2:11G
166 typedef enum _VIA_BB_TYPE
167 {
172 
173 //0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
174 typedef enum _VIA_PKT_TYPE
175 {
181 
182 
183 typedef enum __device_msg_level {
184  MSG_LEVEL_ERR=0, //Errors that will cause abnormal operation.
185  MSG_LEVEL_NOTICE=1, //Some errors need users to be notified.
186  MSG_LEVEL_INFO=2, //Normal message.
187  MSG_LEVEL_VERBOSE=3, //Will report all trival errors.
188  MSG_LEVEL_DEBUG=4 //Only for debug purpose.
190 
191 typedef enum __device_init_type {
192  DEVICE_INIT_COLD=0, // cold init
193  DEVICE_INIT_RESET, // reset init or Dx to D0 power remain init
194  DEVICE_INIT_DXPL // Dx to D0 power lost init
196 
197 
198 //++ NDIS related
199 
200 #define MAX_BSSIDINFO_4_PMKID 16
201 #define MAX_PMKIDLIST 5
202 //Flags for PMKID Candidate list structure
203 #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01
204 
205 // PMKID Structures
206 typedef unsigned char NDIS_802_11_PMKID_VALUE[16];
207 
208 
210 {
225 
226 
228 {
232  Ndis802_11StatusTypeMax // not a real type, defined as an upper bound
234 
235 //Added new types for PMKID Candidate lists.
236 typedef struct _PMKID_CANDIDATE {
238  unsigned long Flags;
240 
241 
242 typedef struct _BSSID_INFO
243 {
247 
248 typedef struct tagSPMKID {
249  unsigned long Length;
250  unsigned long BSSIDInfoCount;
252 } SPMKID, *PSPMKID;
253 
254 typedef struct tagSPMKIDCandidateEvent {
256  unsigned long Version; // Version of the structure
257  unsigned long NumCandidates; // No. of pmkid candidates
260 
261 //--
262 
263 //++ 802.11h related
264 #define MAX_QUIET_COUNT 8
265 
266 typedef struct tagSQuietControl {
267  bool bEnable;
268  unsigned long dwStartTime;
269  unsigned char byPeriod;
270  unsigned short wDuration;
272 
273 //--
274 typedef struct __chip_info_tbl{
276  char* name;
277  int io_size;
278  int nTxQueue;
281 
282 
283 typedef enum {
287 
288 
289 // The receive duplicate detection cache entry
290 typedef struct tagSCacheEntry{
291  unsigned short wFmSequence;
292  unsigned char abyAddr2[ETH_ALEN];
294 
295 typedef struct tagSCache{
296 /* The receive cache is updated circularly. The next entry to be written is
297  * indexed by the "InPtr".
298 */
299  unsigned int uInPtr; // Place to use next
301 } SCache, *PSCache;
302 
303 #define CB_MAX_RX_FRAG 64
304 // DeFragment Control Block, used for collecting fragments prior to reassembly
306 {
307  unsigned short wSequence;
308  unsigned short wFragNum;
309  unsigned char abyAddr2[ETH_ALEN];
310  unsigned int uLifetime;
311  struct sk_buff* skb;
312  unsigned char *pbyRxBuffer;
313  unsigned int cbFrameLength;
314  bool bInUse;
316 
317 
318 
319 //flags for options
320 #define DEVICE_FLAGS_IP_ALIGN 0x00000001UL
321 #define DEVICE_FLAGS_PREAMBLE_TYPE 0x00000002UL
322 #define DEVICE_FLAGS_OP_MODE 0x00000004UL
323 #define DEVICE_FLAGS_PS_MODE 0x00000008UL
324 #define DEVICE_FLAGS_80211h_MODE 0x00000010UL
325 #define DEVICE_FLAGS_DiversityANT 0x00000020UL
326 
327 //flags for driver status
328 #define DEVICE_FLAGS_OPENED 0x00010000UL
329 #define DEVICE_FLAGS_WOL_ENABLED 0x00080000UL
330 //flags for capabilities
331 #define DEVICE_FLAGS_TX_ALIGN 0x01000000UL
332 #define DEVICE_FLAGS_HAVE_CAM 0x02000000UL
333 #define DEVICE_FLAGS_FLOW_CTRL 0x04000000UL
334 
335 //flags for MII status
336 #define DEVICE_LINK_FAIL 0x00000001UL
337 #define DEVICE_SPEED_10 0x00000002UL
338 #define DEVICE_SPEED_100 0x00000004UL
339 #define DEVICE_SPEED_1000 0x00000008UL
340 #define DEVICE_DUPLEX_FULL 0x00000010UL
341 #define DEVICE_AUTONEG_ENABLE 0x00000020UL
342 #define DEVICE_FORCED_BY_EEPROM 0x00000040UL
343 //for device_set_media_duplex
344 #define DEVICE_LINK_CHANGE 0x00000001UL
345 
346 
347 //PLICE_DEBUG->
348 
349 
350 typedef struct _RxManagementQueue
351 {
353  int head,tail;
356 
357 
358 
359 //PLICE_DEBUG<-
360 
361 
362 typedef struct __device_opt {
363  int nRxDescs0; //Number of RX descriptors0
364  int nRxDescs1; //Number of RX descriptors1
365  int nTxDescs[2]; //Number of TX descriptors 0, 1
366  int int_works; //interrupt limits
367  int rts_thresh; //rts threshold
373  int bbp_type;
375 } OPTIONS, *POPTIONS;
376 
377 
378 typedef struct __device_info {
381 
382  struct pci_dev* pcid;
383 
384 #ifdef CONFIG_PM
385  u32 pci_state[16];
386 #endif
387 
388 // netdev
389  struct net_device* dev;
392 
393 //dma addr, rx/tx pool
397 
400 
404 
405  unsigned char *tx0_bufs;
406  unsigned char *tx1_bufs;
407  unsigned char *tx_beacon_bufs;
408 
410 
411  unsigned long PortOffset;
412  unsigned long dwIsr;
416 
417  unsigned char byRevId;
418  unsigned short SubSystemID;
419  unsigned short SubVendorID;
420 
422  volatile int iTDUsed[TYPE_MAXTD];
423 
426 
429 
430  volatile PSRxDesc aRD0Ring;
431  volatile PSRxDesc aRD1Ring;
434 
436  unsigned int cbDFCB;
437  unsigned int cbFreeDFCB;
438  unsigned int uCurrentDFCBIdx;
439 
441 
443 
446  unsigned char byRxMode;
447 
449 //PLICE_DEBUG->
452 //PLICE_DEBUG<-
453 //PLICE_DEBUG ->
457 //PLICE_DEBUG <-
458 
459 
461 
462  // Version control
463  unsigned char byLocalID;
464  unsigned char byRFType;
465 
466  unsigned char byMaxPwrLevel;
467  unsigned char byZoneType;
469  unsigned char byOriginalZonetype;
471  bool bLinkPass; // link status: OK or fail
472  unsigned char abyCurrentNetAddr[ETH_ALEN];
473 
474  // Adapter statistics
476  // 802.11 counter
478 
479 
480  // 802.11 management
483 
484  // 802.11 MAC specific
485  unsigned int uCurrRSSI;
486  unsigned char byCurrSQ;
487 
488  unsigned long dwTxAntennaSel;
489  unsigned long dwRxAntennaSel;
490  unsigned char byAntennaCount;
491  unsigned char byRxAntennaMode;
492  unsigned char byTxAntennaMode;
494 
495  unsigned char *pbyTmpBuff;
496  unsigned int uSIFS; //Current SIFS
497  unsigned int uDIFS; //Current DIFS
498  unsigned int uEIFS; //Current EIFS
499  unsigned int uSlot; //Current SlotTime
500  unsigned int uCwMin; //Current CwMin
501  unsigned int uCwMax; //CwMax is fixed on 1023.
502  // PHY parameter
503  unsigned char bySIFS;
504  unsigned char byDIFS;
505  unsigned char byEIFS;
506  unsigned char bySlot;
507  unsigned char byCWMaxMin;
509 
510 
511  VIA_BB_TYPE byBBType; //0: 11A, 1:11B, 2:11G
512  VIA_PKT_TYPE byPacketType; //0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
513  unsigned short wBasicRate;
514  unsigned char byACKRate;
515  unsigned char byTopOFDMBasicRate;
516  unsigned char byTopCCKBasicRate;
517 
518  unsigned char byMinChannel;
519  unsigned char byMaxChannel;
520  unsigned int uConnectionRate;
521 
522  unsigned char byPreambleType;
523  unsigned char byShortPreamble;
524 
525  unsigned short wCurrentRate;
526  unsigned short wRTSThreshold;
527  unsigned short wFragmentationThreshold;
528  unsigned char byShortRetryLimit;
529  unsigned char byLongRetryLimit;
531  unsigned char byOpMode;
533  unsigned short wMaxTransmitMSDULifetime;
534  unsigned char abyBSSID[ETH_ALEN];
535  unsigned char abyDesireBSSID[ETH_ALEN];
536  unsigned short wCTSDuration; // update while speed change
537  unsigned short wACKDuration; // update while speed change
538  unsigned short wRTSTransmitLen; // update while speed change
539  unsigned char byRTSServiceField; // update while speed change
540  unsigned char byRTSSignalField; // update while speed change
541 
542  unsigned long dwMaxReceiveLifetime; // dot11MaxReceiveLifetime
543 
544  bool bCCK;
551 
552  unsigned char byERPFlag;
553  unsigned short wUseProtectCntDown;
554 
556  bool bRadioOff;
558  unsigned short wListenInterval;
559  bool bPWBitOn;
561 
562 
563  // GPIO Radio Control
564  unsigned char byRadioCtl;
565  unsigned char byGPIO;
569 
570  // Beacon related
571  unsigned short wSeqCounter;
572  unsigned short wBCNBufLen;
577  bool bFixRate;
578  unsigned char byCurrentCh;
579  unsigned int uScanTime;
580 
582 
584  bool bBeaconTx;
585 
589  unsigned int uAutoReConnectTime;
590 
591  // 802.11 counter
592 
594  unsigned int uCmdDequeueIdx;
595  unsigned int uCmdEnqueueIdx;
596  unsigned int cbFreeCmdQueue;
598  bool bCmdClear;
599 
600 
601 
602  bool bRoaming;
603  //WOW
604  unsigned char abyIPAddr[4];
605 
606  unsigned long ulTxPower;
609 //2007-0925-01<Add>by MikeLiu
610 //mike add :save old Encryption
612 
614  unsigned long dwIVCounter;
615 
616  QWORD qwPacketNumber; //For CCMP and TKIP as TSC(6 bytes)
617  unsigned int uCurrentWEPMode;
618 
620  unsigned char abyPRNG[WLAN_WEPMAX_KEYLEN+3];
621  unsigned char byKeyIndex;
622  unsigned int uKeyLength;
623  unsigned char abyKey[WLAN_WEP232_KEYLEN];
624 
625  bool bAES;
626  unsigned char byCntMeasure;
627 
628  // for AP mode
629  unsigned int uAssocCount;
630  bool bMoreData;
631 
632  // QoS
634 
635  // for OID_802_11_ASSOCIATION_INFORMATION
637 
638 
639  unsigned char byAutoFBCtrl;
640 
643 
644 
645  unsigned int uRATEIdx;
646 
647 
648  // For Update BaseBand VGA Gain Offset
650  unsigned int uBBVGADiffCount;
651  unsigned char byBBVGANew;
652  unsigned char byBBVGACurrent;
653  unsigned char abyBBVGA[BB_VGA_LEVEL];
655 
656  unsigned char byBBPreEDRSSI;
657  unsigned char byBBPreEDIndex;
658 
659 
660  bool bRadioCmd;
661  unsigned long dwDiagRefCount;
662 
663  // For FOE Tuning
664  unsigned char byFOETuning;
665 
666  // For Auto Power Tunning
667 
668  unsigned char byAutoPwrTunning;
673  short sPThreshold;
675  char cMinTxAGC;
676 
677  // For RF Power table
678  unsigned char byCCKPwr;
679  unsigned char byOFDMPwrG;
680  unsigned char byCurPwr;
683  unsigned char abyOFDMPwrTbl[CB_MAX_CHANNEL+1];
688 
689 
690  // BaseBand Loopback Use
691  unsigned char byBBCR4d;
692  unsigned char byBBCRc9;
693  unsigned char byBBCR88;
694  unsigned char byBBCR09;
695 
696  // command timer
698 #ifdef TxInSleep
700  unsigned long nTxDataTimeCout;
703 #endif
704 
705 #ifdef WPA_SM_Transtatus
706  bool fWPA_Authened; //is WPA/WPA-PSK or WPA2/WPA2-PSK authen??
707 #endif
708  unsigned char byReAssocCount; //mike add:re-association retry times!
709  unsigned char byLinkWaitCount;
710 
711 
712  unsigned char abyNodeName[17];
713 
716  unsigned long ulDiversityNValue;
717  unsigned long ulDiversityMValue;
718  unsigned char byTMax;
719  unsigned char byTMax2;
720  unsigned char byTMax3;
721  unsigned long ulSQ3TH;
722 
723 // ANT diversity
724  unsigned long uDiversityCnt;
725  unsigned char byAntennaState;
726  unsigned long ulRatio_State0;
727  unsigned long ulRatio_State1;
728 
729  //SQ3 functions for antenna diversity
733 
734 
735  unsigned long uNumSQ3[MAX_RATE];
736  unsigned short wAntDiversityMaxRate;
737 
738 
739  SEthernetHeader sTxEthHeader;
740  SEthernetHeader sRxEthHeader;
741  unsigned char abyBroadcastAddr[ETH_ALEN];
742  unsigned char abySNAP_RFC1042[ETH_ALEN];
744  unsigned char abyEEPROM[EEP_MAX_CONTEXT_SIZE]; //unsigned long alignment
745  // Pre-Authentication & PMK cache
748 
749 
750  // for 802.11h
752  unsigned char abyCountryCode[3];
753  // for 802.11h DFS
754  unsigned int uNumOfMeasureEIDs;
757  unsigned char byOrgChannel;
758  unsigned char byOrgRCR;
759  unsigned long dwOrgMAR0;
760  unsigned long dwOrgMAR4;
761  unsigned char byBasicMap;
762  unsigned char byCCAFraction;
763  unsigned char abyRPIs[8];
764  unsigned long dwRPIs[8];
766  unsigned char byNewChannel;
767  unsigned char byChannelSwitchCount;
770  unsigned char byQuietStartCount;
771  unsigned int uQuietEnqueue;
772  unsigned long dwCurrentQuietEndTime;
774  // for 802.11h TPC
777 
778  unsigned short wBeaconInterval;
779 
780  //WPA supplicant deamon
782  bool bWPADEVUp;
783  struct sk_buff *skb;
784 #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
785 /*
786  bool bwextstep0;
787  bool bwextstep1;
788  bool bwextstep2;
789  bool bwextstep3;
790  */
791  unsigned int bwextcount;
793 #endif
794 
795  //--
796 #ifdef HOSTAP
797  // user space daemon: hostapd, is used for HOSTAP
798  bool bEnableHostapd;
799  bool bEnable8021x;
800  bool bEnableHostWEP;
801  struct net_device *apdev;
802  int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
803 #endif
804  unsigned int uChannel;
806 
807  struct iw_statistics wstats; // wireless stats
808  bool bCommit;
809 
811 
812 
813 //PLICE_DEBUG->
814 
815 
816  inline static void EnQueue (PSDevice pDevice,PSRxMgmtPacket pRxMgmtPacket)
817 {
818  //printk("Enter EnQueue:tail is %d\n",pDevice->rxManeQueue.tail);
819  if ((pDevice->rxManeQueue.tail+1) % NUM == pDevice->rxManeQueue.head)
820  {
821  //printk("Queue is Full,tail is %d\n",pDevice->rxManeQueue.tail);
822  return ;
823  }
824  else
825  {
826  pDevice->rxManeQueue.tail = (pDevice->rxManeQueue.tail+1)% NUM;
827  pDevice->rxManeQueue.Q[pDevice->rxManeQueue.tail] = pRxMgmtPacket;
828  pDevice->rxManeQueue.packet_num++;
829  //printk("packet num is %d\n",pDevice->rxManeQueue.packet_num);
830  }
831 }
832 
833 
834 
835 
836  inline static PSRxMgmtPacket DeQueue (PSDevice pDevice)
837 {
838  PSRxMgmtPacket pRxMgmtPacket;
839  if (pDevice->rxManeQueue.tail == pDevice->rxManeQueue.head)
840  {
841  printk("Queue is Empty\n");
842  return NULL;
843  }
844  else
845  {
846  int x;
847  //x=pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM;
848  pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM;
849  x = pDevice->rxManeQueue.head;
850  //printk("Enter DeQueue:head is %d\n",x);
851  pRxMgmtPacket = pDevice->rxManeQueue.Q[x];
852  pDevice->rxManeQueue.packet_num--;
853  return pRxMgmtPacket;
854  }
855 }
856 
857 void InitRxManagementQueue(PSDevice pDevice);
858 
859 
860 
861 //PLICE_DEBUG<-
862 
863 
864 
865 
866 
867 
868 inline static bool device_get_ip(PSDevice pInfo) {
869  struct in_device* in_dev=(struct in_device*) pInfo->dev->ip_ptr;
870  struct in_ifaddr* ifa;
871 
872  if (in_dev!=NULL) {
873  ifa=(struct in_ifaddr*) in_dev->ifa_list;
874  if (ifa!=NULL) {
875  memcpy(pInfo->abyIPAddr,&ifa->ifa_address,4);
876  return true;
877  }
878  }
879  return false;
880 }
881 
882 
883 
884 static inline PDEVICE_RD_INFO alloc_rd_info(void) {
886  ptr = (PDEVICE_RD_INFO)kmalloc((int)sizeof(DEVICE_RD_INFO), (int)GFP_ATOMIC);
887  if (ptr == NULL)
888  return NULL;
889  else {
890  memset(ptr,0,sizeof(DEVICE_RD_INFO));
891  return ptr;
892  }
893 }
894 
895 static inline PDEVICE_TD_INFO alloc_td_info(void) {
897  ptr = (PDEVICE_TD_INFO)kmalloc((int)sizeof(DEVICE_TD_INFO), (int)GFP_ATOMIC);
898  if (ptr == NULL)
899  return NULL;
900  else {
901  memset(ptr,0,sizeof(DEVICE_TD_INFO));
902  return ptr;
903  }
904 }
905 
906 /*--------------------- Export Functions --------------------------*/
907 
908 bool device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, unsigned int uNodeIndex);
909 bool device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF);
910 int Config_FileOperation(PSDevice pDevice, bool fwrite, unsigned char *Parameter);
911 #endif
912 
913