summaryrefslogtreecommitdiff
path: root/linux-2.6/Makefile.kernel
blob: 5ff3d39948a6202073ad75f9d4f1d77bba27a526 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#
# Makefile for the drm device driver.  This driver provides support for the
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
#
# Based on David Woodhouse's mtd build.
#
# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.18 2003/08/16 17:59:17 dawes Exp $
#

tdfx-objs   := tdfx_drv.o
r128-objs   := r128_drv.o r128_cce.o r128_state.o r128_irq.o
mga-objs    := mga_drv.o mga_dma.o mga_state.o mga_warp.o mga_irq.o 
i810-objs   := i810_drv.o i810_dma.o
i830-objs   := i830_drv.o i830_dma.o i830_irq.o
i915-objs   := i915_drv.o i915_dma.o i915_irq.o i915_mem.o
radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o radeon_i2c.o
sis-objs    := sis_drv.o sis_ds.o sis_mm.o
ffb-objs    := ffb_drv.o ffb_context.o
savage-objs := savage_drv.o savage_dma.o
via-objs    := via_irq.o via_drv.o via_ds.o via_map.o via_mm.o via_dma.o
mach64-objs := mach64_drv.o mach64_dma.o mach64_irq.o mach64_state.o

# Kernel version checks

BELOW25 := $(shell if [ $(PATCHLEVEL) -lt 5 ]; then echo y; fi)

# There were major build changes starting with 2.5.52
ifneq ($(BELOW25),y)
BELOW2552 := $(shell if [ $(PATCHLEVEL) -eq 5 -a $(SUBLEVEL) -lt 52 ]; then echo y; fi)
else
BELOW2552 := y
endif

ifeq ($(BELOW25),y)
O_TARGET	:= drm.o
list-multi	:= tdfx.o r128.o mga.o i810.o i830.o ffb.o radeon.o \
                   savage.o via.o mach64.o i915.o
obj-m		:=
obj-n		:=
obj-		:=
export-objs     := via_mm.o
endif

obj-$(CONFIG_DRM_TDFX)	+= tdfx.o
obj-$(CONFIG_DRM_R128)	+= r128.o
obj-$(CONFIG_DRM_RADEON)+= radeon.o
obj-$(CONFIG_DRM_MGA)	+= mga.o
obj-$(CONFIG_DRM_I810)	+= i810.o
obj-$(CONFIG_DRM_I830)	+= i830.o
obj-$(CONFIG_DRM_I915)	+= i915.o
obj-$(CONFIG_DRM_SIS)   += sis.o
obj-$(CONFIG_DRM_FFB)   += ffb.o
obj-$(CONFIG_DRM_SAVAGE)+= savage.o
obj-$(CONFIG_DRM_VIA)   += via.o
obj-$(CONFIG_DRM_MACH64)+= mach64.o

ifeq ($(BELOW2552),y)
include $(TOPDIR)/Rules.make
endif

ifeq ($(BELOW25),y)
tdfx.o: $(tdfx-objs) $(lib)
	$(LD) -r -o $@ $(tdfx-objs) $(lib)

mga.o: $(mga-objs) $(lib)
	$(LD) -r -o $@ $(mga-objs) $(lib)

i810.o: $(i810-objs) $(lib)
	$(LD) -r -o $@ $(i810-objs) $(lib)

i830.o: $(i830-objs) $(lib)
	$(LD) -r -o $@ $(i830-objs) $(lib)

i915.o: $(i915-objs) $(lib)
	$(LD) -r -o $@ $(i915-objs) $(lib)

r128.o: $(r128-objs) $(lib)
	$(LD) -r -o $@ $(r128-objs) $(lib)

radeon.o: $(radeon-objs) $(lib)
	$(LD) -r -o $@ $(radeon-objs) $(lib)

sis.o: $(sis-objs) $(lib)
	$(LD) -r -o $@ $(sis-objs) $(lib)

ffb.o: $(ffb-objs) $(lib)
	$(LD) -r -o $@ $(ffb-objs) $(lib)

savage.o: $(savage-objs) $(lib)
	$(LD) -r -o $@ $(savage-objs) $(lib)

via.o: $(via-objs) $(lib)
	$(LD) -r -o $@ $(via-objs) $(lib)

mach64.o: $(mach64-objs) $(lib)
	$(LD) -r -o $@ $(mach64-objs) $(lib)

endif

