freebsd-dev/sys/sparc64/include
Thomas Moestl c944338750 Fix interrupt assignment for non-builtin PCI devices on e450s.
This machine uses a non-standard scheme to specify the interrupts to
be assigned for devices in PCI slots; instead of giving the INO
or full interrupt number (which is done for the other devices in this
box), the firmware interrupt properties contain intpin numbers, which
have to be swizzled as usual on PCI-PCI bridges; however, the PCI host
bridge nodes have no interrupt map, so we need to guess the
correct INO by slot number of the device or the closest PCI-PCI
bridge leading to it, and the intpin.

To do this, this fix makes the following changes:
- Add a newbus method for sparc64 PCI host bridges to guess
  the INO, and glue code in ofw_pci_orb_callback() to invoke it based
  on a new quirk entry. The guessing is only done for interrupt numbers
  too low to contain any IGN found on e450s.
- Create another new quirk entry was created to prevent mapping of EBus
  interrupts  at PCI level; the e450 has full INOs in the interrupt
  properties of EBus devices, so trying to remap them could cause
  problems.
- Set both quirk entries for e450s; remove the no-swizzle entry.
- Determine the psycho half (bus A or B) a driver instance manages
  in psycho_attach()
- Implement the new guessing method for psycho, using the slot number,
  psycho half and property value (intpin).

Thanks go to the testers, especially Brian Denehy, who tested many kernels
for me until I had found the right workaround.

Tested by:	Brian Denehy <B.Denehy@90east.com>, jake, fenner,
		Marius Strobl <marius@alchemy.franken.de>,
		Marian Dobre <mari@onix.ro>
Approved by:	re (scottl)
2003-05-30 20:48:05 +00:00
..
_inttypes.h
_limits.h sys/sys/limits.h: 2003-05-19 20:29:07 +00:00
_stdint.h
_types.h - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
asi.h
asm.h - Fix placement of cvs ids in previous commit to match .S files in libc. 2003-04-29 00:37:41 +00:00
asmacros.h I was wrong, the ENTRY bits in asm.h did have a purpose -- for userland. 2003-04-26 20:54:45 +00:00
atomic.h Make the atomic arithmetic functions return the old value, since they're 2002-12-21 08:53:26 +00:00
bus_common.h Always initialize the UPA target module id in the interrupt mapping 2002-12-01 23:30:26 +00:00
bus_memio.h
bus_pio.h
bus_private.h Fixes for a number of problems in the IOMMU code: 2003-01-21 18:22:26 +00:00
bus.h Rename BUS_DMAMEM_NOSYNC to BUS_DMA_COHERENT. 2003-05-30 20:40:33 +00:00
cache.h Use vm_paddr_t for physical addresses. 2003-04-08 06:35:09 +00:00
ccr.h
clock.h
cpu.h
cpufunc.h Use the vis block copy/zero functions for pmap_copy_page and pmap_zero_page. 2003-04-06 17:05:26 +00:00
critical.h
db_machdep.h
eeprom.h
elf.h Make imgact_elf32.c compile on sparc64. 2003-01-05 03:48:55 +00:00
endian.h
exec.h
float.h Implement fpclassify(): 2003-02-08 20:37:55 +00:00
floatingpoint.h
fp.h - Rename pcb_fpstate to pcb_ufp (user floating point), and change it to 2003-04-01 04:02:45 +00:00
frame.h
fsr.h
idprom.h
ieee.h
ieeefp.h
in_cksum.h
instr.h
intr_machdep.h
iommureg.h Some cleanup: 2003-01-06 17:10:07 +00:00
iommuvar.h De-orbit bus_dmamem_alloc_size(). It's a hack and was never used anyways. 2003-05-26 04:00:52 +00:00
kerneldump.h Use vm_paddr_t for physical addresses. 2003-04-08 06:35:09 +00:00
kse.h
ktr.h Two tokens that don't together form a vaid preprocssor token cannot be 2003-04-26 17:00:10 +00:00
limits.h sys/sys/limits.h: 2003-05-19 20:29:07 +00:00
lsu.h
md_var.h Use vm_paddr_t for physical addresses. 2003-04-08 06:35:09 +00:00
metadata.h Slight reorg and added AMD64 support. A couple of the MODINFOMD_* values 2003-05-01 03:31:18 +00:00
mutex.h
nexusvar.h
ofw_bus.h Fix interrupt assignment for non-builtin PCI devices on e450s. 2003-05-30 20:48:05 +00:00
ofw_machdep.h
ofw_mem.h Use vm_paddr_t for physical addresses. 2003-04-08 06:35:09 +00:00
ofw_nexus.h
ofw_upa.h
param.h
pcb.h - Add space for kernel floating point registers to the pcb. These will be 2003-04-03 18:28:03 +00:00
pcpu.h Remove unused fields. 2003-03-18 08:15:24 +00:00
pmap.h - Move the routine for flushing all user mappings from the tlb from pmap to 2003-04-13 21:54:58 +00:00
proc.h
profile.h
pstate.h
ptrace.h
reg.h
reloc.h
resource.h
runq.h
setjmp.h
sigframe.h
signal.h
smp.h Use vm_paddr_t for physical addresses. 2003-04-08 06:35:09 +00:00
stdarg.h
sysarch.h
tick.h
tlb.h - Move the routine for flushing all user mappings from the tlb from pmap to 2003-04-13 21:54:58 +00:00
trap.h Allow fast instruction and data access mmu miss traps to be handled by 2003-04-29 21:30:59 +00:00
tsb.h Use vm_paddr_t for physical addresses. 2003-04-08 06:35:09 +00:00
tstate.h
tte.h Handle the fictitious pages created by the device pager. For fictitious 2003-03-27 02:16:31 +00:00
ucontext.h Don't allow user process to set an invalid window state through sigreturn. 2003-01-10 00:04:56 +00:00
upa.h
utrap.h Allow fast instruction and data access mmu miss traps to be handled by 2003-04-29 21:30:59 +00:00
varargs.h
ver.h
vmparam.h Define UMA_MD_SMALL_ALLOC so that uma_small_alloc and uma_small_free will 2002-12-27 19:31:26 +00:00
watch.h Use vm_paddr_t for physical addresses. 2003-04-08 06:35:09 +00:00
wstate.h