/** @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
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
do {\r
Status = UfsPeimTestUnitReady (\r
Private,\r
- DeviceIndex,\r
+ Lun,\r
&SenseData,\r
&SenseDataLength\r
);\r
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
\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
(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
EFI_SCSI_SENSE_DATA SenseData;\r
UINT8 SenseDataLength;\r
BOOLEAN NeedRetry;\r
+ UINTN Lun;\r
\r
Status = EFI_SUCCESS;\r
NeedRetry = TRUE;\r
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
do {\r
Status = UfsPeimTestUnitReady (\r
Private,\r
- DeviceIndex,\r
+ Lun,\r
&SenseData,\r
&SenseDataLength\r
);\r
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
} 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
} else {\r
Status = UfsPeimRead16 (\r
Private,\r
- DeviceIndex,\r
+ Lun,\r
(UINT32)StartLBA,\r
(UINT32)NumberOfBlocks,\r
Buffer,\r
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
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