Commit Graph

1224 Commits

Author SHA1 Message Date
marius
8efed01e64 MFC: sys/sparc64/sparc64/exception.S 1.73,
sys/sparc64/sparc64/interrupt.S 1.9

- In intr_fast() fix a race which is fallout from critical sections no longer
  raising the PIL and can cause corruption of the interrupt request lists.
- In intr_fast() assert that the ir_func to be called is non-zero.
- Increment interrupt stats after calling the handlers rather than before in
  order to reduce the delay until direct and fast handlers are serviced.

Approved by:	re (hrs)
2006-04-25 19:37:03 +00:00
marius
5f1e8a696e MFC: 1.32
- We only lock the local per-CPU page in the local dTLB, so accessing the
  foreign per-CPU pages in cpu_ipi_send() in order to get the module IDs
  of the other CPUs can cause a page fault. If this happens when doing a
  TLB shootdown while dealing with another page fault this causes a panic
  due to the recursive page fault. As I don't spot other code that assumes
  or requires that accessing foreign per-CPU pages must not page fault
  solve this by adding a statically allocated (and therefore locked as
  part of the kernel pages) array which establishes a FreeBSD CPU ID ->
  module ID relation and use that in cpu_ipi_selected().
- Fix a potential race in cpu_ipi_send(); as we don't serialize the access
  to cpu_ipi_selected() between MI and MD use (only MI-MI and MD-MD) we
  might catch the NACK bit caused by sending another IPI. Solve this by
  checking the NACK bit in the contents of the interrupt dispatch status
  reg read while interrupts were still turned off instead of reading that
  reg anew after interrupts were turned on again. This is also what the
  CPU docs suggest to do.
- Add a workaround for the SpitFire erratum #54 bug (affecting interrupt
  dispatch). While public info regarding what this CPU bug actually causes
  is not available testing shows that with the workaround in place it's
  less likely to get a "couldn't send ipi" panic, it doesn't solve these
  panics entirely though.

Approved by:	re (mux)
2006-03-31 23:48:12 +00:00
marius
441afcfde1 MFC: 1.10
Add convenience macros for the bits in ASI_ESTATE_ERROR_EN_REG (used
for ECC handling) and the additional uses of the ASIs 0x77 and 0x7f
as well as their bits (used for a CPU bug workaround).

Approved by:	re (mux)
2006-03-31 23:40:42 +00:00
marius
26957cf64f MFC: 1.128
- Add a comment describing why tick_init() is called before cninit().
- Fix a typo in another comment.

Approved by:	re (mux)
2006-03-31 23:40:05 +00:00
marius
fb1152f8ca MFC: 1.21
- Move the check for too high HZ values from tick_init() to tick_start()
  as we have to call tick_init() before cninit() in order to provide the
  low-level console drivers with a working DELAY() which in turn means we
  cannot use panic() in tick_init().
- s,to high, too high, in the panic string

Approved by:	re (mux)
2006-03-31 23:38:29 +00:00
marius
e0f85ed156 MFC: 1.11
For E250 and E450 enable the watchdog part of the MK48Txx as it just
works there.

Approved by:	re (hrs)
2006-03-25 12:17:23 +00:00
jhb
ac9588d481 MFC: Add the tl_trap_*() and t1_text_*() symbols to unbreak the build.
The changes in rev 1.25 of db_trace.c to use these symbols was MFC'd
earlier.

Approved by:	re (scottl)
2006-03-14 21:12:59 +00:00
jeff
b7d364e393 MFC Revs 1.24, 1.25
VFS SMP fixes, stack api, softupdates fixes.

Sponsored by:	Isilon Systems, Inc.
Approved by:	re (scottl)
2006-03-13 03:07:05 +00:00
jhb
025e3d0a95 MFC: Split struct ithd into struct intr_thread and intr_event and
associated changes.  More details below:

  Remove public declarations of variables that were forgotten when they were
  made static.

  Revision  Changes    Path
  1.31      +0 -1      src/sys/sys/interrupt.h

  Make sure the interrupt is masked before processing it, or bad things
  can happen.

  Revision  Changes    Path
  1.10      +3 -3      src/sys/arm/arm/intr.c

  Reorganize the interrupt handling code a bit to make a few things cleaner
  and increase flexibility to allow various different approaches to be tried
  in the future.
  - Split struct ithd up into two pieces.  struct intr_event holds the list
    of interrupt handlers associated with interrupt sources.
    struct intr_thread contains the data relative to an interrupt thread.
    Currently we still provide a 1:1 relationship of events to threads
    with the exception that events only have an associated thread if there
    is at least one threaded interrupt handler attached to the event.  This
    means that on x86 we no longer have 4 bazillion interrupt threads with
    no handlers.  It also means that interrupt events with only INTR_FAST
    handlers no longer have an associated thread either.
  - Renamed struct intrhand to struct intr_handler to follow the struct
    intr_foo naming convention.  This did require renaming the powerpc
    MD struct intr_handler to struct ppc_intr_handler.
  - INTR_FAST no longer implies INTR_EXCL on all architectures except for
    powerpc.  This means that multiple INTR_FAST handlers can attach to the
    same interrupt and that INTR_FAST and non-INTR_FAST handlers can attach
    to the same interrupt.  Sharing INTR_FAST handlers may not always be
    desirable, but having sio(4) and uhci(4) fight over an IRQ isn't fun
    either.  Drivers can always still use INTR_EXCL to ask for an interrupt
    exclusively.  The way this sharing works is that when an interrupt
    comes in, all the INTR_FAST handlers are executed first, and if any
    threaded handlers exist, the interrupt thread is scheduled afterwards.
    This type of layout also makes it possible to investigate using interrupt
    filters ala OS X where the filter determines whether or not its companion
    threaded handler should run.
  - Aside from the INTR_FAST changes above, the impact on MD interrupt code
    is mostly just 's/ithread/intr_event/'.
  - A new MI ddb command 'show intrs' walks the list of interrupt events
    dumping their state.  It also has a '/v' verbose switch which dumps
    info about all of the handlers attached to each event.
  - We currently don't destroy an interrupt thread when the last threaded
    handler is removed because it would suck for things like ppbus(8)'s
    braindead behavior.  The code is present, though, it is just under
    #if 0 for now.
  - Move the code to actually execute the threaded handlers for an interrrupt
    event into a separate function so that ithread_loop() becomes more
    readable.  Previously this code was all in the middle of ithread_loop()
    and indented halfway across the screen.
  - Made struct intr_thread private to kern_intr.c and replaced td_ithd
    with a thread private flag TDP_ITHREAD.
  - In statclock, check curthread against idlethread directly rather than
    curthread's proc against idlethread's proc. (Not really related to intr
    changes)

  Tested on:      alpha, amd64, i386, sparc64
  Tested on:      arm, ia64 (older version of patch by cognet and marcel)

  Revision  Changes    Path
  1.88      +43 -29    src/sys/alpha/alpha/interrupt.c
  1.38      +5 -5      src/sys/alpha/isa/isa.c
  1.16      +58 -52    src/sys/amd64/amd64/intr_machdep.c
  1.6       +1 -1      src/sys/amd64/include/intr_machdep.h
  1.16      +2 -2      src/sys/amd64/isa/atpic.c
  1.11      +28 -22    src/sys/arm/arm/intr.c
  1.462     +2 -2      src/sys/dev/sio/sio.c
  1.6       +1 -1      src/sys/dev/uart/uart_kbd_sun.c
  1.24      +2 -2      src/sys/dev/uart/uart_tty.c
  1.15      +58 -52    src/sys/i386/i386/intr_machdep.c
  1.8       +1 -1      src/sys/i386/include/intr_machdep.h
  1.21      +2 -2      src/sys/i386/isa/atpic.c
  1.52      +32 -25    src/sys/ia64/ia64/interrupt.c
  1.180     +3 -2      src/sys/kern/kern_clock.c
  1.127     +437 -270  src/sys/kern/kern_intr.c
  1.206     +0 -1      src/sys/kern/subr_witness.c
  1.6       +3 -3      src/sys/powerpc/include/intr_machdep.h
  1.7       +35 -32    src/sys/powerpc/powerpc/intr_machdep.c
  1.14      +1 -1      src/sys/sparc64/include/intr_machdep.h
  1.24      +43 -36    src/sys/sparc64/sparc64/intr_machdep.c
  1.32      +36 -36    src/sys/sys/interrupt.h
  1.440     +1 -3      src/sys/sys/proc.h

  Catch up with interrupt-thread changes.

  Revision  Changes    Path
  1.32      +1 -1      src/sys/dev/zs/zs.c

  Catch up with new interrupt handling code.

  Revision  Changes    Path
  1.16      +3 -3      src/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c

  Catch up with new interrupt handling code.

  Revision  Changes    Path
  1.162     +2 -2      src/sys/dev/cy/cy.c
  1.101     +2 -2      src/sys/dev/rc/rc.c

  Catch up with new interrupt handling code.

  Revision  Changes    Path
  1.50      +2 -2      src/sys/dev/cx/if_cx.c
  1.41      +1 -1      src/sys/dev/sab/sab.c
  1.238     +2 -2      src/sys/pc98/cbus/sio.c

  Add a swi_remove() function to teardown software interrupt handlers.  For
  now it just calls intr_event_remove_handler(), but at some point it might
  also be responsible for tearing down interrupt events created via swi_add.

  Revision  Changes    Path
  1.128     +17 -0     src/sys/kern/kern_intr.c
  1.33      +1 -0      src/sys/sys/interrupt.h

  - Use swi_remove() to teardown swi handlers rather than
    intr_event_remove_handler().
  - Remove tty: prefix from a couple of swi handler names.

  Revision  Changes    Path
  1.51      +1 -1      src/sys/dev/cx/if_cx.c
  1.102     +2 -2      src/sys/dev/rc/rc.c
  1.42      +1 -1      src/sys/dev/sab/sab.c
  1.25      +1 -1      src/sys/dev/uart/uart_tty.c
  1.33      +1 -1      src/sys/dev/zs/zs.c
  1.17      +2 -2      src/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c

  Remove a stray return statement in the interrupt dispatch function
  that caused a premature exit after calling a fast interrupt handler
  and bypassing a much needed critical_exit() and the scheduling of
  the interrupt thread for non-fast handlers. In short: unbreak :-)

  Revision  Changes    Path
  1.53      +0 -1      src/sys/ia64/ia64/interrupt.c

  If we get a stray interrupt, return after logging it.  In the extremely
  rare case of a stray interrupt to an unregistered source (such as a stray
  interrupt from the 8259As when using APIC), this could result in a page
  fault when it tried to walk the list of interrupt handlers to execute
  INTR_FAST handlers.  This bug was introduced with the intr_event changes,
  so it's not present in 5.x or 6.x.

  Submitted by:   Mark Tinguely tinguely at casselton dot net

  Revision  Changes    Path
  1.17      +1 -0      src/sys/amd64/amd64/intr_machdep.c
  1.16      +1 -0      src/sys/i386/i386/intr_machdep.c

