vfr.vfr

来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· VFR 代码 · 共 623 行 · 第 1/2 页

VFR
623
字号
// *++
//
// Copyright (c) 2004, 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.             
// 
// Module Name:
//
//   Vfr.vfr 
// 
// Abstract:
// 
//   Sample Setup formset
// 
// Revision History: 
// 
// --*/


#include "DriverSampleStrDefs.h" 
 
#include "NVDataStruc.h"


typedef struct {
  UINT8         Field8;
  UINT16        Field16;
  UINT8         OrderedList[3];
} MyIfrNVData2;

typedef struct {
  UINT8         Field8;
  UINT16        Field16;
  UINT8         OrderedList[3];
} MyIfrNVData3;

#define MY_TEXT_KEY                 0x100 

#define LABEL_1_VALUE               0x01
#define LABEL_2_VALUE               0x1000
#define LABEL_UPDATE_BBS            0x2222
#define LABEL_END_UPDATE_BBS        0x2223

formset 
  guid     = FORMSET_GUID,
  title    = STRING_TOKEN(STR_FORM_SET_TITLE),  
  help     = STRING_TOKEN(STR_FORM_SET_TITLE_HELP), 
  class    = 0x10,      
  subclass = 0,

  varstore MyIfrNVData2, key = 0x1234, name = MY_DATA2, guid = FORMSET_GUID;


  varstore MyIfrNVData3, key = 0x4321, name = MY_DATA3, guid = FORMSET_GUID;

  form formid = 1,
       title  = STRING_TOKEN(STR_FORM1_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code
  
    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT);

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);

    banner 
      title = STRING_TOKEN(STR_BANNER_TITLE),
      line  1,
      align center;
    
    banner 
      title = STRING_TOKEN(STR_BANNER_TITLE),
      line  2,
      align left;

    banner 
      title = STRING_TOKEN(STR_BANNER_TITLE),
      line  2,
      align right;

  	text 
      help   = STRING_TOKEN(STR_TEXT_HELP),  
      text   = STRING_TOKEN(STR_CPU_STRING),
	    text   = STRING_TOKEN(STR_CPU_STRING2),
      flags  = 0,
      key    = 0;

  	text 
      help   = STRING_TOKEN(STR_EXIT_TEXT),  
      text   = STRING_TOKEN(STR_EXIT_TEXT), 
	    text   = STRING_TOKEN(STR_EXIT_TEXT),
      flags  = INTERACTIVE,
      key    = 0x1237;

    oneof varid  = MyIfrNVData.SuppressGrayOutSomething,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),  
      option text = STRING_TOKEN(STR_ONE_OF_TEXT4), value = 0x0, flags = 0; 
      option text = STRING_TOKEN(STR_ONE_OF_TEXT5), value = 0x1, flags = 0;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT6), value = 0x2, flags = DEFAULT;
    endoneof;

    oneof varid  = MyIfrNVData.BootOrderLarge,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),  
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = INTERACTIVE, key = 1; 
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = INTERACTIVE | DEFAULT, key = 2;
    endoneof;

    grayoutif  ideqval MyIfrNVData.SuppressGrayOutSomething == 0x1;
    suppressif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x0;
      label 0;
      checkbox varid    = MyIfrNVData.ChooseToActivateNuclearWeaponry,
              prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
              help     = STRING_TOKEN(STR_CHECK_BOX_HELP),  
              flags    = 1,                  // Flags behavior for checkbox is overloaded so that it equals a DEFAULT value.  1 = ON, 0 = off
              key      = 0,
      endcheckbox;
    endif;


    //
    // Ordered list: 
    //   sizeof(MyIfrNVData) storage must be UINT8 array, and
    //   size written for the variable must be size of the entire
    //   variable.
    //
    //
    suppressif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x0;
      label LABEL_UPDATE_BBS;
      orderedlist
                varid       = MyIfrNVData.BootOrder,
                prompt      = STRING_TOKEN(STR_BOOT_OPTIONS),
                help        = STRING_TOKEN(STR_NULL_STRING),
                option text = STRING_TOKEN(STR_BOOT_OPTION2), value = 2, flags = RESET_REQUIRED;
                option text = STRING_TOKEN(STR_BOOT_OPTION1), value = 1, flags = RESET_REQUIRED;
                option text = STRING_TOKEN(STR_BOOT_OPTION3), value = 3, flags = RESET_REQUIRED;
                option text = STRING_TOKEN(STR_BOOT_OPTION4), value = 4, flags = RESET_REQUIRED;
      endlist;      
      label LABEL_END_UPDATE_BBS;
    endif;
 
    suppressif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x2;
      orderedlist    
        varid       = MyIfrNVData.OrderedList,
        prompt      = STRING_TOKEN(STR_TEST_OPCODE),
        help        = STRING_TOKEN(STR_TEXT_HELP),  
        option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 4, flags = RESET_REQUIRED;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 3, flags = RESET_REQUIRED;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 2, flags = RESET_REQUIRED;
        option text = STRING_TOKEN(STR_TEXT_HELP),    value = 1, flags = RESET_REQUIRED;
      endlist;
    endif;
     
    label 100;

    goto 0x1234, 
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC), 
      help    = STRING_TOKEN(STR_GOTO_HELP),
      flags   = INTERACTIVE, 
      key     = 0x1234;

    goto 0x1234, 
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC2), 
      help    = STRING_TOKEN(STR_GOTO_HELP),
      flags   = INTERACTIVE, 
      key     = 0x1235;
    
    //
    // VARSTORE tests
    //
    // Till now, been using variable NvData (must be reserved)
    // now we do a varselect for variable NvData3
    inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
      ideqid MyIfrNVData3.Field16 == MyIfrNVData3.Field16
    endif;
    // now we do a varselect_pair for variable NvData2 and NvData3
    inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
      ideqid MyIfrNVData2.Field16 == MyIfrNVData3.Field16
    endif;


    // now we do a varselect_pair for variable NvData and NvData2
