From nobody Fri Dec 27 18:45:09 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 1499231133107284.9178687746447; Tue, 4 Jul 2017 22:05:33 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 70A3B21A00AF6; 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 E84712095A6B3 for ; Tue, 4 Jul 2017 22:03:48 -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:27 -0700 Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by FMSMGA003.fm.intel.com with ESMTP; 04 Jul 2017 22:05:26 -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="874845468" From: Hao Wu To: edk2-devel@lists.01.org Date: Wed, 5 Jul 2017 13:05:22 +0800 Message-Id: <20170705050524.24328-2-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 1/3] MdePkg/DiskInfo.h: Add the SD/MMC interface GUID definition 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 , Michael D Kinney , Liming Gao , 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" Add the SD/MMC interface GUID definition per PI 1.6 spec. Cc: Ruiyu Ni Cc: Star Zeng Cc: Michael D Kinney Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu Reviewed-by: Star Zeng to the patch series. --- MdePkg/Include/Protocol/DiskInfo.h | 13 +++++++++++-- MdePkg/MdePkg.dec | 6 ++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/MdePkg/Include/Protocol/DiskInfo.h b/MdePkg/Include/Protocol/D= iskInfo.h index a094bc8251..09fe34ada6 100644 --- a/MdePkg/Include/Protocol/DiskInfo.h +++ b/MdePkg/Include/Protocol/DiskInfo.h @@ -2,7 +2,7 @@ Provides the basic interfaces to abstract platform information regarding= an=20 IDE controller. =20 =20 - Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 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 @@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMP= LIED. =20 @par Revision Reference: - This Protocol is defined in UEFI Platform Initialization Specification 1= .2=20 + This Protocol is defined in UEFI Platform Initialization Specification 1= .6 Volume 5: Standards =20 **/ @@ -81,6 +81,14 @@ typedef struct _EFI_DISK_INFO_PROTOCOL EFI_DISK_INFO_PR= OTOCOL; 0x4b3029cc, 0x6b98, 0x47fb, { 0xbc, 0x96, 0x76, 0xdc, 0xb8, 0x4, 0x41,= 0xf0 } \ } =20 +/// +/// Global ID for an SD/MMC interface. Used to fill in EFI_DISK_INFO_PROT= OCOL.Interface +/// +#define EFI_DISK_INFO_SD_MMC_INTERFACE_GUID \ + { \ + 0x8deec992, 0xd39c, 0x4a5c, { 0xab, 0x6b, 0x98, 0x6e, 0x14, 0x24, 0x2b= , 0x9d } \ + } + /** Provides inquiry information for the controller type. =20 @@ -214,5 +222,6 @@ extern EFI_GUID gEfiDiskInfoUsbInterfaceGuid; extern EFI_GUID gEfiDiskInfoAhciInterfaceGuid; extern EFI_GUID gEfiDiskInfoNvmeInterfaceGuid; extern EFI_GUID gEfiDiskInfoUfsInterfaceGuid; +extern EFI_GUID gEfiDiskInfoSdMmcInterfaceGuid; =20 #endif diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 2bdfebf36f..0bdf221687 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -746,6 +746,12 @@ gEfiGraphicsDeviceInfoHobGuid =3D { 0xe5cb2ac9, 0xd35d, 0x4430, { 0x= 93, 0x6e, 0x1d, 0xe3, 0x32, 0x47, 0x8d, 0xe7 }} =20 # + # GUID defined in PI1.6 + # + ## Include/Guid/DiskInfo.h + gEfiDiskInfoSdMmcInterfaceGuid =3D { 0x8deec992, 0xd39c, 0x4a5c, { 0xab= , 0x6b, 0x98, 0x6e, 0x14, 0x24, 0x2b, 0x9d }} + + # # GUID defined in Windows UEFI Firmware Update Platform doc # ## Include/IndustryStandard/WindowsUxCapsule.h --=20 2.12.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel From nobody Fri Dec 27 18:45:09 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 Reviewed-by: Star Zeng to the patch series. --- 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 From nobody Fri Dec 27 18:45:09 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 1499231138711351.42927430884765; Tue, 4 Jul 2017 22:05:38 -0700 (PDT) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 13B2A2095A6DD; Tue, 4 Jul 2017 22:03:53 -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 8A3082095A6BF for ; Tue, 4 Jul 2017 22:03:51 -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:30 -0700 Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by FMSMGA003.fm.intel.com with ESMTP; 04 Jul 2017 22:05:29 -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="874845479" From: Hao Wu To: edk2-devel@lists.01.org Date: Wed, 5 Jul 2017 13:05:24 +0800 Message-Id: <20170705050524.24328-4-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 3/3] MdeModulePkg/EmmcDxe: 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 EMMC devices per PI 1.6 spec. Cc: Ruiyu Ni Cc: Star Zeng Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu Reviewed-by: Star Zeng to the patch series. --- MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.c | 140 +++++++++++++++++++++++++= ++++ MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.h | 115 ++++++++++++++++++++++++ MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.c | 15 +++- MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.h | 9 +- MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf | 5 +- 5 files changed, 281 insertions(+), 3 deletions(-) create mode 100644 MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.c create mode 100644 MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.h diff --git a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.c b/MdeModulePkg/Bus/= Sd/EmmcDxe/EmmcDiskInfo.c new file mode 100644 index 0000000000..85c7ac6c2e --- /dev/null +++ b/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.c @@ -0,0 +1,140 @@ +/** @file + Implement the EFI_DISK_INFO_PROTOCOL interface on EMMC 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 "EmmcDxe.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 +EmmcDiskInfoInquiry ( + IN EFI_DISK_INFO_PROTOCOL *This, + IN OUT VOID *InquiryData, + IN OUT UINT32 *InquiryDataSize + ) +{ + EFI_STATUS Status; + EMMC_PARTITION *Partition; + EMMC_DEVICE *Device; + + Partition =3D EMMC_PARTITION_DATA_FROM_DISKINFO (This); + Device =3D Partition->Device; + + 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 +EmmcDiskInfoIdentify ( + 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 +EmmcDiskInfoSenseData ( + 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 +EmmcDiskInfoWhichIde ( + IN EFI_DISK_INFO_PROTOCOL *This, + OUT UINT32 *IdeChannel, + OUT UINT32 *IdeDevice + ) +{ + return EFI_UNSUPPORTED; +} diff --git a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.h b/MdeModulePkg/Bus/= Sd/EmmcDxe/EmmcDiskInfo.h new file mode 100644 index 0000000000..4d3e6916d5 --- /dev/null +++ b/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDiskInfo.h @@ -0,0 +1,115 @@ +/** @file + Header file for EFI_DISK_INFO_PROTOCOL interface on EMMC 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. + +**/ + +#ifndef _EMMC_DISKINFO_H_ +#define _EMMC_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 +EmmcDiskInfoInquiry ( + 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 +EmmcDiskInfoIdentify ( + 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 +EmmcDiskInfoSenseData ( + 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 +EmmcDiskInfoWhichIde ( + IN EFI_DISK_INFO_PROTOCOL *This, + OUT UINT32 *IdeChannel, + OUT UINT32 *IdeDevice + ); + +#endif diff --git a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.c b/MdeModulePkg/Bus/Sd/Em= mcDxe/EmmcDxe.c index 5040882d62..4ebced0b94 100644 --- a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.c +++ b/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.c @@ -4,7 +4,7 @@ It produces BlockIo, BlockIo2 and StorageSecurity protocols to allow upp= er layer access the EMMC 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 @@ -73,6 +73,13 @@ EMMC_PARTITION mEmmcPartitionTemplate =3D { 1, EmmcEraseBlocks }, + { // DiskInfo + EFI_DISK_INFO_SD_MMC_INTERFACE_GUID, + EmmcDiskInfoInquiry, + EmmcDiskInfoIdentify, + EmmcDiskInfoSenseData, + EmmcDiskInfoWhichIde + }, { NULL, NULL @@ -454,6 +461,8 @@ InstallProtocolOnPartition ( &Partition->BlockIo2, &gEfiEraseBlockProtocolGuid, &Partition->EraseBlock, + &gEfiDiskInfoProtocolGuid, + &Partition->DiskInfo, NULL ); if (EFI_ERROR (Status)) { @@ -481,6 +490,8 @@ InstallProtocolOnPartition ( &Partition->BlockIo2, &gEfiEraseBlockProtocolGuid, &Partition->EraseBlock, + &gEfiDiskInfoProtocolGuid, + &Partition->DiskInfo, NULL ); goto Error; @@ -1104,6 +1115,8 @@ EmmcDxeDriverBindingStop ( &Partition->BlockIo2, &gEfiEraseBlockProtocolGuid, &Partition->EraseBlock, + &gEfiDiskInfoProtocolGuid, + &Partition->DiskInfo, NULL ); if (EFI_ERROR (Status)) { diff --git a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.h b/MdeModulePkg/Bus/Sd/Em= mcDxe/EmmcDxe.h index 0ae4eccac6..abdffbb50b 100644 --- a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.h +++ b/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.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 @@ -26,6 +26,7 @@ #include #include #include +#include =20 #include =20 @@ -40,6 +41,8 @@ #include =20 #include "EmmcBlockIo.h" +#include "EmmcDiskInfo.h" + // // Global Variables // @@ -61,6 +64,9 @@ extern EFI_COMPONENT_NAME2_PROTOCOL gEmmcDxeComponent= Name2; #define EMMC_PARTITION_DATA_FROM_ERASEBLK(a) \ CR(a, EMMC_PARTITION, EraseBlock, EMMC_PARTITION_SIGNATURE) =20 +#define EMMC_PARTITION_DATA_FROM_DISKINFO(a) \ + CR(a, EMMC_PARTITION, DiskInfo, EMMC_PARTITION_SIGNATURE) + // // Take 2.5 seconds as generic time out value, 1 microsecond as unit. // @@ -102,6 +108,7 @@ typedef struct { EFI_BLOCK_IO_MEDIA BlockMedia; EFI_STORAGE_SECURITY_COMMAND_PROTOCOL StorageSecurity; EFI_ERASE_BLOCK_PROTOCOL EraseBlock; + EFI_DISK_INFO_PROTOCOL DiskInfo; =20 LIST_ENTRY Queue; =20 diff --git a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf b/MdeModulePkg/Bus/Sd/= EmmcDxe/EmmcDxe.inf index 7b0504937a..3f27bdbcaf 100644 --- a/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf +++ b/MdeModulePkg/Bus/Sd/EmmcDxe/EmmcDxe.inf @@ -4,7 +4,7 @@ # It produces BlockIo, BlockIo2 and StorageSecurity protocols to allow up= per layer # access the EMMC 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 @@ EmmcDxe.h EmmcBlockIo.c EmmcBlockIo.h + EmmcDiskInfo.c + EmmcDiskInfo.h =20 [Packages] MdePkg/MdePkg.dec @@ -61,6 +63,7 @@ gEfiBlockIo2ProtocolGuid ## BY_START gEfiStorageSecurityCommandProtocolGuid ## SOMETIMES_PRODUCES 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