Root/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/htc/htc_internal.h

1/*
2 *
3 * Copyright (c) 2007 Atheros Communications Inc.
4 * All rights reserved.
5 *
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation;
10 *
11 * Software distributed under the License is distributed on an "AS
12 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
13 * implied. See the License for the specific language governing
14 * rights and limitations under the License.
15 *
16 *
17 *
18 */
19
20#ifndef _HTC_INTERNAL_H_
21#define _HTC_INTERNAL_H_
22
23/* for debugging, uncomment this to capture the last frame header, on frame header
24 * processing errors, the last frame header is dump for comparison */
25//#define HTC_CAPTURE_LAST_FRAME
26
27//#define HTC_EP_STAT_PROFILING
28
29#ifdef __cplusplus
30extern "C" {
31#endif /* __cplusplus */
32
33/* Header files */
34#include "a_config.h"
35#include "athdefs.h"
36#include "a_types.h"
37#include "a_osapi.h"
38#include "a_debug.h"
39#include "htc.h"
40#include "htc_api.h"
41#include "bmi_msg.h"
42#include "hif.h"
43#include "ar6k.h"
44
45/* HTC operational parameters */
46#define HTC_TARGET_RESPONSE_TIMEOUT 2000 /* in ms */
47#define HTC_TARGET_DEBUG_INTR_MASK 0x01
48#define HTC_TARGET_CREDIT_INTR_MASK 0xF0
49
50typedef struct _HTC_ENDPOINT {
51    HTC_SERVICE_ID ServiceID; /* service ID this endpoint is bound to
52                                                   non-zero value means this endpoint is in use */
53    HTC_PACKET_QUEUE TxQueue; /* HTC frame buffer TX queue */
54    HTC_PACKET_QUEUE RxBuffers; /* HTC frame buffer RX list */
55    HTC_ENDPOINT_CREDIT_DIST CreditDist; /* credit distribution structure (exposed to driver layer) */
56    HTC_EP_CALLBACKS EpCallBacks; /* callbacks associated with this endpoint */
57    int MaxTxQueueDepth; /* max depth of the TX queue before we need to
58                                                      call driver's full handler */
59    int CurrentTxQueueDepth; /* current TX queue depth */
60    int MaxMsgLength; /* max length of endpoint message */
61#ifdef HTC_EP_STAT_PROFILING
62    HTC_ENDPOINT_STATS EndPointStats; /* endpoint statistics */
63#endif
64} HTC_ENDPOINT;
65
66#ifdef HTC_EP_STAT_PROFILING
67#define INC_HTC_EP_STAT(p,stat,count) (p)->EndPointStats.stat += (count);
68#else
69#define INC_HTC_EP_STAT(p,stat,count)
70#endif
71
72#define HTC_SERVICE_TX_PACKET_TAG HTC_TX_PACKET_TAG_INTERNAL
73
74#define NUM_CONTROL_BUFFERS 8
75#define NUM_CONTROL_TX_BUFFERS 2
76#define NUM_CONTROL_RX_BUFFERS (NUM_CONTROL_BUFFERS - NUM_CONTROL_TX_BUFFERS)
77
78#define HTC_CONTROL_BUFFER_SIZE (HTC_MAX_CONTROL_MESSAGE_LENGTH + HTC_HDR_LENGTH)
79
80typedef struct HTC_CONTROL_BUFFER {
81    HTC_PACKET HtcPacket;
82    A_UINT8 Buffer[HTC_CONTROL_BUFFER_SIZE];
83} HTC_CONTROL_BUFFER;
84
85/* our HTC target state */
86typedef struct _HTC_TARGET {
87    HTC_ENDPOINT EndPoint[ENDPOINT_MAX];
88    HTC_CONTROL_BUFFER HTCControlBuffers[NUM_CONTROL_BUFFERS];
89    HTC_ENDPOINT_CREDIT_DIST *EpCreditDistributionListHead;
90    HTC_PACKET_QUEUE ControlBufferTXFreeList;
91    HTC_PACKET_QUEUE ControlBufferRXFreeList;
92    HTC_CREDIT_DIST_CALLBACK DistributeCredits;
93    HTC_CREDIT_INIT_CALLBACK InitCredits;
94    void *pCredDistContext;
95    int TargetCredits;
96    int TargetCreditSize;
97    A_MUTEX_T HTCLock;
98    A_MUTEX_T HTCRxLock;
99    A_MUTEX_T HTCTxLock;
100    AR6K_DEVICE Device; /* AR6K - specific state */
101    A_UINT32 HTCStateFlags;
102    HTC_ENDPOINT_ID EpWaitingForBuffers;
103    A_BOOL TargetFailure;
104    void *pInstanceContext;
105#define HTC_STATE_WAIT_BUFFERS (1 << 0)
106#define HTC_STATE_STOPPING (1 << 1)
107#ifdef HTC_CAPTURE_LAST_FRAME
108    HTC_FRAME_HDR LastFrameHdr; /* useful for debugging */
109    A_UINT8 LastTrailer[256];
110    A_UINT8 LastTrailerLength;
111#endif
112} HTC_TARGET;
113
114#define HTC_STOPPING(t) ((t)->HTCStateFlags & HTC_STATE_STOPPING)
115#define LOCK_HTC(t) A_MUTEX_LOCK(&(t)->HTCLock);
116#define UNLOCK_HTC(t) A_MUTEX_UNLOCK(&(t)->HTCLock);
117#define LOCK_HTC_RX(t) A_MUTEX_LOCK(&(t)->HTCRxLock);
118#define UNLOCK_HTC_RX(t) A_MUTEX_UNLOCK(&(t)->HTCRxLock);
119#define LOCK_HTC_TX(t) A_MUTEX_LOCK(&(t)->HTCTxLock);
120#define UNLOCK_HTC_TX(t) A_MUTEX_UNLOCK(&(t)->HTCTxLock);
121
122#define GET_HTC_TARGET_FROM_HANDLE(hnd) ((HTC_TARGET *)(hnd))
123#define HTC_RECYCLE_RX_PKT(target,p) \
124{ \
125    HTC_PACKET_RESET_RX(pPacket); \
126    HTCAddReceivePkt((HTC_HANDLE)(target),(p)); \
127}
128
129/* internal HTC functions */
130void HTCControlTxComplete(void *Context, HTC_PACKET *pPacket);
131void HTCControlRecv(void *Context, HTC_PACKET *pPacket);
132A_STATUS HTCWaitforControlMessage(HTC_TARGET *target, HTC_PACKET **ppControlPacket);
133HTC_PACKET *HTCAllocControlBuffer(HTC_TARGET *target, HTC_PACKET_QUEUE *pList);
134void HTCFreeControlBuffer(HTC_TARGET *target, HTC_PACKET *pPacket, HTC_PACKET_QUEUE *pList);
135A_STATUS HTCIssueSend(HTC_TARGET *target, HTC_PACKET *pPacket, A_UINT8 Flags);
136A_STATUS HTCIssueRecv(HTC_TARGET *target, HTC_PACKET *pPacket);
137void HTCRecvCompleteHandler(void *Context, HTC_PACKET *pPacket);
138A_STATUS HTCRecvMessagePendingHandler(void *Context, A_UINT32 LookAhead, A_BOOL *pAsyncProc);
139void HTCProcessCreditRpt(HTC_TARGET *target, HTC_CREDIT_REPORT *pRpt, int NumEntries, HTC_ENDPOINT_ID FromEndpoint);
140A_STATUS HTCSendSetupComplete(HTC_TARGET *target);
141void HTCFlushRecvBuffers(HTC_TARGET *target);
142void HTCFlushSendPkts(HTC_TARGET *target);
143void DumpCreditDist(HTC_ENDPOINT_CREDIT_DIST *pEPDist);
144void DumpCreditDistStates(HTC_TARGET *target);
145void DebugDumpBytes(A_UCHAR *buffer, A_UINT16 length, char *pDescription);
146
147static INLINE HTC_PACKET *HTC_ALLOC_CONTROL_TX(HTC_TARGET *target) {
148    HTC_PACKET *pPacket = HTCAllocControlBuffer(target,&target->ControlBufferTXFreeList);
149    if (pPacket != NULL) {
150            /* set payload pointer area with some headroom */
151        pPacket->pBuffer = pPacket->pBufferStart + HTC_HDR_LENGTH;
152    }
153    return pPacket;
154}
155
156#define HTC_FREE_CONTROL_TX(t,p) HTCFreeControlBuffer((t),(p),&(t)->ControlBufferTXFreeList)
157#define HTC_ALLOC_CONTROL_RX(t) HTCAllocControlBuffer((t),&(t)->ControlBufferRXFreeList)
158#define HTC_FREE_CONTROL_RX(t,p) \
159{ \
160    HTC_PACKET_RESET_RX(p); \
161    HTCFreeControlBuffer((t),(p),&(t)->ControlBufferRXFreeList); \
162}
163
164#ifdef __cplusplus
165}
166#endif
167
168#endif /* _HTC_INTERNAL_H_ */
169

Archive Download this file



interactive