\r
#include "VirtioNet.h"\r
\r
-#define RECEIVE_FILTERS_NO_MCAST ((UINT32) ( \\r
+#define RECEIVE_FILTERS_NO_MCAST ((UINT32) ( \\r
EFI_SIMPLE_NETWORK_RECEIVE_UNICAST | \\r
EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST | \\r
EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS \\r
EFI_STATUS\r
EFIAPI\r
VirtioNetGetFeatures (\r
- IN OUT VNET_DEV *Dev,\r
- OUT EFI_MAC_ADDRESS *MacAddress,\r
- OUT BOOLEAN *MediaPresentSupported,\r
- OUT BOOLEAN *MediaPresent\r
+ IN OUT VNET_DEV *Dev,\r
+ OUT EFI_MAC_ADDRESS *MacAddress,\r
+ OUT BOOLEAN *MediaPresentSupported,\r
+ OUT BOOLEAN *MediaPresent\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT8 NextDevStat;\r
- UINT64 Features;\r
- UINTN MacIdx;\r
- UINT16 LinkStatus;\r
+ EFI_STATUS Status;\r
+ UINT8 NextDevStat;\r
+ UINT64 Features;\r
+ UINTN MacIdx;\r
+ UINT16 LinkStatus;\r
\r
//\r
// Interrogate the device for features (virtio-0.9.5, 2.2.1 Device\r
// Initialization Sequence), but don't complete setting it up.\r
//\r
NextDevStat = 0; // step 1 -- reset device\r
- Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);\r
+ Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
NextDevStat |= VSTAT_ACK; // step 2 -- acknowledge device presence\r
- Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);\r
+ Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);\r
if (EFI_ERROR (Status)) {\r
goto YieldDevice;\r
}\r
\r
NextDevStat |= VSTAT_DRIVER; // step 3 -- we know how to drive it\r
- Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);\r
+ Status = Dev->VirtIo->SetDeviceStatus (Dev->VirtIo, NextDevStat);\r
if (EFI_ERROR (Status)) {\r
goto YieldDevice;\r
}\r
Status = EFI_UNSUPPORTED;\r
goto YieldDevice;\r
}\r
+\r
for (MacIdx = 0; MacIdx < SIZE_OF_VNET (Mac); ++MacIdx) {\r
- Status = Dev->VirtIo->ReadDevice (Dev->VirtIo,\r
+ Status = Dev->VirtIo->ReadDevice (\r
+ Dev->VirtIo,\r
OFFSET_OF_VNET (Mac) + MacIdx, // Offset\r
1, // FieldSize\r
1, // BufferSize\r
//\r
if ((Features & VIRTIO_NET_F_STATUS) == 0) {\r
*MediaPresentSupported = FALSE;\r
- }\r
- else {\r
+ } else {\r
*MediaPresentSupported = TRUE;\r
- Status = VIRTIO_CFG_READ (Dev, LinkStatus, &LinkStatus);\r
+ Status = VIRTIO_CFG_READ (Dev, LinkStatus, &LinkStatus);\r
if (EFI_ERROR (Status)) {\r
goto YieldDevice;\r
}\r
- *MediaPresent = (BOOLEAN) ((LinkStatus & VIRTIO_NET_S_LINK_UP) != 0);\r
+\r
+ *MediaPresent = (BOOLEAN)((LinkStatus & VIRTIO_NET_S_LINK_UP) != 0);\r
}\r
\r
YieldDevice:\r
- Dev->VirtIo->SetDeviceStatus (Dev->VirtIo,\r
- EFI_ERROR (Status) ? VSTAT_FAILED : 0);\r
+ Dev->VirtIo->SetDeviceStatus (\r
+ Dev->VirtIo,\r
+ EFI_ERROR (Status) ? VSTAT_FAILED : 0\r
+ );\r
\r
return Status;\r
}\r
\r
-\r
/**\r
Set up the Simple Network Protocol fields, the Simple Network Mode fields,\r
and the Exit Boot Services Event of the virtio-net driver instance.\r
EFI_STATUS\r
EFIAPI\r
VirtioNetSnpPopulate (\r
- IN OUT VNET_DEV *Dev\r
+ IN OUT VNET_DEV *Dev\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
//\r
// We set up a function here that is asynchronously callable by an\r
// I/O)". Because none of our functions block, we'd satisfy an even stronger\r
// requirement.\r
//\r
- Status = gBS->CreateEvent (EVT_NOTIFY_WAIT, TPL_CALLBACK,\r
- &VirtioNetIsPacketAvailable, Dev, &Dev->Snp.WaitForPacket);\r
+ Status = gBS->CreateEvent (\r
+ EVT_NOTIFY_WAIT,\r
+ TPL_CALLBACK,\r
+ &VirtioNetIsPacketAvailable,\r
+ Dev,\r
+ &Dev->Snp.WaitForPacket\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
Dev->Snp.Receive = &VirtioNetReceive;\r
Dev->Snp.Mode = &Dev->Snm;\r
\r
- Dev->Snm.State = EfiSimpleNetworkStopped;\r
- Dev->Snm.HwAddressSize = SIZE_OF_VNET (Mac);\r
- Dev->Snm.MediaHeaderSize = SIZE_OF_VNET (Mac) + // dst MAC\r
- SIZE_OF_VNET (Mac) + // src MAC\r
- 2; // Ethertype\r
- Dev->Snm.MaxPacketSize = 1500;\r
- Dev->Snm.NvRamSize = 0;\r
- Dev->Snm.NvRamAccessSize = 0;\r
- Dev->Snm.ReceiveFilterMask = RECEIVE_FILTERS_NO_MCAST;\r
- Dev->Snm.ReceiveFilterSetting = RECEIVE_FILTERS_NO_MCAST;\r
- Dev->Snm.MaxMCastFilterCount = 0;\r
- Dev->Snm.MCastFilterCount = 0;\r
- Dev->Snm.IfType = 1; // ethernet\r
- Dev->Snm.MacAddressChangeable = FALSE;\r
- Dev->Snm.MultipleTxSupported = TRUE;\r
+ Dev->Snm.State = EfiSimpleNetworkStopped;\r
+ Dev->Snm.HwAddressSize = SIZE_OF_VNET (Mac);\r
+ Dev->Snm.MediaHeaderSize = SIZE_OF_VNET (Mac) + // dst MAC\r
+ SIZE_OF_VNET (Mac) + // src MAC\r
+ 2; // Ethertype\r
+ Dev->Snm.MaxPacketSize = 1500;\r
+ Dev->Snm.NvRamSize = 0;\r
+ Dev->Snm.NvRamAccessSize = 0;\r
+ Dev->Snm.ReceiveFilterMask = RECEIVE_FILTERS_NO_MCAST;\r
+ Dev->Snm.ReceiveFilterSetting = RECEIVE_FILTERS_NO_MCAST;\r
+ Dev->Snm.MaxMCastFilterCount = 0;\r
+ Dev->Snm.MCastFilterCount = 0;\r
+ Dev->Snm.IfType = 1; // ethernet\r
+ Dev->Snm.MacAddressChangeable = FALSE;\r
+ Dev->Snm.MultipleTxSupported = TRUE;\r
\r
ASSERT (SIZE_OF_VNET (Mac) <= sizeof (EFI_MAC_ADDRESS));\r
\r
- Status = VirtioNetGetFeatures (Dev, &Dev->Snm.CurrentAddress,\r
- &Dev->Snm.MediaPresentSupported, &Dev->Snm.MediaPresent);\r
+ Status = VirtioNetGetFeatures (\r
+ Dev,\r
+ &Dev->Snm.CurrentAddress,\r
+ &Dev->Snm.MediaPresentSupported,\r
+ &Dev->Snm.MediaPresent\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto CloseWaitForPacket;\r
}\r
- CopyMem (&Dev->Snm.PermanentAddress, &Dev->Snm.CurrentAddress,\r
- SIZE_OF_VNET (Mac));\r
+\r
+ CopyMem (\r
+ &Dev->Snm.PermanentAddress,\r
+ &Dev->Snm.CurrentAddress,\r
+ SIZE_OF_VNET (Mac)\r
+ );\r
SetMem (&Dev->Snm.BroadcastAddress, SIZE_OF_VNET (Mac), 0xFF);\r
\r
//\r
// could be entered immediately. VirtioNetExitBoot() checks Dev->Snm.State,\r
// so we're safe.\r
//\r
- Status = gBS->CreateEvent (EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK,\r
- &VirtioNetExitBoot, Dev, &Dev->ExitBoot);\r
+ Status = gBS->CreateEvent (\r
+ EVT_SIGNAL_EXIT_BOOT_SERVICES,\r
+ TPL_CALLBACK,\r
+ &VirtioNetExitBoot,\r
+ Dev,\r
+ &Dev->ExitBoot\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto CloseWaitForPacket;\r
}\r
return Status;\r
}\r
\r
-\r
/**\r
Release any resources allocated by VirtioNetSnpPopulate().\r
\r
VOID\r
EFIAPI\r
VirtioNetSnpEvacuate (\r
- IN OUT VNET_DEV *Dev\r
+ IN OUT VNET_DEV *Dev\r
)\r
{\r
//\r
gBS->CloseEvent (Dev->Snp.WaitForPacket);\r
}\r
\r
-\r
/**\r
Tests to see if this driver supports a given controller. If a child device is\r
provided, it further tests to see if this driver supports creating a handle\r
RemainingDevicePath is not supported by the\r
driver specified by This.\r
**/\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
VirtioNetDriverBindingSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- VIRTIO_DEVICE_PROTOCOL *VirtIo;\r
+ EFI_STATUS Status;\r
+ VIRTIO_DEVICE_PROTOCOL *VirtIo;\r
\r
//\r
// Attempt to open the device with the VirtIo set of interfaces. On success,\r
// We needed VirtIo access only transitorily, to see whether we support the\r
// device or not.\r
//\r
- gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
return Status;\r
}\r
\r
-\r
/**\r
Starts a device controller or a bus controller.\r
\r
@retval Others The driver failed to start the device.\r
\r
**/\r
-\r
STATIC\r
EFI_STATUS\r
EFIAPI\r
VirtioNetDriverBindingStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
- EFI_STATUS Status;\r
- VNET_DEV *Dev;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
- MAC_ADDR_DEVICE_PATH MacNode;\r
- VOID *ChildVirtIo;\r
+ EFI_STATUS Status;\r
+ VNET_DEV *Dev;\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+ MAC_ADDR_DEVICE_PATH MacNode;\r
+ VOID *ChildVirtIo;\r
\r
//\r
// allocate space for the driver instance\r
//\r
- Dev = (VNET_DEV *) AllocateZeroPool (sizeof *Dev);\r
+ Dev = (VNET_DEV *)AllocateZeroPool (sizeof *Dev);\r
if (Dev == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
Dev->Signature = VNET_SIG;\r
\r
- Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,\r
- (VOID **)&Dev->VirtIo, This->DriverBindingHandle,\r
- DeviceHandle, EFI_OPEN_PROTOCOL_BY_DRIVER);\r
+ Status = gBS->OpenProtocol (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ (VOID **)&Dev->VirtIo,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto FreeVirtioNet;\r
}\r
//\r
// get the device path of the virtio-net device -- one-shot open\r
//\r
- Status = gBS->OpenProtocol (DeviceHandle, &gEfiDevicePathProtocolGuid,\r
- (VOID **)&DevicePath, This->DriverBindingHandle,\r
- DeviceHandle, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+ Status = gBS->OpenProtocol (\r
+ DeviceHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ (VOID **)&DevicePath,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto Evacuate;\r
}\r
MacNode.Header.Type = MESSAGING_DEVICE_PATH;\r
MacNode.Header.SubType = MSG_MAC_ADDR_DP;\r
SetDevicePathNodeLength (&MacNode, sizeof MacNode);\r
- CopyMem (&MacNode.MacAddress, &Dev->Snm.CurrentAddress,\r
- sizeof (EFI_MAC_ADDRESS));\r
- MacNode.IfType = Dev->Snm.IfType;\r
+ CopyMem (\r
+ &MacNode.MacAddress,\r
+ &Dev->Snm.CurrentAddress,\r
+ sizeof (EFI_MAC_ADDRESS)\r
+ );\r
+ MacNode.IfType = Dev->Snm.IfType;\r
\r
Dev->MacDevicePath = AppendDevicePathNode (DevicePath, &MacNode.Header);\r
if (Dev->MacDevicePath == NULL) {\r
// create a child handle with the Simple Network Protocol and the new\r
// device path installed on it\r
//\r
- Status = gBS->InstallMultipleProtocolInterfaces (&Dev->MacHandle,\r
- &gEfiSimpleNetworkProtocolGuid, &Dev->Snp,\r
- &gEfiDevicePathProtocolGuid, Dev->MacDevicePath,\r
- NULL);\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &Dev->MacHandle,\r
+ &gEfiSimpleNetworkProtocolGuid,\r
+ &Dev->Snp,\r
+ &gEfiDevicePathProtocolGuid,\r
+ Dev->MacDevicePath,\r
+ NULL\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto FreeMacDevicePath;\r
}\r
// make a note that we keep this device open with VirtIo for the sake of this\r
// child\r
//\r
- Status = gBS->OpenProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,\r
- &ChildVirtIo, This->DriverBindingHandle,\r
- Dev->MacHandle, EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER);\r
+ Status = gBS->OpenProtocol (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ &ChildVirtIo,\r
+ This->DriverBindingHandle,\r
+ Dev->MacHandle,\r
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+ );\r
if (EFI_ERROR (Status)) {\r
goto UninstallMultiple;\r
}\r
return EFI_SUCCESS;\r
\r
UninstallMultiple:\r
- gBS->UninstallMultipleProtocolInterfaces (Dev->MacHandle,\r
- &gEfiDevicePathProtocolGuid, Dev->MacDevicePath,\r
- &gEfiSimpleNetworkProtocolGuid, &Dev->Snp,\r
- NULL);\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ Dev->MacHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ Dev->MacDevicePath,\r
+ &gEfiSimpleNetworkProtocolGuid,\r
+ &Dev->Snp,\r
+ NULL\r
+ );\r
\r
FreeMacDevicePath:\r
FreePool (Dev->MacDevicePath);\r
VirtioNetSnpEvacuate (Dev);\r
\r
CloseVirtIo:\r
- gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
\r
FreeVirtioNet:\r
FreePool (Dev);\r
return Status;\r
}\r
\r
-\r
/**\r
Stops a device controller or a bus controller.\r
\r
EFI_STATUS\r
EFIAPI\r
VirtioNetDriverBindingStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE DeviceHandle,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE DeviceHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
)\r
{\r
if (NumberOfChildren > 0) {\r
// free all resources for whose access we need the child handle, because\r
// the child handle is going away\r
//\r
- EFI_STATUS Status;\r
- EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
- VNET_DEV *Dev;\r
- EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+ EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+ VNET_DEV *Dev;\r
+ EFI_TPL OldTpl;\r
\r
ASSERT (NumberOfChildren == 1);\r
\r
- Status = gBS->OpenProtocol (ChildHandleBuffer[0],\r
- &gEfiSimpleNetworkProtocolGuid, (VOID **)&Snp,\r
- This->DriverBindingHandle, DeviceHandle,\r
- EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+ Status = gBS->OpenProtocol (\r
+ ChildHandleBuffer[0],\r
+ &gEfiSimpleNetworkProtocolGuid,\r
+ (VOID **)&Snp,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
Dev = VIRTIO_NET_FROM_SNP (Snp);\r
\r
// device in use, cannot stop driver instance\r
//\r
Status = EFI_DEVICE_ERROR;\r
- }\r
- else {\r
- gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,\r
- This->DriverBindingHandle, Dev->MacHandle);\r
- gBS->UninstallMultipleProtocolInterfaces (Dev->MacHandle,\r
- &gEfiDevicePathProtocolGuid, Dev->MacDevicePath,\r
- &gEfiSimpleNetworkProtocolGuid, &Dev->Snp,\r
- NULL);\r
+ } else {\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Dev->MacHandle\r
+ );\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ Dev->MacHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ Dev->MacDevicePath,\r
+ &gEfiSimpleNetworkProtocolGuid,\r
+ &Dev->Snp,\r
+ NULL\r
+ );\r
FreePool (Dev->MacDevicePath);\r
VirtioNetSnpEvacuate (Dev);\r
FreePool (Dev);\r
//\r
// release remaining resources, tied directly to the parent handle\r
//\r
- gBS->CloseProtocol (DeviceHandle, &gVirtioDeviceProtocolGuid,\r
- This->DriverBindingHandle, DeviceHandle);\r
+ gBS->CloseProtocol (\r
+ DeviceHandle,\r
+ &gVirtioDeviceProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ DeviceHandle\r
+ );\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
-EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding = {\r
+EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding = {\r
&VirtioNetDriverBindingSupported,\r
&VirtioNetDriverBindingStart,\r
&VirtioNetDriverBindingStop,\r