/** @file
  Various register numbers and value bits based on the following publications:
  - Intel(R) datasheet 290549-001
  - Intel(R) datasheet 290562-001
  - Intel(R) datasheet 297654-006
  - Intel(R) datasheet 297738-017

  Copyright (C) 2015, Red Hat, Inc.
  Copyright (c) 2014, Gabriel L. Somlo <somlo@cmu.edu>

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef __I440FX_PIIX4_H__
#define __I440FX_PIIX4_H__

#include <Library/PciLib.h>

//
// Host Bridge Device ID (DID) value for I440FX
//
#define INTEL_82441_DEVICE_ID  0x1237

//
// B/D/F/Type: 0/0/0/PCI
//
#define PMC_REGISTER_PIIX4(Offset)  PCI_LIB_ADDRESS (0, 0, 0, (Offset))

#define PIIX4_PAM0  0x59
#define PIIX4_PAM1  0x5A
#define PIIX4_PAM2  0x5B
#define PIIX4_PAM3  0x5C
#define PIIX4_PAM4  0x5D
#define PIIX4_PAM5  0x5E
#define PIIX4_PAM6  0x5F

//
// B/D/F/Type: 0/1/3/PCI
//
#define POWER_MGMT_REGISTER_PIIX4(Offset)  PCI_LIB_ADDRESS (0, 1, 3, (Offset))

#define PIIX4_PMBA       0x40
#define PIIX4_PMBA_MASK  (BIT15 | BIT14 | BIT13 | BIT12 | BIT11 |         \
                                  BIT10 | BIT9  | BIT8  | BIT7  | BIT6)

#define PIIX4_PMREGMISC         0x80
#define PIIX4_PMREGMISC_PMIOSE  BIT0

//
// IO ports
//
#define PIIX4_CPU_HOTPLUG_BASE  0xAF00

#endif
