// *++
//
// Copyright (c) 2007, 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:
//
//   Platform driver Override manager formset
//
//
// --*/

#define PLAT_OVER_MNGR_GUID \
  { \
    0x8614567d, 0x35be, 0x4415, 0x8d, 0x88, 0xbd, 0x7d, 0xc, 0x9c, 0x70, 0xc0 \
  }

typedef struct {
  UINT8   DriSelection[100];
  UINT8   DriOrder[100];
  UINT8   PciDeviceFilter;
} PLAT_OVER_MNGR_DATA;

#define FORM_ID_DEVICE                 0x1234
#define FORM_ID_DRIVER                 0x1200
#define FORM_ID_ORDER                  0x1500

#define KEY_VALUE_DEVICE_OFFSET        0x0100
#define KEY_VALUE_DEVICE_MAX           0x04ff

#define QUESTION_ID_OFFSET             0x0500

#define KEY_VALUE_DEVICE_REFRESH       0x1234
#define KEY_VALUE_DEVICE_FILTER        0x1235
#define KEY_VALUE_DEVICE_CLEAR         0x1236

#define KEY_VALUE_DRIVER_GOTO_PREVIOUS 0x1300
#define KEY_VALUE_DRIVER_GOTO_ORDER    0x1301

#define KEY_VALUE_ORDER_GOTO_PREVIOUS  0x2000
#define KEY_VALUE_ORDER_SAVE_AND_EXIT  0x1800

#define VARSTORE_ID_PLAT_OVER_MNGR     0x1000


#define EFI_DISK_DEVICE_CLASS          0x01
#define LABEL_END                      0xffff

formset
  guid     = PLAT_OVER_MNGR_GUID,
  title    = STRING_TOKEN(STR_ENTRY_TITLE),
  help     = STRING_TOKEN(STR_TITLE_HELP),
  class    = EFI_DISK_DEVICE_CLASS,
  subclass = 0xff,

  varstore PLAT_OVER_MNGR_DATA,
    varid = VARSTORE_ID_PLAT_OVER_MNGR,
    name  = Data,
    guid  = PLAT_OVER_MNGR_GUID;

  form formid = FORM_ID_DEVICE,
       title = STRING_TOKEN(STR_TITLE);

    text
      help   = STRING_TOKEN(STR_FIRST_REFRESH_HELP),
      text   = STRING_TOKEN(STR_FIRST_REFRESH),
      text   = STRING_TOKEN(STR_NULL_STRING),
      flags  = INTERACTIVE,
      key    = KEY_VALUE_DEVICE_REFRESH;

    checkbox varid = Data.PciDeviceFilter,
      prompt   = STRING_TOKEN(STR_PCI_DEVICE_FILTER_PROMPT),
      help     = STRING_TOKEN(STR_PCI_DEVICE_FILTER_HELP),
      flags    = INTERACTIVE,
      key      = KEY_VALUE_DEVICE_FILTER,
    endcheckbox;

    label FORM_ID_DEVICE;
    label LABEL_END;

    subtitle text = STRING_TOKEN(STR_NULL_STRING);

    goto FORM_ID_DEVICE,
      prompt  = STRING_TOKEN(STR_CLEAR_ALL),
      help    = STRING_TOKEN(STR_CLEAR_ALL_HELP),
      flags   = INTERACTIVE | RESET_REQUIRED,
      key     = KEY_VALUE_DEVICE_CLEAR;
  endform;

  form formid = FORM_ID_DRIVER,
       title = STRING_TOKEN(STR_TITLE);

    goto FORM_ID_DEVICE,
      prompt  = STRING_TOKEN(STR_GOTO_PREVIOUS),
      help    = STRING_TOKEN(STR_NULL_STRING),
      flags   = INTERACTIVE,
      key     = KEY_VALUE_DRIVER_GOTO_PREVIOUS;

    goto FORM_ID_ORDER,
      prompt  = STRING_TOKEN(STR_TITLE_ORDER),
      help    = STRING_TOKEN(STR_TITLE_ORDER_HELP),
      flags   = INTERACTIVE,
      key     = KEY_VALUE_DRIVER_GOTO_ORDER;

    label FORM_ID_DRIVER;
    label LABEL_END;

  endform;

  form formid = FORM_ID_ORDER,
       title = STRING_TOKEN(STR_TITLE);

    goto FORM_ID_DRIVER,
      prompt  = STRING_TOKEN(STR_GOTO_PREVIOUS),
      help    = STRING_TOKEN(STR_NULL_STRING),
      flags   = INTERACTIVE,
      key     = KEY_VALUE_ORDER_GOTO_PREVIOUS;

    label FORM_ID_ORDER;
    label LABEL_END;

    subtitle text = STRING_TOKEN(STR_NULL_STRING);

    goto FORM_ID_ORDER,
      prompt  = STRING_TOKEN(STR_SAVE_AND_EXIT),
      help    = STRING_TOKEN(STR_NULL_STRING),
      flags   = INTERACTIVE | RESET_REQUIRED,
      key     = KEY_VALUE_ORDER_SAVE_AND_EXIT;
  endform;

endformset;