Home | History | Annotate | Download | only in hostbridge
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 
     22 /*
     23  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 #include <strings.h>
     28 
     29 #include "hb_rcid.h"
     30 
     31 /* A list of physical root complexes of the SUNW,Sun-Fire-T200 platform */
     32 prc_t t200_prcs[] = {
     33 	/* physical id, bus address */
     34 	{ 0, 0x780 },
     35 	{ 1, 0x7c0 }
     36 };
     37 
     38 /* A list of physical root complexes of the SUNW,T5140 platform */
     39 prc_t t5140_prcs[] = {
     40 	/* physical id, bus address */
     41 	{ 0, 0x400 },
     42 	{ 1, 0x500 }
     43 };
     44 
     45 
     46 pprc_t plat_prcids[] = {
     47 	/*
     48 	 * platforms that have the same map with T200
     49 	 */
     50 	{ "SUNW,Sun-Fire-T200",
     51 	    sizeof (t200_prcs) / sizeof (prc_t),
     52 	    t200_prcs },
     53 	{ "SUNW,Sun-Fire-T1000",
     54 	    sizeof (t200_prcs) / sizeof (prc_t),
     55 	    t200_prcs },
     56 	{ "SUNW,SPARC-Enterprise-T2000",
     57 	    sizeof (t200_prcs) / sizeof (prc_t),
     58 	    t200_prcs },
     59 	{ "SUNW,SPARC-Enterprise-T1000",
     60 	    sizeof (t200_prcs) / sizeof (prc_t),
     61 	    t200_prcs },
     62 	{ "SUNW,Netra-CP3060",
     63 	    sizeof (t200_prcs) / sizeof (prc_t),
     64 	    t200_prcs },
     65 	{ "SUNW,Netra-T2000",
     66 	    sizeof (t200_prcs) / sizeof (prc_t),
     67 	    t200_prcs },
     68 	{ "SUNW,Sun-Blade-T6300",
     69 	    sizeof (t200_prcs) / sizeof (prc_t),
     70 	    t200_prcs },
     71 
     72 	/*
     73 	 * platforms that have the same map with T5140
     74 	 */
     75 	{ "SUNW,T5140",
     76 	    sizeof (t5140_prcs) / sizeof (prc_t),
     77 	    t5140_prcs },
     78 	{ "SUNW,T5240",
     79 	    sizeof (t5140_prcs) / sizeof (prc_t),
     80 	    t5140_prcs },
     81 	{ "SUNW,Netra-T5440",
     82 	    sizeof (t5140_prcs) / sizeof (prc_t),
     83 	    t5140_prcs },
     84 	{ "SUNW,Sun-Blade-T6340",
     85 	    sizeof (t5140_prcs) / sizeof (prc_t),
     86 	    t5140_prcs },
     87 	{ "SUNW,USBRDT-5240",
     88 	    sizeof (t5140_prcs) / sizeof (prc_t),
     89 	    t5140_prcs }
     90 };
     91 
     92 pprcs_t prcids = {
     93 	sizeof (plat_prcids) / sizeof (pprc_t),
     94 	plat_prcids
     95 };
     96 
     97 /*
     98  * hb_find_rc_pid()
     99  * Description:
    100  *    Return the physical id (non-negative) of a root complex given the
    101  *    plaform name and its bus address.
    102  */
    103 int
    104 hb_find_rc_pid(char *platform, uint64_t ba)
    105 {
    106 	int rcid = -1;
    107 	int p, i;
    108 
    109 	for (p = 0; p < prcids.nplats; p++) {
    110 		if (strcmp(prcids.plats[p].platform, platform) != 0)
    111 			continue;
    112 		for (i = 0; i < prcids.plats[p].nrcs; i++) {
    113 			prc_t pciexrc;
    114 			pciexrc = prcids.plats[p].rcs[i];
    115 			if (pciexrc.ba == ba) {
    116 				rcid = pciexrc.id;
    117 				break;
    118 			}
    119 		}
    120 		break;
    121 	}
    122 	return (rcid);
    123 }
    124