From nobody Sat Dec 28 09:51:25 2024 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1499231135658149.68581160575502; Tue, 4 Jul 2017 22:05:35 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id C30082095A6C9; Tue, 4 Jul 2017 22:03:51 -0700 (PDT) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 205F9209455E0 for ; Tue, 4 Jul 2017 22:03:50 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 Jul 2017 22:05:29 -0700 Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by FMSMGA003.fm.intel.com with ESMTP; 04 Jul 2017 22:05:28 -0700 X-Original-To: edk2-devel@lists.01.org X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.40,310,1496127600"; d="scan'208";a="874845476" From: Hao Wu To: edk2-devel@lists.01.org Date: Wed, 5 Jul 2017 13:05:23 +0800 Message-Id: <20170705050524.24328-3-hao.a.wu@intel.com> X-Mailer: git-send-email 2.12.0.windows.1 In-Reply-To: <20170705050524.24328-1-hao.a.wu@intel.com> References: <20170705050524.24328-1-hao.a.wu@intel.com> Subject: [edk2] [PATCH 2/3] MdeModulePkg/SdDxe: Implementation of Disk Information Protocol X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Hao Wu , Ruiyu Ni , Star Zeng MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Adds the implementation of Disk Information Protocol for SD devices per PI 1.6 spec. Cc: Ruiyu Ni Cc: Star Zeng Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu --- MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.c | 138 +++++++++++++++++++++++++++++= ++++ MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.h | 115 +++++++++++++++++++++++++++ MdeModulePkg/Bus/Sd/SdDxe/SdDxe.c | 13 +++- MdeModulePkg/Bus/Sd/SdDxe/SdDxe.h | 9 ++- MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf | 5 +- 5 files changed, 277 insertions(+), 3 deletions(-) create mode 100644 MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.c create mode 100644 MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.h diff --git a/MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.c b/MdeModulePkg/Bus/Sd/S= dDxe/SdDiskInfo.c new file mode 100644 index 0000000000..a98dc75d3f --- /dev/null +++ b/MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.c @@ -0,0 +1,138 @@ +/** @file + Implement the EFI_DISK_INFO_PROTOCOL interface on SD memory card devices. + + Copyright (c) 2017, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ + +#include "SdDxe.h" + +/** + Provides inquiry information for the controller type. + + This function is used by the driver entity to get inquiry data. Data for= mat of + Identify data is defined by the Interface GUID. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL i= nstance. + @param[in,out] InquiryData Pointer to a buffer for the inquiry dat= a. + @param[in,out] InquiryDataSize Pointer to the value for the inquiry da= ta size. + + @retval EFI_SUCCESS The command was accepted without any erro= rs. + @retval EFI_NOT_FOUND Device does not support this data class. + @retval EFI_DEVICE_ERROR Error reading InquiryData from device. + @retval EFI_BUFFER_TOO_SMALL InquiryDataSize not big enough. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoInquiry ( + IN EFI_DISK_INFO_PROTOCOL *This, + IN OUT VOID *InquiryData, + IN OUT UINT32 *InquiryDataSize + ) +{ + EFI_STATUS Status; + SD_DEVICE *Device; + + Device =3D SD_DEVICE_DATA_FROM_DISKINFO (This); + + if (*InquiryDataSize >=3D sizeof (Device->Cid)) { + Status =3D EFI_SUCCESS; + CopyMem (InquiryData, &Device->Cid, sizeof (Device->Cid)); + } else { + Status =3D EFI_BUFFER_TOO_SMALL; + } + + *InquiryDataSize =3D sizeof (Device->Cid); + + return Status; +} + +/** + Provides identify information for the controller type. + + This function is used by the driver entity to get identify data. Data fo= rmat + of Identify data is defined by the Interface GUID. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL + instance. + @param[in,out] IdentifyData Pointer to a buffer for the identify d= ata. + @param[in,out] IdentifyDataSize Pointer to the value for the identify = data + size. + + @retval EFI_SUCCESS The command was accepted without any erro= rs. + @retval EFI_NOT_FOUND Device does not support this data class. + @retval EFI_DEVICE_ERROR Error reading IdentifyData from device. + @retval EFI_BUFFER_TOO_SMALL IdentifyDataSize not big enough. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoIdentify ( + IN EFI_DISK_INFO_PROTOCOL *This, + IN OUT VOID *IdentifyData, + IN OUT UINT32 *IdentifyDataSize + ) +{ + return EFI_NOT_FOUND; +} + +/** + Provides sense data information for the controller type. + + This function is used by the driver entity to get sense data. Data forma= t of + Sense data is defined by the Interface GUID. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL i= nstance. + @param[in,out] SenseData Pointer to the SenseData. + @param[in,out] SenseDataSize Size of SenseData in bytes. + @param[out] SenseDataNumber Pointer to the value for the sense data= size. + + @retval EFI_SUCCESS The command was accepted without any erro= rs. + @retval EFI_NOT_FOUND Device does not support this data class. + @retval EFI_DEVICE_ERROR Error reading SenseData from device. + @retval EFI_BUFFER_TOO_SMALL SenseDataSize not big enough. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoSenseData ( + IN EFI_DISK_INFO_PROTOCOL *This, + IN OUT VOID *SenseData, + IN OUT UINT32 *SenseDataSize, + OUT UINT8 *SenseDataNumber + ) +{ + return EFI_NOT_FOUND; +} + +/** + Provides IDE channel and device information for the interface. + + This function is used by the driver entity to get controller information. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL instance. + @param[out] IdeChannel Pointer to the Ide Channel number. Primary or = secondary. + @param[out] IdeDevice Pointer to the Ide Device number. Master or sl= ave. + + @retval EFI_SUCCESS IdeChannel and IdeDevice are valid. + @retval EFI_UNSUPPORTED This is not an IDE device. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoWhichIde ( + IN EFI_DISK_INFO_PROTOCOL *This, + OUT UINT32 *IdeChannel, + OUT UINT32 *IdeDevice + ) +{ + return EFI_UNSUPPORTED; +} diff --git a/MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.h b/MdeModulePkg/Bus/Sd/S= dDxe/SdDiskInfo.h new file mode 100644 index 0000000000..cc7a359177 --- /dev/null +++ b/MdeModulePkg/Bus/Sd/SdDxe/SdDiskInfo.h @@ -0,0 +1,115 @@ +/** @file + Header file for EFI_DISK_INFO_PROTOCOL interface on SD memory card devic= es. + + Copyright (c) 2017, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BS= D License + which accompanies this distribution. The full text of the license may b= e found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. + +**/ + +#ifndef _SD_DISKINFO_H_ +#define _SD_DISKINFO_H_ + +/** + Provides inquiry information for the controller type. + + This function is used by the driver entity to get inquiry data. Data for= mat of + Identify data is defined by the Interface GUID. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL i= nstance. + @param[in,out] InquiryData Pointer to a buffer for the inquiry dat= a. + @param[in,out] InquiryDataSize Pointer to the value for the inquiry da= ta size. + + @retval EFI_SUCCESS The command was accepted without any erro= rs. + @retval EFI_NOT_FOUND Device does not support this data class. + @retval EFI_DEVICE_ERROR Error reading InquiryData from device. + @retval EFI_BUFFER_TOO_SMALL InquiryDataSize not big enough. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoInquiry ( + IN EFI_DISK_INFO_PROTOCOL *This, + IN OUT VOID *InquiryData, + IN OUT UINT32 *InquiryDataSize + ); + +/** + Provides identify information for the controller type. + + This function is used by the driver entity to get identify data. Data fo= rmat + of Identify data is defined by the Interface GUID. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL + instance. + @param[in,out] IdentifyData Pointer to a buffer for the identify d= ata. + @param[in,out] IdentifyDataSize Pointer to the value for the identify = data + size. + + @retval EFI_SUCCESS The command was accepted without any erro= rs. + @retval EFI_NOT_FOUND Device does not support this data class. + @retval EFI_DEVICE_ERROR Error reading IdentifyData from device. + @retval EFI_BUFFER_TOO_SMALL IdentifyDataSize not big enough. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoIdentify ( + IN EFI_DISK_INFO_PROTOCOL *This, + IN OUT VOID *IdentifyData, + IN OUT UINT32 *IdentifyDataSize + ); + +/** + Provides sense data information for the controller type. + + This function is used by the driver entity to get sense data. Data forma= t of + Sense data is defined by the Interface GUID. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL i= nstance. + @param[in,out] SenseData Pointer to the SenseData. + @param[in,out] SenseDataSize Size of SenseData in bytes. + @param[out] SenseDataNumber Pointer to the value for the sense data= size. + + @retval EFI_SUCCESS The command was accepted without any erro= rs. + @retval EFI_NOT_FOUND Device does not support this data class. + @retval EFI_DEVICE_ERROR Error reading SenseData from device. + @retval EFI_BUFFER_TOO_SMALL SenseDataSize not big enough. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoSenseData ( + IN EFI_DISK_INFO_PROTOCOL *This, + IN OUT VOID *SenseData, + IN OUT UINT32 *SenseDataSize, + OUT UINT8 *SenseDataNumber + ); + +/** + Provides IDE channel and device information for the interface. + + This function is used by the driver entity to get controller information. + + @param[in] This Pointer to the EFI_DISK_INFO_PROTOCOL instance. + @param[out] IdeChannel Pointer to the Ide Channel number. Primary or = secondary. + @param[out] IdeDevice Pointer to the Ide Device number. Master or sl= ave. + + @retval EFI_SUCCESS IdeChannel and IdeDevice are valid. + @retval EFI_UNSUPPORTED This is not an IDE device. + +**/ +EFI_STATUS +EFIAPI +SdDiskInfoWhichIde ( + IN EFI_DISK_INFO_PROTOCOL *This, + OUT UINT32 *IdeChannel, + OUT UINT32 *IdeDevice + ); + +#endif diff --git a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.c b/MdeModulePkg/Bus/Sd/SdDxe/= SdDxe.c index 0cf9067701..fc060fdb34 100644 --- a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.c +++ b/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.c @@ -4,7 +4,7 @@ It produces BlockIo and BlockIo2 protocols to allow upper layer access the SD memory card device. =20 - Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BS= D License which accompanies this distribution. The full text of the license may b= e found at @@ -69,6 +69,13 @@ SD_DEVICE mSdDeviceTemplate =3D { 1, SdEraseBlocks }, + { // DiskInfo + EFI_DISK_INFO_SD_MMC_INTERFACE_GUID, + SdDiskInfoInquiry, + SdDiskInfoIdentify, + SdDiskInfoSenseData, + SdDiskInfoWhichIde + }, { // Queue NULL, NULL @@ -382,6 +389,8 @@ DiscoverSdDevice ( &Device->BlockIo2, &gEfiEraseBlockProtocolGuid, &Device->EraseBlock, + &gEfiDiskInfoProtocolGuid, + &Device->DiskInfo, NULL ); =20 @@ -840,6 +849,8 @@ SdDxeDriverBindingStop ( &Device->BlockIo2, &gEfiEraseBlockProtocolGuid, &Device->EraseBlock, + &gEfiDiskInfoProtocolGuid, + &Device->DiskInfo, NULL ); if (EFI_ERROR (Status)) { diff --git a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.h b/MdeModulePkg/Bus/Sd/SdDxe/= SdDxe.h index 0ba72b7f9c..63df7b74e4 100644 --- a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.h +++ b/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.h @@ -4,7 +4,7 @@ This file defines common data structures, macro definitions and some mod= ule internal function header files. =20 - Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BS= D License which accompanies this distribution. The full text of the license may b= e found at @@ -25,6 +25,7 @@ #include #include #include +#include =20 #include =20 @@ -39,6 +40,8 @@ #include =20 #include "SdBlockIo.h" +#include "SdDiskInfo.h" + // // Global Variables // @@ -57,6 +60,9 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gSdDxeComponentNa= me2; #define SD_DEVICE_DATA_FROM_ERASEBLK(a) \ CR(a, SD_DEVICE, EraseBlock, SD_DEVICE_SIGNATURE) =20 +#define SD_DEVICE_DATA_FROM_DISKINFO(a) \ + CR(a, SD_DEVICE, DiskInfo, SD_DEVICE_SIGNATURE) + // // Take 2.5 seconds as generic time out value, 1 microsecond as unit. // @@ -100,6 +106,7 @@ struct _SD_DEVICE { EFI_BLOCK_IO2_PROTOCOL BlockIo2; EFI_BLOCK_IO_MEDIA BlockMedia; EFI_ERASE_BLOCK_PROTOCOL EraseBlock; + EFI_DISK_INFO_PROTOCOL DiskInfo; =20 LIST_ENTRY Queue; =20 diff --git a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf b/MdeModulePkg/Bus/Sd/SdDx= e/SdDxe.inf index 6f5e6ca72e..a763314275 100644 --- a/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf +++ b/MdeModulePkg/Bus/Sd/SdDxe/SdDxe.inf @@ -4,7 +4,7 @@ # It produces BlockIo and BlockIo2 protocols to allow upper layer # access the SD memory card device. # -# Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the B= SD License @@ -41,6 +41,8 @@ SdDxe.h SdBlockIo.c SdBlockIo.h + SdDiskInfo.c + SdDiskInfo.h =20 [Packages] MdePkg/MdePkg.dec @@ -60,6 +62,7 @@ gEfiBlockIoProtocolGuid ## BY_START gEfiBlockIo2ProtocolGuid ## BY_START gEfiEraseBlockProtocolGuid ## BY_START + gEfiDiskInfoProtocolGuid ## BY_START ## TO_START ## BY_START gEfiDevicePathProtocolGuid --=20 2.12.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel