summaryrefslogtreecommitdiff
path: root/2003/i
diff options
context:
space:
mode:
authorschodet2003-05-07 09:51:53 +0000
committerschodet2003-05-07 09:51:53 +0000
commit7cb23e3df87edac930162b50b97100b33fbc92af (patch)
treea33c8a66a965d8b8be98e9b74770864454bcbe50 /2003/i
parent4289eb153b556ad21ea03092562a908e76030ba5 (diff)
Mise à jour pour un essai de camera.
Diffstat (limited to '2003/i')
-rw-r--r--2003/i/buzz/src/kernel/pbus.c44
-rw-r--r--2003/i/buzz/src/kernel/pbus.h12
2 files changed, 34 insertions, 22 deletions
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