EFIAPI TimerTick()

in DfciPkg/Application/DfciMenu/DfciRequest.c [378:440]


EFIAPI TimerTick (
    IN EFI_EVENT  Event,
    IN VOID      *Context
  ) {

    UINTN                            DataSize;
    EFI_IP4_CONFIG2_INTERFACE_INFO  *Info;
    EFI_IP4_CONFIG2_PROTOCOL        *Ip4Config2;
    DFCI_NETWORK_REQUEST            *NetworkRequest;
    EFI_STATUS                       Status;


    NetworkRequest = (DFCI_NETWORK_REQUEST *) Context;

    Status = gBS->HandleProtocol(NetworkRequest->HttpNic.NicHandle,
                                &gEfiIp4Config2ProtocolGuid,
                                (VOID **) &Ip4Config2);
    if (EFI_ERROR(Status)) {
        DEBUG((DEBUG_ERROR, "Tick error locating IPv4 Config2 protocol. Code=%r\n", Status));
        if (NULL != NetworkRequest->HttpNic.WaitEvent) {
            gBS->SignalEvent (NetworkRequest->HttpNic.WaitEvent);
        }
        return;
    }

    DataSize = 0;
    Status = Ip4Config2->GetData (Ip4Config2,
                                  Ip4Config2DataTypeInterfaceInfo,
                                 &DataSize,
                                 &Info);
    if (EFI_BUFFER_TOO_SMALL != Status) {
        DEBUG((DEBUG_ERROR, "Error obtaining IP4 Interface Info size. Code=%r\n", Status));
    } else {
        Info = AllocatePool (DataSize);
        if (NULL == Info) {
            DEBUG((DEBUG_ERROR, "Error allocating %d bytes for Info\n", DataSize));
        } else {
            Info->StationAddress.Addr[0] = 0;
            Status = Ip4Config2->GetData (Ip4Config2,
                                          Ip4Config2DataTypeInterfaceInfo,
                                         &DataSize,
                                          Info);
            if (EFI_ERROR(Status)) {
                DEBUG((DEBUG_ERROR, "Error obtaining IP4 Interface Info. Code=%r\n", Status));
                DEBUG((DEBUG_ERROR, " DataSize=%d, StructSize=%d\n",
                                     DataSize,
                                     sizeof(EFI_IP4_CONFIG2_INTERFACE_INFO) ));
            } else {
                if (Info->StationAddress.Addr[0] != 0) {
                    if (NULL != NetworkRequest->HttpNic.WaitEvent) {
                        gBS->SignalEvent (NetworkRequest->HttpNic.WaitEvent);
                    }
                    DEBUG((DEBUG_INFO, "DHCP Local Address is %d.%d.%d.%d.\n",
                           Info->StationAddress.Addr[0],
                           Info->StationAddress.Addr[1],
                           Info->StationAddress.Addr[2],
                           Info->StationAddress.Addr[3]));
                }
            }
            FreePool (Info);
        }
    }
}