/**@file
 
Copyright (c) 2006, 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         
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:

  MiscDevicePath.h

Abstract:

  Misc class required EFI Device Path definitions (Ports, slots & 
  onboard devices)

**/

#ifndef _MISC_DEVICE_PATH_H
#define _MISC_DEVICE_PATH_H


#pragma pack(1)
//
// USB
//

/* For reference:
#define USB1_1_STR  "ACPI(PNP0A03,0)/PCI(1D,0)."
#define USB1_2_STR  "ACPI(PNP0A03,0)/PCI(1D,1)."
#define USB1_3_STR  "ACPI(PNP0A03,0)/PCI(1D,2)."
#define USB2_1_STR  "ACPI(PNP0A03,0)/PCI(1D,7)." 
*/

//
// #define acpi { 0x02, 0x01, 0x00, 0x0C, 0x0a0341d0, 0x00000000 }
// #define pci( device,function)  { 0x01, 0x01, 0x00, 0x06, device, function }
// #define end  { 0xFF, 0xFF, 0x00, 0x04 }
//
#define DP_ACPI \
  { \
    ACPI_DEVICE_PATH, ACPI_DP, (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), (UINT8) \
      ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8), EISA_PNP_ID (0x0A03), 0 \
  }
#define DP_PCI(device, function) \
  { \
    HARDWARE_DEVICE_PATH, HW_PCI_DP, (UINT8) (sizeof (PCI_DEVICE_PATH)), (UINT8) \
      ((sizeof (PCI_DEVICE_PATH)) >> 8), function, device \
  }
#define DP_END \
  { \
    END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, END_DEVICE_PATH_LENGTH, 0 \
  }

#define DP_LPC(eisaid, function) \
  { \
    ACPI_DEVICE_PATH, ACPI_DP, (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), (UINT8) \
      ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8), EISA_PNP_ID (eisaid), function \
  }

//
// Shanmu >> moved to TianoDevicePath.h
//

/*
typedef struct _USB_PORT_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      PciBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} USB_PORT_DEVICE_PATH;


//IDE ??I am not sure. Should this be ATAPI_DEVICE_PATH
typedef struct _IDE_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      PciBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} IDE_DEVICE_PATH;

//RMC Connector
typedef struct _RMC_CONN_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      PciBridgeDevicePath;
  PCI_DEVICE_PATH      PciBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} RMC_CONN_DEVICE_PATH;

//static RMC_CONN_DEVICE_PATH mRmcConnDevicePath = { acpi, pci( 0x1E,0x00 ),pci( 0x0A,0x00 ), end };

//RIDE
typedef struct _RIDE_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      PciBridgeDevicePath;
  PCI_DEVICE_PATH      PciBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} RIDE_DEVICE_PATH;

//static RIDE_DEVICE_PATH mRideDevicePath = { acpi, pci( 0x1E,0x00 ),pci( 0x02,0x00 ), end };

//Gigabit NIC
//typedef struct _GB_NIC_DEVICE_PATH
//{
//  ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;
//  PCI_DEVICE_PATH            PciBridgeDevicePath;
//  PCI_DEVICE_PATH            PciXBridgeDevicePath;
//  PCI_DEVICE_PATH            PciXBusDevicePath;
//  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
//} GB_NIC_DEVICE_PATH;

//static GB_NIC_DEVICE_PATH mGbNicDevicePath = { acpi, pci( 0x03,0x00 ),pci( 0x1F,0x00 ),pci( 0x07,0x00 ), end };


//P/S2 Connector
typedef struct _PS2_CONN_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      LpcBridgeDevicePath;
  ACPI_HID_DEVICE_PATH    LpcBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} PS2_CONN_DEVICE_PATH;

//static PS2_CONN_DEVICE_PATH mPs2KeyboardDevicePath   = { acpi, pci( 0x1F,0x00 ),lpc( 0x0303,0 ), end };
//static PS2_CONN_DEVICE_PATH mPs2MouseDevicePath      = { acpi, pci( 0x1F,0x00 ),lpc( 0x0303,1 ), end };

//Serial Port Connector
typedef struct _SERIAL_CONN_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      LpcBridgeDevicePath;
  ACPI_HID_DEVICE_PATH    LpcBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} SERIAL_CONN_DEVICE_PATH;

//static SERIAL_CONN_DEVICE_PATH mCom1DevicePath   = { acpi, pci( 0x1F,0x00 ),lpc( 0x0501,0 ), end };
//static SERIAL_CONN_DEVICE_PATH mCom2DevicePath   = { acpi, pci( 0x1F,0x00 ),lpc( 0x0501,1 ), end };

//Parallel Port Connector
typedef struct _PARALLEL_CONN_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      LpcBridgeDevicePath;
  ACPI_HID_DEVICE_PATH    LpcBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} PARALLEL_CONN_DEVICE_PATH;

//static PARALLEL_CONN_DEVICE_PATH mLpt1DevicePath   = { acpi, pci( 0x1F,0x00 ),lpc( 0x0401,0 ), end };

//Floopy Connector
typedef struct _FLOOPY_CONN_DEVICE_PATH
{
  ACPI_HID_DEVICE_PATH    PciRootBridgeDevicePath;
  PCI_DEVICE_PATH      LpcBridgeDevicePath;
  ACPI_HID_DEVICE_PATH    LpcBusDevicePath;
  EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;
} FLOOPY_CONN_DEVICE_PATH;

//static FLOOPY_CONN_DEVICE_PATH mFloopyADevicePath   = { acpi, pci( 0x1F,0x00 ),lpc( 0x0604,0 ), end };
//static FLOOPY_CONN_DEVICE_PATH mFloopyBDevicePath   = { acpi, pci( 0x1F,0x00 ),lpc( 0x0604,1 ), end };

*/

//
// End Shanmu
//
#pragma pack()

#endif
