Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
da501825
Commit
da501825
authored
Sep 25, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux-sound.bkbits.net/linux-sound
into home.osdl.org:/home/torvalds/v2.5/linux
parents
c1fabdad
2a98ed00
Changes
33
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
724 additions
and
597 deletions
+724
-597
drivers/char/drm/Kconfig
drivers/char/drm/Kconfig
+2
-2
drivers/char/drm/drmP.h
drivers/char/drm/drmP.h
+11
-12
drivers/char/drm/drm_agpsupport.h
drivers/char/drm/drm_agpsupport.h
+6
-6
drivers/char/drm/drm_memory.h
drivers/char/drm/drm_memory.h
+4
-4
drivers/char/drm/drm_memory_debug.h
drivers/char/drm/drm_memory_debug.h
+5
-5
drivers/char/drm/drm_os_linux.h
drivers/char/drm/drm_os_linux.h
+8
-3
drivers/char/drm/gamma_dma.c
drivers/char/drm/gamma_dma.c
+4
-3
drivers/char/drm/i830_irq.c
drivers/char/drm/i830_irq.c
+2
-2
drivers/char/drm/sis.h
drivers/char/drm/sis.h
+17
-20
drivers/char/drm/sis_drm.h
drivers/char/drm/sis_drm.h
+21
-34
drivers/char/drm/sis_drv.h
drivers/char/drm/sis_drv.h
+11
-9
drivers/char/drm/sis_ds.c
drivers/char/drm/sis_ds.c
+250
-271
drivers/char/drm/sis_ds.h
drivers/char/drm/sis_ds.h
+31
-30
drivers/char/drm/sis_mm.c
drivers/char/drm/sis_mm.c
+291
-195
include/asm-alpha/mman.h
include/asm-alpha/mman.h
+2
-0
include/asm-arm/mman.h
include/asm-arm/mman.h
+2
-0
include/asm-arm26/mman.h
include/asm-arm26/mman.h
+2
-0
include/asm-cris/mman.h
include/asm-cris/mman.h
+2
-0
include/asm-h8300/mman.h
include/asm-h8300/mman.h
+2
-0
include/asm-i386/mman.h
include/asm-i386/mman.h
+4
-0
include/asm-ia64/mman.h
include/asm-ia64/mman.h
+2
-0
include/asm-m68k/mman.h
include/asm-m68k/mman.h
+2
-0
include/asm-mips/mman.h
include/asm-mips/mman.h
+2
-0
include/asm-parisc/mman.h
include/asm-parisc/mman.h
+2
-0
include/asm-ppc/mman.h
include/asm-ppc/mman.h
+2
-0
include/asm-ppc64/mman.h
include/asm-ppc64/mman.h
+2
-0
include/asm-s390/mman.h
include/asm-s390/mman.h
+2
-0
include/asm-sh/mman.h
include/asm-sh/mman.h
+2
-0
include/asm-sparc/mman.h
include/asm-sparc/mman.h
+2
-0
include/asm-sparc64/mman.h
include/asm-sparc64/mman.h
+2
-0
include/asm-v850/mman.h
include/asm-v850/mman.h
+2
-0
include/asm-x86_64/mman.h
include/asm-x86_64/mman.h
+2
-0
mm/mprotect.c
mm/mprotect.c
+23
-1
No files found.
drivers/char/drm/Kconfig
View file @
da501825
...
@@ -75,9 +75,9 @@ config DRM_MGA
...
@@ -75,9 +75,9 @@ config DRM_MGA
config DRM_SIS
config DRM_SIS
tristate "SiS video cards"
tristate "SiS video cards"
depends on DRM && AGP
&& FB_SIS
depends on DRM && AGP
help
help
Choose this option if you have a SiS 630 or compatibel video
Choose this option if you have a SiS 630 or compatibel video
chipset. If M is selected the module will be called sis. AGP
chipset. If M is selected the module will be called sis. AGP
and SiS FB
support is required for this driver to work.
support is required for this driver to work.
drivers/char/drm/drmP.h
View file @
da501825
...
@@ -551,7 +551,7 @@ typedef struct drm_device_dma {
...
@@ -551,7 +551,7 @@ typedef struct drm_device_dma {
*/
*/
typedef
struct
drm_agp_mem
{
typedef
struct
drm_agp_mem
{
unsigned
long
handle
;
/**< handle */
unsigned
long
handle
;
/**< handle */
struct
agp_memory
*
memory
;
DRM_AGP_MEM
*
memory
;
unsigned
long
bound
;
/**< address */
unsigned
long
bound
;
/**< address */
int
pages
;
int
pages
;
struct
drm_agp_mem
*
prev
;
/**< previous entry */
struct
drm_agp_mem
*
prev
;
/**< previous entry */
...
@@ -564,7 +564,7 @@ typedef struct drm_agp_mem {
...
@@ -564,7 +564,7 @@ typedef struct drm_agp_mem {
* \sa DRM(agp_init)() and drm_device::agp.
* \sa DRM(agp_init)() and drm_device::agp.
*/
*/
typedef
struct
drm_agp_head
{
typedef
struct
drm_agp_head
{
struct
agp_kern_info
agp_info
;
/**< AGP device information */
DRM_AGP_KERN
agp_info
;
/**< AGP device information */
drm_agp_mem_t
*
memory
;
/**< memory entries */
drm_agp_mem_t
*
memory
;
/**< memory entries */
unsigned
long
mode
;
/**< AGP mode */
unsigned
long
mode
;
/**< AGP mode */
int
enabled
;
/**< whether the AGP bus as been enabled */
int
enabled
;
/**< whether the AGP bus as been enabled */
...
@@ -797,10 +797,10 @@ extern void *DRM(ioremap_nocache)(unsigned long offset, unsigned long size,
...
@@ -797,10 +797,10 @@ extern void *DRM(ioremap_nocache)(unsigned long offset, unsigned long size,
extern
void
DRM
(
ioremapfree
)(
void
*
pt
,
unsigned
long
size
,
drm_device_t
*
dev
);
extern
void
DRM
(
ioremapfree
)(
void
*
pt
,
unsigned
long
size
,
drm_device_t
*
dev
);
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
extern
struct
agp_memory
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
);
extern
DRM_AGP_MEM
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
);
extern
int
DRM
(
free_agp
)(
struct
agp_memory
*
handle
,
int
pages
);
extern
int
DRM
(
free_agp
)(
DRM_AGP_MEM
*
handle
,
int
pages
);
extern
int
DRM
(
bind_agp
)(
struct
agp_memory
*
handle
,
unsigned
int
start
);
extern
int
DRM
(
bind_agp
)(
DRM_AGP_MEM
*
handle
,
unsigned
int
start
);
extern
int
DRM
(
unbind_agp
)(
struct
agp_memory
*
handle
);
extern
int
DRM
(
unbind_agp
)(
DRM_AGP_MEM
*
handle
);
#endif
#endif
/* Misc. IOCTL support (drm_ioctl.h) */
/* Misc. IOCTL support (drm_ioctl.h) */
...
@@ -905,8 +905,7 @@ extern int DRM(control)( struct inode *inode, struct file *filp,
...
@@ -905,8 +905,7 @@ extern int DRM(control)( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
);
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
DRM
(
irq_install
)(
drm_device_t
*
dev
,
int
irq
);
extern
int
DRM
(
irq_install
)(
drm_device_t
*
dev
,
int
irq
);
extern
int
DRM
(
irq_uninstall
)(
drm_device_t
*
dev
);
extern
int
DRM
(
irq_uninstall
)(
drm_device_t
*
dev
);
extern
irqreturn_t
DRM
(
dma_service
)(
int
irq
,
void
*
device
,
extern
irqreturn_t
DRM
(
dma_service
)(
DRM_IRQ_ARGS
);
struct
pt_regs
*
regs
);
extern
void
DRM
(
driver_irq_preinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_preinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_postinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_postinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_uninstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_uninstall
)(
drm_device_t
*
dev
);
...
@@ -944,10 +943,10 @@ extern int DRM(agp_unbind)(struct inode *inode, struct file *filp,
...
@@ -944,10 +943,10 @@ extern int DRM(agp_unbind)(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
);
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
DRM
(
agp_bind
)(
struct
inode
*
inode
,
struct
file
*
filp
,
extern
int
DRM
(
agp_bind
)(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
unsigned
int
cmd
,
unsigned
long
arg
);
extern
struct
agp_memory
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
);
extern
DRM_AGP_MEM
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
);
extern
int
DRM
(
agp_free_memory
)(
struct
agp_memory
*
handle
);
extern
int
DRM
(
agp_free_memory
)(
DRM_AGP_MEM
*
handle
);
extern
int
DRM
(
agp_bind_memory
)(
struct
agp_memory
*
handle
,
off_t
start
);
extern
int
DRM
(
agp_bind_memory
)(
DRM_AGP_MEM
*
handle
,
off_t
start
);
extern
int
DRM
(
agp_unbind_memory
)(
struct
agp_memory
*
handle
);
extern
int
DRM
(
agp_unbind_memory
)(
DRM_AGP_MEM
*
handle
);
#endif
#endif
/* Stub support (drm_stub.h) */
/* Stub support (drm_stub.h) */
...
...
drivers/char/drm/drm_agpsupport.h
View file @
da501825
...
@@ -62,7 +62,7 @@ int DRM(agp_info)(struct inode *inode, struct file *filp,
...
@@ -62,7 +62,7 @@ int DRM(agp_info)(struct inode *inode, struct file *filp,
{
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
dev
;
struct
agp_kern_info
*
kern
;
DRM_AGP_KERN
*
kern
;
drm_agp_info_t
info
;
drm_agp_info_t
info
;
if
(
!
dev
->
agp
||
!
dev
->
agp
->
acquired
||
!
drm_agp
->
copy_info
)
if
(
!
dev
->
agp
||
!
dev
->
agp
->
acquired
||
!
drm_agp
->
copy_info
)
...
@@ -198,7 +198,7 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp,
...
@@ -198,7 +198,7 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp,
drm_device_t
*
dev
=
priv
->
dev
;
drm_device_t
*
dev
=
priv
->
dev
;
drm_agp_buffer_t
request
;
drm_agp_buffer_t
request
;
drm_agp_mem_t
*
entry
;
drm_agp_mem_t
*
entry
;
struct
agp_memory
*
memory
;
DRM_AGP_MEM
*
memory
;
unsigned
long
pages
;
unsigned
long
pages
;
u32
type
;
u32
type
;
...
@@ -429,7 +429,7 @@ void DRM(agp_uninit)(void)
...
@@ -429,7 +429,7 @@ void DRM(agp_uninit)(void)
}
}
/** Calls drm_agp->allocate_memory() */
/** Calls drm_agp->allocate_memory() */
struct
agp_memory
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
)
DRM_AGP_MEM
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
)
{
{
if
(
!
drm_agp
->
allocate_memory
)
if
(
!
drm_agp
->
allocate_memory
)
return
NULL
;
return
NULL
;
...
@@ -437,7 +437,7 @@ struct agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type)
...
@@ -437,7 +437,7 @@ struct agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type)
}
}
/** Calls drm_agp->free_memory() */
/** Calls drm_agp->free_memory() */
int
DRM
(
agp_free_memory
)(
struct
agp_memory
*
handle
)
int
DRM
(
agp_free_memory
)(
DRM_AGP_MEM
*
handle
)
{
{
if
(
!
handle
||
!
drm_agp
->
free_memory
)
if
(
!
handle
||
!
drm_agp
->
free_memory
)
return
0
;
return
0
;
...
@@ -446,7 +446,7 @@ int DRM(agp_free_memory)(struct agp_memory *handle)
...
@@ -446,7 +446,7 @@ int DRM(agp_free_memory)(struct agp_memory *handle)
}
}
/** Calls drm_agp->bind_memory() */
/** Calls drm_agp->bind_memory() */
int
DRM
(
agp_bind_memory
)(
struct
agp_memory
*
handle
,
off_t
start
)
int
DRM
(
agp_bind_memory
)(
DRM_AGP_MEM
*
handle
,
off_t
start
)
{
{
if
(
!
handle
||
!
drm_agp
->
bind_memory
)
if
(
!
handle
||
!
drm_agp
->
bind_memory
)
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -454,7 +454,7 @@ int DRM(agp_bind_memory)(struct agp_memory *handle, off_t start)
...
@@ -454,7 +454,7 @@ int DRM(agp_bind_memory)(struct agp_memory *handle, off_t start)
}
}
/** Calls drm_agp->unbind_memory() */
/** Calls drm_agp->unbind_memory() */
int
DRM
(
agp_unbind_memory
)(
struct
agp_memory
*
handle
)
int
DRM
(
agp_unbind_memory
)(
DRM_AGP_MEM
*
handle
)
{
{
if
(
!
handle
||
!
drm_agp
->
unbind_memory
)
if
(
!
handle
||
!
drm_agp
->
unbind_memory
)
return
-
EINVAL
;
return
-
EINVAL
;
...
...
drivers/char/drm/drm_memory.h
View file @
da501825
...
@@ -333,25 +333,25 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
...
@@ -333,25 +333,25 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
/** Wrapper around agp_allocate_memory() */
/** Wrapper around agp_allocate_memory() */
struct
agp_memory
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
DRM_AGP_MEM
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
{
{
return
DRM
(
agp_allocate_memory
)(
pages
,
type
);
return
DRM
(
agp_allocate_memory
)(
pages
,
type
);
}
}
/** Wrapper around agp_free_memory() */
/** Wrapper around agp_free_memory() */
int
DRM
(
free_agp
)(
struct
agp_memory
*
handle
,
int
pages
)
int
DRM
(
free_agp
)(
DRM_AGP_MEM
*
handle
,
int
pages
)
{
{
return
DRM
(
agp_free_memory
)(
handle
)
?
0
:
-
EINVAL
;
return
DRM
(
agp_free_memory
)(
handle
)
?
0
:
-
EINVAL
;
}
}
/** Wrapper around agp_bind_memory() */
/** Wrapper around agp_bind_memory() */
int
DRM
(
bind_agp
)(
struct
agp_memory
*
handle
,
unsigned
int
start
)
int
DRM
(
bind_agp
)(
DRM_AGP_MEM
*
handle
,
unsigned
int
start
)
{
{
return
DRM
(
agp_bind_memory
)(
handle
,
start
);
return
DRM
(
agp_bind_memory
)(
handle
,
start
);
}
}
/** Wrapper around agp_unbind_memory() */
/** Wrapper around agp_unbind_memory() */
int
DRM
(
unbind_agp
)(
struct
agp_memory
*
handle
)
int
DRM
(
unbind_agp
)(
DRM_AGP_MEM
*
handle
)
{
{
return
DRM
(
agp_unbind_memory
)(
handle
);
return
DRM
(
agp_unbind_memory
)(
handle
);
}
}
...
...
drivers/char/drm/drm_memory_debug.h
View file @
da501825
...
@@ -353,9 +353,9 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
...
@@ -353,9 +353,9 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
#if __REALLY_HAVE_AGP
#if __REALLY_HAVE_AGP
agp_memory
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
DRM_AGP_MEM
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
{
{
agp_memory
*
handle
;
DRM_AGP_MEM
*
handle
;
if
(
!
pages
)
{
if
(
!
pages
)
{
DRM_MEM_ERROR
(
DRM_MEM_TOTALAGP
,
"Allocating 0 pages
\n
"
);
DRM_MEM_ERROR
(
DRM_MEM_TOTALAGP
,
"Allocating 0 pages
\n
"
);
...
@@ -376,7 +376,7 @@ agp_memory *DRM(alloc_agp)(int pages, u32 type)
...
@@ -376,7 +376,7 @@ agp_memory *DRM(alloc_agp)(int pages, u32 type)
return
NULL
;
return
NULL
;
}
}
int
DRM
(
free_agp
)(
agp_memory
*
handle
,
int
pages
)
int
DRM
(
free_agp
)(
DRM_AGP_MEM
*
handle
,
int
pages
)
{
{
int
alloc_count
;
int
alloc_count
;
int
free_count
;
int
free_count
;
...
@@ -405,7 +405,7 @@ int DRM(free_agp)(agp_memory *handle, int pages)
...
@@ -405,7 +405,7 @@ int DRM(free_agp)(agp_memory *handle, int pages)
return
retval
;
return
retval
;
}
}
int
DRM
(
bind_agp
)(
agp_memory
*
handle
,
unsigned
int
start
)
int
DRM
(
bind_agp
)(
DRM_AGP_MEM
*
handle
,
unsigned
int
start
)
{
{
int
retcode
=
-
EINVAL
;
int
retcode
=
-
EINVAL
;
...
@@ -429,7 +429,7 @@ int DRM(bind_agp)(agp_memory *handle, unsigned int start)
...
@@ -429,7 +429,7 @@ int DRM(bind_agp)(agp_memory *handle, unsigned int start)
return
retcode
;
return
retcode
;
}
}
int
DRM
(
unbind_agp
)(
agp_memory
*
handle
)
int
DRM
(
unbind_agp
)(
DRM_AGP_MEM
*
handle
)
{
{
int
alloc_count
;
int
alloc_count
;
int
free_count
;
int
free_count
;
...
...
drivers/char/drm/drm_os_linux.h
View file @
da501825
...
@@ -33,8 +33,13 @@
...
@@ -33,8 +33,13 @@
#define DRM_DEVICE drm_file_t *priv = filp->private_data; \
#define DRM_DEVICE drm_file_t *priv = filp->private_data; \
drm_device_t *dev = priv->dev
drm_device_t *dev = priv->dev
/** IRQ handler arguments */
/** IRQ handler arguments
and return type and values
*/
#define DRM_IRQ_ARGS int irq, void *arg, struct pt_regs *regs
#define DRM_IRQ_ARGS int irq, void *arg, struct pt_regs *regs
/** AGP types */
#define DRM_AGP_MEM struct agp_memory
#define DRM_AGP_KERN struct agp_kern_info
/** Task queue handler arguments */
/** Task queue handler arguments */
#define DRM_TASKQUEUE_ARGS void *arg
#define DRM_TASKQUEUE_ARGS void *arg
...
...
drivers/char/drm/gamma_dma.c
View file @
da501825
...
@@ -116,13 +116,14 @@ static inline int gamma_dma_is_ready(drm_device_t *dev)
...
@@ -116,13 +116,14 @@ static inline int gamma_dma_is_ready(drm_device_t *dev)
return
(
!
GAMMA_READ
(
GAMMA_DMACOUNT
));
return
(
!
GAMMA_READ
(
GAMMA_DMACOUNT
));
}
}
irqreturn_t
gamma_dma_service
(
int
irq
,
void
*
device
,
struct
pt_regs
*
regs
)
irqreturn_t
gamma_dma_service
(
DRM_IRQ_ARGS
)
{
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
device
;
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_gamma_private_t
*
dev_priv
=
drm_gamma_private_t
*
dev_priv
=
(
drm_gamma_private_t
*
)
dev
->
dev_private
;
(
drm_gamma_private_t
*
)
dev
->
dev_private
;
/* FIXME: should check whether we're actually interested in the interrupt? */
atomic_inc
(
&
dev
->
counts
[
6
]);
/* _DRM_STAT_IRQ */
atomic_inc
(
&
dev
->
counts
[
6
]);
/* _DRM_STAT_IRQ */
while
(
GAMMA_READ
(
GAMMA_INFIFOSPACE
)
<
3
)
while
(
GAMMA_READ
(
GAMMA_INFIFOSPACE
)
<
3
)
...
...
drivers/char/drm/i830_irq.c
View file @
da501825
...
@@ -35,9 +35,9 @@
...
@@ -35,9 +35,9 @@
#include <linux/delay.h>
#include <linux/delay.h>
irqreturn_t
DRM
(
dma_service
)(
int
irq
,
void
*
device
,
struct
pt_regs
*
regs
)
irqreturn_t
DRM
(
dma_service
)(
DRM_IRQ_ARGS
)
{
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
device
;
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
u16
temp
;
u16
temp
;
...
...
drivers/char/drm/sis.h
View file @
da501825
...
@@ -33,7 +33,11 @@
...
@@ -33,7 +33,11 @@
* Name it sisdrv_##x as there's a conflict with sis_free/malloc in the kernel
* Name it sisdrv_##x as there's a conflict with sis_free/malloc in the kernel
* that's used for fb devices
* that's used for fb devices
*/
*/
#ifdef __linux__
#define DRM(x) sisdrv_##x
#define DRM(x) sisdrv_##x
#else
#define DRM(x) sis_##x
#endif
/* General customization:
/* General customization:
*/
*/
...
@@ -45,25 +49,18 @@
...
@@ -45,25 +49,18 @@
#define DRIVER_AUTHOR "SIS"
#define DRIVER_AUTHOR "SIS"
#define DRIVER_NAME "sis"
#define DRIVER_NAME "sis"
#define DRIVER_DESC "SIS 300/630/540"
#define DRIVER_DESC "SIS 300/630/540"
#define DRIVER_DATE
"20010503
"
#define DRIVER_DATE
"20030826
"
#define DRIVER_MAJOR 1
#define DRIVER_MAJOR 1
#define DRIVER_MINOR
0
#define DRIVER_MINOR
1
#define DRIVER_PATCHLEVEL 0
#define DRIVER_PATCHLEVEL 0
#define DRIVER_IOCTLS \
#define DRIVER_IOCTLS \
[DRM_IOCTL_NR(SIS_IOCTL_FB_ALLOC)] = { sis_fb_alloc, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_FB_ALLOC)] = { sis_fb_alloc, 1, 0 }, \
[DRM_IOCTL_NR(SIS_IOCTL_FB_FREE)] = { sis_fb_free, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_FB_FREE)] = { sis_fb_free, 1, 0 }, \
/* AGP Memory Management */
\
[DRM_IOCTL_NR(DRM_IOCTL_SIS_AGP_INIT)] = { sis_ioctl_agp_init, 1, 1 }, \
[DRM_IOCTL_NR(SIS_IOCTL_AGP_INIT)] = { sisp_agp_init, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_AGP_ALLOC)] = { sis_ioctl_agp_alloc, 1, 0 }, \
[DRM_IOCTL_NR(SIS_IOCTL_AGP_ALLOC)] = { sisp_agp_alloc, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_AGP_FREE)] = { sis_ioctl_agp_free, 1, 0 }, \
[DRM_IOCTL_NR(SIS_IOCTL_AGP_FREE)] = { sisp_agp_free, 1, 0 }
[DRM_IOCTL_NR(DRM_IOCTL_SIS_FB_INIT)] = { sis_fb_init, 1, 1 }
#if 0 /* these don't appear to be defined */
/* SIS Stereo */
[DRM_IOCTL_NR(DRM_IOCTL_CONTROL)] = { sis_control, 1, 1 },
[DRM_IOCTL_NR(SIS_IOCTL_FLIP)] = { sis_flip, 1, 1 },
[DRM_IOCTL_NR(SIS_IOCTL_FLIP_INIT)] = { sis_flip_init, 1, 1 },
[DRM_IOCTL_NR(SIS_IOCTL_FLIP_FINAL)] = { sis_flip_final, 1, 1 }
#endif
#define __HAVE_COUNTERS 5
#define __HAVE_COUNTERS 5
...
...
drivers/char/drm/sis_drm.h
View file @
da501825
#ifndef _
sis_drm_public_h
_
#ifndef _
_SIS_DRM_H_
_
#define _
sis_drm_public_h
_
#define _
_SIS_DRM_H_
_
/* SiS specific ioctls */
/* SiS specific ioctls */
#define SIS_IOCTL_FB_ALLOC DRM_IOWR(0x44, drm_sis_mem_t)
#define DRM_IOCTL_SIS_FB_ALLOC DRM_IOWR(0x44, drm_sis_mem_t)
#define SIS_IOCTL_FB_FREE DRM_IOW( 0x45, drm_sis_mem_t)
#define DRM_IOCTL_SIS_FB_FREE DRM_IOW( 0x45, drm_sis_mem_t)
#define SIS_IOCTL_AGP_INIT DRM_IOWR(0x53, drm_sis_agp_t)
#define DRM_IOCTL_SIS_AGP_INIT DRM_IOWR(0x53, drm_sis_agp_t)
#define SIS_IOCTL_AGP_ALLOC DRM_IOWR(0x54, drm_sis_mem_t)
#define DRM_IOCTL_SIS_AGP_ALLOC DRM_IOWR(0x54, drm_sis_mem_t)
#define SIS_IOCTL_AGP_FREE DRM_IOW( 0x55, drm_sis_mem_t)
#define DRM_IOCTL_SIS_AGP_FREE DRM_IOW( 0x55, drm_sis_mem_t)
#define SIS_IOCTL_FLIP DRM_IOW( 0x48, drm_sis_flip_t)
#define DRM_IOCTL_SIS_FB_INIT DRM_IOW( 0x56, drm_sis_fb_t)
#define SIS_IOCTL_FLIP_INIT DRM_IO( 0x49)
/*
#define SIS_IOCTL_FLIP_FINAL DRM_IO( 0x50)
#define DRM_IOCTL_SIS_FLIP DRM_IOW( 0x48, drm_sis_flip_t)
#define DRM_IOCTL_SIS_FLIP_INIT DRM_IO( 0x49)
#define DRM_IOCTL_SIS_FLIP_FINAL DRM_IO( 0x50)
*/
typedef
struct
{
typedef
struct
{
int
context
;
int
context
;
unsigned
int
offset
;
unsigned
int
offset
;
unsigned
int
size
;
unsigned
int
size
;
unsigned
int
free
;
unsigned
long
free
;
}
drm_sis_mem_t
;
}
drm_sis_mem_t
;
typedef
struct
{
typedef
struct
{
...
@@ -24,23 +27,7 @@ typedef struct {
...
@@ -24,23 +27,7 @@ typedef struct {
}
drm_sis_agp_t
;
}
drm_sis_agp_t
;
typedef
struct
{
typedef
struct
{
unsigned
int
left
,
right
;
unsigned
int
offset
,
size
;
}
drm_sis_flip_t
;
}
drm_sis_fb_t
;
#ifdef __KERNEL__
int
sis_fb_alloc
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sis_fb_free
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sisp_agp_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sisp_agp_alloc
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sisp_agp_free
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
#endif
#endif
#endif
/* __SIS_DRM_H__ */
drivers/char/drm/sis_drv.h
View file @
da501825
...
@@ -28,18 +28,20 @@
...
@@ -28,18 +28,20 @@
#ifndef _SIS_DRV_H_
#ifndef _SIS_DRV_H_
#define _SIS_DRV_H_
#define _SIS_DRV_H_
#include "sis_ds.h"
typedef
struct
drm_sis_private
{
typedef
struct
drm_sis_private
{
drm_map_t
*
buffers
;
drm_map_t
*
buffers
;
}
drm_sis_private_t
;
/* Stereo ? - this was never committed */
memHeap_t
*
AGPHeap
;
memHeap_t
*
FBHeap
;
}
drm_sis_private_t
;
int
sis_flip
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
extern
int
sis_fb_alloc
(
DRM_IOCTL_ARGS
);
unsigned
long
arg
);
extern
int
sis_fb_free
(
DRM_IOCTL_ARGS
);
int
sis_flip_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
extern
int
sis_ioctl_agp_init
(
DRM_IOCTL_ARGS
);
unsigned
long
arg
);
extern
int
sis_ioctl_agp_alloc
(
DRM_IOCTL_ARGS
);
int
sis_flip_final
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
extern
int
sis_ioctl_agp_free
(
DRM_IOCTL_ARGS
);
unsigned
long
arg
);
extern
int
sis_fb_init
(
DRM_IOCTL_ARGS
);
void
flip_final
(
void
);
#endif
#endif
drivers/char/drm/sis_ds.c
View file @
da501825
...
@@ -28,15 +28,9 @@
...
@@ -28,15 +28,9 @@
*
*
*/
*/
#include <linux/module.h>
#include "sis.h"
#include <linux/delay.h>
#include "drmP.h"
#include <linux/errno.h>
#include "drm.h"
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/poll.h>
#include <asm/io.h>
#include <linux/pci.h>
#include "sis_ds.h"
#include "sis_ds.h"
/* Set Data Structure, not check repeated value
/* Set Data Structure, not check repeated value
...
@@ -48,10 +42,10 @@ set_t *setInit(void)
...
@@ -48,10 +42,10 @@ set_t *setInit(void)
int
i
;
int
i
;
set_t
*
set
;
set_t
*
set
;
set
=
(
set_t
*
)
MALLOC
(
sizeof
(
set_t
)
);
set
=
(
set_t
*
)
DRM
(
alloc
)(
sizeof
(
set_t
),
DRM_MEM_DRIVER
);
if
(
set
)
{
if
(
set
!=
NULL
)
{
for
(
i
=
0
;
i
<
SET_SIZE
;
i
++
)
{
for
(
i
=
0
;
i
<
SET_SIZE
;
i
++
)
{
set
->
list
[
i
].
free_next
=
i
+
1
;
set
->
list
[
i
].
free_next
=
i
+
1
;
set
->
list
[
i
].
alloc_next
=
-
1
;
set
->
list
[
i
].
alloc_next
=
-
1
;
}
}
set
->
list
[
SET_SIZE
-
1
].
free_next
=
-
1
;
set
->
list
[
SET_SIZE
-
1
].
free_next
=
-
1
;
...
@@ -66,11 +60,10 @@ int setAdd(set_t *set, ITEM_TYPE item)
...
@@ -66,11 +60,10 @@ int setAdd(set_t *set, ITEM_TYPE item)
{
{
int
free
=
set
->
free
;
int
free
=
set
->
free
;
if
(
free
!=
-
1
)
{
if
(
free
!=
-
1
)
{
set
->
list
[
free
].
val
=
item
;
set
->
list
[
free
].
val
=
item
;
set
->
free
=
set
->
list
[
free
].
free_next
;
set
->
free
=
set
->
list
[
free
].
free_next
;
}
}
else
{
else
{
return
0
;
return
0
;
}
}
...
@@ -86,10 +79,11 @@ int setDel(set_t *set, ITEM_TYPE item)
...
@@ -86,10 +79,11 @@ int setDel(set_t *set, ITEM_TYPE item)
int
alloc
=
set
->
alloc
;
int
alloc
=
set
->
alloc
;
int
prev
=
-
1
;
int
prev
=
-
1
;
while
(
alloc
!=
-
1
){
while
(
alloc
!=
-
1
)
{
if
(
set
->
list
[
alloc
].
val
==
item
){
if
(
set
->
list
[
alloc
].
val
==
item
)
{
if
(
prev
!=
-
1
)
if
(
prev
!=
-
1
)
set
->
list
[
prev
].
alloc_next
=
set
->
list
[
alloc
].
alloc_next
;
set
->
list
[
prev
].
alloc_next
=
set
->
list
[
alloc
].
alloc_next
;
else
else
set
->
alloc
=
set
->
list
[
alloc
].
alloc_next
;
set
->
alloc
=
set
->
list
[
alloc
].
alloc_next
;
break
;
break
;
...
@@ -98,7 +92,7 @@ int setDel(set_t *set, ITEM_TYPE item)
...
@@ -98,7 +92,7 @@ int setDel(set_t *set, ITEM_TYPE item)
alloc
=
set
->
list
[
alloc
].
alloc_next
;
alloc
=
set
->
list
[
alloc
].
alloc_next
;
}
}
if
(
alloc
==
-
1
)
if
(
alloc
==
-
1
)
return
0
;
return
0
;
set
->
list
[
alloc
].
free_next
=
set
->
free
;
set
->
list
[
alloc
].
free_next
=
set
->
free
;
...
@@ -112,7 +106,7 @@ int setDel(set_t *set, ITEM_TYPE item)
...
@@ -112,7 +106,7 @@ int setDel(set_t *set, ITEM_TYPE item)
int
setFirst
(
set_t
*
set
,
ITEM_TYPE
*
item
)
int
setFirst
(
set_t
*
set
,
ITEM_TYPE
*
item
)
{
{
if
(
set
->
alloc
==
-
1
)
if
(
set
->
alloc
==
-
1
)
return
0
;
return
0
;
*
item
=
set
->
list
[
set
->
alloc
].
val
;
*
item
=
set
->
list
[
set
->
alloc
].
val
;
...
@@ -123,7 +117,7 @@ int setFirst(set_t *set, ITEM_TYPE *item)
...
@@ -123,7 +117,7 @@ int setFirst(set_t *set, ITEM_TYPE *item)
int
setNext
(
set_t
*
set
,
ITEM_TYPE
*
item
)
int
setNext
(
set_t
*
set
,
ITEM_TYPE
*
item
)
{
{
if
(
set
->
trace
==
-
1
)
if
(
set
->
trace
==
-
1
)
return
0
;
return
0
;
*
item
=
set
->
list
[
set
->
trace
].
val
;
*
item
=
set
->
list
[
set
->
trace
].
val
;
...
@@ -134,7 +128,7 @@ int setNext(set_t *set, ITEM_TYPE *item)
...
@@ -134,7 +128,7 @@ int setNext(set_t *set, ITEM_TYPE *item)
int
setDestroy
(
set_t
*
set
)
int
setDestroy
(
set_t
*
set
)
{
{
FREE
(
set
);
DRM
(
free
)(
set
,
sizeof
(
set_t
),
DRM_MEM_DRIVER
);
return
1
;
return
1
;
}
}
...
@@ -165,48 +159,16 @@ int setDestroy(set_t *set)
...
@@ -165,48 +159,16 @@ int setDestroy(set_t *set)
#define ISFREE(bptr) ((bptr)->free)
#define ISFREE(bptr) ((bptr)->free)
#define PRINTF(fmt, arg...) do{}while(0)
#define fprintf(fmt, arg...) do{}while(0)
static
void
*
calloc
(
size_t
nmemb
,
size_t
size
)
{
void
*
addr
;
addr
=
kmalloc
(
nmemb
*
size
,
GFP_KERNEL
);
if
(
addr
)
memset
(
addr
,
0
,
nmemb
*
size
);
return
addr
;
}
#define free(n) kfree(n)
void
mmDumpMemInfo
(
memHeap_t
*
heap
)
{
TMemBlock
*
p
;
PRINTF
(
"Memory heap %p:
\n
"
,
heap
);
if
(
heap
==
0
)
{
PRINTF
(
" heap == 0
\n
"
);
}
else
{
p
=
(
TMemBlock
*
)
heap
;
while
(
p
)
{
PRINTF
(
" Offset:%08x, Size:%08x, %c%c
\n
"
,
p
->
ofs
,
p
->
size
,
p
->
free
?
'.'
:
'U'
,
p
->
reserved
?
'R'
:
'.'
);
p
=
p
->
next
;
}
}
PRINTF
(
"End of memory blocks
\n
"
);
}
memHeap_t
*
mmInit
(
int
ofs
,
memHeap_t
*
mmInit
(
int
ofs
,
int
size
)
int
size
)
{
{
PMemBlock
blocks
;
PMemBlock
blocks
;
if
(
size
<=
0
)
{
if
(
size
<=
0
)
return
0
;
return
0
;
}
blocks
=
(
TMemBlock
*
)
calloc
(
1
,
sizeof
(
TMemBlock
)
);
blocks
=
(
TMemBlock
*
)
DRM
(
calloc
)(
1
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
if
(
blocks
)
{
if
(
blocks
!=
NULL
)
{
blocks
->
ofs
=
ofs
;
blocks
->
ofs
=
ofs
;
blocks
->
size
=
size
;
blocks
->
size
=
size
;
blocks
->
free
=
1
;
blocks
->
free
=
1
;
...
@@ -215,6 +177,24 @@ memHeap_t *mmInit(int ofs,
...
@@ -215,6 +177,24 @@ memHeap_t *mmInit(int ofs,
return
0
;
return
0
;
}
}
/* Checks if a pointer 'b' is part of the heap 'heap' */
int
mmBlockInHeap
(
memHeap_t
*
heap
,
PMemBlock
b
)
{
TMemBlock
*
p
;
if
(
heap
==
NULL
||
b
==
NULL
)
return
0
;
p
=
heap
;
while
(
p
!=
NULL
&&
p
!=
b
)
{
p
=
p
->
next
;
}
if
(
p
==
b
)
return
1
;
else
return
0
;
}
/* Kludgey workaround for existing i810 server. Remove soon.
/* Kludgey workaround for existing i810 server. Remove soon.
*/
*/
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
...
@@ -222,23 +202,22 @@ memHeap_t *mmAddRange( memHeap_t *heap,
...
@@ -222,23 +202,22 @@ memHeap_t *mmAddRange( memHeap_t *heap,
int
size
)
int
size
)
{
{
PMemBlock
blocks
;
PMemBlock
blocks
;
blocks
=
(
TMemBlock
*
)
calloc
(
2
,
sizeof
(
TMemBlock
)
);
blocks
=
(
TMemBlock
*
)
DRM
(
calloc
)(
2
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
if
(
blocks
)
{
if
(
blocks
!=
NULL
)
{
blocks
[
0
].
size
=
size
;
blocks
[
0
].
size
=
size
;
blocks
[
0
].
free
=
1
;
blocks
[
0
].
free
=
1
;
blocks
[
0
].
ofs
=
ofs
;
blocks
[
0
].
ofs
=
ofs
;
blocks
[
0
].
next
=
&
blocks
[
1
];
blocks
[
0
].
next
=
&
blocks
[
1
];
/* Discontinuity - stops JoinBlock from trying to join non-adjacent
/* Discontinuity - stops JoinBlock from trying to join
*
ranges.
* non-adjacent
ranges.
*/
*/
blocks
[
1
].
size
=
0
;
blocks
[
1
].
size
=
0
;
blocks
[
1
].
free
=
0
;
blocks
[
1
].
free
=
0
;
blocks
[
1
].
ofs
=
ofs
+
size
;
blocks
[
1
].
ofs
=
ofs
+
size
;
blocks
[
1
].
next
=
(
PMemBlock
)
heap
;
blocks
[
1
].
next
=
(
PMemBlock
)
heap
;
return
(
memHeap_t
*
)
blocks
;
return
(
memHeap_t
*
)
blocks
;
}
}
else
else
return
heap
;
return
heap
;
}
}
...
@@ -250,7 +229,8 @@ static TMemBlock* SliceBlock(TMemBlock *p,
...
@@ -250,7 +229,8 @@ static TMemBlock* SliceBlock(TMemBlock *p,
/* break left */
/* break left */
if
(
startofs
>
p
->
ofs
)
{
if
(
startofs
>
p
->
ofs
)
{
newblock
=
(
TMemBlock
*
)
calloc
(
1
,
sizeof
(
TMemBlock
));
newblock
=
(
TMemBlock
*
)
DRM
(
calloc
)(
1
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
newblock
->
ofs
=
startofs
;
newblock
->
ofs
=
startofs
;
newblock
->
size
=
p
->
size
-
(
startofs
-
p
->
ofs
);
newblock
->
size
=
p
->
size
-
(
startofs
-
p
->
ofs
);
newblock
->
free
=
1
;
newblock
->
free
=
1
;
...
@@ -262,7 +242,8 @@ static TMemBlock* SliceBlock(TMemBlock *p,
...
@@ -262,7 +242,8 @@ static TMemBlock* SliceBlock(TMemBlock *p,
/* break right */
/* break right */
if
(
size
<
p
->
size
)
{
if
(
size
<
p
->
size
)
{
newblock
=
(
TMemBlock
*
)
calloc
(
1
,
sizeof
(
TMemBlock
));
newblock
=
(
TMemBlock
*
)
DRM
(
calloc
)(
1
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
newblock
->
ofs
=
startofs
+
size
;
newblock
->
ofs
=
startofs
+
size
;
newblock
->
size
=
p
->
size
-
size
;
newblock
->
size
=
p
->
size
-
size
;
newblock
->
free
=
1
;
newblock
->
free
=
1
;
...
@@ -280,15 +261,16 @@ static TMemBlock* SliceBlock(TMemBlock *p,
...
@@ -280,15 +261,16 @@ static TMemBlock* SliceBlock(TMemBlock *p,
PMemBlock
mmAllocMem
(
memHeap_t
*
heap
,
int
size
,
int
align2
,
int
startSearch
)
PMemBlock
mmAllocMem
(
memHeap_t
*
heap
,
int
size
,
int
align2
,
int
startSearch
)
{
{
int
mask
,
startofs
,
endofs
;
int
mask
,
startofs
,
endofs
;
TMemBlock
*
p
;
TMemBlock
*
p
;
if
(
!
heap
||
align2
<
0
||
size
<=
0
)
if
(
heap
==
NULL
||
align2
<
0
||
size
<=
0
)
return
NULL
;
return
NULL
;
mask
=
(
1
<<
align2
)
-
1
;
mask
=
(
1
<<
align2
)
-
1
;
startofs
=
0
;
startofs
=
0
;
p
=
(
TMemBlock
*
)
heap
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
)
{
while
(
p
!=
NULL
)
{
if
(
ISFREE
(
p
))
{
if
(
ISFREE
(
p
))
{
startofs
=
(
p
->
ofs
+
mask
)
&
~
mask
;
startofs
=
(
p
->
ofs
+
mask
)
&
~
mask
;
if
(
startofs
<
startSearch
)
{
if
(
startofs
<
startSearch
)
{
...
@@ -300,7 +282,7 @@ PMemBlock mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch)
...
@@ -300,7 +282,7 @@ PMemBlock mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch)
}
}
p
=
p
->
next
;
p
=
p
->
next
;
}
}
if
(
!
p
)
if
(
p
==
NULL
)
return
NULL
;
return
NULL
;
p
=
SliceBlock
(
p
,
startofs
,
size
,
0
,
mask
+
1
);
p
=
SliceBlock
(
p
,
startofs
,
size
,
0
,
mask
+
1
);
p
->
heap
=
heap
;
p
->
heap
=
heap
;
...
@@ -313,7 +295,7 @@ static __inline__ int Join2Blocks(TMemBlock *p)
...
@@ -313,7 +295,7 @@ static __inline__ int Join2Blocks(TMemBlock *p)
TMemBlock
*
q
=
p
->
next
;
TMemBlock
*
q
=
p
->
next
;
p
->
size
+=
q
->
size
;
p
->
size
+=
q
->
size
;
p
->
next
=
q
->
next
;
p
->
next
=
q
->
next
;
free
(
q
);
DRM
(
free
)(
q
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
return
1
;
return
1
;
}
}
return
0
;
return
0
;
...
@@ -321,29 +303,22 @@ static __inline__ int Join2Blocks(TMemBlock *p)
...
@@ -321,29 +303,22 @@ static __inline__ int Join2Blocks(TMemBlock *p)
int
mmFreeMem
(
PMemBlock
b
)
int
mmFreeMem
(
PMemBlock
b
)
{
{
TMemBlock
*
p
,
*
prev
;
TMemBlock
*
p
,
*
prev
;
if
(
!
b
)
if
(
b
==
NULL
)
return
0
;
return
0
;
if
(
!
b
->
heap
)
{
if
(
b
->
heap
==
NULL
)
fprintf
(
stderr
,
"no heap
\n
"
);
return
-
1
;
return
-
1
;
}
p
=
b
->
heap
;
p
=
b
->
heap
;
prev
=
NULL
;
prev
=
NULL
;
while
(
p
&&
p
!=
b
)
{
while
(
p
!=
NULL
&&
p
!=
b
)
{
prev
=
p
;
prev
=
p
;
p
=
p
->
next
;
p
=
p
->
next
;
}
}
if
(
!
p
||
p
->
free
||
p
->
reserved
)
{
if
(
p
==
NULL
||
p
->
free
||
p
->
reserved
)
if
(
!
p
)
fprintf
(
stderr
,
"block not found in heap
\n
"
);
else
if
(
p
->
free
)
fprintf
(
stderr
,
"block already free
\n
"
);
else
fprintf
(
stderr
,
"block is reserved
\n
"
);
return
-
1
;
return
-
1
;
}
p
->
free
=
1
;
p
->
free
=
1
;
Join2Blocks
(
p
);
Join2Blocks
(
p
);
if
(
prev
)
if
(
prev
)
...
@@ -356,9 +331,10 @@ int mmReserveMem(memHeap_t *heap, int offset,int size)
...
@@ -356,9 +331,10 @@ int mmReserveMem(memHeap_t *heap, int offset,int size)
int
endofs
;
int
endofs
;
TMemBlock
*
p
;
TMemBlock
*
p
;
if
(
!
heap
||
size
<=
0
)
if
(
heap
==
NULL
||
size
<=
0
)
return
-
1
;
return
-
1
;
endofs
=
offset
+
size
;
endofs
=
offset
+
size
;
p
=
(
TMemBlock
*
)
heap
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
&&
p
->
ofs
<=
offset
)
{
while
(
p
&&
p
->
ofs
<=
offset
)
{
if
(
ISFREE
(
p
)
&&
endofs
<=
(
p
->
ofs
+
p
->
size
))
{
if
(
ISFREE
(
p
)
&&
endofs
<=
(
p
->
ofs
+
p
->
size
))
{
...
@@ -374,20 +350,22 @@ int mmFreeReserved(memHeap_t *heap, int offset)
...
@@ -374,20 +350,22 @@ int mmFreeReserved(memHeap_t *heap, int offset)
{
{
TMemBlock
*
p
,
*
prev
;
TMemBlock
*
p
,
*
prev
;
if
(
!
heap
)
if
(
heap
==
NULL
)
return
-
1
;
return
-
1
;
p
=
(
TMemBlock
*
)
heap
;
p
=
(
TMemBlock
*
)
heap
;
prev
=
NULL
;
prev
=
NULL
;
while
(
p
&&
p
->
ofs
!=
offset
)
{
while
(
p
!=
NULL
&&
p
->
ofs
!=
offset
)
{
prev
=
p
;
prev
=
p
;
p
=
p
->
next
;
p
=
p
->
next
;
}
}
if
(
!
p
||
!
p
->
reserved
)
if
(
p
==
NULL
||
!
p
->
reserved
)
return
-
1
;
return
-
1
;
p
->
free
=
1
;
p
->
free
=
1
;
p
->
reserved
=
0
;
p
->
reserved
=
0
;
Join2Blocks
(
p
);
Join2Blocks
(
p
);
if
(
prev
)
if
(
prev
!=
NULL
)
Join2Blocks
(
prev
);
Join2Blocks
(
prev
);
return
0
;
return
0
;
}
}
...
@@ -396,12 +374,13 @@ void mmDestroy(memHeap_t *heap)
...
@@ -396,12 +374,13 @@ void mmDestroy(memHeap_t *heap)
{
{
TMemBlock
*
p
,
*
q
;
TMemBlock
*
p
,
*
q
;
if
(
!
heap
)
if
(
heap
==
NULL
)
return
;
return
;
p
=
(
TMemBlock
*
)
heap
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
)
{
while
(
p
!=
NULL
)
{
q
=
p
->
next
;
q
=
p
->
next
;
free
(
p
);
DRM
(
free
)(
p
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
p
=
q
;
p
=
q
;
}
}
}
}
drivers/char/drm/sis_ds.h
View file @
da501825
...
@@ -28,14 +28,12 @@
...
@@ -28,14 +28,12 @@
*
*
*/
*/
#ifndef _
sis_ds_h
_
#ifndef _
_SIS_DS_H_
_
#define _
sis_ds_h
_
#define _
_SIS_DS_H_
_
/* Set Data Structure */
/* Set Data Structure */
#define SET_SIZE 5000
#define SET_SIZE 5000
#define MALLOC(s) kmalloc(s, GFP_KERNEL)
#define FREE(s) kfree(s)
typedef
unsigned
int
ITEM_TYPE
;
typedef
unsigned
int
ITEM_TYPE
;
...
@@ -58,8 +56,6 @@ int setFirst(set_t *set, ITEM_TYPE *item);
...
@@ -58,8 +56,6 @@ int setFirst(set_t *set, ITEM_TYPE *item);
int
setNext
(
set_t
*
set
,
ITEM_TYPE
*
item
);
int
setNext
(
set_t
*
set
,
ITEM_TYPE
*
item
);
int
setDestroy
(
set_t
*
set
);
int
setDestroy
(
set_t
*
set
);
#endif
/*
/*
* GLX Hardware Device Driver common code
* GLX Hardware Device Driver common code
* Copyright (C) 1999 Keith Whitwell
* Copyright (C) 1999 Keith Whitwell
...
@@ -84,9 +80,6 @@ int setDestroy(set_t *set);
...
@@ -84,9 +80,6 @@ int setDestroy(set_t *set);
*
*
*/
*/
#ifndef MM_INC
#define MM_INC
struct
mem_block_t
{
struct
mem_block_t
{
struct
mem_block_t
*
next
;
struct
mem_block_t
*
next
;
struct
mem_block_t
*
heap
;
struct
mem_block_t
*
heap
;
...
@@ -102,13 +95,19 @@ typedef struct mem_block_t *PMemBlock;
...
@@ -102,13 +95,19 @@ typedef struct mem_block_t *PMemBlock;
typedef
struct
mem_block_t
memHeap_t
;
typedef
struct
mem_block_t
memHeap_t
;
static
__inline__
int
mmBlockSize
(
PMemBlock
b
)
static
__inline__
int
mmBlockSize
(
PMemBlock
b
)
{
return
b
->
size
;
}
{
return
b
->
size
;
}
static
__inline__
int
mmOffset
(
PMemBlock
b
)
static
__inline__
int
mmOffset
(
PMemBlock
b
)
{
return
b
->
ofs
;
}
{
return
b
->
ofs
;
}
static
__inline__
void
mmMarkReserved
(
PMemBlock
b
)
static
__inline__
void
mmMarkReserved
(
PMemBlock
b
)
{
b
->
reserved
=
1
;
}
{
b
->
reserved
=
1
;
}
/*
/*
* input: total size in bytes
* input: total size in bytes
...
@@ -116,13 +115,10 @@ static __inline__ void mmMarkReserved(PMemBlock b)
...
@@ -116,13 +115,10 @@ static __inline__ void mmMarkReserved(PMemBlock b)
*/
*/
memHeap_t
*
mmInit
(
int
ofs
,
int
size
);
memHeap_t
*
mmInit
(
int
ofs
,
int
size
);
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
int
ofs
,
int
ofs
,
int
size
);
int
size
);
/*
/*
* Allocate 'size' bytes with 2^align2 bytes alignment,
* Allocate 'size' bytes with 2^align2 bytes alignment,
* restrict the search to free memory after 'startSearch'
* restrict the search to free memory after 'startSearch'
...
@@ -135,6 +131,11 @@ memHeap_t *mmAddRange( memHeap_t *heap,
...
@@ -135,6 +131,11 @@ memHeap_t *mmAddRange( memHeap_t *heap,
*/
*/
PMemBlock
mmAllocMem
(
memHeap_t
*
heap
,
int
size
,
int
align2
,
int
startSearch
);
PMemBlock
mmAllocMem
(
memHeap_t
*
heap
,
int
size
,
int
align2
,
int
startSearch
);
/*
* Returns 1 if the block 'b' is part of the heap 'heap'
*/
int
mmBlockInHeap
(
PMemBlock
heap
,
PMemBlock
b
);
/*
/*
* Free block starts at offset
* Free block starts at offset
* input: pointer to a block
* input: pointer to a block
...
@@ -160,4 +161,4 @@ void mmDestroy( memHeap_t *mmInit );
...
@@ -160,4 +161,4 @@ void mmDestroy( memHeap_t *mmInit );
/* For debuging purpose. */
/* For debuging purpose. */
void
mmDumpMemInfo
(
memHeap_t
*
mmInit
);
void
mmDumpMemInfo
(
memHeap_t
*
mmInit
);
#endif
#endif
/* __SIS_DS_H__ */
drivers/char/drm/sis_mm.c
View file @
da501825
This diff is collapsed.
Click to expand it.
include/asm-alpha/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-arm/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-arm26/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-cris/mman.h
View file @
da501825
...
@@ -8,6 +8,8 @@
...
@@ -8,6 +8,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-h8300/mman.h
View file @
da501825
...
@@ -5,6 +5,8 @@
...
@@ -5,6 +5,8 @@
#define PROT_WRITE 0x2
/* page can be written */
#define PROT_WRITE 0x2
/* page can be written */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-i386/mman.h
View file @
da501825
...
@@ -6,6 +6,10 @@
...
@@ -6,6 +6,10 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-ia64/mman.h
View file @
da501825
...
@@ -11,6 +11,8 @@
...
@@ -11,6 +11,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-m68k/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-mips/mman.h
View file @
da501825
...
@@ -20,6 +20,8 @@
...
@@ -20,6 +20,8 @@
#define PROT_EXEC 0x04
/* page can be executed */
#define PROT_EXEC 0x04
/* page can be executed */
/* 0x08 reserved for PROT_EXEC_NOFLUSH */
/* 0x08 reserved for PROT_EXEC_NOFLUSH */
#define PROT_SEM 0x10
/* page may be used for atomic ops */
#define PROT_SEM 0x10
/* page may be used for atomic ops */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
/*
/*
* Flags for mmap
* Flags for mmap
...
...
include/asm-parisc/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-ppc/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-ppc64/mman.h
View file @
da501825
...
@@ -13,6 +13,8 @@
...
@@ -13,6 +13,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-s390/mman.h
View file @
da501825
...
@@ -14,6 +14,8 @@
...
@@ -14,6 +14,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-sh/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-sparc/mman.h
View file @
da501825
...
@@ -9,6 +9,8 @@
...
@@ -9,6 +9,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-sparc64/mman.h
View file @
da501825
...
@@ -9,6 +9,8 @@
...
@@ -9,6 +9,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-v850/mman.h
View file @
da501825
...
@@ -5,6 +5,8 @@
...
@@ -5,6 +5,8 @@
#define PROT_WRITE 0x2
/* page can be written */
#define PROT_WRITE 0x2
/* page can be written */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-x86_64/mman.h
View file @
da501825
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_SEM 0x8
#define PROT_SEM 0x8
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
mm/mprotect.c
View file @
da501825
...
@@ -227,6 +227,10 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot)
...
@@ -227,6 +227,10 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot)
unsigned
long
vm_flags
,
nstart
,
end
,
tmp
;
unsigned
long
vm_flags
,
nstart
,
end
,
tmp
;
struct
vm_area_struct
*
vma
,
*
next
,
*
prev
;
struct
vm_area_struct
*
vma
,
*
next
,
*
prev
;
int
error
=
-
EINVAL
;
int
error
=
-
EINVAL
;
const
int
grows
=
prot
&
(
PROT_GROWSDOWN
|
PROT_GROWSUP
);
prot
&=
~
(
PROT_GROWSDOWN
|
PROT_GROWSUP
);
if
(
grows
==
(
PROT_GROWSDOWN
|
PROT_GROWSUP
))
/* can't be both */
return
-
EINVAL
;
if
(
start
&
~
PAGE_MASK
)
if
(
start
&
~
PAGE_MASK
)
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -245,8 +249,26 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot)
...
@@ -245,8 +249,26 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot)
vma
=
find_vma_prev
(
current
->
mm
,
start
,
&
prev
);
vma
=
find_vma_prev
(
current
->
mm
,
start
,
&
prev
);
error
=
-
ENOMEM
;
error
=
-
ENOMEM
;
if
(
!
vma
||
vma
->
vm_start
>
start
)
if
(
!
vma
)
goto
out
;
if
(
unlikely
(
grows
&
PROT_GROWSDOWN
))
{
if
(
vma
->
vm_start
>=
end
)
goto
out
;
start
=
vma
->
vm_start
;
error
=
-
EINVAL
;
if
(
!
(
vma
->
vm_flags
&
VM_GROWSDOWN
))
goto
out
;
}
else
{
if
(
vma
->
vm_start
>
start
)
goto
out
;
if
(
unlikely
(
grows
&
PROT_GROWSUP
))
{
end
=
vma
->
vm_end
;
error
=
-
EINVAL
;
if
(
!
(
vma
->
vm_flags
&
VM_GROWSUP
))
goto
out
;
goto
out
;
}
}
for
(
nstart
=
start
;
;
)
{
for
(
nstart
=
start
;
;
)
{
unsigned
int
newflags
;
unsigned
int
newflags
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment