memrange.h revision 256281
1286425Sdim/* 2286425Sdim * Memory range attribute operations, peformed on /dev/mem 3286425Sdim * 4286425Sdim * $FreeBSD: stable/10/sys/sys/memrange.h 217515 2011-01-17 22:58:28Z jkim $ 5286425Sdim */ 6286425Sdim 7286425Sdim#ifndef _SYS_MEMRANGE_H_ 8286425Sdim#define _SYS_MEMRANGE_H_ 9286425Sdim 10286425Sdim/* Memory range attributes */ 11286425Sdim#define MDF_UNCACHEABLE (1<<0) /* region not cached */ 12286425Sdim#define MDF_WRITECOMBINE (1<<1) /* region supports "write combine" action */ 13286425Sdim#define MDF_WRITETHROUGH (1<<2) /* write-through cached */ 14286425Sdim#define MDF_WRITEBACK (1<<3) /* write-back cached */ 15296417Sdim#define MDF_WRITEPROTECT (1<<4) /* read-only region */ 16296417Sdim#define MDF_UNKNOWN (1<<5) /* any state we don't understand */ 17296417Sdim#define MDF_ATTRMASK (0x00ffffff) 18296417Sdim 19296417Sdim#define MDF_FIXBASE (1<<24) /* fixed base */ 20296417Sdim#define MDF_FIXLEN (1<<25) /* fixed length */ 21296417Sdim#define MDF_FIRMWARE (1<<26) /* set by firmware (XXX not useful?) */ 22296417Sdim#define MDF_ACTIVE (1<<27) /* currently active */ 23296417Sdim#define MDF_BOGUS (1<<28) /* we don't like it */ 24296417Sdim#define MDF_FIXACTIVE (1<<29) /* can't be turned off */ 25296417Sdim#define MDF_BUSY (1<<30) /* range is in use */ 26296417Sdim#define MDF_FORCE (1<<31) /* force risky changes */ 27296417Sdim 28296417Sdimstruct mem_range_desc 29296417Sdim{ 30296417Sdim u_int64_t mr_base; 31296417Sdim u_int64_t mr_len; 32296417Sdim int mr_flags; 33296417Sdim char mr_owner[8]; 34296417Sdim}; 35296417Sdim 36296417Sdimstruct mem_range_op 37296417Sdim{ 38296417Sdim struct mem_range_desc *mo_desc; 39296417Sdim int mo_arg[2]; 40296417Sdim#define MEMRANGE_SET_UPDATE 0 41296417Sdim#define MEMRANGE_SET_REMOVE 1 42296417Sdim /* XXX want a flag that says "set and undo when I exit" */ 43296417Sdim}; 44296417Sdim 45296417Sdim#define MEMRANGE_GET _IOWR('m', 50, struct mem_range_op) 46296417Sdim#define MEMRANGE_SET _IOW('m', 51, struct mem_range_op) 47296417Sdim 48296417Sdim#ifdef _KERNEL 49296417Sdim 50296417SdimMALLOC_DECLARE(M_MEMDESC); 51296417Sdim 52296417Sdimstruct mem_range_softc; 53296417Sdimstruct mem_range_ops 54296417Sdim{ 55296417Sdim void (*init)(struct mem_range_softc *sc); 56296417Sdim int (*set)(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg); 57296417Sdim void (*initAP)(struct mem_range_softc *sc); 58296417Sdim void (*reinit)(struct mem_range_softc *sc); 59296417Sdim}; 60296417Sdim 61296417Sdimstruct mem_range_softc 62296417Sdim{ 63296417Sdim struct mem_range_ops *mr_op; 64296417Sdim int mr_cap; 65296417Sdim int mr_ndesc; 66296417Sdim struct mem_range_desc *mr_desc; 67296417Sdim}; 68296417Sdim 69296417Sdimextern struct mem_range_softc mem_range_softc; 70296417Sdim 71296417Sdimextern void mem_range_init(void); 72296417Sdimextern void mem_range_destroy(void); 73296417Sdim 74296417Sdimextern int mem_range_attr_get(struct mem_range_desc *mrd, int *arg); 75extern int mem_range_attr_set(struct mem_range_desc *mrd, int *arg); 76 77#endif /* _KERNEL */ 78 79#endif /* _SYS_MEMRANGE_H_ */ 80