//    inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
//      ideqid MyIfrNVData2.Field16 == MyIfrNVData.TestLateCheck
//    endif;

    inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
      ideqid MyIfrNVData.TestLateCheck == MyIfrNVData.TestLateCheck2
    endif;

    oneof varid  = MyIfrNVData.TestLateCheck,
      prompt      = STRING_TOKEN(STR_TEST_OPCODE),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),  
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = LATE_CHECK | RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = LATE_CHECK | DEFAULT | RESET_REQUIRED;
    endoneof;

    oneof varid  = MyIfrNVData.TestLateCheck2,
      prompt      = STRING_TOKEN(STR_TEST_OPCODE2),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),  
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = LATE_CHECK | DEFAULT | RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = LATE_CHECK | RESET_REQUIRED;

    endoneof;

    oneof varid  = MyIfrNVData.QuestionAboutTreeHugging,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),  
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT | RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 0x03, flags = RESET_REQUIRED;

    endoneof;

    string    varid    = MyIfrNVData.MyStringData,
              prompt   = STRING_TOKEN(STR_MY_STRING_PROMPT2),
              help     = STRING_TOKEN(STR_MY_STRING_HELP2),
              flags    = INTERACTIVE,
              key      = 0x1234,
              minsize  = 6,
              maxsize  = 0x14,
    endstring; 

  	text 
      help   = STRING_TOKEN(STR_GRAYOUT_TEST),  
      text   = STRING_TOKEN(STR_GRAYOUT_TEST),
	    text   = STRING_TOKEN(STR_GRAYOUT_TEST),
      flags  = INTERACTIVE,
      key    = 0x1555;

  	text 
      help   = STRING_TOKEN(STR_SUPPRESS_TEST),  
      text   = STRING_TOKEN(STR_SUPPRESS_TEST),
	    text   = STRING_TOKEN(STR_SUPPRESS_TEST),
      flags  = INTERACTIVE,
      key    = 0x1556;

  	text 
      help   = STRING_TOKEN(STR_CLEAR_TEST),  
      text   = STRING_TOKEN(STR_CLEAR_TEST),
	    text   = STRING_TOKEN(STR_CLEAR_TEST),
      flags  = INTERACTIVE,
      key    = 0x1557;

    grayoutif  vareqval var(VAR_EQ_TEST_NAME) == 0x1;
    suppressif vareqval var(VAR_EQ_TEST_NAME) == 0x1000; 
      label 30;
      checkbox varid    = MyIfrNVData.ChooseToActivateNuclearWeaponry,
              prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
              help     = STRING_TOKEN(STR_CHECK_BOX_HELP),  
              flags    = 1,
              key      = 0,
      endcheckbox;
    endif;


    numeric varid   = MyIfrNVData.HowOldAreYouInYearsManual, 
            prompt  = STRING_TOKEN(STR_NUMERIC_MANUAL_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            minimum = 0,
            maximum = 0xf0,      // 0xf0 = 240 in decimal
            step    = 0,         // Stepping of 0 equates to a manual entering
                                 // of a value, otherwise it will auto-increment
                                 // with a left/right arrow
            default = 21, 

    endnumeric;

    numeric varid   = MyIfrNVData.HowTallAreYouManual, 
            prompt  = STRING_TOKEN(STR_TALL_MANUAL_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP1),
            minimum = 0,
            maximum = 300,
            step    = 0,         // Stepping of 0 equates to a manual entering
                                 // of a value, otherwise it will auto-increment
                                 // with a left/right arrow
            default = 175, 

    endnumeric;

    inventory
      help    = STRING_TOKEN(STR_INVENTORY_HELP),
      text    = STRING_TOKEN(STR_INVENTORY_TEXT1),
      text    = STRING_TOKEN(STR_INVENTORY_TEXT2);

      
    restore defaults,
      formid  = 4,
      prompt  = STRING_TOKEN(STR_RESTORE_DEFAULTS_PROMPT),
      help    = STRING_TOKEN(STR_RESTORE_DEFAULTS_HELP),
      flags   = 0,
      key     = 0;

    save defaults,
      formid  = 4,
      prompt  = STRING_TOKEN(STR_SAVE_DEFAULTS_PROMPT),
      help    = STRING_TOKEN(STR_SAVE_DEFAULTS_HELP),
      flags   = 0,
      key     = 0;

    // 
    // Case with no flags or key
    //
    save defaults,
      formid  = 4,
      prompt  = STRING_TOKEN(STR_SAVE_DEFAULTS_PROMPT),
      help    = STRING_TOKEN(STR_SAVE_DEFAULTS_HELP);
    //
    // Case with no key

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?