Re: [edk2] [PATCH 2/3] MdeModulePkg/FrameBufferBltLib: Use dynamic allocated line buffer

2017-01-23 Thread Tian, Feng
Reviewed-by: Feng Tian 

Thanks
Feng

-Original Message-
From: Ni, Ruiyu 
Sent: Monday, January 23, 2017 2:12 PM
To: edk2-devel@lists.01.org
Cc: Tian, Feng 
Subject: [PATCH 2/3] MdeModulePkg/FrameBufferBltLib: Use dynamic allocated line 
buffer

https://bugzilla.tianocore.org/show_bug.cgi?id=339

The patch uses dynamic allocated line buffer to reduce memory usage of frame 
buffer configure. (Original implementation uses 0x4000 bytes for line buffer.)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni 
Cc: Feng Tian 
---
 .../Library/FrameBufferBltLib/FrameBufferBltLib.c  | 24 +++---
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c 
b/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
index 5f6eddc..011d9c5 100644
--- a/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
+++ b/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
@@ -26,12 +26,12 @@ struct FRAME_BUFFER_CONFIGURE {
   UINTN   BytesPerPixel;
   UINTN   WidthInPixels;
   UINTN   Height;
-  UINT8   LineBuffer[SIZE_4KB * sizeof 
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)];
   UINT8   *FrameBuffer;
   EFI_GRAPHICS_PIXEL_FORMAT   PixelFormat;
   EFI_PIXEL_BITMASK   PixelMasks;
   INT8PixelShl[4]; // R-G-B-Rsvd
   INT8PixelShr[4]; // R-G-B-Rsvd
+  UINT8   LineBuffer[0];
 };
 
 CONST EFI_PIXEL_BITMASK mRgbPixelMasks = { @@ -123,15 +123,6 @@ 
FrameBufferBltConfigure (
 return RETURN_INVALID_PARAMETER;
   }
 
-  if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)) {
-*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE);
-return RETURN_BUFFER_TOO_SMALL;
-  }
-
-  if (Configure == NULL) {
-return RETURN_INVALID_PARAMETER;
-  }
-
   switch (FrameBufferInfo->PixelFormat) {
   case PixelRedGreenBlueReserved8BitPerColor:
 BitMask = 
@@ -156,6 +147,17 @@ FrameBufferBltConfigure (
 
   FrameBufferBltLibConfigurePixelFormat (BitMask, , PixelShl, 
PixelShr);
 
+  if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)
+ + FrameBufferInfo->HorizontalResolution * BytesPerPixel) {
+*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE)
+   + FrameBufferInfo->HorizontalResolution * BytesPerPixel;
+return RETURN_BUFFER_TOO_SMALL;
+  }
+
+  if (Configure == NULL) {
+return RETURN_INVALID_PARAMETER;
+  }
+
   CopyMem (>PixelMasks, BitMask,  sizeof (*BitMask));
   CopyMem (Configure->PixelShl,PixelShl, sizeof (PixelShl));
   CopyMem (Configure->PixelShr,PixelShr, sizeof (PixelShr));
@@ -166,8 +168,6 @@ FrameBufferBltConfigure (
   Configure->Height= (UINTN) FrameBufferInfo->VerticalResolution;
   Configure->WidthInBytes  = Configure->WidthInPixels * 
Configure->BytesPerPixel;
 
-  ASSERT (Configure->WidthInBytes < sizeof (Configure->LineBuffer));
-
   return RETURN_SUCCESS;
 }
 
--
2.9.0.windows.1

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


[edk2] [PATCH 2/3] MdeModulePkg/FrameBufferBltLib: Use dynamic allocated line buffer

2017-01-22 Thread Ruiyu Ni
https://bugzilla.tianocore.org/show_bug.cgi?id=339

The patch uses dynamic allocated line buffer to reduce memory usage
of frame buffer configure. (Original implementation uses 0x4000
bytes for line buffer.)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni 
Cc: Feng Tian 
---
 .../Library/FrameBufferBltLib/FrameBufferBltLib.c  | 24 +++---
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c 
b/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
index 5f6eddc..011d9c5 100644
--- a/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
+++ b/MdeModulePkg/Library/FrameBufferBltLib/FrameBufferBltLib.c
@@ -26,12 +26,12 @@ struct FRAME_BUFFER_CONFIGURE {
   UINTN   BytesPerPixel;
   UINTN   WidthInPixels;
   UINTN   Height;
-  UINT8   LineBuffer[SIZE_4KB * sizeof 
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)];
   UINT8   *FrameBuffer;
   EFI_GRAPHICS_PIXEL_FORMAT   PixelFormat;
   EFI_PIXEL_BITMASK   PixelMasks;
   INT8PixelShl[4]; // R-G-B-Rsvd
   INT8PixelShr[4]; // R-G-B-Rsvd
+  UINT8   LineBuffer[0];
 };
 
 CONST EFI_PIXEL_BITMASK mRgbPixelMasks = {
@@ -123,15 +123,6 @@ FrameBufferBltConfigure (
 return RETURN_INVALID_PARAMETER;
   }
 
-  if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)) {
-*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE);
-return RETURN_BUFFER_TOO_SMALL;
-  }
-
-  if (Configure == NULL) {
-return RETURN_INVALID_PARAMETER;
-  }
-
   switch (FrameBufferInfo->PixelFormat) {
   case PixelRedGreenBlueReserved8BitPerColor:
 BitMask = 
@@ -156,6 +147,17 @@ FrameBufferBltConfigure (
 
   FrameBufferBltLibConfigurePixelFormat (BitMask, , PixelShl, 
PixelShr);
 
+  if (*ConfigureSize < sizeof (FRAME_BUFFER_CONFIGURE)
+ + FrameBufferInfo->HorizontalResolution * BytesPerPixel) {
+*ConfigureSize = sizeof (FRAME_BUFFER_CONFIGURE)
+   + FrameBufferInfo->HorizontalResolution * BytesPerPixel;
+return RETURN_BUFFER_TOO_SMALL;
+  }
+
+  if (Configure == NULL) {
+return RETURN_INVALID_PARAMETER;
+  }
+
   CopyMem (>PixelMasks, BitMask,  sizeof (*BitMask));
   CopyMem (Configure->PixelShl,PixelShl, sizeof (PixelShl));
   CopyMem (Configure->PixelShr,PixelShr, sizeof (PixelShr));
@@ -166,8 +168,6 @@ FrameBufferBltConfigure (
   Configure->Height= (UINTN) FrameBufferInfo->VerticalResolution;
   Configure->WidthInBytes  = Configure->WidthInPixels * 
Configure->BytesPerPixel;
 
-  ASSERT (Configure->WidthInBytes < sizeof (Configure->LineBuffer));
-
   return RETURN_SUCCESS;
 }
 
-- 
2.9.0.windows.1

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel