aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xfree86/doc/devel/Domain.note
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw/xfree86/doc/devel/Domain.note')
-rw-r--r--xorg-server/hw/xfree86/doc/devel/Domain.note159
1 files changed, 0 insertions, 159 deletions
diff --git a/xorg-server/hw/xfree86/doc/devel/Domain.note b/xorg-server/hw/xfree86/doc/devel/Domain.note
deleted file mode 100644
index ce0812b22..000000000
--- a/xorg-server/hw/xfree86/doc/devel/Domain.note
+++ /dev/null
@@ -1,159 +0,0 @@
-The purpose of the changes described here is to implement a more general
-framework for multi-head on systems with more than one host-to-PCI bridge.
-The changes also implement a basic port of XFree86 to SPARC Solaris.
-
-These changes are derived from David S. Miller's submission #4653 to the
-patch list. David Andrew of Sun Microsystems was also kind enough to
-arrange for a hardware loan for development of these changes.
-
-These changes are known to work on several SPARC SunOS and UltraSPARC
-Linux configurations. Linux kernel work is in progress to port these
-changes to Linux/PowerPC.
-
-Several loose ends still need to be addressed before these changes can be
-considered stable. The bulk of this note is devoted to enumerating what
-remains to be done, along with other notes, broken down into various broad
-categories.
-
-SPARC SunOS (aka Solaris)
--------------------------
-- An overview of this XFree86 port is available in README.Solaris.
-- The keyboard map code in hw/xfree86/os-support/sunos/sun_kbdEv.c needs
- to be extended to handle more than only the sun5 keyboard I targeted it
- for. Even for the sun5, the map is incomplete as several keys are not
- mapped. What is there is just barely usable.
-- On exit, the server will zero out /dev/fb, but that might not be the
- right thing to do for all primary adapters. This does however
- appear to emulate the behaviour of Sun's commercial servers. It also
- eliminates the need for output drivers to save and restore video memory
- contents. (They still need to save/restore the mode timing however.)
- This also chimes into a long-standing XFree86 policy to not save/restore
- video memory contents if the mode on entry is found to be non-VGA, a
- policy several existing drivers comply with.
-- The SBUS drivers (sunbw2, suncg14, suncg3, suncg6, sunffb, sunleo and
- suntcx), the common layer's SBUS code and the fbdev driver have all
- only been compile tested. There are likely to be Linux'isms within
- them that remain to be dealt with.
-- It still needs to be verified whether or not this work adversely
- affected support for ix86 Solaris.
-
-UltraSPARC Linux
-----------------
-- Although this code can be compiled using any Linux/SPARC64 kernel, it
- can only run successfully using 2.4.12 or later.
-- I haven't had time to sufficiently dig into XKB to properly configure it
- for sun5 keyboards. Given XFree86 on Linux/SPARC has been around for a
- while, it's likely someone has already done this, and I'd appreciate
- receiving a copy of a working XF86Config input section.
-
-PowerPC Linux
--------------
-- As mentioned above, kernel work is in progress to port this PCI scheme
- to Linux/PowerPC.
-- Aside from kernel work, the inX() and outX() definitions in compiler.h
- will need to be changed to do something akin to their SPARC definitions,
- i.e. consider their port argument to be a virtual address.
-
-Other Linux ports to multi-domain architectures
------------------------------------------------
-- Comments in os-support/bus/linuxPci.c document the kernel interface
- required to port these changes. In short, Linux ports, such as Alpha
- and mips, should follow SPARC and PowerPC's lead in providing support to
- mmap() PCI devices through their /proc/bus/pci pseudo-files and to treat
- such requests for host bridges as requests to mmap() space provided by
- these bridges.
-
-Other OS's
-----------
-- In the right hands, either linuxPci.c or sparcPci.c can be used as a
- guide for what would need to be done to port this scheme to other OS's.
- Perhaps the largest difference between the two (in terms of interface to
- the common layer) is that the SunOS port includes internally generated
- domain numbers in PCITAG's, whereas the Linux port doesn't need to. The
- remainder of the PCI code (which is OS-independent) can handle either
- scheme.
-- Required entry points are xf86GetPciDomain(), xf86MapDomainMemory(),
- xf86MapDomainIO() and xf86ReadDomainMemory(). Replacements for
- xf86BusAccWindowsFromOS(), xf86PciBusAccWindowsFromOS() and
- xf86AccResFromOS() might also be required.
-- Development of these changes has detected the fact that the XFree86 port
- to the PowerMax OS is broken, and has been for some time, i.e. since
- shortly after its introduction, back in the 3.9* days.
-
-SPARC PCI (OS-independent)
---------------------------
-- The "Simba" PCI-to-PCI bridge used in SPARC's does not implement VGA
- routing, as defined in the PCI specs. Fortunately, OpenPROM seems to
- always route VGA resources to the bus with PCI connectors, but this also
- causes the common layer to not mark any PCI adapter as primary.
-
-Multiple PCI domains (architecture- and OS-independent)
--------------------------------------------------------
-- This implementation assumes every host-to-PCI bridge provides access to
- a separate PCI domain. Each such domain provides three different
- "address" spaces: PCI configuration, I/O and memory. The
- implementation can also deal with situations where more than one PCI
- domain share (different subsets of) the same PCI configuration space. I
- have unconfirmed information that suggests it might be necessary to also
- allow the sharing of PCI memory spaces.
-- This implementation also assumes the CPU's physical address space
- includes the entirety of each domain's I/O and memory spaces. I know
- this'll need to be changed to deal with the so-called UniNorth bridge,
- found on PowerPC's, which allows access to only a subset of the memory
- space behind it.
-- Ideally, the common layer should mark as primary up to one PCI adapter
- per domain. This has yet to be done.
-- Something needs to be done about PCI master aborts on primary buses.
- For details on this, see my long-winded diatribe in sparcPci.c, and
- related comments in linuxPci.c. Suffice it to say here that I see the
- eventual implementation of host bridge drivers within XFree86 as
- unavoidable at this point.
-- DGA is broken on multi-domain platforms. The information passed to the
- client to locate the framebuffer still needs to be revised. The best way
- to deal with this is to change all drivers' OpenFramebuffer() function to
- call a common layer routine to set the device name and displacements to be
- returned to the DGA client.
-
-Output drivers
---------------
-Most drivers currently used on ix86 need(ed) source code changes.
-- Calls to xf86ReadBIOS() and xf86MapVidMem() were replaced with calls to
- xf86ReadDomainMemory() and xf86MapDomainMemory() respectively. Except
- for the "ati" and "atimisc" modules, this has already been done.
-- All ix86-style I/O port numbers need to be declared as an IOADDRESS, a
- type defined in xf86Pci.h as "unsigned long". Such port numbers also
- need to be offset by a displacement which is also defined as an
- IOADDRESS. Before a driver's PreInit() is called, the common layer
- makes this displacement available in ScrnInfoRec.domainIOBase. For
- single-domain architectures, such as ix86, domainIOBase will always be
- zero. Current use of vgaHWRec.PIOOffset has also been adjusted
- accordingly. Some drivers have been changed to keep a copy of this
- displacement in their private structure. Internally, an IOADDRESS is
- actually a pointer that has been recasted to an unsigned long, but the
- common layer "hides" this fact from the driver ABI, which means that I/O
- port numbers, as seen by drivers, remain as integers rather than
- addresses. Aside from the ati and atimisc modules, s3, sis and tseng
- are the only modules left whose I/O still needs to be converted (I've
- temporarily run out of steam).
-- Note that these conversions are not necessarily sufficient to produce
- drivers that will work on any given multi-domain architecture. A driver
- that, for example, had endianness problems, still does. But, at least,
- these conversions, along with the supporting common layer changes, make
- PCI drivers more widely amenable to porting.
-- rdinx(), wrinx(), modinx(), testrg(), testinx() and testinx2() are not
- given enough information to allow for the relocation of their I/O. They
- are consequently being deleted. The apm and ark drivers, the only
- remaining callers of the first three, have been changed to use local
- definitions instead. The last three (test*()) were already unused.
-- As a temporary measure, these changes completely disable ISA-style
- probing on SPARC's and PowerPC's. This means that driver calls to
- xf86MatchIsaInstances(), while still valid, will always return detection
- failure on SPARC's and PowerPC's. This will be dealt with when a more
- general master abort handling scheme is implemented.
-- I need to make a decision about the master abort issues mentionned above
- before I can convert the "ati" and "atimisc" modules. Consequently,
- these modules still need to be compiled with -DAVOID_CPIO on
- multi-domain architectures, and support for Mach64 variants as
- non-primary heads is not yet available.
-
-$XFree86$