00001 
00023 #ifndef _XENO_NUCLEUS_BUFD_H
00024 #define _XENO_NUCLEUS_BUFD_H
00025 
00029 #include <nucleus/types.h>
00030 
00031 #ifdef CONFIG_XENO_OPT_PERVASIVE
00032 
00033 struct mm_struct;
00034 
00035 struct xnbufd {
00036         caddr_t b_ptr;          
00037         size_t b_len;           
00038         off_t b_off;            
00039         struct mm_struct *b_mm; 
00040         caddr_t b_carry;        
00041         char b_buf[64];         
00042 };
00043 
00044 void xnbufd_map_umem(struct xnbufd *bufd,
00045                      void __user *ptr, size_t len);
00046 
00047 static inline void xnbufd_map_uread(struct xnbufd *bufd,
00048                                     const void __user *ptr, size_t len)
00049 {
00050         xnbufd_map_umem(bufd, (void __user *)ptr, len);
00051 }
00052 
00053 static inline void xnbufd_map_uwrite(struct xnbufd *bufd,
00054                                      void __user *ptr, size_t len)
00055 {
00056         xnbufd_map_umem(bufd, ptr, len);
00057 }
00058 
00059 ssize_t xnbufd_unmap_uread(struct xnbufd *bufd);
00060 
00061 ssize_t xnbufd_unmap_uwrite(struct xnbufd *bufd);
00062 
00063 #else 
00064 
00065 struct xnbufd {
00066         caddr_t b_ptr;          
00067         size_t b_len;           
00068         off_t b_off;            
00069 };
00070 
00071 #endif 
00072 
00073 void xnbufd_map_kmem(struct xnbufd *bufd,
00074                      void *ptr, size_t len);
00075 
00076 static inline void xnbufd_map_kread(struct xnbufd *bufd,
00077                                     const void *ptr, size_t len)
00078 {
00079         xnbufd_map_kmem(bufd, (void *)ptr, len);
00080 }
00081 
00082 static inline void xnbufd_map_kwrite(struct xnbufd *bufd,
00083                                      void *ptr, size_t len)
00084 {
00085         xnbufd_map_kmem(bufd, ptr, len);
00086 }
00087 
00088 ssize_t xnbufd_unmap_kread(struct xnbufd *bufd);
00089 
00090 ssize_t xnbufd_unmap_kwrite(struct xnbufd *bufd);
00091 
00092 ssize_t xnbufd_copy_to_kmem(void *ptr,
00093                             struct xnbufd *bufd, size_t len);
00094 
00095 ssize_t xnbufd_copy_from_kmem(struct xnbufd *bufd,
00096                               void *from, size_t len);
00097 
00098 void xnbufd_invalidate(struct xnbufd *bufd);
00099 
00102 #endif