145408Smsmith/* 2300060Spfg * Memory range attribute operations, performed on /dev/mem 355205Speter * 455205Speter * $FreeBSD$ 545408Smsmith */ 645408Smsmith 7217515Sjkim#ifndef _SYS_MEMRANGE_H_ 8217515Sjkim#define _SYS_MEMRANGE_H_ 9217515Sjkim 1045408Smsmith/* Memory range attributes */ 1145408Smsmith#define MDF_UNCACHEABLE (1<<0) /* region not cached */ 1245408Smsmith#define MDF_WRITECOMBINE (1<<1) /* region supports "write combine" action */ 1345408Smsmith#define MDF_WRITETHROUGH (1<<2) /* write-through cached */ 1445408Smsmith#define MDF_WRITEBACK (1<<3) /* write-back cached */ 1545408Smsmith#define MDF_WRITEPROTECT (1<<4) /* read-only region */ 1694684Sdwmalone#define MDF_UNKNOWN (1<<5) /* any state we don't understand */ 1745408Smsmith#define MDF_ATTRMASK (0x00ffffff) 1845408Smsmith 1945408Smsmith#define MDF_FIXBASE (1<<24) /* fixed base */ 2045408Smsmith#define MDF_FIXLEN (1<<25) /* fixed length */ 2145408Smsmith#define MDF_FIRMWARE (1<<26) /* set by firmware (XXX not useful?) */ 2245408Smsmith#define MDF_ACTIVE (1<<27) /* currently active */ 2345408Smsmith#define MDF_BOGUS (1<<28) /* we don't like it */ 2445408Smsmith#define MDF_FIXACTIVE (1<<29) /* can't be turned off */ 2545408Smsmith#define MDF_BUSY (1<<30) /* range is in use */ 26103346Sdwmalone#define MDF_FORCE (1<<31) /* force risky changes */ 2745408Smsmith 2845408Smsmithstruct mem_range_desc 2945408Smsmith{ 3045408Smsmith u_int64_t mr_base; 3145408Smsmith u_int64_t mr_len; 3245408Smsmith int mr_flags; 3345408Smsmith char mr_owner[8]; 3445408Smsmith}; 3545408Smsmith 3645408Smsmithstruct mem_range_op 3745408Smsmith{ 3845408Smsmith struct mem_range_desc *mo_desc; 3945408Smsmith int mo_arg[2]; 4045408Smsmith#define MEMRANGE_SET_UPDATE 0 4145408Smsmith#define MEMRANGE_SET_REMOVE 1 4245408Smsmith /* XXX want a flag that says "set and undo when I exit" */ 4345408Smsmith}; 4445408Smsmith 4545408Smsmith#define MEMRANGE_GET _IOWR('m', 50, struct mem_range_op) 4645408Smsmith#define MEMRANGE_SET _IOW('m', 51, struct mem_range_op) 4745408Smsmith 4855205Speter#ifdef _KERNEL 4945408Smsmith 5045408SmsmithMALLOC_DECLARE(M_MEMDESC); 5145408Smsmith 5245408Smsmithstruct mem_range_softc; 5345408Smsmithstruct mem_range_ops 5445408Smsmith{ 5545408Smsmith void (*init)(struct mem_range_softc *sc); 5645408Smsmith int (*set)(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg); 5746215Smsmith void (*initAP)(struct mem_range_softc *sc); 58189903Sjkim void (*reinit)(struct mem_range_softc *sc); 5945408Smsmith}; 6045408Smsmith 6145408Smsmithstruct mem_range_softc 6245408Smsmith{ 6345408Smsmith struct mem_range_ops *mr_op; 6445408Smsmith int mr_cap; 6545408Smsmith int mr_ndesc; 6645408Smsmith struct mem_range_desc *mr_desc; 6745408Smsmith}; 6845408Smsmith 6945408Smsmithextern struct mem_range_softc mem_range_softc; 7045408Smsmith 71217515Sjkimextern void mem_range_init(void); 72217515Sjkimextern void mem_range_destroy(void); 73133129Smarkm 74217515Sjkimextern int mem_range_attr_get(struct mem_range_desc *mrd, int *arg); 75217515Sjkimextern int mem_range_attr_set(struct mem_range_desc *mrd, int *arg); 76217515Sjkim 77217515Sjkim#endif /* _KERNEL */ 78217515Sjkim 79217515Sjkim#endif /* _SYS_MEMRANGE_H_ */ 80