Professional Documents
Culture Documents
html
Version 1.0
Technical White Paper
© 2002 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, California 94303 U.S.A. All rights reserved.
The products described in this manual may be protected by one or more U.S. patents, foreign patents, or
pending applications.
Sun, Sun Microsystems, the Sun logo, Sun Blade, Sun Fire, Sun Fireplane, Solaris, Java, Ultra, and OpenBoot
are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.
UNIX is a registered trademark in the United States and other countries, exclusively licensed through X/Open
Company, Ltd.
All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC
International, Inc. in the United States and other countries. Products bearing SPARC trademarks are based upon
an architecture developed by Sun Microsystems, Inc.
RESTRICTED RIGHTS: Use, duplication, or disclosure by the government is subject to restrictions as set forth in
subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013
and FAR 52.227-19.
THIS PUBLICATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR
IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
Contents
_________
1. Introduction
1.1 Intent
1.2 Focus
1.3 Overview
3.5 FC-AL
3.6 Ethernet
Figures
_________
Figure 6-7. Sun Blade 1000, USB Hub, Omega USB Predator CDRW
Tables
_________
1. Introduction
________________________________________________________________________
1.1 Intent
This white paper is intended to be a central source for the I/O configuration in Sun Blade[tm] workstations and
Sun Fire[tm] servers. A new system architecture has been introduced to take advantage of the UltraSPARC® III
processor. The driving force to rearchitect the host bus architecture has been the ever-increasing demand for
more bandwidth, specifically I/O throughput and reduced memory latency. For more information on the evolution
of bandwidth, see "Gigabit Ethernet, Accelerating the Standard for Speed" [7]. Although PCI card and drivers
should not require any change, opportunities for performance enhancement may arise.
1.2 Focus
This paper will focus on the new technologies and components introduced in the architecture. The new
technologies now standard on these systems include the Universal Serial Bus (USB), Fibre Channel Arbitrated
Loop (FC-AL), and IEEE 1394. Gigabit Ethernet is now standard on the servers. Compact PCI (cPCI), a more
rugged version of PCI, is also being offered on several of the Sun Fire server models. The new components
include the Sun Fireplane[tm] interconnect bus, new Host PCI Bridge (HPB), and new PCI I/O Bridge (PIB).
Since its inception, Sun Microsystems has had a history of supporting industry-leading standard bus designs.
Beginning with the Ultra[tm] workstation series, the PCI local bus has been the standard I/O bus for peripheral
interconnection. PCI still remains the main bus architecture in the new systems, though a number of
enhancements have been made. The Sun Fire server architecture will be given primary focus over the Sun Blade
workstation architecture.
1.3 Overview
Section 2 gives a brief overview of the Ultra workstation system I/O architecture, while Section 3 gives a high-
level system overview of the new components introduced in the Sun Blade workstations and Sun Fire servers. In
section 4 and 5, the two key I/O components are examined in closer detail. Section 6 provides Open Boot PROM
(OBP) examples to explain the system from the firmware point of view and Section 7 from the operating system
level. Appendix A and B list the PCI I/O configurations of the Sun Blade and Sun Fire systems individually.
This section provides an overview of the Sun Ultra system architectures that use UltraSPARC II processors.
Components that are replaced in the UltraSPARC III system architecture as examined in Section 3 will be
discussed. These include the UPA Interconnect Bar Switch, the Host PCI Bridge, and the PIC I/O Bridge.
parallel ports. For more information and details on the Ultra Architecture, please refer to "The PCI Bus and
Sun[tm] Ultra[tm] Systems Technical Brief"[1] or "Writing Solaris[tm] PCI Device Drivers for Sun[tm] SPARC[tm]
Platforms"[2].
This section provides an overview of the Sun Fire and Sun Blade system architectures that house UltraSPARC
III technology, with the exception of the Sun Blade 100 workstation, which uses an UltraSPARC IIe processor.
Emphasis will be put on changes from the Sun Ultra workstation design as examined in Section 2. The Sun
Fireplane interconnect bus replaces the UPA Interconnect Bar Switch. The UltraSPARC III processor replaces
the UltraSPARC II processor. FC-AL, USB, IEEE 1394, and Gigabit Ethernet (on servers) are now standard. The
two key new components, the new Host PCI Bridge and new PCI I/O Bridge, are explained in detail in the next
two sections.
Sun Fire and Sun Blade systems are built around the Sun Fireplane interconnect bus (see Figure 3-1),
interconnecting the new UltraSPARC III processors, memory, and I/O subsystem.
One of the major architectural innovations of the Fireplane interconnect bus is the ability to combine the
advantages of a switch-based interconnect, similar to the UPA bus, with the advantages of a single bus. A switch-
based architecture typically relies on a centralized controller, which has proven to be a limitation in achieving
higher bandwidths. In moving away from the centralized system controller, the Fireplane interconnect bus
pushed the envelope by making the data path independent from the address path. The order of data transfers
can be different from the issuing order of the requests. The Fireplane bus also minimizes latency by
implementing special techniques for delivering data to the caches, and the UltraSPARC III provides a
sophisticated write-buffer with headroom so that even worst-case circumstances do not impact performance.
❍ Out-of-order transaction processing allowing multiple "in-flight" transactions on the bus at one time
❍ High-throughput paths to memory clocked at 150 MHz (576-bit wide paths, including ECC) with
integrated support for multiprocessor configurations
❍ Clock speeds from 600 to 900 MHz with up to 8 Mbyte external cache and with a published
roadmap of versions to 1.5+ GHz
❍ Large memory bandwidth and multiprocessor scalability, providing significant advantages for high-
performance computing applications such as electronic commerce, scientific computation, and data
mining
❍ Scalable shared memory (SSM), allowing systems to quickly expand from a few processors to
hundreds of processors without rewriting applications or using extensive additional circuitry
❍ 64-bit, SPARC® v9 processor architecture; full SPARC v9 Total Store Order (TSO) compliance
❍ 100 percent binary compatibility for the Solaris[tm] Operating Environment and application software
❍ VIS instruction set for networking, media, imaging, and performance acceleration for Java[tm]
technology, enabling a two to three times performance boost, without recompilation, compared with
the UltraSPARC II
❍ Able to deliver 6 billion operations per second, pushing the limits of networking and media
acceleration
For more information, please refer to the UltraSPARC III Cu Processor page on sun.com.
3.5 FC-AL
Fibre Channel Arbitrated Loop is an industry-standard interface adopted by the American National Standards
Institute. It is usually thought of as a system-to-system or system-to-subsystem interconnection architecture. This
architecture provides high-performance links between computing nodes. The Fibre Channel loop topology was
developed to provide a low cost interconnection methodology for cost sensitive devices such as disk drives. The
Fibre Channel loop can have any combination of hosts and disks up to a maximum of 126 devices. For more
information on the FC-AL, please refer to the technical brief, "Fibre Channel Technology from Sun Microsystems"
[9].
3.6 Ethernet
Workstations still provide 10/100-Mbit/sec Ethernet as the primary LAN interface. In addition to 10/100-Mbit/sec
Ethernet, servers make Gigabit Ethernet available on the motherboard. For more information on Gigabit Ethernet
refer to "Gigabit Ethernet, Accelerating the Standard for Speed White Paper" [7].
The Host PCI Bridge (HPB) has been redesigned to interface with the Fireplane interconnect architecture. The
HPB is the primary connection between the Sun Fireplane interconnect bus and the PCI I/O subsystem.
Features in the chip include:
❍ Fireplane interface for full master and slave port connection to the high-speed Fireplane
interconnect bus offers a maximum data throughput of 1.0 Gbyte/sec.
❍ Ultra Port Architecture (UPA) interface for high-end video graphics, compliant with UPA
Specification rev 1.1; it provides support for two slave devices, and sustainable write data
throughput of 800 Mb/sec.
❍ Two independent PCI leafs: each provides an Interface Controller (IFC), a single PCI bus module
(PBM) with full master and slave support, PCI Specification Rev. 2.1 compatibility, 5V or 3.3V
signaling, and 64-bit with 32-bit device support.
❍ Each PCI leaf provides a 16-entry streaming cache (STC) for accelerating some kinds of PCI DVMA
activity.
❍ Each PCI leaf provides an I/O Memory Management Unit (IOMMU) with 16-entry TLB for mapping
DVMA addresses.
❍ Each PCI leaf provides an Interrupt Controller or "Mondo-Vector" Dispatch Unit (MDU) for delivering
interrupt requests from up to six external slots to a CPU module.
❍ Supports 33-MHz and 66-MHz PCI operation, 64-bit DMA and PIO data operations, and 64-bit data
addressing as a target.
❍ As a PCI central resource, provides arbitration for up to six master devices and a mechanism for
generating PCI configuration cycles and PCI special cycles.
❍ Operates with a PCI clock rate of either 1x or 0.5x the internal clock rate.
❍ Dual 64-byte DMA write buffers, quad 64-byte DMA read buffer, a dual 64-byte PIO write buffer, and
a dual 64-byte PIO read buffer.
The PCI leaf's main internal data buses (which are big-endian) are connected to the PBM (a little-endian module)
in a "byte-twisted" fashion, where the logical byte lanes are connected together. For byte 0, the PCI leaf's data
bits [63:56] are connected to the PBM data bits [7:0], and so on. The PBM internal control registers (which are
big-endian) are byte-twisted again internally. Figure 4-2 shows HPB byte twisting.
❍ 64-bit addressing (dual address cycle [DAC]), used for DMA bypass of IOMMU
❍ Ability to generate memory, I/O, and configuration read and write cycles
❍ External arbiter
❍ Address/data stepping
❍ Subtractive decode
Command/Byte Generated in
PCI Command Type Response in Target Mode
Enable (C/BE#) Master Mode
The PBM detects parity errors during transactions with the PCI bus. PCI receive data parity errors can be
detected during PIO reads from a PCI device and DMA writes by a PCI device. PCI send data parity errors can
be detected during PIO writes to a PCI device and DMA reads by a PCI device. PCI Parity errors are not
detected during wait states.
1. Accumulate sequentially addressed PCI write bursts into quantities the size of a system block.
2. Speculatively prefetch the next sequential block of memory for an active PCI read stream.
3. Act as a local cache for PCI read accesses to the same block.
The STC block is leveraged from the previous design with some extensive changes. There is a second data
block in each STC entry, providing a context flush capability, and a change to the operating policy so that
"infinite" (page-sized) bursts are allowed. The implementation of the STC features:
● A fully associative pool of 16 entries shared among read and write streams
● Two 64-byte blocks of data per entry providing for the transfer of large (page-sized) bursts
● Physical address page translation for each entry to reduce fush and prefetch latencies
● One entry allotment per virtual page to reduce the problem of individual misbehaved devices from
thrashing the cache
● Individual byte write enabling support for PCI bus byte granularity
Only accesses to virtual pages that are designated by software as streamable pages can use the streaming
cache's functions. The STC does not, however, participate in the system cache coherency protocol, and the data
in the cache is out of the coherency domain, so software intervention is required to ensure a consistent memory
image when transfers are complete. The order of commands, however, remains the same and does not require
software intervention; reads followed by writes and vice versa will see the correct results. Device drivers call
ddi_dma_sync(9F) to write to the stream cache registers after the DMA transfer is completed.
Extracting the most performance out of the streaming cache involves following several guidelines concerning
DMA accesses. Not conforming to these guidelines results in less than ideal observed performance. Some
access patterns may, in fact, incur a penalty that causes the streaming cache to yield poorer performance than
equivalent non-streamable accesses.
❍ DMA writes to a block within a streamable virtual page should always access memory in increasing
total sequential order (no gaps). Failure to do so will cause unnecessary flushing of the cache entry
(and byte holes within a single DMA write will cause errors). Better performance is exhibited when
writing large-sized bursts (6 bytes or larger). While writes within a block should be increasing and
sequential, no hardware-imposed performance impact is made in regard to accesses across blocks
or pages.
❍ DMA reads from a block within a streamable virtual page should access memory in increasing
sequential order, and should use the appropriate PCI bus commands based on the amount of data
to be read. Failure to do so will cause unnecessary prefetching. Reads across blocks should also be
in increasing and sequential order. Failure to do so will waste the prefetching, reducing the
maximum read bandwidth to no more than non-streaming reads. Prefetches are not launched if they
would cross a page boundary. Larger burst sizes will again improve performance.
❍ Since there is only one entry allotted per virtual page, multiple devices should not interleave their
accesses to the same virtual page. If it is desired to have multiple devices accessing non-
overlapping portions of the same page, aliasing should be used to map different virtual pages to the
same physical page.
❍ As a general rule, larger burst sizes (64 bytes or larger) will improve performance.
Byte holes within a single PCI write data stream (byte enable bit(s) is off while byte enable(s) to the left and right
are on), and zero byte writes are defined to be an error condition if the page is marked streamable. The PBM
detects these conditions, sets a status bit, and signals an interrupt. The transaction continues, however, and the
streaming cache behaves as if the byte holes didn't exist (it may overwrite data in memory that it shouldn't).
different page sizes, 8 Kbyte and 64 Kbyte. Mixed page sizes can be used in the system, but the TSB table
lookup only assumes the smaller page size of 8 Kbyte. No overlapping of pages is allowed. This gives support
for DVMA address space of 8 Mbyte to 1 Gbyte for an 8-Kbyte page and 64 Kbyte to 2 Gbyte for a 64-Kbyte
page (DVMA space = page size * TSB table size). A DVMA space larger than 2 Gbyte is not supported, which
means that 64-Kbyte and 128-Kbyte TSB sizes are not supported with a 64-Kbyte page size. Software must set
up TSB before it allows translation to start. The TSB can be accessed in the IOMMU control register.
The PCI IOMMU can operate in three different modes: translation, bypass, and pass-through. Its operating mode
is determined by the values in IOMMU Control Register, the PCI addressing mode used (32 bits vs. 64 bits), and
values in the PCI virtual address. Translation is initiated by the PBM block by providing a 32-bit virtual address.
The IOMMU hardware performs a TLB lookup first. If the lookup results in TLB hit, the IOMMU returns a 43-bit
physical address to the PBM block. If a TLB miss happens, the IOMMU waits for the PBM to request a TSB
lookup. If the TSB locates a valid mapping for the virtual page, information in the TSB entry will be loaded into
TLB and translation continues. If the TSB lookup results in a miss, an error will be returned to the PBM. The
translation of a virtual address to a physical address is illustrated in Figure 4-3.
The implementation of the PCI IOMMU allows PCI devices to have their own MMU and bypass the IOMMU that
is in the HPB. A PCI device operating in bypass mode has direct access to the entire physical space of the
Fireplane interconnect bus. Pass-through mode allows access to the 2 Gbyte of memory address space. A
DVMA access in pass-through mode will always be cacheable to space.
The Mondo Dispatch Unit (MDU) is responsible for fielding interrupts from external and internal HPB sources,
then building and sending the appropriate interrupt packet to the appropriate CPU via the Fireplane interface
block. External interrupt sources include interrupts from up to 8 PCI slots (four separate interrupts each) and up
to 16 interrupts from on-board I/O devices. These interrupts are concentrated externally to the HPB and are
presented to the Mondo Units one at a time. Internal interrupt sources include ECC errors signaled by the
Fireplane block, PCI bus errors signaled by the PBM, and the Timer/Counter interrupts. There is one MDU in
each PCI leaf within the HPB.
The MDU block is leveraged from the previous design with some substantial changes, the main one being a
reduction in outstanding interrupts from two to one (since the HPB has two copies of the MDU block). The Mondo
interrupt transfer mechanism proposed for future Sun systems is designed to reduce interrupt service overhead
through the use of processor and system-based supports. On the processor side, SPARC V9 CPUs provide a
dedicated set of registers to be used exclusively for servicing interrupts. This eliminates the need for the
processor to save its current register set to service an interrupt, and then restore it later. On the system side,
requests for interrupt service are converted into interrupt request packets, which are sent over the memory
interconnect to the processor. An interrupt packet contains a Mondo Vector, which contains data designed to
assist the processor in servicing the interrupt. Limitations of the Mondo Vector approach include:
❍ There is no priority level associated with Mondo Vector interrupts; they are serviced on first-come,
first-served basis.
❍ Flow control must be done at the interconnect level to prevent loss of interrupt packets.
❍ Forwarding DMA and interrupt requests, and keeping track of outstanding requests.
❍ Receiving DMA read replies and routing them to the appropriate block.
❍ Tracking DMA write replies for retiring completed transactions and proper flow control.
❍ Handling PIO reads and writes, DMA reads and writes, MDU interrupts, acks and nacks.
Number of Read Buffers quad 64-byte for DMA quad 64-byte for DMA
Number of Write Buffers dual 64-byte for DMA dual 64-byte for DMA
Endianness: Byte Twisting Enabled for both PIO and DMA Enabled for both PIO and DMA
transfers transfers
Disconnect End of cache line and/or page End of cache line and/or page
boundary for consistent mode; end boundary for consistent mode; end
of streaming cache on streaming of streaming cache on streaming
mode (2 x 64 byte) mode (2 x 64 byte)
Peer-to-Peer DMA On same PCI segment only On same PCI segment only
Cache Line Wrap Addressing Mode Not supported. Executed as one Not supported. Executed as one
data word at a time. data word at a time.
Exclusive Access to Main Memory Not supported. Lock# signal is not Not supported. Lock# signal is not
connected. connected.
The PCI I/O Bridge (PIB) is a chipset comprising an I/O chip and a single-chip Ethernet transceiver. Figure 5-1
shows the major component blocks of the PIB. The PIB is built around an internal bus, the Channel Engine
Interface, which provides the key to its modularity. Above the Channel Engine Interface, the Bus Adapter
connects to the PCI bus. The four identical ports on the Channel Engine Interface are used for each of the PIB's
functional units: Ethernet, USB, 1394, and EBus. Each of these has its own set of control and status registers,
data buffers, and the core logic function. The PIB is a fully scannable design and provides power management
functions for the system. Ethernet transceiver integrates PCS, PMD, and PMA functions and some filtering
functions. The PIB is compliant to the JTAG 1149.1 test architecture.
● Multifunction configuration space with independent address decoders for each function
● Five Channel Engine Interface ports, 32/64-bit wide: EBus, 1394, USB, Ethernet transmit and Ethernet
receive
Like most other PCI Bus devices, the PIB conforms to the little-endian byte ordering. The channel engines within
the PIB are also little-endian. The PIB supports byte stacking when accessing the PROM and other devices on
the EBus. The 32-bit word assembled from successive reads of the 8-bit PROM EBus is returned in little-endian
format. This is still compatible with CPU code fetches, which are always big-endian, since the HPB incorporates
a fixed-byte lane alignment, converting the data in this case back to big-endian.
● Modular.
USB is an industry-standard, low-cost serial bus intended for 'slower' peripherals such as keyboards and mice. In
addition to supporting traditional asynchronous technology appropriately, the USB has provisions for supporting
isochronous devices as well. As such, it can be used for computer telephony integration (CTI) applications. The
USB has two speed modes of operation, 1.5 Mbit/sec and 12 Mbit/sec. The slow speed is intended for cost-
sensitive applications. The USB channel engine provides 1 DMA engine and 1 Kbyte of total internal buffering.
The USB interface provides the host controller for USB transfers and a four-port integrated hub. The USB host
controller manages the control flow and data flow. It also provides connection management and provides status
information. The hub enables tiered star topology and provides multiple connections. The USB interface also
provides auto resume from power-managed (suspended) state. The USB host controller is OpenHCI compliant.
There are some additional features provided for performance enhancement and making the core more palatable
to the Solaris OE.
● Hooks to retry transactions on channel engine interface for PCI 2.1 compliance.
● Capable of supporting EPROM, TOD/NVRAM, Audio CODEC, superIO, external serial ports and generic
Intel-style (ISA) slave and slave DMA devices.
● 8 chip selects.
● Supports byte stacking for word and half-word slave cycles to EBus devices.
● Multimaster capable.
6. OpenBoot[tm] Firmware
________________________________________________________________________
Since 1989, Sun system firmware has been based upon IEEE 1275, a flexible and extensible boot PROM
architecture. OpenBoot system firmware is Sun's implementation of IEEE 1275. Open Firmware is the name
used for all firmware that complies with IEEE 1275. IEEE 1275 is a very powerful boot architecture: it supports
loading and executing of programs, including the operating system, from disks, tapes, and network devices,
providing complete boot flexibility. Its bus-independent method for identifying expansion devices and add-on
cards is extensible to the complex bus topologies possible with PCI and other new I/O technologies. Before
dissecting both a new workstation and new server, taking a look at the UltraSPARC III system architecture from
a firmware point of view, it is important to provide a little more background information about IEEE 1275.
Each device node may have properties, methods, and data. Properties describe the characteristics of a
hardware device. Properties are externally visible to both OpenBoot procedures and client programs, that is, the
Solaris Operating Environment. Methods are named software procedures that control hardware devices or
provide other services. Data is used by methods to maintain internal information. Unlike properties, which can be
accessed by external software, data cannot be directly accessed from outside the device node package. As an
example, the device tree of a Sun Blade 1000 workstation is shown in Figure 6-1 and the properties of PCI bus B
in Figure 6-2.
{1} ok banner
Sun Blade 1000 (2 X UltraSPARC-III), No Keyboard
OpenBoot 4.0, 4096 MB memory installed, Serial #16458796.
Ethernet address 8:0:20:fb:24:2c, Host ID: 80fb242c.
{0} ok show-devs
/ppm@8,410050
/upa@8,480000 -> HPB-UPA
/pci@8,600000 -> HPB-PCI 64bit/66MHz
/pci@8,700000 -> HPB-PCI 32bit/33MHz
/memory-controller@1,400000
/SUNW,UltraSPARC-III@1,0 -> Processor 1 (P1)
/memory-controller@0,400000 -> Memory Controller on
Processor 0
/SUNW,UltraSPARC-III@0,0 -> Processor 0 (P0)
/virtual-memory
/memory@m0,0
/aliases
/options
/openprom
/chosen
/packages
/upa@8,480000/SUNW,ffb@0,0 -> Framebuffer on UPA slot
/pci@8,600000/TECH-SOURCE,gfxp@1
/pci@8,600000/SUNW,qlc@4 -> FC-AL controller
/pci@8,600000/SUNW,qlc@4/fp@0,0
/pci@8,600000/SUNW,qlc@4/fp@0,0/disk
/pci@8,700000/scsi@6,1
/pci@8,700000/scsi@6
/pci@8,700000/usb@5,3 -> USB part of PCI I/O Bridge
/pci@8,700000/firewire@5,2 -> IEEE-1394 on PCI I/O Bridge
/pci@8,700000/network@5,1 -> 10/100 Ethernet on PCI
I/O Bridge
/pci@8,700000/ebus@5 -> ebus on PCI I/O Bridge
/pci@8,700000/scsi@6,1/tape
/pci@8,700000/scsi@6,1/disk
/pci@8,700000/scsi@6/tape
/pci@8,700000/scsi@6/disk
/pci@8,700000/ebus@5/serial@1,400000
/pci@8,700000/ebus@5/parallel@1,300278
/pci@8,700000/ebus@5/floppy@1,3023f0
/pci@8,700000/ebus@5/pmc@1,300700
/pci@8,700000/ebus@5/gpio@1,300600
/pci@8,700000/ebus@5/rtc@1,300070
/pci@8,700000/ebus@5/audio@1,200000
/pci@8,700000/ebus@5/beep@1,32
/pci@8,700000/ebus@5/i2c@1,30
/pci@8,700000/ebus@5/i2c@1,2e
/pci@8,700000/ebus@5/ppm@1,e
/pci@8,700000/ebus@5/bbc@1,0
/pci@8,700000/ebus@5/flashprom@0,0
/pci@8,700000/ebus@5/i2c@1,30/i2c-bridge@0,60
/pci@8,700000/ebus@5/i2c@1,30/motherboard-fru@0,a8
/pci@8,700000/ebus@5/i2c@1,30/card-reader@0,40
/pci@8,700000/ebus@5/i2c@1,30/fan-control@0,48
/pci@8,700000/ebus@5/i2c@1,30/temperature@0,98
/pci@8,700000/ebus@5/i2c@1,30/cpu-fru@0,a2
/pci@8,700000/ebus@5/i2c@1,30/temperature@0,30
/pci@8,700000/ebus@5/i2c@1,30/cpu-fru@0,a0
/pci@8,700000/ebus@5/i2c@1,2e/idprom@0,a0
/pci@8,700000/ebus@5/i2c@1,2e/nvram@0,a0
/pci@8,700000/ebus@5/i2c@1,2e/dimm-fru@1,ac
/pci@8,700000/ebus@5/i2c@1,2e/dimm-fru@1,a8
/pci@8,700000/ebus@5/i2c@1,2e/dimm-fru@1,a4
/pci@8,700000/ebus@5/i2c@1,2e/dimm-fru@1,a0
/openprom/client-services
/packages/ufs-file-system
/packages/kbd-translator
/packages/dropins
/packages/obp-tftp
/packages/terminal-emulator
/packages/disk-label
/packages/deblocker
/packages/SUNW,builtin-drivers
{0} ok
The numerical representation of the PCI address and the size for PCI devices as defined in PCI Bus Binding to
IEEE Standard 1275: 1994 Standard for Boot (Initialization Configuration) Firmware, Rev. 2.1, consists of three
cells and two cells, respectively. Applying the address formats to the reg property allows device drivers to
retrieve device information such as:
❍ Bus number
❍ Function number
❍ Register number
Figure 6-3 shows address and size formats, while Table 6-1 shows address and size format codes.
The bus number (8 bits) of each PCI bus is assigned a unique number during system initialization, when the bus
controllers for the PCU buses within the PCI domain are located. This number is written into a register in the bus
controller of that PCI bus. There is often a close relationship between the device number (5 bits) and the IDSEL
device select line. Hence, the device number will indicate which slot the PCI device is plugged into. Figure 6-4
shows the properties of the PCI SCSI controller in a Sun Blade 1000 workstation.
{0} ok pwd
/pci@8,700000
{0} ok cd scsi@6
{0} ok .properties
assigned-addresses 81003010 00000000 00000300 00000000 00000100
82003014 00000000 00124000 00000000 00002000
82003018 00000000 00126000 00000000 00002000
device_type scsi-2
clock-frequency 02625a00
reg 00003000 00000000 00000000 00000000 00000000
01003010 00000000 00000000 00000000 00000100
Figure 6-5 focuses in on the reg property which has a physical address-size pair for each of the four registers.
The bytes are displayed in hexidecimal format (0x00) and must be converted into binary format (0b00000000) to
match the address and size formats. Each row indicates a different register and each column indicates a different
cell. The rows, from top to bottom, represent register 0 through 3. The columns, from left to right, represent
phys.hi, phys.mid, phys.low, size.hi, and size.low. The first byte (00) in row 1, column 1, indicates that Register 0
is relocatable, not prefetchable, not aliased and is in configuration space. Register 1, 2, and 3 are also in
configuration space so the address of each register is relative to the base register address. To get the absolute
address of each of these registers, drivers have to use the assigned-address property. The second and third byte
in each register's phys.hi address is 0x00 (0b00000000) and 0x30 (0b00110000), respectively, indicating that the
device is in slot number 6 (hence scsi@6) of bus number 0 and performs only one function, function number 0.
Register 1 is in I/O space and has size 0x100 as indicated in the size.low address. Registers 2 and 3 are in 32-
bit address memory space, and each has size 0x2000.
This property defines the device's name. In accordance with the "Generic Names Recommended Practice" [6], it
should represent the general nature of the device. For devices with FCode, the name is defined by the FCode
program. For devices without FCode, this property is derived from the PCI "class code," as in the name property
for class code 0C00xx is firewire. Table 1 in the "PCI Bus Binding: to IEEE Standard 1275-1994 Standard for
Boot (Initialization Configuration) Firmware, Revision 2.1" [4] lists the different class code -name property
combinations. If none apply, the bus node should generate a name of the form pcivvvv,dddd as described
next in the compatible property. For more information about the name property, see "PCI Bus Binding: to IEEE
Standard 1275-1994 Standard for Boot (Initialization Configuration) Firmware, Revision 2.1" [4].
compatible
This property defines devices with which the device is compatible and has the form pcivvvv,dddd. If the
SubsystemID field in the configuration registers for this device is nonzero, vvvv,dddd should be the
SubsystemVendorID and SubsystemID, respectively; otherwise vvvv,dddd should be the value of the
VendorID and DeviceID fields.
reg
This property is used by the device to export its memory to the operating system for mapping. For devices
without FCode, this property is generated by the bus node by reading the base address register in the
configuration space. For devices with FCode, this property is generated by the FCode of the device. This
property is mandatory for PCI child nodes. The property value consists of a sequence of physical-address, size
pairs. This is similar to the device node properties explained earlier. In the first such pair, the physical-address
component is the configuration space address of the beginning of the function's set of configuration registers,
and the size component is 0. Note that there is no particular relationship between the PCI base registers and the
reg property. A particular base register may or may not be represented in the reg property, and the reg
property may contain entries referring to addresses not controlled by any base register. If the n bit is 0, the
address is relative to the value of the associated base register, and device drivers should read the assigned-
addresses property to get the absolute address.
assigned addresses
Each entry in this property corresponds to either one (32-bit address memory space) or two (64-bit address
memory space) of the function's configuration space base address registers. If the n bit is 1, the address is
absolute (within the PCI domain address space).
interrupts
The value of this property represents the interrupt line to which this function's interrupt is connected. This
property is present if the Configuration Interrupt Pin Register is nonzero, and is absent otherwise.
fcode-rom-offset
This property indicates the offset of the PCI Expansion ROM image within the device's Expansion ROM in which
the FCode image was found. This value is generated before the FCode is evaluated. The following properties
represent the values of standard PCI configuration registers. They are created during the probing process after
the device node has been created by OpenBoot, but before evaluating the device's FCode (if any). The property
is absent if the value of the property is 0.
❍ vendor-id
❍ device-id
❍ revision-id
❍ callse-code
❍ min-grant
❍ max-latency
❍ devsel-speed
❍ cache-line-size
❍ fast-back-to-back
❍ subsystem-id
❍ subsystem-vendor-id
❍ 66mhz-capable
❍ udf-supported
It is important to note that Sun Fire systems use OBP 4.x commands. A number of PCI specific commands are
no longer available, as these commands did not scale very well in more complex system architectures using
multiple HPBs. Among them are show-pci-devs, show-pci-devs-all, show-pci-config, show-pci-configs, and probe-
pci. However, the same information can still be obtained using Forth. (Figure 6-6 provides an example of
information obtained using Forth.)
{0} ok pwd
/pci@8,700000
{0} ok 1000 sph
{0} ok
Current OBP implementation for USB devices does not provide for hot plugging. Removing the USB keyboard
when the system is at ok prompt will hang the system. If the USB keyboard is plugged in again, OBP does not
recognize it. This is particularly dangerous if the system is live and healthy and someone drops the system to
kadb/ok prompt and removes the keyboard. The only solution in that case is to power-cycle the system. As a
rule, no USB device should be hot-plugged when system is at ok prompt in OBP.
See Figure 6-7 for output relating to Sun Blade 1000, USB hub, Iomega USB Predator CDRW.
{1} ok cd usb@5,3
{1} ok .properties
assigned-addresses 82002b10 00000000 01000000 00000000 01000000
82002b30 00000000 00c00000 00000000 00400000
sunw,find-fcode f0 0b 02 c0
maximum-frame# 00 00 ff ff
reg 00002b00 00000000 00000000 00000000 00000000
02002b10 00000000 00000000 00000000 01000000
#size-cells 00000000
#address-cells 00000001
compatible 70 63 69 31 30 38 65 2c 31 31 30 33 2e 31 00 70
name usb
interrupts 00000004
fast-back-to-back
devsel-speed 00000001
class-code 000c0310
latency-timer 00000040
cache-line-size 00000010
max-latency 00000005
min-grant 0000000a
revision-id 00000001
device-id 00001103
vendor-id 0000108e -> Sun Microsystem PCI vendor ID
{1} ok cd usb@5,3
{0} ok ls
f00b6260 storage@4
f00b1098 hub@3
{1} ok cd hub@3 -> USB hub in USB port 3
{1} ok .properties
#size-cells 00000000
#address-cells 00000001
endpoints 0,1
compatible 75 73 62 33 65 62 2c 33 33 30 31 2e 31 30 30 00
name hub
reg 00000003 -> connected to USB port 3
assigned-address 00 00 00 02
{0} ok cd ..
{0} ok cd storage@4 -> USB storage device in port 4
{0} ok .properties
endpoints 0,1,2,3
compatible 75 73 62 35 39 62 2c 35 30 2e 31 30 30 00 75 73
name storage
reg 00000004 -> connected to USB port 4
0} ok
assigned-address 00 00 00 03
Figure 6-7. Sun Blade 1000, USB Hub, Iomega USB Predator CDRW
Device nodes are shown in the device tree, using the number of the USB hub port or the USB host controller port
to which the USB device is attached (such as Storage@4 is a USB storage device plugged into port 4 of the USB
host controller or USB hub). The name, compatible and reg device properties are based upon information out of
the USB device descriptor (bDeviceClass, bDeviceSubclass, bDeviceProtocol).
name
The device node name property is determined using the information in Table 6-2.
compatible
The compatible property provides a list of alternate name property values. The value is a list of encoded and
concatenated strings. The lists may include combinations of vendorID, productID fields and class descriptor
fields. Both the name and compatible property are important for device driver binding.
reg
The reg property for a device node consists of the number of the USB hub port or the USB host controller port to
which the USB device is attached.
name
The interface node name property is determined using the information in Table 6-3.
1 1 any sound-control
1 2 any sound
1 3 any midi
3 1 1 keyboard
3 1 2 mouse
compatible
Similarly to the device node compatible property, the interface node compatible property is a list of encoded and
concatenated strings. The lists may include combinations of vendorID, productID fields and interface class
descriptor fields.
reg
The reg property for a child node consists of two integers; the first contains the bInterfaceNumber value, the
second the bConfiguration value.
Devices in the Solaris OE are represented as a tree of interconnected device nodes. The tree begins at the 'root'
device node, which represents the platform. Below the root node are 'branches' of the device tree, where a
branch consists of one or more bus nexus devices and a terminating leaf device. The system builds a tree
structure that contains information about the devices connected to the machine at boot time. The device tree can
also be modified by dynamic reconfiguration operations while the system is in normal operation.
Bus nexus devices are devices that provide bus mapping and translation services to devices that are subordinate
to it in the device tree. PCI-PCI bridges, PCMCIA adapters, and SCSI HBAs are all examples of nexus devices.
Leaf devices are typical peripheral devices such as disks, tapes, network adapters, frame buffers, and so forth.
Drivers for these devices export the traditional character and block driver interfaces for use by user processes to
read and write data to storage or communication devices.
In Figure 7-1, the root node is the parent node of the child SUNW,ffb leaf node (a frame buffer), a pseudo bus
nexus node, and a PCI bus nexus node. The SUNW,ffb leaf node represents a system frame buffer. The pseudo
bus nexus node is the parent of any pseudo device drivers (drivers without hardware). The PCI bus nexus node
further has two PCI bus nexus nodes as its children representing two PCI-to-PCI bridges. The lower-left PCI bus
nexus node is the parent of the child nodes; ebus bus nexus node, network leaf node (ethernet), and ide bus
nexus node. The ebus bus nexus node is the parent of the child nodes fdthree leaf node (a floppy disk device)
and sd leaf node (a CD-ROM device).
shows all device nodes regardless of whether a driver for the device exists on the system or not.
7.3.1 libdevinfo
libdevinfo provides interfaces for accessing all public device configuration data. See libdevinfo(3LIB)
for a list of interfaces. See http://soldc.sun.com/developer/support/driver/docs/whitepapers.html for the
libdevinfo white paper.
7.3.2 prtconf
The prtconf command displays all the devices in the system as shown in Figure 7-2.
pseudo, instance #0
7.3.3 /devices
The /devices hierarchy provides a name space representing the device tree. Figure 7-3 is an abbreviated
listing of the /devices name space. The sample output in Figure 7-3 corresponds to the example device tree in
Figure 7-1 and the prtconf output shown in Figure 7-2.
/devices
/devices/pseudo
/devices/pci@1f,0:devctl
/devices/SUNW,ffb@1e,0:ffb0
/devices/pci@1f,0
/devices/pci@1f,0/pci@1,1
/devices/pci@1f,0/pci@1,1/SUNW,m64B@2:m640
/devices/pci@1f,0/pci@1,1/ide@3:devctl
/devices/pci@1f,0/pci@1,1/ide@3:scsi
/devices/pci@1f,0/pci@1,1/ebus@1
/devices/pci@1f,0/pci@1,1/ebus@1/power@14,724000:power_button
/devices/pci@1f,0/pci@1,1/ebus@1/se@14,400000:a
/devices/pci@1f,0/pci@1,1/ebus@1/se@14,400000:b
/devices/pci@1f,0/pci@1,1/ebus@1/se@14,400000:0,hdlc
/devices/pci@1f,0/pci@1,1/ebus@1/se@14,400000:1,hdlc
/devices/pci@1f,0/pci@1,1/ebus@1/se@14,400000:a,cu
/devices/pci@1f,0/pci@1,1/ebus@1/se@14,400000:b,cu
/devices/pci@1f,0/pci@1,1/ebus@1/ecpp@14,3043bc:ecpp0
/devices/pci@1f,0/pci@1,1/ebus@1/fdthree@14,3023f0:a
/devices/pci@1f,0/pci@1,1/ebus@1/fdthree@14,3023f0:a,raw
/devices/pci@1f,0/pci@1,1/ebus@1/SUNW,CS4231@14,200000:sound,audio
/devices/pci@1f,0/pci@1,1/ebus@1/SUNW,CS4231@14,200000:sound,audioctl
/devices/pci@1f,0/pci@1,1/ide@3
/devices/pci@1f,0/pci@1,1/ide@3/sd@2,0:a
/devices/pci@1f,0/pci@1,1/ide@3/sd@2,0:a,raw
/devices/pci@1f,0/pci@1,1/ide@3/dad@0,0:a
/devices/pci@1f,0/pci@1,1/ide@3/dad@0,0:a,raw
/devices/pci@1f,0/pci@1
/devices/pci@1f,0/pci@1/pci@2
/devices/pci@1f,0/pci@1/pci@2/SUNW,isptwo@4:devctl
/devices/pci@1f,0/pci@1/pci@2/SUNW,isptwo@4:scsi
A device node can also have a compatible property associated with it. The compatible property (if it exists)
contains an ordered list of one or more possible driver names or driver aliases for the device. The system uses
both the name and the compatible properties to select a driver for the device. If the compatible property exists,
the system first attempts to match the contents of the compatible property to a driver on the system. Beginning
with the first driver name on the compatible property list, the system attempts to match the driver name to a
known driver on the system. It processes each entry on the list until either a match is found or the end of the list
is reached. If the contents of either the name property or the compatible property match a driver on the system,
then that driver is bound to the device node. If no match is found, no driver is bound to the device node.
Figure 7-5 and Figure 7-6 show two device nodes: one node uses a specific device name, and the other uses a
generic device name.
For the device node with a specific device name, the driver binding name SUNW,ffb is the same name as the
device node name.
For the device node with the generic device name display, the driver binding name SUNW,ffb is the first name on the
compatible property driver list that matches a driver on the system driver list. In this case, display is a generic
device name for frame buffers.
This appendix focuses on the PCI I/O configurations of each of the Sun Blade workstation models. Sun Blade
workstations are PCI 2.1 Specification compliant. Full-length slots are 12 inches and short slots are 7 inches.
Short PCI I/O cards will also fit in full-length PCI I/O slots. 33-MHz cards that are capable of 3.3V operation may
also be used in the 66-MHz slots but may impact disk performance. 32-bit cards that match or meet the
preceding voltage requirement can be used in the 64-bit slots without forcing the entire bus to operate in 32-bit
mode. Information regarding the SCSI controller, Ethernet, USB, and other peripheral device configurations for
each model can be found in the references listed within each section. Table 8-1 displays the PCI slot
configuration for Sun Blade workstations.
This appendix focuses on the PCI and cPCI I/O configurations of each of the Sun Fire server models. Sun Fire
servers are PCI 2.1 Specification compliant. Full-length slots are 12 inches and short slots are 7 inches. Short
PCI I/O cards will also fit in full-length PCI I/O slots. 33-MHz cards that are capable of 3.3V operation may also
be used in the 66-MHz slots but may impact disk performance. 32-bit cards that match or meet the preceding
voltage requirement can be used in the 64-bit slots without forcing the entire bus to operate in 32-bit mode.
Information regarding the SCSI controller, Ethernet, USB, and other peripheral device configurations for each
model can be found in the references listed within each section. Table 9-1 displays the PCI slot configuration for
# of I/O assemblies 1 1 1 2 2 2 4 18
# of 66/64/3.3 cPCI
- - - 2 1* 1* 1* -
cards per assembly
# of 66/64/3.3 PCI
1 2 2 - 2 2 2 2
cards per assembly
# of 33/64/5 PCI
3 4 7 - 6 6 6 2
cards per assembly
* Sun Fire 6800/4810/4800 Servers support cPCI cards as well, allowing half the number of total cPCI cards as
PCI cards.
tree.
{0} ok banner
Sun Fire 880, No Keyboard
OpenBoot 4.0, 8192 MB memory installed, Serial #12980144.
Ethernet address 8:0:20:c6:f:b0, Host ID: 80c60fb0.
{0} ok .speed
CPU0 Speed: 750 MHz, 5:1 ClkMode
CPU2 Speed: 750 MHz, 5:1 ClkMode
Safari Speed: 150 MHz
{0} ok show-devs
/pci@9,600000 -> HPB # 1, PCI bus A
/pci@9,700000 -> HBP # 1, PCI bus B
/pci@8,600000 -> HBP # 2, PCI bus A
/pci@9,700000/ebus@1/i2c@1,30/fru@0,ae
/pci@9,700000/ebus@1/i2c@1,30/fru@0,a8
/pci@9,700000/ebus@1/i2c@1,30/fru@0,a2
/pci@9,700000/ebus@1/i2c@1,30/fru@0,a0
/pci@9,700000/ebus@1/i2c@1,30/temperature-sensor@0,9c
/pci@9,700000/ebus@1/i2c@1,30/adio@0,96
/pci@9,700000/ebus@1/i2c@1,30/adio@0,92
/pci@9,700000/ebus@1/i2c@1,30/adio@0,90
/pci@9,700000/ebus@1/i2c@1,30/ioexp@0,8a
/pci@9,700000/ebus@1/i2c@1,30/ioexp@0,88
/pci@9,700000/ebus@1/i2c@1,30/ioexp@0,82
/pci@9,700000/ebus@1/i2c@1,30/ioexp@0,80
/pci@9,700000/ebus@1/i2c@1,30/ioexp@0,72
/pci@9,700000/ebus@1/i2c@1,30/ioexp@0,70
/pci@9,700000/ebus@1/i2c@1,30/i2c-bridge@0,60
/pci@9,700000/ebus@1/i2c@1,30/adio@0,5e
/pci@9,700000/ebus@1/i2c@1,30/adio@0,5a
/pci@9,700000/ebus@1/i2c@1,30/controller@0,58
/pci@9,700000/ebus@1/i2c@1,30/ioexp@0,46
/pci@9,700000/ebus@1/i2c@1,30/temperature@0,34
/pci@9,700000/ebus@1/i2c@1,30/temperature@0,30
/pci@9,700000/ebus@1/i2c@1,30/smbus-ara@0,18
/pci@9,700000/ebus@1/i2c@1,30/controller@0,16
/pci@9,700000/ebus@1/i2c@1,2e/temperature@4,98
/pci@9,700000/ebus@1/i2c@1,2e/temperature@4,56
/pci@9,700000/ebus@1/i2c@1,2e/temperature@4,54
/pci@9,700000/ebus@1/i2c@1,2e/temperature@4,52
/pci@9,700000/ebus@1/i2c@1,2e/temperature@4,34
/pci@9,700000/ebus@1/i2c@1,2e/temperature@4,32
/pci@9,700000/ebus@1/i2c@1,2e/temperature@4,30
/pci@9,700000/ebus@1/i2c@1,2e/fru@4,aa
/pci@9,700000/ebus@1/i2c@1,2e/fru@4,a8
/pci@9,700000/ebus@1/i2c@1,2e/fru@4,a0
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,ae
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,ac
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,aa
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,a8
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,a6
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,a4
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,a2
/pci@9,700000/ebus@1/i2c@1,2e/fru@2,a0
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,ae
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,ac
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,aa
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,a8
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,a6
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,a4
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,a2
/pci@9,700000/ebus@1/i2c@1,2e/fru@0,a0
/pci@8,600000/SUNW,qlc@2
/pci@8,600000/network@1 -> Gigabit Ethernet on PCI 66/64 bus
/pci@8,600000/SUNW,qlc@2/fp@0,0 -> FC-AL controller on PCI 66/64 bus
/pci@8,600000/SUNW,qlc@2/fp@0,0/disk
/pci@8,700000/scsi@1
/pci@8,700000/scsi@1/tape
/pci@8,700000/scsi@1/disk
/openprom/client-services
/packages/ufs-file-system
/packages/kbd-translator
/packages/dropins
/packages/SUNW,debug
/packages/obp-tftp
/packages/terminal-emulator
/packages/disk-label
/packages/deblocker
/packages/SUNW,builtin-drivers
{0} ok
{0} ok cd /pci@9,600000
{0} ok ls
{0} ok cd ..
{0} ok cd /pci@9,700000
{0} ok ls
f00e360c usb@1,3
f00db25c network@1,1
f00a6f98 ebus@1
{0} ok cd ..
{0} ok cd /pci@8,600000
{0} ok ls
f00cf5c4 SUNW,qlc@2
f00c8cb0 network@1
{0} ok cd ..
{0} ok cd /pci@8,700000
{0} ok ls
f00d52e4 scsi@1
The Sun Fire 4800 subsystem supports two PCI I/O assemblies and operates at 4.8-Gbyte/sec bandwidth. There
are two supported I/O card cage assemblies, a standard PCI assembly and a cPCI, Compact PCI assembly. The
cPCI assembly consists of four 3U slots. There are four cPCI buses, two 33-MHz slots and two 66-MHz slots.
Note that these cPCI assemblies are different than the cPCI assemblies used in the SF3800. The PCI I/O
assembly consists of eight external PCI slots per PCI I/O assembly; six slots for full-length PCI I/O cards and two
slots for short PCI I/O cards. Short PCI cards can be installed in any of the six full-length slots as well. The full-
length PCI I/O slots (0, 1, 2, 4, 5, 6) are 33 MHz, 64-bit, and 5V I/O. The short PCI I/O slots (3 and 7) are 66/33
MHz, 64-bit, and 3.3V I/O. Peak I/O is affected by operating frequency; total peak I/O throughput per PCI board
is 965 Mbyte/sec. The two PCI I/O assemblies are located in the front of the system. PCI I/O cards can be
installed in either the top PCI I/O assembly locations or the bottom PCI I/O assembly locations. For more
information about the Sun Fire 4800 Server architecture, see "Sun Fire 6800/4810/4800/3800 Systems
Overview" [16]. Figure 9-5 shows the Sun Fire 6800/4810/4800 server PCI I/O assembly.
Glossary
________________________________________________________________________
ack: acknowledge character, a signal sent by a station to a terminating station as an affirmative response that a
connection has been made, or that data has been received.
bus: a set of parallel communication lines that connect the major components of a computer system
device driver: software that communicates with and manages a device on behalf of the user or application
FCodes: Forth bytecodes, a small program, usually a bootstrap loader, written in the Forth language and stored
in a PROM or EPROM
IEEE 1275: a standard that specifies how firmware should be applied to the PCI bus
MBus: Multibus
nack: negative acknowledge character, a control code returned by a receiving station indicating that a station
with an established connection has sent incorrect information.
OpenBoot: In SBus profiles, the facility by which the FCodes program can interrogate the host and determine the
state of various parameters it addresses
References
________________________________________________________________________
[1] "The PCI Bus and Sun[tm] Ultra[tm] Systems Technical Brief," Sun Microsystems, Inc., 1997:
http://sunsite.csi.forth.gr/sunsite/Sun/sun_product_papers/iotech/pci_ultra.pdf
[2] "Writing Solaris[tm] PCI Device Drivers for Sun[tm] SPARC[tm] Platforms," Chien-Hua Yen, Sun
Microsystems Computer Corporation, February 1997:
http://sunsite.csi.forth.gr/sunsite/Sun/sun_product_papers/iotech/
[3] "IEEE Standard 1275-1994 Standard for Boot (Initialization Configuration) Firmware: Core Requirements and
Practices," IEEE Standards Organization (ISBN Number: 1-55937-426-8):
http://playground.sun.com/1275/home.html
[4] "PCI Bus Binding: to IEEE Standard 1275-1994 Standard for Boot (Initialization Configuration) Firmware,
Revision 2.1," Open Firmware Working Group, 1998:
http://playground.sun.com/1275/bindings/pci/pci2_1.pdf
[5] "Open Firmware, Recommended Practice: Universal Serial Bus, Version 1," Open Firmware Working Group,
June 1, 1998: http://playground.sun.com/pub/1275/bindings/usb/
[6] "Generic Names Recommended Practice, Version 1.4," December 30, 1996:
http://playground.sun.com/pub/1275/practice/#gnames
[7] "Gigabit Ethernet, Accelerating the Standard for Speed," White Paper, Gigabit Ethernet Alliance, 1998:
http://www.10gea.org/GEA-Accel1999_rev-wp.pdf
http://fw.east/Docs/tois/IO-FCode/fcal-selftest/html/txtindex.html
[9] "Fibre Channel Technology from Sun Microsystems," Technical Brief, Sun Microsystems, Inc., 1997:
http://sunsite.csi.forth.gr/sunsite/Sun/sun_product_papers/SSA/fibre_channel.pdf
http://docs.sun.com/ab2/coll.45.13/DRIVER/@Ab2TocView?Ab2Lang=C&Ab2Enc=iso-8859-1&
DwebQuery=%22Writing+Device%22+OR+%22Device+Drivers%22&oqt=%22Writing+Device+Drivers%22
[11] "The Sun Blade 100 Workstation Architecture Technical White Paper," Sun Microsystems, Inc., March 2001:
http://www.sun.com/desktop/sunblade100/sb100_wp.pdf
[12] "The Sun Blade 1000 Workstation Architecture Technical White Paper," Sun Microsystems, Inc., 2000:
http://www.sun.com/desktop/sunblade1000/whitepapers/sb1000wp.pdf
[13] "Sun Fire 280R Server Product Notes," Sun Microsystems, Inc., September 2000:
http://www.sun.com/products-n-solutions/hardware/docs/Servers/Workgroup_Servers/Sun_Fire_280R/index.html
[14] "Sun Fire 880 Server Product Notes, "Sun Microsystems, Inc., May 2001:
http://www.sun.com/products-n-solutions/hardware/docs/pdf/806-6593-15.pdf
[15] "Sun Fire 880 Server Just The Facts," Sun Microsystems, Inc., July 2001
[16] "Sun Fire 6800/4800/3800 Systems Overview," Sun Microsystems, Inc., 2001
[17] "Sun Fire 6800/4800/3800 Systems Service Manual," Sun Microsystems, Inc., 2001
[18] "Sun Fire 3800-6800 Servers - Computing for the Net Effect," Technical White Paper, Sun Microsystems,
Inc., March 2001: http://www.sun.com/midframe/presskit/Sun_Fire_Technical_Overview_WP.pdf
[19] "Sun Fire 15K System Overview," Sun Microsystems, Inc., 2001:
http://sunsolve.sun.com/data/806/806-3509/pdf/806-3509-10.pdf