Approved by:	re (scottl)
2006-03-10 19:37:35 +00:00
jhb
5b50f145a7 MFC: Fix the hw.realmem sysctl on alpha, ia64, and sparc64.
Approved by:	re (scottl)
2006-03-01 16:30:51 +00:00
marius
05e831efa6 MFC: sys/conf/NOTES 1.1349, sys/conf/files 1.1090,
sys/conf/files.sparc64 1.78, sys/modules/Makefile 1.471,
     sys/modules/le/Makefile 1.1, sys/sparc64/conf/GENERIC 1.105

Hook up le(4) to the build.

Approved by:	re (scottl)
2006-02-13 11:39:02 +00:00
marius
4a0340a5b3 MFC: sys/sparc64/central/central.c 1.11, sys/sparc64/ebus/ebus.c 1.25 (partial),
sys/sparc64/fhc/fhc_central.c 1.10, sys/sparc64/fhc/fhc_nexus.c 1.9,
     sys/sparc64/pci/psycho.c 1.59, sys/sparc64/sbus/dma_sbus.c 1.3 - 1.4,
     sys/sparc64/sbus/sbus.c 1.37

- Register the generic implementations for the device shutdown, suspend
  and resume methods so these events propagate through the device driver
  hierarchy.
- Remove dma_setup_intr() (was commented out in RELENG_6).
2006-01-30 22:30:51 +00:00
kris
5eb299b58a MFC: Correct spelling of T_TAG_OFERFLOW
Approved by:	re
2006-01-28 04:02:54 +00:00
marius
48dd44f076 MFC: sys/sparc64/pci/psycho.c 1.54 - 1.57,
sys/sparc64/pci/psychoreg.h 1.10 - 1.11,
     sys/sparc64/pci/psychovar.h 1.13 - 1.14

Sync psycho(4) with HEAD expect for the UPA_RANGE_* -> OFW_PCI_RANGE_*
and PCI_CS_* -> OFW_PCI_CS_* changes in order to mainly obtain the
following changes:
- Add a workaround for the incorrect interrupt map entry for the EBus
  bridge on E250 machines. [1]
