169 IN BOOLEAN RebindRequest,
253 IN UINT32 DeleteCount,
254 IN UINT8 *DeleteList OPTIONAL,
255 IN UINT32 AppendCount,
318 IN OUT UINT32 *OptionCount,
363 if ((This ==
NULL) || (Dhcp4ModeData ==
NULL)) {
364 return EFI_INVALID_PARAMETER;
367 Instance = DHCP_INSTANCE_FROM_THIS (This);
369 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
370 DhcpSb = Instance->Service;
377 CopyMem (&Dhcp4ModeData->ConfigData, &DhcpSb->ActiveConfig, sizeof (Dhcp4ModeData->ConfigData));
378 CopyMem (&Dhcp4ModeData->ClientMacAddress, &DhcpSb->Mac, sizeof (Dhcp4ModeData->ClientMacAddress));
380 Ip = HTONL (DhcpSb->ClientAddr);
383 Ip = HTONL (DhcpSb->Netmask);
386 Ip = HTONL (DhcpSb->ServerAddr);
392 Ip = HTONL (Para->Router);
394 Dhcp4ModeData->LeaseTime = Para->Lease;
397 Dhcp4ModeData->LeaseTime = 0xffffffff;
400 Dhcp4ModeData->ReplyPacket = DhcpSb->Selected;
402 gBS->RestoreTPL (OldTpl);
421 if (Config->DiscoverTimeout !=
NULL) {
425 if (Config->RequestTimeout !=
NULL) {
429 if (Config->OptionList !=
NULL) {
430 for (Index = 0; Index < Config->OptionCount; Index++) {
431 if (Config->OptionList[Index] !=
NULL) {
432 FreePool (Config->OptionList[Index]);
464 CopyMem (Dst, Src,
sizeof (*Dst));
465 Dst->DiscoverTimeout =
NULL;
466 Dst->RequestTimeout =
NULL;
467 Dst->OptionList =
NULL;
472 if (Src->DiscoverTimeout !=
NULL) {
473 Len = Src->DiscoverTryCount *
sizeof (UINT32);
476 if (Dst->DiscoverTimeout ==
NULL) {
477 return EFI_OUT_OF_RESOURCES;
480 for (Index = 0; Index < Src->DiscoverTryCount; Index++) {
481 Dst->DiscoverTimeout[Index] =
MAX (Src->DiscoverTimeout[Index], 1);
488 if (Src->RequestTimeout !=
NULL) {
489 Len = Src->RequestTryCount *
sizeof (UINT32);
492 if (Dst->RequestTimeout ==
NULL) {
496 for (Index = 0; Index < Src->RequestTryCount; Index++) {
497 Dst->RequestTimeout[Index] =
MAX (Src->RequestTimeout[Index], 1);
505 if (Src->OptionList !=
NULL) {
509 if (Dst->OptionList ==
NULL) {
513 DstOptions = Dst->OptionList;
514 SrcOptions = Src->OptionList;
516 for (Index = 0; Index < Src->OptionCount; Index++) {
521 if (DstOptions[Index] ==
NULL) {
525 CopyMem (DstOptions[Index], SrcOptions[Index], Len);
533 return EFI_OUT_OF_RESOURCES;
551 Config = &DhcpSb->ActiveConfig;
553 DhcpSb->ServiceState = DHCP_UNCONFIGED;
554 DhcpSb->ActiveChild =
NULL;
635 return EFI_INVALID_PARAMETER;
638 if (Dhcp4CfgData !=
NULL) {
639 if ((Dhcp4CfgData->DiscoverTryCount != 0) && (Dhcp4CfgData->DiscoverTimeout ==
NULL)) {
640 return EFI_INVALID_PARAMETER;
643 if ((Dhcp4CfgData->RequestTryCount != 0) && (Dhcp4CfgData->RequestTimeout ==
NULL)) {
644 return EFI_INVALID_PARAMETER;
647 if ((Dhcp4CfgData->OptionCount != 0) && (Dhcp4CfgData->OptionList ==
NULL)) {
648 return EFI_INVALID_PARAMETER;
651 CopyMem (&Ip, &Dhcp4CfgData->ClientAddress, sizeof (IP4_ADDR));
652 if (IP4_IS_LOCAL_BROADCAST (NTOHL (Ip))) {
653 return EFI_INVALID_PARAMETER;
657 Instance = DHCP_INSTANCE_FROM_THIS (This);
659 if (Instance->Signature != DHCP_PROTOCOL_SIGNATURE) {
660 return EFI_INVALID_PARAMETER;
663 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
665 DhcpSb = Instance->Service;
666 Config = &DhcpSb->ActiveConfig;
668 Status = EFI_ACCESS_DENIED;
678 if ((DhcpSb->ActiveChild !=
NULL) && (DhcpSb->ActiveChild != Instance)) {
682 if (Dhcp4CfgData !=
NULL) {
683 Status = EFI_OUT_OF_RESOURCES;
690 DhcpSb->UserOptionLen = 0;
692 for (Index = 0; Index < Dhcp4CfgData->OptionCount; Index++) {
693 DhcpSb->UserOptionLen += Dhcp4CfgData->OptionList[Index]->Length + 2;
696 DhcpSb->ActiveChild = Instance;
699 DhcpSb->ClientAddr = EFI_NTOHL (Dhcp4CfgData->ClientAddress);
701 if (DhcpSb->ClientAddr != 0) {
708 DhcpSb->ServiceState = DHCP_CONFIGED;
710 }
else if (DhcpSb->ActiveChild == Instance) {
716 gBS->RestoreTPL (OldTpl);
778 return EFI_INVALID_PARAMETER;
781 Instance = DHCP_INSTANCE_FROM_THIS (This);
783 if (Instance->Signature != DHCP_PROTOCOL_SIGNATURE) {
784 return EFI_INVALID_PARAMETER;
787 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
788 DhcpSb = Instance->Service;
791 Status = EFI_NOT_STARTED;
796 Status = EFI_ALREADY_STARTED;
806 Status = EFI_NO_MEDIA;
810 DhcpSb->IoStatus = EFI_ALREADY_STARTED;
816 Instance->CompletionEvent = CompletionEvent;
821 gBS->RestoreTPL (OldTpl);
823 if (CompletionEvent ==
NULL) {
824 while (DhcpSb->IoStatus == EFI_ALREADY_STARTED) {
825 DhcpSb->UdpIo->Protocol.Udp4->Poll (DhcpSb->UdpIo->Protocol.Udp4);
828 return DhcpSb->IoStatus;
834 gBS->RestoreTPL (OldTpl);
880 IN BOOLEAN RebindRequest,
893 return EFI_INVALID_PARAMETER;
896 Instance = DHCP_INSTANCE_FROM_THIS (This);
898 if (Instance->Signature != DHCP_PROTOCOL_SIGNATURE) {
899 return EFI_INVALID_PARAMETER;
902 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
903 DhcpSb = Instance->Service;
906 Status = EFI_NOT_STARTED;
911 Status = EFI_ACCESS_DENIED;
915 if (DHCP_IS_BOOTP (DhcpSb->Para)) {
923 if (!RebindRequest) {
933 Instance->ElaspedTime = 0;
940 (UINT8 *)
"Extra renew/rebind by the application"
943 if (EFI_ERROR (Status)) {
948 DhcpSb->ExtraRefresh =
TRUE;
949 DhcpSb->IoStatus = EFI_ALREADY_STARTED;
950 Instance->RenewRebindEvent = CompletionEvent;
952 gBS->RestoreTPL (OldTpl);
954 if (CompletionEvent ==
NULL) {
955 while (DhcpSb->IoStatus == EFI_ALREADY_STARTED) {
956 DhcpSb->UdpIo->Protocol.Udp4->Poll (DhcpSb->UdpIo->Protocol.Udp4);
959 return DhcpSb->IoStatus;
965 gBS->RestoreTPL (OldTpl);
1005 return EFI_INVALID_PARAMETER;
1008 Instance = DHCP_INSTANCE_FROM_THIS (This);
1010 if (Instance->Signature != DHCP_PROTOCOL_SIGNATURE) {
1011 return EFI_INVALID_PARAMETER;
1015 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1016 DhcpSb = Instance->Service;
1019 Status = EFI_ACCESS_DENIED;
1023 if (!DHCP_IS_BOOTP (DhcpSb->Para) && (DhcpSb->DhcpState ==
Dhcp4Bound)) {
1032 if (EFI_ERROR (Status)) {
1033 Status = EFI_DEVICE_ERROR;
1041 gBS->RestoreTPL (OldTpl);
1074 return EFI_INVALID_PARAMETER;
1077 Instance = DHCP_INSTANCE_FROM_THIS (This);
1079 if (Instance->Signature != DHCP_PROTOCOL_SIGNATURE) {
1080 return EFI_INVALID_PARAMETER;
1083 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1084 DhcpSb = Instance->Service;
1089 DhcpSb->ServiceState = DHCP_UNCONFIGED;
1091 gBS->RestoreTPL (OldTpl);
1127 IN UINT32 DeleteCount,
1128 IN UINT8 *DeleteList OPTIONAL,
1129 IN UINT32 AppendCount,
1137 if ((This ==
NULL) || (NewPacket ==
NULL)) {
1138 return EFI_INVALID_PARAMETER;
1144 return EFI_INVALID_PARAMETER;
1147 if (((DeleteCount == 0) && (AppendCount == 0)) ||
1148 ((DeleteCount != 0) && (DeleteList ==
NULL)) ||
1149 ((AppendCount != 0) && (AppendList ==
NULL)))
1151 return EFI_INVALID_PARAMETER;
1186 IP4_ADDR ClientAddr;
1189 IP4_ADDR SubnetMask;
1192 DhcpSb = Instance->Service;
1193 Token = Instance->Token;
1197 UdpConfigData.AcceptBroadcast =
TRUE;
1198 UdpConfigData.AllowDuplicatePort =
TRUE;
1199 UdpConfigData.TimeToLive = 64;
1200 UdpConfigData.DoNotFragment =
TRUE;
1203 Ip = HTONL (ClientAddr);
1206 if (DhcpSb->Netmask == 0) {
1218 ASSERT (Class < IP4_ADDR_CLASSE);
1219 if (Class >= IP4_ADDR_CLASSE) {
1220 return EFI_INVALID_PARAMETER;
1223 SubnetMask = gIp4AllMasks[Class << 3];
1225 SubnetMask = DhcpSb->Netmask;
1228 Ip = HTONL (SubnetMask);
1232 UdpConfigData.StationPort = DHCP_CLIENT_PORT;
1237 return UdpIo->Protocol.Udp4->Configure (UdpIo->Protocol.Udp4, &UdpConfigData);
1258 ASSERT (Instance->Token !=
NULL);
1260 DhcpSb = Instance->Service;
1265 UDP_IO_UDP4_VERSION,
1268 if (Instance->UdpIo ==
NULL) {
1269 return EFI_OUT_OF_RESOURCES;
1271 Status =
gBS->OpenProtocol (
1272 Instance->UdpIo->UdpHandle,
1273 &gEfiUdp4ProtocolGuid,
1275 Instance->Service->Image,
1277 EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
1279 if (EFI_ERROR (Status)) {
1281 Instance->UdpIo =
NULL;
1333 Token = Instance->Token;
1338 if (EFI_ERROR (IoStatus)) {
1342 ASSERT (UdpPacket !=
NULL);
1362 ASSERT (Packet !=
NULL);
1365 Head = &Packet->Dhcp4.
Header;
1366 Packet->
Length =
NetbufCopy (UdpPacket, 0, UdpPacket->TotalSize, (UINT8 *)Head);
1368 if (Packet->
Length != UdpPacket->TotalSize) {
1375 if ((Head->OpCode != BOOTP_REPLY) ||
1407 if (EFI_ERROR (Status)) {
1425 Token = Instance->Token;
1431 Token->
Status = EFI_OUT_OF_RESOURCES;
1442 Token->
Status = EFI_TIMEOUT;
1451 gBS->CloseProtocol (
1452 Instance->UdpIo->UdpHandle,
1453 &gEfiUdp4ProtocolGuid,
1454 Instance->Service->Image,
1458 Instance->UdpIo =
NULL;
1459 Instance->Token =
NULL;
1501 IP4_ADDR ClientAddr;
1503 if ((This ==
NULL) || (Token ==
NULL) || (Token->Packet ==
NULL)) {
1504 return EFI_INVALID_PARAMETER;
1507 Instance = DHCP_INSTANCE_FROM_THIS (This);
1508 DhcpSb = Instance->Service;
1510 if (Instance->Token !=
NULL) {
1514 return EFI_NOT_READY;
1518 (NTOHL (Token->Packet->Dhcp4.Header.Xid) == Instance->Service->Xid) ||
1519 (Token->TimeoutValue == 0) ||
1520 ((Token->ListenPointCount != 0) && (Token->ListenPoints ==
NULL)) ||
1522 EFI_IP4_EQUAL (&Token->RemoteAddress, &mZeroIp4Addr)
1530 return EFI_INVALID_PARAMETER;
1533 ClientAddr = EFI_NTOHL (Token->Packet->Dhcp4.Header.ClientAddr);
1535 if (ClientAddr == 0) {
1536 return EFI_NO_MAPPING;
1539 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1544 Instance->Token = Token;
1545 Instance->Timeout = Token->TimeoutValue;
1551 if (EFI_ERROR (Status)) {
1559 &DhcpSb->ClientAddressSendOut[0],
1560 &Token->Packet->Dhcp4.Header.ClientHwAddr[0],
1561 Token->Packet->Dhcp4.Header.HwAddrLen
1567 Frag.Bulk = (UINT8 *)&Token->Packet->Dhcp4;
1568 Frag.Len = Token->Packet->Length;
1571 Status = EFI_OUT_OF_RESOURCES;
1584 EndPoint.RemoteAddr.Addr[0] = NTOHL (Ip);
1586 if (Token->RemotePort == 0) {
1587 EndPoint.RemotePort = DHCP_SERVER_PORT;
1589 EndPoint.RemotePort = Token->RemotePort;
1595 ZeroMem (&Gateway,
sizeof (Gateway));
1596 if (!IP4_NET_EQUAL (ClientAddr, EndPoint.RemoteAddr.Addr[0], DhcpSb->Netmask)) {
1598 Gateway.Addr[0] = NTOHL (Gateway.Addr[0]);
1605 if (EFI_ERROR (Status)) {
1614 if (EFI_ERROR (Status)) {
1620 if (EFI_ERROR (Status) && (Instance->UdpIo !=
NULL)) {
1622 gBS->CloseProtocol (
1623 Instance->UdpIo->UdpHandle,
1624 &gEfiUdp4ProtocolGuid,
1625 Instance->Service->Image,
1629 Instance->UdpIo =
NULL;
1630 Instance->Token =
NULL;
1633 gBS->RestoreTPL (OldTpl);
1635 if (!EFI_ERROR (Status) && (Token->CompletionEvent ==
NULL)) {
1641 OldTpl =
gBS->RaiseTPL (TPL_CALLBACK);
1646 if (Instance->Timeout > 0) {
1647 Instance->UdpIo->Protocol.Udp4->Poll (Instance->UdpIo->Protocol.Udp4);
1648 gBS->RestoreTPL (OldTpl);
1650 gBS->RestoreTPL (OldTpl);
1685 if (Parse->Index <= Parse->OptionCount) {
1729 IN OUT UINT32 *OptionCount,
1739 if ((This ==
NULL) || (Packet ==
NULL) || (OptionCount ==
NULL)) {
1740 return EFI_INVALID_PARAMETER;
1743 if ((Packet->Size < Packet->Length + 2 * sizeof (UINT32)) ||
1747 return EFI_INVALID_PARAMETER;
1750 if ((*OptionCount != 0) && (PacketOptionList ==
NULL)) {
1751 return EFI_BUFFER_TOO_SMALL;
1756 Context.Option = PacketOptionList;
1757 Context.OptionCount = *OptionCount;
1762 if (EFI_ERROR (Status)) {
1766 *OptionCount = Context.Index;
1768 if (Context.Index > Context.OptionCount) {
1769 return EFI_BUFFER_TOO_SMALL;
UINT16 EFIAPI WriteUnaligned16(OUT UINT16 *Buffer, IN UINT16 Value)
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_STATUS EFIAPI Dhcp4InstanceConfigUdpIo(IN UDP_IO *UdpIo, IN VOID *Context)
EFI_STATUS EFIAPI EfiDhcp4Build(IN EFI_DHCP4_PROTOCOL *This, IN EFI_DHCP4_PACKET *SeedPacket, IN UINT32 DeleteCount, IN UINT8 *DeleteList OPTIONAL, IN UINT32 AppendCount, IN EFI_DHCP4_PACKET_OPTION *AppendList[] OPTIONAL, OUT EFI_DHCP4_PACKET **NewPacket)
EFI_STATUS EFIAPI EfiDhcp4RenewRebind(IN EFI_DHCP4_PROTOCOL *This, IN BOOLEAN RebindRequest, IN EFI_EVENT CompletionEvent OPTIONAL)
VOID EFIAPI DhcpDummyExtFree(IN VOID *Arg)
EFI_STATUS DhcpCopyConfigure(OUT EFI_DHCP4_CONFIG_DATA *Dst, IN EFI_DHCP4_CONFIG_DATA *Src)
VOID EFIAPI PxeDhcpInput(NET_BUF *UdpPacket, UDP_END_POINT *EndPoint, EFI_STATUS IoStatus, VOID *Context)
EFI_STATUS EFIAPI EfiDhcp4TransmitReceive(IN EFI_DHCP4_PROTOCOL *This, IN EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN *Token)
EFI_STATUS EFIAPI EfiDhcp4Start(IN EFI_DHCP4_PROTOCOL *This, IN EFI_EVENT CompletionEvent OPTIONAL)
EFI_STATUS Dhcp4ParseCheckOption(IN UINT8 Tag, IN UINT8 Len, IN UINT8 *Data, IN VOID *Context)
EFI_STATUS EFIAPI EfiDhcp4Stop(IN EFI_DHCP4_PROTOCOL *This)
EFI_STATUS EFIAPI EfiDhcp4Configure(IN EFI_DHCP4_PROTOCOL *This, IN EFI_DHCP4_CONFIG_DATA *Dhcp4CfgData OPTIONAL)
VOID DhcpCleanConfigure(IN OUT EFI_DHCP4_CONFIG_DATA *Config)
VOID PxeDhcpDone(IN DHCP_PROTOCOL *Instance)
EFI_STATUS EFIAPI EfiDhcp4Release(IN EFI_DHCP4_PROTOCOL *This)
EFI_STATUS EFIAPI EfiDhcp4Parse(IN EFI_DHCP4_PROTOCOL *This, IN EFI_DHCP4_PACKET *Packet, IN OUT UINT32 *OptionCount, OUT EFI_DHCP4_PACKET_OPTION *PacketOptionList[] OPTIONAL)
VOID DhcpYieldControl(IN DHCP_SERVICE *DhcpSb)
VOID SetElapsedTime(IN UINT16 *Elapsed, IN DHCP_PROTOCOL *Instance)
EFI_STATUS Dhcp4InstanceCreateUdpIo(IN OUT DHCP_PROTOCOL *Instance)
EFI_STATUS EFIAPI EfiDhcp4GetModeData(IN EFI_DHCP4_PROTOCOL *This, OUT EFI_DHCP4_MODE_DATA *Dhcp4ModeData)
EFI_STATUS DhcpInitRequest(IN DHCP_SERVICE *DhcpSb)
EFI_STATUS DhcpSendMessage(IN DHCP_SERVICE *DhcpSb, IN EFI_DHCP4_PACKET *Seed, IN DHCP_PARAMETER *Para, IN UINT8 Type, IN UINT8 *Msg)
EFI_STATUS DhcpSetState(IN OUT DHCP_SERVICE *DhcpSb, IN INTN State, IN BOOLEAN CallUser)
VOID DhcpCleanLease(IN DHCP_SERVICE *DhcpSb)
VOID EFIAPI DhcpOnPacketSent(NET_BUF *Packet, UDP_END_POINT *EndPoint, EFI_STATUS IoStatus, VOID *Context)
EFI_STATUS DhcpBuild(IN EFI_DHCP4_PACKET *SeedPacket, IN UINT32 DeleteCount, IN UINT8 *DeleteList OPTIONAL, IN UINT32 AppendCount, IN EFI_DHCP4_PACKET_OPTION *AppendList[] OPTIONAL, OUT EFI_DHCP4_PACKET **NewPacket)
EFI_STATUS DhcpIterateOptions(IN EFI_DHCP4_PACKET *Packet, IN DHCP_CHECK_OPTION Check OPTIONAL, IN VOID *Context)
EFI_STATUS DhcpValidateOptions(IN EFI_DHCP4_PACKET *Packet, OUT DHCP_PARAMETER **Para OPTIONAL)
#define DHCP_OPTION_MAGIC
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
#define BASE_CR(Record, TYPE, Field)
VOID EFIAPI NetbufFree(IN NET_BUF *Nbuf)
UINT32 EFIAPI NetbufQueCopy(IN NET_BUF_QUEUE *NbufQue, IN UINT32 Offset, IN UINT32 Len, OUT UINT8 *Dest)
VOID EFIAPI NetbufQueFlush(IN OUT NET_BUF_QUEUE *NbufQue)
UINT32 EFIAPI NetbufCopy(IN NET_BUF *Nbuf, IN UINT32 Offset, IN UINT32 Len, IN UINT8 *Dest)
NET_BUF *EFIAPI NetbufAlloc(IN UINT32 Len)
NET_BUF *EFIAPI NetbufFromExt(IN NET_FRAGMENT *ExtFragment, IN UINT32 ExtNum, IN UINT32 HeadSpace, IN UINT32 HeadLen, IN NET_VECTOR_EXT_FREE ExtFree, IN VOID *Arg OPTIONAL)
EFI_STATUS EFIAPI NetLibDetectMediaWaitTimeout(IN EFI_HANDLE ServiceHandle, IN UINT64 Timeout, OUT EFI_STATUS *MediaState)
INTN EFIAPI NetGetIpClass(IN IP4_ADDR Addr)
UINT8 *EFIAPI NetbufAllocSpace(IN OUT NET_BUF *Nbuf, IN UINT32 Len, IN BOOLEAN FromHead)
VOID EFIAPI NetbufQueAppend(IN OUT NET_BUF_QUEUE *NbufQue, IN OUT NET_BUF *Nbuf)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
VOID EFIAPI UdpIoCleanIo(IN UDP_IO *UdpIo)
EFI_STATUS EFIAPI UdpIoRecvDatagram(IN UDP_IO *UdpIo, IN UDP_IO_CALLBACK CallBack, IN VOID *Context, IN UINT32 HeadLen)
EFI_STATUS EFIAPI UdpIoSendDatagram(IN UDP_IO *UdpIo, IN NET_BUF *Packet, IN UDP_END_POINT *EndPoint OPTIONAL, IN EFI_IP_ADDRESS *Gateway OPTIONAL, IN UDP_IO_CALLBACK CallBack, IN VOID *Context)
EFI_STATUS EFIAPI UdpIoFreeIo(IN UDP_IO *UdpIo)
UDP_IO *EFIAPI UdpIoCreateIo(IN EFI_HANDLE Controller, IN EFI_HANDLE ImageHandle, IN UDP_IO_CONFIG Configure, IN UINT8 UdpVersion, IN VOID *Context)
EFI_DHCP4_CALLBACK Dhcp4Callback
EFI_IPv4_ADDRESS ClientAddr
Client IP address from client.
UINT8 ClientHwAddr[16]
Client hardware address.
EFI_DHCP4_LISTEN_POINT * ListenPoints
EFI_DHCP4_PACKET * Packet
EFI_DHCP4_PACKET * ResponseList
EFI_EVENT CompletionEvent