Commit Graph

1430 Commits

Author SHA1 Message Date
bjh21
13d0914a93 Use audiobell for system beeps on acorn32 when vidcaudio(4) is compiled in.
Remove the vestigal sysbeep device and replace it with the same kind of
mechanism that pckbd(4) uses to find the bell, which is just as ugly, but
more standard.  Adapt beep(4) to the new world (though I'm not sure it
deserves to live).
2004-01-17 21:49:24 +00:00
bjh21
e095fd5eda More light KNF. 2004-01-17 21:25:25 +00:00
bjh21
2ae7606f01 Light KNF. 2004-01-17 21:24:29 +00:00
bjh21
e37ee89427 Don't include option headers we're not going to use. 2004-01-17 21:16:13 +00:00
bjh21
b727d5da17 KNF. 2004-01-17 21:14:46 +00:00
bjh21
8e0990aadd Un-__P. 2004-01-17 21:05:40 +00:00
scw
dcb1b313f5 Use __insn_barrier() to prevent the compiler reordering splx/splraise
relative to the code they're supposed to protect.
2004-01-12 10:25:06 +00:00
bjh21
75080c1305 The VIDC20 data sheet doesn't define the polarity of the sign bit for
8-bit VIDC audio.  Both Richard Earnshaw and I had guessed that a set
bit was positive (the same as normal mu-law), but the AudioWorks
manual, and Sound_SoundLog on RISC OS, seem to disagree.  Change
MULAW_TO_VIDC to match Sound_SoundLog, since the latter is probably
definitive.
2004-01-10 22:33:24 +00:00
jdolecek
089abdad44 Rearrange process exit path to avoid need to free resources from different
process context ('reaper').

From within the exiting process context:
* deactivate pmap and free vmspace while we can still block
* introduce MD cpu_lwp_free() - this cleans all MD-specific context (such
  as FPU state), and is the last potentially blocking operation;
  all of cpu_wait(), and most of cpu_exit(), is now folded into cpu_lwp_free()
* process is now immediatelly marked as zombie and made available for pickup
  by parent; the remaining last lwp continues the exit as fully detached
* MI (rather than MD) code bumps uvmexp.swtch, cpu_exit() is now same
  for both 'process' and 'lwp' exit

uvm_lwp_exit() is modified to never block; the u-area memory is now
always just linked to the list of available u-areas. Introduce (blocking)
uvm_uarea_drain(), which is called to release the excessive u-area memory;
this is called by parent within wait4(), or by pagedaemon on memory shortage.
uvm_uarea_free() is now private function within uvm_glue.c.

MD process/lwp exit code now always calls lwp_exit2() immediatelly after
switching away from the exiting lwp.

g/c now unneeded routines and variables, including the reaper kernel thread
2004-01-04 11:33:29 +00:00
chris
190f92bccf Currently the eb7500atx doesn't have a cmos_read function, however it also
won't use the RPC600_IOMD_ID code path, so disable that code path for the
eb7500atx.
2004-01-03 14:53:16 +00:00
chris
48afc0a2fc Add conf framework support for riscstation. Add a rsbus as this allows
acccesses with addresses shifted by the amount specified in the cookie.