- Register an interrupt handler for the spare hardware interrupt which
  according to OpenSolaris is used as the over-temperature interrupt in
  systems with Psycho bridges.

PR:		88279 [1]
2006-01-23 16:21:30 +00:00
marius
7e8d7097cf MFC: sys/sparc64/include/ktr.h 1.6, sys/sparc64/sparc64/genassym.c 1.59
Use <sys/ktr.h> directly in .S files instead of exporting the
KTR_* class macros via genassym.c. Together with sys/sys/ktr.h 1.34
(MFC'ed in 1.32.2.2) this has the desired side-effect of providing a
default value for KTR_COMPILE. Thus this fixes warnings from -Wundef
regarding KTR_COMPILE not being defined for .S files.
2006-01-23 15:04:09 +00:00
marius
a96cdae3e9 MFC: 1.3
- The inline asm in this file uses output operands before all input
  operands are consumed so use the appropriate constraint modifier.
  Before this change GCC used one register for both an input and an
  unrelated output operand of in_addword(), causing the input to be
  overwritten before it was consumed and thus breaking in_addword().
  For in_cksum_hdr() and in_pseudo() this change is more or less
  cosmetic.
- Fix a misspelling in a nearby comment.
2006-01-23 14:45:24 +00:00
joel
a889984747 MFC: Remove references to snd_vortex1(4). 2006-01-13 14:56:51 +00:00
yongari
9379cbc9e6 MFC 1.20 to RELENG_6.
Remove "nodevice snd_es137x" as it is supported now.
2006-01-03 06:35:16 +00:00
marcel
14fe1a0c49 MFC standardization of the ELF types and update of the ELF constants:
lib/libc/gen/nlist.c:1.19
	libexec/rtld-elf/rtld.c:1.108
	libexec/rtld-elf/rtld.h:1.36
	libexec/rtld-elf/alpha/reloc.c:1.21
	libexec/rtld-elf/amd64/reloc.c:1.16
	libexec/rtld-elf/ia64/reloc.c:1.16
	libexec/rtld-elf/sparc64/reloc.c:1.11
	share/man/man5/elf.5:1.32-1.33
	sys/alpha/alpha/elf_machdep.c:1.20
	sys/amd64/amd64/elf_machdep.c:1.24
	sys/boot/common/bootstrap.h:1.42
	sys/boot/common/load_elf.c:1.33
	sys/boot/common/load_elf_obj.c:1.2
	sys/boot/common/reloc_elf.c:1.2
	sys/ia64/ia64/elf_machdep.c:1.21
	sys/kern/link_elf.c:1.87
	sys/kern/link_elf_obj.c:1.90
	sys/sparc64/sparc64/elf_machdep.c:1.20
	sys/sys/elf32.h:1.9-1.10
	sys/sys/elf64.h:1.11-1.13
	sys/sys/elf_common.h:1.16
	sys/sys/elf_generic.h:1.7
	sys/sys/imgact_elf.h:1.28
	sys/sys/linker.h:1.40
	usr.bin/elf2aout/elf2aout.c:1.10
	usr.bin/elfdump/elfdump.c:1.13
	usr.sbin/crunch/crunchide/exec_elf32.c:1.15
	usr.sbin/kldxref/ef.c:1.9
	usr.sbin/kldxref/ef.h:1.6
	usr.sbin/kldxref/ef_amd64.c:1.3
	usr.sbin/kldxref/ef_i386.c:1.3
	usr.sbin/kldxref/ef_obj.c:1.4
	usr.sbin/kldxref/ef_powerpc.c:1.3
	usr.sbin/kldxref/ef_sparc64.c:1.4-1.5
2005-12-30 22:13:59 +00:00
yongari
e7b26efb3c MFC 1.66 to RELENG_6
Uncomment em(4) as it's now working.
2005-12-01 02:38:44 +00:00
alc
245bd5abe3 MFC
Pass a value of type vm_prot_t to pmap_enter_quick() so that it determine
  whether the mapping should permit execute access.

  Revision  Changes    Path
  1.179     +2 -2      src/sys/alpha/alpha/pmap.c
  1.527     +4 -2      src/sys/amd64/amd64/pmap.c
  1.37      +3 -3      src/sys/arm/arm/pmap.c
  1.531     +2 -2      src/sys/i386/i386/pmap.c
  1.163     +4 -3      src/sys/ia64/ia64/pmap.c
  1.100     +3 -2      src/sys/powerpc/powerpc/pmap.c
  1.149     +3 -2      src/sys/sparc64/sparc64/pmap.c
  1.72      +1 -1      src/sys/vm/pmap.h
  1.207     +2 -1      src/sys/vm/vm_fault.c
  1.368     +2 -2      src/sys/vm/vm_map.c
2005-11-13 21:45:49 +00:00
kris
f8865b0e0a MFC r1.20:
Add a default value for VM_BCACHE_SIZE_MAX of 400MB.  This is copied from
amd64, and is a factor of 3 less than the value previously auto-sized on
a 12GB machine, which would cause an overflow in calculations involving the
maxbcache int, causing bufinit() to loop forever at boot.

Approved by:	 re (kensmith)
2005-10-17 00:19:00 +00:00
jhb
603cac3a99 MFC: Add atomic_fetchadd(9) operation for types int and 32.
Other small updates to atomic(9) include:
- Note that arm and ppc don't provide 64-bit atomic ops.
- Update sample code.

Approved by:	re (scottl)
2005-10-06 18:12:06 +00:00
kensmith
6db27a0a53 Fix a whitespace screw-up I made when doing the MFC of COMPAT_FREEBSD5.
It's supposed to be "option", "space", "tab"; not "option", "tab", "tab".

Approved by:	re (scottl)
Pointed out by:	rwatson
Pointy hat:	kensmith
2005-09-22 12:36:39 +00:00
scottl
bbfdfd22d0 Now that our showstopper list has shrunk, take another step closer to the
release and turn off kernel debugging.  Also turn off SMP on i386 and amd64
and add an SMP kernel config.

Approved by: re (implicit)
2005-09-18 03:37:59 +00:00
marius
8ea046259b MFC: 1.98
Now that at least some screen savers work on sparc64 sync with other
archs and enable splash(4) by default.

Approved by:	re (scottl)
2005-08-27 18:04:43 +00:00
jhb
f555b4a10a MFC: Add extra constraints to inform the compiler that the memory being
modified is an input and output rather than just the register holding the
pointer being the input and output.

Approved by:	re (kensmith)
2005-08-05 19:46:13 +00:00
jhb
0ef1901fa9 MFC: Convert the atomic pointer operations to operate on uintptr_t rather
than void *.

Approved by:	re (kensmith)
2005-08-05 19:44:00 +00:00
kensmith
b347cb6eac MFC addition of the COMPAT_FREEBSD5 option. Specific versions
being MFCed:

> Path                          Revision
> src/sys/alpha/conf/GENERIC    1.187
> src/sys/amd64/conf/GENERIC    1.440
> src/sys/i386/conf/GENERIC     1.430
> src/sys/ia64/conf/GENERIC     1.73
> src/sys/pc98/conf/GENERIC     1.270
> src/sys/powerpc/conf/GENERIC  1.49
> src/sys/sparc64/conf/GENERIC  1.97

Approved by:    re (scottl)
2005-07-18 12:23:42 +00:00
cvs2svn
dd2adf2c10 This commit was manufactured by cvs2svn to create branch 'RELENG_6'. 2005-07-11 04:14:43 +00:00
davidxu
bc8b519d0f Validate if the value written into {FS,GS}.base is a canonical
address, writting non-canonical address can cause kernel a panic,
by restricting base values to 0..VM_MAXUSER_ADDRESS, ensuring
only canonical values get written to the registers.

Reviewed by: peter, Josepha Koshy < joseph.koshy at gmail dot com >
Approved by: re (scottl)
2005-07-10 23:31:11 +00:00
marius
caf07ad5af - Declare lookup tables etc. const.
- Let creator_bitblt() return ENODEV as it's not implemented (missed
  in sys/dev/fb/creator.c rev. 1.6).
