1e762302fSShesha Sreenivasamurthy /* 2e762302fSShesha Sreenivasamurthy * CDDL HEADER START 3e762302fSShesha Sreenivasamurthy * 4e762302fSShesha Sreenivasamurthy * The contents of this file are subject to the terms of the 5e762302fSShesha Sreenivasamurthy * Common Development and Distribution License (the "License"). 6e762302fSShesha Sreenivasamurthy * You may not use this file except in compliance with the License. 7e762302fSShesha Sreenivasamurthy * 8e762302fSShesha Sreenivasamurthy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9e762302fSShesha Sreenivasamurthy * or http://www.opensolaris.org/os/licensing. 10e762302fSShesha Sreenivasamurthy * See the License for the specific language governing permissions 11e762302fSShesha Sreenivasamurthy * and limitations under the License. 12e762302fSShesha Sreenivasamurthy * 13e762302fSShesha Sreenivasamurthy * When distributing Covered Code, include this CDDL HEADER in each 14e762302fSShesha Sreenivasamurthy * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15e762302fSShesha Sreenivasamurthy * If applicable, add the following below this CDDL HEADER, with the 16e762302fSShesha Sreenivasamurthy * fields enclosed by brackets "[]" replaced with your own identifying 17e762302fSShesha Sreenivasamurthy * information: Portions Copyright [yyyy] [name of copyright owner] 18e762302fSShesha Sreenivasamurthy * 19e762302fSShesha Sreenivasamurthy * CDDL HEADER END 20e762302fSShesha Sreenivasamurthy */ 21e762302fSShesha Sreenivasamurthy /* 22*3d78e6abSAlan Adamson, SD OSSD * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 23e762302fSShesha Sreenivasamurthy */ 24e762302fSShesha Sreenivasamurthy 25e762302fSShesha Sreenivasamurthy #include <sys/types.h> 26e762302fSShesha Sreenivasamurthy #include <sys/ddi.h> 27e762302fSShesha Sreenivasamurthy #include <sys/sunddi.h> 28e762302fSShesha Sreenivasamurthy #include <sys/sunndi.h> 29e762302fSShesha Sreenivasamurthy #include <sys/pcie_impl.h> 30e762302fSShesha Sreenivasamurthy #include <sys/pcie_pwr.h> 31e762302fSShesha Sreenivasamurthy 32e762302fSShesha Sreenivasamurthy void 33e762302fSShesha Sreenivasamurthy pcie_init_plat(dev_info_t *dip) 34e762302fSShesha Sreenivasamurthy { 35*3d78e6abSAlan Adamson, SD OSSD pcie_bus_t *bus_p = PCIE_DIP2BUS(dip); 36*3d78e6abSAlan Adamson, SD OSSD 37*3d78e6abSAlan Adamson, SD OSSD if (PCIE_IS_PCIE_BDG(bus_p)) { 38*3d78e6abSAlan Adamson, SD OSSD bus_p->bus_pcie2pci_secbus = bus_p->bus_bdg_secbus; 39*3d78e6abSAlan Adamson, SD OSSD } else { 40*3d78e6abSAlan Adamson, SD OSSD dev_info_t *pdip; 41*3d78e6abSAlan Adamson, SD OSSD 42*3d78e6abSAlan Adamson, SD OSSD for (pdip = ddi_get_parent(dip); pdip; 43*3d78e6abSAlan Adamson, SD OSSD pdip = ddi_get_parent(pdip)) { 44*3d78e6abSAlan Adamson, SD OSSD pcie_bus_t *parent_bus_p = PCIE_DIP2BUS(pdip); 45*3d78e6abSAlan Adamson, SD OSSD 46*3d78e6abSAlan Adamson, SD OSSD if (parent_bus_p->bus_pcie2pci_secbus) { 47*3d78e6abSAlan Adamson, SD OSSD bus_p->bus_pcie2pci_secbus = 48*3d78e6abSAlan Adamson, SD OSSD parent_bus_p->bus_pcie2pci_secbus; 49*3d78e6abSAlan Adamson, SD OSSD break; 50*3d78e6abSAlan Adamson, SD OSSD } 51*3d78e6abSAlan Adamson, SD OSSD if (PCIE_IS_ROOT(parent_bus_p)) 52*3d78e6abSAlan Adamson, SD OSSD break; 53*3d78e6abSAlan Adamson, SD OSSD } 54*3d78e6abSAlan Adamson, SD OSSD } 55e762302fSShesha Sreenivasamurthy } 56e762302fSShesha Sreenivasamurthy 57e762302fSShesha Sreenivasamurthy void 58e762302fSShesha Sreenivasamurthy pcie_fini_plat(dev_info_t *dip) 59e762302fSShesha Sreenivasamurthy { 60*3d78e6abSAlan Adamson, SD OSSD pcie_bus_t *bus_p = PCIE_DIP2BUS(dip); 61*3d78e6abSAlan Adamson, SD OSSD 62*3d78e6abSAlan Adamson, SD OSSD if (PCIE_IS_PCIE_BDG(bus_p)) 63*3d78e6abSAlan Adamson, SD OSSD bus_p->bus_pcie2pci_secbus = 0; 64e762302fSShesha Sreenivasamurthy } 65e762302fSShesha Sreenivasamurthy 66e762302fSShesha Sreenivasamurthy int 67e762302fSShesha Sreenivasamurthy pcie_plat_pwr_setup(dev_info_t *dip) 68e762302fSShesha Sreenivasamurthy { 69e762302fSShesha Sreenivasamurthy if (ddi_prop_create(DDI_DEV_T_NONE, dip, DDI_PROP_CANSLEEP, 70e762302fSShesha Sreenivasamurthy "pm-want-child-notification?", NULL, NULL) != DDI_PROP_SUCCESS) { 71e762302fSShesha Sreenivasamurthy PCIE_DBG("%s(%d): can't create pm-want-child-notification \n", 72e762302fSShesha Sreenivasamurthy ddi_driver_name(dip), ddi_get_instance(dip)); 73e762302fSShesha Sreenivasamurthy return (DDI_FAILURE); 74e762302fSShesha Sreenivasamurthy } 75e762302fSShesha Sreenivasamurthy return (DDI_SUCCESS); 76e762302fSShesha Sreenivasamurthy } 77e762302fSShesha Sreenivasamurthy 78e762302fSShesha Sreenivasamurthy /* 79e762302fSShesha Sreenivasamurthy * Undo whatever is done in pcie_plat_pwr_common_setup 80e762302fSShesha Sreenivasamurthy */ 81e762302fSShesha Sreenivasamurthy void 82e762302fSShesha Sreenivasamurthy pcie_plat_pwr_teardown(dev_info_t *dip) 83e762302fSShesha Sreenivasamurthy { 84e762302fSShesha Sreenivasamurthy (void) ddi_prop_remove(DDI_DEV_T_NONE, dip, 85e762302fSShesha Sreenivasamurthy "pm-want-child-notification?"); 86e762302fSShesha Sreenivasamurthy } 87