]> git.pld-linux.org Git - packages/X11.git/commitdiff
sparc specyfic changed ifor PCI domain (by David S. Miller) - patch from Debian.
authorkloczek <kloczek@pld-linux.org>
Mon, 3 Sep 2001 23:31:50 +0000 (23:31 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    XFree86-sparc_pci_domains.patch -> 1.1

XFree86-sparc_pci_domains.patch [new file with mode: 0644]

diff --git a/XFree86-sparc_pci_domains.patch b/XFree86-sparc_pci_domains.patch
new file mode 100644 (file)
index 0000000..9a045c1
--- /dev/null
@@ -0,0 +1,1728 @@
+This patch by David S. Miller.
+
+--- XFree86-4.1.0/xc/config/cf/linux.cf.~1~    Sun Jun  3 19:44:40 2001
++++ XFree86-4.1.0/xc/config/cf/linux.cf        Sun Jun  3 19:44:48 2001
+@@ -720,7 +720,7 @@
+ # endif
+ # define LinuxMachineDefines  -D__sparc__
+ # define ServerOSDefines      XFree86ServerOSDefines -DDDXTIME -DPART_NET
+-# define ServerExtraDefines   -DGCCUSESGAS XFree86ServerDefines
++# define ServerExtraDefines   -DHAVE_DOMAINS -DGCCUSESGAS XFree86ServerDefines
+ # define AsVISOption          -Av9a
+ # ifdef Sparc64Architecture
+ #  define AsOutputArchSize    64
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86.h.~1~     Sun Jun  3 19:44:40 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86.h Sun Jun  3 19:44:48 2001
+@@ -121,10 +121,18 @@
+ resPtr xf86ReallocatePciResources(int entityIndex, resPtr pRes);
+ resPtr xf86SetOperatingState(resList list, int entityIndex, int mask);
+ void xf86EnterServerState(xf86State state);
+-resRange xf86GetBlock(long type, memType size,
++resRange xf86GetBlock(long type,
++#ifdef HAVE_DOMAINS
++                    int domain,
++#endif
++                    memType size,
+                     memType window_start, memType window_end,
+                     memType align_mask, resPtr avoid);
+-resRange xf86GetSparse(long type,  memType fixed_bits,
++resRange xf86GetSparse(long type,
++#ifdef HAVE_DOMAINS
++                     int domain,
++#endif
++                     memType fixed_bits,
+                      memType decode_mask, memType address_mask,
+                      resPtr avoid);
+ memType xf86ChkConflict(resRange *rgp, int entityIndex);
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86Bus.c.~1~  Sun Jun  3 19:44:40 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86Bus.c      Sun Jun  3 19:44:48 2001
+@@ -393,6 +393,9 @@
+     resPtr res = Acc;
+     while (res) {
++      /* NOTE: Assumes that entities live inside of a single
++       * domain.
++       */
+       if (res->entityIndex == entityIndex &&
+           (type & ResAccMask & res->res_type))
+       {
+@@ -895,6 +898,14 @@
+     memType val,tmp,prev;
+     int i;
+     
++#ifdef HAVE_DOMAINS
++    /* A resource cannot conflict with a range in a different
++     * domain.
++     */
++    if (pRes->res_domain != range->domain)
++      return 0;
++#endif
++
+     switch (pRes->res_type & ResExtMask) {
+     case ResBlock:
+       if (range->rBegin < pRes->block_end &&
+@@ -953,6 +964,14 @@
+     memType val, tmp, prev;
+     int i;
+     
++#ifdef HAVE_DOMAINS
++    /* A resource cannot conflict with a range in a different
++     * domain.
++     */
++    if (pRes->res_domain != range->domain)
++      return 0;
++#endif
++
+     switch (pRes->res_type & ResExtMask) {
+     case ResSparse:
+       tmp = pRes->sparse_mask & range->rMask;
+@@ -1020,7 +1039,7 @@
+  * depending on the types of the resource ranges and their locations
+  */
+ static Bool
+-needCheck(resPtr pRes, long type, int entityIndex, xf86State state)
++needCheck(resPtr pRes, long type, int domain, int entityIndex, xf86State state)
+ {
+     /* the same entity shouldn't conflict with itself */
+     ScrnInfoPtr pScrn;
+@@ -1031,6 +1050,14 @@
+     if (!(pRes->res_type & type & ResPhysMask)) 
+         return FALSE;
++#ifdef HAVE_DOMAINS
++    /* A resource cannot conflict with something in a different
++     * domain.
++     */
++    if (pRes->res_domain != domain)
++      return FALSE;
++#endif
++
+     /*
+      * Resources set by BIOS (ResBios) are allowed to conflict
+      * with resources marked (ResBios).
+@@ -1111,7 +1138,11 @@
+     memType ret;
+     
+     while(pRes) {
+-      if (!needCheck(pRes,rgp->type, entityIndex ,state)) { 
++      int domain = 0;
++#ifdef HAVE_DOMAINS
++      domain = rgp->domain;
++#endif
++      if (!needCheck(pRes,rgp->type,domain,entityIndex,state)) { 
+           pRes = pRes->next;                    
+           continue;                             
+       }
+@@ -1274,16 +1305,20 @@
+     while (1) {
+       while (list) {
+           if ((list->res_type & ResPhysMask) == type) {
++              int domain = 0;
++#ifdef HAVE_DOMAINS
++              domain = list->res_domain;
++#endif
+               switch (list->res_type & ResExtMask) {
+               case ResBlock:
+-                  xf86ErrorFVerb(verb, "\t[%d] %d\t0x%08x - 0x%08x (0x%x)",
+-                                 i, list->entityIndex, list->block_begin,
++                  xf86ErrorFVerb(verb, "\t[%d] %d %x\t0x%08x - 0x%08x (0x%x)",
++                                 i, list->entityIndex, domain, list->block_begin,
+                                  list->block_end,
+                                  list->block_end - list->block_begin + 1);
+                   break;
+               case ResSparse:
+-                  xf86ErrorFVerb(verb, "\t[%d] %d\t0x%08x - 0x%08x ",
+-                                 i, list->entityIndex,
++                  xf86ErrorFVerb(verb, "\t[%d] %d %x\t0x%08x - 0x%08x ",
++                                 i, list->entityIndex, domain,
+                                  list->sparse_base,list->sparse_mask);
+                   break;
+               default:
+@@ -1408,6 +1443,9 @@
+       if (pRes != target
+           && ((pRes->res_type & ResPhysMask) ==
+               (target->res_type & ResPhysMask))
++#ifdef HAVE_DOMAINS
++          && pRes->res_domain == target->res_domain
++#endif
+           && pRes->block_begin <= target->block_end
+           && pRes->block_end >= target->block_begin) {
+           /* Possibly ignore estimated resources */
+@@ -1460,12 +1498,16 @@
+ #define ALIGN(x,a) ((x) + a) &~(a)
+ resRange 
+-xf86GetBlock(long type, memType size,
++xf86GetBlock(long type,
++#ifdef HAVE_DOMAINS
++       int domain,
++#endif
++       memType size,
+        memType window_start, memType window_end,
+        memType align_mask, resPtr avoid)
+ {
+     memType min, max, tmp;
+-    resRange r = {ResEnd,0,0};
++    resRange r = _END;
+     resPtr res_range = ResRange;
+     
+     if (!size) return r;
+@@ -1478,7 +1520,11 @@
+     type = (type & ~(ResExtMask | ResBios | ResEstimated)) | ResBlock;
+     
+     while (res_range) {
+-      if (type & res_range->res_type & ResPhysMask) {
++      if ((type & res_range->res_type & ResPhysMask)
++#ifdef HAVE_DOMAINS
++          && (domain == res_range->res_domain)
++#endif
++              ) {
+           if (res_range->block_begin > window_start)
+               min = res_range->block_begin;
+           else
+@@ -1490,7 +1536,7 @@
+           min = ALIGN(min,align_mask);
+           /* do not produce an overflow! */
+           while (min < max && (max - min) >= (size - 1)) {
+-              RANGE(r,min,min + size - 1,type);
++              RANGE(r,min,min + size - 1,type,domain);
+               tmp = ChkConflict(&r,Acc,SETUP);
+               if (!tmp) {
+                   tmp = ChkConflict(&r,avoid,SETUP);
+@@ -1503,7 +1549,7 @@
+       }
+       res_range = res_range->next;
+     }
+-    RANGE(r,0,0,ResEnd);
++    RANGE(r,0,0,ResEnd,domain);
+     return r;
+ }
+@@ -1557,10 +1603,14 @@
+ }
+ resRange
+-xf86GetSparse(long type,  memType fixed_bits,
++xf86GetSparse(long type,
++#ifdef HAVE_DOMAINS
++        int domain,
++#endif
++        memType fixed_bits,
+         memType decode_mask, memType address_mask, resPtr avoid)
+ {
+-    resRange r = {ResEnd,0,0};
++    resRange r = _END;
+     memType new_mask;
+     memType mask1;
+     memType base;
+@@ -1602,7 +1652,7 @@
+      */
+     while (1) {
+       base = make_base(counter,new_mask) | fixed_bits;
+-      RANGE(r,base,address_mask,type);
++      RANGE(r,base,address_mask,type,domain);
+       conflict = ChkConflict(&r,Acc,SETUP);
+       if (!conflict) {
+           conflict = ChkConflict(&r,avoid,SETUP);
+@@ -1617,7 +1667,7 @@
+       if (counter > max_counter) break;
+     }
+     if (!new_mask && (new_mask == decode_mask)) {
+-      RANGE(r,0,0,ResEnd);
++      RANGE(r,0,0,ResEnd,domain);
+       return r;
+     }
+     /*
+@@ -1640,7 +1690,7 @@
+       counter1 = 0;
+       while (1) {
+           base = make_base(counter1,mask1);
+-          RANGE(r,base,address_mask,type);
++          RANGE(r,base,address_mask,type,domain);
+           conflict = ChkConflict(&r,Acc,SETUP);
+           if (!conflict) {
+               conflict = ChkConflict(&r,avoid,SETUP);
+@@ -1655,7 +1705,7 @@
+       counter ++;
+       if (counter > max_counter) break;
+     }
+-    RANGE(r,0,0,ResEnd);
++    RANGE(r,0,0,ResEnd,domain);
+     return r;
+ }
+@@ -2686,6 +2736,9 @@
+     int i = 0;
+     
+     new.type = (range.type & ~ResExtMask) | ResSparse;
++#ifdef HAVE_DOMAINS
++    new.domain = range.domain;
++#endif
+     while (1) {
+       if (val & 0x01) {
+@@ -2726,7 +2779,11 @@
+     
+     if (list1) {
+       list = list1;
+-      if (range.type & list->res_type & ResPhysMask) {
++      if ((range.type & list->res_type & ResPhysMask)
++#ifdef HAVE_DOMAINS
++          && (range.domain == list->res_domain)
++#endif
++              ) {
+           switch (range.type & ResExtMask) {
+           case ResBlock:
+               if ((list->res_type & ResExtMask) == ResBlock) {
+@@ -2736,21 +2793,21 @@
+                   else if (range.rBegin < list->block_begin
+                            && range.rEnd > list->block_end) {
+                       RANGE(range1, range.rBegin, list->block_begin - 1,
+-                            range.type);
++                            range.type, range.domain);
+                       RANGE(range2, list->block_end + 1, range.rEnd,
+-                            range.type);
++                            range.type, range.domain);
+                       return (x_isSubsetOf(range1,list->next,list2) &&
+                               x_isSubsetOf(range2,list->next,list2));
+                   }
+                   else if (range.rBegin >= list->block_begin
+                            && range.rBegin <= list->block_end) {
+                       RANGE(range1, list->block_end + 1, range.rEnd,
+-                            range.type);
++                            range.type, range.domain);
+                       return (x_isSubsetOf(range1,list->next,list2));
+                   } else if (range.rEnd >= list->block_begin
+                              && range.rEnd <= list->block_end) {
+                       RANGE(range1,range.rBegin, list->block_begin - 1,
+-                            range.type);
++                            range.type, range.domain);
+                       return (x_isSubsetOf(range1,list->next,list2));
+                   } 
+               }
+@@ -2791,7 +2848,7 @@
+                                 | ((~list->sparse_base & list->sparse_mask)
+                                    & ~range.rMask)) & range1.rMask,
+                                 ((range.rMask | list->sparse_mask) & ~test)
+-                                | (1 << i), range.type);
++                                | (1 << i), range.type, range.domain);
+                           return (x_isSubsetOf(range1,list->next,list2));
+                       }
+                   }
+@@ -2885,7 +2942,11 @@
+     resPtr new = NULL;
+     
+     while (list) {
+-          if (Range.type & list->res_type & ResPhysMask) {
++          if ((Range.type & list->res_type & ResPhysMask)
++#ifdef HAVE_DOMAINS
++              && (Range.domain == list->res_domain)
++#endif
++                  ) {
+               switch (Range.type & ResExtMask) {
+               case ResBlock:
+                   switch (list->res_type & ResExtMask) {
+@@ -2900,6 +2961,9 @@
+                           range.rEnd = list->block_end;
+                       if (range.rEnd > range.rBegin) {
+                           range.type = Range.type;
++#ifdef HAVE_DOMAINS
++                          range.domain = Range.domain;
++#endif
+                           new = xf86AddResToList(new,&range,-1);
+                       }
+                       break;
+@@ -2917,7 +2981,7 @@
+                                 | (~range.rMask & list->sparse_base)
+                                 | (~list->sparse_mask & range.rBase),
+                                 range.rMask | list->sparse_mask,
+-                                Range.type);
++                                Range.type, Range.domain);
+                           new = xf86AddResToList(new,&range,-1);
+                       }
+                       break;
+@@ -2956,11 +3020,11 @@
+     switch (Range.type & ResExtMask) {
+     case ResBlock:
+       if (Range.rBegin > 0) {
+-          RANGE(range, 0, Range.rBegin - 1, Range.type);
++          RANGE(range, 0, Range.rBegin - 1, Range.type,Range.domain);
+           new = xf86AddResToList(new,&range,-1);
+       }
+       if (Range.rEnd < (memType)~0) {
+-          RANGE(range,Range.rEnd + 1, (memType)~0, Range.type);
++          RANGE(range,Range.rEnd + 1, (memType)~0, Range.type, Range.domain);
+           new = xf86AddResToList(new,&range,-1);
+       }
+       break;
+@@ -2968,7 +3032,7 @@
+       tmp = Range.rMask;
+       for (i = 0; i < sizeof(memType); i++) {
+           if (tmp & 0x1) {
+-              RANGE(range,(~Range.rMask & range.rMask),(1 << i), Range.type);
++              RANGE(range,(~Range.rMask & range.rMask),(1 << i), Range.type, Range.domain);
+               new = xf86AddResToList(new,&range,-1);
+           }
+       }
+@@ -2991,6 +3055,21 @@
+     }
+     return ret;
+ }
++
++#ifdef HAVE_DOMAINS
++resPtr
++xf86ExtractDomainFromList(resPtr list, unsigned int domain)
++{
++    resPtr ret = NULL;
++    
++    while (list) {
++      if (list->res_domain == domain)
++          ret = xf86AddResToList(ret,&(list->val),list->entityIndex);
++      list = list->next;
++    }
++    return ret;
++}
++#endif
+ /*------------------------------------------------------------*/
+ static void CheckGenericGA(void);
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86Bus.h.~1~  Sun Jun  3 19:44:40 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86Bus.h      Sun Jun  3 19:44:48 2001
+@@ -123,6 +123,9 @@
+ Bool xf86IsSubsetOf(resRange range, resPtr list);
+ Bool xf86IsListSubsetOf(resPtr list, resPtr BaseList);
+ resPtr xf86ExtractTypeFromList(resPtr list, unsigned long type);
++#ifdef HAVE_DOMAINS
++resPtr xf86ExtractDomainFromList(resPtr list, unsigned int domain);
++#endif
+ resPtr findIntersect(resRange Range, resPtr list);
+ resPtr xf86FindIntersect(resRange Range, resPtr list);
+ void RemoveOverlaps(resPtr target, resPtr list, Bool pow2Alignment,
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86Resources.h~       Tue Jul 31 23:17:31 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86Resources.h        Tue Jul 31 23:17:33 2001
+@@ -6,78 +6,84 @@
+ #include "xf86str.h"
+-#define _END {ResEnd,0,0}
++#ifdef HAVE_DOMAINS
++#define DEFAULT_DOMAIN        0,
++#else
++#define DEFAULT_DOMAIN        /**/
++#endif
++
++#define _END {ResEnd, DEFAULT_DOMAIN 0,0}
+ #define _VGA_EXCLUSIVE \
+-              {ResExcMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
+-              {ResExcMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
+-              {ResExcMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
+-              {ResExcIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
+-              {ResExcIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
++              {ResExcMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000A0000, 0x000AFFFF},\
++              {ResExcMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B0000, 0x000B7FFF},\
++              {ResExcMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B8000, 0x000BFFFF},\
++              {ResExcIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03B0,     0x03BB},\
++              {ResExcIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03C0,     0x03DF}
+ #define _VGA_SHARED \
+-              {ResShrMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
+-              {ResShrMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
+-              {ResShrMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
+-              {ResShrIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
+-              {ResShrIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
++              {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000A0000, 0x000AFFFF},\
++              {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B0000, 0x000B7FFF},\
++              {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B8000, 0x000BFFFF},\
++              {ResShrIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03B0,     0x03BB},\
++              {ResShrIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03C0,     0x03DF}
+ #define _VGA_SHARED_MEM \
+-              {ResShrMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
+-              {ResShrMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
+-              {ResShrMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF}
++              {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000A0000, 0x000AFFFF},\
++              {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B0000, 0x000B7FFF},\
++              {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B8000, 0x000BFFFF}
+ #define _VGA_SHARED_IO \
+-              {ResShrIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
+-              {ResShrIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
++              {ResShrIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03B0,     0x03BB},\
++              {ResShrIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03C0,     0x03DF}
+ /*
+  * Exclusive unused VGA:  resources unneeded but cannot be disabled.
+  * Like old Millennium.
+  */
+ #define _VGA_EXCLUSIVE_UNUSED \
+-      {ResExcUusdMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
+-      {ResExcUusdMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
+-      {ResExcUusdMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
+-      {ResExcUusdIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
+-      {ResExcUusdIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
++      {ResExcUusdMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000A0000, 0x000AFFFF},\
++      {ResExcUusdMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B0000, 0x000B7FFF},\
++      {ResExcUusdMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B8000, 0x000BFFFF},\
++      {ResExcUusdIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03B0,     0x03BB},\
++      {ResExcUusdIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03C0,     0x03DF}
+ /*
+  * Shared unused VGA:  resources unneeded but cannot be disabled
+  * independently.  This is used to determine if a device needs RAC.
+  */
+ #define _VGA_SHARED_UNUSED \
+-      {ResShrUusdMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
+-      {ResShrUusdMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
+-      {ResShrUusdMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
+-      {ResShrUusdIoBlock  | ResBios | ResBus,     0x03B0,     0x03BB},\
+-      {ResShrUusdIoBlock  | ResBios | ResBus,     0x03C0,     0x03DF}
++      {ResShrUusdMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000A0000, 0x000AFFFF},\
++      {ResShrUusdMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B0000, 0x000B7FFF},\
++      {ResShrUusdMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B8000, 0x000BFFFF},\
++      {ResShrUusdIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03B0,     0x03BB},\
++      {ResShrUusdIoBlock  | ResBios | ResBus, DEFAULT_DOMAIN     0x03C0,     0x03DF}
+ /*
+  * Sparse versions of the above for those adapters that respond to all ISA
+  * aliases of VGA ports.
+  */
+ #define _VGA_EXCLUSIVE_SPARSE \
+-      {ResExcMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
+-      {ResExcMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
+-      {ResExcMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
+-      {ResExcIoSparse | ResBios | ResBus,     0x03B0,     0x03F8},\
+-      {ResExcIoSparse | ResBios | ResBus,     0x03B8,     0x03FC},\
+-      {ResExcIoSparse | ResBios | ResBus,     0x03C0,     0x03E0}
++      {ResExcMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000A0000, 0x000AFFFF},\
++      {ResExcMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B0000, 0x000B7FFF},\
++      {ResExcMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B8000, 0x000BFFFF},\
++      {ResExcIoSparse | ResBios | ResBus, DEFAULT_DOMAIN     0x03B0,     0x03F8},\
++      {ResExcIoSparse | ResBios | ResBus, DEFAULT_DOMAIN     0x03B8,     0x03FC},\
++      {ResExcIoSparse | ResBios | ResBus, DEFAULT_DOMAIN     0x03C0,     0x03E0}
+ #define _VGA_SHARED_SPARSE \
+-      {ResShrMemBlock | ResBios | ResBus, 0x000A0000, 0x000AFFFF},\
+-      {ResShrMemBlock | ResBios | ResBus, 0x000B0000, 0x000B7FFF},\
+-      {ResShrMemBlock | ResBios | ResBus, 0x000B8000, 0x000BFFFF},\
+-      {ResShrIoSparse | ResBios | ResBus,     0x03B0,     0x03F8},\
+-      {ResShrIoSparse | ResBios | ResBus,     0x03B8,     0x03FC},\
+-      {ResShrIoSparse | ResBios | ResBus,     0x03C0,     0x03E0}
++      {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000A0000, 0x000AFFFF},\
++      {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B0000, 0x000B7FFF},\
++      {ResShrMemBlock | ResBios | ResBus, DEFAULT_DOMAIN 0x000B8000, 0x000BFFFF},\
++      {ResShrIoSparse | ResBios | ResBus, DEFAULT_DOMAIN     0x03B0,     0x03F8},\
++      {ResShrIoSparse | ResBios | ResBus, DEFAULT_DOMAIN     0x03B8,     0x03FC},\
++      {ResShrIoSparse | ResBios | ResBus, DEFAULT_DOMAIN     0x03C0,     0x03E0}
+ #define _8514_EXCLUSIVE \
+-      {ResExcIoSparse | ResBios | ResBus, 0x02E8, 0x03F8}
++      {ResExcIoSparse | ResBios | ResBus, DEFAULT_DOMAIN 0x02E8, 0x03F8}
+ #define _8514_SHARED \
+-      {ResShrIoSparse | ResBios | ResBus, 0x02E8, 0x03F8}
++      {ResShrIoSparse | ResBios | ResBus, DEFAULT_DOMAIN 0x02E8, 0x03F8}
+ /* predefined resources */
+ extern resRange resVgaExclusive[];
+@@ -102,9 +108,9 @@
+ #define RES_SHARED_8514     res8514Shared
+ #define _PCI_AVOID_PC_STYLE \
+-      {ResExcIoSparse | ResBus, 0x0100, 0x0300},\
+-      {ResExcIoSparse | ResBus, 0x0200, 0x0200},\
+-        {ResExcMemBlock | ResBus, 0xA0000,0xFFFFF}
++      {ResExcIoSparse | ResBus, DEFAULT_DOMAIN 0x0100, 0x0300},\
++      {ResExcIoSparse | ResBus, DEFAULT_DOMAIN 0x0200, 0x0200},\
++        {ResExcMemBlock | ResBus, DEFAULT_DOMAIN 0xA0000,0xFFFFF}
+ extern resRange PciAvoid[];
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c.~1~       Sun Jun  3 19:44:40 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c   Sun Jun  3 19:44:48 2001
+@@ -91,9 +91,9 @@
+                         ? pciBusAddrToHostAddr(tag,PCI_MEM_SIZE,size) \
+                         : pciBusAddrToHostAddr(tag,PCI_IO_SIZE,size))
+ #define PCI_M_RANGE(range,tag,begin,end,type) \
+-                            { RANGE(range,B2M(tag,begin),B2M(tag,end),type); }
++        { RANGE(range,B2M(tag,begin),B2M(tag,end),type,xf86GetPciDomain(tag)); }
+ #define PCI_I_RANGE(range,tag,begin,end,type) \
+-                            { RANGE(range,B2I(tag,begin),B2I(tag,end),type); }
++        { RANGE(range,B2I(tag,begin),B2I(tag,end),type,xf86GetPciDomain(tag)); }
+ #define PCI_X_RANGE(range,tag,begin,end,type) \
+ { if (type & ResMem)  PCI_M_RANGE(range,tag,begin,end,type); \
+                 else PCI_I_RANGE(range,tag,begin,end,type); } 
+@@ -1039,9 +1039,15 @@
+     PciBusPtr pbp = xf86PciBus, pbp1 = xf86PciBus;
+     pciConfigPtr pcp;
+     resPtr tmp;
++#ifdef HAVE_DOMAINS
++    int domain;
++#endif
+     
+     if (!pvp) return FALSE;
+     tag = pciTag(pvp->bus,pvp->device,pvp->func);
++#ifdef HAVE_DOMAINS
++    domain = xf86GetPciDomain(tag);
++#endif
+     pcp = pvp->thisCard;
+     type &= ResAccMask;
+@@ -1232,12 +1238,20 @@
+ #endif
+     w_tmp = w;
+     while (w) {
+-      if (type & w->res_type & ResPhysMask) {
++      if ((type & w->res_type & ResPhysMask)
++#ifdef HAVE_DOMAINS
++          && (domain == w->res_domain)
++#endif
++              ) {
+ #ifdef DEBUG
+           ErrorF("block_begin: 0x%lx block_end: 0x%lx\n",w->block_begin,
+                  w->block_end);
+ #endif
+-          range = xf86GetBlock(type,PCI_SIZE(type,tag,alignment + 1),
++          range = xf86GetBlock(type,
++#ifdef HAVE_DOMAINS
++                               domain,
++#endif
++                               PCI_SIZE(type,tag,alignment + 1),
+                                w->block_begin, w->block_end,
+                                PCI_SIZE(type,tag,alignment),avoid);
+           if (range.type != ResEnd)
+@@ -1250,12 +1264,20 @@
+     if (range.type == ResEnd && w_2nd) {
+       w_tmp = w_2nd;
+       while (w_2nd) {
+-          if (type & w_2nd->res_type & ResPhysMask) {
++          if ((type & w_2nd->res_type & ResPhysMask)
++#ifdef HAVE_DOMAINS
++              && (domain == w_2nd->res_domain)
++#endif
++                  ) {
+ #ifdef DEBUG
+           ErrorF("block_begin: 0x%lx block_end: 0x%lx\n",w_2nd->block_begin,
+                  w_2nd->block_end);
+ #endif
+-          range = xf86GetBlock(type,PCI_SIZE(type,tag,alignment + 1),
++          range = xf86GetBlock(type,
++#ifdef HAVE_DOMAINS
++                               domain,
++#endif
++                               PCI_SIZE(type,tag,alignment + 1),
+                                w_2nd->block_begin, w_2nd->block_end,
+                                PCI_SIZE(type,tag,alignment),avoid);
+               if (range.type != ResEnd)
+@@ -1323,7 +1345,7 @@
+ Bool
+ xf86FixPciResource(int entityIndex, int prt, memType alignment,
+-                  long type)
++                 long type)
+ {
+     pciVideoPtr pvp = xf86GetPciInfoForEntity(entityIndex);
+     return fixPciResource(prt, alignment, pvp, type);
+@@ -1481,6 +1503,9 @@
+        */
+        while (m) {
+            range = xf86GetBlock(ResExcMemBlock,
++#ifdef HAVE_DOMAINS
++                                xf86GetPciDomain(TAG(pvp)),
++#endif
+                                 PCI_SIZE(ResMem, TAG(pvp), 1 << biosSize),
+                                 m->block_begin, m->block_end,
+                                 PCI_SIZE(ResMem, TAG(pvp), alignment), 
+@@ -1730,10 +1755,9 @@
+     PciBusPtr *pnPciBus = &PciBusBase;
+     int MaxBus = 0;
+     int i;
++    int domain = 0;
+     memType base, limit;
+-    resPtr pciBusAccWindows = xf86PciBusAccWindowsFromOS();
+-
+     if (pciInfo == NULL) return NULL;
+     
+     /* Add each PCI-PCI bridge */
+@@ -1856,13 +1880,25 @@
+               PciBus->secondary = -1; /* to be set below */
+               PciBus->subclass = sub_class;
+               PciBus->brcontrol = PCI_PCI_BRIDGE_VGA_EN;
++#ifdef HAVE_DOMAINS
++              domain = xf86GetPciDomain(pcrp->tag);
++#endif
++              /* XXX A memory leak has returned here... -DaveM */
+               PciBus->preferred_io = xf86ExtractTypeFromList(
+-                  pciBusAccWindows,ResIo);
++                  xf86PciBusAccWindowsFromOS(domain),ResIo);
+               PciBus->preferred_mem = xf86ExtractTypeFromList(
+-                  pciBusAccWindows,ResMem);
++                  xf86PciBusAccWindowsFromOS(domain),ResMem);
+               PciBus->preferred_pmem = xf86ExtractTypeFromList(
+-                  pciBusAccWindows,ResMem);
++                  xf86PciBusAccWindowsFromOS(domain),ResMem);
+               xf86MsgVerb(X_INFO,3,"Host-to-PCI bridge:\n");
++#ifdef DEBUG
++              xf86MsgVerb(X_INFO,3,"Preferred I/O:\n");
++              xf86PrintResList(3,PciBus->preferred_io);
++              xf86MsgVerb(X_INFO,3,"Preferred MEM:\n");
++              xf86PrintResList(3,PciBus->preferred_mem);
++              xf86MsgVerb(X_INFO,3,"Preferred Prefetchable MEM:\n");
++              xf86PrintResList(3,PciBus->preferred_pmem);
++#endif
+               break;
+           default:
+               break;
+@@ -1892,12 +1928,23 @@
+               PciBus->primary = -1;
+               PciBus->secondary = i;
+               PciBus->subclass = PCI_SUBCLASS_BRIDGE_HOST;
++
++#ifdef HAVE_DOMAINS
++              /* Find a device on this bus. */
++              for (pcrpp = pciInfo, pcrp = *pcrpp; pcrp; pcrp = *(++pcrpp)) {
++                      if (pcrp->busnum == i)
++                              break;
++              }
++
++              if (pcrp) domain = xf86GetPciDomain(pcrp->tag);
++#endif
++              /* XXX A memory leak has returned here... -DaveM */
+               PciBus->preferred_io = xf86ExtractTypeFromList(
+-                  pciBusAccWindows,ResIo);
++                  xf86PciBusAccWindowsFromOS(domain),ResIo);
+               PciBus->preferred_mem = xf86ExtractTypeFromList(
+-                  pciBusAccWindows,ResMem);
++                  xf86PciBusAccWindowsFromOS(domain),ResMem);
+               PciBus->preferred_pmem = xf86ExtractTypeFromList(
+-                  pciBusAccWindows,ResMem);
++                  xf86PciBusAccWindowsFromOS(domain),ResMem);
+               xf86MsgVerb(X_INFO,3,"Host-to-PCI bridge:\n");
+           }
+       }
+@@ -1928,7 +1975,6 @@
+       printBridgeInfo(PciBus);
+     }
+     
+-    xf86FreeResList(pciBusAccWindows);
+     return PciBusBase;
+     
+ }
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86str.h.~1~  Sun Jun  3 19:44:40 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/common/xf86str.h      Sun Jun  3 19:44:48 2001
+@@ -593,15 +593,27 @@
+ typedef struct {
+     long type;     /* shared, exclusive, unused etc. */
++#ifdef HAVE_DOMAINS
++    unsigned int domain;
++#endif
+     memType a;
+     memType b;
+ } resRange, *resList;
+-#define RANGE(r,u,v,t) {\
++#ifdef HAVE_DOMAINS
++#define RANGE(r,u,v,t,d) {\
+                        (r).a = (u);\
+                        (r).b = (v);\
+                        (r).type = t;\
++                       (r).domain = d;\
+                        }
++#else
++#define RANGE(r,u,v,t,d) {\
++                       (r).a = (u);\
++                       (r).b = (v);\
++                       (r).type = t;\
++                       }
++#endif
+ #define rBase a
+ #define rMask b
+@@ -621,6 +633,9 @@
+ #define block_begin   val.rBegin
+ #define block_end     val.rEnd
+ #define res_type      val.type
++#ifdef HAVE_DOMAINS
++#define res_domain    val.domain
++#endif
+ typedef struct {
+     int numChipset;
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile.~1~     Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/drivers/ati/Imakefile Sun Jun  3 19:44:48 2001
+@@ -87,12 +87,12 @@
+ # ifndef ATIAvoidCPIO
+ #  define ATIAvoidCPIO NO
+ # endif
+-#elif defined(SparcArchitecture) || 1
++#elif 1
+ # undef ATIAvoidCPIO    /* Clobber any previous setting */
+ # define ATIAvoidCPIO YES
+ #endif
+-#if defined(PpcArchitecture)
++#if defined(PpcArchitecture) || defined(SparcArchitecture)
+ # undef ATIAvoidNonPCI
+ # define ATIAvoidNonPCI YES
+ #elif !defined(ATIAvoidNonPCI)
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/drivers/ati/aticonfig.c.~1~   Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/drivers/ati/aticonfig.c       Sun Jun  3 19:44:48 2001
+@@ -27,6 +27,7 @@
+ #include "aticursor.h"
+ #include "atioption.h"
+ #include "atistruct.h"
++#include "atichip.h"
+ /*
+  * Non-publicised XF86Config options.
+@@ -122,6 +123,11 @@
+     }
+     ReferenceClock = ((double)157500000.0) / ((double)11.0);
++#ifdef __sparc__
++    if (pATI->Chip == ATI_CHIP_264XL)
++          ReferenceClock = ((double)315000000.0) / ((double)11.0);
++    CSync = TRUE;
++#endif
+ #ifndef AVOID_CPIO
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/drivers/ati/atimach64.c.~1~   Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/drivers/ati/atimach64.c       Sun Jun  3 19:44:48 2001
+@@ -1602,6 +1602,24 @@
+          */
+         switch (iDWord)
+         {
++#if X_BYTE_ORDER == X_BIG_ENDIAN
++          case  0:  xf86WriteMmio32Be(pDst +  0, 0, *(pSrc +  0));
++          case  1:  xf86WriteMmio32Be(pDst +  1, 0, *(pSrc +  1));
++          case  2:  xf86WriteMmio32Be(pDst +  2, 0, *(pSrc +  2));
++          case  3:  xf86WriteMmio32Be(pDst +  3, 0, *(pSrc +  3));
++          case  4:  xf86WriteMmio32Be(pDst +  4, 0, *(pSrc +  4));
++          case  5:  xf86WriteMmio32Be(pDst +  5, 0, *(pSrc +  5));
++          case  6:  xf86WriteMmio32Be(pDst +  6, 0, *(pSrc +  6));
++          case  7:  xf86WriteMmio32Be(pDst +  7, 0, *(pSrc +  7));
++          case  8:  xf86WriteMmio32Be(pDst +  8, 0, *(pSrc +  8));
++          case  9:  xf86WriteMmio32Be(pDst +  9, 0, *(pSrc +  9));
++          case 10:  xf86WriteMmio32Be(pDst + 10, 0, *(pSrc + 10));
++          case 11:  xf86WriteMmio32Be(pDst + 11, 0, *(pSrc + 11));
++          case 12:  xf86WriteMmio32Be(pDst + 12, 0, *(pSrc + 12));
++          case 13:  xf86WriteMmio32Be(pDst + 13, 0, *(pSrc + 13));
++          case 14:  xf86WriteMmio32Be(pDst + 14, 0, *(pSrc + 14));
++          case 15:  xf86WriteMmio32Be(pDst + 15, 0, *(pSrc + 15));
++#else
+             case  0:  MMIO_OUT32(pDst +  0, 0, *(pSrc +  0));
+             case  1:  MMIO_OUT32(pDst +  1, 0, *(pSrc +  1));
+             case  2:  MMIO_OUT32(pDst +  2, 0, *(pSrc +  2));
+@@ -1618,6 +1636,7 @@
+             case 13:  MMIO_OUT32(pDst + 13, 0, *(pSrc + 13));
+             case 14:  MMIO_OUT32(pDst + 14, 0, *(pSrc + 14));
+             case 15:  MMIO_OUT32(pDst + 15, 0, *(pSrc + 15));
++#endif
+             default:    /* Muffle compiler */
+                 break;
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bsd/bsdResource.c.~1~      Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bsd/bsdResource.c  Sun Jun  3 19:44:48 2001
+@@ -17,22 +17,34 @@
+ resRange PciAvoid[] = {_PCI_AVOID_PC_STYLE, _END};
++#define MIN_SYSTEM_DOMAIN     0
++#ifdef HAVE_DOMAINS
++#define MAX_SYSTEM_DOMAIN     255
++#else
++#define MAX_SYSTEM_DOMAIN     0
++#endif
++#define ISA_SYSTEM_DOMAIN     0
++
+ resPtr
+ xf86BusAccWindowsFromOS(void)
+ {
+     resPtr ret = NULL;
+     resRange range;
++    int domain;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
++    for (domain = MIN_SYSTEM_DOMAIN; domain <= MAX_SYSTEM_DOMAIN; domain++) {
++      RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
++
++      RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
++    }
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+ resPtr
+-xf86PciBusAccWindowsFromOS(void)
++xf86PciBusAccWindowsFromOS(int domain)
+ {
+     resPtr ret = NULL;
+     resRange range;
+@@ -44,10 +56,10 @@
+      * region 0x40000000-0xbfffffff for DMA but this only matters if
+      * the bios screws up the pci region mappings.
+      */
+-    RANGE(range, 0x80000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x80000000, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+@@ -58,10 +70,10 @@
+     resPtr ret = NULL;
+     resRange range;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, ISA_SYSTEM_DOMAIN);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock, ISA_SYSTEM_DOMAIN);
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+@@ -70,6 +82,14 @@
+ xf86AccResFromOS(resPtr ret)
+ {
+     resRange range;
++#ifdef HAVE_DOMAINS
++    int domain = MIN_SYSTEM_DOMAIN;
++#endif
++
++#ifdef HAVE_DOMAINS
++    if (ret != NULL)
++      domain = ret->res_domain;
++#endif
+     /*
+      * Fallback is to claim the following areas:
+@@ -77,7 +97,7 @@
+      * 0x000c0000 - 0x000effff  location of VGA and other extensions ROMS
+      */
+-    RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock);
++    RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     /*
+@@ -85,20 +105,20 @@
+      * along with their sparse I/O aliases, but that's too imprecise.  Instead
+      * claim a bare minimum here.
+      */
+-    RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock); /* For mainboard */
++    RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock, domain); /* For mainboard */
+     ret = xf86AddResToList(ret, &range, -1);
+     /*
+      * At minimum, the top and bottom resources must be claimed, so that
+      * resources that are (or appear to be) unallocated can be relocated.
+      */
+-    RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-/*  RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
++/*  RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1); */
+-    RANGE(range, 0xffffffff, 0xffffffff, ResExcIoBlock);
++    RANGE(range, 0xffffffff, 0xffffffff, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     /* XXX add others */
+@@ -109,30 +129,38 @@
+ resRange PciAvoid[] = {_PCI_AVOID_PC_STYLE, _END};
++#define MIN_SYSTEM_DOMAIN     0
++#define MAX_SYSTEM_DOMAIN     0
++#define ISA_SYSTEM_DOMAIN     0
++
+ resPtr
+ xf86BusAccWindowsFromOS(void)
+ {
+     resPtr ret = NULL;
+     resRange range;
++    int domain;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
++    for (domain = MIN_SYSTEM_DOMAIN; domain <= MAX_SYSTEM_DOMAIN; domain++) {
++      RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
++
++      RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
++    }
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+ resPtr
+-xf86PciBusAccWindowsFromOS(void)
++xf86PciBusAccWindowsFromOS(int domain)
+ {
+     resPtr ret = NULL;
+     resRange range;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile.~1~  Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/Imakefile      Sun Jun  3 19:44:48 2001
+@@ -14,8 +14,16 @@
+ PCIDRVRSRC = axpPci.c
+ PCIDRVROBJ = axpPci.o
+-#elif (defined(LinuxArchitecture) || defined(SunArchitecture)) && \
+-      defined(SparcArchitecture)
++#elif defined(LinuxArchitecture) && defined(SparcArchitecture)
++
++XCOMM Sparc SBUS driver, generic linux PCI driver
++
++PCIDRVRSRC = linuxPci.c
++PCIDRVROBJ = linuxPci.o
++SBUSDRVSRC = Sbus.c
++SBUSDRVOBJ = Sbus.o
++
++#elif defined(SunArchitecture) && defined(SparcArchitecture)
+ XCOMM Sparc PCI driver
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c.~1~      Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.c  Sun Jun  3 19:44:48 2001
+@@ -1015,6 +1015,13 @@
+ #if defined(INCLUDE_XF86_MAP_PCI_MEM)
++#ifdef HAVE_DOMAINS
++int xf86GetPciDomain(PCITAG Tag)
++{
++      return 0;
++}
++#endif
++
+ pointer
+ xf86MapPciMem(int ScreenNum, int Flags, PCITAG Tag, ADDRESS Base,
+               unsigned long Size)
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.h.~1~      Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/Pci.h  Sun Jun  3 19:44:48 2001
+@@ -152,9 +152,11 @@
+ # if !defined(PowerMAX_OS)
+ #  define INCLUDE_XF86_MAP_PCI_MEM
+ # endif
+-#elif defined(__sparc__) && (defined(linux) || defined(sun))
++#elif defined(__sparc__) && defined(sun)
+ # define ARCH_PCI_INIT sparcPciInit
+ # define INCLUDE_XF86_MAP_PCI_MEM
++#elif defined(__sparc__) && defined(linux)
++# define ARCH_PCI_INIT linuxPciInit
+ #elif defined(__alpha__) && defined(linux)
+ # define ARCH_PCI_INIT axpPciInit
+ # define INCLUDE_XF86_MAP_PCI_MEM
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c.~1~ Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/linuxPci.c     Sun Jun  3 19:44:48 2001
+@@ -88,6 +88,13 @@
+ #define PCI_CPU(val)  (val)
+ #endif
++/* Ioctls for /proc/bus/pci/X/Y nodes. */
++#define PCIIOC_BASE           ('P' << 24 | 'C' << 16 | 'I' << 8)
++#define PCIIOC_CONTROLLER     (PCIIOC_BASE | 0x00)    /* Get controller for PCI device. */
++#define PCIIOC_MMAP_IS_IO     (PCIIOC_BASE | 0x01)    /* Set mmap state to I/O space. */
++#define PCIIOC_MMAP_IS_MEM    (PCIIOC_BASE | 0x02)    /* Set mmap state to MEM space. */
++#define PCIIOC_WRITE_COMBINE  (PCIIOC_BASE | 0x03)    /* Enable/disable write-combining. */
++
+ void  
+ linuxPciInit()
+ {
+@@ -167,3 +174,129 @@
+               write(fd,&val,4);
+       }
+ }
++
++#ifndef INCLUDE_XF86_MAP_PCI_MEM
++
++#ifdef HAVE_DOMAINS
++int xf86GetPciDomain(PCITAG Tag)
++{
++      int fd;
++
++      if (-1 != (fd = linuxPciOpenFile(Tag))) {
++              int err = ioctl(fd, PCIIOC_CONTROLLER, 0);
++
++              if (err < 0)
++                      return 0;
++
++              return err;
++      }       
++
++      return 0;
++}
++#endif
++
++static pointer
++xf86MapPciGeneric(int ScreenNum, int Flags, PCITAG Tag, ADDRESS Base,
++                unsigned long Size, int io_space)
++{
++      int fd;
++
++      xf86InitVidMem();
++
++      if (-1 != (fd = linuxPciOpenFile(Tag))) {
++              ADDRESS realBase, alignOff;
++              pointer p;
++              CARD32 save = 0;
++              int err, mapflags;
++
++              if (io_space)
++                      err = ioctl(fd, PCIIOC_MMAP_IS_IO, 0);
++              else
++                      err = ioctl(fd, PCIIOC_MMAP_IS_MEM, 0);
++
++              if (err < 0)
++                      goto fail;
++
++              if (Flags & VIDMEM_READSIDEEFFECT) {
++                      save = pciReadLong(Tag, PCI_CMD_STAT_REG);
++                      pciWriteLong(Tag, PCI_CMD_STAT_REG,
++                                   save & ~PCI_CMD_MEM_ENABLE);
++              }
++
++              mapflags = MAP_SHARED;
++#if defined(__ia64__)
++#ifndef MAP_WRITECOMBINED
++#define MAP_WRITECOMBINED 0x00010000
++#endif
++#ifndef MAP_NONCACHED
++#define MAP_NONCACHED 0x00020000
++#endif
++              if (Flags & VIDMEM_FRAMEBUFFER) 
++                      mapflags |= MAP_WRITECOMBINED; 
++              else
++                      mapflags |= MAP_NONCACHED; 
++#else /* !(__ia64__) */
++              err = ioctl(fd, PCIIOC_WRITE_COMBINE,
++                          (Flags & VIDMEM_FRAMEBUFFER) ? 1 : 0);
++              if (err < 0)
++                      goto fail_restore_cmd_stat;
++#endif
++
++              realBase = Base & ~(getpagesize() - 1);
++              alignOff = Base - realBase;
++
++              p = mmap(NULL, Size + alignOff, PROT_READ | PROT_WRITE,
++                       mapflags, fd, realBase);
++
++              if (!p || p == (pointer) -1) {
++                      FatalError("xf86MapPciMem: Could not mmap PCI memory "
++                                 "[base=0x%x,size=%x] (%s)\n",
++                                 Base, Size, strerror(errno));
++                      goto fail_restore_cmd_stat;
++              }
++
++              if (Flags & VIDMEM_READSIDEEFFECT) {
++                      xf86MapReadSideEffects(ScreenNum, Flags, p, Size);
++                      pciWriteLong(Tag, PCI_CMD_STAT_REG, save);
++              }
++
++              xf86MakeNewMapping(ScreenNum, Flags, Base, Size, p);
++
++              return (pointer) ((char *)p + alignOff);
++
++      fail_restore_cmd_stat:
++              if (Flags & VIDMEM_READSIDEEFFECT)
++                      pciWriteLong(Tag, PCI_CMD_STAT_REG, save);
++
++              return NULL;
++      }
++
++fail:
++      return NULL;
++}
++
++pointer
++xf86MapPciMem(int ScreenNum, int Flags, PCITAG Tag, ADDRESS Base,
++            unsigned long Size)
++{
++      return xf86MapPciGeneric(ScreenNum, Flags, Tag,
++                               Base, Size, 0);
++}
++
++pointer
++xf86MapPciIo(int ScreenNum, int Flags, PCITAG Tag, ADDRESS Base,
++           unsigned long Size)
++{
++      return xf86MapPciGeneric(ScreenNum, Flags, Tag,
++                               Base, Size, 1);
++}
++
++int
++xf86ReadPciBIOS(unsigned long Offset, PCITAG Tag, int basereg,
++              unsigned char *Buf, int Len)
++{
++      xf86Msg(X_WARNING, "xf86ReadPciBIOS: Unsupported on this platform.\n");
++      return -1;
++}
++
++#endif /* !(INCLUDE_XF86_MAP_PCI_MEM) */
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Pci.h.~1~  Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/bus/xf86Pci.h      Sun Jun  3 19:44:48 2001
+@@ -647,6 +647,9 @@
+                               ADDRESS Base, unsigned long Size);
+ int           xf86ReadPciBIOS(unsigned long Offset, PCITAG Tag, int basereg,
+                               unsigned char *Buf, int Len);
++#ifdef HAVE_DOMAINS
++int         xf86GetPciDomain(PCITAG Tag);
++#endif
+ pciConfigPtr *xf86scanpci(int flags);
+ /* Old sytle PCI access functions (for compatibility) */
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/linux/lnxResource.c.~1~    Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/linux/lnxResource.c        Sun Jun  3 19:44:48 2001
+@@ -15,22 +15,33 @@
+ #ifdef __alpha__
+ resRange PciAvoid[] = {_PCI_AVOID_PC_STYLE, _END};
++#define MIN_SYSTEM_DOMAIN     0
++#ifdef HAVE_DOMAINS
++#define MAX_SYSTEM_DOMAIN     255
++#else
++#define MAX_SYSTEM_DOMAIN     0
++#endif
++#define ISA_SYSTEM_DOMAIN     0
++
+ resPtr
+ xf86BusAccWindowsFromOS(void)
+ {
+     resPtr ret = NULL;
+     resRange range;
++    int domain;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
++    for (domain = MIN_SYSTEM_DOMAIN; domain <= MAX_SYSTEM_DOMAIN; domain++) {
++      RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
++      RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
++    }
+     return ret;
+ }
+ resPtr
+-xf86PciBusAccWindowsFromOS(void)
++xf86PciBusAccWindowsFromOS(int domain)
+ {
+     resPtr ret = NULL;
+     resRange range;
+@@ -39,75 +50,75 @@
+      * sparse address space are an image of the ISA bus range
+      */
+     if (_bus_base_sparse()) {
+-      RANGE(range, 0x00000000, 0x07ffffff, ResExcMemBlock);
++      RANGE(range, 0x00000000, 0x07ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x09000000, 0x0fffffff, ResExcMemBlock);
++      RANGE(range, 0x09000000, 0x0fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x11000000, 0x17ffffff, ResExcMemBlock);
++      RANGE(range, 0x11000000, 0x17ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x19000000, 0x1fffffff, ResExcMemBlock);
++      RANGE(range, 0x19000000, 0x1fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x21000000, 0x27ffffff, ResExcMemBlock);
++      RANGE(range, 0x21000000, 0x27ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x29000000, 0x2fffffff, ResExcMemBlock);
++      RANGE(range, 0x29000000, 0x2fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x31000000, 0x37ffffff, ResExcMemBlock);
++      RANGE(range, 0x31000000, 0x37ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x39000000, 0x3fffffff, ResExcMemBlock);
++      RANGE(range, 0x39000000, 0x3fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x41000000, 0x47ffffff, ResExcMemBlock);
++      RANGE(range, 0x41000000, 0x47ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x49000000, 0x4fffffff, ResExcMemBlock);
++      RANGE(range, 0x49000000, 0x4fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x51000000, 0x57ffffff, ResExcMemBlock);
++      RANGE(range, 0x51000000, 0x57ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x59000000, 0x5fffffff, ResExcMemBlock);
++      RANGE(range, 0x59000000, 0x5fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x61000000, 0x67ffffff, ResExcMemBlock);
++      RANGE(range, 0x61000000, 0x67ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x69000000, 0x6fffffff, ResExcMemBlock);
++      RANGE(range, 0x69000000, 0x6fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x71000000, 0x77ffffff, ResExcMemBlock);
++      RANGE(range, 0x71000000, 0x77ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x79000000, 0x7fffffff, ResExcMemBlock);
++      RANGE(range, 0x79000000, 0x7fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x81000000, 0x87ffffff, ResExcMemBlock);
++      RANGE(range, 0x81000000, 0x87ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x89000000, 0x8fffffff, ResExcMemBlock);
++      RANGE(range, 0x89000000, 0x8fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x91000000, 0x97ffffff, ResExcMemBlock);
++      RANGE(range, 0x91000000, 0x97ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0x99000000, 0x9fffffff, ResExcMemBlock);
++      RANGE(range, 0x99000000, 0x9fffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xa1000000, 0xa7ffffff, ResExcMemBlock);
++      RANGE(range, 0xa1000000, 0xa7ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xa9000000, 0xafffffff, ResExcMemBlock);
++      RANGE(range, 0xa9000000, 0xafffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xb1000000, 0xb7ffffff, ResExcMemBlock);
++      RANGE(range, 0xb1000000, 0xb7ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xb9000000, 0xbfffffff, ResExcMemBlock);
++      RANGE(range, 0xb9000000, 0xbfffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xc1000000, 0xc7ffffff, ResExcMemBlock);
++      RANGE(range, 0xc1000000, 0xc7ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xc9000000, 0xcfffffff, ResExcMemBlock);
++      RANGE(range, 0xc9000000, 0xcfffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xd1000000, 0xd7ffffff, ResExcMemBlock);
++      RANGE(range, 0xd1000000, 0xd7ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xd9000000, 0xdfffffff, ResExcMemBlock);
++      RANGE(range, 0xd9000000, 0xdfffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xe1000000, 0xe7ffffff, ResExcMemBlock);
++      RANGE(range, 0xe1000000, 0xe7ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xe9000000, 0xefffffff, ResExcMemBlock);
++      RANGE(range, 0xe9000000, 0xefffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xf1000000, 0xf7ffffff, ResExcMemBlock);
++      RANGE(range, 0xf1000000, 0xf7ffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+-      RANGE(range, 0xf9000000, 0xffffffff, ResExcMemBlock);
++      RANGE(range, 0xf9000000, 0xffffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+     } else {
+-      RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++      RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
+       ret = xf86AddResToList(ret, &range, -1);
+     }
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+@@ -118,10 +129,10 @@
+     resPtr ret = NULL;
+     resRange range;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, ISA_SYSTEM_DOMAIN);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcIoBlock, ISA_SYSTEM_DOMAIN);
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+@@ -130,6 +141,14 @@
+ xf86AccResFromOS(resPtr ret)
+ {
+     resRange range;
++#ifdef HAVE_DOMAINS
++    int domain = MIN_SYSTEM_DOMAIN;
++#endif
++
++#ifdef HAVE_DOMAINS
++    if (ret != NULL)
++      domain = ret->res_domain;
++#endif
+     /*
+      * Fallback is to claim the following areas:
+@@ -137,7 +156,7 @@
+      * 0x000c0000 - 0x000effff  location of VGA and other extensions ROMS
+      */
+-    RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock);
++    RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     /*
+@@ -145,20 +164,20 @@
+      * along with their sparse I/O aliases, but that's too imprecise.  Instead
+      * claim a bare minimum here.
+      */
+-    RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock); /* For mainboard */
++    RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock, domain); /* For mainboard */
+     ret = xf86AddResToList(ret, &range, -1);
+     /*
+      * At minimum, the top and bottom resources must be claimed, so that
+      * resources that are (or appear to be) unallocated can be relocated.
+      */
+-    RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-/*  RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
++/*  RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1); */
+-    RANGE(range, 0xffffffff, 0xffffffff, ResExcIoBlock);
++    RANGE(range, 0xffffffff, 0xffffffff, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     /* XXX add others */
+@@ -172,9 +191,18 @@
+   */
+   
+ #ifdef __sparc__
++#ifndef HAVE_DOMAINS
++#error This platform cannot operate correctly without HAVE_DOMAINS defined
++#endif
+ resRange PciAvoid[] = {_END};
++#define MIN_SYSTEM_DOMAIN     0
++#define MAX_SYSTEM_DOMAIN     255
++#define ISA_SYSTEM_DOMAIN     0
+ #else
+ resRange PciAvoid[] = {_PCI_AVOID_PC_STYLE, _END};
++#define MIN_SYSTEM_DOMAIN     0
++#define MAX_SYSTEM_DOMAIN     0
++#define ISA_SYSTEM_DOMAIN     0
+ #endif
+ resPtr
+@@ -182,32 +210,36 @@
+ {
+     resPtr ret = NULL;
+     resRange range;
++    int domain;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
++    for (domain = MIN_SYSTEM_DOMAIN; domain <= MAX_SYSTEM_DOMAIN; domain++) {
++      RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
+ #ifdef __sparc__
+-    RANGE(range, 0x00000000, 0x00ffffff, ResExcIoBlock);
++      RANGE(range, 0x00000000, 0x00ffffff, ResExcIoBlock, domain);
+ #else
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
++      RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, domain);
+ #endif
+-    ret = xf86AddResToList(ret, &range, -1);
++      ret = xf86AddResToList(ret, &range, -1);
++    }
++
+     return ret;
+ }
+ resPtr
+-xf86PciBusAccWindowsFromOS(void)
++xf86PciBusAccWindowsFromOS(int domain)
+ {
+     resPtr ret = NULL;
+     resRange range;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+ #ifdef __sparc__
+-    RANGE(range, 0x00000000, 0x00ffffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x00ffffff, ResExcIoBlock, domain);
+ #else
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, domain);
+ #endif
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+@@ -219,13 +251,13 @@
+     resPtr ret = NULL;
+     resRange range;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, ISA_SYSTEM_DOMAIN);
+     ret = xf86AddResToList(ret, &range, -1);
+ #ifdef __sparc__
+-    RANGE(range, 0x00000000, 0x00ffffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x00ffffff, ResExcIoBlock, ISA_SYSTEM_DOMAIN);
+ #else
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, ISA_SYSTEM_DOMAIN);
+ #endif
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+@@ -235,21 +267,29 @@
+ xf86AccResFromOS(resPtr ret)
+ {
+     resRange range;
++#ifdef HAVE_DOMAINS
++    int domain = MIN_SYSTEM_DOMAIN;
++#endif
++
++#ifdef HAVE_DOMAINS
++    if (ret != NULL)
++      domain = ret->res_domain;
++#endif
+     /*
+      * At minimum, the top and bottom resources must be claimed, so that
+      * resources that are (or appear to be) unallocated can be relocated.
+      */
+-    RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+ #ifdef __sparc__
+-    RANGE(range, 0x00ffffff, 0x00ffffff, ResExcIoBlock);
++    RANGE(range, 0x00ffffff, 0x00ffffff, ResExcIoBlock, domain);
+ #else
+-    RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock);
++    RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock, domain);
+ #endif
+     ret = xf86AddResToList(ret, &range, -1);
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/shared/stdResource.c.~1~   Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/shared/stdResource.c       Sun Jun  3 19:44:48 2001
+@@ -20,34 +20,42 @@
+ resRange PciAvoid[] = {_PCI_AVOID_PC_STYLE, _END};
+ #endif
++#define MIN_SYSTEM_DOMAIN     0
++#define MAX_SYSTEM_DOMAIN     0
++#define ISA_SYSTEM_DOMAIN     0
++
+ resPtr
+ xf86StdBusAccWindowsFromOS(void)
+ {
+     /* Fallback is to allow addressing of all memory space */
+     resPtr ret = NULL;
+     resRange range;
++    int domain;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
++    for (domain = MIN_SYSTEM_DOMAIN; domain <= MAX_SYSTEM_DOMAIN; domain++) {
++      RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
++
++      /* Fallback is to allow addressing of all I/O space */
++      RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, domain);
++      ret = xf86AddResToList(ret, &range, -1);
++    }
+-    /* Fallback is to allow addressing of all I/O space */
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
+-    ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+ resPtr
+-xf86StdPciBusAccWindowsFromOS(void)
++xf86StdPciBusAccWindowsFromOS(int domain)
+ {
+     /* Fallback is to allow addressing of all memory space */
+     resPtr ret = NULL;
+     resRange range;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     /* Fallback is to allow addressing of all I/O space */
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+@@ -59,11 +67,11 @@
+     resPtr ret = NULL;
+     resRange range;
+-    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0xffffffff, ResExcMemBlock, ISA_SYSTEM_DOMAIN);
+     ret = xf86AddResToList(ret, &range, -1);
+     /* Fallback is to allow addressing of all I/O space */
+-    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x0000ffff, ResExcIoBlock, ISA_SYSTEM_DOMAIN);
+     ret = xf86AddResToList(ret, &range, -1);
+     return ret;
+ }
+@@ -72,6 +80,14 @@
+ xf86StdAccResFromOS(resPtr ret)
+ {
+     resRange range;
++#ifdef HAVE_DOMAINS
++    int domain = MIN_SYSTEM_DOMAIN;
++#endif
++
++#ifdef HAVE_DOMAINS
++    if (ret != NULL)
++      domain = ret->res_domain;
++#endif
+     /*
+      * Fallback is to claim the following areas:
+@@ -91,22 +107,22 @@
+      */
+     /* Fallback is to claim 0x0 - 0x9ffff and 0x100000 - 0x7fffffff */
+-    RANGE(range, 0x00000000, 0x0009ffff, ResExcMemBlock);
++    RANGE(range, 0x00000000, 0x0009ffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock);
++    RANGE(range, 0x000c0000, 0x000effff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x000f0000, 0x000fffff, ResExcMemBlock);
++    RANGE(range, 0x000f0000, 0x000fffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     RANGE(range, 0x00100000, 0x3fffffff,
+-      ResExcMemBlock | ResBios | ResEstimated);
++      ResExcMemBlock | ResBios | ResEstimated, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+ #if 0
+-    RANGE(range, 0xfec00000, 0xfecfffff, ResExcMemBlock | ResBios);
++    RANGE(range, 0xfec00000, 0xfecfffff, ResExcMemBlock | ResBios, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0xfee00000, 0xfeefffff, ResExcMemBlock | ResBios);
++    RANGE(range, 0xfee00000, 0xfeefffff, ResExcMemBlock | ResBios, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+ #endif
+-    RANGE(range, 0xffe00000, 0xffffffff, ResExcMemBlock | ResBios);
++    RANGE(range, 0xffe00000, 0xffffffff, ResExcMemBlock | ResBios, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     /*
+@@ -114,20 +130,20 @@
+      * along with their sparse I/O aliases, but that's too imprecise.  Instead
+      * claim a bare minimum here.
+      */
+-    RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock); /* For mainboard */
++    RANGE(range, 0x00000000, 0x000000ff, ResExcIoBlock, domain); /* For mainboard */
+     ret = xf86AddResToList(ret, &range, -1);
+     /*
+      * At minimum, the top and bottom resources must be claimed, so that
+      * resources that are (or appear to be) unallocated can be relocated.
+      */
+-/*  RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock);
++/*  RANGE(range, 0x00000000, 0x00000000, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock);
++    RANGE(range, 0xffffffff, 0xffffffff, ResExcMemBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+-    RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock);
++    RANGE(range, 0x00000000, 0x00000000, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1); */
+-    RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock);
++    RANGE(range, 0x0000ffff, 0x0000ffff, ResExcIoBlock, domain);
+     ret = xf86AddResToList(ret, &range, -1);
+     /* XXX add others */
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/shared/vidmem.c.~1~        Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/shared/vidmem.c    Sun Jun  3 19:44:48 2001
+@@ -135,6 +135,29 @@
+       }
+ }
++void
++xf86MakeNewMapping(int ScreenNum, int Flags, unsigned long Base, unsigned long Size, pointer Vbase)
++{
++      VidMapPtr vp;
++      MappingPtr mp;
++
++      vp = getVidMapRec(ScreenNum);
++      mp = newMapping(vp);
++      mp->physBase = Base;
++      mp->size = Size;
++      mp->virtBase = Vbase;
++      mp->flags = Flags;
++}
++
++void
++xf86InitVidMem(void)
++{
++      if (!vidMemInfo.initialised) {
++              memset(&vidMemInfo, 0, sizeof(VidMemInfo));
++              xf86OSInitVidMem(&vidMemInfo);
++      }
++}
++
+ pointer
+ xf86MapVidMem(int ScreenNum, int Flags, unsigned long Base, unsigned long Size)
+ {
+--- XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h.~1~  Sun Jun  3 19:44:41 2001
++++ XFree86-4.1.0/xc/programs/Xserver/hw/xfree86/os-support/xf86_OSproc.h      Sun Jun  3 19:44:48 2001
+@@ -137,6 +137,8 @@
+ /* public functions */
+ extern Bool xf86LinearVidMem(void);
+ extern Bool xf86CheckMTRR(int); 
++extern void xf86MakeNewMapping(int, int, unsigned long, unsigned long, pointer);
++extern void xf86InitVidMem(void);
+ extern pointer xf86MapVidMem(int, int, unsigned long, unsigned long);
+ extern void xf86UnMapVidMem(int, pointer, unsigned long);
+ extern void xf86MapReadSideEffects(int, int, pointer, unsigned long);
+@@ -235,13 +237,13 @@
+ /* RAC-related privs */
+ /* internal to os-support layer */
+ resPtr xf86StdBusAccWindowsFromOS(void);
+-resPtr xf86StdPciAccWindowsFromOS(void);
++resPtr xf86StdPciAccWindowsFromOS(int domain);
+ resPtr xf86StdIsaAccWindowsFromOS(void);
+ resPtr xf86StdAccResFromOS(resPtr ret);
+ /* available to the common layer */
+ resPtr xf86BusAccWindowsFromOS(void);
+-resPtr xf86PciBusAccWindowsFromOS(void);
++resPtr xf86PciBusAccWindowsFromOS(int domain);
+ resPtr xf86IsaBusAccWindowsFromOS(void);
+ resPtr xf86AccResFromOS(resPtr ret);
+ #endif /* NEED_OS_RAC_PROTOS */
This page took 0.100229 seconds and 4 git commands to generate.