コード例 #1
0
ファイル: ap_nps.c プロジェクト: 23171580/ralink
VOID write_tmac_info_tim(RTMP_ADAPTER *pAd, INT apidx, UCHAR *tmac_buf, HTTRANSMIT_SETTING *BeaconTransmit, ULONG frmLen)
{
	MAC_TX_INFO mac_info;

	NdisZeroMemory((UCHAR *)&mac_info, sizeof(mac_info));

#ifdef MT_MAC
	mac_info.Type = FC_TYPE_MGMT;
	mac_info.SubType = SUBTYPE_BEACON;
#endif
	mac_info.FRAG = FALSE;
	mac_info.CFACK = FALSE;
	mac_info.InsTimestamp = FALSE;
	mac_info.AMPDU = FALSE;
	mac_info.BM = 1;
	mac_info.Ack = FALSE;
	mac_info.NSeq = TRUE;
	mac_info.BASize = 0;
	mac_info.WCID = 0;
	mac_info.Length = frmLen;
	mac_info.PID = PID_MGMT;
	mac_info.TID = 0;
	mac_info.TxRate = 0;
	mac_info.Txopmode = IFS_HTTXOP;
	mac_info.q_idx = Q_IDX_BCN;
	mac_info.hdr_len = 24;
	mac_info.bss_idx = apidx;
	mac_info.SpeEn = 1;
	mac_info.Preamble = LONG_PREAMBLE;
	write_tmac_info(pAd, tmac_buf, &mac_info, BeaconTransmit);
}
コード例 #2
0
ファイル: ap_connect.c プロジェクト: 23171580/ralink
VOID write_tmac_info_beacon(RTMP_ADAPTER *pAd, INT apidx, UCHAR *tmac_buf, HTTRANSMIT_SETTING *BeaconTransmit, ULONG frmLen)
{
	MAC_TX_INFO mac_info;

	NdisZeroMemory((UCHAR *)&mac_info, sizeof(mac_info));

	mac_info.FRAG = FALSE;
	mac_info.CFACK = FALSE;
	mac_info.InsTimestamp = TRUE;
	mac_info.AMPDU = FALSE;
	mac_info.BM = 1;
	mac_info.Ack = FALSE;
	mac_info.NSeq = TRUE;
	mac_info.BASize = 0;
	mac_info.WCID = RESERVED_WCID;
	mac_info.Length = frmLen;
	mac_info.PID = PID_MGMT;
	mac_info.TID = 0;
	mac_info.TxRate = 0;
	mac_info.Txopmode = IFS_HTTXOP;
	mac_info.Preamble = LONG_PREAMBLE;
	write_tmac_info(pAd, tmac_buf, &mac_info, BeaconTransmit);

#ifdef SPECIFIC_TX_POWER_SUPPORT
	/* Specific Power for Long-Range Beacon */
	if ((pAd->ApCfg.MBSSID[apidx].TxPwrAdj != -1) &&
	    (BeaconTransmit->field.MODE == MODE_CCK))
	{
		UCHAR TxPwrAdj = 0;
		TXWI_STRUC *pTxWI = (TXWI_STRUC *)tmac_buf;

		TxPwrAdj = pAd->ApCfg.MBSSID[apidx].TxPwrAdj;
#ifdef RTMP_MAC
		if (pAd->chipCap.hif_type == HIF_RTMP)
      		  	pTxWI->TXWI_O.TxPwrAdj = TxPwrAdj;
#endif /* RTMP_MAC */
#ifdef RLT_MAC
		if (pAd->chipCap.hif_type == HIF_RLT)
			pTxWI->TXWI_N.TxPwrAdj = TxPwrAdj;
#endif /* RLT_MAC */
	}
#endif /* SPECIFIC_TX_POWER_SUPPORT */
}
コード例 #3
0
ファイル: bt_coex.c プロジェクト: vm3vuy/my-local-repository
VOID PrepareProtectionFrame(
	IN	PRTMP_ADAPTER	pAd,
	IN	ULONG		   Type,
	IN	ULONG		   Number,
	IN	ULONG		NAV,
	IN	ULONG		   OPMode,
	IN	PMAC_TABLE_ENTRY pEntry)
{
	HEADER_802_11	   ProtectionFrame;
	TXWI_STRUC		  ProtectionFrameTxWI;
	TXWI_STRUC		  *pTxWI;
	UCHAR			   *ptr = NULL;
	UINT				i = 0;
	//PHY_CFG PhyCfg = {0};
	UCHAR			   Wcid = 0;
	UCHAR			   Length = 0;
	ULONG			   FrameAddress = 0;
	BOOLEAN			 Ack = FALSE;
	DBGPRINT(RT_DEBUG_TRACE, ("==>PrepareProtectionFrame\n"));	

	NdisZeroMemory(&ProtectionFrameTxWI, sizeof(TXWI_STRUC));
	NdisZeroMemory(&ProtectionFrame, sizeof(HEADER_802_11));
	
	//ProtectionFrame.FC.Type = BTYPE_DATA;
	switch (Type){
		
		case CTSTOSELF:
		ProtectionFrame.FC.Type =FC_TYPE_CNTL;
			ProtectionFrame.FC.SubType = SUBTYPE_CTS;
			break;
			
		case CFEND:
		ProtectionFrame.FC.Type = FC_TYPE_CNTL;
			ProtectionFrame.FC.SubType = SUBTYPE_CFEND;
			break;
			
		case POWERSAVE1:
		ProtectionFrame.FC.Type =FC_TYPE_DATA;
			ProtectionFrame.FC.SubType = SUBTYPE_DATA_NULL; 
			ProtectionFrame.FC.PwrMgmt = PWR_SAVE;
			ProtectionFrame.FC.ToDs = 1;
	   ProtectionFrame.FC.FrDs = 0;		
			break;
			
		case POWERSAVE0:
		ProtectionFrame.FC.Type =FC_TYPE_DATA;
			ProtectionFrame.FC.SubType = SUBTYPE_DATA_NULL;	  
			ProtectionFrame.FC.PwrMgmt = PWR_ACTIVE;
			ProtectionFrame.FC.ToDs = 1;
	   ProtectionFrame.FC.FrDs = 0;
			break;						 
	}

	if (Type == CTSTOSELF)  
	{
		COPY_MAC_ADDR(ProtectionFrame.Addr1, pAd->CurrentAddress);
		ProtectionFrame.Duration = (USHORT)NAV;
		Wcid = 0xff;
		Length = 10;
	}
	else if (Type == CFEND)
	{
		 COPY_MAC_ADDR(ProtectionFrame.Addr1, BROADCAST_ADDR);
		 COPY_MAC_ADDR(ProtectionFrame.Addr2, pAd->CurrentAddress);
		 ProtectionFrame.Duration = 0;
		 Wcid = 0xff;
		 Length = 16;
	}
	else
	{
		pAd->Sequence	   = (pAd->Sequence+1) & MAXSEQ;//((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER);
		ProtectionFrame.Sequence = pAd->Sequence;
		ProtectionFrame.Duration = RTMPCalcDuration(pAd, RATE_1, 14);				

		COPY_MAC_ADDR(ProtectionFrame.Addr1, pEntry->Addr);
		COPY_MAC_ADDR(ProtectionFrame.Addr2,  pAd->CurrentAddress);
		COPY_MAC_ADDR(ProtectionFrame.Addr3,  pAd->CommonCfg.Bssid);
		Ack =TRUE;
		Wcid = BSSID_WCID;
		Length =  sizeof(HEADER_802_11) ;
	}

	pTxWI = (TXWI_STRUC *)&ProtectionFrameTxWI;
	//write_tmac_info(pAd, (UCHAR *)pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, Length,
	//					0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_HTTXOP, &pAd->CommonCfg.MlmeTransmit);
	write_tmac_info(pAd,
					(UCHAR *)pTxWI,
					FALSE,
					FALSE,
					FALSE,
					FALSE,
					FALSE,
					0,
					0,
					pEntry->Aid,
					Length,
					0,
					0,
					(UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS,
					IFS_HTTXOP,
					&pAd->CommonCfg.MlmeTransmit);
	pTxWI->TXWI_N.PHYMODE = MODE_CCK;
	pTxWI->TXWI_N.MCS= 0;

	if (Number == 0)
	{
		FrameAddress = HW_NULL_BASE + 0x4000;
	}
	else if (Number == 1)
	{
		FrameAddress = HW_NULL2_BASE + 0x4000;
	}
	else
	{
		//trigger number 0/1 is belong to null number address 
		//Beacon address from D000
		FrameAddress = 0xD000 + (0x200*(Number-2));
	}
	DBGPRINT(RT_DEBUG_TRACE, ("Protection FrameAddress =0x%08x \n", (UINT32)FrameAddress));
	//
	// Move TXWI and frame content to on-chip memory
	//
	ptr = (PUCHAR)&ProtectionFrameTxWI;
	for (i=0; i<pAd->chipCap.TXWISize; i+=4)  // 24-byte TXINFO field
	{
		RTMP_IO_WRITE32(pAd, FrameAddress + i, *((UINT32 *)ptr));
		ptr +=4 ;
	}

	
	ptr = (PUCHAR)&ProtectionFrame;
	DBGPRINT(RT_DEBUG_TRACE, ("Type =%lu \n",Type));
	hex_dump("PrepareProtectionFrame" ,ptr, Length);
	for (i = 0; i < Length; i+=4)
	{
		RTMP_IO_WRITE32(pAd, FrameAddress + pAd->chipCap.TXWISize + i, *((UINT32 *)ptr));
		ptr +=4;
	}
}