summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-21 00:42:08 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-21 00:42:08 +0000
commite7d3e20912baa82965108997013710223152772c (patch)
tree02d4ed8e367319884582025cb1da2f4c45a05190
parent9adf75a7091c7bd2afefbeba62a2525d50df4404 (diff)
downloadplan9front-e7d3e20912baa82965108997013710223152772c.tar.xz
remove keyboard stuff from other ports, make openssl and python compile on arm
-rw-r--r--sys/include/ape/openssl/opensslconf.h2
-rw-r--r--sys/src/9/alphapc/fns.h1
-rw-r--r--sys/src/9/alphapc/kbd.c456
-rw-r--r--sys/src/9/alphapc/main.c1
-rw-r--r--sys/src/9/alphapc/mkfile6
-rw-r--r--sys/src/9/alphapc/screen.h1
-rw-r--r--sys/src/9/bitsy/devµc.c49
-rw-r--r--sys/src/9/bitsy/mkfile1
-rw-r--r--sys/src/9/kw/mkfile1
-rw-r--r--sys/src/9/mtx/fns.h1
-rw-r--r--sys/src/9/mtx/kbd.c435
-rw-r--r--sys/src/9/mtx/main.c1
-rw-r--r--sys/src/9/mtx/mkfile2
-rw-r--r--sys/src/9/omap/archomap.c5
-rw-r--r--sys/src/9/omap/beagle11
-rw-r--r--sys/src/9/omap/devcons.c1354
-rw-r--r--sys/src/9/omap/devuart.c5
-rw-r--r--sys/src/9/omap/fns.h1
-rw-r--r--sys/src/9/omap/kbd.c410
-rw-r--r--sys/src/9/omap/main.c4
-rw-r--r--sys/src/9/omap/mkfile5
-rw-r--r--sys/src/9/omap/screen.h1
-rw-r--r--sys/src/9/omap/uarti8250.c2
-rw-r--r--sys/src/9/pc/mkfile1
-rw-r--r--sys/src/9/port/audioif.h2
-rw-r--r--sys/src/9/port/devaudio.c15
-rw-r--r--sys/src/9/port/devmouse.c15
-rw-r--r--sys/src/9/port/latin1.c76
-rw-r--r--sys/src/9/port/portdat.h2
-rw-r--r--sys/src/9/port/portfns.h1
-rw-r--r--sys/src/9/port/portmkfile5
-rw-r--r--sys/src/9/ppc/mkfile1
-rw-r--r--sys/src/cmd/python/Modules/_lsprof.c10
-rw-r--r--sys/src/cmd/python/Modules/bz2module.c6
-rw-r--r--sys/src/cmd/python/Modules/fcntlmodule.c14
-rw-r--r--sys/src/cmd/python/Modules/posixmodule.c12
-rw-r--r--sys/src/cmd/python/Modules/testcapi_long.h11
-rw-r--r--sys/src/cmd/python/Objects/fileobject.c13
-rw-r--r--sys/src/cmd/python/Python/marshal.c2
-rw-r--r--sys/src/cmd/python/plan9.c2
40 files changed, 81 insertions, 2862 deletions
diff --git a/sys/include/ape/openssl/opensslconf.h b/sys/include/ape/openssl/opensslconf.h
index b3d30b151..fe01662bd 100644
--- a/sys/include/ape/openssl/opensslconf.h
+++ b/sys/include/ape/openssl/opensslconf.h
@@ -84,8 +84,6 @@
/* Generate 80386 code? */
#if defined(PLAN9) && defined(T386)
#define I386_ONLY
-#else
-#error unknown objtype
#endif
#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
diff --git a/sys/src/9/alphapc/fns.h b/sys/src/9/alphapc/fns.h
index 88b0f3a68..05fd83914 100644
--- a/sys/src/9/alphapc/fns.h
+++ b/sys/src/9/alphapc/fns.h
@@ -54,7 +54,6 @@ void ioinit(void);
int iounused(int, int);
int irqallocread(char*, long, vlong);
int isaconfig(char*, int, ISAConf*);
-void kbdinit(void);
#define kexit(a)
#define kmapinval()
void *kmapv(uvlong, int);
diff --git a/sys/src/9/alphapc/kbd.c b/sys/src/9/alphapc/kbd.c
deleted file mode 100644
index 73ad3e1dd..000000000
--- a/sys/src/9/alphapc/kbd.c
+++ /dev/null
@@ -1,456 +0,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-#include "../port/error.h"
-
-enum {
- Data= 0x60, /* data port */
-
- Status= 0x64, /* status port */
- Inready= 0x01, /* input character ready */
- Outbusy= 0x02, /* output busy */
- Sysflag= 0x04, /* system flag */
- Cmddata= 0x08, /* cmd==0, data==1 */
- Inhibit= 0x10, /* keyboard/mouse inhibited */
- Minready= 0x20, /* mouse character ready */
- Rtimeout= 0x40, /* general timeout */
- Parity= 0x80,
-
- Cmd= 0x64, /* command port (write only) */
-
- Spec= 0x80,
-
- PF= Spec|0x20, /* num pad function key */
- View= Spec|0x00, /* view (shift window up) */
- KF= 0xF000, /* function key (begin Unicode private space) */
- Shift= Spec|0x60,
- Break= Spec|0x61,
- Ctrl= Spec|0x62,
- Latin= Spec|0x63,
- Caps= Spec|0x64,
- Num= Spec|0x65,
- Middle= Spec|0x66,
- No= 0x00, /* peter */
-
- Home= KF|13,
- Up= KF|14,
- Pgup= KF|15,
- Print= KF|16,
- Left= KF|17,
- Right= KF|18,
- End= '\r',
- Down= View,
- Pgdown= KF|19,
- Ins= KF|20,
- Scroll= KF|21,
- Del= 0x7F,
-};
-
-/*
- * The codes at 0x79 and 0x81 are produed by the PFU Happy Hacking keyboard.
- * A 'standard' keyboard doesn't produce anything above 0x58.
- */
-Rune kbtab[] =
-{
-[0x00] No, 0x1b, '1', '2', '3', '4', '5', '6',
-[0x08] '7', '8', '9', '0', '-', '=', '\b', '\t',
-[0x10] 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
-[0x18] 'o', 'p', '[', ']', '\n', Ctrl, 'a', 's',
-[0x20] 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
-[0x28] '\'', '`', Shift, '\\', 'z', 'x', 'c', 'v',
-[0x30] 'b', 'n', 'm', ',', '.', '/', Shift, '*',
-[0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5,
-[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7',
-[0x48] '8', '9', '-', '4', '5', '6', '+', '1',
-[0x50] '2', '3', '0', '.', No, No, No, KF|11,
-[0x58] KF|12, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, View, No, Up, No, No, No, No,
-};
-
-Rune kbtabshift[] =
-{
-[0x00] No, 0x1b, '!', '@', '#', '$', '%', '^',
-[0x08] '&', '*', '(', ')', '_', '+', '\b', '\t',
-[0x10] 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
-[0x18] 'O', 'P', '{', '}', '\n', Ctrl, 'A', 'S',
-[0x20] 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':',
-[0x28] '"', '~', Shift, '|', 'Z', 'X', 'C', 'V',
-[0x30] 'B', 'N', 'M', '<', '>', '?', Shift, '*',
-[0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5,
-[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7',
-[0x48] '8', '9', '-', '4', '5', '6', '+', '1',
-[0x50] '2', '3', '0', '.', No, No, No, KF|11,
-[0x58] KF|12, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, Up, No, Up, No, No, No, No,
-};
-
-Rune kbtabesc1[] =
-{
-[0x00] No, No, No, No, No, No, No, No,
-[0x08] No, No, No, No, No, No, No, No,
-[0x10] No, No, No, No, No, No, No, No,
-[0x18] No, No, No, No, '\n', Ctrl, No, No,
-[0x20] No, No, No, No, No, No, No, No,
-[0x28] No, No, Shift, No, No, No, No, No,
-[0x30] No, No, No, No, No, '/', No, Print,
-[0x38] Latin, No, No, No, No, No, No, No,
-[0x40] No, No, No, No, No, No, Break, Home,
-[0x48] Up, Pgup, No, Left, No, Right, No, End,
-[0x50] Down, Pgdown, Ins, Del, No, No, No, No,
-[0x58] No, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, Up, No, No, No, No, No, No,
-};
-
-enum
-{
- /* controller command byte */
- Cscs1= (1<<6), /* scan code set 1 */
- Cauxdis= (1<<5), /* mouse disable */
- Ckbddis= (1<<4), /* kbd disable */
- Csf= (1<<2), /* system flag */
- Cauxint= (1<<1), /* mouse interrupt enable */
- Ckbdint= (1<<0), /* kbd interrupt enable */
-};
-
-static Lock i8042lock;
-static uchar ccc;
-static void (*auxputc)(int, int);
-
-/*
- * wait for output no longer busy
- */
-static int
-outready(void)
-{
- int tries;
-
- for(tries = 0; (inb(Status) & Outbusy); tries++){
- if(tries > 500)
- return -1;
- delay(2);
- }
- return 0;
-}
-
-/*
- * wait for input
- */
-static int
-inready(void)
-{
- int tries;
-
- for(tries = 0; !(inb(Status) & Inready); tries++){
- if(tries > 500)
- return -1;
- delay(2);
- }
- return 0;
-}
-
-/*
- * ask 8042 to reset the machine
- */
-void
-i8042reset(void)
-{
- ushort *s = KADDR(0x472);
- int i, x;
-
- *s = 0x1234; /* BIOS warm-boot flag */
-
- /*
- * newer reset the machine command
- */
- outready();
- outb(Cmd, 0xFE);
- outready();
-
- /*
- * Pulse it by hand (old somewhat reliable)
- */
- x = 0xDF;
- for(i = 0; i < 5; i++){
- x ^= 1;
- outready();
- outb(Cmd, 0xD1);
- outready();
- outb(Data, x); /* toggle reset */
- delay(100);
- }
-}
-
-int
-i8042auxcmd(int cmd)
-{
- unsigned int c;
- int tries;
-
- c = 0;
- tries = 0;
-
- ilock(&i8042lock);
- do{
- if(tries++ > 2)
- break;
- if(outready() < 0)
- break;
- outb(Cmd, 0xD4);
- if(outready() < 0)
- break;
- outb(Data, cmd);
- if(outready() < 0)
- break;
- if(inready() < 0)
- break;
- c = inb(Data);
- } while(c == 0xFE || c == 0);
- iunlock(&i8042lock);
-
- if(c != 0xFA){
- print("i8042: %2.2ux returned to the %2.2ux command\n", c, cmd);
- return -1;
- }
- return 0;
-}
-
-/*
- * keyboard interrupt
- */
-static void
-i8042intr(Ureg*, void*)
-{
- int s, c, i;
- static int esc1, esc2;
- static int alt, caps, ctl, num, shift;
- static int collecting, nk;
- static Rune kc[5];
- int keyup;
-
- /*
- * get status
- */
- lock(&i8042lock);
- s = inb(Status);
- if(!(s&Inready)){
- unlock(&i8042lock);
- return;
- }
-
- /*
- * get the character
- */
- c = inb(Data);
- unlock(&i8042lock);
-
- /*
- * if it's the aux port...
- */
- if(s & Minready){
- if(auxputc != nil)
- auxputc(c, shift);
- return;
- }
-
- /*
- * e0's is the first of a 2 character sequence
- */
- if(c == 0xe0){
- esc1 = 1;
- return;
- } else if(c == 0xe1){
- esc2 = 2;
- return;
- }
-
- keyup = c&0x80;
- c &= 0x7f;
- if(c > sizeof kbtab){
- c |= keyup;
- if(c != 0xFF) /* these come fairly often: CAPSLOCK U Y */
- print("unknown key %ux\n", c);
- return;
- }
-
- if(esc1){
- c = kbtabesc1[c];
- esc1 = 0;
- } else if(esc2){
- esc2--;
- return;
- } else if(shift)
- c = kbtabshift[c];
- else
- c = kbtab[c];
-
- if(caps && c<='z' && c>='a')
- c += 'A' - 'a';
-
- /*
- * keyup only important for shifts
- */
- if(keyup){
- switch(c){
- case Latin:
- alt = 0;
- break;
- case Shift:
- shift = 0;
- break;
- case Ctrl:
- ctl = 0;
- break;
- }
- return;
- }
-
- /*
- * normal character
- */
- if(!(c & (Spec|KF))){
- if(ctl){
- if(alt && c == Del)
- exit(0);
- c &= 0x1f;
- }
- if(!collecting){
- kbdputc(kbdq, c);
- return;
- }
- kc[nk++] = c;
- c = latin1(kc, nk);
- if(c < -1) /* need more keystrokes */
- return;
- if(c != -1) /* valid sequence */
- kbdputc(kbdq, c);
- else /* dump characters */
- for(i=0; i<nk; i++)
- kbdputc(kbdq, kc[i]);
- nk = 0;
- collecting = 0;
- return;
- } else {
- switch(c){
- case Caps:
- caps ^= 1;
- return;
- case Num:
- num ^= 1;
- return;
- case Shift:
- shift = 1;
- return;
- case Latin:
- alt = 1;
- collecting = 1;
- nk = 0;
- return;
- case Ctrl:
- ctl = 1;
- return;
- }
- }
- kbdputc(kbdq, c);
-}
-
-void
-i8042auxenable(void (*putc)(int, int))
-{
- char *err = "i8042: aux init failed\n";
-
- /* enable kbd/aux xfers and interrupts */
- ccc &= ~Cauxdis;
- ccc |= Cauxint;
-
- ilock(&i8042lock);
- if(outready() < 0)
- print(err);
- outb(Cmd, 0x60); /* write control register */
- if(outready() < 0)
- print(err);
- outb(Data, ccc);
- if(outready() < 0)
- print(err);
- outb(Cmd, 0xA8); /* auxilliary device enable */
- if(outready() < 0){
- iunlock(&i8042lock);
- return;
- }
- auxputc = putc;
- intrenable(IrqAUX, i8042intr, 0, BUSUNKNOWN, "kbdaux");
- iunlock(&i8042lock);
-}
-
-static void
-setscan(int code)
-{
- char *err = "setscan: set scan code failed\n";
-
- outb(Data, 0xF0);
- if(inready() < 0 || inb(Data) != 0xFA || outready() < 0) {
- print(err);
- return;
- }
- outb(Data, code);
- if(inready() < 0) {
- print(err);
- return;
- }
- inb(Data);
- if(outready() < 0)
- print(err);
-}
-
-void
-kbdinit(void)
-{
- int c;
-
- kbdq = qopen(4*1024, 0, 0, 0);
- if(kbdq == nil)
- panic("kbdinit");
- qnoblock(kbdq, 1);
-
- ioalloc(Data, 1, 0, "kbd");
- ioalloc(Cmd, 1, 0, "kbd");
-
- intrenable(IrqKBD, i8042intr, 0, BUSUNKNOWN, "kbd");
-
- /* wait for a quiescent controller */
- while((c = inb(Status)) & (Outbusy | Inready))
- if(c & Inready)
- inb(Data);
-
- /* get current controller command byte */
- outb(Cmd, 0x20);
- if(inready() < 0){
- print("kbdinit: can't read ccc\n");
- ccc = 0;
- } else
- ccc = inb(Data);
-
- /* enable kbd xfers and interrupts */
- /* disable mouse */
- ccc &= ~Ckbddis;
- ccc |= Csf | Ckbdint | Cscs1;
- if(outready() < 0)
- print("kbd init failed\n");
- outb(Cmd, 0x60);
- if(outready() < 0)
- print("kbd init failed\n");
- outb(Data, ccc);
- outready();
- setscan(0x02);
-}
diff --git a/sys/src/9/alphapc/main.c b/sys/src/9/alphapc/main.c
index c9f0dcc6e..600e0a5c8 100644
--- a/sys/src/9/alphapc/main.c
+++ b/sys/src/9/alphapc/main.c
@@ -99,7 +99,6 @@ main(void)
printinit();
/* it's now safe to print */
/* dumpopts(); /* DEBUG */
- kbdinit();
i8250console();
quotefmtinstall();
print("\nPlan 9\n");
diff --git a/sys/src/9/alphapc/mkfile b/sys/src/9/alphapc/mkfile
index 7accffead..fba07d48d 100644
--- a/sys/src/9/alphapc/mkfile
+++ b/sys/src/9/alphapc/mkfile
@@ -16,7 +16,6 @@ PORT=\
chan.$O\
dev.$O\
fault.$O\
- latin1.$O\
log.$O\
edf.$O\
mul64fract.$O\
@@ -46,7 +45,6 @@ OBJ=\
fdc37c93x.$O\
fptrap.$O\
i8259.$O\
- kbd.$O\
main.$O\
mmu.$O\
random.$O\
@@ -78,6 +76,9 @@ $p$CONF: $CONF.c $OBJ $LIB
install:V: $p$CONF
cp $p$CONF /$objtype/$p$CONF
+rootfs.bz2:
+ rc ../port/mkbootfs
+
<../boot/bootmkfile
<../port/portmkfile
<|../port/mkbootrules $CONF
@@ -95,7 +96,6 @@ clock.$O: /$objtype/include/ureg.h axp.h
devarch.$O: axp.h
faultalpha.$O: /$objtype/include/ureg.h
fptrap.$O: /$objtype/include/ureg.h
-kbd.$O: /$objtype/include/ureg.h
l.$O: osf1pal.h
main.$O: /$objtype/include/ureg.h errstr.h init.h
mmu.$O: /sys/src/boot/alphapc/conf.h
diff --git a/sys/src/9/alphapc/screen.h b/sys/src/9/alphapc/screen.h
index 190b49152..b73284a64 100644
--- a/sys/src/9/alphapc/screen.h
+++ b/sys/src/9/alphapc/screen.h
@@ -7,6 +7,7 @@ struct Cursorinfo {
/* devmouse.c */
extern void mousetrack(int, int, int, int);
+extern void absmousetrack(int, int, int, int);
extern Point mousexy(void);
extern void mouseaccelerate(int);
diff --git a/sys/src/9/bitsy/devµc.c b/sys/src/9/bitsy/devµc.c
index f3b627018..c7f411678 100644
--- a/sys/src/9/bitsy/devµc.c
+++ b/sys/src/9/bitsy/devµc.c
@@ -12,7 +12,6 @@ enum{
Qbattery,
Qbuttons,
Qcruft,
- Qkbdin,
Qled,
Qversion,
Qpower,
@@ -28,34 +27,12 @@ enum{
SOF= 0x2, /* start of frame */
};
-/* from /sys/include/keyboard.h */
-enum {
- KF= 0xF000, /* Rune: beginning of private Unicode space */
- /* KF|1, KF|2, ..., KF|0xC is F1, F2, ..., F12 */
- Khome= KF|0x0D,
- Kup= KF|0x0E,
- Kpgup= KF|0x0F,
- Kprint= KF|0x10,
- Kleft= KF|0x11,
- Kright= KF|0x12,
- Kdown= 0x80,
- Kview= 0x80,
- Kpgdown= KF|0x13,
- Kins= KF|0x14,
- Kend= '\r', /* [sic] */
-
- Kalt= KF|0x15,
- Kshift= KF|0x16,
- Kctl= KF|0x17,
-};
-
Dirtab µcdir[]={
".", { Qdir, 0, QTDIR }, 0, DMDIR|0755,
"backlight", { Qbacklight, 0 }, 0, 0664,
"battery", { Qbattery, 0 }, 0, 0664,
"buttons", { Qbuttons, 0 }, 0, 0664,
"cruft", { Qcruft, 0 }, 0, 0664,
- "kbdin", { Qkbdin, 0 }, 0, 0664,
"led", { Qled, 0 }, 0, 0664,
"version", { Qversion, 0 }, 0, 0664,
"power", { Qpower, 0 }, 0, 0600,
@@ -82,13 +59,6 @@ static struct µcontroller
char version[16+2];
} ctlr;
-/* button map */
-Rune bmap[2][4] =
-{
- {Kup, Kright, Kleft, Kdown}, /* portrait mode */
- {Kright, Kdown, Kup, Kleft}, /* landscape mode */
-};
-
extern int landscape;
int
@@ -148,12 +118,8 @@ int
b = p[0] & 0x7f;
up = p[0] & 0x80;
- if(b > 5) {
- /* rocker panel acts like arrow keys */
- if(b < 10 && !up)
- kbdputc(kbdq, bmap[landscape][b-6]);
- } else {
- /* the rest like mouse buttons */
+ if(b <= 5){
+ /* like mouse buttons */
if(--b == 0)
b = 5;
penbutton(up, 1<<b);
@@ -359,17 +325,6 @@ static long
extern ulong resumeaddr[];
extern void power_resume(void);
- if(c->qid.path == Qkbdin){
- if(n >= sizeof(str))
- n = sizeof(str)-1;
- memmove(str, a, n);
- str[n] = 0;
- for(i = 0; i < n; i += j){
- j = chartorune(&r, &str[i]);
- kbdcr2nl(nil, r);
- }
- return n;
- }
if(c->qid.path == Qpower){
if(!iseve())
error(Eperm);
diff --git a/sys/src/9/bitsy/mkfile b/sys/src/9/bitsy/mkfile
index 9fde07deb..00e19c138 100644
--- a/sys/src/9/bitsy/mkfile
+++ b/sys/src/9/bitsy/mkfile
@@ -17,7 +17,6 @@ PORT=\
dev.$O\
edf.$O\
fault.$O\
- latin1.$O\
mul64fract.$O\
rebootcmd.$O\
page.$O\
diff --git a/sys/src/9/kw/mkfile b/sys/src/9/kw/mkfile
index 8f5402352..945c13801 100644
--- a/sys/src/9/kw/mkfile
+++ b/sys/src/9/kw/mkfile
@@ -21,7 +21,6 @@ PORT=\
dev.$O\
edf.$O\
fault.$O\
- latin1.$O\
mul64fract.$O\
rebootcmd.$O\
page.$O\
diff --git a/sys/src/9/mtx/fns.h b/sys/src/9/mtx/fns.h
index d88d0d636..b4cc6e02b 100644
--- a/sys/src/9/mtx/fns.h
+++ b/sys/src/9/mtx/fns.h
@@ -51,7 +51,6 @@ void iofree(int);
void ioinit(void);
int iprint(char*, ...);
int isaconfig(char*, int, ISAConf*);
-void kbdinit(void);
#define kexit(a)
#define kmapinval()
void links(void);
diff --git a/sys/src/9/mtx/kbd.c b/sys/src/9/mtx/kbd.c
deleted file mode 100644
index fe96fc345..000000000
--- a/sys/src/9/mtx/kbd.c
+++ /dev/null
@@ -1,435 +0,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-#include "../port/error.h"
-
-enum {
- Data= 0x60, /* data port */
-
- Status= 0x64, /* status port */
- Inready= 0x01, /* input character ready */
- Outbusy= 0x02, /* output busy */
- Sysflag= 0x04, /* system flag */
- Cmddata= 0x08, /* cmd==0, data==1 */
- Inhibit= 0x10, /* keyboard/mouse inhibited */
- Minready= 0x20, /* mouse character ready */
- Rtimeout= 0x40, /* general timeout */
- Parity= 0x80,
-
- Cmd= 0x64, /* command port (write only) */
-
- Spec= 0x80,
-
- PF= Spec|0x20, /* num pad function key */
- View= Spec|0x00, /* view (shift window up) */
- KF= 0xF000, /* function key (begin Unicode private space) */
- Shift= Spec|0x60,
- Break= Spec|0x61,
- Ctrl= Spec|0x62,
- Latin= Spec|0x63,
- Caps= Spec|0x64,
- Num= Spec|0x65,
- Middle= Spec|0x66,
- No= 0x00, /* peter */
-
- Home= KF|13,
- Up= KF|14,
- Pgup= KF|15,
- Print= KF|16,
- Left= KF|17,
- Right= KF|18,
- End= '\r',
- Down= View,
- Pgdown= KF|19,
- Ins= KF|20,
- Del= 0x7F,
- Scroll= KF|21,
-};
-
-/*
- * The codes at 0x79 and 0x81 are produed by the PFU Happy Hacking keyboard.
- * A 'standard' keyboard doesn't produce anything above 0x58.
- */
-Rune kbtab[] =
-{
-[0x00] No, 0x1b, '1', '2', '3', '4', '5', '6',
-[0x08] '7', '8', '9', '0', '-', '=', '\b', '\t',
-[0x10] 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
-[0x18] 'o', 'p', '[', ']', '\n', Ctrl, 'a', 's',
-[0x20] 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
-[0x28] '\'', '`', Shift, '\\', 'z', 'x', 'c', 'v',
-[0x30] 'b', 'n', 'm', ',', '.', '/', Shift, '*',
-[0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5,
-[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7',
-[0x48] '8', '9', '-', '4', '5', '6', '+', '1',
-[0x50] '2', '3', '0', '.', No, No, No, KF|11,
-[0x58] KF|12, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, View, No, Up, No, No, No, No,
-};
-
-Rune kbtabshift[] =
-{
-[0x00] No, 0x1b, '!', '@', '#', '$', '%', '^',
-[0x08] '&', '*', '(', ')', '_', '+', '\b', '\t',
-[0x10] 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
-[0x18] 'O', 'P', '{', '}', '\n', Ctrl, 'A', 'S',
-[0x20] 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':',
-[0x28] '"', '~', Shift, '|', 'Z', 'X', 'C', 'V',
-[0x30] 'B', 'N', 'M', '<', '>', '?', Shift, '*',
-[0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5,
-[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7',
-[0x48] '8', '9', '-', '4', '5', '6', '+', '1',
-[0x50] '2', '3', '0', '.', No, No, No, KF|11,
-[0x58] KF|12, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, Up, No, Up, No, No, No, No,
-};
-
-Rune kbtabesc1[] =
-{
-[0x00] No, No, No, No, No, No, No, No,
-[0x08] No, No, No, No, No, No, No, No,
-[0x10] No, No, No, No, No, No, No, No,
-[0x18] No, No, No, No, '\n', Ctrl, No, No,
-[0x20] No, No, No, No, No, No, No, No,
-[0x28] No, No, Shift, No, No, No, No, No,
-[0x30] No, No, No, No, No, '/', No, Print,
-[0x38] Latin, No, No, No, No, No, No, No,
-[0x40] No, No, No, No, No, No, Break, Home,
-[0x48] Up, Pgup, No, Left, No, Right, No, End,
-[0x50] Down, Pgdown, Ins, Del, No, No, No, No,
-[0x58] No, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, Up, No, No, No, No, No, No,
-};
-
-enum
-{
- /* controller command byte */
- Cscs1= (1<<6), /* scan code set 1 */
- Cauxdis= (1<<5), /* mouse disable */
- Ckbddis= (1<<4), /* kbd disable */
- Csf= (1<<2), /* system flag */
- Cauxint= (1<<1), /* mouse interrupt enable */
- Ckbdint= (1<<0), /* kbd interrupt enable */
-};
-
-static Lock i8042lock;
-static uchar ccc;
-static void (*auxputc)(int, int);
-
-/*
- * wait for output no longer busy
- */
-static int
-outready(void)
-{
- int tries;
-
- for(tries = 0; (inb(Status) & Outbusy); tries++){
- if(tries > 500)
- return -1;
- delay(2);
- }
- return 0;
-}
-
-/*
- * wait for input
- */
-static int
-inready(void)
-{
- int tries;
-
- for(tries = 0; !(inb(Status) & Inready); tries++){
- if(tries > 500)
- return -1;
- delay(2);
- }
- return 0;
-}
-
-/*
- * ask 8042 to reset the machine
- */
-void
-i8042reset(void)
-{
- ushort *s = KADDR(0x472);
- int i, x;
-
- *s = 0x1234; /* BIOS warm-boot flag */
-
- /*
- * newer reset the machine command
- */
- outready();
- outb(Cmd, 0xFE);
- outready();
-
- /*
- * Pulse it by hand (old somewhat reliable)
- */
- x = 0xDF;
- for(i = 0; i < 5; i++){
- x ^= 1;
- outready();
- outb(Cmd, 0xD1);
- outready();
- outb(Data, x); /* toggle reset */
- delay(100);
- }
-}
-
-int
-i8042auxcmd(int cmd)
-{
- unsigned int c;
- int tries;
-
- c = 0;
- tries = 0;
-
- ilock(&i8042lock);
- do{
- if(tries++ > 2)
- break;
- if(outready() < 0)
- break;
- outb(Cmd, 0xD4);
- if(outready() < 0)
- break;
- outb(Data, cmd);
- if(outready() < 0)
- break;
- if(inready() < 0)
- break;
- c = inb(Data);
- } while(c == 0xFE || c == 0);
- iunlock(&i8042lock);
-
- if(c != 0xFA){
- print("i8042: %2.2ux returned to the %2.2ux command\n", c, cmd);
- return -1;
- }
- return 0;
-}
-
-/*
- * keyboard interrupt
- */
-static void
-i8042intr(Ureg*, void*)
-{
- int s, c, i;
- static int esc1, esc2;
- static int alt, caps, ctl, num, shift;
- static int collecting, nk;
- static Rune kc[5];
- int keyup;
-
- /*
- * get status
- */
- lock(&i8042lock);
- s = inb(Status);
- if(!(s&Inready)){
- unlock(&i8042lock);
- return;
- }
-
- /*
- * get the character
- */
- c = inb(Data);
- unlock(&i8042lock);
-
- /*
- * if it's the aux port...
- */
- if(s & Minready){
- if(auxputc != nil)
- auxputc(c, shift);
- return;
- }
-
- /*
- * e0's is the first of a 2 character sequence
- */
- if(c == 0xe0){
- esc1 = 1;
- return;
- } else if(c == 0xe1){
- esc2 = 2;
- return;
- }
-
- keyup = c&0x80;
- c &= 0x7f;
- if(c > sizeof kbtab){
- c |= keyup;
- if(c != 0xFF) /* these come fairly often: CAPSLOCK U Y */
- print("unknown key %ux\n", c);
- return;
- }
-
- if(esc1){
- c = kbtabesc1[c];
- esc1 = 0;
- } else if(esc2){
- esc2--;
- return;
- } else if(shift)
- c = kbtabshift[c];
- else
- c = kbtab[c];
-
- if(caps && c<='z' && c>='a')
- c += 'A' - 'a';
-
- /*
- * keyup only important for shifts
- */
- if(keyup){
- switch(c){
- case Latin:
- alt = 0;
- break;
- case Shift:
- shift = 0;
- break;
- case Ctrl:
- ctl = 0;
- break;
- }
- return;
- }
-
- /*
- * normal character
- */
- if(!(c & (Spec|KF))){
- if(ctl){
- if(alt && c == Del)
- exit(0);
- c &= 0x1f;
- }
- if(!collecting){
- kbdputc(kbdq, c);
- return;
- }
- kc[nk++] = c;
- c = latin1(kc, nk);
- if(c < -1) /* need more keystrokes */
- return;
- if(c != -1) /* valid sequence */
- kbdputc(kbdq, c);
- else /* dump characters */
- for(i=0; i<nk; i++)
- kbdputc(kbdq, kc[i]);
- nk = 0;
- collecting = 0;
- return;
- } else {
- switch(c){
- case Caps:
- caps ^= 1;
- return;
- case Num:
- num ^= 1;
- return;
- case Shift:
- shift = 1;
- return;
- case Latin:
- alt = 1;
- collecting = 1;
- nk = 0;
- return;
- case Ctrl:
- ctl = 1;
- return;
- }
- }
- kbdputc(kbdq, c);
-}
-
-void
-i8042auxenable(void (*putc)(int, int))
-{
- char *err = "i8042: aux init failed\n";
-
- /* enable kbd/aux xfers and interrupts */
- ccc &= ~Cauxdis;
- ccc |= Cauxint;
-
- ilock(&i8042lock);
- if(outready() < 0)
- print(err);
- outb(Cmd, 0x60); /* write control register */
- if(outready() < 0)
- print(err);
- outb(Data, ccc);
- if(outready() < 0)
- print(err);
- outb(Cmd, 0xA8); /* auxilliary device enable */
- if(outready() < 0){
- iunlock(&i8042lock);
- return;
- }
- auxputc = putc;
- intrenable(IrqAUX, i8042intr, 0, BUSUNKNOWN, "kbdaux");
- iunlock(&i8042lock);
-}
-
-void
-kbdinit(void)
-{
- int c;
-
- kbdq = qopen(4*1024, 0, 0, 0);
- if(kbdq == nil)
- panic("kbdinit");
- qnoblock(kbdq, 1);
-
- ioalloc(Data, 1, 0, "kbd");
- ioalloc(Cmd, 1, 0, "kbd");
-
- intrenable(IrqKBD, i8042intr, 0, BUSUNKNOWN, "kbd");
-
- /* wait for a quiescent controller */
- while((c = inb(Status)) & (Outbusy | Inready))
- if(c & Inready)
- inb(Data);
-
- /* get current controller command byte */
- outb(Cmd, 0x20);
- if(inready() < 0){
- print("kbdinit: can't read ccc\n");
- ccc = 0;
- } else
- ccc = inb(Data);
-
- /* enable kbd xfers and interrupts */
- /* disable mouse */
- ccc &= ~Ckbddis;
- ccc |= Csf | Ckbdint | Cscs1;
- if(outready() < 0)
- print("kbd init failed\n");
- outb(Cmd, 0x60);
- if(outready() < 0)
- print("kbd init failed\n");
- outb(Data, ccc);
- outready();
-}
diff --git a/sys/src/9/mtx/main.c b/sys/src/9/mtx/main.c
index eebad4444..cde420688 100644
--- a/sys/src/9/mtx/main.c
+++ b/sys/src/9/mtx/main.c
@@ -29,7 +29,6 @@ main(void)
mmuinit();
hwintrinit();
clockinit();
- kbdinit();
procinit0();
initseg();
timersinit();
diff --git a/sys/src/9/mtx/mkfile b/sys/src/9/mtx/mkfile
index af7f50f02..be2e8917d 100644
--- a/sys/src/9/mtx/mkfile
+++ b/sys/src/9/mtx/mkfile
@@ -17,7 +17,6 @@ PORT=\
dev.$O\
edf.$O\
fault.$O\
- latin1.$O\
log.$O\
mul64fract.$O\
rebootcmd.$O\
@@ -43,7 +42,6 @@ OBJ=\
inb.$O\
clock.$O\
i8259.$O\
- kbd.$O\
main.$O\
mmu.$O\
random.$O\
diff --git a/sys/src/9/omap/archomap.c b/sys/src/9/omap/archomap.c
index 0f20d50a6..9a568ef67 100644
--- a/sys/src/9/omap/archomap.c
+++ b/sys/src/9/omap/archomap.c
@@ -1282,11 +1282,6 @@ archreboot(void)
}
void
-kbdinit(void)
-{
-}
-
-void
lastresortprint(char *buf, long bp)
{
iprint("%.*s", (int)bp, buf); /* nothing else seems to work */
diff --git a/sys/src/9/omap/beagle b/sys/src/9/omap/beagle
index 887395443..f7d40b50f 100644
--- a/sys/src/9/omap/beagle
+++ b/sys/src/9/omap/beagle
@@ -25,8 +25,6 @@ dev
draw screen
dss
- kbmap
- kbin
mouse
uart
@@ -73,10 +71,11 @@ port
boot cpu
tcp
+ local
bootdir
boot$CONF.out boot
- /arm/bin/ip/ipconfig ipconfig
- /arm/bin/auth/factotum factotum
- /arm/bin/usb/usbd
- nvram
+ /arm/bin/bzfs
+ /arm/bin/mntgen
+ /arm/bin/auth/factotum
+ rootfs.bz2
diff --git a/sys/src/9/omap/devcons.c b/sys/src/9/omap/devcons.c
deleted file mode 100644
index f94f12d53..000000000
--- a/sys/src/9/omap/devcons.c
+++ /dev/null
@@ -1,1354 +0,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "../port/error.h"
-#include "pool.h"
-#include <authsrv.h>
-
-void (*consdebug)(void) = nil;
-void (*screenputs)(char*, int) = nil;
-
-Queue* kbdq; /* unprocessed console input */
-Queue* lineq; /* processed console input */
-Queue* serialoq; /* serial console output */
-Queue* kprintoq; /* console output, for /dev/kprint */
-ulong kprintinuse; /* test and set whether /dev/kprint is open */
-int iprintscreenputs = 1;
-
-int panicking;
-
-static struct
-{
- QLock;
-
- int raw; /* true if we shouldn't process input */
- Ref ctl; /* number of opens to the control file */
- int x; /* index into line */
- char line[1024]; /* current input line */
-
- int count;
- int ctlpoff;
-
- /* a place to save up characters at interrupt time before dumping them in the queue */
- Lock lockputc;
- char istage[1024];
- char *iw;
- char *ir;
- char *ie;
-} kbd = {
- .iw = kbd.istage,
- .ir = kbd.istage,
- .ie = kbd.istage + sizeof(kbd.istage),
-};
-
-char *sysname;
-vlong fasthz;
-
-static void seedrand(void);
-static int readtime(ulong, char*, int);
-static int readbintime(char*, int);
-static int writetime(char*, int);
-static int writebintime(char*, int);
-
-enum
-{
- CMhalt,
- CMreboot,
- CMpanic,
-};
-
-Cmdtab rebootmsg[] =
-{
- CMhalt, "halt", 1,
- CMreboot, "reboot", 0,
- CMpanic, "panic", 0,
-};
-
-void
-printinit(void)
-{
- lineq = qopen(2*1024, 0, nil, nil);
- if(lineq == nil)
- panic("printinit");
- qnoblock(lineq, 1);
-}
-
-int
-consactive(void)
-{
- if(serialoq)
- return qlen(serialoq) > 0;
- return 0;
-}
-
-void
-prflush(void)
-{
- ulong now;
-
- now = m->ticks;
- while(consactive())
- if(m->ticks - now >= HZ)
- break;
-}
-
-/*
- * Log console output so it can be retrieved via /dev/kmesg.
- * This is good for catching boot-time messages after the fact.
- */
-struct {
- Lock lk;
-// char buf[16384]; /* normal */
- char buf[256*1024]; /* for acpi debugging */
- uint n;
-} kmesg;
-
-static void
-kmesgputs(char *str, int n)
-{
- uint nn, d;
-
- ilock(&kmesg.lk);
- /* take the tail of huge writes */
- if(n > sizeof kmesg.buf){
- d = n - sizeof kmesg.buf;
- str += d;
- n -= d;
- }
-
- /* slide the buffer down to make room */
- nn = kmesg.n;
- if(nn + n >= sizeof kmesg.buf){
- d = nn + n - sizeof kmesg.buf;
- if(d)
- memmove(kmesg.buf, kmesg.buf+d, sizeof kmesg.buf-d);
- nn -= d;
- }
-
- /* copy the data in */
- memmove(kmesg.buf+nn, str, n);
- nn += n;
- kmesg.n = nn;
- iunlock(&kmesg.lk);
-}
-
-/*
- * Print a string on the console. Convert \n to \r\n for serial
- * line consoles. Locking of the queues is left up to the screen
- * or uart code. Multi-line messages to serial consoles may get
- * interspersed with other messages.
- */
-static void
-putstrn0(char *str, int n, int usewrite)
-{
- int m;
- char *t;
-
- if(!islo())
- usewrite = 0;
-
- /*
- * how many different output devices do we need?
- */
- kmesgputs(str, n);
-
- /*
- * if someone is reading /dev/kprint,
- * put the message there.
- * if not and there's an attached bit mapped display,
- * put the message there.
- *
- * if there's a serial line being used as a console,
- * put the message there.
- */
- if(kprintoq != nil && !qisclosed(kprintoq)){
- if(usewrite)
- qwrite(kprintoq, str, n);
- else
- qiwrite(kprintoq, str, n);
- }else if(screenputs != nil)
- screenputs(str, n);
-
- if(serialoq == nil){
- uartputs(str, n);
- return;
- }
-
- while(n > 0) {
- t = memchr(str, '\n', n);
- if(t && !kbd.raw) {
- m = t-str;
- if(usewrite){
- qwrite(serialoq, str, m);
- qwrite(serialoq, "\r\n", 2);
- } else {
- qiwrite(serialoq, str, m);
- qiwrite(serialoq, "\r\n", 2);
- }
- n -= m+1;
- str = t+1;
- } else {
- if(usewrite)
- qwrite(serialoq, str, n);
- else
- qiwrite(serialoq, str, n);
- break;
- }
- }
-}
-
-void
-putstrn(char *str, int n)
-{
- putstrn0(str, n, 0);
-}
-
-int noprint;
-
-int
-print(char *fmt, ...)
-{
- int n;
- va_list arg;
- char buf[PRINTSIZE];
-
- if(noprint)
- return -1;
-
- va_start(arg, fmt);
- n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf;
- va_end(arg);
-
- if(!normalprint) {
- if(0) iprint("\nprint called too early from %#lux\n",
- getcallerpc(&fmt));
- iprint("%.*s", n, buf);
- } else
- putstrn(buf, n);
-
- return n;
-}
-
-/*
- * Want to interlock iprints to avoid interlaced output on
- * multiprocessor, but don't want to deadlock if one processor
- * dies during print and another has something important to say.
- * Make a good faith effort.
- */
-static Lock iprintlock;
-static int
-iprintcanlock(Lock *l)
-{
- int i;
-
- for(i=0; i<1000; i++){
- if(canlock(l))
- return 1;
- if(l->m == MACHP(m->machno))
- return 0;
- microdelay(100);
- }
- return 0;
-}
-
-int
-iprint(char *fmt, ...)
-{
- int n, s, locked;
- va_list arg;
- char buf[PRINTSIZE];
-
- s = splhi();
- va_start(arg, fmt);
- n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf;
- va_end(arg);
- locked = iprintcanlock(&iprintlock);
- if(screenputs != nil && iprintscreenputs)
- screenputs(buf, n);
- if(consuart == nil || consuart->phys == nil ||
- consuart->phys->putc == nil)
- _uartputs(buf, n);
- else
- uartputs(buf, n);
- if(locked)
- unlock(&iprintlock);
- splx(s);
-
- return n;
-}
-
-void
-panic(char *fmt, ...)
-{
- int n, s;
- va_list arg;
- char buf[PRINTSIZE];
-
- kprintoq = nil; /* don't try to write to /dev/kprint */
-
- if(panicking)
- for(;;);
- panicking = 1;
-
- delay(20);
- s = splhi();
- strcpy(buf, "panic: ");
- va_start(arg, fmt);
- n = vseprint(buf+strlen(buf), buf+sizeof(buf), fmt, arg) - buf;
- va_end(arg);
- iprint("%s\n", buf);
- if(consdebug)
- (*consdebug)();
- splx(s);
- prflush();
- buf[n] = '\n';
-// putstrn(buf, n+1);
-// dumpstack();
-
- exit(1);
-}
-
-/* libmp at least contains a few calls to sysfatal; simulate with panic */
-void
-sysfatal(char *fmt, ...)
-{
- char err[256];
- va_list arg;
-
- va_start(arg, fmt);
- vseprint(err, err + sizeof err, fmt, arg);
- va_end(arg);
- panic("sysfatal: %s", err);
-}
-
-void
-_assert(char *fmt)
-{
- panic("assert failed at %#p: %s", getcallerpc(&fmt), fmt);
-}
-
-int
-pprint(char *fmt, ...)
-{
- int n;
- Chan *c;
- va_list arg;
- char buf[2*PRINTSIZE];
-
- if(up == nil || up->fgrp == nil)
- return 0;
-
- c = up->fgrp->fd[2];
- if(c==0 || (c->mode!=OWRITE && c->mode!=ORDWR))
- return 0;
- n = snprint(buf, sizeof buf, "%s %lud: ", up->text, up->pid);
- va_start(arg, fmt);
- n = vseprint(buf+n, buf+sizeof(buf), fmt, arg) - buf;
- va_end(arg);
-
- if(waserror())
- return 0;
- devtab[c->type]->write(c, buf, n, c->offset);
- poperror();
-
- lock(c);
- c->offset += n;
- unlock(c);
-
- return n;
-}
-
-static void
-echoscreen(char *buf, int n)
-{
- char *e, *p;
- char ebuf[128];
- int x;
-
- p = ebuf;
- e = ebuf + sizeof(ebuf) - 4;
- while(n-- > 0){
- if(p >= e){
- screenputs(ebuf, p - ebuf);
- p = ebuf;
- }
- x = *buf++;
- if(x == 0x15){
- *p++ = '^';
- *p++ = 'U';
- *p++ = '\n';
- } else
- *p++ = x;
- }
- if(p != ebuf)
- screenputs(ebuf, p - ebuf);
-}
-
-static void
-echoserialoq(char *buf, int n)
-{
- int x;
- char *e, *p;
- char ebuf[128];
-
- p = ebuf;
- e = ebuf + sizeof(ebuf) - 4;
- while(n-- > 0){
- if(p >= e){
- qiwrite(serialoq, ebuf, p - ebuf);
- p = ebuf;
- }
- x = *buf++;
- if(x == '\n'){
- *p++ = '\r';
- *p++ = '\n';
- } else if(x == 0x15){
- *p++ = '^';
- *p++ = 'U';
- *p++ = '\n';
- } else
- *p++ = x;
- }
- if(p != ebuf)
- qiwrite(serialoq, ebuf, p - ebuf);
-}
-
-static void
-echo(char *buf, int n)
-{
- static int ctrlt, pid;
- int x;
- char *e, *p;
-
- if(n == 0)
- return;
-
- e = buf+n;
- for(p = buf; p < e; p++){
- switch(*p){
- case 0x10: /* ^P */
- if(cpuserver && !kbd.ctlpoff){
- active.exiting = 1;
- return;
- }
- break;
- case 0x14: /* ^T */
- ctrlt++;
- if(ctrlt > 2)
- ctrlt = 2;
- continue;
- }
-
- if(ctrlt != 2)
- continue;
-
- /* ^T escapes */
- ctrlt = 0;
- switch(*p){
- case 'S':
- x = splhi();
- dumpstack();
- procdump();
- splx(x);
- return;
- case 's':
- dumpstack();
- return;
- case 'x':
- xsummary();
- ixsummary();
- mallocsummary();
- // memorysummary();
- pagersummary();
- return;
- case 'd':
- if(consdebug == nil)
- consdebug = rdb;
- else
- consdebug = nil;
- print("consdebug now %#p\n", consdebug);
- return;
- case 'D':
- if(consdebug == nil)
- consdebug = rdb;
- consdebug();
- return;
- case 'p':
- x = spllo();
- procdump();
- splx(x);
- return;
- case 'q':
- scheddump();
- return;
- case 'k':
- killbig("^t ^t k");
- return;
- case 'r':
- exit(0);
- return;
- }
- }
-
- qproduce(kbdq, buf, n);
- if(kbd.raw)
- return;
- kmesgputs(buf, n);
- if(screenputs != nil)
- echoscreen(buf, n);
- if(serialoq)
- echoserialoq(buf, n);
-}
-
-/*
- * Called by a uart interrupt for console input.
- *
- * turn '\r' into '\n' before putting it into the queue.
- */
-int
-kbdcr2nl(Queue*, int ch)
-{
- char *next;
-
- ilock(&kbd.lockputc); /* just a mutex */
- if(ch == '\r' && !kbd.raw)
- ch = '\n';
- next = kbd.iw+1;
- if(next >= kbd.ie)
- next = kbd.istage;
- if(next != kbd.ir){
- *kbd.iw = ch;
- kbd.iw = next;
- }
- iunlock(&kbd.lockputc);
- return 0;
-}
-
-/*
- * Put character, possibly a rune, into read queue at interrupt time.
- * Called at interrupt time to process a character.
- */
-int
-kbdputc(Queue*, int ch)
-{
- int i, n;
- char buf[3];
- Rune r;
- char *next;
-
- if(kbd.ir == nil)
- return 0; /* in case we're not inited yet */
-
- ilock(&kbd.lockputc); /* just a mutex */
- r = ch;
- n = runetochar(buf, &r);
- for(i = 0; i < n; i++){
- next = kbd.iw+1;
- if(next >= kbd.ie)
- next = kbd.istage;
- if(next == kbd.ir)
- break;
- *kbd.iw = buf[i];
- kbd.iw = next;
- }
- iunlock(&kbd.lockputc);
- return 0;
-}
-
-/*
- * we save up input characters till clock time to reduce
- * per character interrupt overhead.
- */
-static void
-kbdputcclock(void)
-{
- char *iw;
-
- /* this amortizes cost of qproduce */
- if(kbd.iw != kbd.ir){
- iw = kbd.iw;
- if(iw < kbd.ir){
- echo(kbd.ir, kbd.ie-kbd.ir);
- kbd.ir = kbd.istage;
- }
- if(kbd.ir != iw){
- echo(kbd.ir, iw-kbd.ir);
- kbd.ir = iw;
- }
- }
-}
-
-enum{
- Qdir,
- Qbintime,
- Qcons,
- Qconsctl,
- Qcputime,
- Qdrivers,
- Qkmesg,
- Qkprint,
- Qhostdomain,
- Qhostowner,
- Qnull,
- Qosversion,
- Qpgrpid,
- Qpid,
- Qppid,
- Qrandom,
- Qreboot,
- Qswap,
- Qsysname,
- Qsysstat,
- Qtime,
- Quser,
- Qzero,
-};
-
-enum
-{
- VLNUMSIZE= 22,
-};
-
-static Dirtab consdir[]={
- ".", {Qdir, 0, QTDIR}, 0, DMDIR|0555,
- "bintime", {Qbintime}, 24, 0664,
- "cons", {Qcons}, 0, 0660,
- "consctl", {Qconsctl}, 0, 0220,
- "cputime", {Qcputime}, 6*NUMSIZE, 0444,
- "drivers", {Qdrivers}, 0, 0444,
- "hostdomain", {Qhostdomain}, DOMLEN, 0664,
- "hostowner", {Qhostowner}, 0, 0664,
- "kmesg", {Qkmesg}, 0, 0440,
- "kprint", {Qkprint, 0, QTEXCL}, 0, DMEXCL|0440,
- "null", {Qnull}, 0, 0666,
- "osversion", {Qosversion}, 0, 0444,
- "pgrpid", {Qpgrpid}, NUMSIZE, 0444,
- "pid", {Qpid}, NUMSIZE, 0444,
- "ppid", {Qppid}, NUMSIZE, 0444,
- "random", {Qrandom}, 0, 0444,
- "reboot", {Qreboot}, 0, 0664,
- "swap", {Qswap}, 0, 0664,
- "sysname", {Qsysname}, 0, 0664,
- "sysstat", {Qsysstat}, 0, 0666,
- "time", {Qtime}, NUMSIZE+3*VLNUMSIZE, 0664,
- "user", {Quser}, 0, 0666,
- "zero", {Qzero}, 0, 0444,
-};
-
-int
-readnum(ulong off, char *buf, ulong n, ulong val, int size)
-{
- char tmp[64];
-
- snprint(tmp, sizeof(tmp), "%*lud", size-1, val);
- tmp[size-1] = ' ';
- if(off >= size)
- return 0;
- if(off+n > size)
- n = size-off;
- memmove(buf, tmp+off, n);
- return n;
-}
-
-int
-readstr(ulong off, char *buf, ulong n, char *str)
-{
- int size;
-
- size = strlen(str);
- if(off >= size)
- return 0;
- if(off+n > size)
- n = size-off;
- memmove(buf, str+off, n);
- return n;
-}
-
-static void
-consinit(void)
-{
- todinit();
- randominit();
- /*
- * at 115200 baud, the 1024 char buffer takes 56 ms to process,
- * processing it every 22 ms should be fine
- */
- addclock0link(kbdputcclock, 22);
-}
-
-static Chan*
-consattach(char *spec)
-{
- return devattach('c', spec);
-}
-
-static Walkqid*
-conswalk(Chan *c, Chan *nc, char **name, int nname)
-{
- return devwalk(c, nc, name,nname, consdir, nelem(consdir), devgen);
-}
-
-static int
-consstat(Chan *c, uchar *dp, int n)
-{
- return devstat(c, dp, n, consdir, nelem(consdir), devgen);
-}
-
-static Chan*
-consopen(Chan *c, int omode)
-{
- c->aux = nil;
- c = devopen(c, omode, consdir, nelem(consdir), devgen);
- switch((ulong)c->qid.path){
- case Qconsctl:
- incref(&kbd.ctl);
- break;
-
- case Qkprint:
- if(tas(&kprintinuse) != 0){
- c->flag &= ~COPEN;
- error(Einuse);
- }
- if(kprintoq == nil){
- kprintoq = qopen(8*1024, Qcoalesce, 0, 0);
- if(kprintoq == nil){
- c->flag &= ~COPEN;
- error(Enomem);
- }
- qnoblock(kprintoq, 1);
- }else
- qreopen(kprintoq);
- c->iounit = qiomaxatomic;
- break;
- }
- return c;
-}
-
-static void
-consclose(Chan *c)
-{
- switch((ulong)c->qid.path){
- /* last close of control file turns off raw */
- case Qconsctl:
- if(c->flag&COPEN){
- if(decref(&kbd.ctl) == 0)
- kbd.raw = 0;
- }
- break;
-
- /* close of kprint allows other opens */
- case Qkprint:
- if(c->flag & COPEN){
- kprintinuse = 0;
- qhangup(kprintoq, nil);
- }
- break;
- }
-}
-
-static long
-consread(Chan *c, void *buf, long n, vlong off)
-{
- ulong l;
- Mach *mp;
- char *b, *bp, ch;
- char tmp[256]; /* must be >= 18*NUMSIZE (Qswap) */
- int i, k, id, send;
- vlong offset = off;
-
- if(n <= 0)
- return n;
-
- switch((ulong)c->qid.path){
- case Qdir:
- return devdirread(c, buf, n, consdir, nelem(consdir), devgen);
-
- case Qcons:
- qlock(&kbd);
- if(waserror()) {
- qunlock(&kbd);
- nexterror();
- }
- while(!qcanread(lineq)){
- if(qread(kbdq, &ch, 1) == 0)
- continue;
- send = 0;
- if(ch == 0){
- /* flush output on rawoff -> rawon */
- if(kbd.x > 0)
- send = !qcanread(kbdq);
- }else if(kbd.raw){
- kbd.line[kbd.x++] = ch;
- send = !qcanread(kbdq);
- }else{
- switch(ch){
- case '\b':
- if(kbd.x > 0)
- kbd.x--;
- break;
- case 0x15: /* ^U */
- kbd.x = 0;
- break;
- case '\n':
- case 0x04: /* ^D */
- send = 1;
- default:
- if(ch != 0x04)
- kbd.line[kbd.x++] = ch;
- break;
- }
- }
- if(send || kbd.x == sizeof kbd.line){
- qwrite(lineq, kbd.line, kbd.x);
- kbd.x = 0;
- }
- }
- n = qread(lineq, buf, n);
- qunlock(&kbd);
- poperror();
- return n;
-
- case Qcputime:
- k = offset;
- if(k >= 6*NUMSIZE)
- return 0;
- if(k+n > 6*NUMSIZE)
- n = 6*NUMSIZE - k;
- /* easiest to format in a separate buffer and copy out */
- for(i=0; i<6 && NUMSIZE*i<k+n; i++){
- l = up->time[i];
- if(i == TReal)
- l = MACHP(0)->ticks - l;
- l = TK2MS(l);
- readnum(0, tmp+NUMSIZE*i, NUMSIZE, l, NUMSIZE);
- }
- memmove(buf, tmp+k, n);
- return n;
-
- case Qkmesg:
- /*
- * This is unlocked to avoid tying up a process
- * that's writing to the buffer. kmesg.n never
- * gets smaller, so worst case the reader will
- * see a slurred buffer.
- */
- if(off >= kmesg.n)
- n = 0;
- else{
- if(off+n > kmesg.n)
- n = kmesg.n - off;
- memmove(buf, kmesg.buf+off, n);
- }
- return n;
-
- case Qkprint:
- return qread(kprintoq, buf, n);
-
- case Qpgrpid:
- return readnum((ulong)offset, buf, n, up->pgrp->pgrpid, NUMSIZE);
-
- case Qpid:
- return readnum((ulong)offset, buf, n, up->pid, NUMSIZE);
-
- case Qppid:
- return readnum((ulong)offset, buf, n, up->parentpid, NUMSIZE);
-
- case Qtime:
- return readtime((ulong)offset, buf, n);
-
- case Qbintime:
- return readbintime(buf, n);
-
- case Qhostowner:
- return readstr((ulong)offset, buf, n, eve);
-
- case Qhostdomain:
- return readstr((ulong)offset, buf, n, hostdomain);
-
- case Quser:
- return readstr((ulong)offset, buf, n, up->user);
-
- case Qnull:
- return 0;
-
- case Qsysstat:
- b = smalloc(conf.nmach*(NUMSIZE*11+1) + 1); /* +1 for NUL */
- bp = b;
- for(id = 0; id < 32; id++) {
- if(active.machs & (1<<id)) {
- mp = MACHP(id);
- readnum(0, bp, NUMSIZE, id, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE, mp->cs, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE, mp->intr, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE, mp->syscall, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE, mp->pfault, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE, mp->tlbfault, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE, mp->tlbpurge, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE, mp->load, NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE,
- (mp->perf.avg_inidle*100)/mp->perf.period,
- NUMSIZE);
- bp += NUMSIZE;
- readnum(0, bp, NUMSIZE,
- (mp->perf.avg_inintr*100)/mp->perf.period,
- NUMSIZE);
- bp += NUMSIZE;
- *bp++ = '\n';
- }
- }
- if(waserror()){
- free(b);
- nexterror();
- }
- n = readstr((ulong)offset, buf, n, b);
- free(b);
- poperror();
- return n;
-
- case Qswap:
- snprint(tmp, sizeof tmp,
- "%lud memory\n"
- "%d pagesize\n"
- "%lud kernel\n"
- "%lud/%lud user\n"
- "%lud/%lud swap\n"
- "%lud/%lud kernel malloc\n"
- "%lud/%lud kernel draw\n",
- conf.npage*BY2PG,
- BY2PG,
- conf.npage-conf.upages,
- palloc.user-palloc.freecount, palloc.user,
- conf.nswap-swapalloc.free, conf.nswap,
- mainmem->cursize, mainmem->maxsize,
- imagmem->cursize, imagmem->maxsize);
-
- return readstr((ulong)offset, buf, n, tmp);
-
- case Qsysname:
- if(sysname == nil)
- return 0;
- return readstr((ulong)offset, buf, n, sysname);
-
- case Qrandom:
- return randomread(buf, n);
-
- case Qdrivers:
- b = malloc(READSTR);
- if(b == nil)
- error(Enomem);
- k = 0;
- for(i = 0; devtab[i] != nil; i++)
- k += snprint(b+k, READSTR-k, "#%C %s\n",
- devtab[i]->dc, devtab[i]->name);
- if(waserror()){
- free(b);
- nexterror();
- }
- n = readstr((ulong)offset, buf, n, b);
- free(b);
- poperror();
- return n;
-
- case Qzero:
- memset(buf, 0, n);
- return n;
-
- case Qosversion:
- snprint(tmp, sizeof tmp, "2000");
- n = readstr((ulong)offset, buf, n, tmp);
- return n;
-
- default:
- print("consread %#llux\n", c->qid.path);
- error(Egreg);
- }
- return -1; /* never reached */
-}
-
-static long
-conswrite(Chan *c, void *va, long n, vlong off)
-{
- char buf[256], ch;
- long l, bp;
- char *a;
- Mach *mp;
- int id, fd;
- Chan *swc;
- ulong offset;
- Cmdbuf *cb;
- Cmdtab *ct;
-
- a = va;
- offset = off;
-
- switch((ulong)c->qid.path){
- case Qcons:
- /*
- * Can't page fault in putstrn, so copy the data locally.
- */
- l = n;
- while(l > 0){
- bp = l;
- if(bp > sizeof buf)
- bp = sizeof buf;
- memmove(buf, a, bp);
- putstrn0(buf, bp, 1);
- a += bp;
- l -= bp;
- }
- break;
-
- case Qconsctl:
- if(n >= sizeof(buf))
- n = sizeof(buf)-1;
- strncpy(buf, a, n);
- buf[n] = 0;
- for(a = buf; a;){
- if(strncmp(a, "rawon", 5) == 0){
- kbd.raw = 1;
- /* clumsy hack - wake up reader */
- ch = 0;
- qwrite(kbdq, &ch, 1);
- } else if(strncmp(a, "rawoff", 6) == 0){
- kbd.raw = 0;
- } else if(strncmp(a, "ctlpon", 6) == 0){
- kbd.ctlpoff = 0;
- } else if(strncmp(a, "ctlpoff", 7) == 0){
- kbd.ctlpoff = 1;
- }
- if(a = strchr(a, ' '))
- a++;
- }
- break;
-
- case Qtime:
- if(!iseve())
- error(Eperm);
- return writetime(a, n);
-
- case Qbintime:
- if(!iseve())
- error(Eperm);
- return writebintime(a, n);
-
- case Qhostowner:
- return hostownerwrite(a, n);
-
- case Qhostdomain:
- return hostdomainwrite(a, n);
-
- case Quser:
- return userwrite(a, n);
-
- case Qnull:
- break;
-
- case Qreboot:
- if(!iseve())
- error(Eperm);
- cb = parsecmd(a, n);
-
- if(waserror()) {
- free(cb);
- nexterror();
- }
- ct = lookupcmd(cb, rebootmsg, nelem(rebootmsg));
- switch(ct->index) {
- case CMhalt:
- reboot(nil, 0, 0);
- break;
- case CMreboot:
- rebootcmd(cb->nf-1, cb->f+1);
- break;
- case CMpanic:
- *(ulong*)0=0;
- panic("/dev/reboot");
- }
- poperror();
- free(cb);
- break;
-
- case Qsysstat:
- for(id = 0; id < 32; id++) {
- if(active.machs & (1<<id)) {
- mp = MACHP(id);
- mp->cs = 0;
- mp->intr = 0;
- mp->syscall = 0;
- mp->pfault = 0;
- mp->tlbfault = 0;
- mp->tlbpurge = 0;
- }
- }
- break;
-
- case Qswap:
- if(n >= sizeof buf)
- error(Egreg);
- memmove(buf, va, n); /* so we can NUL-terminate */
- buf[n] = 0;
- /* start a pager if not already started */
- if(strncmp(buf, "start", 5) == 0){
- kickpager();
- break;
- }
- if(!iseve())
- error(Eperm);
- if(buf[0]<'0' || '9'<buf[0])
- error(Ebadarg);
- fd = strtoul(buf, 0, 0);
- swc = fdtochan(fd, -1, 1, 1);
- setswapchan(swc);
- break;
-
- case Qsysname:
- if(offset != 0)
- error(Ebadarg);
- if(n <= 0 || n >= sizeof buf)
- error(Ebadarg);
- strncpy(buf, a, n);
- buf[n] = 0;
- if(buf[n-1] == '\n')
- buf[n-1] = 0;
- kstrdup(&sysname, buf);
- break;
-
- default:
- print("conswrite: %#llux\n", c->qid.path);
- error(Egreg);
- }
- return n;
-}
-
-Dev consdevtab = {
- 'c',
- "cons",
-
- devreset,
- consinit,
- devshutdown,
- consattach,
- conswalk,
- consstat,
- consopen,
- devcreate,
- consclose,
- consread,
- devbread,
- conswrite,
- devbwrite,
- devremove,
- devwstat,
-};
-
-static ulong randn;
-
-static void
-seedrand(void)
-{
- if(!waserror()){
- randomread((void*)&randn, sizeof(randn));
- poperror();
- }
-}
-
-int
-nrand(int n)
-{
- if(randn == 0)
- seedrand();
- randn = randn*1103515245 + 12345 + MACHP(0)->ticks;
- return (randn>>16) % n;
-}
-
-int
-rand(void)
-{
- nrand(1);
- return randn;
-}
-
-static uvlong uvorder = 0x0001020304050607ULL;
-
-static uchar*
-le2vlong(vlong *to, uchar *f)
-{
- uchar *t, *o;
- int i;
-
- t = (uchar*)to;
- o = (uchar*)&uvorder;
- for(i = 0; i < sizeof(vlong); i++)
- t[o[i]] = f[i];
- return f+sizeof(vlong);
-}
-
-static uchar*
-vlong2le(uchar *t, vlong from)
-{
- uchar *f, *o;
- int i;
-
- f = (uchar*)&from;
- o = (uchar*)&uvorder;
- for(i = 0; i < sizeof(vlong); i++)
- t[i] = f[o[i]];
- return t+sizeof(vlong);
-}
-
-static long order = 0x00010203;
-
-static uchar*
-le2long(long *to, uchar *f)
-{
- uchar *t, *o;
- int i;
-
- t = (uchar*)to;
- o = (uchar*)&order;
- for(i = 0; i < sizeof(long); i++)
- t[o[i]] = f[i];
- return f+sizeof(long);
-}
-
-static uchar*
-long2le(uchar *t, long from)
-{
- uchar *f, *o;
- int i;
-
- f = (uchar*)&from;
- o = (uchar*)&order;
- for(i = 0; i < sizeof(long); i++)
- t[i] = f[o[i]];
- return t+sizeof(long);
-}
-
-char *Ebadtimectl = "bad time control";
-
-/*
- * like the old #c/time but with added info. Return
- *
- * secs nanosecs fastticks fasthz
- */
-static int
-readtime(ulong off, char *buf, int n)
-{
- vlong nsec, ticks;
- long sec;
- char str[7*NUMSIZE];
-
- nsec = todget(&ticks);
- if(fasthz == 0LL)
- fastticks((uvlong*)&fasthz);
- sec = nsec/1000000000ULL;
- snprint(str, sizeof(str), "%*lud %*llud %*llud %*llud ",
- NUMSIZE-1, sec,
- VLNUMSIZE-1, nsec,
- VLNUMSIZE-1, ticks,
- VLNUMSIZE-1, fasthz);
- return readstr(off, buf, n, str);
-}
-
-/*
- * set the time in seconds
- */
-static int
-writetime(char *buf, int n)
-{
- char b[13];
- long i;
- vlong now;
-
- if(n >= sizeof(b))
- error(Ebadtimectl);
- strncpy(b, buf, n);
- b[n] = 0;
- i = strtol(b, 0, 0);
- if(i <= 0)
- error(Ebadtimectl);
- now = i*1000000000LL;
- todset(now, 0, 0);
- return n;
-}
-
-/*
- * read binary time info. all numbers are little endian.
- * ticks and nsec are syncronized.
- */
-static int
-readbintime(char *buf, int n)
-{
- int i;
- vlong nsec, ticks;
- uchar *b = (uchar*)buf;
-
- i = 0;
- if(fasthz == 0LL)
- fastticks((uvlong*)&fasthz);
- nsec = todget(&ticks);
- if(n >= 3*sizeof(uvlong)){
- vlong2le(b+2*sizeof(uvlong), fasthz);
- i += sizeof(uvlong);
- }
- if(n >= 2*sizeof(uvlong)){
- vlong2le(b+sizeof(uvlong), ticks);
- i += sizeof(uvlong);
- }
- if(n >= 8){
- vlong2le(b, nsec);
- i += sizeof(vlong);
- }
- return i;
-}
-
-/*
- * set any of the following
- * - time in nsec
- * - nsec trim applied over some seconds
- * - clock frequency
- */
-static int
-writebintime(char *buf, int n)
-{
- uchar *p;
- vlong delta;
- long period;
-
- n--;
- p = (uchar*)buf + 1;
- switch(*buf){
- case 'n':
- if(n < sizeof(vlong))
- error(Ebadtimectl);
- le2vlong(&delta, p);
- todset(delta, 0, 0);
- break;
- case 'd':
- if(n < sizeof(vlong)+sizeof(long))
- error(Ebadtimectl);
- p = le2vlong(&delta, p);
- le2long(&period, p);
- todset(-1, delta, period);
- break;
- case 'f':
- if(n < sizeof(uvlong))
- error(Ebadtimectl);
- le2vlong(&fasthz, p);
- if(fasthz <= 0)
- error(Ebadtimectl);
- todsetfreq(fasthz);
- break;
- }
- return n;
-}
diff --git a/sys/src/9/omap/devuart.c b/sys/src/9/omap/devuart.c
index af4fce768..051ad0091 100644
--- a/sys/src/9/omap/devuart.c
+++ b/sys/src/9/omap/devuart.c
@@ -225,11 +225,8 @@ uartreset(void)
p->dev = i;
if(p->console || p->special){
if(uartenable(p) != nil){
- if(p->console && up){
- kbdq = p->iq;
+ if(p->console && up)
serialoq = p->oq;
- p->putc = kbdcr2nl;
- }
p->opens++;
}
}
diff --git a/sys/src/9/omap/fns.h b/sys/src/9/omap/fns.h
index 6fe173108..3f7bbfedc 100644
--- a/sys/src/9/omap/fns.h
+++ b/sys/src/9/omap/fns.h
@@ -54,7 +54,6 @@ extern void intrsoff(void);
extern int isaconfig(char*, int, ISAConf*);
extern int isdmadone(int);
extern int ispow2(uvlong);
-extern void kbdenable(void);
extern void l2cacheuinv(void);
extern void l2cacheuwb(void);
extern void l2cacheuwbinv(void);
diff --git a/sys/src/9/omap/kbd.c b/sys/src/9/omap/kbd.c
deleted file mode 100644
index e81b352d2..000000000
--- a/sys/src/9/omap/kbd.c
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * simulated keyboard input for omap35 with no keyboard (except via uart or usb)
- *
- * gutted version of ps2 version from ../pc
- */
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "io.h"
-#include "../port/error.h"
-
-enum {
- Spec= 0xF800, /* Unicode private space */
- PF= Spec|0x20, /* num pad function key */
- View= Spec|0x00, /* view (shift window up) */
- KF= 0xF000, /* function key (begin Unicode private space) */
- Shift= Spec|0x60,
- Break= Spec|0x61,
- Ctrl= Spec|0x62,
- Latin= Spec|0x63,
- Caps= Spec|0x64,
- Num= Spec|0x65,
- Middle= Spec|0x66,
- Altgr= Spec|0x67,
- Kmouse= Spec|0x100,
- No= 0x00, /* peter */
-
- Home= KF|13,
- Up= KF|14,
- Pgup= KF|15,
- Print= KF|16,
- Left= KF|17,
- Right= KF|18,
- End= KF|24,
- Down= View,
- Pgdown= KF|19,
- Ins= KF|20,
- Del= 0x7F,
- Scroll= KF|21,
-
- Nscan= 128,
-
- Int= 0, /* kbscans indices */
- Ext,
- Nscans,
-};
-
-/*
- * The codes at 0x79 and 0x7b are produced by the PFU Happy Hacking keyboard.
- * A 'standard' keyboard doesn't produce anything above 0x58.
- */
-Rune kbtab[Nscan] =
-{
-[0x00] No, 0x1b, '1', '2', '3', '4', '5', '6',
-[0x08] '7', '8', '9', '0', '-', '=', '\b', '\t',
-[0x10] 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
-[0x18] 'o', 'p', '[', ']', '\n', Ctrl, 'a', 's',
-[0x20] 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
-[0x28] '\'', '`', Shift, '\\', 'z', 'x', 'c', 'v',
-[0x30] 'b', 'n', 'm', ',', '.', '/', Shift, '*',
-[0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5,
-[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7',
-[0x48] '8', '9', '-', '4', '5', '6', '+', '1',
-[0x50] '2', '3', '0', '.', No, No, No, KF|11,
-[0x58] KF|12, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, View, No, Up, No, No, No, No,
-};
-
-Rune kbtabshift[Nscan] =
-{
-[0x00] No, 0x1b, '!', '@', '#', '$', '%', '^',
-[0x08] '&', '*', '(', ')', '_', '+', '\b', '\t',
-[0x10] 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
-[0x18] 'O', 'P', '{', '}', '\n', Ctrl, 'A', 'S',
-[0x20] 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':',
-[0x28] '"', '~', Shift, '|', 'Z', 'X', 'C', 'V',
-[0x30] 'B', 'N', 'M', '<', '>', '?', Shift, '*',
-[0x38] Latin, ' ', Ctrl, KF|1, KF|2, KF|3, KF|4, KF|5,
-[0x40] KF|6, KF|7, KF|8, KF|9, KF|10, Num, Scroll, '7',
-[0x48] '8', '9', '-', '4', '5', '6', '+', '1',
-[0x50] '2', '3', '0', '.', No, No, No, KF|11,
-[0x58] KF|12, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, Up, No, Up, No, No, No, No,
-};
-
-Rune kbtabesc1[Nscan] =
-{
-[0x00] No, No, No, No, No, No, No, No,
-[0x08] No, No, No, No, No, No, No, No,
-[0x10] No, No, No, No, No, No, No, No,
-[0x18] No, No, No, No, '\n', Ctrl, No, No,
-[0x20] No, No, No, No, No, No, No, No,
-[0x28] No, No, Shift, No, No, No, No, No,
-[0x30] No, No, No, No, No, '/', No, Print,
-[0x38] Altgr, No, No, No, No, No, No, No,
-[0x40] No, No, No, No, No, No, Break, Home,
-[0x48] Up, Pgup, No, Left, No, Right, No, End,
-[0x50] Down, Pgdown, Ins, Del, No, No, No, No,
-[0x58] No, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, Up, No, No, No, No, No, No,
-};
-
-Rune kbtabaltgr[Nscan] =
-{
-[0x00] No, No, No, No, No, No, No, No,
-[0x08] No, No, No, No, No, No, No, No,
-[0x10] No, No, No, No, No, No, No, No,
-[0x18] No, No, No, No, '\n', Ctrl, No, No,
-[0x20] No, No, No, No, No, No, No, No,
-[0x28] No, No, Shift, No, No, No, No, No,
-[0x30] No, No, No, No, No, '/', No, Print,
-[0x38] Altgr, No, No, No, No, No, No, No,
-[0x40] No, No, No, No, No, No, Break, Home,
-[0x48] Up, Pgup, No, Left, No, Right, No, End,
-[0x50] Down, Pgdown, Ins, Del, No, No, No, No,
-[0x58] No, No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, Up, No, No, No, No, No, No,
-};
-
-Rune kbtabctrl[Nscan] =
-{
-[0x00] No, '', '', '', '', '', '', '',
-[0x08] '', '', '', '', ' ', '', '\b', '\t',
-[0x10] '', '', '', '', '', '', '', '\t',
-[0x18] '', '', '', '', '\n', Ctrl, '', '',
-[0x20] '', '', '', '\b', '\n', ' ', ' ', '',
-[0x28] '', No, Shift, '', '', '', '', '',
-[0x30] '', '', ' ', ' ', '', '', Shift, '\n',
-[0x38] Latin, No, Ctrl, '', '', '', '', '',
-[0x40] '', '', ' ', ' ', '', '', '', '',
-[0x48] '', '', ' ', '', '', '', ' ', '',
-[0x50] '', '', '', '', No, No, No, '',
-[0x58] ' ', No, No, No, No, No, No, No,
-[0x60] No, No, No, No, No, No, No, No,
-[0x68] No, No, No, No, No, No, No, No,
-[0x70] No, No, No, No, No, No, No, No,
-[0x78] No, '', No, '\b', No, No, No, No,
-};
-
-int mouseshifted;
-void (*kbdmouse)(int);
-
-static int kdebug;
-
-typedef struct Kbscan Kbscan;
-struct Kbscan {
- int esc1;
- int esc2;
- int alt;
- int altgr;
- int caps;
- int ctl;
- int num;
- int shift;
- int collecting;
- int nk;
- Rune kc[5];
- int buttons;
-};
-
-Kbscan kbscans[Nscans]; /* kernel and external scan code state */
-
-/*
- * Scan code processing
- */
-void
-kbdputsc(int c, int external)
-{
- int i, keyup;
- Kbscan *kbscan;
-
- if(external)
- kbscan = &kbscans[Ext];
- else
- kbscan = &kbscans[Int];
-
- if(kdebug)
- print("sc %x ms %d\n", c, mouseshifted);
- /*
- * e0's is the first of a 2 character sequence, e1 the first
- * of a 3 character sequence (on the safari)
- */
- if(c == 0xe0){
- kbscan->esc1 = 1;
- return;
- } else if(c == 0xe1){
- kbscan->esc2 = 2;
- return;
- }
-
- keyup = c & 0x80;
- c &= 0x7f;
- if(c > sizeof kbtab){
- c |= keyup;
- if(c != 0xFF) /* these come fairly often: CAPSLOCK U Y */
- print("unknown key %ux\n", c);
- return;
- }
-
- if(kbscan->esc1){
- c = kbtabesc1[c];
- kbscan->esc1 = 0;
- } else if(kbscan->esc2){
- kbscan->esc2--;
- return;
- } else if(kbscan->shift)
- c = kbtabshift[c];
- else if(kbscan->altgr)
- c = kbtabaltgr[c];
- else if(kbscan->ctl)
- c = kbtabctrl[c];
- else
- c = kbtab[c];
-
- if(kbscan->caps && c<='z' && c>='a')
- c += 'A' - 'a';
-
- /*
- * keyup only important for shifts
- */
- if(keyup){
- switch(c){
- case Latin:
- kbscan->alt = 0;
- break;
- case Shift:
- kbscan->shift = 0;
- mouseshifted = 0;
- if(kdebug)
- print("shiftclr\n");
- break;
- case Ctrl:
- kbscan->ctl = 0;
- break;
- case Altgr:
- kbscan->altgr = 0;
- break;
- case Kmouse|1:
- case Kmouse|2:
- case Kmouse|3:
- case Kmouse|4:
- case Kmouse|5:
- kbscan->buttons &= ~(1<<(c-Kmouse-1));
- if(kbdmouse)
- kbdmouse(kbscan->buttons);
- break;
- }
- return;
- }
-
- /*
- * normal character
- */
- if(!(c & (Spec|KF))){
- if(kbscan->ctl)
- if(kbscan->alt && c == Del)
- exit(0);
- if(!kbscan->collecting){
- kbdputc(kbdq, c);
- return;
- }
- kbscan->kc[kbscan->nk++] = c;
- c = latin1(kbscan->kc, kbscan->nk);
- if(c < -1) /* need more keystrokes */
- return;
- if(c != -1) /* valid sequence */
- kbdputc(kbdq, c);
- else /* dump characters */
- for(i=0; i<kbscan->nk; i++)
- kbdputc(kbdq, kbscan->kc[i]);
- kbscan->nk = 0;
- kbscan->collecting = 0;
- return;
- } else {
- switch(c){
- case Caps:
- kbscan->caps ^= 1;
- return;
- case Num:
- kbscan->num ^= 1;
- return;
- case Shift:
- kbscan->shift = 1;
- if(kdebug)
- print("shift\n");
- mouseshifted = 1;
- return;
- case Latin:
- kbscan->alt = 1;
- /*
- * VMware and Qemu use Ctl-Alt as the key combination
- * to make the VM give up keyboard and mouse focus.
- * This has the unfortunate side effect that when you
- * come back into focus, Plan 9 thinks you want to type
- * a compose sequence (you just typed alt).
- *
- * As a clumsy hack around this, we look for ctl-alt
- * and don't treat it as the start of a compose sequence.
- */
- if(!kbscan->ctl){
- kbscan->collecting = 1;
- kbscan->nk = 0;
- }
- return;
- case Ctrl:
- kbscan->ctl = 1;
- return;
- case Altgr:
- kbscan->altgr = 1;
- return;
- case Kmouse|1:
- case Kmouse|2:
- case Kmouse|3:
- case Kmouse|4:
- case Kmouse|5:
- kbscan->buttons |= 1<<(c-Kmouse-1);
- if(kbdmouse)
- kbdmouse(kbscan->buttons);
- return;
- case KF|11:
- print("kbd debug on, F12 turns it off\n");
- kdebug = 1;
- break;
- case KF|12:
- kdebug = 0;
- break;
- }
- }
- kbdputc(kbdq, c);
-}
-
-void
-kbdenable(void)
-{
-#ifdef notdef
- kbdq = qopen(4*1024, 0, 0, 0);
- if(kbdq == nil)
- panic("kbdinit");
- qnoblock(kbdq, 1);
-#endif
- kbscans[Int].num = 0;
-}
-
-void
-kbdputmap(ushort m, ushort scanc, Rune r)
-{
- if(scanc >= Nscan)
- error(Ebadarg);
- switch(m) {
- default:
- error(Ebadarg);
- case 0:
- kbtab[scanc] = r;
- break;
- case 1:
- kbtabshift[scanc] = r;
- break;
- case 2:
- kbtabesc1[scanc] = r;
- break;
- case 3:
- kbtabaltgr[scanc] = r;
- break;
- case 4:
- kbtabctrl[scanc] = r;
- break;
- }
-}
-
-int
-kbdgetmap(uint offset, int *t, int *sc, Rune *r)
-{
- if ((int)offset < 0)
- error(Ebadarg);
- *t = offset/Nscan;
- *sc = offset%Nscan;
- switch(*t) {
- default:
- return 0;
- case 0:
- *r = kbtab[*sc];
- return 1;
- case 1:
- *r = kbtabshift[*sc];
- return 1;
- case 2:
- *r = kbtabesc1[*sc];
- return 1;
- case 3:
- *r = kbtabaltgr[*sc];
- return 1;
- case 4:
- *r = kbtabctrl[*sc];
- return 1;
- }
-}
diff --git a/sys/src/9/omap/main.c b/sys/src/9/omap/main.c
index 6f04f765a..b70e0bbcc 100644
--- a/sys/src/9/omap/main.c
+++ b/sys/src/9/omap/main.c
@@ -259,7 +259,7 @@ wave('l');
delay(250); /* let uart catch up */
printinit();
- kbdenable();
+// kbdenable();
cpuidprint();
// chkmissing();
@@ -445,8 +445,6 @@ init0(void)
dmatest(); /* needs `up' set, so can't do it earlier */
chandevinit();
i8250console(); /* might be redundant, but harmless */
- if(kbdq == nil)
- panic("init0: nil kbdq");
if(serialoq == nil)
panic("init0: nil serialoq");
normalprint = 1;
diff --git a/sys/src/9/omap/mkfile b/sys/src/9/omap/mkfile
index de353a776..74d617791 100644
--- a/sys/src/9/omap/mkfile
+++ b/sys/src/9/omap/mkfile
@@ -22,7 +22,6 @@ PORT=\
dev.$O\
edf.$O\
fault.$O\
- latin1.$O\
mul64fract.$O\
rebootcmd.$O\
page.$O\
@@ -50,7 +49,6 @@ OBJ=\
fpi.$O\
fpiarm.$O\
fpimem.$O\
- kbd.$O\
main.$O\
mmu.$O\
random.$O\
@@ -94,6 +92,9 @@ install:V: /$objtype/$p$CONF
wait
touch $target
+rootfs.bz2:
+ rc ../port/mkbootfs
+
<../boot/bootmkfile
<../port/portmkfile
<|../port/mkbootrules $CONF
diff --git a/sys/src/9/omap/screen.h b/sys/src/9/omap/screen.h
index ba9b36bd3..6eff3649c 100644
--- a/sys/src/9/omap/screen.h
+++ b/sys/src/9/omap/screen.h
@@ -15,6 +15,7 @@ extern Cursorinfo cursor;
/* devmouse.c */
extern void mousetrack(int, int, int, int);
+extern void absmousetrack(int, int, int, int);
extern Point mousexy(void);
extern void mouseaccelerate(int);
diff --git a/sys/src/9/omap/uarti8250.c b/sys/src/9/omap/uarti8250.c
index 7642a2685..c69a8cfaa 100644
--- a/sys/src/9/omap/uarti8250.c
+++ b/sys/src/9/omap/uarti8250.c
@@ -812,9 +812,7 @@ i8250console(void)
if(uartenable(uart) != nil /* && uart->console */){
// iprint("i8250console: enabling console uart\n");
- kbdq = uart->iq;
serialoq = uart->oq;
- uart->putc = kbdcr2nl;
uart->opens++;
consuart = uart;
}
diff --git a/sys/src/9/pc/mkfile b/sys/src/9/pc/mkfile
index 2170c1268..cb54b7497 100644
--- a/sys/src/9/pc/mkfile
+++ b/sys/src/9/pc/mkfile
@@ -24,7 +24,6 @@ PORT=\
dev.$O\
edf.$O\
fault.$O\
- latin1.$O\
page.$O\
parse.$O\
pgrp.$O\
diff --git a/sys/src/9/port/audioif.h b/sys/src/9/port/audioif.h
index 9deaec039..f8431fe3e 100644
--- a/sys/src/9/port/audioif.h
+++ b/sys/src/9/port/audioif.h
@@ -8,6 +8,8 @@ struct Audio
void *ctlr;
void *mixer;
+ Ref audioopen;
+
long (*read)(Audio *, void *, long, vlong);
long (*write)(Audio *, void *, long, vlong);
void (*close)(Audio *);
diff --git a/sys/src/9/port/devaudio.c b/sys/src/9/port/devaudio.c
index ae49e280f..5759b08a4 100644
--- a/sys/src/9/port/devaudio.c
+++ b/sys/src/9/port/devaudio.c
@@ -49,7 +49,7 @@ static Audioprobe audioprobes[16];
static Audio *audiodevs;
static char Evolume[] = "illegal volume specifier";
-
+static char Ebusy[] = "device is busy";
void
addaudiocard(char *name, int (*probefn)(Audio *))
@@ -170,6 +170,15 @@ audioattach(char *spec)
static Chan*
audioopen(Chan *c, int omode)
{
+ Audiochan *ac;
+ Audio *adev;
+
+ ac = c->aux;
+ adev = ac->adev;
+ if(c->qid.path == Qaudio && incref(&adev->audioopen) != 1){
+ decref(&adev->audioopen);
+ error(Ebusy);
+ }
return devopen(c, omode, audiodir, nelem(audiodir), devgen);
}
@@ -291,9 +300,11 @@ audioclose(Chan *c)
ac = c->aux;
adev = ac->adev;
- if(c->qid.path == Qaudio && (c->flag & COPEN))
+ if(c->qid.path == Qaudio && (c->flag & COPEN)){
if(adev->close)
adev->close(adev);
+ decref(&adev->audioopen);
+ }
if(ac->owner == c){
ac->owner = nil;
diff --git a/sys/src/9/port/devmouse.c b/sys/src/9/port/devmouse.c
index 24c66ec45..028d8e2b2 100644
--- a/sys/src/9/port/devmouse.c
+++ b/sys/src/9/port/devmouse.c
@@ -72,15 +72,12 @@ static Cmdtab mousectlmsg[] =
Mouseinfo mouse;
Cursorinfo cursor;
int mouseshifted;
-int kbdbuttons;
-void (*kbdmouse)(int);
Cursor curs;
void Cursortocursor(Cursor*);
int mousechanged(void*);
static void mouseclock(void);
-static void xkbdmouse(int);
enum{
Qdir,
@@ -120,13 +117,6 @@ mousereset(void)
addclock0link(mouseclock, 33);
}
-static void
-mousefromkbd(int buttons)
-{
- kbdbuttons = buttons;
- mousetrack(0, 0, 0, TK2MS(MACHP(0)->ticks));
-}
-
static int
mousedevgen(Chan *c, char *name, Dirtab *tab, int ntab, int i, Dir *dp)
{
@@ -147,7 +137,6 @@ mouseinit(void)
curs = arrow;
Cursortocursor(&arrow);
cursoron(1);
- kbdmouse = mousefromkbd;
mousetime = seconds();
}
@@ -603,7 +592,7 @@ mousetrack(int dx, int dy, int b, int msec)
lastb = mouse.buttons;
mouse.xy = Pt(x, y);
- mouse.buttons = b|kbdbuttons;
+ mouse.buttons = b;
mouse.redraw = 1;
mouse.counter++;
mouse.msec = msec;
@@ -642,7 +631,7 @@ absmousetrack(int x, int y, int b, int msec)
lastb = mouse.buttons;
mouse.xy = Pt(x, y);
- mouse.buttons = b|kbdbuttons;
+ mouse.buttons = b;
mouse.redraw = 1;
mouse.counter++;
mouse.msec = msec;
diff --git a/sys/src/9/port/latin1.c b/sys/src/9/port/latin1.c
deleted file mode 100644
index 8dcb0d7e4..000000000
--- a/sys/src/9/port/latin1.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <u.h>
-
-/*
- * The code makes two assumptions: strlen(ld) is 1 or 2; latintab[i].ld can be a
- * prefix of latintab[j].ld only when j<i.
- */
-struct cvlist
-{
- char *ld; /* must be seen before using this conversion */
- char *si; /* options for last input characters */
- Rune *so; /* the corresponding Rune for each si entry */
-} latintab[] = {
-#include "../port/latin1.h"
- 0, 0, 0
-};
-
-/*
- * Given 5 characters k[0]..k[4], find the rune or return -1 for failure.
- */
-long
-unicode(Rune *k)
-{
- long i, c;
-
- k++; /* skip 'X' */
- c = 0;
- for(i=0; i<4; i++,k++){
- c <<= 4;
- if('0'<=*k && *k<='9')
- c += *k-'0';
- else if('a'<=*k && *k<='f')
- c += 10 + *k-'a';
- else if('A'<=*k && *k<='F')
- c += 10 + *k-'A';
- else
- return -1;
- }
- return c;
-}
-
-/*
- * Given n characters k[0]..k[n-1], find the corresponding rune or return -1 for
- * failure, or something < -1 if n is too small. In the latter case, the result
- * is minus the required n.
- */
-long
-latin1(Rune *k, int n)
-{
- struct cvlist *l;
- int c;
- char* p;
-
- if(k[0] == 'X')
- if(n>=5)
- return unicode(k);
- else
- return -5;
- for(l=latintab; l->ld!=0; l++)
- if(k[0] == l->ld[0]){
- if(n == 1)
- return -2;
- if(l->ld[1] == 0)
- c = k[1];
- else if(l->ld[1] != k[1])
- continue;
- else if(n == 2)
- return -3;
- else
- c = k[2];
- for(p=l->si; *p!=0; p++)
- if(*p == c)
- return l->so[p - l->si];
- return -1;
- }
- return -1;
-}
diff --git a/sys/src/9/port/portdat.h b/sys/src/9/port/portdat.h
index 6d8a59c0b..bef56c086 100644
--- a/sys/src/9/port/portdat.h
+++ b/sys/src/9/port/portdat.h
@@ -766,8 +766,6 @@ extern Dev* devtab[];
extern char* eve;
extern char hostdomain[];
extern uchar initcode[];
-extern int kbdbuttons;
-extern Queue* kbdq;
extern Queue* kprintoq;
extern Ref noteidalloc;
extern int nsyscall;
diff --git a/sys/src/9/port/portfns.h b/sys/src/9/port/portfns.h
index ca56a6cf0..4dd37938d 100644
--- a/sys/src/9/port/portfns.h
+++ b/sys/src/9/port/portfns.h
@@ -150,7 +150,6 @@ void (*kproftimer)(ulong);
void ksetenv(char*, char*, int);
void kstrcpy(char*, char*, int);
void kstrdup(char**, char*);
-long latin1(Rune*, int);
int lock(Lock*);
void logopen(Log*);
void logclose(Log*);
diff --git a/sys/src/9/port/portmkfile b/sys/src/9/port/portmkfile
index 7b0c14053..02f2f29b5 100644
--- a/sys/src/9/port/portmkfile
+++ b/sys/src/9/port/portmkfile
@@ -59,9 +59,6 @@ $CONF.c: ../port/mkdevc $CONF
errstr.h: ../port/mkerrstr ../port/error.h
rc ../port/mkerrstr > errstr.h
-../port/latin1.h: /lib/keyboard
- aux/mklatinkbd /lib/keyboard > ../port/latin1.h
-
%.db: main.$O
$CC -s$stem main.c | dbfmt > $stem.db
@@ -69,6 +66,7 @@ alloc.$O: /sys/include/pool.h
devmnt.$O: /sys/include/fcall.h
proc.$O: errstr.h
devroot.$O: errstr.h
+devaudio.$O: ../port/audioif.h
devaoe.$O: /$objtype/include/ureg.h
devfs.$O: /$objtype/include/ureg.h
devsd.$O: /$objtype/include/ureg.h
@@ -83,7 +81,6 @@ devuart.$O: ../port/netif.h
devmouse.$O: screen.h /sys/include/memdraw.h
devdraw.$O: screen.h /sys/include/memdraw.h
screen.$O: screen.h /sys/include/memdraw.h
-latin1.$O: ../port/latin1.h
thwack.$O: ../port/thwack.h
unthwack.$O: ../port/thwack.h
devsdp.$O: ../port/thwack.h
diff --git a/sys/src/9/ppc/mkfile b/sys/src/9/ppc/mkfile
index 37b2486c9..3a8024c09 100644
--- a/sys/src/9/ppc/mkfile
+++ b/sys/src/9/ppc/mkfile
@@ -19,7 +19,6 @@ PORT=\
dev.$O\
edf.$O\
fault.$O\
- latin1.$O\
log.$O\
rebootcmd.$O\
page.$O\
diff --git a/sys/src/cmd/python/Modules/_lsprof.c b/sys/src/cmd/python/Modules/_lsprof.c
index d35c894c5..962349829 100644
--- a/sys/src/cmd/python/Modules/_lsprof.c
+++ b/sys/src/cmd/python/Modules/_lsprof.c
@@ -156,9 +156,13 @@ static PY_LONG_LONG CallExternalTimer(ProfilerObject *pObj)
return result;
}
-#define CALL_TIMER(pObj) ((pObj)->externalTimer ? \
- CallExternalTimer(pObj) : \
- hpTimer())
+static PY_LONG_LONG
+CALL_TIMER(ProfilerObject *pObj)
+{
+ if(pObj->externalTimer)
+ return CallExternalTimer(pObj);
+ return hpTimer();
+}
/*** ProfilerObject ***/
diff --git a/sys/src/cmd/python/Modules/bz2module.c b/sys/src/cmd/python/Modules/bz2module.c
index 9d92cf6bb..dec7a987c 100644
--- a/sys/src/cmd/python/Modules/bz2module.c
+++ b/sys/src/cmd/python/Modules/bz2module.c
@@ -1007,8 +1007,10 @@ BZ2File_seek(BZ2FileObject *self, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
offset = PyInt_AsLong(offobj);
#else
- offset = PyLong_Check(offobj) ?
- PyLong_AsLongLong(offobj) : PyInt_AsLong(offobj);
+ if(PyLong_Check(offobj))
+ offset = PyLong_AsLongLong(offobj);
+ else
+ offset = PyInt_AsLong(offobj);
#endif
if (PyErr_Occurred())
return NULL;
diff --git a/sys/src/cmd/python/Modules/fcntlmodule.c b/sys/src/cmd/python/Modules/fcntlmodule.c
index 5198baa5e..0b9a1cbd1 100644
--- a/sys/src/cmd/python/Modules/fcntlmodule.c
+++ b/sys/src/cmd/python/Modules/fcntlmodule.c
@@ -339,9 +339,10 @@ fcntl_lockf(PyObject *self, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
l.l_start = PyInt_AsLong(startobj);
#else
- l.l_start = PyLong_Check(startobj) ?
- PyLong_AsLongLong(startobj) :
- PyInt_AsLong(startobj);
+ if(PyLong_Check(startobj))
+ l.l_start = PyLong_AsLongLong(startobj);
+ else
+ l.l_start = PyInt_AsLong(startobj);
#endif
if (PyErr_Occurred())
return NULL;
@@ -350,9 +351,10 @@ fcntl_lockf(PyObject *self, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
l.l_len = PyInt_AsLong(lenobj);
#else
- l.l_len = PyLong_Check(lenobj) ?
- PyLong_AsLongLong(lenobj) :
- PyInt_AsLong(lenobj);
+ if(PyLong_Check(lenobj))
+ l.l_len = PyLong_AsLongLong(lenobj);
+ else
+ l.l_len = PyInt_AsLong(lenobj);
#endif
if (PyErr_Occurred())
return NULL;
diff --git a/sys/src/cmd/python/Modules/posixmodule.c b/sys/src/cmd/python/Modules/posixmodule.c
index 958fb63d3..a42d2be21 100644
--- a/sys/src/cmd/python/Modules/posixmodule.c
+++ b/sys/src/cmd/python/Modules/posixmodule.c
@@ -6053,8 +6053,10 @@ posix_lseek(PyObject *self, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
pos = PyInt_AsLong(posobj);
#else
- pos = PyLong_Check(posobj) ?
- PyLong_AsLongLong(posobj) : PyInt_AsLong(posobj);
+ if(PyLong_Check(posobj))
+ pos = PyLong_AsLongLong(posobj);
+ else
+ pos = PyInt_AsLong(posobj);
#endif
if (PyErr_Occurred())
return NULL;
@@ -6384,8 +6386,10 @@ posix_ftruncate(PyObject *self, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
length = PyInt_AsLong(lenobj);
#else
- length = PyLong_Check(lenobj) ?
- PyLong_AsLongLong(lenobj) : PyInt_AsLong(lenobj);
+ if(PyLong_Check(lenobj))
+ length = PyLong_AsLongLong(lenobj);
+ else
+ length = PyInt_AsLong(lenobj);
#endif
if (PyErr_Occurred())
return NULL;
diff --git a/sys/src/cmd/python/Modules/testcapi_long.h b/sys/src/cmd/python/Modules/testcapi_long.h
index 8ed6b021e..90d218c14 100644
--- a/sys/src/cmd/python/Modules/testcapi_long.h
+++ b/sys/src/cmd/python/Modules/testcapi_long.h
@@ -25,16 +25,19 @@ TESTNAME(PyObject *error(const char*))
base = 1;
for (i = 0;
i < NBITS + 1; /* on last, base overflows to 0 */
- ++i, base <<= 1)
+ ++i)
{
int j;
+
for (j = 0; j < 6; ++j) {
TYPENAME in, out;
unsigned TYPENAME uin, uout;
/* For 0, 1, 2 use base; for 3, 4, 5 use -base */
- uin = j < 3 ? base
- : (unsigned TYPENAME)(-(TYPENAME)base);
+ if(j < 3)
+ uin = base;
+ else
+ uin = (unsigned TYPENAME)(-(TYPENAME)base);
/* For 0 & 3, subtract 1.
* For 1 & 4, leave alone.
@@ -71,6 +74,8 @@ TESTNAME(PyObject *error(const char*))
"signed output != input");
UNBIND(pyresult);
}
+
+ base <<= 1;
}
/* Overflow tests. The loop above ensured that all limit cases that
diff --git a/sys/src/cmd/python/Objects/fileobject.c b/sys/src/cmd/python/Objects/fileobject.c
index 869ded916..124767ccd 100644
--- a/sys/src/cmd/python/Objects/fileobject.c
+++ b/sys/src/cmd/python/Objects/fileobject.c
@@ -553,8 +553,10 @@ file_seek(PyFileObject *f, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
offset = PyInt_AsLong(offobj);
#else
- offset = PyLong_Check(offobj) ?
- PyLong_AsLongLong(offobj) : PyInt_AsLong(offobj);
+ if(PyLong_Check(offobj))
+ offset = PyLong_AsLongLong(offobj);
+ else
+ offset = PyInt_AsLong(offobj);
#endif
if (PyErr_Occurred())
return NULL;
@@ -610,9 +612,10 @@ file_truncate(PyFileObject *f, PyObject *args)
#if !defined(HAVE_LARGEFILE_SUPPORT)
newsize = PyInt_AsLong(newsizeobj);
#else
- newsize = PyLong_Check(newsizeobj) ?
- PyLong_AsLongLong(newsizeobj) :
- PyInt_AsLong(newsizeobj);
+ if(PyLong_Check(newsizeobj))
+ newsize = PyLong_AsLongLong(newsizeobj);
+ else
+ newsize = PyInt_AsLong(newsizeobj);
#endif
if (PyErr_Occurred())
return NULL;
diff --git a/sys/src/cmd/python/Python/marshal.c b/sys/src/cmd/python/Python/marshal.c
index 776836e55..7940ce18a 100644
--- a/sys/src/cmd/python/Python/marshal.c
+++ b/sys/src/cmd/python/Python/marshal.c
@@ -971,7 +971,7 @@ PyMarshal_ReadLastObjectFromFile(FILE *fp)
if (filesize <= SMALL_FILE_LIMIT)
pBuf = buf;
else if (filesize <= REASONABLE_FILE_LIMIT)
- pBuf = (char *)PyMem_MALLOC(filesize);
+ pBuf = (char *)PyMem_MALLOC((int)filesize);
if (pBuf != NULL) {
PyObject* v;
size_t n;
diff --git a/sys/src/cmd/python/plan9.c b/sys/src/cmd/python/plan9.c
index a19392db4..94228077e 100644
--- a/sys/src/cmd/python/plan9.c
+++ b/sys/src/cmd/python/plan9.c
@@ -6,6 +6,8 @@
#if defined(T386)
#define FPINVAL (1<<0)
+#elif defined(Tarm)
+#define FPINVAL (1<<16)
#else
Error define FPINVAL for your arch. grep /$cputype/include/u.h
#endif