| 1 | /* |
| 2 | * Memory range attribute operations, peformed on /dev/mem |
| 3 | */ |
| 4 | |
| 5 | #ifdef HAVE_XORG_CONFIG_H |
| 6 | #include <xorg-config.h> |
| 7 | #endif |
| 8 | |
| 9 | #ifndef _MEMRANGE_H |
| 10 | #define _MEMRANGE_H |
| 11 | |
| 12 | /* Memory range attributes */ |
| 13 | #define MDF_UNCACHEABLE (1<<0) /* region not cached */ |
| 14 | #define MDF_WRITECOMBINE (1<<1) /* region supports "write combine" |
| 15 | * action */ |
| 16 | #define MDF_WRITETHROUGH (1<<2) /* write-through cached */ |
| 17 | #define MDF_WRITEBACK (1<<3) /* write-back cached */ |
| 18 | #define MDF_WRITEPROTECT (1<<4) /* read-only region */ |
| 19 | #define MDF_ATTRMASK (0x00ffffff) |
| 20 | |
| 21 | #define MDF_FIXBASE (1<<24) /* fixed base */ |
| 22 | #define MDF_FIXLEN (1<<25) /* fixed length */ |
| 23 | #define MDF_FIRMWARE (1<<26) /* set by firmware (XXX not useful?) */ |
| 24 | #define MDF_ACTIVE (1<<27) /* currently active */ |
| 25 | #define MDF_BOGUS (1<<28) /* we don't like it */ |
| 26 | #define MDF_FIXACTIVE (1<<29) /* can't be turned off */ |
| 27 | #define MDF_BUSY (1<<30) /* range is in use */ |
| 28 | |
| 29 | struct mem_range_desc { |
| 30 | u_int64_t mr_base; |
| 31 | u_int64_t mr_len; |
| 32 | int mr_flags; |
| 33 | char mr_owner[8]; |
| 34 | }; |
| 35 | |
| 36 | struct mem_range_op { |
| 37 | struct mem_range_desc *mo_desc; |
| 38 | int mo_arg[2]; |
| 39 | #define MEMRANGE_SET_UPDATE 0 |
| 40 | #define MEMRANGE_SET_REMOVE 1 |
| 41 | /* XXX want a flag that says "set and undo when I exit" */ |
| 42 | }; |
| 43 | |
| 44 | #define MEMRANGE_GET _IOWR('m', 50, struct mem_range_op) |
| 45 | #define MEMRANGE_SET _IOW('m', 51, struct mem_range_op) |
| 46 | |
| 47 | #ifdef _KERNEL |
| 48 | |
| 49 | struct mem_range_softc; |
| 50 | struct mem_range_ops { |
| 51 | void (*init) __P((struct mem_range_softc * sc)); |
| 52 | int (*set) |
| 53 | __P((struct mem_range_softc * sc, struct mem_range_desc * mrd, |
| 54 | int *arg)); |
| 55 | void (*initAP) __P((struct mem_range_softc * sc)); |
| 56 | }; |
| 57 | |
| 58 | struct mem_range_softc { |
| 59 | struct mem_range_ops *mr_op; |
| 60 | int mr_cap; |
| 61 | int mr_ndesc; |
| 62 | struct mem_range_desc *mr_desc; |
| 63 | }; |
| 64 | |
| 65 | extern struct mem_range_softc mem_range_softc; |
| 66 | |
| 67 | extern int mem_range_attr_get __P((struct mem_range_desc * mrd, int *arg)); |
| 68 | extern int mem_range_attr_set __P((struct mem_range_desc * mrd, int *arg)); |
| 69 | extern void mem_range_AP_init __P((void)); |
| 70 | #endif |
| 71 | |
| 72 | #endif |