00001
00006 #ifndef __L4_FPAGE_64BIT_H__
00007 #define __L4_FPAGE_64BIT_H__
00008
00009
00010
00011
00012
00022 typedef struct {
00023 unsigned grant:1;
00024 unsigned write:1;
00025 unsigned size:7;
00026 unsigned cache:3;
00027 unsigned long page:52;
00028 } l4_fpage_struct_t;
00029
00034 typedef struct {
00035 unsigned long grant:1;
00036 unsigned long zero1:1;
00037 unsigned long iosize:6;
00038 unsigned long zero2:4;
00039 unsigned long iopage:16;
00040 unsigned long f: 36;
00041 } l4_iofpage_struct_t;
00042
00047 typedef struct {
00048 unsigned long grant:1;
00049 unsigned long zero1:1;
00050 unsigned long order:6;
00051 unsigned long zero2:4;
00052 unsigned long taskno:16;
00053 unsigned long f: 36;
00054 } l4_capfpage_struct_t;
00055
00060 typedef union {
00061 l4_umword_t fpage;
00062 l4_umword_t raw;
00063 l4_fpage_struct_t fp;
00064 l4_iofpage_struct_t iofp;
00065 l4_capfpage_struct_t capfp;
00066 } l4_fpage_t;
00067
00071 enum
00072 {
00073 L4_WHOLE_ADDRESS_SPACE = 64
00074 };
00075
00076 #include <l4/sys/__l4_fpage-common.h>
00077
00078 L4_INLINE l4_fpage_t
00079 l4_fpage(unsigned long address, unsigned int size,
00080 unsigned char write, unsigned char grant)
00081 {
00082 return ((l4_fpage_t){fp:{grant, write, size, 0,
00083 (address & L4_PAGEMASK) >> 12 }});
00084 }
00085
00086 L4_INLINE int
00087 l4_is_io_page_fault(unsigned long address)
00088 {
00089 return (address & 0xfffffffff0000f00UL) == 0xfffffffff0000000UL;
00090 }
00091
00092 L4_INLINE l4_fpage_t
00093 l4_iofpage(unsigned port, unsigned int size,
00094 unsigned char grant)
00095 {
00096 return ((l4_fpage_t){iofp:{grant, 0, size, 0, port, 0xfffffffff}});
00097 }
00098
00099 L4_INLINE l4_fpage_t
00100 l4_capfpage(unsigned taskno, unsigned int order,
00101 unsigned char grant)
00102 {
00103 return ((l4_fpage_t){iofp:{grant, 0, taskno, 1, order, 0xfffffffff}});
00104 }
00105
00106 #endif