Merge branch 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / drivers / staging / bcm / Adapter.h
1 /***********************************
2 *       Adapter.h
3 ************************************/
4 #ifndef __ADAPTER_H__
5 #define __ADAPTER_H__
6
7 #define MAX_FRAGMENTEDIP_CLASSIFICATION_ENTRIES 256
8 #include "Debug.h"
9
10 struct bcm_leader {
11         USHORT  Vcid;
12         USHORT  PLength;
13         UCHAR   Status;
14         UCHAR   Unused[3];
15 } __packed;
16
17 struct bcm_packettosend {
18         struct bcm_leader Leader;
19         UCHAR   ucPayload;
20 } __packed;
21
22 struct bcm_control_packet {
23         PVOID   ControlBuff;
24         UINT    ControlBuffLen;
25         struct bcm_control_packet *next;
26 } __packed;
27
28 struct bcm_link_request {
29         struct bcm_leader Leader;
30         UCHAR   szData[4];
31 } __packed;
32
33 #define MAX_IP_RANGE_LENGTH 4
34 #define MAX_PORT_RANGE 4
35 #define MAX_PROTOCOL_LENGTH   32
36 #define IPV6_ADDRESS_SIZEINBYTES 0x10
37
38 union u_ip_address {
39         struct {
40                 /* Source Ip Address Range */
41                 ULONG ulIpv4Addr[MAX_IP_RANGE_LENGTH];
42                  /* Source Ip Mask Address Range */
43                 ULONG ulIpv4Mask[MAX_IP_RANGE_LENGTH];
44         };
45         struct {
46                 /* Source Ip Address Range */
47                 ULONG ulIpv6Addr[MAX_IP_RANGE_LENGTH * 4];
48                 /* Source Ip Mask Address Range */
49                 ULONG ulIpv6Mask[MAX_IP_RANGE_LENGTH * 4];
50         };
51         struct {
52                 UCHAR ucIpv4Address[MAX_IP_RANGE_LENGTH * IP_LENGTH_OF_ADDRESS];
53                 UCHAR ucIpv4Mask[MAX_IP_RANGE_LENGTH * IP_LENGTH_OF_ADDRESS];
54         };
55         struct {
56                 UCHAR ucIpv6Address[MAX_IP_RANGE_LENGTH * IPV6_ADDRESS_SIZEINBYTES];
57                 UCHAR ucIpv6Mask[MAX_IP_RANGE_LENGTH * IPV6_ADDRESS_SIZEINBYTES];
58         };
59 };
60
61 struct bcm_hdr_suppression_contextinfo {
62         /* Intermediate buffer to accumulate pkt Header for PHS */
63         UCHAR ucaHdrSuppressionInBuf[MAX_PHS_LENGTHS];
64         /* Intermediate buffer containing pkt Header after PHS */
65         UCHAR ucaHdrSuppressionOutBuf[MAX_PHS_LENGTHS + PHSI_LEN];
66 };
67
68 struct bcm_classifier_rule {
69         ULONG           ulSFID;
70         UCHAR           ucReserved[2];
71         B_UINT16        uiClassifierRuleIndex;
72         bool            bUsed;
73         USHORT          usVCID_Value;
74         /* This field detemines the Classifier Priority */
75         B_UINT8         u8ClassifierRulePriority;
76         union u_ip_address      stSrcIpAddress;
77         UCHAR           ucIPSourceAddressLength; /* Ip Source Address Length */
78
79         union u_ip_address      stDestIpAddress;
80         /* Ip Destination Address Length */
81         UCHAR           ucIPDestinationAddressLength;
82         UCHAR           ucIPTypeOfServiceLength; /* Type of service Length */
83         UCHAR           ucTosLow; /* Tos Low */
84         UCHAR           ucTosHigh; /* Tos High */
85         UCHAR           ucTosMask; /* Tos Mask */
86
87         UCHAR           ucProtocolLength; /* protocol Length */
88         UCHAR           ucProtocol[MAX_PROTOCOL_LENGTH]; /* protocol Length */
89         USHORT          usSrcPortRangeLo[MAX_PORT_RANGE];
90         USHORT          usSrcPortRangeHi[MAX_PORT_RANGE];
91         UCHAR           ucSrcPortRangeLength;
92
93         USHORT          usDestPortRangeLo[MAX_PORT_RANGE];
94         USHORT          usDestPortRangeHi[MAX_PORT_RANGE];
95         UCHAR           ucDestPortRangeLength;
96
97         bool            bProtocolValid;
98         bool            bTOSValid;
99         bool            bDestIpValid;
100         bool            bSrcIpValid;
101
102         /* For IPv6 Addressing */
103         UCHAR           ucDirection;
104         bool            bIpv6Protocol;
105         UINT32          u32PHSRuleID;
106         struct bcm_phs_rule sPhsRule;
107         UCHAR           u8AssociatedPHSI;
108
109         /* Classification fields for ETH CS */
110         UCHAR           ucEthCSSrcMACLen;
111         UCHAR           au8EThCSSrcMAC[MAC_ADDRESS_SIZE];
112         UCHAR           au8EThCSSrcMACMask[MAC_ADDRESS_SIZE];
113         UCHAR           ucEthCSDestMACLen;
114         UCHAR           au8EThCSDestMAC[MAC_ADDRESS_SIZE];
115         UCHAR           au8EThCSDestMACMask[MAC_ADDRESS_SIZE];
116         UCHAR           ucEtherTypeLen;
117         UCHAR           au8EthCSEtherType[NUM_ETHERTYPE_BYTES];
118         UCHAR           usUserPriority[2];
119         USHORT          usVLANID;
120         USHORT          usValidityBitMap;
121 };
122
123 struct bcm_fragmented_packet_info {
124         bool                    bUsed;
125         ULONG                   ulSrcIpAddress;
126         USHORT                  usIpIdentification;
127         struct bcm_classifier_rule *pstMatchedClassifierEntry;
128         bool                    bOutOfOrderFragment;
129 };
130
131 struct bcm_packet_info {
132         /* classification extension Rule */
133         ULONG           ulSFID;
134         USHORT          usVCID_Value;
135         UINT            uiThreshold;
136         /* This field determines the priority of the SF Queues */
137         B_UINT8         u8TrafficPriority;
138
139         bool            bValid;
140         bool            bActive;
141         bool            bActivateRequestSent;
142
143         B_UINT8         u8QueueType; /* BE or rtPS */
144
145         /* maximum size of the bucket for the queue */
146         UINT            uiMaxBucketSize;
147         UINT            uiCurrentQueueDepthOnTarget;
148         UINT            uiCurrentBytesOnHost;
149         UINT            uiCurrentPacketsOnHost;
150         UINT            uiDroppedCountBytes;
151         UINT            uiDroppedCountPackets;
152         UINT            uiSentBytes;
153         UINT            uiSentPackets;
154         UINT            uiCurrentDrainRate;
155         UINT            uiThisPeriodSentBytes;
156         LARGE_INTEGER   liDrainCalculated;
157         UINT            uiCurrentTokenCount;
158         LARGE_INTEGER   liLastUpdateTokenAt;
159         UINT            uiMaxAllowedRate;
160         UINT            NumOfPacketsSent;
161         UCHAR           ucDirection;
162         USHORT          usCID;
163         struct bcm_mibs_parameters stMibsExtServiceFlowTable;
164         UINT            uiCurrentRxRate;
165         UINT            uiThisPeriodRxBytes;
166         UINT            uiTotalRxBytes;
167         UINT            uiTotalTxBytes;
168         UINT            uiPendedLast;
169         UCHAR           ucIpVersion;
170
171         union {
172                 struct {
173                         struct sk_buff *FirstTxQueue;
174                         struct sk_buff *LastTxQueue;
175                 };
176                 struct {
177                         struct sk_buff *ControlHead;
178                         struct sk_buff *ControlTail;
179                 };
180         };
181
182         bool            bProtocolValid;
183         bool            bTOSValid;
184         bool            bDestIpValid;
185         bool            bSrcIpValid;
186
187         bool            bActiveSet;
188         bool            bAdmittedSet;
189         bool            bAuthorizedSet;
190         bool            bClassifierPriority;
191         UCHAR           ucServiceClassName[MAX_CLASS_NAME_LENGTH];
192         bool            bHeaderSuppressionEnabled;
193         spinlock_t      SFQueueLock;
194         void            *pstSFIndication;
195         struct timeval  stLastUpdateTokenAt;
196         atomic_t        uiPerSFTxResourceCount;
197         UINT            uiMaxLatency;
198         UCHAR           bIPCSSupport;
199         UCHAR           bEthCSSupport;
200 };
201
202 struct bcm_tarang_data {
203         struct bcm_tarang_data  *next;
204         struct bcm_mini_adapter *Adapter;
205         struct sk_buff          *RxAppControlHead;
206         struct sk_buff          *RxAppControlTail;
207         int                     AppCtrlQueueLen;
208         bool                    MacTracingEnabled;
209         bool                    bApplicationToExit;
210         struct bcm_mibs_dropped_cntrl_msg stDroppedAppCntrlMsgs;
211         ULONG                   RxCntrlMsgBitMask;
212 };
213
214 struct bcm_targetdsx_buffer {
215         ULONG           ulTargetDsxBuffer;
216         B_UINT16        tid;
217         bool            valid;
218 };
219
220 typedef int (*FP_FLASH_WRITE)(struct bcm_mini_adapter *, UINT, PVOID);
221
222 typedef int (*FP_FLASH_WRITE_STATUS)(struct bcm_mini_adapter *, UINT, PVOID);
223
224 /*
225  * Driver adapter data structure
226  */
227 struct bcm_mini_adapter {
228         struct bcm_mini_adapter *next;
229         struct net_device       *dev;
230         u32                     msg_enable;
231         CHAR                    *caDsxReqResp;
232         atomic_t                ApplicationRunning;
233         bool                    AppCtrlQueueOverFlow;
234         atomic_t                CurrentApplicationCount;
235         atomic_t                RegisteredApplicationCount;
236         bool                    LinkUpStatus;
237         bool                    TimerActive;
238         u32                     StatisticsPointer;
239         struct sk_buff          *RxControlHead;
240         struct sk_buff          *RxControlTail;
241         struct semaphore        RxAppControlQueuelock;
242         struct semaphore        fw_download_sema;
243         struct bcm_tarang_data  *pTarangs;
244         spinlock_t              control_queue_lock;
245         wait_queue_head_t       process_read_wait_queue;
246
247         /* the pointer to the first packet we have queued in send
248          * deserialized miniport support variables
249          */
250         atomic_t                TotalPacketCount;
251         atomic_t                TxPktAvail;
252
253         /* this to keep track of the Tx and Rx MailBox Registers. */
254         atomic_t                CurrNumFreeTxDesc;
255         /* to keep track the no of byte received */
256         USHORT                  PrevNumRecvDescs;
257         USHORT                  CurrNumRecvDescs;
258         UINT                    u32TotalDSD;
259         struct bcm_packet_info  PackInfo[NO_OF_QUEUES];
260         struct bcm_classifier_rule astClassifierTable[MAX_CLASSIFIERS];
261         bool                    TransferMode;
262
263         /*************** qos ******************/
264         bool                    bETHCSEnabled;
265         ULONG                   BEBucketSize;
266         ULONG                   rtPSBucketSize;
267         UCHAR                   LinkStatus;
268         bool                    AutoLinkUp;
269         bool                    AutoSyncup;
270
271         int                     major;
272         int                     minor;
273         wait_queue_head_t       tx_packet_wait_queue;
274         wait_queue_head_t       process_rx_cntrlpkt;
275         atomic_t                process_waiting;
276         bool                    fw_download_done;
277
278         char                    *txctlpacket[MAX_CNTRL_PKTS];
279         atomic_t                cntrlpktCnt;
280         atomic_t                index_app_read_cntrlpkt;
281         atomic_t                index_wr_txcntrlpkt;
282         atomic_t                index_rd_txcntrlpkt;
283         UINT                    index_datpkt;
284         struct semaphore        rdmwrmsync;
285
286         struct bcm_targetdsx_buffer     astTargetDsxBuffer[MAX_TARGET_DSX_BUFFERS];
287         ULONG                   ulFreeTargetBufferCnt;
288         ULONG                   ulCurrentTargetBuffer;
289         ULONG                   ulTotalTargetBuffersAvailable;
290         unsigned long           chip_id;
291         wait_queue_head_t       lowpower_mode_wait_queue;
292         bool                    bFlashBoot;
293         bool                    bBinDownloaded;
294         bool                    bCfgDownloaded;
295         bool                    bSyncUpRequestSent;
296         USHORT                  usBestEffortQueueIndex;
297         wait_queue_head_t       ioctl_fw_dnld_wait_queue;
298         bool                    waiting_to_fw_download_done;
299         pid_t                   fw_download_process_pid;
300         struct bcm_target_params *pstargetparams;
301         bool                    device_removed;
302         bool                    DeviceAccess;
303         bool                    bIsAutoCorrectEnabled;
304         bool                    bDDRInitDone;
305         int                     DDRSetting;
306         ULONG                   ulPowerSaveMode;
307         spinlock_t              txtransmitlock;
308         B_UINT8                 txtransmit_running;
309         /* Thread for control packet handling */
310         struct task_struct      *control_packet_handler;
311         /* thread for transmitting packets. */
312         struct task_struct      *transmit_packet_thread;
313
314         /* LED Related Structures */
315         struct bcm_led_info     LEDInfo;
316
317         /* Driver State for LED Blinking */
318         enum bcm_led_events     DriverState;
319         /* Interface Specific */
320         PVOID                   pvInterfaceAdapter;
321         int (*bcm_file_download)(PVOID,
322                                 struct file *,
323                                 unsigned int);
324         int (*bcm_file_readback_from_chip)(PVOID,
325                                         struct file *,
326                                         unsigned int);
327         int (*interface_rdm)(PVOID,
328                         UINT,
329                         PVOID,
330                         int);
331         int (*interface_wrm)(PVOID,
332                         UINT,
333                         PVOID,
334                         int);
335         int (*interface_transmit)(PVOID, PVOID , UINT);
336         bool                    IdleMode;
337         bool                    bDregRequestSentInIdleMode;
338         bool                    bTriedToWakeUpFromlowPowerMode;
339         bool                    bShutStatus;
340         bool                    bWakeUpDevice;
341         unsigned int            usIdleModePattern;
342         /* BOOLEAN                      bTriedToWakeUpFromShutdown; */
343         bool                    bLinkDownRequested;
344         int                     downloadDDR;
345         struct bcm_phs_extension stBCMPhsContext;
346         struct bcm_hdr_suppression_contextinfo stPhsTxContextInfo;
347         uint8_t                 ucaPHSPktRestoreBuf[2048];
348         uint8_t                 bPHSEnabled;
349         bool                    AutoFirmDld;
350         bool                    bMipsConfig;
351         bool                    bDPLLConfig;
352         UINT32                  aTxPktSizeHist[MIBS_MAX_HIST_ENTRIES];
353         UINT32                  aRxPktSizeHist[MIBS_MAX_HIST_ENTRIES];
354         struct bcm_fragmented_packet_info
355                 astFragmentedPktClassifierTable[MAX_FRAGMENTEDIP_CLASSIFICATION_ENTRIES];
356         atomic_t                uiMBupdate;
357         UINT32                  PmuMode;
358         enum bcm_nvm_type       eNVMType;
359         UINT                    uiSectorSize;
360         UINT                    uiSectorSizeInCFG;
361         bool                    bSectorSizeOverride;
362         bool                    bStatusWrite;
363         UINT                    uiNVMDSDSize;
364         UINT                    uiVendorExtnFlag;
365         /* it will always represent chosen DSD at any point of time.
366          * Generally it is Active DSD but in case of NVM RD/WR it
367          * might be different.
368          */
369         UINT                    ulFlashCalStart;
370         ULONG                   ulFlashControlSectionStart;
371         ULONG                   ulFlashWriteSize;
372         ULONG                   ulFlashID;
373         FP_FLASH_WRITE          fpFlashWrite;
374         FP_FLASH_WRITE_STATUS   fpFlashWriteWithStatusCheck;
375
376         struct semaphore        NVMRdmWrmLock;
377         struct device           *pstCreatedClassDevice;
378
379         /*      BOOLEAN                         InterfaceUpStatus; */
380         struct bcm_flash2x_cs_info *psFlash2xCSInfo;
381         struct bcm_flash_cs_info *psFlashCSInfo;
382         struct bcm_flash2x_vendor_info *psFlash2xVendorInfo;
383         UINT                    uiFlashBaseAdd; /* Flash start address */
384         /* Active ISO offset chosen before f/w download */
385         UINT                    uiActiveISOOffset;
386         enum bcm_flash2x_section_val eActiveISO; /* Active ISO section val */
387         /* Active DSD val chosen before f/w download */
388         enum bcm_flash2x_section_val eActiveDSD;
389         /* For accessing Active DSD chosen before f/w download */
390         UINT                    uiActiveDSDOffsetAtFwDld;
391         UINT                    uiFlashLayoutMajorVersion;
392         UINT                    uiFlashLayoutMinorVersion;
393         bool                    bAllDSDWriteAllow;
394         bool                    bSigCorrupted;
395         /* this should be set who so ever want to change the Headers.
396          * after Write it should be reset immediately.
397          */
398         bool                    bHeaderChangeAllowed;
399         int                     SelectedChip;
400         bool                    bEndPointHalted;
401         /* while bFlashRawRead will be true, Driver
402          * ignore map lay out and consider flash as of without any map.
403          */
404         bool                    bFlashRawRead;
405         bool                    bPreparingForLowPowerMode;
406         bool                    bDoSuspend;
407         UINT                    syscfgBefFwDld;
408         bool                    StopAllXaction;
409         /* Used to Support extended CAPI requirements from */
410         UINT32                  liTimeSinceLastNetEntry;
411         struct semaphore        LowPowerModeSync;
412         ULONG                   liDrainCalculated;
413         UINT                    gpioBitMap;
414         struct bcm_debug_state  stDebugState;
415 };
416
417 #define GET_BCM_ADAPTER(net_dev) netdev_priv(net_dev)
418
419 struct bcm_eth_header {
420         UCHAR   au8DestinationAddress[6];
421         UCHAR   au8SourceAddress[6];
422         USHORT  u16Etype;
423 } __packed;
424
425 struct bcm_firmware_info {
426         void    __user *pvMappedFirmwareAddress;
427         ULONG   u32FirmwareLength;
428         ULONG   u32StartingAddress;
429 } __packed;
430
431 /* holds the value of net_device structure.. */
432 extern struct net_device *gblpnetdev;
433
434 struct bcm_ddr_setting {
435         UINT ulRegAddress;
436         UINT ulRegValue;
437 };
438 int InitAdapter(struct bcm_mini_adapter *psAdapter);
439
440 /* =====================================================================
441  * Beceem vendor request codes for EP0
442  * =====================================================================
443  */
444
445 #define BCM_REQUEST_READ        0x2
446 #define BCM_REQUEST_WRITE       0x1
447 #define EP2_MPS_REG             0x0F0110A0
448 #define EP2_MPS                 0x40
449
450 #define EP2_CFG_REG     0x0F0110A8
451 #define EP2_CFG_INT     0x27
452 #define EP2_CFG_BULK    0x25
453
454 #define EP4_MPS_REG     0x0F0110F0
455 #define EP4_MPS         0x8C
456
457 #define EP4_CFG_REG     0x0F0110F8
458
459 #define ISO_MPS_REG     0x0F0110C8
460 #define ISO_MPS         0x00000000
461
462 #define EP1 0
463 #define EP2 1
464 #define EP3 2
465 #define EP4 3
466 #define EP5 4
467 #define EP6 5
468
469 enum bcm_einterface_setting {
470         DEFAULT_SETTING_0  = 0,
471         ALTERNATE_SETTING_1 = 1,
472 };
473
474 #endif  /* __ADAPTER_H__ */