Home | History | Annotate | Download | only in EbcDebugger
      1 /** @file
      2   Configuration application for the EBC Debugger.
      3 
      4   Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #include <Uefi.h>
     16 #include <Protocol/ShellParameters.h>
     17 
     18 #include "EdbCommon.h"
     19 #include "EdbSupport.h"
     20 
     21 /**
     22 
     23   The function that displays the utility usage message.
     24 
     25 **/
     26 VOID
     27 PrintUsage (
     28   VOID
     29   )
     30 {
     31   Print (
     32     L"EbcDebuggerConfig Version 1.0\n"
     33     L"Copyright (C) Intel Corp 2007-2016. All rights reserved.\n"
     34     L"\n"
     35     L"Configure EbcDebugger in EFI Shell Environment.\n"
     36     L"\n"
     37     L"usage: EdbCfg <Command>\n"
     38     L"  CommandList:\n"
     39     L"    BO[C|CX|R|E|T|K] <ON|OFF> - Enable/Disable BOC/BOCX/BOR/BOE/BOT/BOK.\n"
     40 //    L"    SHOWINFO                - Show Debugger Information.\n"
     41     L"\n"
     42     );
     43   return;
     44 }
     45 
     46 /**
     47 
     48   The function is to show some information.
     49 
     50   @param  DebuggerConfiguration    Point to the EFI_DEBUGGER_CONFIGURATION_PROTOCOL.
     51 
     52 **/
     53 VOID
     54 EdbShowInfo (
     55   EFI_DEBUGGER_CONFIGURATION_PROTOCOL *DebuggerConfiguration
     56   )
     57 {
     58   Print (L"Not supported!\n");
     59   return ;
     60 }
     61 
     62 /**
     63 
     64   EdbConfigBreak function.
     65 
     66   @param  DebuggerConfiguration    Point to the EFI_DEBUGGER_CONFIGURATION_PROTOCOL.
     67   @param  Command                  Point to the command.
     68   @param  CommandArg               The argument for this command.
     69 
     70 **/
     71 VOID
     72 EdbConfigBreak (
     73   EFI_DEBUGGER_CONFIGURATION_PROTOCOL *DebuggerConfiguration,
     74   CHAR16                              *Command,
     75   CHAR16                              *CommandArg
     76   )
     77 {
     78   EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate;
     79 
     80   DebuggerPrivate = (EFI_DEBUGGER_PRIVATE_DATA *)DebuggerConfiguration->DebuggerPrivateData;
     81 
     82   if (StriCmp (Command, L"BOC") == 0) {
     83     if (CommandArg == NULL) {
     84       if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOC) == EFI_DEBUG_FLAG_EBC_BOC) {
     85         Print (L"BOC on\n");
     86       } else {
     87         Print (L"BOC off\n");
     88       }
     89     } else if (StriCmp (CommandArg, L"ON") == 0) {
     90       DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOC;
     91     } else if (StriCmp (CommandArg, L"OFF") == 0) {
     92       DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOC;
     93     } else {
     94       Print (L"Invalid parameter\n");
     95     }
     96   } else if (StriCmp (Command, L"BOCX") == 0) {
     97     if (CommandArg == NULL) {
     98       if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOCX) == EFI_DEBUG_FLAG_EBC_BOCX) {
     99         Print (L"BOCX on\n");
    100       } else {
    101         Print (L"BOCX off\n");
    102       }
    103     } else if (StriCmp (CommandArg, L"ON") == 0) {
    104       DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOCX;
    105     } else if (StriCmp (CommandArg, L"OFF") == 0) {
    106       DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOCX;
    107     } else {
    108       Print (L"Invalid parameter\n");
    109     }
    110   } else if (StriCmp (Command, L"BOR") == 0) {
    111     if (CommandArg == NULL) {
    112       if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOR) == EFI_DEBUG_FLAG_EBC_BOR) {
    113         Print (L"BOR on\n");
    114       } else {
    115         Print (L"BOR off\n");
    116       }
    117     } else if (StriCmp (CommandArg, L"ON") == 0) {
    118       DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOR;
    119     } else if (StriCmp (CommandArg, L"OFF") == 0) {
    120       DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOR;
    121     } else {
    122       Print (L"Invalid parameter\n");
    123     }
    124   } else if (StriCmp (Command, L"BOE") == 0) {
    125     if (CommandArg == NULL) {
    126       if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOE) == EFI_DEBUG_FLAG_EBC_BOE) {
    127         Print (L"BOE on\n");
    128       } else {
    129         Print (L"BOE off\n");
    130       }
    131     } else if (StriCmp (CommandArg, L"ON") == 0) {
    132       DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOE;
    133     } else if (StriCmp (CommandArg, L"OFF") == 0) {
    134       DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOE;
    135     } else {
    136       Print (L"Invalid parameter\n");
    137     }
    138   } else if (StriCmp (Command, L"BOT") == 0) {
    139     if (CommandArg == NULL) {
    140       if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOT) == EFI_DEBUG_FLAG_EBC_BOT) {
    141         Print (L"BOT on\n");
    142       } else {
    143         Print (L"BOT off\n");
    144       }
    145     } else if (StriCmp (CommandArg, L"ON") == 0) {
    146       DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOT;
    147     } else if (StriCmp (CommandArg, L"OFF") == 0) {
    148       DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOT;
    149     } else {
    150       Print (L"Invalid parameter\n");
    151     }
    152   } else if (StriCmp (Command, L"BOK") == 0) {
    153     if (CommandArg == NULL) {
    154       if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOK) == EFI_DEBUG_FLAG_EBC_BOK) {
    155         Print (L"BOK on\n");
    156       } else {
    157         Print (L"BOK off\n");
    158       }
    159     } else if (StriCmp (CommandArg, L"ON") == 0) {
    160       DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOK;
    161     } else if (StriCmp (CommandArg, L"OFF") == 0) {
    162       DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOK;
    163     } else {
    164       Print (L"Invalid parameter\n");
    165     }
    166   }
    167   return ;
    168 }
    169 
    170 /**
    171   Alter the EBC Debugger configuration.
    172 
    173   @param[in]  ImageHandle        The image handle.
    174   @param[in]  SystemTable        The system table.
    175 
    176   @retval EFI_SUCCESS            Operation completed successfully.
    177   @retval EFI_INVALID_PARAMETER  Usage error.
    178   @retval EFI_NOT_FOUND          A running debugger cannot be located.
    179 **/
    180 EFI_STATUS
    181 EFIAPI
    182 InitializeEbcDebuggerConfig (
    183   IN EFI_HANDLE        ImageHandle,
    184   IN EFI_SYSTEM_TABLE  *SystemTable
    185   )
    186 {
    187   UINTN                               Argc;
    188   CHAR16                              **Argv;
    189   EFI_SHELL_PARAMETERS_PROTOCOL       *ShellParameters;
    190   EFI_DEBUGGER_CONFIGURATION_PROTOCOL *DebuggerConfiguration;
    191   EFI_STATUS                          Status;
    192 
    193   Status = gBS->HandleProtocol (
    194                   gImageHandle,
    195                   &gEfiShellParametersProtocolGuid,
    196                   (VOID**)&ShellParameters
    197                   );
    198   if (EFI_ERROR(Status)) {
    199     Print (L"Please use UEFI Shell to run this application.\n");
    200     return EFI_INVALID_PARAMETER;
    201   }
    202 
    203   Argc = ShellParameters->Argc;
    204   Argv = ShellParameters->Argv;
    205 
    206   if (Argc < 2) {
    207     PrintUsage ();
    208     return EFI_INVALID_PARAMETER;
    209   }
    210 
    211   if (Argc == 2) {
    212     if ((StrCmp (Argv[1], L"/?") == 0) ||
    213         (StrCmp (Argv[1], L"-?") == 0) ||
    214         (StrCmp (Argv[1], L"-h") == 0) ||
    215         (StrCmp (Argv[1], L"-H") == 0) ) {
    216       PrintUsage ();
    217       return EFI_SUCCESS;
    218     }
    219   }
    220 
    221   Status = gBS->LocateProtocol (
    222                  &gEfiDebuggerConfigurationProtocolGuid,
    223                  NULL,
    224                  (VOID**)&DebuggerConfiguration
    225                  );
    226   if (EFI_ERROR(Status)) {
    227     Print (L"Error: DebuggerConfiguration protocol not found.\n");
    228     return EFI_NOT_FOUND;
    229   }
    230 
    231   if (StriCmp (Argv[1], L"SHOWINFO") == 0) {
    232     EdbShowInfo (DebuggerConfiguration);
    233     return EFI_SUCCESS;
    234   }
    235 
    236   if (((Argc == 2) || (Argc == 3)) &&
    237       ((StriCmp (Argv[1], L"BOC")  == 0) ||
    238        (StriCmp (Argv[1], L"BOCX") == 0) ||
    239        (StriCmp (Argv[1], L"BOR")  == 0) ||
    240        (StriCmp (Argv[1], L"BOE")  == 0) ||
    241        (StriCmp (Argv[1], L"BOT")  == 0) ||
    242        (StriCmp (Argv[1], L"BOK")  == 0))) {
    243     if (Argc == 3) {
    244       EdbConfigBreak (DebuggerConfiguration, Argv[1], Argv[2]);
    245     } else {
    246       EdbConfigBreak (DebuggerConfiguration, Argv[1], NULL);
    247     }
    248     return EFI_SUCCESS;
    249   }
    250 
    251   Print (L"Error: Invalid Command.\n");
    252   return EFI_INVALID_PARAMETER;
    253 }
    254