示例#1
0
BT_CONTROL_ACTION_ITEM *FCore_GetControlAction(BT_FILTER_CORE_INFO       *pCore,
                                               ATHBT_STATE_INDICATION    Indication,
                                               ATHBT_STATE               State,
                                               BT_CONTROL_ACTION_ITEM    *pStart)
{
    DL_LIST  *pListHead;
    BT_CONTROL_ACTION_ITEM *pBtControlAction = NULL;

    if (State >= STATE_MAX) {
        return NULL;
    }

    pListHead = &pCore->ActionListsState[Indication][State];

    if (NULL == pStart) {
            /* caller wants the first item in the list */
        if (pListHead->pNext == pListHead) {
                /* list is empty */
            return NULL;
        }
        pBtControlAction =  A_CONTAINING_STRUCT(pListHead->pNext, BT_CONTROL_ACTION_ITEM, ListEntry);
    } else {
            /* caller wants the next list item */
        if (pStart->ListEntry.pNext == pListHead) {
                /* reached the end */
            return NULL;
        }
        pBtControlAction =  A_CONTAINING_STRUCT(pStart->ListEntry.pNext, BT_CONTROL_ACTION_ITEM, ListEntry);
    }

   return pBtControlAction;
}
示例#2
0
文件: ar6k.c 项目: ANFS/ANFS-kernel
static HIF_SCATTER_REQ *DevAllocScatterReq(HIF_DEVICE *Context)
{
    DL_LIST *pItem;
    AR6K_DEVICE *pDev = (AR6K_DEVICE *)Context;
    LOCK_AR6K(pDev);
    pItem = DL_ListRemoveItemFromHead(&pDev->ScatterReqHead);
    UNLOCK_AR6K(pDev);
    if (pItem != NULL) {
        return A_CONTAINING_STRUCT(pItem, HIF_SCATTER_REQ, ListLink);
    }
    return NULL;
}
示例#3
0
static HIF_URB_CONTEXT *usb_hif_dequeue_pending_transfer(HIF_USB_PIPE *pipe)
{
	HIF_URB_CONTEXT *urb_context = NULL;
	DL_LIST *item;
	unsigned long flags;

	spin_lock_irqsave(&pipe->device->cs_lock, flags);
	item = DL_ListRemoveItemFromHead(&pipe->urb_pending_list);
	if (item != NULL)
		urb_context = A_CONTAINING_STRUCT(item, HIF_URB_CONTEXT, link);
	spin_unlock_irqrestore(&pipe->device->cs_lock, flags);

	return urb_context;
}
示例#4
0
static void CleanListItems(DL_LIST  *pListHead)
{
    DL_LIST                 *pListItem;
    BT_CONTROL_ACTION_ITEM  *pControlItem;

    while (1) {
        pListItem = DL_ListRemoveItemFromHead(pListHead);
        if (NULL == pListItem) {
            break;
        }
        pControlItem = A_CONTAINING_STRUCT(pListItem, BT_CONTROL_ACTION_ITEM, ListEntry);
            /* free it */
        A_FREE(pControlItem);
    }
}
示例#5
0
static HIF_SCATTER_REQ *AllocScatterReq(HIF_DEVICE *device) 
{
    DL_LIST *pItem; 
    
    CriticalSectionAcquire(&lock);
    
    pItem = DL_ListRemoveItemFromHead(&device->ScatterReqHead);
    
    CriticalSectionRelease(&lock);
    
    if (pItem != NULL) {
        return A_CONTAINING_STRUCT(pItem, HIF_SCATTER_REQ, ListLink);
    }
    
    return NULL;   
}
示例#6
0
HIF_URB_CONTEXT *usb_hif_alloc_urb_from_pipe(HIF_USB_PIPE *pipe)
{
	HIF_URB_CONTEXT *urb_context = NULL;
	DL_LIST *item;
	unsigned long flags;

	spin_lock_irqsave(&pipe->device->cs_lock, flags);
	item = DL_ListRemoveItemFromHead(&pipe->urb_list_head);
	if (item != NULL) {
		urb_context = A_CONTAINING_STRUCT(item, HIF_URB_CONTEXT, link);
		pipe->urb_cnt--;
	}
	spin_unlock_irqrestore(&pipe->device->cs_lock, flags);

	return urb_context;
}
示例#7
0
static HIF_SCATTER_REQ *AllocScatterReq(HIF_DEVICE *device) 
{
    DL_LIST       *pItem; 
    unsigned long flag;

    spin_lock_irqsave(&device->lock, flag);
    
    pItem = DL_ListRemoveItemFromHead(&device->ScatterReqHead);
    
    spin_unlock_irqrestore(&device->lock, flag);
    
    if (pItem != NULL) {
        return A_CONTAINING_STRUCT(pItem, HIF_SCATTER_REQ, ListLink);
    }
    
    return NULL;   
}