open-src/lib/libpciaccess/sparc_domain.patch
author henryzh <henry.zhao@oracle.com>
Mon, 18 Feb 2013 17:09:57 -0800
changeset 1331 363b660cd161
permissions -rw-r--r--
15968765 libpciaccess: add domain support for sparc platform
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1331
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     1
--- a/src/solx_devfs.c	Fri Feb 15 12:42:00 2013
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     2
+++ b/src/solx_devfs.c	Fri Feb 15 12:39:04 2013
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     3
@@ -1,6 +1,6 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     4
 /*
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     5
  * (C) Copyright IBM Corporation 2006
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     6
- * Copyright (c) 2007, 2009, 2011, 2012, Oracle and/or its affiliates.
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     7
+ * Copyright (c) 2007, 2009, 2011, 2012, 2013 Oracle and/or its affiliates.
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     8
  * All Rights Reserved.
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
     9
  *
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    10
  * Permission is hereby granted, free of charge, to any person obtaining a
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    11
@@ -71,11 +71,6 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    12
     char *path;			/* for errors/debugging; fd is all we need */
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    13
     char *dev_path;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    14
     struct nexus *next;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    15
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    16
-    size_t *devlist;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    17
-    volatile size_t num_allocated_elems;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    18
-    volatile size_t num_devices;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    19
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    20
 } nexus_t;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    21
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    22
 typedef struct probe_info {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    23
@@ -102,6 +97,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    24
 static bdf_table_info_t *bdf_table = NULL;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    25
 static size_t  num_bdfs = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    26
 static size_t  num_allocated_bdfs = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    27
+static size_t  nexus_count = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    28
 #endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    29
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    30
 /*
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    31
@@ -142,24 +138,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    32
 # define U45_SB_CLASS_RID	0x06040000
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    33
 #endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    34
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    35
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    36
 static nexus_t *
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    37
-find_nexus_for_dev(struct pci_device *dev)
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    38
-{
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    39
-    nexus_t *nexus;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    40
-    int i;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    41
-
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    42
-    for (nexus = nexus_list ; nexus != NULL ; nexus = nexus->next) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    43
-	for (i = 0; i < nexus->num_devices; i++) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    44
-	    size_t dev_idx = nexus->devlist[i];
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    45
-	    if (&pci_sys->devices[dev_idx].base == dev)
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    46
-		return nexus;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    47
-	}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    48
-    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    49
-    return NULL;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    50
-}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    51
-#else
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    52
-static nexus_t *
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    53
 find_nexus_for_bus( int domain, int bus )
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    54
 {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    55
     nexus_t *nexus;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    56
@@ -172,7 +151,6 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    57
     }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    58
     return NULL;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    59
 }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    60
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    61
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    62
 #define GET_CONFIG_VAL_8(offset) (config_hdr.bytes[offset])
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    63
 #define GET_CONFIG_VAL_16(offset) \
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    64
@@ -202,20 +180,6 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    65
 	close(nexus->fd);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    66
 	free(nexus->path);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    67
 	free(nexus->dev_path);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    68
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    69
-	{
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    70
-	    struct pci_device *dev;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    71
-	    int i;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    72
-
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    73
-	    for (i = 0; i < nexus->num_devices; i++) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    74
-		size_t dev_idx = nexus->devlist[i];
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    75
-		dev = &pci_sys->devices[dev_idx].base;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    76
-		if (MAPPING_DEV_PATH(dev))
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    77
-		    di_devfs_path_free((char *) MAPPING_DEV_PATH(dev));
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    78
-	    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    79
-	}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    80
-	free(nexus->devlist);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    81
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    82
 	free(nexus);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    83
     }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    84
     nexus_list = NULL;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    85
@@ -231,7 +195,21 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    86
 #endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    87
 }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    88
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    89
+
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    90
+#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    91
 /*
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    92
+ * Release resources per device
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    93
+ */
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    94
+static void
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    95
+pci_system_solx_devfs_destroy_device( struct pci_device *dev )
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    96
+{
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    97
+   if (MAPPING_DEV_PATH(dev))
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    98
+	di_devfs_path_free((char *) MAPPING_DEV_PATH(dev));
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
    99
+}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   100
+#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   101
+
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   102
+
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   103
+/*
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   104
  * Retrieve first 16 dwords of device's config header, except for the first
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   105
  * dword.  First 16 dwords are defined by the PCI specification.
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   106
  */
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   107
@@ -456,8 +434,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   108
 	     * function number.
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   109
 	     */
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   110
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   111
-	    size_t dev_idx = pinfo->num_devices;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   112
-	    pci_base = &pinfo->devices[dev_idx].base;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   113
+	    pci_base = &pinfo->devices[pinfo->num_devices].base;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   114
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   115
 	    pci_base->domain = nexus->domain;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   116
 	    pci_base->bus = prg_p->bus_no;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   117
@@ -480,7 +457,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   118
 	    pci_base->subdevice_id 	= GET_CONFIG_VAL_16(PCI_CONF_SUBSYSID);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   119
 	    pci_base->irq		= GET_CONFIG_VAL_8(PCI_CONF_ILINE);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   120
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   121
-	    pinfo->devices[dev_idx].header_type
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   122
+	    pinfo->devices[pinfo->num_devices].header_type
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   123
 					= GET_CONFIG_VAL_8(PCI_CONF_HEADER);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   124
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   125
 #ifdef DEBUG
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   126
@@ -510,25 +487,6 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   127
 		pinfo->devices = new_devs;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   128
 	    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   129
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   130
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   131
-	    nexus->devlist[nexus->num_devices++] = dev_idx;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   132
-
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   133
-	    if (nexus->num_devices == nexus->num_allocated_elems) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   134
-		size_t *new_devs;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   135
-		size_t new_num_elems = nexus->num_allocated_elems * 2;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   136
-
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   137
-		new_devs = realloc(nexus->devlist,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   138
-			new_num_elems * sizeof (size_t *));
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   139
-		if (new_devs == NULL)
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   140
-		    return (rval);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   141
-		(void) memset(&new_devs[nexus->num_devices], 0,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   142
-			nexus->num_allocated_elems *
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   143
-			sizeof (size_t *));
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   144
-		nexus->num_allocated_elems = new_num_elems;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   145
-		nexus->devlist = new_devs;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   146
-	    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   147
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   148
-
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   149
 	    /*
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   150
 	     * Accommodate devices which state their
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   151
 	     * multi-functionality only in their function 0 config
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   152
@@ -671,6 +629,9 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   153
 #endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   154
 	    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   155
 	}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   156
+#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   157
+	domain = nexus_count;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   158
+#else
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   159
 	else if (strcmp(prop_name, "pciseg") == 0) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   160
 	    numval = di_prop_ints(prop, &ints);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   161
 	    if (numval == 1) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   162
@@ -677,6 +638,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   163
 		domain = ints[0];
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   164
 	    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   165
 	}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   166
+#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   167
     }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   168
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   169
 #ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   170
@@ -716,15 +678,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   171
     nexus->domain = domain;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   172
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   173
 #ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   174
-    if ((nexus->devlist = calloc(INITIAL_NUM_DEVICES,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   175
-			sizeof (size_t *))) == NULL) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   176
-	(void) fprintf(stderr, "Error allocating memory for nexus devlist: %s\n",
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   177
-                       strerror(errno));
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   178
-	free (nexus);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   179
-	return (DI_WALK_TERMINATE);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   180
-    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   181
-    nexus->num_allocated_elems = INITIAL_NUM_DEVICES;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   182
-    nexus->num_devices = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   183
+    nexus_count++;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   184
 #endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   185
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   186
     nexus_name = di_devfs_minor_path(minor);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   187
@@ -875,11 +829,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   188
 	(struct pci_device_private *) dev;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   189
     nexus_t *nexus;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   190
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   191
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   192
-    if ( (nexus = find_nexus_for_dev(dev)) == NULL )
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   193
-#else
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   194
     if ( (nexus = find_nexus_for_bus(dev->domain, dev->bus)) == NULL )
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   195
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   196
 	return ENODEV;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   197
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   198
     /*
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   199
@@ -1119,11 +1069,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   200
     int i = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   201
     nexus_t *nexus;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   202
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   203
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   204
-    nexus = find_nexus_for_dev(dev);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   205
-#else
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   206
     nexus = find_nexus_for_bus(dev->domain, dev->bus);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   207
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   208
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   209
     *bytes_read = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   210
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   211
@@ -1177,11 +1123,7 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   212
     int cmd;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   213
     nexus_t *nexus;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   214
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   215
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   216
-    nexus = find_nexus_for_dev(dev);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   217
-#else
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   218
     nexus = find_nexus_for_bus(dev->domain, dev->bus);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   219
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   220
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   221
     if ( bytes_written != NULL ) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   222
 	*bytes_written = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   223
@@ -1366,7 +1308,11 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   224
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   225
 static const struct pci_system_methods solx_devfs_methods = {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   226
     .destroy = pci_system_solx_devfs_destroy,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   227
+#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   228
+    .destroy_device = pci_system_solx_devfs_destroy_device,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   229
+#else
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   230
     .destroy_device = NULL,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   231
+#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   232
     .read_rom = pci_device_solx_devfs_read_rom,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   233
     .probe = pci_device_solx_devfs_probe,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   234
     .map_range = pci_device_solx_devfs_map_range,
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   235
@@ -1427,6 +1373,9 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   236
     pinfo.num_allocated_elems = INITIAL_NUM_DEVICES;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   237
     pinfo.num_devices = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   238
     pinfo.devices = devices;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   239
+#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   240
+    nexus_count = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   241
+#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   242
     (void) di_walk_minor(di_node, DDI_NT_REGACC, 0, &pinfo, probe_nexus_node);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   243
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   244
     di_fini(di_node);
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   245
--- a/src/common_init.c	Fri Dec 14 15:50:20 2012
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   246
+++ b/src/common_init.c	Fri Dec 14 15:50:35 2012
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   247
@@ -112,22 +112,14 @@
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   248
 	    }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   249
 	}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   250
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   251
-#ifdef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   252
-	if ( pci_sys->methods->destroy != NULL ) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   253
-	    (*pci_sys->methods->destroy)();
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   254
-	}
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   255
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   256
-
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   257
 	free( pci_sys->devices );
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   258
 	pci_sys->devices = NULL;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   259
 	pci_sys->num_devices = 0;
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   260
     }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   261
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   262
-#ifndef __sparc
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   263
     if ( pci_sys->methods->destroy != NULL ) {
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   264
 	(*pci_sys->methods->destroy)();
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   265
     }
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   266
-#endif
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   267
 
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   268
     free( pci_sys );
363b660cd161 15968765 libpciaccess: add domain support for sparc platform
henryzh <henry.zhao@oracle.com>
parents:
diff changeset
   269
     pci_sys = NULL;