13446Smrj /* 23446Smrj * CDDL HEADER START 33446Smrj * 43446Smrj * The contents of this file are subject to the terms of the 53446Smrj * Common Development and Distribution License (the "License"). 63446Smrj * You may not use this file except in compliance with the License. 73446Smrj * 83446Smrj * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 93446Smrj * or http://www.opensolaris.org/os/licensing. 103446Smrj * See the License for the specific language governing permissions 113446Smrj * and limitations under the License. 123446Smrj * 133446Smrj * When distributing Covered Code, include this CDDL HEADER in each 143446Smrj * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 153446Smrj * If applicable, add the following below this CDDL HEADER, with the 163446Smrj * fields enclosed by brackets "[]" replaced with your own identifying 173446Smrj * information: Portions Copyright [yyyy] [name of copyright owner] 183446Smrj * 193446Smrj * CDDL HEADER END 203446Smrj */ 213446Smrj 223446Smrj /* 23*12054SStephen.Hanson@Sun.COM * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 243446Smrj */ 253446Smrj 263446Smrj #ifndef _PCIEX_PCI_NVIDIA_H 273446Smrj #define _PCIEX_PCI_NVIDIA_H 283446Smrj 293446Smrj #ifdef __cplusplus 303446Smrj extern "C" { 313446Smrj #endif 323446Smrj 333446Smrj /* 343446Smrj * PCI Configuration (Nvidia, PCIe) related library functions 353446Smrj */ 3611245SZhijun.Fu@Sun.COM boolean_t look_for_any_pciex_device(uchar_t); 373446Smrj boolean_t check_if_device_is_pciex(dev_info_t *, uchar_t, uchar_t, 38*12054SStephen.Hanson@Sun.COM uchar_t, boolean_t *, ushort_t *, ushort_t *); 393446Smrj boolean_t create_pcie_root_bus(uchar_t, dev_info_t *); 403446Smrj void add_nvidia_isa_bridge_props(dev_info_t *, uchar_t, uchar_t, 413446Smrj uchar_t); 423446Smrj 433446Smrj /* Generic Nvidia chipset IDs and defines */ 443446Smrj #define NVIDIA_VENDOR_ID 0x10de /* Nvidia Vendor Id */ 453446Smrj #define NVIDIA_INTR_BCR_OFF 0x3C /* NV_XVR_INTR_BCR */ 463446Smrj #define NVIDIA_INTR_BCR_SERR_FORWARD_BIT 0x02 /* SERR_FORWARD bit */ 473446Smrj 483446Smrj /* CK8-04 PCIe RC and LPC-PCI Bridge device IDs */ 493446Smrj #define NVIDIA_CK804_DEVICE_ID 0x5d /* ck8-04 dev id */ 503446Smrj #define NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID 0x50 /* LPC Default Bridge */ 513446Smrj #define NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID 0x51 /* LPC Bridge */ 523446Smrj #define NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID 0xd3 /* Slave LPC Bridge */ 533446Smrj #define NVIDIA_CK804_AER_VALID_REVID 0xa3 /* RID w/ AER enabled */ 543446Smrj 553446Smrj #define NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) \ 563446Smrj (((did) == NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID) || \ 573446Smrj ((did) == NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID) || \ 583446Smrj ((did) == NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID)) 593446Smrj 603446Smrj /* 613446Smrj * Only for Nvidia's CrushK 8-04 chipsets: 623446Smrj * To enable hotplug; we need to map in two I/O BARs 633446Smrj * from ISA bridge's config space 643446Smrj */ 653446Smrj #define NVIDIA_CK804_ISA_SYSCTRL_BAR_OFF 0x64 /* System Control BAR */ 663446Smrj #define NVIDIA_CK804_ISA_ANALOG_BAR_OFF 0x68 /* Analog BAR */ 673446Smrj 683446Smrj /* NV_XVR_VEND_CYA1 related defines */ 693446Smrj #define NVIDIA_CK804_VEND_CYA1_OFF 0xf40 /* NV_XVR_VEND_CYA1 */ 703446Smrj #define NVIDIA_CK804_VEND_CYA1_ERPT_VAL 0x2000 /* enable CYA1 ERPT */ 713446Smrj #define NVIDIA_CK804_VEND_CYA1_ERPT_MASK 0xdfff /* CYA1 ERPT mask */ 723446Smrj 733446Smrj /* 743446Smrj * C51 related defines 753446Smrj */ 763446Smrj 773446Smrj /* C51 PCIe Root Complex Device ID defines */ 783446Smrj #define NVIDIA_C51_DEVICE_ID_XVR16 0x2fb 793446Smrj #define NVIDIA_C51_DEVICE_ID_XVR1_0 0x2fc 803446Smrj #define NVIDIA_C51_DEVICE_ID_XVR1_1 0x2fd 813446Smrj 823446Smrj #define NVIDIA_C51_DEVICE_ID(did) \ 833446Smrj (((did) == NVIDIA_C51_DEVICE_ID_XVR16) || \ 843446Smrj ((did) == NVIDIA_C51_DEVICE_ID_XVR1_0) || \ 853446Smrj ((did) == NVIDIA_C51_DEVICE_ID_XVR1_1)) 863446Smrj 873446Smrj /* 883446Smrj * MCP55 related defines 893446Smrj */ 903446Smrj 913446Smrj /* MCP55 PCIe Root Complex Device ID defines */ 923446Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR4 0x374 933446Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR8 0x375 943446Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR8_VC1 0x376 953446Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR16 0x377 963446Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR4_VC1 0x378 973446Smrj 983446Smrj #define NVIDIA_MCP55_DEVICE_ID(did) \ 993446Smrj (((did) == NVIDIA_MCP55_DEVICE_ID_XVR4) || \ 1003446Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR8) || \ 1013446Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR16) || \ 1023446Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR4_VC1) || \ 1033446Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR8_VC1)) 1043446Smrj 1053446Smrj /* MCP55 LPC-PCI Bridge Device ID defines */ 1063446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0 0x360 1073446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1 0x361 1083446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2 0x362 1093446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3 0x363 1103446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4 0x364 1113446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5 0x365 1123446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6 0x366 1133446Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7 0x367 1143446Smrj 1153446Smrj #define NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did) \ 1163446Smrj (((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0) || \ 1173446Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1) || \ 1183446Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2) || \ 1193446Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3) || \ 1203446Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4) || \ 1213446Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5) || \ 1223446Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6) || \ 1233446Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7)) 1243446Smrj 1253446Smrj /* 1263446Smrj * MCP61 related defines 1273446Smrj */ 1283446Smrj 1293446Smrj /* MCP61 PCIe Root Complex Device ID defines */ 1303446Smrj #define NVIDIA_MCP61_DEVICE_ID_XVR4 0x3e8 1313446Smrj #define NVIDIA_MCP61_DEVICE_ID_XVR8 0x3e9 1323446Smrj 1333446Smrj #define NVIDIA_MCP61_DEVICE_ID(did) \ 1343446Smrj (((did) == NVIDIA_MCP61_DEVICE_ID_XVR4) || \ 1353446Smrj ((did) == NVIDIA_MCP61_DEVICE_ID_XVR8)) 1363446Smrj 1373446Smrj /* 1383446Smrj * MCP65 related defines 1393446Smrj */ 1403446Smrj 1413446Smrj /* MCP65 PCIe Root Complex Device ID defines */ 1423446Smrj #define NVIDIA_MCP65_DEVICE_ID_XVR4 0x458 1433446Smrj #define NVIDIA_MCP65_DEVICE_ID_XVR8 0x459 1443446Smrj #define NVIDIA_MCP65_DEVICE_ID_XVR16 0x45a 1453446Smrj 1463446Smrj #define NVIDIA_MCP65_DEVICE_ID(did) \ 1473446Smrj (((did) == NVIDIA_MCP65_DEVICE_ID_XVR4) || \ 1483446Smrj ((did) == NVIDIA_MCP65_DEVICE_ID_XVR8) || \ 1493446Smrj ((did) == NVIDIA_MCP65_DEVICE_ID_XVR16)) 1503446Smrj 1513446Smrj /* 1523446Smrj * Check if the given device is a Nvidia's LPC bridge 1533446Smrj */ 1543446Smrj #define NVIDIA_IS_LPC_BRIDGE(vid, did) \ 1553446Smrj (((vid) == NVIDIA_VENDOR_ID) && \ 1563446Smrj (NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) || \ 1573446Smrj NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did))) 1583446Smrj 1593446Smrj /* Check for PCIe RC Device ID */ 1603446Smrj #define NVIDIA_PCIE_RC_DEV_ID(did) \ 1613446Smrj (((did) == NVIDIA_CK804_DEVICE_ID) || \ 1623446Smrj NVIDIA_C51_DEVICE_ID(did) || \ 1633446Smrj NVIDIA_MCP55_DEVICE_ID(did) || \ 1643446Smrj NVIDIA_MCP61_DEVICE_ID(did) || \ 1653446Smrj NVIDIA_MCP65_DEVICE_ID(did)) 1663446Smrj 1673446Smrj /* 1683446Smrj * Defines to figure out what kind of hotplug is supported 1693446Smrj */ 1703446Smrj #define INBAND_HPC_NONE 0x0 /* No hotplug supported */ 1713446Smrj #define INBAND_HPC_PCIE 0x1 /* PCIe based hotplug supported */ 1723446Smrj #define INBAND_HPC_SHPC 0x2 /* SHPC based hotplug supported */ 1733446Smrj 1743446Smrj #ifdef __cplusplus 1753446Smrj } 1763446Smrj #endif 1773446Smrj 1783446Smrj #endif /* _PCIEX_PCI_NVIDIA_H */ 179