s.com.tw> * */ #ifdef __linux #define __NO_VERSION__ #include <linux/sisfb.h> #endif #include "sis.h" #include "drmP.h" #include "sis_drm.h" #include "sis_drv.h" #include "sis_ds.h" #define MAX_CONTEXT 100 #define VIDEO_TYPE 0 #define AGP_TYPE 1 typedef struct { int used; int context; set_t *sets[2]; /* 0 for video, 1 for AGP */ } sis_context_t; static sis_context_t global_ppriv[MAX_CONTEXT]; static int add_alloc_set(int context, int type, unsigned int val) { int i, retval = 0; for(i = 0; i < MAX_CONTEXT; i++) if(global_ppriv[i].used && global_ppriv[i].context == context){ retval = setAdd(global_ppriv[i].sets[type], val); break; } return retval; } static int del_alloc_set(int context, int type, unsigned int val) { int i, retval = 0; for(i = 0; i < MAX_CONTEXT; i++) if(global_ppriv[i].used && global_ppriv[i].context == context){ retval = setDel(global_ppriv[i].sets[type], val); break; } return retval; } /* fb management via fb device */ #if 1 int sis_fb_alloc( DRM_OS_IOCTL ) { drm_sis_mem_t fb; struct sis_memreq req; int retval = 0; DRM_OS_KRNFROMUSR( fb, (drm_sis_mem_t *) data, sizeof(fb) ); req.size = fb.size; sis_malloc(&req); if(req.offset){ /* TODO */ fb.offset = req.offset; fb.free = req.offset; if(!add_alloc_set(fb.context, VIDEO_TYPE, fb.free)){ DRM_DEBUG("adding to allocation set fails"); sis_free(req.offset); retval = -1; } } else{ fb.offset = 0; fb.size = 0; fb.free = 0; } DRM_OS_KRNTOUSR( (drm_sis_mem_t *) data, fb, sizeof(fb) ); DRM_DEBUG("alloc fb, size = %d, offset = %ld\n", fb.size, req.offset); return retval; } int sis_fb_free( DRM_OS_IOCTL ) { drm_sis_mem_t fb; int retval = 0; DRM_OS_KRNFROMUSR( fb, (drm_sis_mem_t *) data, sizeof(fb) ); if(!fb.free){ return -1; } sis_free(fb.free); if(!del_alloc_set(fb.context, VIDEO_TYPE, fb.free)) retval = -1; DRM_DEBUG("free fb, offset = %d\n", fb.free); return retval; } #else int sis_fb_alloc( DRM_OS_IOCTL ) { return -1; } int sis_fb_free( DRM_OS_IOCTL ) { return 0; } #endif /* agp memory management */ #if 1 static memHeap_t *AgpHeap = NULL; int sisp_agp_init( DRM_OS_IOCTL ) { drm_sis_agp_t agp; DRM_OS_KRNFROMUSR( agp, (drm_sis_agp_t *) data, sizeof(agp) ); AgpHeap = mmInit(agp.offset, agp.size); DRM_DEBUG("offset = %u, size = %u", agp.offset, agp.size); return 0; } int sisp_agp_alloc( DRM_OS_IOCTL ) { drm_sis_mem_t agp; PMemBlock block; int retval = 0; if(!AgpHeap) return -1; DRM_OS_KRNFROMUSR( agp, (drm_sis_mem_t *) data, sizeof(agp)); block = mmAllocMem(AgpHeap, agp.size, 0, 0); if(block){ /* TODO */ agp.offset = block->ofs; agp.free = (unsigned int)block; if(!add_alloc_set(agp.context, AGP_TYPE, agp.free)){ DRM_DEBUG("adding to allocation set fails"); mmFreeMem((PMemBlock)agp.free); retval = -1; } } else{ agp.offset = 0; agp.size = 0; agp.free = 0; } DRM_OS_KRNTOUSR( (drm_sis_mem_t *) data, agp, sizeof(agp) ); DRM_DEBUG("alloc agp, size = %d, offset = %d\n", agp.size, agp.offset); return retval; } int sisp_agp_free( DRM_OS_IOCTL ) { drm_sis_mem_t agp; int retval = 0; if(!AgpHeap) return -1; DRM_OS_KRNFROMUSR( agp, (drm_sis_mem_t *) data, sizeof(agp)); if(!agp.free){ return -1; } mmFreeMem((PMemBlock)agp.free); if(!del_alloc_set(agp.context, AGP_TYPE, agp.free)) retval = -1; DRM_DEBUG("free agp, free = %d\n", agp.free); return retval; } #endif int sis_init_context(int context) { int i; for(i = 0; i < MAX_CONTEXT ; i++) if(global_ppriv[i].used && (global_ppriv[i].context == context)) break; if(i >= MAX_CONTEXT){ for(i = 0; i < MAX_CONTEXT ; i++){ if(!global_ppriv[i].used){ global_ppriv[i].context = context; global_ppriv[i].used = 1; global_ppriv[i].sets[0] = setInit(); global_ppriv[i].sets[1] = setInit(); DRM_DEBUG("init allocation set, socket=%d, context = %d\n", i, context); break; } } if((i >= MAX_CONTEXT) || (global_ppriv[i].sets[0] == NULL) || (global_ppriv[i].sets[1] == NULL)){ return 0; } } return 1; } int sis_final_context(int context) { int i; for(i=0; i<MAX_CONTEXT; i++) if(global_ppriv[i].used && (global_ppriv[i].context == context)) break; if(i < MAX_CONTEXT){ set_t *set; unsigned int item; int retval; DRM_DEBUG("find socket %d, context = %d\n", i, context); /* Video Memory */ set = global_ppriv[i].sets[0]; retval = setFirst(set, &item); while(retval){ DRM_DEBUG("free video memory 0x%x\n", item); #if 0 sis_free(item); #endif retval = setNext(set, &item); } setDestroy(set); /* AGP Memory */ set = global_ppriv[i].sets[1]; retval = setFirst(set, &item); while(retval){ DRM_DEBUG("free agp memory 0x%x\n", item); mmFreeMem((PMemBlock)item); retval = setNext(set, &item); } setDestroy(set); global_ppriv[i].used = 0; } /* turn-off auto-flip */ /* TODO */ #if defined(SIS_STEREO) flip_final(); #endif return 1; }