diff --git a/sys/src/9/alphapc/mkfile b/sys/src/9/alphapc/mkfile index 137ecb392..77071544a 100644 --- a/sys/src/9/alphapc/mkfile +++ b/sys/src/9/alphapc/mkfile @@ -36,6 +36,7 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ @@ -47,7 +48,6 @@ OBJ=\ i8259.$O\ main.$O\ mmu.$O\ - random.$O\ trap.$O\ $CONF.root.$O\ $CONF.rootc.$O\ diff --git a/sys/src/9/bitsy/mkfile b/sys/src/9/bitsy/mkfile index 00e19c138..05768dc72 100644 --- a/sys/src/9/bitsy/mkfile +++ b/sys/src/9/bitsy/mkfile @@ -34,6 +34,7 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ @@ -45,7 +46,6 @@ OBJ=\ main.$O\ mmu.$O\ power.$O\ - random.$O\ sa1110dma.$O\ screen.$O\ trap.$O\ diff --git a/sys/src/9/bitsy/random.c b/sys/src/9/bitsy/random.c deleted file mode 100644 index 7bade6cd1..000000000 --- a/sys/src/9/bitsy/random.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - - -struct Rb -{ - QLock; - Rendez producer; - Rendez consumer; - ulong randomcount; - uchar buf[128]; - uchar *ep; - uchar *rp; - uchar *wp; - uchar next; - uchar wakeme; - ushort bits; - ulong randn; -} rb; - -static int -rbnotfull(void*) -{ - int i; - - i = rb.rp - rb.wp; - return i != 1 && i != (1 - sizeof(rb.buf)); -} - -static int -rbnotempty(void*) -{ - return rb.wp != rb.rp; -} - -static void -genrandom(void*) -{ - up->basepri = PriNormal; - up->priority = up->basepri; - - for(;;){ - for(;;) - if(++rb.randomcount > 100000) - break; - if(anyhigher()) - sched(); - if(!rbnotfull(0)) - sleep(&rb.producer, rbnotfull, 0); - } -} - -/* - * produce random bits in a circular buffer - */ -static void -randomclock(void) -{ - if(rb.randomcount == 0 || !rbnotfull(0)) - return; - - rb.bits = (rb.bits<<2) ^ rb.randomcount; - rb.randomcount = 0; - - rb.next++; - if(rb.next != 8/2) - return; - rb.next = 0; - - *rb.wp ^= rb.bits; - if(rb.wp+1 == rb.ep) - rb.wp = rb.buf; - else - rb.wp = rb.wp+1; - - if(rb.wakeme) - wakeup(&rb.consumer); -} - -void -randominit(void) -{ - addclock0link(randomclock, 1000/HZ); - rb.ep = rb.buf + sizeof(rb.buf); - rb.rp = rb.wp = rb.buf; - kproc("genrandom", genrandom, 0); -} - -/* - * consume random bytes from a circular buffer - */ -ulong -randomread(void *xp, ulong n) -{ - uchar *e, *p; - ulong x; - - p = xp; - - if(waserror()){ - qunlock(&rb); - nexterror(); - } - - qlock(&rb); - for(e = p + n; p < e; ){ - if(rb.wp == rb.rp){ - rb.wakeme = 1; - wakeup(&rb.producer); - sleep(&rb.consumer, rbnotempty, 0); - rb.wakeme = 0; - continue; - } - - /* - * beating clocks will be precictable if - * they are synchronized. Use a cheap pseudo - * random number generator to obscure any cycles. - */ - x = rb.randn*1103515245 ^ *rb.rp; - *p++ = rb.randn = x; - - if(rb.rp+1 == rb.ep) - rb.rp = rb.buf; - else - rb.rp = rb.rp+1; - } - qunlock(&rb); - poperror(); - - wakeup(&rb.producer); - - return n; -} diff --git a/sys/src/9/kw/mkfile b/sys/src/9/kw/mkfile index ccd74bcc3..c8d606a7f 100644 --- a/sys/src/9/kw/mkfile +++ b/sys/src/9/kw/mkfile @@ -39,6 +39,7 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ @@ -52,7 +53,6 @@ OBJ=\ fpimem.$O\ main.$O\ mmu.$O\ - random.$O\ trap.$O\ $CONF.root.$O\ $CONF.rootc.$O\ diff --git a/sys/src/9/kw/random.c b/sys/src/9/kw/random.c deleted file mode 100644 index 1f7c0983d..000000000 --- a/sys/src/9/kw/random.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - - -struct Rb -{ - QLock; - Rendez producer; - Rendez consumer; - ulong randomcount; - uchar buf[128]; - uchar *ep; - uchar *rp; - uchar *wp; - uchar next; - uchar wakeme; - ushort bits; - ulong randn; -} rb; - -static int -rbnotfull(void*) -{ - int i; - - i = rb.rp - rb.wp; - return i != 1 && i != (1 - sizeof(rb.buf)); -} - -static int -rbnotempty(void*) -{ - return rb.wp != rb.rp; -} - -static void -genrandom(void*) -{ - up->basepri = PriNormal; - up->priority = up->basepri; - - for(;;){ - for(;;) - if(++rb.randomcount > 100000) - break; - if(anyhigher()) - sched(); - if(!rbnotfull(0)) - sleep(&rb.producer, rbnotfull, 0); - } -} - -/* - * produce random bits in a circular buffer - */ -static void -randomclock(void) -{ - if(rb.randomcount == 0 || !rbnotfull(0)) - return; - - rb.bits = (rb.bits<<2) ^ rb.randomcount; - rb.randomcount = 0; - - rb.next++; - if(rb.next != 8/2) - return; - rb.next = 0; - - *rb.wp ^= rb.bits; - if(rb.wp+1 == rb.ep) - rb.wp = rb.buf; - else - rb.wp = rb.wp+1; - - if(rb.wakeme) - wakeup(&rb.consumer); -} - -void -randominit(void) -{ - addclock0link(randomclock, 1000/HZ); - rb.ep = rb.buf + sizeof(rb.buf); - rb.rp = rb.wp = rb.buf; - kproc("genrandom", genrandom, 0); -} - -/* - * consume random bytes from a circular buffer - */ -ulong -randomread(void *xp, ulong n) -{ - uchar *e, *p; - ulong x; - - p = xp; - - if(waserror()){ - qunlock(&rb); - nexterror(); - } - - qlock(&rb); - for(e = p + n; p < e; ){ - if(rb.wp == rb.rp){ - rb.wakeme = 1; - wakeup(&rb.producer); - sleep(&rb.consumer, rbnotempty, 0); - rb.wakeme = 0; - continue; - } - - /* - * beating clocks will be predictable if - * they are synchronized. Use a cheap pseudo - * random number generator to obscure any cycles. - */ - x = rb.randn*1103515245 ^ *rb.rp; - *p++ = rb.randn = x; - - if(rb.rp+1 == rb.ep) - rb.rp = rb.buf; - else - rb.rp = rb.rp+1; - } - qunlock(&rb); - poperror(); - - wakeup(&rb.producer); - - return n; -} diff --git a/sys/src/9/mtx/mkfile b/sys/src/9/mtx/mkfile index be2e8917d..f1efadf6a 100644 --- a/sys/src/9/mtx/mkfile +++ b/sys/src/9/mtx/mkfile @@ -36,6 +36,7 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ @@ -44,7 +45,6 @@ OBJ=\ i8259.$O\ main.$O\ mmu.$O\ - random.$O\ raven.$O\ trap.$O\ $CONF.root.$O\ diff --git a/sys/src/9/mtx/random.c b/sys/src/9/mtx/random.c deleted file mode 100644 index 3c204b8d1..000000000 --- a/sys/src/9/mtx/random.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - - -struct Rb -{ - QLock; - Rendez producer; - Rendez consumer; - ulong randomcount; - uchar buf[1024]; - uchar *ep; - uchar *rp; - uchar *wp; - uchar next; - uchar wakeme; - ushort bits; - ulong randn; -} rb; - -static int -rbnotfull(void*) -{ - int i; - - i = rb.rp - rb.wp; - return i != 1 && i != (1 - sizeof(rb.buf)); -} - -static int -rbnotempty(void*) -{ - return rb.wp != rb.rp; -} - -static void -genrandom(void*) -{ - up->basepri = PriNormal; - up->priority = up->basepri; - - for(;;){ - for(;;) - if(++rb.randomcount > 100000) - break; - if(anyhigher()) - sched(); - if(!rbnotfull(0)) - sleep(&rb.producer, rbnotfull, 0); - } -} - -/* - * produce random bits in a circular buffer - */ -static void -randomclock(void) -{ - if(rb.randomcount == 0 || !rbnotfull(0)) - return; - - rb.bits = (rb.bits<<2) ^ rb.randomcount; - rb.randomcount = 0; - - rb.next++; - if(rb.next != 8/2) - return; - rb.next = 0; - - *rb.wp ^= rb.bits; - if(rb.wp+1 == rb.ep) - rb.wp = rb.buf; - else - rb.wp = rb.wp+1; - - if(rb.wakeme) - wakeup(&rb.consumer); -} - -void -randominit(void) -{ - addclock0link(randomclock, 1000/HZ); - rb.ep = rb.buf + sizeof(rb.buf); - rb.rp = rb.wp = rb.buf; - kproc("genrandom", genrandom, 0); -} - -/* - * consume random bytes from a circular buffer - */ -ulong -randomread(void *xp, ulong n) -{ - uchar *e, *p; - ulong x; - - p = xp; - - if(waserror()){ - qunlock(&rb); - nexterror(); - } - - qlock(&rb); - for(e = p + n; p < e; ){ - if(rb.wp == rb.rp){ - rb.wakeme = 1; - wakeup(&rb.producer); - sleep(&rb.consumer, rbnotempty, 0); - rb.wakeme = 0; - continue; - } - - /* - * beating clocks will be precictable if - * they are synchronized. Use a cheap pseudo - * random number generator to obscure any cycles. - */ - x = rb.randn*1103515245 ^ *rb.rp; - *p++ = rb.randn = x; - - if(rb.rp+1 == rb.ep) - rb.rp = rb.buf; - else - rb.rp = rb.rp+1; - } - qunlock(&rb); - poperror(); - - wakeup(&rb.producer); - - return n; -} diff --git a/sys/src/9/omap/mkfile b/sys/src/9/omap/mkfile index fcd7db859..2dac0ca0a 100644 --- a/sys/src/9/omap/mkfile +++ b/sys/src/9/omap/mkfile @@ -39,6 +39,7 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ @@ -51,7 +52,6 @@ OBJ=\ fpimem.$O\ main.$O\ mmu.$O\ - random.$O\ trap.$O\ $CONF.root.$O\ $CONF.rootc.$O\ diff --git a/sys/src/9/omap/random.c b/sys/src/9/omap/random.c deleted file mode 100644 index 1f7c0983d..000000000 --- a/sys/src/9/omap/random.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - - -struct Rb -{ - QLock; - Rendez producer; - Rendez consumer; - ulong randomcount; - uchar buf[128]; - uchar *ep; - uchar *rp; - uchar *wp; - uchar next; - uchar wakeme; - ushort bits; - ulong randn; -} rb; - -static int -rbnotfull(void*) -{ - int i; - - i = rb.rp - rb.wp; - return i != 1 && i != (1 - sizeof(rb.buf)); -} - -static int -rbnotempty(void*) -{ - return rb.wp != rb.rp; -} - -static void -genrandom(void*) -{ - up->basepri = PriNormal; - up->priority = up->basepri; - - for(;;){ - for(;;) - if(++rb.randomcount > 100000) - break; - if(anyhigher()) - sched(); - if(!rbnotfull(0)) - sleep(&rb.producer, rbnotfull, 0); - } -} - -/* - * produce random bits in a circular buffer - */ -static void -randomclock(void) -{ - if(rb.randomcount == 0 || !rbnotfull(0)) - return; - - rb.bits = (rb.bits<<2) ^ rb.randomcount; - rb.randomcount = 0; - - rb.next++; - if(rb.next != 8/2) - return; - rb.next = 0; - - *rb.wp ^= rb.bits; - if(rb.wp+1 == rb.ep) - rb.wp = rb.buf; - else - rb.wp = rb.wp+1; - - if(rb.wakeme) - wakeup(&rb.consumer); -} - -void -randominit(void) -{ - addclock0link(randomclock, 1000/HZ); - rb.ep = rb.buf + sizeof(rb.buf); - rb.rp = rb.wp = rb.buf; - kproc("genrandom", genrandom, 0); -} - -/* - * consume random bytes from a circular buffer - */ -ulong -randomread(void *xp, ulong n) -{ - uchar *e, *p; - ulong x; - - p = xp; - - if(waserror()){ - qunlock(&rb); - nexterror(); - } - - qlock(&rb); - for(e = p + n; p < e; ){ - if(rb.wp == rb.rp){ - rb.wakeme = 1; - wakeup(&rb.producer); - sleep(&rb.consumer, rbnotempty, 0); - rb.wakeme = 0; - continue; - } - - /* - * beating clocks will be predictable if - * they are synchronized. Use a cheap pseudo - * random number generator to obscure any cycles. - */ - x = rb.randn*1103515245 ^ *rb.rp; - *p++ = rb.randn = x; - - if(rb.rp+1 == rb.ep) - rb.rp = rb.buf; - else - rb.rp = rb.rp+1; - } - qunlock(&rb); - poperror(); - - wakeup(&rb.producer); - - return n; -} diff --git a/sys/src/9/omap4/mkfile b/sys/src/9/omap4/mkfile index 169367ab1..9e0eb6c15 100644 --- a/sys/src/9/omap4/mkfile +++ b/sys/src/9/omap4/mkfile @@ -37,12 +37,12 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ main.$O\ mmu.$O\ - random.$O\ clock.$O\ arch.$O\ trap.$O\ diff --git a/sys/src/9/omap4/random.c b/sys/src/9/omap4/random.c deleted file mode 100644 index 1f7c0983d..000000000 --- a/sys/src/9/omap4/random.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - - -struct Rb -{ - QLock; - Rendez producer; - Rendez consumer; - ulong randomcount; - uchar buf[128]; - uchar *ep; - uchar *rp; - uchar *wp; - uchar next; - uchar wakeme; - ushort bits; - ulong randn; -} rb; - -static int -rbnotfull(void*) -{ - int i; - - i = rb.rp - rb.wp; - return i != 1 && i != (1 - sizeof(rb.buf)); -} - -static int -rbnotempty(void*) -{ - return rb.wp != rb.rp; -} - -static void -genrandom(void*) -{ - up->basepri = PriNormal; - up->priority = up->basepri; - - for(;;){ - for(;;) - if(++rb.randomcount > 100000) - break; - if(anyhigher()) - sched(); - if(!rbnotfull(0)) - sleep(&rb.producer, rbnotfull, 0); - } -} - -/* - * produce random bits in a circular buffer - */ -static void -randomclock(void) -{ - if(rb.randomcount == 0 || !rbnotfull(0)) - return; - - rb.bits = (rb.bits<<2) ^ rb.randomcount; - rb.randomcount = 0; - - rb.next++; - if(rb.next != 8/2) - return; - rb.next = 0; - - *rb.wp ^= rb.bits; - if(rb.wp+1 == rb.ep) - rb.wp = rb.buf; - else - rb.wp = rb.wp+1; - - if(rb.wakeme) - wakeup(&rb.consumer); -} - -void -randominit(void) -{ - addclock0link(randomclock, 1000/HZ); - rb.ep = rb.buf + sizeof(rb.buf); - rb.rp = rb.wp = rb.buf; - kproc("genrandom", genrandom, 0); -} - -/* - * consume random bytes from a circular buffer - */ -ulong -randomread(void *xp, ulong n) -{ - uchar *e, *p; - ulong x; - - p = xp; - - if(waserror()){ - qunlock(&rb); - nexterror(); - } - - qlock(&rb); - for(e = p + n; p < e; ){ - if(rb.wp == rb.rp){ - rb.wakeme = 1; - wakeup(&rb.producer); - sleep(&rb.consumer, rbnotempty, 0); - rb.wakeme = 0; - continue; - } - - /* - * beating clocks will be predictable if - * they are synchronized. Use a cheap pseudo - * random number generator to obscure any cycles. - */ - x = rb.randn*1103515245 ^ *rb.rp; - *p++ = rb.randn = x; - - if(rb.rp+1 == rb.ep) - rb.rp = rb.buf; - else - rb.rp = rb.rp+1; - } - qunlock(&rb); - poperror(); - - wakeup(&rb.producer); - - return n; -} diff --git a/sys/src/9/pc/mkfile b/sys/src/9/pc/mkfile index a55801d54..4e61f7237 100644 --- a/sys/src/9/pc/mkfile +++ b/sys/src/9/pc/mkfile @@ -41,6 +41,7 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ @@ -51,7 +52,6 @@ OBJ=\ main.$O\ memory.$O\ mmu.$O\ - random.$O\ syscallfmt.$O\ trap.$O\ $CONF.root.$O\ diff --git a/sys/src/9/pc/random.c b/sys/src/9/port/random.c similarity index 97% rename from sys/src/9/pc/random.c rename to sys/src/9/port/random.c index 8e60a2ba0..3a697827a 100644 --- a/sys/src/9/pc/random.c +++ b/sys/src/9/port/random.c @@ -5,14 +5,13 @@ #include "fns.h" #include "../port/error.h" - struct Rb { QLock; Rendez producer; Rendez consumer; ulong randomcount; - uchar buf[1024]; + uchar buf[128]; uchar *ep; uchar *rp; uchar *wp; @@ -85,7 +84,7 @@ void randominit(void) { /* Frequency close but not equal to HZ */ - addclock0link(randomclock, 13); + addclock0link(randomclock, MS2HZ+3); rb.ep = rb.buf + sizeof(rb.buf); rb.rp = rb.wp = rb.buf; kproc("genrandom", genrandom, 0); diff --git a/sys/src/9/ppc/mkfile b/sys/src/9/ppc/mkfile index 3a8024c09..0ced83b9c 100644 --- a/sys/src/9/ppc/mkfile +++ b/sys/src/9/ppc/mkfile @@ -37,13 +37,13 @@ PORT=\ taslock.$O\ tod.$O\ xalloc.$O\ + random.$O\ OBJ=\ l.$O\ clock.$O\ main.$O\ mmu.$O\ - random.$O\ trap.$O\ $CONF.root.$O\ $CONF.rootc.$O\ diff --git a/sys/src/9/ppc/random.c b/sys/src/9/ppc/random.c deleted file mode 100644 index 3c204b8d1..000000000 --- a/sys/src/9/ppc/random.c +++ /dev/null @@ -1,138 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - - -struct Rb -{ - QLock; - Rendez producer; - Rendez consumer; - ulong randomcount; - uchar buf[1024]; - uchar *ep; - uchar *rp; - uchar *wp; - uchar next; - uchar wakeme; - ushort bits; - ulong randn; -} rb; - -static int -rbnotfull(void*) -{ - int i; - - i = rb.rp - rb.wp; - return i != 1 && i != (1 - sizeof(rb.buf)); -} - -static int -rbnotempty(void*) -{ - return rb.wp != rb.rp; -} - -static void -genrandom(void*) -{ - up->basepri = PriNormal; - up->priority = up->basepri; - - for(;;){ - for(;;) - if(++rb.randomcount > 100000) - break; - if(anyhigher()) - sched(); - if(!rbnotfull(0)) - sleep(&rb.producer, rbnotfull, 0); - } -} - -/* - * produce random bits in a circular buffer - */ -static void -randomclock(void) -{ - if(rb.randomcount == 0 || !rbnotfull(0)) - return; - - rb.bits = (rb.bits<<2) ^ rb.randomcount; - rb.randomcount = 0; - - rb.next++; - if(rb.next != 8/2) - return; - rb.next = 0; - - *rb.wp ^= rb.bits; - if(rb.wp+1 == rb.ep) - rb.wp = rb.buf; - else - rb.wp = rb.wp+1; - - if(rb.wakeme) - wakeup(&rb.consumer); -} - -void -randominit(void) -{ - addclock0link(randomclock, 1000/HZ); - rb.ep = rb.buf + sizeof(rb.buf); - rb.rp = rb.wp = rb.buf; - kproc("genrandom", genrandom, 0); -} - -/* - * consume random bytes from a circular buffer - */ -ulong -randomread(void *xp, ulong n) -{ - uchar *e, *p; - ulong x; - - p = xp; - - if(waserror()){ - qunlock(&rb); - nexterror(); - } - - qlock(&rb); - for(e = p + n; p < e; ){ - if(rb.wp == rb.rp){ - rb.wakeme = 1; - wakeup(&rb.producer); - sleep(&rb.consumer, rbnotempty, 0); - rb.wakeme = 0; - continue; - } - - /* - * beating clocks will be precictable if - * they are synchronized. Use a cheap pseudo - * random number generator to obscure any cycles. - */ - x = rb.randn*1103515245 ^ *rb.rp; - *p++ = rb.randn = x; - - if(rb.rp+1 == rb.ep) - rb.rp = rb.buf; - else - rb.rp = rb.rp+1; - } - qunlock(&rb); - poperror(); - - wakeup(&rb.producer); - - return n; -}