Also make the inclusion of the wscons file the resposibility of whoever
includes files.iomd.  (found while attempting to checking riscstation
support into evbarm)
2004-01-03 14:46:17 +00:00
chris
d69e128c9d On a riscstation leave the iobase as requested, don't add IO_CONF_BASE to
it.
2004-01-03 14:42:12 +00:00
chris
078c5853f3 When adding a new interrupt handler to the iomd, turn off interrupts so
we don't run the risk of an interrupt happening while things are being
updated.
2004-01-03 13:11:47 +00:00
bjh21
2becc547c7 The lmcaudio driver was only ever used on the RC7500, which we don't support
these days.  Let the CVS history be its only memorial.
2004-01-01 19:12:13 +00:00
bjh21
cc4e11e8e4 No need to #include "vidcaudio.h" here, so don't do it. 2004-01-01 18:07:58 +00:00
chris
8261a721cc Correct the usage of the 4th arg to mainbus_bs_map. It's a flags arg, so
test for the CACHEABLE bit, rather than assuming a non-zero means cacheable
2004-01-01 18:07:27 +00:00
bjh21
7ef29ca465 Rather than calling pmap_extract() from an IPL_AUDIO interrupt handler (which
is naughty even if it does work), find out the complete list of physical pages
we'll have to DMA from in vidcaudio_trigger_output() and save it for use by
the interrupt handler.
2004-01-01 17:52:19 +00:00
bjh21
48a569efe8 Restore a call to vidcaudio_ctrl() that I accidentally deleted. 2004-01-01 16:42:36 +00:00
bjh21
bd6ca18b7e Tidy up debugging printfs to use a single #ifdef and a DPRINTF() macro,
rather than #ifdefs scattered all over the code.
2004-01-01 16:35:35 +00:00
bjh21
ef9b97ce8a Add possibly-useful support for 16-bit sound on VIDC20 systems, using
RISC OS's "*Configure SoundSystem" setting to decide whether to use 16-bit
mode.  Loosely based on parts of Richard Earnshaw's "sound16" patch.
2004-01-01 16:23:15 +00:00
bjh21
45feca04f6 When returning our actual sample rate to audio(4) in 16-bit mode, use the right
base clock rate.
2003-12-31 21:24:47 +00:00
bjh21
d21d97a649 Make local functions static. 2003-12-31 15:40:31 +00:00
bjh21
81395409be vidcaudio(4) now needs mulaw and aurateconv. 2003-12-31 15:15:29 +00:00
bjh21
176435992e Substantial rewrite of vidcaudio(4). I don't know if the old version
had ever worked, but if it had, it had bit-rotted so far that it
almost all needed replacing.  The new version support both 8-bit sound
on the VIDC20 and 16-bit sound on the ARM7500 and ARM7500FE.
sysbeep() support has been lost, but I'm not sure whether that belongs
here or in audio(4) anyway.  Support for 16-bit sound on the VIDC20
isn't present because I don't have the hardware to test it.  Donations
welcome!
2003-12-31 15:06:24 +00:00
bjh21
2432228b70 Add definitions of the bits in the Sound Control Register (SCR). 2003-12-31 14:41:15 +00:00
bjh21
0630d87772 Add some useful flag definitions for DMA registers. 2003-12-31 14:40:32 +00:00
pk
70f20a1217 Replace the traditional buffer memory management -- based on fixed per buffer
virtual memory reservation and a private pool of memory pages -- by a scheme
based on memory pools.

This allows better utilization of memory because buffers can now be allocated
with a granularity finer than the system's native page size (useful for
filesystems with e.g. 1k or 2k fragment sizes).  It also avoids fragmentation
of virtual to physical memory mappings (due to the former fixed virtual
address reservation) resulting in better utilization of MMU resources on some
platforms.  Finally, the scheme is more flexible by allowing run-time decisions
on the amount of memory to be used for buffers.

On the other hand, the effectiveness of the LRU queue for buffer recycling
may be somewhat reduced compared to the traditional method since, due to the
nature of the pool based memory allocation, the actual least recently used
buffer may release its memory to a pool different from the one needed by a
newly allocated buffer. However, this effect will kick in only if the
system is under memory pressure.
2003-12-30 12:33:13 +00:00
bjh21
8907f89465 speaker_ctl() is optional, and vidcaudio_speaker_ctl() did nothing, so kill it. 2003-12-29 16:49:31 +00:00
bjh21
0a64302931 Control debugging with VIDCAUDIO_DEBUG rather that DEBUG, to avoid confusion
with the global kernel macro called DEBUG.
2003-12-29 16:45:58 +00:00
bjh21
1b64799344 Minor KNF. 2003-12-29 16:41:22 +00:00
bjh21
32cf38df51 Fix a DEBUG printf. 2003-12-29 16:36:48 +00:00
bjh21
87bcc196e1 Use NULL rather than 0 to initialise unused function pointers. 2003-12-29 16:25:30 +00:00
bjh21
8dcadd2b7c KNF. 2003-12-29 16:20:46 +00:00
bjh21
b64c13c96f ANSIfy, un-__P(). 2003-12-29 16:11:38 +00:00
gavan
f2c2467d5c Correct masks for PCIXSR decomposition 2003-12-19 10:08:11 +00:00
bsh
7020653430 add a function to initialize variables used by splfoo().
This should be called in bootstrap so that splfoo() doesn't touch illegal address.
2003-12-17 13:20:04 +00:00
gavan
5232db351e The PIRSR is at location 0xffffe1ec, not 0xffffe2ec.
Source: Intel(R) 80321 I/O Processor Developer's Manual, page 578
2003-12-16 00:04:09 +00:00
scw
5f0d6f1b24 Work-around an obscure bug (reported by a couple of people, and reproduced
exactly twice by me) which causes the code at the top of copyin which
word-aligns the destination pointer to copy more bytes than necessary,
resulting in an alignment fault later on.

The bug is difficult to reproduce, but as far as I can tell it seems
to be as a result of the condition codes being corrupted, possibly
following a page fault caused by the first ldrbt/strb instructions.
The subsequent ldr<cc>bt/str<cc>b instructions then _always_ execute.
I can't think of any obvious reason why this would happen, though.
2003-12-15 09:27:18 +00:00
scw
fbdf861fac The last cpsr_all change was misguided. Just use cpsr_c wherever possible. 2003-12-15 09:18:21 +00:00
rearnsha
94c1474569 The machdep.debug sysctl variable uses code CPU_DEBUG
(not CPU_CONSDEV).
2003-12-13 12:07:41 +00:00
thorpej
648d5e6e22 Add a default case to avoid an uninitialized variable warning. 2003-12-12 16:42:44 +00:00
atatat
74b1767b3c The machdep.debug node is an int, not a struct 2003-12-12 03:52:56 +00:00
jmc
695a2a2f9f Change reference at bottom from sys/dev/majors to sys/conf/majors to match
reality
2003-12-10 02:04:00 +00:00
scw
2107fae815 Scoot the SDRAM controller's mapping forward to the next 1MB boundary
so it can be mapped easily at startup.
2003-12-08 16:14:16 +00:00
scw
40db825e26 Add support for picking up the size of SDRAM by reading the memory
controller's config register.
2003-12-08 14:41:11 +00:00
scw
c2415a0dc3 Oops, map PCI memory space at VA 0xf8000000 instead of in the middle
of user VM space at 0x48000000.
2003-12-08 13:40:33 +00:00
bjh21
df8ccd8d1b Undo last change: The "iomd" driver has its own bus_space tag, so it didn't
rely on the brokenness of the mainbus one.
2003-12-06 22:31:16 +00:00
bjh21
ed4b80b144 Fix the ARM mainbus version of bus_space_subregion() to correctly shift the
base offset before using it.  This makes it work the same as every other
implementation, and makes wdc at pioc on acorn32 work again.  Fix the only
caller I found which depended on the old behaviour.
2003-12-06 22:05:33 +00:00
bjh21
3f1dc2b013 Don't complain if we're asked for != 8 channels. There's no actual support
for fewer channels yet, but this is necessary just to avoid a boot-time panic.
2003-12-06 19:59:32 +00:00
atatat
13f8d2ce5f Dynamic sysctl.
Gone are the old kern_sysctl(), cpu_sysctl(), hw_sysctl(),
vfs_sysctl(), etc, routines, along with sysctl_int() et al.  Now all
nodes are registered with the tree, and nodes can be added (or
removed) easily, and I/O to and from the tree is handled generically.

Since the nodes are registered with the tree, the mapping from name to
number (and back again) can now be discovered, instead of having to be
hard coded.  Adding new nodes to the tree is likewise much simpler --
the new infrastructure handles almost all the work for simple types,
and just about anything else can be done with a small helper function.

All existing nodes are where they were before (numerically speaking),
so all existing consumers of sysctl information should notice no
difference.

PS - I'm sorry, but there's a distinct lack of documentation at the
moment.  I'm working on sysctl(3/8/9) right now, and I promise to
watch out for buses.
2003-12-04 19:38:21 +00:00
scw
ef87776bdb As per the recent ixp425 fix (which is based on this code):
In the interrupt dispatch loop, make sure to handle any pending interrupts
which came in while we were dealing with the first interrupt(s), and which
are enabled at the current spl.

