I am sponsoring the following case on behalf of Judy Chen and Wesley Shao as a fast-track, with timeout February 5, 2009. The project desires micro/patch binding.
1. Introduction 1.1. Project/Component Working Name: Remove /isa pseudo node for x86 1.2. Name of Document Author/Supplier: Judy Chen 1.3. Date of This Document: 13 November, 2008 4. Technical Description 4.1. Background The current Solaris x86 OS hard codes all ISA (non-self identi- fying) devices under /isa pseudo node. It has the following deficiencies: o It does not reflect the actual hardware topology. o It does not allow ISA devices that are capable of bus mastering (including 1st-party and 3rd-party DMA) to work correctly on virtualization platforms. To be exact, the Intel VT-d technology provides DMA remapping hardware that requires ISA DMA devices' PCI ID (bus, device, and function numbers) to be provided at DMA mapping request time. Since ISA device's parent is directly under root, such PCI ID cannot be determined by the DMA implementation code. The previous Intel IOMMU project (PSARC/2008/560) worked around this by doing handshakes via global variables. 3rd parties, in this case Intel, won't be able to provide a DDI compliant device driver. The bus mastering capable ISA devices that are supported by Solaris include: ecpp(7D): parallel port fdc(7D) : floppy disk controller pcn(7D) : AMD PCnet-ISA ethernet controller o The Resource Allocator (RA), part of the current DDI Hotplug Framework project (PSARC/2008/181), needs to maintain certain PCI/ISA resources (memory/IO address space) consistently. While ISA devices are not under pci/isa hardware node, RA project would have to provide a separate set of code and interface to manage this disparity. 4.2. Proposal This project proposes to remove /isa pseudo node and move ISA devices under LPC/ISA bridge on x86 platforms. The detailed changes are listed as below. o Remove /isa pseudo node. Attach isa driver with LPC/ISA bridge and as a result, move ISA devices' nodes under pci/isa hardware node. o Add below properties to pci/isa node according to IEEE1275 standard. "device_type", "ranges" o Remove hard coded device path of legacy input/output devices from consconfig_dacf module. For example, replace the hard coded device path of legacy keyboard "/isa/i8042 at 1,60/keyboard at 0" with the actual one "/pci at 0,0/isa at 1f/i8042 at 1,60/keyboard at 0". o Remove the dependency to /used-resources from pci_autoconfig module. Currently, the pseudo node /used-resources is used to represent ISA resources. The ISA resources include memory/IO address spaces, interrupts and DMA channels. /used-resouces is created by ACPI when ACPI enumerates ISA devices. It is used by two modules: - pci_autoconfig: to setup memory/io address spaces available for PCI bus. - busra: to setup resource map for memory/io address spaces and interrupts available for ISA bus. This project will represent the ISA memory/IO address space with standard "ranges" property of pci/isa hardware node. And leave busra the consumer of /used-resources. Once the dependency between busra and /used-resources is addressed by the DDI Hotplug Framework project, /used-resources can then be removed for good. 4.3 Benefits o A proper parent-child relationship permits allocation of the ISA resources such as DMA and interrupts in the context of the system's PCI resources. o The current iommu implementation can be simplified. o The ioapic interrupts can get a cleaner implementation as it evolves to support more complex platforms. o The hotplug framework can manage a hierarchical resource map. 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: ON 6.5. ARC review type: FastTrack 6.6. ARC Exposure: Open