1*3ff48bf5SDavid du Colombier /*
2*3ff48bf5SDavid du Colombier * Interface to raw PS/2 aux port.
3*3ff48bf5SDavid du Colombier * Used by user-level mouse daemon.
4*3ff48bf5SDavid du Colombier */
5*3ff48bf5SDavid du Colombier
6*3ff48bf5SDavid du Colombier #include "u.h"
7*3ff48bf5SDavid du Colombier #include "../port/lib.h"
8*3ff48bf5SDavid du Colombier #include "mem.h"
9*3ff48bf5SDavid du Colombier #include "dat.h"
10*3ff48bf5SDavid du Colombier #include "fns.h"
11*3ff48bf5SDavid du Colombier #include "../port/error.h"
12*3ff48bf5SDavid du Colombier #include "io.h"
13*3ff48bf5SDavid du Colombier
14*3ff48bf5SDavid du Colombier #define Image IMAGE
15*3ff48bf5SDavid du Colombier #include <draw.h>
16*3ff48bf5SDavid du Colombier #include <memdraw.h>
17*3ff48bf5SDavid du Colombier #include <cursor.h>
18*3ff48bf5SDavid du Colombier #include "screen.h"
19*3ff48bf5SDavid du Colombier
20*3ff48bf5SDavid du Colombier /*
21*3ff48bf5SDavid du Colombier * BUG: we ignore shift here.
22*3ff48bf5SDavid du Colombier * we need a more general solution,
23*3ff48bf5SDavid du Colombier * one that will also work for serial mice.
24*3ff48bf5SDavid du Colombier */
25*3ff48bf5SDavid du Colombier Queue *psauxq;
26*3ff48bf5SDavid du Colombier
27*3ff48bf5SDavid du Colombier static void
psauxputc(int c,int)28*3ff48bf5SDavid du Colombier psauxputc(int c, int)
29*3ff48bf5SDavid du Colombier {
30*3ff48bf5SDavid du Colombier uchar uc;
31*3ff48bf5SDavid du Colombier
32*3ff48bf5SDavid du Colombier uc = c;
33*3ff48bf5SDavid du Colombier qproduce(psauxq, &uc, 1);
34*3ff48bf5SDavid du Colombier }
35*3ff48bf5SDavid du Colombier
36*3ff48bf5SDavid du Colombier static long
psauxread(Chan *,void * a,long n,vlong)37*3ff48bf5SDavid du Colombier psauxread(Chan*, void *a, long n, vlong)
38*3ff48bf5SDavid du Colombier {
39*3ff48bf5SDavid du Colombier return qread(psauxq, a, n);
40*3ff48bf5SDavid du Colombier }
41*3ff48bf5SDavid du Colombier
42*3ff48bf5SDavid du Colombier static long
psauxwrite(Chan *,void * a,long n,vlong)43*3ff48bf5SDavid du Colombier psauxwrite(Chan*, void *a, long n, vlong)
44*3ff48bf5SDavid du Colombier {
45*3ff48bf5SDavid du Colombier return i8042auxcmds(a, n);
46*3ff48bf5SDavid du Colombier }
47*3ff48bf5SDavid du Colombier
48*3ff48bf5SDavid du Colombier void
psauxlink(void)49*3ff48bf5SDavid du Colombier psauxlink(void)
50*3ff48bf5SDavid du Colombier {
51*3ff48bf5SDavid du Colombier psauxq = qopen(1024, 0, 0, 0);
52*3ff48bf5SDavid du Colombier if(psauxq == nil)
53*3ff48bf5SDavid du Colombier panic("psauxlink");
54*3ff48bf5SDavid du Colombier qnoblock(psauxq, 1);
55*3ff48bf5SDavid du Colombier i8042auxenable(psauxputc);
56*3ff48bf5SDavid du Colombier addarchfile("psaux", DMEXCL|0660, psauxread, psauxwrite);
57*3ff48bf5SDavid du Colombier }
58