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
|
#include "Mp_Precomp.h"
#if WPP_SOFTWARE_TRACE
#include "P2P_SendMgnt.tmh"
#endif
#include "P2P_Internal.h"
#if (P2P_SUPPORT == 1)
//-----------------------------------------------------------------------------
// Local
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Exported
//-----------------------------------------------------------------------------
VOID
p2p_Send_ProbeRsp(
IN P2P_INFO *pP2PInfo,
IN const u1Byte *da,
IN RT_RFD *rfdProbeReq,
IN OCTET_STRING *posProbeReq,
IN OCTET_STRING *posAttrs
)
{
PRT_TCB pTcb;
PRT_TX_LOCAL_BUFFER pBuf;
u1Byte dataRate = P2P_LOWEST_RATE;
PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK);
if(MgntGetBuffer(pP2PInfo->pAdapter, &pTcb, &pBuf))
{
FRAME_BUF fbuf;
FrameBuf_Init(pP2PInfo->pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf);
if(p2p_Construct_ProbeRsp(&fbuf, pP2PInfo, da, rfdProbeReq, posProbeReq, posAttrs))
{
pTcb->PacketLength = FrameBuf_Length(&fbuf);
MgntSendPacket(pP2PInfo->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate);
}
else
{
pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL;
pTcb->BufferList[0] = pBuf->Buffer;
pTcb->Reserved = pBuf;
ReturnTCB(pP2PInfo->pAdapter, pTcb, RT_STATUS_SUCCESS);
}
}
PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK);
}
#endif
|