]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Ufs/UfsBlockIoPei/UfsBlockIoPei.c
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Bus / Ufs / UfsBlockIoPei / UfsBlockIoPei.c
index 505b92cfc1b8dbcfc37db603a4cb79b3d5a3c3bb..d79ca3904b447049cb4e2857af6ddc4d31ae7918 100644 (file)
@@ -1,13 +1,7 @@
 /** @file\r
 \r
-  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -137,53 +131,7 @@ UFS_PEIM_HC_PRIVATE_DATA   gUfsHcPeimTemplate = {
   }\r
 };\r
 \r
-/**\r
-  Execute Request Sense SCSI command on a specific UFS device.\r
-\r
-  @param[in]  Private              A pointer to UFS_PEIM_HC_PRIVATE_DATA data structure.\r
-  @param[in]  Lun                  The lun on which the SCSI cmd executed.\r
-  @param[out] DataBuffer           A pointer to output sense data.\r
-  @param[out] DataBufferLength     The length of output sense data.\r
-\r
-  @retval EFI_SUCCESS              The command executed successfully.\r
-  @retval EFI_DEVICE_ERROR         A device error occurred while attempting to send SCSI Request Packet.\r
-  @retval EFI_TIMEOUT              A timeout occurred while waiting for the SCSI Request Packet to execute.\r
-\r
-**/\r
-EFI_STATUS\r
-UfsPeimRequestSense (\r
-  IN     UFS_PEIM_HC_PRIVATE_DATA        *Private,\r
-  IN     UINTN                           Lun,\r
-     OUT VOID                            *DataBuffer,\r
-     OUT UINT32                          *DataBufferLength\r
-  )\r
-{\r
-  UFS_SCSI_REQUEST_PACKET                Packet;\r
-  UINT8                                  Cdb[UFS_SCSI_OP_LENGTH_SIX];\r
-  EFI_STATUS                             Status;\r
-\r
-  ZeroMem (&Packet, sizeof (UFS_SCSI_REQUEST_PACKET));\r
-  ZeroMem (Cdb, sizeof (Cdb));\r
-\r
-  Cdb[0]  = EFI_SCSI_OP_REQUEST_SENSE;\r
-\r
-  Packet.Timeout          = UFS_TIMEOUT;\r
-  Packet.Cdb              = Cdb;\r
-  Packet.CdbLength        = sizeof (Cdb);\r
-  Packet.DataDirection    = UfsDataIn;\r
-  Packet.InDataBuffer     = DataBuffer;\r
-  Packet.InTransferLength = *DataBufferLength;\r
-  Packet.SenseData        = NULL;\r
-  Packet.SenseDataLength  = 0;\r
-\r
-  Status = UfsExecScsiCmds (Private,(UINT8)Lun, &Packet);\r
 \r
-  if (!EFI_ERROR (Status)) {\r
-    *DataBufferLength = Packet.InTransferLength;\r
-  }\r
-\r
-  return Status;\r
-}\r
 \r
 /**\r
   Execute TEST UNITY READY SCSI command on a specific UFS device.\r
@@ -231,62 +179,7 @@ UfsPeimTestUnitReady (
   return Status;\r
 }\r
 \r
-/**\r
-  Execute INQUIRY SCSI command on a specific UFS device.\r
 \r
-  @param[in]  Private              A pointer to UFS_PEIM_HC_PRIVATE_DATA data structure.\r
-  @param[in]  Lun                  The lun on which the SCSI cmd executed.\r
-  @param[out] Inquiry              A pointer to Inquiry data buffer.\r
-  @param[out] InquiryLengths       The length of output Inquiry data.\r
-  @param[out] SenseData            A pointer to output sense data.\r
-  @param[out] SenseDataLength      The length of output sense data.\r
-\r
-  @retval EFI_SUCCESS              The command executed successfully.\r
-  @retval EFI_DEVICE_ERROR         A device error occurred while attempting to send SCSI Request Packet.\r
-  @retval EFI_TIMEOUT              A timeout occurred while waiting for the SCSI Request Packet to execute.\r
-\r
-**/\r
-EFI_STATUS\r
-UfsPeimInquiry (\r
-  IN     UFS_PEIM_HC_PRIVATE_DATA     *Private,\r
-  IN     UINTN                        Lun,\r
-     OUT VOID                         *Inquiry,\r
-     OUT UINT32                       *InquiryLength,\r
-     OUT VOID                         *SenseData,  OPTIONAL\r
-     OUT UINT8                        *SenseDataLength\r
-  )\r
-{\r
-  UFS_SCSI_REQUEST_PACKET             Packet;\r
-  UINT8                               Cdb[UFS_SCSI_OP_LENGTH_SIX];\r
-  EFI_STATUS                          Status;\r
-\r
-  ZeroMem (&Packet, sizeof (UFS_SCSI_REQUEST_PACKET));\r
-  ZeroMem (Cdb, sizeof (Cdb));\r
-\r
-  Cdb[0]  = EFI_SCSI_OP_INQUIRY;\r
-  Cdb[4]  = sizeof (EFI_SCSI_INQUIRY_DATA);\r
-\r
-  Packet.Timeout          = UFS_TIMEOUT;\r
-  Packet.Cdb              = Cdb;\r
-  Packet.CdbLength        = sizeof (Cdb);\r
-  Packet.InDataBuffer     = Inquiry;\r
-  Packet.InTransferLength = *InquiryLength;\r
-  Packet.DataDirection    = UfsDataIn;\r
-  Packet.SenseData        = SenseData;\r
-  Packet.SenseDataLength  = *SenseDataLength;\r
-\r
-  Status = UfsExecScsiCmds (Private, (UINT8)Lun, &Packet);\r
-\r
-  if (*SenseDataLength != 0) {\r
-    *SenseDataLength = Packet.SenseDataLength;\r
-  }\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    *InquiryLength = Packet.InTransferLength;\r
-  }\r
-\r
-  return Status;\r
-}\r
 \r
 /**\r
   Execute READ CAPACITY(10) SCSI command on a specific UFS device.\r
@@ -688,15 +581,17 @@ UfsBlockIoPeimGetMediaInfo (
   EFI_SCSI_DISK_CAPACITY_DATA16      Capacity16;\r
   UINTN                              DataLength;\r
   BOOLEAN                            NeedRetry;\r
+  UINTN                              Lun;\r
 \r
   Private   = GET_UFS_PEIM_HC_PRIVATE_DATA_FROM_THIS (This);\r
   NeedRetry = TRUE;\r
 \r
-  if (DeviceIndex >= UFS_PEIM_MAX_LUNS) {\r
+  if ((DeviceIndex == 0) || (DeviceIndex > UFS_PEIM_MAX_LUNS)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if ((Private->Luns.BitMask & (BIT0 << DeviceIndex)) == 0) {\r
+  Lun = DeviceIndex - 1;\r
+  if ((Private->Luns.BitMask & (BIT0 << Lun)) == 0) {\r
     return EFI_ACCESS_DENIED;\r
   }\r
 \r
@@ -710,7 +605,7 @@ UfsBlockIoPeimGetMediaInfo (
   do {\r
     Status = UfsPeimTestUnitReady (\r
                Private,\r
-               DeviceIndex,\r
+               Lun,\r
                &SenseData,\r
                &SenseDataLength\r
                );\r
@@ -722,7 +617,7 @@ UfsBlockIoPeimGetMediaInfo (
       continue;\r
     }\r
 \r
-    Status = UfsPeimParsingSenseKeys (&(Private->Media[DeviceIndex]), &SenseData, &NeedRetry);\r
+    Status = UfsPeimParsingSenseKeys (&(Private->Media[Lun]), &SenseData, &NeedRetry);\r
     if (EFI_ERROR (Status)) {\r
       return EFI_DEVICE_ERROR;\r
     }\r
@@ -731,7 +626,7 @@ UfsBlockIoPeimGetMediaInfo (
 \r
   DataLength      = sizeof (EFI_SCSI_DISK_CAPACITY_DATA);\r
   SenseDataLength = 0;\r
-  Status = UfsPeimReadCapacity (Private, DeviceIndex, &Capacity, (UINT32 *)&DataLength, NULL, &SenseDataLength);\r
+  Status = UfsPeimReadCapacity (Private, Lun, &Capacity, (UINT32 *)&DataLength, NULL, &SenseDataLength);\r
   if (EFI_ERROR (Status)) {\r
     return EFI_DEVICE_ERROR;\r
   }\r
@@ -740,22 +635,22 @@ UfsBlockIoPeimGetMediaInfo (
       (Capacity.LastLba1 == 0xff) && (Capacity.LastLba0 == 0xff)) {\r
     DataLength      = sizeof (EFI_SCSI_DISK_CAPACITY_DATA16);\r
     SenseDataLength = 0;\r
-    Status = UfsPeimReadCapacity16 (Private, DeviceIndex, &Capacity16, (UINT32 *)&DataLength, NULL, &SenseDataLength);\r
+    Status = UfsPeimReadCapacity16 (Private, Lun, &Capacity16, (UINT32 *)&DataLength, NULL, &SenseDataLength);\r
     if (EFI_ERROR (Status)) {\r
       return EFI_DEVICE_ERROR;\r
     }\r
-    Private->Media[DeviceIndex].LastBlock  = ((UINT32)Capacity16.LastLba3 << 24) | (Capacity16.LastLba2 << 16) | (Capacity16.LastLba1 << 8) | Capacity16.LastLba0;\r
-    Private->Media[DeviceIndex].LastBlock |= LShiftU64 ((UINT64)Capacity16.LastLba7, 56) | LShiftU64((UINT64)Capacity16.LastLba6, 48) | LShiftU64 ((UINT64)Capacity16.LastLba5, 40) | LShiftU64 ((UINT64)Capacity16.LastLba4, 32);\r
-    Private->Media[DeviceIndex].BlockSize  = (Capacity16.BlockSize3 << 24) | (Capacity16.BlockSize2 << 16) | (Capacity16.BlockSize1 << 8) | Capacity16.BlockSize0;\r
+    Private->Media[Lun].LastBlock  = ((UINT32)Capacity16.LastLba3 << 24) | (Capacity16.LastLba2 << 16) | (Capacity16.LastLba1 << 8) | Capacity16.LastLba0;\r
+    Private->Media[Lun].LastBlock |= LShiftU64 ((UINT64)Capacity16.LastLba7, 56) | LShiftU64((UINT64)Capacity16.LastLba6, 48) | LShiftU64 ((UINT64)Capacity16.LastLba5, 40) | LShiftU64 ((UINT64)Capacity16.LastLba4, 32);\r
+    Private->Media[Lun].BlockSize  = (Capacity16.BlockSize3 << 24) | (Capacity16.BlockSize2 << 16) | (Capacity16.BlockSize1 << 8) | Capacity16.BlockSize0;\r
   } else {\r
-    Private->Media[DeviceIndex].LastBlock  = ((UINT32)Capacity.LastLba3 << 24) | (Capacity.LastLba2 << 16) | (Capacity.LastLba1 << 8) | Capacity.LastLba0;\r
-    Private->Media[DeviceIndex].BlockSize  = (Capacity.BlockSize3 << 24) | (Capacity.BlockSize2 << 16) | (Capacity.BlockSize1 << 8) | Capacity.BlockSize0;\r
+    Private->Media[Lun].LastBlock  = ((UINT32)Capacity.LastLba3 << 24) | (Capacity.LastLba2 << 16) | (Capacity.LastLba1 << 8) | Capacity.LastLba0;\r
+    Private->Media[Lun].BlockSize  = (Capacity.BlockSize3 << 24) | (Capacity.BlockSize2 << 16) | (Capacity.BlockSize1 << 8) | Capacity.BlockSize0;\r
   }\r
 \r
   MediaInfo->DeviceType   = UfsDevice;\r
-  MediaInfo->MediaPresent = Private->Media[DeviceIndex].MediaPresent;\r
-  MediaInfo->LastBlock    = (UINTN)Private->Media[DeviceIndex].LastBlock;\r
-  MediaInfo->BlockSize    = Private->Media[DeviceIndex].BlockSize;\r
+  MediaInfo->MediaPresent = Private->Media[Lun].MediaPresent;\r
+  MediaInfo->LastBlock    = (UINTN)Private->Media[Lun].LastBlock;\r
+  MediaInfo->BlockSize    = Private->Media[Lun].BlockSize;\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -812,6 +707,7 @@ UfsBlockIoPeimReadBlocks (
   EFI_SCSI_SENSE_DATA                SenseData;\r
   UINT8                              SenseDataLength;\r
   BOOLEAN                            NeedRetry;\r
+  UINTN                              Lun;\r
 \r
   Status    = EFI_SUCCESS;\r
   NeedRetry = TRUE;\r
@@ -831,21 +727,22 @@ UfsBlockIoPeimReadBlocks (
     return EFI_SUCCESS;\r
   }\r
 \r
-  if (DeviceIndex >= UFS_PEIM_MAX_LUNS) {\r
+  if ((DeviceIndex == 0) || (DeviceIndex > UFS_PEIM_MAX_LUNS)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  if ((Private->Luns.BitMask & (BIT0 << DeviceIndex)) == 0) {\r
+  Lun = DeviceIndex - 1;\r
+  if ((Private->Luns.BitMask & (BIT0 << Lun)) == 0) {\r
     return EFI_ACCESS_DENIED;\r
   }\r
 \r
-  BlockSize = Private->Media[DeviceIndex].BlockSize;\r
+  BlockSize = Private->Media[Lun].BlockSize;\r
 \r
   if (BufferSize % BlockSize != 0) {\r
     Status = EFI_BAD_BUFFER_SIZE;\r
   }\r
 \r
-  if (StartLBA > Private->Media[DeviceIndex].LastBlock) {\r
+  if (StartLBA > Private->Media[Lun].LastBlock) {\r
     Status = EFI_INVALID_PARAMETER;\r
   }\r
 \r
@@ -854,7 +751,7 @@ UfsBlockIoPeimReadBlocks (
   do {\r
     Status = UfsPeimTestUnitReady (\r
                Private,\r
-               DeviceIndex,\r
+               Lun,\r
                &SenseData,\r
                &SenseDataLength\r
                );\r
@@ -866,7 +763,7 @@ UfsBlockIoPeimReadBlocks (
       continue;\r
     }\r
 \r
-    Status = UfsPeimParsingSenseKeys (&(Private->Media[DeviceIndex]), &SenseData, &NeedRetry);\r
+    Status = UfsPeimParsingSenseKeys (&(Private->Media[Lun]), &SenseData, &NeedRetry);\r
     if (EFI_ERROR (Status)) {\r
       return EFI_DEVICE_ERROR;\r
     }\r
@@ -874,10 +771,10 @@ UfsBlockIoPeimReadBlocks (
   } while (NeedRetry);\r
 \r
   SenseDataLength = 0;\r
-  if (Private->Media[DeviceIndex].LastBlock < 0xfffffffful) {\r
+  if (Private->Media[Lun].LastBlock < 0xfffffffful) {\r
     Status = UfsPeimRead10 (\r
                Private,\r
-               DeviceIndex,\r
+               Lun,\r
                (UINT32)StartLBA,\r
                (UINT32)NumberOfBlocks,\r
                Buffer,\r
@@ -888,7 +785,7 @@ UfsBlockIoPeimReadBlocks (
   } else {\r
     Status = UfsPeimRead16 (\r
                Private,\r
-               DeviceIndex,\r
+               Lun,\r
                (UINT32)StartLBA,\r
                (UINT32)NumberOfBlocks,\r
                Buffer,\r
@@ -989,6 +886,7 @@ UfsBlockIoPeimGetMediaInfo2 (
   EFI_STATUS                         Status;\r
   UFS_PEIM_HC_PRIVATE_DATA           *Private;\r
   EFI_PEI_BLOCK_IO_MEDIA             Media;\r
+  UINTN                              Lun;\r
 \r
   Private   = GET_UFS_PEIM_HC_PRIVATE_DATA_FROM_THIS2 (This);\r
 \r
@@ -1002,7 +900,8 @@ UfsBlockIoPeimGetMediaInfo2 (
     return Status;\r
   }\r
 \r
-  CopyMem (MediaInfo, &(Private->Media[DeviceIndex]), sizeof (EFI_PEI_BLOCK_IO2_MEDIA));\r
+  Lun = DeviceIndex - 1;\r
+  CopyMem (MediaInfo, &(Private->Media[Lun]), sizeof (EFI_PEI_BLOCK_IO2_MEDIA));\r
   return EFI_SUCCESS;\r
 }\r
 \r