/* Unlink a queue head from the asynchronous schedule list. Need to synchronize with hardware. */
VOID EhcUnlinkQhFromAsync(IN PEI_USB2_HC_DEV *Ehc, IN PEI_EHC_QH *Qh)
/* Unlink a queue head from the asynchronous schedule list. Need to synchronize with hardware. */
VOID EhcUnlinkQhFromAsync(IN PEI_USB2_HC_DEV *Ehc, IN PEI_EHC_QH *Qh)
{
  PEI_EHC_QH  *Head;
  ASSERT (Ehc->ReclaimHead->NextQh == Qh);
  Head = Ehc->ReclaimHead;
  Head->NextQh = Qh->NextQh;
  Qh->NextQh   = NULL;
  Head->QhHw.HorizonLink = QH_LINK (Head, EHC_TYPE_QH, FALSE);
  EhcSetAndWaitDoorBell (Ehc, EHC_GENERIC_TIMEOUT);
  return;
}