From 7cb23e3df87edac930162b50b97100b33fbc92af Mon Sep 17 00:00:00 2001 From: schodet Date: Wed, 7 May 2003 09:51:53 +0000 Subject: Mise à jour pour un essai de camera. --- 2003/i/buzz/src/kernel/pbus.c | 44 +++++++++++++++++++++++++++---------------- 2003/i/buzz/src/kernel/pbus.h | 12 ++++++------ 2 files changed, 34 insertions(+), 22 deletions(-) (limited to '2003') diff --git a/2003/i/buzz/src/kernel/pbus.c b/2003/i/buzz/src/kernel/pbus.c index 7d28fff..6f65538 100644 --- a/2003/i/buzz/src/kernel/pbus.c +++ b/2003/i/buzz/src/kernel/pbus.c @@ -219,8 +219,16 @@ pbusread(dev, uio, flags) remain-=resid; if (!remain) { + int s=splhigh(); sc->buf_consumed=0; sc->buf_ok=0; + if (!sc->in_dma) + { + BUFSYNC_PRE; + PBUS_WRITE_4(0x4,sc->sc_bonitodma); + sc->in_dma=1; + } + splx(s); } return 0; } @@ -241,25 +249,18 @@ int pbus_intr(void *p) if (status&0x20000000) { /* Désactive les interuptions. */ - PBUS_WRITE_4(8,PBUS_READ_4(8)&0x3FFF); + PBUS_WRITE_4(8,PBUS_READ_4(8)&0x3FFF); sc->pbusinten=0; /* Envoie le signal à l'application. */ if (sc->cproc!=NULL) psignal(sc->cproc,sc->csignal); } - else + if (status&0x40000000) { - if (status&0x40000000) - { - /* Frame Ok */ - BUFSYNC_POST; - sc->buf_ok=1; - sc->in_dma=0; - } - else - { - /* Pointer slot avail */ - } - } + /* Frame Ok */ + BUFSYNC_POST; + sc->buf_ok=1; + sc->in_dma=0; + } return 0; } @@ -301,24 +302,35 @@ pbusioctl(dev, cmd, addr, flag, proc) case PBUS_INTDISABLE: sc->pbusinten=0; PBUS_WRITE_4(8,0|PBUS_RnW|sc->pbusinten); - break; + break; case PBUS_INTENABLE: sc->pbusinten=PBUS_INTEN; PBUS_WRITE_4(8,0|PBUS_RnW|sc->pbusinten); break; case PBUS_INTREAD: parm->ints=(PBUS_READ_4(8)>>16)&0x1F; - break; + break; } } if (minor(dev)==0) /* CAM */ { + int s; switch (cmd) { case CAM_SETFRAMESIZE: + s=splhigh(); PBUS_WRITE_4(0x0,1); sc->framesize=*fsize; + sc->buf_consumed=0; + sc->buf_ok=0; + if (!sc->in_dma) + { + BUFSYNC_PRE; + PBUS_WRITE_4(0x4,sc->sc_bonitodma); + sc->in_dma=1; + } + splx(s); break; } } diff --git a/2003/i/buzz/src/kernel/pbus.h b/2003/i/buzz/src/kernel/pbus.h index 62bd460..65b6024 100644 --- a/2003/i/buzz/src/kernel/pbus.h +++ b/2003/i/buzz/src/kernel/pbus.h @@ -16,11 +16,11 @@ struct pbus_io #define PBUS_CLK 0x2000 #define PBUS_INTEN 0x4000 -#define PBUS_READ _IOWR('R', 1, struct pbus_io) -#define PBUS_WRITE _IOWR('R', 2, struct pbus_io) -#define PBUS_INTENABLE _IO('R', 3) -#define PBUS_INTDISABLE _IO('R', 4) -#define PBUS_INTREAD _IOWR('R', 5, struct pbus_io) +#define PBUS_READ _IOWR('R', 1, struct pbus_io) +#define PBUS_WRITE _IOWR('R', 2, struct pbus_io) +#define PBUS_INTENABLE _IO('R', 3) +#define PBUS_INTDISABLE _IO('R', 4) +#define PBUS_INTREAD _IOWR('R', 5, struct pbus_io) -#define CAM_SETFRAMESIZE _IOW('R', 10, unsigned long) +#define CAM_SETFRAMESIZE _IOW('R', 10, unsigned long) #endif -- cgit v1.2.3