本文整理汇总了C++中RTMP_SEM_LOCK函数的典型用法代码示例。如果您正苦于以下问题:C++ RTMP_SEM_LOCK函数的具体用法?C++ RTMP_SEM_LOCK怎么用?C++ RTMP_SEM_LOCK使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RTMP_SEM_LOCK函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: MeasureReqLookUp
static PMEASURE_REQ_ENTRY MeasureReqLookUp(
IN PRTMP_ADAPTER pAd,
IN UINT8 DialogToken)
{
UINT HashIdx;
PMEASURE_REQ_TAB pTab = pAd->CommonCfg.pMeasureReqTab;
PMEASURE_REQ_ENTRY pEntry = NULL;
PMEASURE_REQ_ENTRY pPrevEntry = NULL;
if (pTab == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: pMeasureReqTab doesn't exist.\n", __func__));
return NULL;
}
RTMP_SEM_LOCK(&pAd->CommonCfg.MeasureReqTabLock);
HashIdx = MQ_DIALOGTOKEN_HASH_INDEX(DialogToken);
pEntry = pTab->Hash[HashIdx];
while (pEntry)
{
if (pEntry->DialogToken == DialogToken)
break;
else
{
pPrevEntry = pEntry;
pEntry = pEntry->pNext;
}
}
RTMP_SEM_UNLOCK(&pAd->CommonCfg.MeasureReqTabLock);
return pEntry;
}
开发者ID:458941968,项目名称:mini2440-kernel-2.6.29,代码行数:35,代码来源:spectrum.c
示例2: RT28xx_UpdateTimToAsic
VOID RT28xx_UpdateTimToAsic(
IN RTMP_ADAPTER *pAd,
IN INT apidx,
IN ULONG FrameLen)
{
TIM_BUF_STRUC *tim_buf = NULL;
UCHAR *buf;
INT len;
PNDIS_PACKET *pkt = NULL;
IF_DEV_CONFIG_OPMODE_ON_AP(pAd) {
tim_buf = &pAd->ApCfg.MBSSID[apidx].tim_buf;
}
if (!tim_buf) {
DBGPRINT(RT_DEBUG_ERROR, ("%s(): bcn_buf is NULL!\n", __FUNCTION__));
return;
}
pkt = tim_buf->TimPkt;
if (pkt) {
buf = (UCHAR *)GET_OS_PKT_DATAPTR(pkt);
len = FrameLen + pAd->chipCap.tx_hw_hdr_len;
SET_OS_PKT_LEN(pkt, len);
/* Now do hardware-depened kick out.*/
RTMP_SEM_LOCK(&pAd->BcnRingLock);
HAL_KickOutMgmtTx(pAd, Q_IDX_BCN, pkt, buf, len);
RTMP_SEM_UNLOCK(&pAd->BcnRingLock);
} else {
DBGPRINT(RT_DEBUG_ERROR, ("%s(): TimPkt is NULL!\n", __FUNCTION__));
}
}
开发者ID:jing-git,项目名称:rt-n56u-1,代码行数:33,代码来源:ap_nps.c
示例3: IgmpGroupDelMembers
VOID IgmpGroupDelMembers(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pMemberAddr,
IN PNET_DEV pDev)
{
int i;
MULTICAST_FILTER_TABLE_ENTRY *pEntry = NULL;
PMULTICAST_FILTER_TABLE pMulticastFilterTable = pAd->pMulticastFilterTable;
for (i = 0; i < MAX_LEN_OF_MULTICAST_FILTER_TABLE; i++)
{
/* pick up the first available vacancy */
pEntry = &pMulticastFilterTable->Content[i];
if (pEntry->Valid == TRUE)
{
if(pMemberAddr != NULL)
{
RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock);
DeleteIgmpMember(pMulticastFilterTable, &pEntry->MemberList, pMemberAddr);
RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock);
}
if((pEntry->type == MCAT_FILTER_DYNAMIC)
&& (IgmpMemberCnt(&pEntry->MemberList) == 0))
MulticastFilterTableDeleteEntry(pAd, pEntry->Addr, pMemberAddr, pDev);
}
}
}
开发者ID:CoreTech-Development,项目名称:buildroot-linux-kernel,代码行数:28,代码来源:igmp_snoop.c
示例4: TpcReqDelete
static VOID TpcReqDelete(
IN PRTMP_ADAPTER pAd,
IN UINT8 DialogToken)
{
PTPC_REQ_TAB pTab = pAd->CommonCfg.pTpcReqTab;
PTPC_REQ_ENTRY pEntry = NULL;
if(pTab == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: pTpcReqTab doesn't exist.\n", __func__));
return;
}
// if empty, return
if (pTab->Size == 0)
{
DBGPRINT(RT_DEBUG_ERROR, ("pTpcReqTab empty.\n"));
return;
}
pEntry = TpcReqLookUp(pAd, DialogToken);
if (pEntry != NULL)
{
PTPC_REQ_ENTRY pPrevEntry = NULL;
ULONG HashIdx = TPC_DIALOGTOKEN_HASH_INDEX(pEntry->DialogToken);
PTPC_REQ_ENTRY pProbeEntry = pTab->Hash[HashIdx];
RTMP_SEM_LOCK(&pAd->CommonCfg.TpcReqTabLock);
// update Hash list
do
{
if (pProbeEntry == pEntry)
{
if (pPrevEntry == NULL)
{
pTab->Hash[HashIdx] = pEntry->pNext;
}
else
{
pPrevEntry->pNext = pEntry->pNext;
}
break;
}
pPrevEntry = pProbeEntry;
pProbeEntry = pProbeEntry->pNext;
} while (pProbeEntry);
NdisZeroMemory(pEntry, sizeof(TPC_REQ_ENTRY));
pTab->Size--;
RTMP_SEM_UNLOCK(&pAd->CommonCfg.TpcReqTabLock);
}
return;
}
开发者ID:458941968,项目名称:mini2440-kernel-2.6.29,代码行数:56,代码来源:spectrum.c
示例5: BMPktSigTabDelete
VOID BMPktSigTabDelete(
IN PRTMP_ADAPTER pAd,
IN PUCHAR MeshSA)
{
PMESH_BMPKTSIG_TAB pTab = pAd->MeshTab.pBMPktSigTab;
PMESH_BMPKTSIG_ENTRY pEntry = NULL;
if(pTab == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: pBMPktSigTab doesn't exist.\n", __FUNCTION__));
return;
}
/* if empty, return */
if (pTab->Size == 0)
{
DBGPRINT(RT_DEBUG_ERROR, ("pBMPktSigTab empty.\n"));
return;
}
pEntry = BMPktSigTabLookUp(pAd, MeshSA);
if (pEntry != NULL)
{
PMESH_BMPKTSIG_ENTRY pPrevEntry = NULL;
ULONG HashIdx = BMPKT_MAC_ADDR_HASH_INDEX(pEntry->MeshSA);
PMESH_BMPKTSIG_ENTRY pProbeEntry = pTab->Hash[HashIdx];
RTMP_SEM_LOCK(&pAd->MeshTab.MeshBMPktTabLock);
/* update Hash list */
do
{
if (pProbeEntry == pEntry)
{
if (pPrevEntry == NULL)
{
pTab->Hash[HashIdx] = pEntry->pNext;
}
else
{
pPrevEntry->pNext = pEntry->pNext;
}
break;
}
pPrevEntry = pProbeEntry;
pProbeEntry = pProbeEntry->pNext;
} while (pProbeEntry);
NdisZeroMemory(pEntry, sizeof(MESH_BMPKTSIG_ENTRY));
pTab->Size--;
RTMP_SEM_UNLOCK(&pAd->MeshTab.MeshBMPktTabLock);
}
return;
}
开发者ID:vm3vuy,项目名称:my-local-repository,代码行数:56,代码来源:mesh_bmpkt.c
示例6: FreeGrpMemberEntry
static inline VOID FreeGrpMemberEntry(
IN PMULTICAST_FILTER_TABLE pMulticastFilterTable,
IN PMEMBER_ENTRY pEntry)
{
RTMP_SEM_LOCK(&pMulticastFilterTable->FreeMemberPoolTabLock);
insertTailList(&pMulticastFilterTable->freeEntryList, (PLIST_ENTRY)pEntry);
RTMP_SEM_UNLOCK(&pMulticastFilterTable->FreeMemberPoolTabLock);
}
开发者ID:CoreTech-Development,项目名称:buildroot-linux-kernel,代码行数:10,代码来源:igmp_snoop.c
示例7: BMPktSigTabLookUp
PMESH_BMPKTSIG_ENTRY BMPktSigTabLookUp(
IN PRTMP_ADAPTER pAd,
IN PUCHAR MeshSA)
{
UINT HashIdx;
ULONG Now;
PMESH_BMPKTSIG_TAB pTab = pAd->MeshTab.pBMPktSigTab;
PMESH_BMPKTSIG_ENTRY pEntry = NULL;
PMESH_BMPKTSIG_ENTRY pPrevEntry = NULL;
if (pTab == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s: pBMPktSigTab doesn't exist.\n", __FUNCTION__));
return NULL;
}
RTMP_SEM_LOCK(&pAd->MeshTab.MeshBMPktTabLock);
HashIdx = BMPKT_MAC_ADDR_HASH_INDEX(MeshSA);
pEntry = pTab->Hash[HashIdx];
while (pEntry)
{
if (MAC_ADDR_EQUAL(pEntry->MeshSA, MeshSA))
break;
else
{
pPrevEntry = pEntry;
pEntry = pEntry->pNext;
}
}
if (pEntry)
{
NdisGetSystemUpTime(&Now);
if (RTMP_TIME_AFTER((unsigned long)Now, (unsigned long)(pEntry->LastRefTime + MESH_BMPKT_RECORD_TIME)))
{ /* remove ageout entry. */
if (pPrevEntry == NULL)
pTab->Hash[HashIdx] = pEntry->pNext;
else
pPrevEntry->pNext = pEntry->pNext;
NdisZeroMemory(pEntry, sizeof(MESH_BMPKTSIG_ENTRY));
pEntry = NULL;
pTab->Size--;
}
else
pEntry->LastRefTime = Now;
}
RTMP_SEM_UNLOCK(&pAd->MeshTab.MeshBMPktTabLock);
return pEntry;
}
开发者ID:vm3vuy,项目名称:my-local-repository,代码行数:54,代码来源:mesh_bmpkt.c
示例8: CliWdsEntyFree
VOID CliWdsEntyFree(
IN PRTMP_ADAPTER pAd,
IN PCLIWDS_PROXY_ENTRY pCliWdsEntry)
{
RTMP_SEM_LOCK(&pAd->ApCfg.CliWdsTabLock);
insertTailList(&pAd->ApCfg.CliWdsEntryFreeList, (PLIST_ENTRY)pCliWdsEntry);
RTMP_SEM_UNLOCK(&pAd->ApCfg.CliWdsTabLock);
return;
}
开发者ID:eagleworld,项目名称:RT3070_SoftAP,代码行数:12,代码来源:client_wds.c
示例9: MultipathEntyFree
VOID MultipathEntyFree(
IN PRTMP_ADAPTER pAd,
IN PMESH_MULTIPATH_ENTRY pEntry)
{
RTMP_SEM_LOCK(&pAd->MeshTab.MultipathTabLock);
insertTailList(&pAd->MeshTab.MultipathEntryFreeList, (PLIST_ENTRY)pEntry);
RTMP_SEM_UNLOCK(&pAd->MeshTab.MultipathTabLock);
return;
}
开发者ID:vm3vuy,项目名称:my-local-repository,代码行数:12,代码来源:mesh_bmpkt.c
示例10: IGMPTableDisplay
/*
==========================================================================
Description:
Display all entrys in IGMP table
==========================================================================
*/
static VOID IGMPTableDisplay(
IN PRTMP_ADAPTER pAd)
{
int i;
MULTICAST_FILTER_TABLE_ENTRY *pEntry = NULL;
PMULTICAST_FILTER_TABLE pMulticastFilterTable = pAd->pMulticastFilterTable;
printk("Multicast filter table: ");
if (pMulticastFilterTable == NULL)
{
printk("Table is not ready!\n");
return;
}
// if FULL, return
if (pMulticastFilterTable->Size == 0)
{
printk("Table is empty.\n");
return;
}
printk("\n");
// allocate one MAC entry
RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock);
for (i = 0; i< MAX_LEN_OF_MULTICAST_FILTER_TABLE; i++)
{
// pick up the first available vacancy
if (pMulticastFilterTable->Content[i].Valid == TRUE)
{
PMEMBER_ENTRY pMemberEntry = NULL;
pEntry = &pMulticastFilterTable->Content[i];
printk("IF(%s) entry #%d, type=%s, GrpId=(%02x:%02x:%02x:%02x:%02x:%02x) memberCnt=%d\n",
RTMP_OS_NETDEV_GET_DEVNAME(pEntry->net_dev), i, (pEntry->type==0 ? "static":"dynamic"),
PRINT_MAC(pEntry->Addr), IgmpMemberCnt(&pEntry->MemberList));
pMemberEntry = (PMEMBER_ENTRY)pEntry->MemberList.pHead;
while (pMemberEntry)
{
printk(" member MAC=(%02x:%02x:%02x:%02x:%02x:%02x)\n", PRINT_MAC(pMemberEntry->Addr));
pMemberEntry = pMemberEntry->pNext;
}
}
}
RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock);
return;
}
开发者ID:schidler,项目名称:flyzjhz-rt-n56u,代码行数:58,代码来源:igmp_snoop.c
示例11: rt2870_rts_frame_complete_tasklet
static void rt2870_rts_frame_complete_tasklet(unsigned long data)
{
PRTMP_ADAPTER pAd;
PTX_CONTEXT pRTSContext;
purbb_t pUrb;
NTSTATUS Status;
unsigned long irqFlag;
pUrb = (purbb_t)data;
pRTSContext = (PTX_CONTEXT)pUrb->context;
pAd = pRTSContext->pAd;
Status = pUrb->status;
// Reset RTS frame context flags
RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag);
pRTSContext->IRPPending = FALSE;
pRTSContext->InUse = FALSE;
if (Status == USB_ST_NOERROR)
{
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
}
else // STATUS_OTHER
{
if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
{
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out RTS Frame Failed\n"));
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
}
else
{
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
}
}
RTMP_SEM_LOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]);
pAd->BulkOutPending[pRTSContext->BulkOutPipeId] = FALSE;
RTMP_SEM_UNLOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]);
// Always call Bulk routine, even reset bulk.
// The protectioon of rest bulk should be in BulkOut routine
RTUSBKickBulkOut(pAd);
}
开发者ID:acassis,项目名称:emlinux-ssd1935,代码行数:52,代码来源:2870_rtmp_init.c
示例12: CliWdsEntyAlloc
PCLIWDS_PROXY_ENTRY CliWdsEntyAlloc(
IN PRTMP_ADAPTER pAd)
{
PCLIWDS_PROXY_ENTRY pCliWdsEntry;
RTMP_SEM_LOCK(&pAd->ApCfg.CliWdsTabLock);
pCliWdsEntry = (PCLIWDS_PROXY_ENTRY)removeHeadList(&pAd->ApCfg.CliWdsEntryFreeList);
RTMP_SEM_UNLOCK(&pAd->ApCfg.CliWdsTabLock);
return pCliWdsEntry;
}
开发者ID:eagleworld,项目名称:RT3070_SoftAP,代码行数:13,代码来源:client_wds.c
示例13: MultipathEntyAlloc
PMESH_MULTIPATH_ENTRY MultipathEntyAlloc(
IN PRTMP_ADAPTER pAd)
{
PMESH_MULTIPATH_ENTRY pEntry;
RTMP_SEM_LOCK(&pAd->MeshTab.MultipathTabLock);
pEntry = (PMESH_MULTIPATH_ENTRY)removeHeadList(&pAd->MeshTab.MultipathEntryFreeList);
RTMP_SEM_UNLOCK(&pAd->MeshTab.MultipathTabLock);
return pEntry;
}
开发者ID:vm3vuy,项目名称:my-local-repository,代码行数:13,代码来源:mesh_bmpkt.c
示例14: AllocaGrpMemberEntry
static inline PMEMBER_ENTRY AllocaGrpMemberEntry(
IN PMULTICAST_FILTER_TABLE pMulticastFilterTable)
{
PMEMBER_ENTRY pMemberEntry;
RTMP_SEM_LOCK(&pMulticastFilterTable->FreeMemberPoolTabLock);
pMemberEntry = (PMEMBER_ENTRY)removeHeadList(&pMulticastFilterTable->freeEntryList);
RTMP_SEM_UNLOCK(&pMulticastFilterTable->FreeMemberPoolTabLock);
return (PMEMBER_ENTRY)pMemberEntry;
}
开发者ID:CoreTech-Development,项目名称:buildroot-linux-kernel,代码行数:13,代码来源:igmp_snoop.c
示例15: MlmeEnqueueEx
/*! \brief Enqueue a message for other threads, if they want to send messages to MLME thread
* \param *Queue The MLME Queue
* \param Machine The State Machine Id
* \param MsgType The Message Type
* \param MsgLen The Message length
* \param *Msg The message pointer
* \return TRUE if enqueue is successful, FALSE if the queue is full
* \pre
* \post
* \note The message has to be initialized
*/
BOOLEAN MlmeEnqueueEx(
IN PRTMP_ADAPTER pAd,
IN ULONG Machine,
IN ULONG MsgType,
IN ULONG MsgLen,
IN VOID *Msg,
IN USHORT Idx)
{
INT Tail;
MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue;
// Do nothing if the driver is starting halt state.
// This might happen when timer already been fired before cancel timer with mlmehalt
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))
return FALSE;
// First check the size, it MUST not exceed the mlme queue size
if (MsgLen > MAX_LEN_OF_MLME_BUFFER)
{
DBGPRINT_ERR(("MlmeEnqueueEx: msg too large, size = %ld \n", MsgLen));
return FALSE;
}
if (MlmeQueueFull(Queue))
{
return FALSE;
}
RTMP_SEM_LOCK(&Queue->Lock);
Tail = Queue->Tail;
Queue->Tail++;
Queue->Num++;
if (Queue->Tail == MAX_LEN_OF_MLME_QUEUE)
{
Queue->Tail = 0;
}
Queue->Entry[Tail].Occupied = TRUE;
Queue->Entry[Tail].Machine = Machine;
Queue->Entry[Tail].MsgType = MsgType;
Queue->Entry[Tail].MsgLen = MsgLen;
Queue->Entry[Tail].Idx = Idx;
if (Msg != NULL)
NdisMoveMemory(Queue->Entry[Tail].Msg, Msg, MsgLen);
RTMP_SEM_UNLOCK(&Queue->Lock);
return TRUE;
}
开发者ID:acassis,项目名称:emlinux-ssd1935,代码行数:61,代码来源:mlme_ex.c
示例16: IGMPTableDisplay
/*
==========================================================================
Description:
Display all entrys in IGMP table
==========================================================================
*/
static VOID IGMPTableDisplay(
IN PRTMP_ADAPTER pAd)
{
int i;
MULTICAST_FILTER_TABLE_ENTRY *pEntry = NULL;
PMULTICAST_FILTER_TABLE pMulticastFilterTable = pAd->pMulticastFilterTable;
if (pMulticastFilterTable == NULL)
{
MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_OFF, ("%s Multicase filter table is not ready.\n", __FUNCTION__));
return;
}
/* if FULL, return */
if (pMulticastFilterTable->Size == 0)
{
MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_ERROR, ("Table empty.\n"));
return;
}
/* allocate one MAC entry */
RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock);
for (i = 0; i< MAX_LEN_OF_MULTICAST_FILTER_TABLE; i++)
{
/* pick up the first available vacancy */
if (pMulticastFilterTable->Content[i].Valid == TRUE)
{
PMEMBER_ENTRY pMemberEntry = NULL;
pEntry = &pMulticastFilterTable->Content[i];
MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_OFF, ("IF(%s) entry #%d, type=%s, GrpId=(%02x:%02x:%02x:%02x:%02x:%02x) memberCnt=%d\n",
RTMP_OS_NETDEV_GET_DEVNAME(pEntry->net_dev), i, (pEntry->type==0 ? "static":"dynamic"),
PRINT_MAC(pEntry->Addr), IgmpMemberCnt(&pEntry->MemberList)));
pMemberEntry = (PMEMBER_ENTRY)pEntry->MemberList.pHead;
while (pMemberEntry)
{
MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_OFF, ("member mac=(%02x:%02x:%02x:%02x:%02x:%02x)\n",
PRINT_MAC(pMemberEntry->Addr)));
pMemberEntry = pMemberEntry->pNext;
}
}
}
RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock);
return;
}
开发者ID:houzhenggang,项目名称:mt7688_mips_ecos,代码行数:56,代码来源:igmp_snoop.c
示例17: rtusb_pspoll_frame_done_tasklet
static void rtusb_pspoll_frame_done_tasklet(unsigned long data)
{
PRTMP_ADAPTER pAd;
PTX_CONTEXT pPsPollContext;
purbb_t pUrb;
NTSTATUS Status;
pUrb = (purbb_t)data;
/* pPsPollContext = (PTX_CONTEXT)pUrb->context; */
pPsPollContext = (PTX_CONTEXT)RTMP_USB_URB_DATA_GET(pUrb);
Status = RTMP_USB_URB_STATUS_GET(pUrb);
pAd = pPsPollContext->pAd;
/* Status = pUrb->status; */
/* Reset PsPoll context flags */
pPsPollContext->IRPPending = FALSE;
pPsPollContext->InUse = FALSE;
pAd->watchDogTxPendingCnt[0] = 0;
if (Status == USB_ST_NOERROR)
{
RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
}
else /* STATUS_OTHER */
{
if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
{
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out PSPoll Failed\n"));
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
RTEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
}
}
RTMP_SEM_LOCK(&pAd->BulkOutLock[0]);
pAd->BulkOutPending[0] = FALSE;
RTMP_SEM_UNLOCK(&pAd->BulkOutLock[0]);
/* Always call Bulk routine, even reset bulk. */
/* The protectioon of rest bulk should be in BulkOut routine */
RTUSBKickBulkOut(pAd);
}
开发者ID:1950packard,项目名称:rt3573sta,代码行数:48,代码来源:rt_usb.c
示例18: RtmpOsUsbEmptyUrbCheck
VOID RtmpOsUsbEmptyUrbCheck(
IN VOID **ppWait,
IN NDIS_SPIN_LOCK *pBulkInLock,
IN UCHAR *pPendingRx)
{
UINT32 i = 0;
DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup);
DECLARE_WAITQUEUE(wait, current);
/* ensure there are no more active urbs. */
add_wait_queue (&unlink_wakeup, &wait);
*ppWait = &unlink_wakeup;
/* maybe wait for deletions to finish. */
i = 0;
/*while((i < 25) && atomic_read(&pAd->PendingRx) > 0) */
while(i < 25)
{
/* unsigned long IrqFlags; */
RTMP_SEM_LOCK(pBulkInLock);
if (*pPendingRx == 0)
{
RTMP_SEM_UNLOCK(pBulkInLock);
break;
}
RTMP_SEM_UNLOCK(pBulkInLock);
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
msleep(UNLINK_TIMEOUT_MS); /*Time in millisecond */
#else
RTMPusecDelay(UNLINK_TIMEOUT_MS*1000); /*Time in microsecond */
#endif
i++;
}
*ppWait = NULL;
remove_wait_queue (&unlink_wakeup, &wait);
}
开发者ID:J1nx-Hackable-Gadgets,项目名称:mx-common,代码行数:39,代码来源:rt_usb_util.c
示例19: GetPacketFromRxRing
PNDIS_PACKET GetPacketFromRxRing(
IN PRTMP_ADAPTER pAd,
OUT PRT28XX_RXD_STRUC pSaveRxD,
OUT BOOLEAN *pbReschedule,
IN OUT UINT32 *pRxPending)
{
PRXD_STRUC pRxD;
#ifdef RT_BIG_ENDIAN
PRXD_STRUC pDestRxD;
RXD_STRUC RxD;
#endif
PNDIS_PACKET pRxPacket = NULL;
PNDIS_PACKET pNewPacket;
PVOID AllocVa;
NDIS_PHYSICAL_ADDRESS AllocPa;
BOOLEAN bReschedule = FALSE;
RTMP_DMACB *pRxCell;
RTMP_SEM_LOCK(&pAd->RxRingLock);
if (*pRxPending == 0)
{
/* Get how may packets had been received*/
RTMP_IO_READ32(pAd, RX_DRX_IDX , &pAd->RxRing.RxDmaIdx);
if (pAd->RxRing.RxSwReadIdx == pAd->RxRing.RxDmaIdx)
{
/* no more rx packets*/
bReschedule = FALSE;
goto done;
}
/* get rx pending count*/
if (pAd->RxRing.RxDmaIdx > pAd->RxRing.RxSwReadIdx)
*pRxPending = pAd->RxRing.RxDmaIdx - pAd->RxRing.RxSwReadIdx;
else
*pRxPending = pAd->RxRing.RxDmaIdx + RX_RING_SIZE - pAd->RxRing.RxSwReadIdx;
#ifdef DESC_32B_SUPPORT
pRxCell = &pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx];
dma_cache_sync(NULL, pRxCell->AllocVa, RXD_SIZE, DMA_FROM_DEVICE);
#endif /* DESC_32B_SUPPORT */
}
pRxCell = &pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx];
/* flush dcache if no consistent memory is supported */
RTMP_DCACHE_FLUSH(pRxCell->AllocPa, RXD_SIZE);
#ifdef RT_BIG_ENDIAN
pDestRxD = (PRXD_STRUC) pRxCell->AllocVa;
RxD = *pDestRxD;
pRxD = &RxD;
RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
#else
/* Point to Rx indexed rx ring descriptor*/
pRxD = (PRXD_STRUC) pRxCell->AllocVa;
#endif
if (pRxD->DDONE == 0)
{
*pRxPending = 0;
/* DMAIndx had done but DDONE bit not ready*/
bReschedule = TRUE;
goto done;
}
#ifdef DESC_32B_SUPPORT
prefetch(&pAd->RxRing.Cell[(pAd->RxRing.RxSwReadIdx + 1) % RX_RING_SIZE].AllocVa);
#endif /* DESC_32B_SUPPORT */
/* return rx descriptor*/
NdisMoveMemory(pSaveRxD, pRxD, RXD_SIZE);
pNewPacket = RTMP_AllocateRxPacketBuffer(pAd, ((POS_COOKIE)(pAd->OS_Cookie))->pci_dev, RX_BUFFER_AGGRESIZE, FALSE, &AllocVa, &AllocPa);
if (pNewPacket)
{
/* unmap the rx buffer*/
PCI_UNMAP_SINGLE(pAd, pRxCell->DmaBuf.AllocPa,
pRxCell->DmaBuf.AllocSize, RTMP_PCI_DMA_FROMDEVICE);
/* flush dcache if no consistent memory is supported */
RTMP_DCACHE_FLUSH(pRxCell->DmaBuf.AllocPa, pRxCell->DmaBuf.AllocSize);
pRxPacket = pRxCell->pNdisPacket;
pRxCell->DmaBuf.AllocSize = RX_BUFFER_AGGRESIZE;
pRxCell->pNdisPacket = (PNDIS_PACKET) pNewPacket;
pRxCell->DmaBuf.AllocVa = AllocVa;
pRxCell->DmaBuf.AllocPa = AllocPa;
/* flush dcache if no consistent memory is supported */
RTMP_DCACHE_FLUSH(pRxCell->DmaBuf.AllocPa, pRxCell->DmaBuf.AllocSize);
/* update SDP0 to new buffer of rx packet */
pRxD->SDP0 = AllocPa;
#ifdef RX_DMA_SCATTER
pRxD->SDL0 = RX_BUFFER_AGGRESIZE;
#endif /* RX_DMA_SCATTER */
//.........这里部分代码省略.........
开发者ID:houzhenggang,项目名称:mt7688_mips_ecos,代码行数:101,代码来源:cmm_data_pci.c
示例20: MulticastFilterTableLookup
/*
==========================================================================
Description:
Look up the MAC address in the IGMP table. Return NULL if not found.
Return:
pEntry - pointer to the MAC entry; NULL is not found
==========================================================================
*/
PMULTICAST_FILTER_TABLE_ENTRY MulticastFilterTableLookup(
IN PMULTICAST_FILTER_TABLE pMulticastFilterTable,
IN PUCHAR pAddr,
IN PNET_DEV dev)
{
ULONG HashIdx, Now;
PMULTICAST_FILTER_TABLE_ENTRY pEntry = NULL, pPrev = NULL;
if (pMulticastFilterTable == NULL)
{
DBGPRINT(RT_DEBUG_ERROR, ("%s Multicase filter table is not ready.\n", __FUNCTION__));
return NULL;
}
RTMP_SEM_LOCK(&pMulticastFilterTable->MulticastFilterTabLock);
HashIdx = MULTICAST_ADDR_HASH_INDEX(pAddr);
pEntry = pPrev = pMulticastFilterTable->Hash[HashIdx];
while (pEntry && pEntry->Valid)
{
if ((pEntry->net_dev == dev)
&& MAC_ADDR_EQUAL(pEntry->Addr, pAddr))
{
NdisGetSystemUpTime(&Now);
pEntry->lastTime = Now;
break;
}
else
{
NdisGetSystemUpTime(&Now);
if ((pEntry->Valid == TRUE) && (pEntry->type == MCAT_FILTER_DYNAMIC)
&& RTMP_TIME_AFTER(Now, pEntry->lastTime+IGMPMAC_TB_ENTRY_AGEOUT_TIME))
{
/* Remove the aged entry */
if (pEntry == pMulticastFilterTable->Hash[HashIdx])
{
pMulticastFilterTable->Hash[HashIdx] = pEntry->pNext;
pPrev = pMulticastFilterTable->Hash[HashIdx];
DeleteIgmpMemberList(pMulticastFilterTable, &pEntry->MemberList);
NdisZeroMemory(pEntry, sizeof(MULTICAST_FILTER_TABLE_ENTRY));
pMulticastFilterTable->Size --;
pEntry = pPrev;
DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 2 - Total= %d\n", pMulticastFilterTable->Size));
}
else
{
pPrev->pNext = pEntry->pNext;
DeleteIgmpMemberList(pMulticastFilterTable, &pEntry->MemberList);
NdisZeroMemory(pEntry, sizeof(MULTICAST_FILTER_TABLE_ENTRY));
pMulticastFilterTable->Size --;
pEntry = pPrev->pNext;
DBGPRINT(RT_DEBUG_TRACE, ("MCastFilterTableDeleteEntry 2 - Total= %d\n", pMulticastFilterTable->Size));
}
}
else
{
pPrev = pEntry;
pEntry = pEntry->pNext;
}
}
}
RTMP_SEM_UNLOCK(&pMulticastFilterTable->MulticastFilterTabLock);
return pEntry;
}
开发者ID:CoreTech-Development,项目名称:buildroot-linux-kernel,代码行数:75,代码来源:igmp_snoop.c
注:本文中的RTMP_SEM_LOCK函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论