Thu Nov 12 17:11:35 CST
2009
-
bus_ctl()
DDI_CTLOPS_REPORTDEV – report the device
DDI_CTLOPS_INITCHILD – bus specific intialization for
a child attached to this npe instance. PCIe bus private data is
allocated and initialized here. PCIe Bus Private Data contains
commonly used PCI/PCIe information and offsets
to key registers.
Since npe bus_bdf in bus private data hasn't been initialized during
npe attach, the root port number of a device in the private data is
not valid. Generic pci-express interrupts and error handling are also
enabled here.
DDI_CTLOPS_UNINITCHILD – bus specific operations when
removing/detaching a PCI device node.
DDI_CTLOPS_REGSIZE/DDI_CTLOPS_NREGS – return the
register number and register size of a specific register set. All
register sets are store in “reg” properties.
DDI_CTLOPS_PEEK:/DDI_CTLOPS_POKE – PCI configure space
peek/poke.
DDI_CTLOPS_ATTACH/DDI_CTLOPS_DETACH – operations to
support suspending and resuming.
All those control commands can't be handled in this
function will be passed to the bus control function of parent,
rootnex.
-
intr_ops()
Interrupt
related operations.
-
DDI_INTROP_SUPPORTED_TYPES
Returns the hardware interrupt types
that are supported by both the device and the host.
[i86pc/io/pci/pci_common.c]
216 |_______|_______/*
217 |_______|_______ * First we
determine the interrupt types supported by the
218 |_______|_______ * device itself,
then we filter them through what the OS
219 |_______|_______ * and system
supports. We determine system-level
220 |_______|_______ * interrupt type
support for anything other than fixed intrs
221 |_______|_______ * through the
psm_intr_ops vector
222 |_______|_______ */
The fixed type of interrupt is support
by default. The MSI and MSI-X interrupt capabilities are reported
throught the PCI capability regiesters. The interrupt types supported
by the device should be filterred through the host support.
[i86pc/io/pci/pci_common.c]
257 |_______|_______/*
258 |_______|_______ * Filter
device-level types through system-level support
259 |_______|_______ */
260 |_______|_______tmp_hdl.ih_type =
types;
261 |_______|_______if
((*psm_intr_ops)(rdip, &tmp_hdl, PSM_INTR_OP_CHECK_MSI,
262 |_______|_______ &types)
!= PSM_SUCCESS)
263 |_______|_______|_______goto
SUPPORTED_TYPES_OUT;
When MSI/MSI-X are supported, the
MSI/MSI-X cap locations are exported via properties
“pci-msi-capid-pointer” and “pci-msix-capid-pointer”.
ddi_intr_get_supported_types(9F)
relies on this intr operation.
To be continued …