summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-10-17 02:39:56 +0200
committerMiguel <m.i@gmx.at>2018-10-17 02:39:56 +0200
commit474c803c32fe055b4f09cb779f22b70d7eba8325 (patch)
treefda4241ebd53688c17379a9dd11b111c5bf5e7a0 /kernel/syscalls.c
parent39f271589fb9db3d6a383857817b13a9bb59d981 (diff)
screen areas invalidation
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index e73f89c..aa27ed8 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -31,6 +31,7 @@
//TODO move to process.c and implement per process //
static fd fds[MAX_PID][MAX_FD];
+static ringbuffer invl[MAX_PID];
//static uint32_t opendir_pos[MAX_PID][MAX_FD];
//static char opendir_name[MAX_PID][MAX_FD][256];
static int tty[MAX_PID]; // keep track of /dev/tty fd for each process :P
@@ -445,6 +446,7 @@ uint32_t syscall_fork(int none1, int none2, int none3, int pid)
open_fd[newpid][i]=true;
}
tty[newpid]=tty[pid];
+ invl[newpid]=invl[pid];
// fds[newpid][0]=fd_from_ringbuffer(); // TODO fix
// open_fd[newpid][0]=true;
@@ -593,9 +595,22 @@ uint32_t syscall_tcsetattr(int fd, struct termios *termios_p, uint32_t none, uin
return 0;
}
-uint32_t syscall_gui_rect(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
+uint32_t syscall_gui_rect(uint32_t xy, uint32_t wh, uint32_t none, uint32_t pid)
{
+// klog("pid %d x y %d %d w h %d %d",pid,xy>>16,xy&0xffff,wh>>16,wh&0xffff);
+
+ ringbuffer_put(&invl[pid],xy&0x000000ff);
+ ringbuffer_put(&invl[pid],(xy&0x0000ff00)>>8);
+ ringbuffer_put(&invl[pid],(xy&0x00ff0000)>>16);
+ ringbuffer_put(&invl[pid],(xy&0xff000000)>>24);
+
+ ringbuffer_put(&invl[pid],wh&0x000000ff);
+ ringbuffer_put(&invl[pid],(wh&0x0000ff00)>>8);
+ ringbuffer_put(&invl[pid],(wh&0x00ff0000)>>16);
+ ringbuffer_put(&invl[pid],(wh&0xff000000)>>24);
+
compositor_wake();
+
return 1;
}
uint32_t syscall_gui_win(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
@@ -603,9 +618,8 @@ uint32_t syscall_gui_win(uint32_t p1, uint32_t p2, uint32_t p3, uint32_t pid)
uint32_t fdn=nextfd(pid);
fds[pid][fdn]=fd_from_ringbuffer();
tty[pid]=fdn;
-
- task_add_win(pid);
-
+ invl[pid]=ringbuffer_init(4);
+ task_add_win(pid,&invl[pid]);
return 1;
}