This fixes a problem where the intr_enabled/hw mask is not updated to
allow pending interrupts through until the next splx(). In some case,
interrupts could be delayed until the next clock tick.
2003-12-03 19:55:37 +00:00
scw
99df1a0ae1 In the interrupt dispatch loop, make sure to handle any pending interrupts
which came in while we were dealing with the first interrupt(s), and which
are enabled at the current spl.

This fixes a problem where the intr_enabled/hw mask is not updated to
allow pending interrupts through until the next splx(). In some case,
interrupts could be delayed until the next clock tick.
2003-12-03 13:20:34 +00:00
rearnsha
e3cb92a81b Avoid alignment faults in fusword and fuswintr. Also handle big-endian
systems in susword and suswintr.
2003-12-01 13:34:44 +00:00
scw
7cf5104b5a - For consistency, use cpsr_all instead of cpsr.
- Make sure IRQs are enabled before handling ASTs.
2003-12-01 08:48:33 +00:00
bjh21
dd89bf7764 Use kdb_trap() rather than Debugger() to deal with unhandled undefined
instructions in the kernel, so that DDB gets a useful trapframe.  Also
panic if this happens when DDB's not around.
2003-11-29 22:21:29 +00:00
bsh
ae462c19db fix typo pointed out by Olivier Houchard. thanks. 2003-11-26 12:17:18 +00:00
rearnsha
445d91a12e Reposition a couple of NOP instructions for better efficiency. 2003-11-26 10:31:53 +00:00
christos
a21fdf3b43 bye, bye _MCONTEXT_TO_SIGCONTEXT and vice versa. 2003-11-25 23:11:52 +00:00
scw
d657bddd8c In data_abort_handler(), honour pcb_onfault even in the case where
current_intr_depth > 0.
2003-11-20 14:44:36 +00:00
scw
61aab8b582 On a fatal fault, dump the trapframe's contents to the console.
This is useful when DDB is not available, or practical.
2003-11-18 22:39:05 +00:00
scw
5801c73162 - Remove ixpsip_bs_tag (ixp425_sip_io.c). It just duplicated some of
the functionality of ixp425_bs_tag.
 - Add missing stream_{read,write}_1 ops to ixp425_bs_tag.
 - Re-work the delay() implementation to use the free-running Time-
   Stamp counter. This removes the need to bootstrap TMR0 early on.
2003-11-16 12:41:03 +00:00
scw
07acf64710 Re-instate the behaviour of sending SIGKILL to a process if uvm_fault()
returns ENOMEM. SIGSEGV just doesn't cut it. The original code looks to
have been lost in revision 1.34.
2003-11-15 20:18:34 +00:00
scw
a7533e4cdc - Add LOCKDEBUG-protected calls to sched_lock_idle() to cpu_switchto and
the idle loop. They seem to have gone AWOL sometime in the past.
   Fixes port-arm/23390.
 - While here, tidy up the idle loop.
 - Add a cheap DIAGNOSTIC check for run queue sanity.
2003-11-15 08:44:18 +00:00
briggs
dfa839f16b Make sure that L_SA_PAGEFAULT gets cleared from l_flag if pmap_fault_fixup
returns non-zero and we want to shortcut out.  This avoids a bogus pagefault
condition being detected in sa_switch().
Many thanks to Christian Limpach for finding this, obviating my band-aid
patch to kern_sa.c (posted on tech-kern).
2003-11-14 21:22:08 +00:00
scw
4eeb1be7e4 Check alignment of the fault PC before de-referencing it.
Give the process a Illegal Instruction fault if the PC is misaligned.
2003-11-14 19:03:17 +00:00
scw
a590a31135 - In data_abort_handler(), move the fault pc alignment check to before
the call to data_abort_fixup() as the fixup routines also try to
   de-reference the fault pc.

 - If a fault came from kernel mode, and the fault address looks to be in
   the kernel's address space, and pcb_onfault is *set*, check the
   instruction which caused the fault. If it's LDR{B,}T or STR{B,}T
   then one of the copy in/out routines is trying to read/write a
   kernel address with the wrong privilege. If that address is actually
   mapped, we could end up in an infinite loop because we failed to
   notice that it's really a 'user mode' access. Yay for "crashme".
   I suspect this also fixes PR port-arm/23052.

   Note: This *could* be fixed by adding sanity checks to copyin et al,
   but that would add extra overhead to the non-error path...

 - Fix a couple of __predict_false cases.