- As a speed optimization inline the creator_ras_wait() etc. helper
  functions and also cache setting the font increment, font width
  and plane mask. [1]
- I got the meaning of V_DISPLAY_BLANK wrong, it's blank like turn
  off and not blank like turn on and clear the screen. So move
  clearing the screen to creator_clear() were it hopefully belongs.
- Properly implement V_DISPLAY_BLANK, V_DISPLAY_STAND_BY and
  V_DISPLAY_SUSPEND. This makes blank_saver.ko and green_saver.ko
  work. [1]
- Change the order of operations in creator_fill_rect(), i.e. write
  y before x and cy before cx. This fixes drawing the top part of
  the border with Elite3D cards when switching from Xorg to a VTY.
- Move setting the chip configuration we use and invalidating the
  cache variables to creator_set_mode() and set the V_ADP_MODECHANGE
  flag. This causes creator_set_mode() to be called when the X server
  shuts down which fixes the screen corruption caused most of the
  time by Xorg not restoring the original configuration present at
  startup.

Inspired by/based on:	Xorg [1]
Approved by:		re (scottl)
2005-07-10 11:16:34 +00:00
obrien
7af4f5af38 Add .cvsignore files just like in sys/<arch>/compiled, this keeps CVS from
questing kernel config files not in CVS.

