Hello,After receiving so far 6 personal mails of people interesting in developing the S3 Savage DRI driver I've decided to write a section in the DRI Developers FAQ regarding its development: http://dri.sourceforge.net/doc/faq/hardware.html#SAVAGE .
It's a shame that of those who very few actually replied back. The Savage obviously raises a lot of interest and if they got together the driver would be a reality in no time. If they instead rely on me to do the initial work they'll have to wait quite while - not that I gave up, but my priorities are [in order] my PhD, TG work, Mach64, and only the new drivers Savage/Trident/nVidia.
Also before I do any further work in new drivers I want to pull out a more general Mesa/3D DRI driver framework that could be shared by those new drivers, to avoid so much copying'n'pasting which yelds such a waste of time when writing a new driver, and maitaining them afterwords.
Regards,
Jos� Fonseca
I am also interested in getting DRI to work on Savage cards. As a first task, I downloaded the savage branch and made the code compilable. I mailed these changes directly to Jose. He committed them and encouraged me to do further conversation about the Savage driver publically on this list. So, here I am ;-).
As a second task, I bootstrapped a kernel module from the tdfx driver by simply replacing every (hopefully ;-) occurence of 'tdfx' with 'savage'. The two files are attached. I also added the pci id for the card in my laptop (VT8751) in the file "savage_drv.c". This is the only entry right now because I can only test on this hardware. But if some people join, the id list could be extended easily. Other questions are the vendor and author strings and stuff like that. I added my name as author but I am not happy with that. Because I don't want to blame someone for the errors and mistakes I made and on the other side I don't want to claim that I have put any brain in this so far.
Nevertheless, as of yet we have a ddx driver in the branch wich compiles (at least on my system) and a bootstrapped kernel module (with working insmod). But I haven't put any knowledge of DRI into these things. Thus, there is a lot of work to do. As I consider myself to be a newbie I would like to ask the gurus how to proceed from this point?
Regards, Andreas Karrenbauer
/* savage.h -- 3dfx DRM template customization -*- linux-c -*- * Created: Wed Feb 14 12:32:32 2001 by [EMAIL PROTECTED] * * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * Authors: * Gareth Hughes <[EMAIL PROTECTED]> */
#ifndef __SAVAGE_H__ #define __SAVAGE_H__ /* This remains constant for all DRM template files. */ #define DRM(x) savage_##x /* General customization: */ #define __HAVE_MTRR 1 #define __HAVE_CTX_BITMAP 1 #endif
/* savage_drv.c -- savage driver -*- linux-c -*-
* Created: Thu Oct 7 10:38:32 1999 by [EMAIL PROTECTED]
*
* Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
* Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* Authors of the original tdfx driver:
* Rickard E. (Rik) Faith <[EMAIL PROTECTED]>
* Daryll Strauss <[EMAIL PROTECTED]>
* Gareth Hughes <[EMAIL PROTECTED]>
* Modified for Savage by:
* Andreas Karrenbauer <[EMAIL PROTECTED]>
*/
#include <linux/config.h>
#include "savage.h"
#include "drmP.h"
#define DRIVER_AUTHOR "bootstraped by Andreas Karrenbauer"
#define DRIVER_NAME "savage"
#define DRIVER_DESC "alpha savage dr"
#define DRIVER_DATE "20030226"
#define DRIVER_MAJOR 1
#define DRIVER_MINOR 0
#define DRIVER_PATCHLEVEL 0
#ifndef PCI_VENDOR_ID_SAVAGE
#define PCI_VENDOR_ID_SAVAGE 0x5333
#endif
#ifndef PCI_DEVICE_ID_SAVAGE_VT8751
#define PCI_DEVICE_ID_SAVAGE_VT8751 0x8d03
#endif
static drm_pci_list_t DRM(idlist)[] = {
{ PCI_VENDOR_ID_SAVAGE, PCI_DEVICE_ID_SAVAGE_VT8751 },
{ 0, 0 }
};
#define DRIVER_CARD_LIST DRM(idlist)
#include "drm_auth.h"
#include "drm_bufs.h"
#include "drm_context.h"
#include "drm_dma.h"
#include "drm_drawable.h"
#include "drm_drv.h"
#include "drm_fops.h"
#include "drm_init.h"
#include "drm_ioctl.h"
#include "drm_lock.h"
#include "drm_memory.h"
#include "drm_proc.h"
#include "drm_vm.h"
#include "drm_stub.h"
cvs server: Diffing .
Index: Makefile.kernel
===================================================================
RCS file:
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v
retrieving revision 1.25
diff -u -r1.25 Makefile.kernel
--- Makefile.kernel 27 Jan 2002 20:05:41 -0000 1.25
+++ Makefile.kernel 26 Feb 2003 22:22:51 -0000
@@ -3,10 +3,11 @@
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
O_TARGET := drm.o
-list-multi := gamma.o tdfx.o r128.o mga.o i810.o i830.o ffb.o radeon.o
+list-multi := gamma.o tdfx.o r128.o mga.o i810.o i830.o ffb.o radeon.o savage.o
gamma-objs := gamma_drv.o gamma_dma.o
tdfx-objs := tdfx_drv.o
+savage-objs := savage_drv.o
r128-objs := r128_drv.o r128_cce.o r128_state.o
mga-objs := mga_drv.o mga_dma.o mga_state.o mga_warp.o
i810-objs := i810_drv.o i810_dma.o
@@ -16,6 +17,7 @@
obj-$(CONFIG_DRM_GAMMA) += gamma.o
obj-$(CONFIG_DRM_TDFX) += tdfx.o
+obj-$(CONFIG_DRM_SAVAGE)+= savage.o
obj-$(CONFIG_DRM_R128) += r128.o
obj-$(CONFIG_DRM_RADEON)+= radeon.o
obj-$(CONFIG_DRM_MGA) += mga.o
@@ -30,6 +32,9 @@
tdfx.o: $(tdfx-objs) $(lib)
$(LD) -r -o $@ $(tdfx-objs) $(lib)
+
+savage.o: $(savage-objs) $(lib)
+ $(LD) -r -o $@ $(savage-objs) $(lib)
mga.o: $(mga-objs) $(lib)
$(LD) -r -o $@ $(mga-objs) $(lib)
Index: Makefile.linux
===================================================================
RCS file:
/cvsroot/dri/xc/xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.linux,v
retrieving revision 1.44
diff -u -r1.44 Makefile.linux
--- Makefile.linux 29 Oct 2002 13:49:26 -0000 1.44
+++ Makefile.linux 26 Feb 2003 22:22:52 -0000
@@ -38,7 +38,7 @@
# **** End of SMP/MODVERSIONS detection
-MODS = gamma.o tdfx.o r128.o radeon.o
+MODS = gamma.o tdfx.o r128.o radeon.o savage.o
LIBS =
DRMTEMPLATES = drm_auth.h drm_bufs.h drm_context.h drm_dma.h drm_drawable.h \
@@ -52,6 +52,9 @@
TDFXOBJS = tdfx_drv.o
TDFXHEADERS = tdfx.h $(DRMHEADERS) $(DRMTEMPLATES)
+SAVAGEOBJS = savage_drv.o
+SAVAGEHEADERS = savage.h $(DRMHEADERS) $(DRMTEMPLATES)
+
R128OBJS = r128_drv.o r128_cce.o r128_state.o
R128HEADERS = r128.h r128_drv.h r128_drm.h $(DRMHEADERS) $(DRMTEMPLATES)
@@ -224,6 +227,11 @@
tdfx.o: $(TDFXOBJS) $(LIBS)
$(LD) -r $^ -o $@
+savage_drv.o: savage_drv.c
+ $(CC) $(MODCFLAGS) -DEXPORT_SYMTAB -I$(TREE) -c $< -o $@
+savage.o: $(SAVAGEOBJS) $(LIBS)
+ $(LD) -r $^ -o $@
+
sis.o: $(SISOBJS) $(LIBS)
$(LD) -r $^ -o $@
@@ -270,6 +278,7 @@
$(GAMMAOBJS): $(GAMMAHEADERS)
$(TDFXOBJS): $(TDFXHEADERS)
+$(SAVAGEOBJS): $(SAVAGEHEADERS)
$(R128OBJS): $(R128HEADERS)
$(RADEONOBJS): $(RADEONHEADERS)
ifeq ($(AGP),1)
