summaryrefslogtreecommitdiff
path: root/AppPkg/Applications/Sockets/WebServer/MemoryMap.c
diff options
context:
space:
mode:
authorlpleahy <lpleahy@6f19259b-4bc3-4df7-8a09-765794883524>2012-03-20 22:16:42 +0000
committerlpleahy <lpleahy@6f19259b-4bc3-4df7-8a09-765794883524>2012-03-20 22:16:42 +0000
commit9f7f5161cf2f6c1e29f4f11ff2a70454b223431a (patch)
treeee5c7728e1d816334309e1ca4207f64c58e38c97 /AppPkg/Applications/Sockets/WebServer/MemoryMap.c
parent0dac421231425c8a035b3398d2ccf8c6c2710e03 (diff)
downloadedk2-platforms-9f7f5161cf2f6c1e29f4f11ff2a70454b223431a.tar.xz
Update the license dates
Use the BSD license Fix errors detected by GCC compiler in WebServer/ConfigurationTable.c Add libraries: CpuLib, DxeServicesTableLib and MtrrLib Signed-off-by: lpleahy git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13115 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'AppPkg/Applications/Sockets/WebServer/MemoryMap.c')
-rw-r--r--AppPkg/Applications/Sockets/WebServer/MemoryMap.c364
1 files changed, 364 insertions, 0 deletions
diff --git a/AppPkg/Applications/Sockets/WebServer/MemoryMap.c b/AppPkg/Applications/Sockets/WebServer/MemoryMap.c
new file mode 100644
index 0000000000..71a5b1d8c6
--- /dev/null
+++ b/AppPkg/Applications/Sockets/WebServer/MemoryMap.c
@@ -0,0 +1,364 @@
+/**
+ @file
+ Display the memory map
+
+ Copyright (c) 2012, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be 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 IMPLIED.
+
+**/
+
+#include <WebServer.h>
+#include <PiDxe.h>
+#include <Library/DxeServicesTableLib.h>
+
+
+CONST char * mpMemoryType[ ] = {
+ "Non-existent",
+ "Reserved",
+ "System Memory",
+ "Memory Mapped I/O"
+};
+
+
+/**
+ Page to display the memory map
+
+ @param [in] SocketFD The socket's file descriptor to add to the list.
+ @param [in] pPort The WSDT_PORT structure address
+ @param [out] pbDone Address to receive the request completion status
+
+ @retval EFI_SUCCESS The request was successfully processed
+
+**/
+EFI_STATUS
+MemoryMapPage (
+ IN int SocketFD,
+ IN WSDT_PORT * pPort,
+ OUT BOOLEAN * pbDone
+ )
+{
+ UINT64 Attributes;
+ BOOLEAN bSomethingDisplayed;
+ UINTN Count;
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR * pMemoryEnd;
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR * pMemoryDescriptor;
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR * pMemoryDescriptorStart;
+ EFI_STATUS Status;
+
+ DBG_ENTER ( );
+
+ //
+ // Send the memory map page
+ //
+ pMemoryDescriptorStart = NULL;
+ for ( ; ; ) {
+ //
+ // Send the page header
+ //
+ Status = HttpPageHeader ( SocketFD, pPort, L"Memory Map" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Start the table
+ //
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "<h1>Memory Map</h1>\r\n"
+ "<table>\r\n"
+ " <tr><th align=\"right\">Type</th><th align=\"right\">Start</th><th align=\"right\">End</th><th align=\"right\">Attributes</th></tr>\r\n" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Get the memory map
+ //
+ Status = gDS->GetMemorySpaceMap ( &Count,
+ &pMemoryDescriptor );
+ if ( !EFI_ERROR ( Status )) {
+ pMemoryDescriptorStart = pMemoryDescriptor;
+ pMemoryEnd = &pMemoryDescriptor[ Count ];
+ while ( pMemoryEnd > pMemoryDescriptor ) {
+ //
+ // Display the type
+ //
+ Status = HttpSendAnsiString ( SocketFD, pPort, "<tr><td align=\"right\"><code>" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ if ( DIM ( mpMemoryType ) > pMemoryDescriptor->GcdMemoryType ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ mpMemoryType[ pMemoryDescriptor->GcdMemoryType ]);
+ }
+ else {
+ Status = HttpSendValue ( SocketFD,
+ pPort,
+ pMemoryDescriptor->GcdMemoryType );
+ }
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Display the start address
+ //
+ Status = HttpSendAnsiString ( SocketFD, pPort, "</code></td><td align=\"right\"><code>0x" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ Status = HttpSendHexValue ( SocketFD,
+ pPort,
+ pMemoryDescriptor->BaseAddress );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Display the end address
+ //
+ Status = HttpSendAnsiString ( SocketFD, pPort, "</code></td><td align=\"right\"><code>0x" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ Status = HttpSendHexValue ( SocketFD,
+ pPort,
+ pMemoryDescriptor->BaseAddress
+ + pMemoryDescriptor->Length
+ - 1 );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Display the attributes
+ //
+ Status = HttpSendAnsiString ( SocketFD, pPort, "</code></td><td align=\"right\"><code>0x" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ Status = HttpSendHexValue ( SocketFD,
+ pPort,
+ pMemoryDescriptor->Attributes );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Decode the attributes
+ //
+ Status = HttpSendAnsiString ( SocketFD, pPort, "</code></td><td>" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ bSomethingDisplayed = FALSE;
+ Attributes = pMemoryDescriptor->Attributes;
+
+ if ( 0 != ( Attributes & EFI_MEMORY_RUNTIME )) {
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "Runtime" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ if ( 0 != ( Attributes & EFI_MEMORY_XP )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "No Execute" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ if ( 0 != ( Attributes & EFI_MEMORY_RP )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "No Read" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ if ( 0 != ( Attributes & EFI_MEMORY_WP )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "No Write" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ if ( 0 != ( Attributes & EFI_MEMORY_UCE )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "UCE" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+
+ if ( 0 != ( Attributes & EFI_MEMORY_WB )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "Write Back" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ if ( 0 != ( Attributes & EFI_MEMORY_WT )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "Write Through" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ if ( 0 != ( Attributes & EFI_MEMORY_WC )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "Write Combining" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ if ( 0 != ( Attributes & EFI_MEMORY_UC )) {
+ if ( bSomethingDisplayed ) {
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ ", " );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+ bSomethingDisplayed = TRUE;
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "Uncached" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+ }
+
+ //
+ // Finish the row
+ //
+ Status = HttpSendAnsiString ( SocketFD, pPort, "</td></tr>" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Set the next memory descriptor
+ //
+ pMemoryDescriptor += 1;
+ }
+ }
+
+ //
+ // Finish the table
+ //
+ Status = HttpSendAnsiString ( SocketFD,
+ pPort,
+ "</table>\r\n" );
+ if ( EFI_ERROR ( Status )) {
+ break;
+ }
+
+ //
+ // Send the page trailer
+ //
+ Status = HttpPageTrailer ( SocketFD, pPort, pbDone );
+ break;
+ }
+
+ //
+ // Release the memory descriptors
+ //
+ if ( NULL != pMemoryDescriptorStart ) {
+ FreePool ( pMemoryDescriptorStart );
+ }
+
+ //
+ // Return the operation status
+ //
+ DBG_EXIT_STATUS ( Status );
+ return Status;
+}