Approved by:	re(kensmith)
2005-06-20 16:52:59 +00:00
marius
ea579c14c6 Turn on atkbdc(4), atkbd(4), creator(4), machfb(4), syscons(4), ohci(4),
psm(4), ukbd(4), ums(4) and usb(4) on by default. Modulo some nits with
the most annoying one probably being USB keyboards no longer working at
the OFW boot prompt after halting FreeBSD these drivers work fine on
sparc64 including X and there's nothing left that I'd consider a show-
stopper. I.e. graphical consoles on sun4u machines should either work
out of the box or by plugging in a card that is supported by either
creator(4) or machfb(4). The exception obviously are SBus-only machines
without UPA slots like some Ultra 1 (but which also still lack support
in other areas) and certain Exx0 (but which probably are mainly used
with serial consoles anyway). I'll try to add a cgsix(4) for these later
as Sun CG6 cards are probably the most common SBus framebuffer cards in
sun4u machines. I however don't see much sense in adding drivers for the
dozen of SBus framebuffers that were destined for sparc v8 machines.
The rest of the USB drivers aren't enabled as I'm only aware of ukbd(4)
and ums(4) as well as ohci(4) working with the on-board ALI M5237 and
Sun PCIO-2 controllers. Aue(4) definitely doesn't work on sparc64, yet.

Thanks to:
- Jake for the initial work on syscons(4) on sparc64 and creator(4).
- Marcel for uart(4) and especially for its support for the SCCs which
  are only used on sparc64 so far. In various regards it wouldn't have
  been possible to enable syscons(4) by default on sparc64, yet, without
  uart(4).
- All that tested patches.

Ok'ed by:	scottl (RE hat), tmm
2005-06-10 23:11:16 +00:00
marius
7958cd2c90 - Hook up atkbdc(4), atkbd(4) and psm(4) to the sparc64 build, not
enabled in GENERIC by default, yet.
- While here remove the exclusion of ukbd(4) from the sparc64 NOTES
  as ukbd(4) compiles and works on sparc64.
2005-06-10 20:58:59 +00:00
alc
2d109601cb Introduce a procedure, pmap_page_init(), that initializes the
vm_page's machine-dependent fields.  Use this function in
vm_pageq_add_new_page() so that the vm_page's machine-dependent and
machine-independent fields are initialized at the same time.

Remove code from pmap_init() for initializing the vm_page's
machine-dependent fields.

Remove stale comments from pmap_init().

Eliminate the Boolean variable pmap_initialized from the alpha, amd64,
i386, and ia64 pmap implementations.  Its use is no longer required
because of the above changes and earlier changes that result in physical
memory that is being mapped at initialization time being mapped without
pv entries.

Tested by: cognet, kensmith, marcel
2005-06-10 03:33:36 +00:00
jkoshy
1d3209ab83 MFP4:
- Implement sampling modes and logging support in hwpmc(4).

- Separate MI and MD parts of hwpmc(4) and allow sharing of
  PMC implementations across different architectures.
  Add support for P4 (EMT64) style PMCs to the amd64 code.

- New pmcstat(8) options: -E (exit time counts) -W (counts
  every context switch), -R (print log file).

- pmc(3) API changes, improve our ability to keep ABI compatibility
  in the future.  Add more 'alias' names for commonly used events.

- bug fixes & documentation.
2005-06-09 19:45:09 +00:00
marius
720506aed3 Remove superfluous breaks. 2005-06-05 10:16:27 +00:00
marius
c74fc16e2d After some input from bde@ and rereading the datasheet use a MTX_SPIN
mutex instead of a MTX_DEF one in order to defer preemption while
reading the date and time registers. If we don't manage to read them
within the time slot where we are guaranteed that no updates occur we
might actually read them during an update in which case the output is
undefined.
2005-06-04 23:24:50 +00:00
marius
23691de771 - In creator_configure() when probed for the high-level console return
the number of registered adapters instead of determining again whether
  stdout is a supported card (and which might have failed to attach and
  register).
