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