]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
MdeModulePkg/UfsPassThruDxe: Add impl of UFS Device Config Protocol
[mirror_edk2.git] / MdeModulePkg / Bus / Ufs / UfsPassThruDxe / UfsPassThru.c
index e27f4fbab175a2d53e2e58017680bbfc3d9a5388..e24eb40333be558cf50cc0cdb1d5b72444f51630 100644 (file)
@@ -34,6 +34,11 @@ UFS_PASS_THRU_PRIVATE_DATA gUfsPassThruTemplate = {
     UfsPassThruResetTargetLun,\r
     UfsPassThruGetNextTarget\r
   },\r
+  {                               // UfsDevConfig\r
+    UfsRwUfsDescriptor,\r
+    UfsRwUfsFlag,\r
+    UfsRwUfsAttribute\r
+  },\r
   0,                              // UfsHostController\r
   0,                              // UfsHcBase\r
   0,                              // Capabilities\r
@@ -820,6 +825,7 @@ UfsPassThruDriverBindingStart (
   UINTN                                 UfsHcBase;\r
   UINT32                                Index;\r
   UFS_UNIT_DESC                         UnitDescriptor;\r
+  UINT32                                UnitDescriptorSize;\r
 \r
   Status    = EFI_SUCCESS;\r
   UfsHc     = NULL;\r
@@ -896,8 +902,9 @@ UfsPassThruDriverBindingStart (
   // Check if 8 common luns are active and set corresponding bit mask.\r
   // TODO: Parse device descriptor to decide if exposing RPMB LUN to upper layer for authentication access.\r
   //\r
+  UnitDescriptorSize = sizeof (UFS_UNIT_DESC);\r
   for (Index = 0; Index < 8; Index++) {\r
-    Status = UfsRwDeviceDesc (Private, TRUE, UfsUnitDesc, (UINT8) Index, 0, &UnitDescriptor, sizeof (UFS_UNIT_DESC));\r
+    Status = UfsRwDeviceDesc (Private, TRUE, UfsUnitDesc, (UINT8) Index, 0, &UnitDescriptor, &UnitDescriptorSize);\r
     if (EFI_ERROR (Status)) {\r
       DEBUG ((DEBUG_ERROR, "Failed to read unit descriptor, index = %X, status = %r\n", Index, Status));\r
       continue;\r
@@ -933,11 +940,13 @@ UfsPassThruDriverBindingStart (
     goto Error;\r
   }\r
 \r
-  Status = gBS->InstallProtocolInterface (\r
+  Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &Controller,\r
                   &gEfiExtScsiPassThruProtocolGuid,\r
-                  EFI_NATIVE_INTERFACE,\r
-                  &(Private->ExtScsiPassThru)\r
+                  &(Private->ExtScsiPassThru),\r
+                  &gEfiUfsDeviceConfigProtocolGuid,\r
+                  &(Private->UfsDevConfig),\r
+                  NULL\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
@@ -1057,10 +1066,13 @@ UfsPassThruDriverBindingStop (
     }\r
   }\r
 \r
-  Status = gBS->UninstallProtocolInterface (\r
+  Status = gBS->UninstallMultipleProtocolInterfaces (\r
                   Controller,\r
                   &gEfiExtScsiPassThruProtocolGuid,\r
-                  &(Private->ExtScsiPassThru)\r
+                  &(Private->ExtScsiPassThru),\r
+                  &gEfiUfsDeviceConfigProtocolGuid,\r
+                  &(Private->UfsDevConfig),\r
+                  NULL\r
                   );\r
 \r
   if (EFI_ERROR (Status)) {\r