- Drop creator_set_mode() and move the relevant parts to creator_fill_rect()
  and creator_putc() respectively. This is a bit cleaner than having to
  make sure that creator_set_mode() was called before creator_fill_rect()
  or creator_putc() are used and matches better what Xorg does.
- Fix a bug in the handling of the FBIOSCURSOR IOCTL; the code was meant
  to return ENODEV for all invocations expect when used to disable the
  cursor and not just when used for enabling the cursor.
- In case the adapter is the OFW stdout move its OFW cursor to the start
  of the last line on halt so OFW output doesn't get intermixed with what
  FreeBSD left on the screen. With hindsight this is what the faking of a
  hardware cursor which was removed in the last revision really was about,
  i.e. to keep the OFW updated about the current cursor position. The new
  approach however is simpler while producing the same result and doesn't
  cause the first letter of the OFW output to be turned into a blank and
  a newline.
- Add variable names to the prototypes of creator_cursor_*() which were
  added in the last revision and list them alphabetically in order to match
  the style of this file.
2005-06-04 21:15:27 +00:00
marius
ef0744154b Now that all affected drivers have been changed remove the helpers
for the SYS_RES_IOPORT -> SYS_RES_MEMORY transition again. While it
was helpful to not need to change all of the affected drivers in a
single pass together with ebus(4) we probably shouldn't start into
6.0 with such a hack.
This requires some of the modules of affected drivers to be rebuilt,
namely: auxio(4), snd_audiocs(4) and puc(4).
2005-06-04 20:31:20 +00:00
marcel
bb14b518f7 Create nexus in configure_first() instead of in configure(). This
makes sure that sysinit tasks that run after configure_first(),
but before configure() have a nexus to hang devices off.
2005-05-29 23:44:22 +00:00
marcel
31cf0b1399 Call cninit_finish() from configure_final(). 2005-05-29 22:53:48 +00:00
nyan
0fce92f5c4 Remove bus_{mem,p}io.h and related code for a micro-optimization on i386
and amd64.  The optimization is a trivial on recent machines.

Reviewed by:	-arch (imp, marcel, dfr)
2005-05-29 04:42:30 +00:00
alc
edf3f9f2ac pmap_enter() no longer requires Giant. Therefore, stop acquiring and
releasing it in pmap_enter_quick().

MFC after: 3 weeks
2005-05-28 17:13:36 +00:00
marius
93a2490ba7 - Hook up machfb(4) to the sparc64 build, not enabled in GENERIC
by default, yet.
- Replace "graphics cards" with "framebuffers" in the description
  of creator(4) in order to make it uniform with the description of
  machfb(4) and the latter occur both on-board and as add-on cards.