2003-11-14 19:00:03 +00:00
scw
571f89c4ad Slight re-org of the alignment/ast exit macro to better mimic the
original behaviour WRT cpsr/I32_bit handling.
2003-11-14 16:57:28 +00:00
scw
bb0221494d Since data_abort_handler() may have to decode the instruction at tf->tf_pc
to determine if a fault is read or write, make sure tf->tf_pc is 32-bit
aligned before dereferencing it.

Otherwise, deliver an illegal instruction signal to the process. We don't
support execution of Thumb code at this time.
2003-11-14 00:21:30 +00:00
chs
e07f0b9362 eliminate uvm_useracc() in favor of checking the return value of
copyin() or copyout().

uvm_useracc() tells us whether the mapping permissions allow access to
the desired part of an address space, and many callers assume that
this is the same as knowing whether an attempt to access that part of
the address space will succeed.  however, access to user space can
fail for reasons other than insufficient permission, most notably that
paging in any non-resident data can fail due to i/o errors.  most of
the callers of uvm_useracc() make the above incorrect assumption.  the
rest are all misguided optimizations, which optimize for the case
where an operation will fail.  we'd rather optimize for operations
succeeding, in which case we should just attempt the access and handle
failures due to insufficient permissions the same way we handle i/o
errors.  since there appear to be no good uses of uvm_useracc(), we'll
just remove it.
2003-11-13 03:09:28 +00:00
scw
f99d0398fb The previous commit had a #endif in the wrong place. 2003-11-11 08:27:16 +00:00
wiz
ee1b406595 Spell address with two d's. Inspired by similar changes in OpenBSD,
originating from Jonathon Gray and forwarded by jmc@openbsd.
2003-11-10 08:51:51 +00:00
scw
41d2057ea7 Pick the right value for {,_}MACHINE_ARCH according to endianness.
Spotted by mrg@.
2003-11-09 08:27:19 +00:00
tsutsui
112c91d583 Use #if defined(_KERNEL_OPT) to protect #include "opt_xxx.h"
from building LKM etc. Suggested by mrg.
2003-11-09 05:29:59 +00:00
he
c45fa09365 Suppress apparently-bogus -Wunitialized warnings, the compiler does
not detect that set / use occur under equal conditions in following
if() statements.
2003-11-07 18:29:30 +00:00
scw
f77bf2bb0c Enable/Restore alignment fault state on interrupt handler entry/exit. 2003-11-05 21:10:59 +00:00
scw
aee833c0ee Add "options ARM32_DISABLE_ALIGNMENT_FAULTS" to forcibly disable
alignment fault checking if necessary.

This option gets the acorn32 port working again.

XXX: Richard Earnshaw suggested enabling alignment faults for
XXX: userland only on acorn32. Need to investigate this.
2003-11-05 12:53:15 +00:00
scw
5d63abe1f1 Fix a braino introduced in r1.37. Thanks to Tom Spindler for spotting it. 2003-11-04 22:20:50 +00:00
dsl
2ffbd2ab99 Remove p_nras from struct proc - use LIST_EMPTY(&p->p_raslist) instead.
Remove p_raslock and rename p_lwplock p_lock (one lock is enough).
Simplify window test when adding a ras and correct test on VM_MAXUSER_ADDRESS.
Avoid unpredictable branch in i386 locore.S
(pad fields left in struct proc to avoid kernel bump)
2003-11-04 10:33:15 +00:00
scw
e9cd075343 It makes more sense to map the expansion bus registers in ixpsip
instead of the pci bridge driver.
2003-11-02 21:24:39 +00:00
scw
21f388f6e0 Add generic read/write region 1 ops. 2003-11-02 21:20:32 +00:00
reinoud
4e923603f1 Fix for PR # 23264 thanks to Mike Pumford; it is only attatching clock once
now.
2003-11-01 23:37:54 +00:00
jdolecek
3abecdb88d avoid stong words in comments 2003-11-01 17:35:42 +00:00
scw
b4c2d3dbb0 Insert some nops around the load instructions in badaddr_read_N().
That way, we can be sure any imprecise data abort actually happens
before clearing pcb_onfault.
2003-10-31 16:54:05 +00:00
cl
ef56cc40ab Reduce code duplication by adding mi_userret() in sys/userret.h
containing signal posting, kernel-exit handling and sa_upcall processing.

