//
//
// Copyright (c) 2004  - 2014, Intel Corporation. All rights reserved.<BR>
//                                                                                  
// This program and the accompanying materials are licensed and made available under
// the terms and conditions of the BSD License that 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:
//
//   SystemComponent.vfr
//
// Abstract:
//
//   Driver Setup formset.
//
// Revision History:
//   ------------------------------------------------------------------------------
//   Rev   Date<MM/DD/YYYY>    Name    Description
//   ------------------------------------------------------------------------------

// --*/

form formid = SYSTEM_COMPONENT_FORM_ID,

  title  = STRING_TOKEN(STR_SYSTEM_COMPONENT_TITLE);
/*
  oneof   varid   = Setup.CRIDSettings,
    prompt      = STRING_TOKEN(STR_CRID_PROMPT),
    help        = STRING_TOKEN(STR_CRID_SETTING_HELP),
    option text = STRING_TOKEN(STR_DISABLE), value = 0, flags = MANUFACTURING | DEFAULT | RESET_REQUIRED;
    option text = STRING_TOKEN(STR_CRID_0_STRING),  value = 1, flags = RESET_REQUIRED;
    option text = STRING_TOKEN(STR_CRID_1_STRING),  value = 2, flags = RESET_REQUIRED;
    option text = STRING_TOKEN(STR_CRID_2_STRING),  value = 3, flags = RESET_REQUIRED;
  endoneof;
*/

  subtitle text = STRING_TOKEN(STR_PNP_CONFIGURATION_TITLE);
  oneof   varid   = Setup.PnpSettings,
    prompt      = STRING_TOKEN(STR_PNP_SETTING_PROMPT),
    help        = STRING_TOKEN(STR_PNP_SETTING_HELP),
    option text = STRING_TOKEN(STR_DISABLE), value = 0, flags = RESET_REQUIRED;
#if (PNP_DEBUG == 1)
    option text = STRING_TOKEN(STR_PNP_POWER_STRING),  value = 1, flags = RESET_REQUIRED;
    option text = STRING_TOKEN(STR_PNP_PERFORMANCE_STRING),  value = 2, flags = RESET_REQUIRED;
#endif
    option text = STRING_TOKEN(STR_PNP_POWER_PERFORMANCE_STRING), value = 3, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
    option text = STRING_TOKEN(STR_PNP_POWER_PERFORMANCE_STRING_A0), value = 4, flags = 0 | RESET_REQUIRED;
    option text = STRING_TOKEN(STR_PNP_POWER_PERFORMANCE_STRING_B0), value = 5, flags = 0 | RESET_REQUIRED;
  endoneof;

  oneof   varid   = Setup.CfioPnpSettings,
    prompt      = STRING_TOKEN(STR_CFIO_PNP_SETTING_PROMPT),
    help        = STRING_TOKEN(STR_CFIO_PNP_SETTING_HELP),
    option text = STRING_TOKEN(STR_DISABLE), value = 0, flags = MANUFACTURING | DEFAULT | RESET_REQUIRED;
    option text = STRING_TOKEN(STR_ENABLE), value = 1, flags = 0 | RESET_REQUIRED;
  endoneof;
 oneof   varid   = Setup.TristateLpc,
    prompt      = STRING_TOKEN(STR_TRISTATE_LPC_PROMPT),
    help        = STRING_TOKEN(STR_TRISTATE_LPC_HELP),
    option text = STRING_TOKEN(STR_DISABLE), value = 0, flags = MANUFACTURING | DEFAULT | RESET_REQUIRED;
    option text = STRING_TOKEN(STR_ENABLE), value = 1, flags = 0 | RESET_REQUIRED;
  endoneof;






  oneof varid   = Setup.PchFSAOn,
    prompt      = STRING_TOKEN(STR_PCH_FSA_PROMPT),
    help        = STRING_TOKEN(STR_PCH_FSA_HELP),
    option text = STRING_TOKEN(STR_OFF), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;
    option text = STRING_TOKEN(STR_ON), value = 1, flags = RESET_REQUIRED;
  endoneof;



endform;