2005-05-21 20:50:45 +00:00
marius
494f0cf7a2 o creator(4):
- Use register macros instead of magic values in the code. [1]
  - Check the return values of OF_getprop() and other stuff that actually
    can fail.
  - Let the unimplemented video driver methods return ENODEV rather
    than 0 so other code isn't tricked into thinking a certain operation
    was successfull. In case of e.g. the video driver creator_ioctl()
    this caused vidcontrol(1) to return random garbage information.
    Remove the TODO macros in the unimplemented video driver methods
    which did a printf("%s: unimplemented\n", __func__). Under certain
    circumstances these managed to invoke a printf() when a low-level
    console device wasn't attached, yet, causing a Fast Data Access MMU
    Miss. These macros were only really usefull for development anyway.
  - Set the struct video_adapter and struct video_info va_flags and
    vi_flags etc. as appropriate.
  - In creator_configure() don't rely on hitting the node which is the
    chosen console device first when searching the OFW tree for adapters
    compatible with this driver. Instead just check whether the chosen
    console device is a viable target for this driver. Targets that are
    not the console (including additional cards in multi-head configs)
    will be attached through creator_upa_attach(). I think this how the
    code in creator_configure() was actually meant to work.
    Honour the VIO_PROBE_ONLY flag and don't initialise and register the
    console device twice when creator_configure() is called a second time
    during sc_probe_unit().
    Let creator_configure() return the number of the found adapters,
    i.e. 1 in case probing succeeds, as it's expected. The return values
    of video adapter configure functions however currently aren't checked
    so this doesn't make a difference at the moment.
  - In creator_upa_attach() don't rely on probing and attaching the
    adapter which is the console first, in case there are multiple
    adpaters and one of them is the console this could lead into using
    the video adapter unit 0 twice.
  - Make the check for DACs with inverted cursor control a bit more
    precise and actually honour that information when turning the cursor
    on or off. Add a helper function creator_cursor_enable() for this
    in order to keep code duplication low. [1]
  - Don't bother with faking a hardware cursor in case a device is the
    console. Apparently this was meant to start kernel output right after
    where the firmware left. In general this isn't worth the fuzz and
    also had no real effect as creator_set_mode() did clear the screen
    in any case, not just in case a device was not the console.
  - Implement creator_fill_rect() and use it to actually blank the
    display in creator_blank_display() when the mode is V_DISPLAY_BLANK,
    moving blanking the display out of creator_set_mode(). Use it also
    to implement creator_set_border() so the border can be re-drawn
    when switching to a VTY from X, exiting X, etc. (which leaves us
    with a black border most of the time).
  - Implement the video driver creator_ioctl(), moving the implementation
    of the IOCTL interface from the fbN CDEV version of creator_ioctl()
    into the video driver version and use the latter to implement the
    former. Use fb_commonioctl() to handle most of the FBIO IOCTLs.
    This gives programs like vidcontrol(1) which use the video driver
    creator_ioctl() a chance of working.
    Implement turning off the cursor via the FBIOSCURSOR IOCTL, which
    Xorg uses to in order to inform the OS that it's taking over the
    cursor. In creator_putm() check whether the cursor is enabled and
    (re-)install it if necessary, moving installing the cursor out of
    creator_init() and into a helper function creator_cursor_install().
    This fixes the missing mouse pointer when switching to a VTY from X,
    exiting X, etc.
  - Some clean-up (remove unused/useless code, etc.).

o sparc64/creator/creator_upa.c / sparc64/sparc64/sc_machdep.c:
  - Attach syscons(4) as an own pseudo-device on the nexus rather than
    directly in creator_upa_attach(), similiar to attaching syscons(4)
    as a pseudo-device on isa(4) on other archs. This makes it a whole
    lot easier to do the right thing in multi-head configs, especially
    with different types of graphics adapters. [2]
  - Set SC_AUTODETECT_KBD by default so USB keyboards work out of the
    box. [2]

Based on/obtained from:	Xorg 'ffb' driver [1]
Based on/obtained from:	FreeBSD/powerpc [2]
2005-05-21 20:38:26 +00:00
marius
39aeb24d3b - MFpowerpc: sys/powerpc/powerpc/nexus.c rev. 1.7 (partial)
Use bus_generic_probe() and add a bus_add_child() interface method to
  allow device drivers to use the identify method to add themselves if
  need be (e.g. syscons(4)).
- Use FBSDID.
2005-05-21 20:19:27 +00:00
marius
13915d8008 - Make sure that the OFW address properties that are going to be decode
consist of the expected number of address and size cells (we can't use
  dynamic arrays here because at the point in the boot process when this
  code is used malloc() doesn't work, yet). This fixes a Fast Data Access
  MMU Miss when uart(4) (erroneously) calls OF_decode_addr() to decode
  the address of PS/2 keyboards. PS/2 keyboards use a different and also
  undocumented scheme at the first parent node than mapping at 'ranges'
  properties. It's however not worth implementing that other scheme and
  actually also fits atkbdc(4) better to just start at the first parent
  node of PS/2 keyboards which is the 8042 controller (I have atkbdc(4)
  working that way).
- Use FBSDID.

MFC after:	1 month
2005-05-21 20:17:01 +00:00
marius
54f40eb6c3 o mc146818(4):
- Add locking.
  - Account for if the MC146818_NO_CENT_ADJUST flag is set we don't need
    to check wheter year < POSIX_BASE_YEAR.
  - Add some comments about mapping the day of week from the range the
    generic clock code uses to the range the chip uses and which I meant
    to add in the initial version.
  - Minor clean-up, use __func__ instead of hardcoded function names in
    error strings.

o in the rtc(4) front-end additionally:
  - Don't leak resources in case mc146818_attach() fails.
  - Account for ebus(4) defaulting to SYS_RES_MEMORY for the memory
    resources since ebus.c rev. 1.22.
2005-05-19 21:20:42 +00:00