2001-01-09 10:52:52 -05:00
|
|
|
; Copyright (c) 1999-2001 by Martin Gasbichler. See file COPYING.
|
|
|
|
|
1999-10-15 14:34:03 -04:00
|
|
|
(define-enumeration low-interrupt
|
2001-01-09 10:52:52 -05:00
|
|
|
(
|
|
|
|
;;; just like the VM:
|
1999-10-15 14:34:03 -04:00
|
|
|
alarm
|
2001-01-09 10:52:52 -05:00
|
|
|
keyboard
|
|
|
|
post-gc
|
|
|
|
i/o-completion
|
|
|
|
;;;; os-signal is multiplexed:
|
1999-10-15 14:34:03 -04:00
|
|
|
chld
|
|
|
|
cont
|
|
|
|
hup
|
|
|
|
quit
|
|
|
|
term
|
|
|
|
tstp
|
|
|
|
usr1
|
|
|
|
usr2
|
|
|
|
info
|
|
|
|
io
|
|
|
|
poll
|
|
|
|
prof
|
|
|
|
pwr
|
|
|
|
urg
|
|
|
|
vtalrm
|
|
|
|
winch
|
|
|
|
xcpu
|
|
|
|
xfsz
|
|
|
|
))
|
|
|
|
|
1999-11-04 15:33:26 -05:00
|
|
|
|
|
|
|
(define number-of-interrupts
|
1999-10-15 14:34:03 -04:00
|
|
|
low-interrupt-count)
|
|
|
|
|
|
|
|
(define interrupt/alarm (enum low-interrupt alarm))
|
|
|
|
(define interrupt/keyboard (enum low-interrupt keyboard))
|
|
|
|
(define interrupt/post-gc (enum low-interrupt post-gc))
|
|
|
|
(define interrupt/i/o-completion (enum low-interrupt i/o-completion))
|
|
|
|
(define interrupt/chld (enum low-interrupt chld))
|
|
|
|
(define interrupt/cont (enum low-interrupt cont))
|
|
|
|
(define interrupt/hup (enum low-interrupt hup))
|
|
|
|
(define interrupt/quit (enum low-interrupt quit))
|
|
|
|
(define interrupt/term (enum low-interrupt term))
|
|
|
|
(define interrupt/tstp (enum low-interrupt tstp))
|
|
|
|
(define interrupt/usr1 (enum low-interrupt usr1))
|
|
|
|
(define interrupt/usr2 (enum low-interrupt usr2))
|
|
|
|
(define interrupt/info (enum low-interrupt info))
|
|
|
|
(define interrupt/io (enum low-interrupt io))
|
|
|
|
(define interrupt/poll (enum low-interrupt poll))
|
|
|
|
(define interrupt/prof (enum low-interrupt prof))
|
|
|
|
(define interrupt/pwr (enum low-interrupt pwr))
|
|
|
|
(define interrupt/urg (enum low-interrupt urg))
|
|
|
|
(define interrupt/vtalrm (enum low-interrupt vtalrm))
|
|
|
|
(define interrupt/winch (enum low-interrupt winch))
|
|
|
|
(define interrupt/xcpu (enum low-interrupt xcpu))
|
|
|
|
(define interrupt/xfsz (enum low-interrupt xfsz))
|
|
|
|
|
|
|
|
(define interrupt/int interrupt/keyboard)
|
|
|
|
(define interrupt/alrm interrupt/alarm)
|
2001-01-09 10:52:52 -05:00
|
|
|
|
|
|
|
(define (interrupt-set . interrupts)
|
|
|
|
(let lp ((ints interrupts) (ans 0))
|
|
|
|
(if (pair? ints)
|
|
|
|
(lp (cdr ints) (bitwise-ior ans (arithmetic-shift 1 (car ints) )))
|
|
|
|
ans)))
|
|
|
|
|
|
|
|
|
|
|
|
(define (interrupt-in-set? int set)
|
|
|
|
(not (zero? (bitwise-and (arithmetic-shift 1 int) set))))
|
|
|
|
|
|
|
|
(define (insert-interrupt int set)
|
|
|
|
(bitwise-ior (arithmetic-shift 1 int) set))
|
|
|
|
|
|
|
|
(define (remove-interrupt int set)
|
|
|
|
(if (interrupt-in-set? int set)
|
|
|
|
(bitwise-xor (arithmetic-shift 1 int) set)
|
|
|
|
set))
|
|
|
|
|
|
|
|
(define full-interrupt-set
|
|
|
|
(let lp ((ans 0) (count (- number-of-interrupts 1)))
|
|
|
|
(if (< count 0)
|
|
|
|
ans
|
|
|
|
(lp (insert-interrupt count ans) (- count 1)))))
|