Add fd_chan_ctl() (XCC)
[akaros.git] / kern / include / apipe.h
index 584e2eb..3c62f37 100644 (file)
@@ -18,7 +18,7 @@
  *             ret = apipe_read(&ap, &to_local_struct, 1);
  *             apipe_close_writer(&ap);
  *             apipe_close_reader(&ap);
- *     
+ *
  * Read and write return the number of elements copied.  If they copied any
  * amount, they will return.  They will block if the pipe is empty/full,
  * and there exist corresponding writers/readers.
@@ -49,8 +49,7 @@
  * many elements at once (like sys_pipe).  But we can hold off til we see how
  * people use this.  For now, this is built for one copy at a time. */
 
-#ifndef ROS_KERN_APIPE_H
-#define ROS_KERN_APIPE_H
+#pragma once
 
 #include <ros/common.h>
 #include <kthread.h>
@@ -63,7 +62,11 @@ struct atomic_pipe {
        size_t                                          ap_wr_off;
        unsigned int                            ap_nr_readers;
        unsigned int                            ap_nr_writers;
-       struct cond_var                         ap_cv;
+       spinlock_t                                      ap_lock;
+       struct cond_var                         ap_priority_reader;
+       struct cond_var                         ap_general_readers;
+       struct cond_var                         ap_writers;
+       bool                                            ap_has_priority_reader;
 };
 
 void apipe_init(struct atomic_pipe *ap, void *buf, size_t buf_sz,
@@ -78,5 +81,3 @@ void apipe_open_reader(struct atomic_pipe *ap);
 void apipe_open_writer(struct atomic_pipe *ap);
 void apipe_close_reader(struct atomic_pipe *ap);
 void apipe_close_writer(struct atomic_pipe *ap);
-
-#endif /* ROS_KERN_APIPE_H */