1ae115bc7Smrj /* 2ae115bc7Smrj * CDDL HEADER START 3ae115bc7Smrj * 4ae115bc7Smrj * The contents of this file are subject to the terms of the 5ae115bc7Smrj * Common Development and Distribution License (the "License"). 6ae115bc7Smrj * You may not use this file except in compliance with the License. 7ae115bc7Smrj * 8ae115bc7Smrj * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9ae115bc7Smrj * or http://www.opensolaris.org/os/licensing. 10ae115bc7Smrj * See the License for the specific language governing permissions 11ae115bc7Smrj * and limitations under the License. 12ae115bc7Smrj * 13ae115bc7Smrj * When distributing Covered Code, include this CDDL HEADER in each 14ae115bc7Smrj * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15ae115bc7Smrj * If applicable, add the following below this CDDL HEADER, with the 16ae115bc7Smrj * fields enclosed by brackets "[]" replaced with your own identifying 17ae115bc7Smrj * information: Portions Copyright [yyyy] [name of copyright owner] 18ae115bc7Smrj * 19ae115bc7Smrj * CDDL HEADER END 20ae115bc7Smrj */ 21ae115bc7Smrj 22ae115bc7Smrj /* 23*0db3240dSStephen Hanson * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. 24ae115bc7Smrj */ 25ae115bc7Smrj 26ae115bc7Smrj #ifndef _PCIEX_PCI_NVIDIA_H 27ae115bc7Smrj #define _PCIEX_PCI_NVIDIA_H 28ae115bc7Smrj 29ae115bc7Smrj #ifdef __cplusplus 30ae115bc7Smrj extern "C" { 31ae115bc7Smrj #endif 32ae115bc7Smrj 33ae115bc7Smrj /* 34ae115bc7Smrj * PCI Configuration (Nvidia, PCIe) related library functions 35ae115bc7Smrj */ 36c0da6274SZhi-Jun Robin Fu boolean_t look_for_any_pciex_device(uchar_t); 37ae115bc7Smrj boolean_t check_if_device_is_pciex(dev_info_t *, uchar_t, uchar_t, 38*0db3240dSStephen Hanson uchar_t, boolean_t *, ushort_t *, ushort_t *); 39ae115bc7Smrj boolean_t create_pcie_root_bus(uchar_t, dev_info_t *); 40ae115bc7Smrj void add_nvidia_isa_bridge_props(dev_info_t *, uchar_t, uchar_t, 41ae115bc7Smrj uchar_t); 42ae115bc7Smrj 43ae115bc7Smrj /* Generic Nvidia chipset IDs and defines */ 44ae115bc7Smrj #define NVIDIA_VENDOR_ID 0x10de /* Nvidia Vendor Id */ 45ae115bc7Smrj #define NVIDIA_INTR_BCR_OFF 0x3C /* NV_XVR_INTR_BCR */ 46ae115bc7Smrj #define NVIDIA_INTR_BCR_SERR_FORWARD_BIT 0x02 /* SERR_FORWARD bit */ 47ae115bc7Smrj 48ae115bc7Smrj /* CK8-04 PCIe RC and LPC-PCI Bridge device IDs */ 49ae115bc7Smrj #define NVIDIA_CK804_DEVICE_ID 0x5d /* ck8-04 dev id */ 50ae115bc7Smrj #define NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID 0x50 /* LPC Default Bridge */ 51ae115bc7Smrj #define NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID 0x51 /* LPC Bridge */ 52ae115bc7Smrj #define NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID 0xd3 /* Slave LPC Bridge */ 53ae115bc7Smrj #define NVIDIA_CK804_AER_VALID_REVID 0xa3 /* RID w/ AER enabled */ 54ae115bc7Smrj 55ae115bc7Smrj #define NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) \ 56ae115bc7Smrj (((did) == NVIDIA_CK804_DEFAULT_ISA_BRIDGE_DEVID) || \ 57ae115bc7Smrj ((did) == NVIDIA_CK804_PRO_ISA_BRIDGE_DEVID) || \ 58ae115bc7Smrj ((did) == NVIDIA_CK804_SLAVE_ISA_BRIDGE_DEVID)) 59ae115bc7Smrj 60ae115bc7Smrj /* 61ae115bc7Smrj * Only for Nvidia's CrushK 8-04 chipsets: 62ae115bc7Smrj * To enable hotplug; we need to map in two I/O BARs 63ae115bc7Smrj * from ISA bridge's config space 64ae115bc7Smrj */ 65ae115bc7Smrj #define NVIDIA_CK804_ISA_SYSCTRL_BAR_OFF 0x64 /* System Control BAR */ 66ae115bc7Smrj #define NVIDIA_CK804_ISA_ANALOG_BAR_OFF 0x68 /* Analog BAR */ 67ae115bc7Smrj 68ae115bc7Smrj /* NV_XVR_VEND_CYA1 related defines */ 69ae115bc7Smrj #define NVIDIA_CK804_VEND_CYA1_OFF 0xf40 /* NV_XVR_VEND_CYA1 */ 70ae115bc7Smrj #define NVIDIA_CK804_VEND_CYA1_ERPT_VAL 0x2000 /* enable CYA1 ERPT */ 71ae115bc7Smrj #define NVIDIA_CK804_VEND_CYA1_ERPT_MASK 0xdfff /* CYA1 ERPT mask */ 72ae115bc7Smrj 73ae115bc7Smrj /* 74ae115bc7Smrj * C51 related defines 75ae115bc7Smrj */ 76ae115bc7Smrj 77ae115bc7Smrj /* C51 PCIe Root Complex Device ID defines */ 78ae115bc7Smrj #define NVIDIA_C51_DEVICE_ID_XVR16 0x2fb 79ae115bc7Smrj #define NVIDIA_C51_DEVICE_ID_XVR1_0 0x2fc 80ae115bc7Smrj #define NVIDIA_C51_DEVICE_ID_XVR1_1 0x2fd 81ae115bc7Smrj 82ae115bc7Smrj #define NVIDIA_C51_DEVICE_ID(did) \ 83ae115bc7Smrj (((did) == NVIDIA_C51_DEVICE_ID_XVR16) || \ 84ae115bc7Smrj ((did) == NVIDIA_C51_DEVICE_ID_XVR1_0) || \ 85ae115bc7Smrj ((did) == NVIDIA_C51_DEVICE_ID_XVR1_1)) 86ae115bc7Smrj 87ae115bc7Smrj /* 88ae115bc7Smrj * MCP55 related defines 89ae115bc7Smrj */ 90ae115bc7Smrj 91ae115bc7Smrj /* MCP55 PCIe Root Complex Device ID defines */ 92ae115bc7Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR4 0x374 93ae115bc7Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR8 0x375 94ae115bc7Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR8_VC1 0x376 95ae115bc7Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR16 0x377 96ae115bc7Smrj #define NVIDIA_MCP55_DEVICE_ID_XVR4_VC1 0x378 97ae115bc7Smrj 98ae115bc7Smrj #define NVIDIA_MCP55_DEVICE_ID(did) \ 99ae115bc7Smrj (((did) == NVIDIA_MCP55_DEVICE_ID_XVR4) || \ 100ae115bc7Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR8) || \ 101ae115bc7Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR16) || \ 102ae115bc7Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR4_VC1) || \ 103ae115bc7Smrj ((did) == NVIDIA_MCP55_DEVICE_ID_XVR8_VC1)) 104ae115bc7Smrj 105ae115bc7Smrj /* MCP55 LPC-PCI Bridge Device ID defines */ 106ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0 0x360 107ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1 0x361 108ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2 0x362 109ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3 0x363 110ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4 0x364 111ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5 0x365 112ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6 0x366 113ae115bc7Smrj #define NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7 0x367 114ae115bc7Smrj 115ae115bc7Smrj #define NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did) \ 116ae115bc7Smrj (((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP0) || \ 117ae115bc7Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP1) || \ 118ae115bc7Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP2) || \ 119ae115bc7Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP3) || \ 120ae115bc7Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP4) || \ 121ae115bc7Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP5) || \ 122ae115bc7Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP6) || \ 123ae115bc7Smrj ((did) == NVIDIA_MCP55_PCI2LPC_DEVICE_ID_OP7)) 124ae115bc7Smrj 125ae115bc7Smrj /* 126ae115bc7Smrj * MCP61 related defines 127ae115bc7Smrj */ 128ae115bc7Smrj 129ae115bc7Smrj /* MCP61 PCIe Root Complex Device ID defines */ 130ae115bc7Smrj #define NVIDIA_MCP61_DEVICE_ID_XVR4 0x3e8 131ae115bc7Smrj #define NVIDIA_MCP61_DEVICE_ID_XVR8 0x3e9 132ae115bc7Smrj 133ae115bc7Smrj #define NVIDIA_MCP61_DEVICE_ID(did) \ 134ae115bc7Smrj (((did) == NVIDIA_MCP61_DEVICE_ID_XVR4) || \ 135ae115bc7Smrj ((did) == NVIDIA_MCP61_DEVICE_ID_XVR8)) 136ae115bc7Smrj 137ae115bc7Smrj /* 138ae115bc7Smrj * MCP65 related defines 139ae115bc7Smrj */ 140ae115bc7Smrj 141ae115bc7Smrj /* MCP65 PCIe Root Complex Device ID defines */ 142ae115bc7Smrj #define NVIDIA_MCP65_DEVICE_ID_XVR4 0x458 143ae115bc7Smrj #define NVIDIA_MCP65_DEVICE_ID_XVR8 0x459 144ae115bc7Smrj #define NVIDIA_MCP65_DEVICE_ID_XVR16 0x45a 145ae115bc7Smrj 146ae115bc7Smrj #define NVIDIA_MCP65_DEVICE_ID(did) \ 147ae115bc7Smrj (((did) == NVIDIA_MCP65_DEVICE_ID_XVR4) || \ 148ae115bc7Smrj ((did) == NVIDIA_MCP65_DEVICE_ID_XVR8) || \ 149ae115bc7Smrj ((did) == NVIDIA_MCP65_DEVICE_ID_XVR16)) 150ae115bc7Smrj 151ae115bc7Smrj /* 152ae115bc7Smrj * Check if the given device is a Nvidia's LPC bridge 153ae115bc7Smrj */ 154ae115bc7Smrj #define NVIDIA_IS_LPC_BRIDGE(vid, did) \ 155ae115bc7Smrj (((vid) == NVIDIA_VENDOR_ID) && \ 156ae115bc7Smrj (NVIDIA_CK804_LPC2PCI_DEVICE_ID(did) || \ 157ae115bc7Smrj NVIDIA_MCP55_LPC2PCI_DEVICE_ID(did))) 158ae115bc7Smrj 159ae115bc7Smrj /* Check for PCIe RC Device ID */ 160ae115bc7Smrj #define NVIDIA_PCIE_RC_DEV_ID(did) \ 161ae115bc7Smrj (((did) == NVIDIA_CK804_DEVICE_ID) || \ 162ae115bc7Smrj NVIDIA_C51_DEVICE_ID(did) || \ 163ae115bc7Smrj NVIDIA_MCP55_DEVICE_ID(did) || \ 164ae115bc7Smrj NVIDIA_MCP61_DEVICE_ID(did) || \ 165ae115bc7Smrj NVIDIA_MCP65_DEVICE_ID(did)) 166ae115bc7Smrj 167ae115bc7Smrj /* 168ae115bc7Smrj * Defines to figure out what kind of hotplug is supported 169ae115bc7Smrj */ 170ae115bc7Smrj #define INBAND_HPC_NONE 0x0 /* No hotplug supported */ 171ae115bc7Smrj #define INBAND_HPC_PCIE 0x1 /* PCIe based hotplug supported */ 172ae115bc7Smrj #define INBAND_HPC_SHPC 0x2 /* SHPC based hotplug supported */ 173ae115bc7Smrj 174ae115bc7Smrj #ifdef __cplusplus 175ae115bc7Smrj } 176ae115bc7Smrj #endif 177ae115bc7Smrj 178ae115bc7Smrj #endif /* _PCIEX_PCI_NVIDIA_H */ 179