summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/P2P_SendMgnt.c
blob: b465d459ad62c1272ef421e01eaa88193308b9d2 (plain)
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