XXX the pc532, sparc, sparc64 and vax ports should have their
XXX userret() code rearranged to use this.
2003-10-31 16:44:34 +00:00
scw
336806eb55 Overhaul arm32's abort handlers:
- Assume a permission fault is always the result of an attempted
   write, so no need to disassemble the opcode.
   (as discussed with Richard Earnshaw/Jason Thorpe a week or two ago)

 - Split out non-MMU data aborts into separate functions, and deal
   correctly with XScale imprecise aborts. Specifically, the old code
   made no attempt to handle the double abort faults which can occur
   as a result of two consecutive external (imprecise) aborts. This
   was easy to provoke by read(2)ing from a /dev/mem offset which caused
   an external abort. With the old code, this would bring the system
   down instantly, with little clue as to why. (hint: tf_spsr held
   PSR_ABT32_MODE...)

 - Re-write badaddr_read() to use pcb_onfault instead of adding extra
   overhead to data_abort_handler(). A side effect of this is that it
   now benefits from the XScale double abort recovery.

 - Invoke the cpu-specific prefetch/data abort fixup routines only if
   the host cpu actually needs it. On other cpus, the code is optimised
   away.

 - Sprinkle __predict_{false,true} in all the right places.

 - G/C some excess debugging baggage.
2003-10-31 16:30:15 +00:00
simonb
6d85c5e0d5 Don't pass the (unused) return value args to the
trace_enter()/systrace_enter() functions.
2003-10-31 03:28:12 +00:00
thorpej
920b229e72 "bogus pin" -> "bogus device" in last change. 2003-10-31 01:12:06 +00:00
matt
b9e31106e8 Stop some (bogus) gcc unitialized variable warning. 2003-10-30 22:04:39 +00:00
matt
a72426fa60 Fix (real) uninitialized error. (Someone familiar with this should see
if is really an error).
2003-10-30 22:03:46 +00:00
skrll
d1ef336230 Fix a typo so that hack actually takes effect. 2003-10-30 12:30:39 +00:00
scw
7a55b436b2 Move the alignment fault enable/disable code into macroes to avoid
needless duplication.

Additionally, merge AST handling into the same code.

exception.S and the generic irq_dispatch.S routines have been updated
to use the macroes.

XXX: I have patches for the non-generic IRQ dispatch routines, but they
need testing by someone with hardware.
2003-10-30 08:57:24 +00:00
scw
97e37b6030 In bus_dmamap_sync(), we can no longer rely on the data cache being
flushed on every context switch as an indicator that a mapping is
not resident in the cache.

Instead, used the per-pmap flag maintained by the cpu_switch/pmap code.
2003-10-30 08:44:13 +00:00
mycroft
1588a62950 Whitespace. 2003-10-29 05:48:19 +00:00
mycroft
2f3400cec7 The previous patch was wrong -- mcr does not output anything. Instead give a
junk input (it's not used when the last argument is 0).
2003-10-29 05:47:04 +00:00
mycroft
7a85552554 If something goes wrong, we want to return ENOMEM, not 0! 2003-10-29 05:03:41 +00:00
mycroft
a1178ff097 The uninitialized variable in this case was a bug, which could probably be
used to crash the system.
2003-10-29 04:38:50 +00:00
kleink
7b674621bf Retire FPA support from this file at last; suggested by Richard Earnshaw
and not objected to by port-arm.
2003-10-28 21:27:08 +00:00
skrll
c5a4c60e2e Compile sys/kern/uipc_socket.c -fno-strict-aliasing for now. PR 23044. 2003-10-28 20:12:00 +00:00
chs
b42acb8d26 uninitialized variable. 2003-10-28 15:31:33 +00:00
scw
fe5371e8a9 Fix an uninitialised variable warning, reported by Shoichi Miyake
in port-arm/23293.
2003-10-28 08:22:55 +00:00