void CapabilityResponseParser::HandleResponse(ImapStatusCode status, const std::string& line) { if(boost::istarts_with(line, "[CAPABILITY")) { size_t end = line.find(']'); ParseCapabilities(line.substr(1, end - 1)); } }
bool CapabilityResponseParser::HandleUntaggedResponse(const std::string& line) { if(boost::istarts_with(line, "CAPABILITY")) { ParseCapabilities(line); return true; } return false; }
STATIC EFI_STATUS EFIAPI Virtio10BindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE DeviceHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ) { VIRTIO_1_0_DEV *Device; EFI_STATUS Status; PCI_TYPE00 Pci; UINT64 SetAttributes; Device = AllocateZeroPool (sizeof *Device); if (Device == NULL) { return EFI_OUT_OF_RESOURCES; } Device->Signature = VIRTIO_1_0_SIGNATURE; CopyMem (&Device->VirtIo, &mVirtIoTemplate, sizeof mVirtIoTemplate); Status = gBS->OpenProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, (VOID **)&Device->PciIo, This->DriverBindingHandle, DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER); if (EFI_ERROR (Status)) { goto FreeDevice; } Status = Device->PciIo->Pci.Read (Device->PciIo, EfiPciIoWidthUint32, 0, sizeof Pci / sizeof (UINT32), &Pci); if (EFI_ERROR (Status)) { goto ClosePciIo; } Device->VirtIo.SubSystemDeviceId = Pci.Hdr.DeviceId - 0x1040; Status = ParseCapabilities (Device, Pci.Device.CapabilityPtr); if (EFI_ERROR (Status)) { goto ClosePciIo; } Status = Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationGet, 0, &Device->OriginalPciAttributes); if (EFI_ERROR (Status)) { goto ClosePciIo; } SetAttributes = 0; UpdateAttributes (&Device->CommonConfig, &SetAttributes); UpdateAttributes (&Device->NotifyConfig, &SetAttributes); UpdateAttributes (&Device->SpecificConfig, &SetAttributes); Status = Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationEnable, SetAttributes, NULL); if (EFI_ERROR (Status)) { goto ClosePciIo; } Status = gBS->InstallProtocolInterface (&DeviceHandle, &gVirtioDeviceProtocolGuid, EFI_NATIVE_INTERFACE, &Device->VirtIo); if (EFI_ERROR (Status)) { goto RestorePciAttributes; } return EFI_SUCCESS; RestorePciAttributes: Device->PciIo->Attributes (Device->PciIo, EfiPciIoAttributeOperationSet, Device->OriginalPciAttributes, NULL); ClosePciIo: gBS->CloseProtocol (DeviceHandle, &gEfiPciIoProtocolGuid, This->DriverBindingHandle, DeviceHandle); FreeDevice: FreePool (Device); return Status; }