commit xfree86 4.0.1d-pre update
authorAlan Hourihane <alanh@fairlite.demon.co.uk>
Sun, 24 Sep 2000 09:34:10 +0000 (09:34 +0000)
committerAlan Hourihane <alanh@fairlite.demon.co.uk>
Sun, 24 Sep 2000 09:34:10 +0000 (09:34 +0000)
54 files changed:
bsd/Imakefile
bsd/drm.h [deleted file]
bsd/i810_drm.h [deleted file]
bsd/mga_drm.h [deleted file]
bsd/r128_drm.h [deleted file]
libdrm/xf86drm.c
linux-core/Makefile.kernel
linux-core/README.drm
linux-core/drmP.h
linux-core/i810_dma.c
linux-core/i810_drv.c
linux-core/i810_drv.h
linux-core/mga_drv.c
linux-core/r128_drv.c
linux-core/sis_drv.c
linux-core/tdfx_drv.c
linux/Makefile.kernel
linux/Makefile.linux
linux/README.drm
linux/agpsupport.c
linux/auth.c
linux/bufs.c
linux/drm.h
linux/drmP.h
linux/fops.c
linux/gamma_drv.c
linux/gamma_drv.h
linux/i810_context.c
linux/i810_dma.c
linux/i810_drv.c
linux/i810_drv.h
linux/init.c
linux/lists.c
linux/memory.c
linux/mga_context.c
linux/mga_dma.c
linux/mga_drv.c
linux/mga_drv.h
linux/mga_state.c
linux/picker.c
linux/proc.c
linux/r128_bufs.c
linux/r128_context.c
linux/r128_drv.c
linux/r128_drv.h
linux/sis_drv.c
linux/sis_drv.h
linux/sis_mm.c
linux/tdfx_context.c
linux/tdfx_drv.c
linux/tdfx_drv.h
linux/vm.c
shared-core/drm.h
shared/drm.h

index 7d33c20..81445a7 100644 (file)
@@ -1,5 +1,4 @@
-XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/Imakefile,v 1.1 2000/06/17 00:03:28 martin Exp $
-XCOMM $PI$
+XCOMM $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/Imakefile,v 1.2 2000/08/16 01:45:31 dawes Exp $
 
 #include <Server.tmpl>
 
@@ -11,6 +10,17 @@ LinkSourceFile(xf86drm.h,$(XF86OSSRC))
 LinkSourceFile(xf86_OSproc.h,$(XF86OSSRC))
 LinkSourceFile(sigio.c,$(XF86OSSRC)/shared)
 
+XCOMM Try to use the Linux version of the DRM headers.  This avoids skew
+XCOMM and missing headers.  If there's a need to break them out, they
+XCOMM can be re-added later.  If not, they can be moved to somewhere more
+XCOMM OS-independent and referenced from there.
+LinkSourceFile(drm.h,$(XF86OSSRC)/linux/drm/kernel)
+LinkSourceFile(i810_drm.h,$(XF86OSSRC)/linux/drm/kernel)
+LinkSourceFile(mga_drm.h,$(XF86OSSRC)/linux/drm/kernel)
+LinkSourceFile(r128_drm.h,$(XF86OSSRC)/linux/drm/kernel)
+LinkSourceFile(sis_drm_public.h,$(XF86OSSRC)/linux/drm/kernel)
+
+
 XCOMM This is a kludge until we determine how best to build the
 XCOMM kernel-specific device driver.  This allows us to continue
 XCOMM to maintain the single Makefile.bsd with kernel-specific
diff --git a/bsd/drm.h b/bsd/drm.h
deleted file mode 100644 (file)
index ddad1be..0000000
--- a/bsd/drm.h
+++ /dev/null
@@ -1,362 +0,0 @@
-/* drm.h -- Header for Direct Rendering Manager -*- c -*-
- * Created: Mon Jan  4 10:05:05 1999 by faith@precisioninsight.com
- *
- * 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:
- *    Rickard E. (Rik) Faith <faith@valinux.com>
- *
- * Acknowledgements:
- * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic cmpxchg.
- *
- */
-
-#ifndef _DRM_H_
-#define _DRM_H_
-
-#include <sys/ioccom.h>                /* For _IO* macros */
-
-#define DRM_DEV_DRM     "/dev/drm"
-#define DRM_DEV_MODE    (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP)
-#define DRM_DEV_UID     0
-#define DRM_DEV_GID     0
-
-
-#define DRM_NAME       "drm"     /* Name in kernel, /dev                   */
-#define DRM_MIN_ORDER  5         /* At least 2^5 bytes = 32 bytes          */
-#define DRM_MAX_ORDER  22        /* Up to 2^22 bytes = 4MB                 */
-#define DRM_RAM_PERCENT 10       /* How much system ram can we lock?       */
-
-#define _DRM_LOCK_HELD 0x80000000 /* Hardware lock is held                 */
-#define _DRM_LOCK_CONT 0x40000000 /* Hardware lock is contended            */
-#define _DRM_LOCK_IS_HELD(lock)           ((lock) & _DRM_LOCK_HELD)
-#define _DRM_LOCK_IS_CONT(lock)           ((lock) & _DRM_LOCK_CONT)
-#define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
-
-typedef unsigned long drm_handle_t;
-typedef unsigned int  drm_context_t;
-typedef unsigned int  drm_drawable_t;
-typedef unsigned int  drm_magic_t;
-
-/* Warning: If you change this structure, make sure you change 
- * XF86DRIClipRectRec in the server as well */
-
-typedef struct drm_clip_rect {
-           unsigned short x1;
-           unsigned short y1;
-           unsigned short x2;
-           unsigned short y2;
-} drm_clip_rect_t;
-
-/* Seperate include files for the i810/mga/r128 specific structures */
-#include "mga_drm.h"
-#include "i810_drm.h"
-#include "r128_drm.h"
-
-typedef struct drm_version {
-       int    version_major;     /* Major version                          */
-       int    version_minor;     /* Minor version                          */
-       int    version_patchlevel;/* Patch level                            */
-       size_t name_len;          /* Length of name buffer                  */
-       char   *name;             /* Name of driver                         */
-       size_t date_len;          /* Length of date buffer                  */
-       char   *date;             /* User-space buffer to hold date         */
-       size_t desc_len;          /* Length of desc buffer                  */
-       char   *desc;             /* User-space buffer to hold desc         */
-} drm_version_t;
-
-typedef struct drm_unique {
-       size_t unique_len;        /* Length of unique                       */
-       char   *unique;           /* Unique name for driver instantiation   */
-} drm_unique_t;
-
-typedef struct drm_list {
-       int              count;   /* Length of user-space structures        */
-       drm_version_t    *version;
-} drm_list_t;
-
-typedef struct drm_block {
-       int              unused;
-} drm_block_t;
-
-typedef struct drm_control {
-       enum {
-               DRM_ADD_COMMAND,
-               DRM_RM_COMMAND,
-               DRM_INST_HANDLER,
-               DRM_UNINST_HANDLER
-       }                func;
-       int              irq;
-} drm_control_t;
-
-typedef enum drm_map_type {
-       _DRM_FRAME_BUFFER = 0,    /* WC (no caching), no core dump          */
-       _DRM_REGISTERS    = 1,    /* no caching, no core dump               */
-       _DRM_SHM          = 2,    /* shared, cached                         */
-       _DRM_AGP          = 3     /* AGP/GART                               */
-} drm_map_type_t;
-
-typedef enum drm_map_flags {
-       _DRM_RESTRICTED      = 0x01, /* Cannot be mapped to user-virtual    */
-       _DRM_READ_ONLY       = 0x02,
-       _DRM_LOCKED          = 0x04, /* shared, cached, locked              */
-       _DRM_KERNEL          = 0x08, /* kernel requires access              */
-       _DRM_WRITE_COMBINING = 0x10, /* use write-combining if available    */
-       _DRM_CONTAINS_LOCK   = 0x20  /* SHM page that contains lock         */
-} drm_map_flags_t;
-
-typedef struct drm_map {
-       unsigned long   offset;  /* Requested physical address (0 for SAREA)*/
-       unsigned long   size;    /* Requested physical size (bytes)         */
-       drm_map_type_t  type;    /* Type of memory to map                   */
-       drm_map_flags_t flags;   /* Flags                                   */
-       void            *handle; /* User-space: "Handle" to pass to mmap    */
-                                /* Kernel-space: kernel-virtual address    */
-       int             mtrr;    /* MTRR slot used                          */
-                                /* Private data                            */
-} drm_map_t;
-
-typedef enum drm_lock_flags {
-       _DRM_LOCK_READY      = 0x01, /* Wait until hardware is ready for DMA */
-       _DRM_LOCK_QUIESCENT  = 0x02, /* Wait until hardware quiescent        */
-       _DRM_LOCK_FLUSH      = 0x04, /* Flush this context's DMA queue first */
-       _DRM_LOCK_FLUSH_ALL  = 0x08, /* Flush all DMA queues first           */
-                               /* These *HALT* flags aren't supported yet
-                                  -- they will be used to support the
-                                  full-screen DGA-like mode. */
-       _DRM_HALT_ALL_QUEUES = 0x10, /* Halt all current and future queues   */
-       _DRM_HALT_CUR_QUEUES = 0x20  /* Halt all current queues              */
-} drm_lock_flags_t;
-
-typedef struct drm_lock {
-       int              context;
-       drm_lock_flags_t flags;
-} drm_lock_t;
-
-typedef enum drm_dma_flags {         /* These values *MUST* match xf86drm.h */
-                                     /* Flags for DMA buffer dispatch       */
-       _DRM_DMA_BLOCK        = 0x01, /* Block until buffer dispatched.
-                                        Note, the buffer may not yet have
-                                        been processed by the hardware --
-                                        getting a hardware lock with the
-                                        hardware quiescent will ensure
-                                        that the buffer has been
-                                        processed.                          */
-       _DRM_DMA_WHILE_LOCKED = 0x02, /* Dispatch while lock held            */
-       _DRM_DMA_PRIORITY     = 0x04, /* High priority dispatch              */
-
-                                     /* Flags for DMA buffer request        */
-       _DRM_DMA_WAIT         = 0x10, /* Wait for free buffers               */
-       _DRM_DMA_SMALLER_OK   = 0x20, /* Smaller-than-requested buffers ok   */
-       _DRM_DMA_LARGER_OK    = 0x40  /* Larger-than-requested buffers ok    */
-} drm_dma_flags_t;
-
-typedef struct drm_buf_desc {
-       int           count;     /* Number of buffers of this size           */
-       int           size;      /* Size in bytes                            */
-       int           low_mark;  /* Low water mark                           */
-       int           high_mark; /* High water mark                          */
-       enum {
-               _DRM_PAGE_ALIGN = 0x01, /* Align on page boundaries for DMA  */
-               _DRM_AGP_BUFFER = 0x02  /* Buffer is in agp space            */
-       }             flags;
-       unsigned long agp_start; /* Start address of where the agp buffers
-                                 * are in the agp aperture */
-} drm_buf_desc_t;
-
-typedef struct drm_buf_info {
-       int            count;   /* Entries in list                           */
-       drm_buf_desc_t *list;
-} drm_buf_info_t;
-
-typedef struct drm_buf_free {
-       int            count;
-       int            *list;
-} drm_buf_free_t;
-
-typedef struct drm_buf_pub {
-       int               idx;         /* Index into master buflist          */
-       int               total;       /* Buffer size                        */
-       int               used;        /* Amount of buffer in use (for DMA)  */
-       void              *address;    /* Address of buffer                  */
-} drm_buf_pub_t;
-
-typedef struct drm_buf_map {
-       int           count;    /* Length of buflist                        */
-       void          *virtual; /* Mmaped area in user-virtual              */
-       drm_buf_pub_t *list;    /* Buffer information                       */
-} drm_buf_map_t;
-
-typedef struct drm_dma {
-                               /* Indices here refer to the offset into
-                                  buflist in drm_buf_get_t.  */
-       int             context;          /* Context handle                 */
-       int             send_count;       /* Number of buffers to send      */
-       int             *send_indices;    /* List of handles to buffers     */
-       int             *send_sizes;      /* Lengths of data to send        */
-       drm_dma_flags_t flags;            /* Flags                          */
-       int             request_count;    /* Number of buffers requested    */
-       int             request_size;     /* Desired size for buffers       */
-       int             *request_indices; /* Buffer information             */
-       int             *request_sizes;
-       int             granted_count;    /* Number of buffers granted      */
-} drm_dma_t;
-
-typedef enum {
-       _DRM_CONTEXT_PRESERVED = 0x01,
-       _DRM_CONTEXT_2DONLY    = 0x02
-} drm_ctx_flags_t;
-
-typedef struct drm_ctx {
-       drm_context_t   handle;
-       drm_ctx_flags_t flags;
-} drm_ctx_t;
-
-typedef struct drm_ctx_res {
-       int             count;
-       drm_ctx_t       *contexts;
-} drm_ctx_res_t;
-
-typedef struct drm_draw {
-       drm_drawable_t  handle;
-} drm_draw_t;
-
-typedef struct drm_auth {
-       drm_magic_t     magic;
-} drm_auth_t;
-
-typedef struct drm_irq_busid {
-       int irq;
-       int busnum;
-       int devnum;
-       int funcnum;
-} drm_irq_busid_t;
-
-typedef struct drm_agp_mode {
-       unsigned long mode;
-} drm_agp_mode_t;
-
-                               /* For drm_agp_alloc -- allocated a buffer */
-typedef struct drm_agp_buffer {
-       unsigned long size;     /* In bytes -- will round to page boundary */
-       unsigned long handle;   /* Used for BIND/UNBIND ioctls */
-       unsigned long type;     /* Type of memory to allocate  */
-        unsigned long physical; /* Physical used by i810       */
-} drm_agp_buffer_t;
-
-                               /* For drm_agp_bind */
-typedef struct drm_agp_binding {
-       unsigned long handle;   /* From drm_agp_buffer */
-       unsigned long offset;   /* In bytes -- will round to page boundary */
-} drm_agp_binding_t;
-
-typedef struct drm_agp_info {
-       int            agp_version_major;
-       int            agp_version_minor;
-       unsigned long  mode;
-       unsigned long  aperture_base;  /* physical address */
-       unsigned long  aperture_size;  /* bytes */
-       unsigned long  memory_allowed; /* bytes */
-       unsigned long  memory_used;
-
-                               /* PCI information */
-       unsigned short id_vendor;
-       unsigned short id_device;
-} drm_agp_info_t;
-
-#define DRM_IOCTL_BASE      'd'
-#define DRM_IOCTL_NR(n)             ((n) & 0xff)
-#define DRM_IO(nr)          _IO(DRM_IOCTL_BASE,nr)
-#define DRM_IOR(nr,size)     _IOR(DRM_IOCTL_BASE,nr,size)
-#define DRM_IOW(nr,size)     _IOW(DRM_IOCTL_BASE,nr,size)
-#define DRM_IOWR(nr,size)    _IOWR(DRM_IOCTL_BASE,nr,size)
-
-
-#define DRM_IOCTL_VERSION    DRM_IOWR(0x00, drm_version_t)
-#define DRM_IOCTL_GET_UNIQUE DRM_IOWR(0x01, drm_unique_t)
-#define DRM_IOCTL_GET_MAGIC  DRM_IOR( 0x02, drm_auth_t)
-#define DRM_IOCTL_IRQ_BUSID  DRM_IOWR(0x03, drm_irq_busid_t)
-
-#define DRM_IOCTL_SET_UNIQUE DRM_IOW( 0x10, drm_unique_t)
-#define DRM_IOCTL_AUTH_MAGIC DRM_IOW( 0x11, drm_auth_t)
-#define DRM_IOCTL_BLOCK             DRM_IOWR(0x12, drm_block_t)
-#define DRM_IOCTL_UNBLOCK    DRM_IOWR(0x13, drm_block_t)
-#define DRM_IOCTL_CONTROL    DRM_IOW( 0x14, drm_control_t)
-#define DRM_IOCTL_ADD_MAP    DRM_IOWR(0x15, drm_map_t)
-#define DRM_IOCTL_ADD_BUFS   DRM_IOWR(0x16, drm_buf_desc_t)
-#define DRM_IOCTL_MARK_BUFS  DRM_IOW( 0x17, drm_buf_desc_t)
-#define DRM_IOCTL_INFO_BUFS  DRM_IOWR(0x18, drm_buf_info_t)
-#define DRM_IOCTL_MAP_BUFS   DRM_IOWR(0x19, drm_buf_map_t)
-#define DRM_IOCTL_FREE_BUFS  DRM_IOW( 0x1a, drm_buf_free_t)
-
-#define DRM_IOCTL_ADD_CTX    DRM_IOWR(0x20, drm_ctx_t)
-#define DRM_IOCTL_RM_CTX     DRM_IOWR(0x21, drm_ctx_t)
-#define DRM_IOCTL_MOD_CTX    DRM_IOW( 0x22, drm_ctx_t)
-#define DRM_IOCTL_GET_CTX    DRM_IOWR(0x23, drm_ctx_t)
-#define DRM_IOCTL_SWITCH_CTX DRM_IOW( 0x24, drm_ctx_t)
-#define DRM_IOCTL_NEW_CTX    DRM_IOW( 0x25, drm_ctx_t)
-#define DRM_IOCTL_RES_CTX    DRM_IOWR(0x26, drm_ctx_res_t)
-#define DRM_IOCTL_ADD_DRAW   DRM_IOWR(0x27, drm_draw_t)
-#define DRM_IOCTL_RM_DRAW    DRM_IOWR(0x28, drm_draw_t)
-#define DRM_IOCTL_DMA       DRM_IOWR(0x29, drm_dma_t)
-#define DRM_IOCTL_LOCK      DRM_IOW( 0x2a, drm_lock_t)
-#define DRM_IOCTL_UNLOCK     DRM_IOW( 0x2b, drm_lock_t)
-#define DRM_IOCTL_FINISH     DRM_IOW( 0x2c, drm_lock_t)
-
-#define DRM_IOCTL_AGP_ACQUIRE DRM_IO(  0x30)
-#define DRM_IOCTL_AGP_RELEASE DRM_IO(  0x31)
-#define DRM_IOCTL_AGP_ENABLE  DRM_IOW( 0x32, drm_agp_mode_t)
-#define DRM_IOCTL_AGP_INFO    DRM_IOR( 0x33, drm_agp_info_t)
-#define DRM_IOCTL_AGP_ALLOC   DRM_IOWR(0x34, drm_agp_buffer_t)
-#define DRM_IOCTL_AGP_FREE    DRM_IOW( 0x35, drm_agp_buffer_t)
-#define DRM_IOCTL_AGP_BIND    DRM_IOW( 0x36, drm_agp_binding_t)
-#define DRM_IOCTL_AGP_UNBIND  DRM_IOW( 0x37, drm_agp_binding_t)
-
-/* Mga specific ioctls */
-#define DRM_IOCTL_MGA_INIT    DRM_IOW( 0x40, drm_mga_init_t)
-#define DRM_IOCTL_MGA_SWAP    DRM_IOW( 0x41, drm_mga_swap_t)
-#define DRM_IOCTL_MGA_CLEAR   DRM_IOW( 0x42, drm_mga_clear_t)
-#define DRM_IOCTL_MGA_ILOAD   DRM_IOW( 0x43, drm_mga_iload_t)
-#define DRM_IOCTL_MGA_VERTEX  DRM_IOW( 0x44, drm_mga_vertex_t)
-#define DRM_IOCTL_MGA_FLUSH   DRM_IOW( 0x45, drm_lock_t )
-#define DRM_IOCTL_MGA_INDICES DRM_IOW( 0x46, drm_mga_indices_t)
-
-/* I810 specific ioctls */
-#define DRM_IOCTL_I810_INIT    DRM_IOW( 0x40, drm_i810_init_t)
-#define DRM_IOCTL_I810_VERTEX  DRM_IOW( 0x41, drm_i810_vertex_t)
-#define DRM_IOCTL_I810_CLEAR   DRM_IOW( 0x42, drm_i810_clear_t)
-#define DRM_IOCTL_I810_FLUSH   DRM_IO ( 0x43)
-#define DRM_IOCTL_I810_GETAGE  DRM_IO ( 0x44)
-#define DRM_IOCTL_I810_GETBUF  DRM_IOWR(0x45, drm_i810_dma_t)
-#define DRM_IOCTL_I810_SWAP    DRM_IO ( 0x46)
-
-/* Rage 128 specific ioctls */
-#define DRM_IOCTL_R128_INIT    DRM_IOW( 0x40, drm_r128_init_t)
-#define DRM_IOCTL_R128_RESET   DRM_IO(  0x41)
-#define DRM_IOCTL_R128_FLUSH   DRM_IO(  0x42)
-#define DRM_IOCTL_R128_CCEIDL  DRM_IO(  0x43)
-#define DRM_IOCTL_R128_PACKET  DRM_IOW( 0x44, drm_r128_packet_t)
-#define DRM_IOCTL_R128_VERTEX  DRM_IOW( 0x45, drm_r128_vertex_t)
-
-#endif
diff --git a/bsd/i810_drm.h b/bsd/i810_drm.h
deleted file mode 100644 (file)
index 4c8e09f..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-#ifndef _I810_DRM_H_
-#define _I810_DRM_H_
-
-/* WARNING: These defines must be the same as what the Xserver uses.
- * if you change them, you must change the defines in the Xserver.
- */
-
-#ifndef _I810_DEFINES_
-#define _I810_DEFINES_
-
-#define I810_DMA_BUF_ORDER             12
-#define I810_DMA_BUF_SZ                (1<<I810_DMA_BUF_ORDER)
-#define I810_DMA_BUF_NR                256
-#define I810_NR_SAREA_CLIPRECTS        8
-
-/* Each region is a minimum of 64k, and there are at most 64 of them.
- */
-#define I810_NR_TEX_REGIONS 64
-#define I810_LOG_MIN_TEX_REGION_SIZE 16
-#endif
-
-#define I810_UPLOAD_TEX0IMAGE  0x1 /* handled clientside */
-#define I810_UPLOAD_TEX1IMAGE  0x2 /* handled clientside */
-#define I810_UPLOAD_CTX        0x4
-#define I810_UPLOAD_BUFFERS    0x8
-#define I810_UPLOAD_TEX0       0x10
-#define I810_UPLOAD_TEX1       0x20
-#define I810_UPLOAD_CLIPRECTS  0x40
-
-
-/* Indices into buf.Setup where various bits of state are mirrored per
- * context and per buffer.  These can be fired at the card as a unit,
- * or in a piecewise fashion as required.
- */
-
-/* Destbuffer state 
- *    - backbuffer linear offset and pitch -- invarient in the current dri
- *    - zbuffer linear offset and pitch -- also invarient
- *    - drawing origin in back and depth buffers.
- *
- * Keep the depth/back buffer state here to acommodate private buffers
- * in the future.
- */
-#define I810_DESTREG_DI0  0    /* CMD_OP_DESTBUFFER_INFO (2 dwords) */
-#define I810_DESTREG_DI1  1
-#define I810_DESTREG_DV0  2    /* GFX_OP_DESTBUFFER_VARS (2 dwords) */
-#define I810_DESTREG_DV1  3
-#define I810_DESTREG_DR0  4    /* GFX_OP_DRAWRECT_INFO (4 dwords) */
-#define I810_DESTREG_DR1  5
-#define I810_DESTREG_DR2  6
-#define I810_DESTREG_DR3  7
-#define I810_DESTREG_DR4  8
-#define I810_DEST_SETUP_SIZE 10
-
-/* Context state
- */
-#define I810_CTXREG_CF0   0    /* GFX_OP_COLOR_FACTOR */
-#define I810_CTXREG_CF1   1    
-#define I810_CTXREG_ST0   2     /* GFX_OP_STIPPLE */
-#define I810_CTXREG_ST1   3
-#define I810_CTXREG_VF    4    /* GFX_OP_VERTEX_FMT */
-#define I810_CTXREG_MT    5    /* GFX_OP_MAP_TEXELS */
-#define I810_CTXREG_MC0   6    /* GFX_OP_MAP_COLOR_STAGES - stage 0 */
-#define I810_CTXREG_MC1   7     /* GFX_OP_MAP_COLOR_STAGES - stage 1 */
-#define I810_CTXREG_MC2   8    /* GFX_OP_MAP_COLOR_STAGES - stage 2 */
-#define I810_CTXREG_MA0   9    /* GFX_OP_MAP_ALPHA_STAGES - stage 0 */
-#define I810_CTXREG_MA1   10   /* GFX_OP_MAP_ALPHA_STAGES - stage 1 */
-#define I810_CTXREG_MA2   11   /* GFX_OP_MAP_ALPHA_STAGES - stage 2 */
-#define I810_CTXREG_SDM   12   /* GFX_OP_SRC_DEST_MONO */
-#define I810_CTXREG_FOG   13   /* GFX_OP_FOG_COLOR */
-#define I810_CTXREG_B1    14   /* GFX_OP_BOOL_1 */
-#define I810_CTXREG_B2    15   /* GFX_OP_BOOL_2 */
-#define I810_CTXREG_LCS   16   /* GFX_OP_LINEWIDTH_CULL_SHADE_MODE */
-#define I810_CTXREG_PV    17   /* GFX_OP_PV_RULE -- Invarient! */
-#define I810_CTXREG_ZA    18   /* GFX_OP_ZBIAS_ALPHAFUNC */
-#define I810_CTXREG_AA    19   /* GFX_OP_ANTIALIAS */
-#define I810_CTX_SETUP_SIZE 20 
-
-/* Texture state (per tex unit)
- */
-#define I810_TEXREG_MI0  0     /* GFX_OP_MAP_INFO (4 dwords) */
-#define I810_TEXREG_MI1  1     
-#define I810_TEXREG_MI2  2     
-#define I810_TEXREG_MI3  3     
-#define I810_TEXREG_MF   4     /* GFX_OP_MAP_FILTER */
-#define I810_TEXREG_MLC  5     /* GFX_OP_MAP_LOD_CTL */
-#define I810_TEXREG_MLL  6     /* GFX_OP_MAP_LOD_LIMITS */
-#define I810_TEXREG_MCS  7     /* GFX_OP_MAP_COORD_SETS ??? */
-#define I810_TEX_SETUP_SIZE 8
-
-#define I810_FRONT   0x1
-#define I810_BACK    0x2
-#define I810_DEPTH   0x4
-
-
-typedef struct _drm_i810_init {
-       enum {
-               I810_INIT_DMA = 0x01,
-               I810_CLEANUP_DMA = 0x02
-       } func;
-       int ring_map_idx;
-       int buffer_map_idx;
-       int sarea_priv_offset;
-       unsigned int ring_start;
-       unsigned int ring_end;
-       unsigned int ring_size;
-       unsigned int front_offset;
-       unsigned int back_offset;
-       unsigned int depth_offset;
-       unsigned int w;
-       unsigned int h;
-       unsigned int pitch;
-       unsigned int pitch_bits; 
-} drm_i810_init_t;
-
-/* Warning: If you change the SAREA structure you must change the Xserver
- * structure as well */
-
-typedef struct _drm_i810_tex_region {
-       unsigned char next, prev; /* indices to form a circular LRU  */
-       unsigned char in_use;   /* owned by a client, or free? */
-       int age;                /* tracked by clients to update local LRU's */
-} drm_i810_tex_region_t;
-
-typedef struct _drm_i810_sarea {
-       unsigned int ContextState[I810_CTX_SETUP_SIZE];
-       unsigned int BufferState[I810_DEST_SETUP_SIZE];
-       unsigned int TexState[2][I810_TEX_SETUP_SIZE];
-       unsigned int dirty;
-
-       unsigned int nbox;
-       drm_clip_rect_t boxes[I810_NR_SAREA_CLIPRECTS];
-
-       /* Maintain an LRU of contiguous regions of texture space.  If
-        * you think you own a region of texture memory, and it has an
-        * age different to the one you set, then you are mistaken and
-        * it has been stolen by another client.  If global texAge
-        * hasn't changed, there is no need to walk the list.
-        *
-        * These regions can be used as a proxy for the fine-grained
-        * texture information of other clients - by maintaining them
-        * in the same lru which is used to age their own textures,
-        * clients have an approximate lru for the whole of global
-        * texture space, and can make informed decisions as to which
-        * areas to kick out.  There is no need to choose whether to
-        * kick out your own texture or someone else's - simply eject
-        * them all in LRU order.  
-        */
-   
-       drm_i810_tex_region_t texList[I810_NR_TEX_REGIONS+1]; 
-                               /* Last elt is sentinal */
-        int texAge;            /* last time texture was uploaded */
-        int last_enqueue;      /* last time a buffer was enqueued */
-       int last_dispatch;      /* age of the most recently dispatched buffer */
-       int last_quiescent;     /*  */
-       int ctxOwner;           /* last context to upload state */
-
-       int vertex_prim;
-
-} drm_i810_sarea_t;
-
-typedef struct _drm_i810_clear {
-       int clear_color;
-       int clear_depth;
-       int flags;
-} drm_i810_clear_t;
-
-
-
-/* These may be placeholders if we have more cliprects than
- * I810_NR_SAREA_CLIPRECTS.  In that case, the client sets discard to
- * false, indicating that the buffer will be dispatched again with a
- * new set of cliprects.
- */
-typedef struct _drm_i810_vertex {
-       int idx;                /* buffer index */
-       int used;               /* nr bytes in use */
-       int discard;            /* client is finished with the buffer? */
-} drm_i810_vertex_t;
-
-typedef struct drm_i810_dma {
-       void *virtual;
-       int request_idx;
-       int request_size;
-       int granted;
-} drm_i810_dma_t;
-
-#endif /* _I810_DRM_H_ */
diff --git a/bsd/mga_drm.h b/bsd/mga_drm.h
deleted file mode 100644 (file)
index fe1b9b9..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/* mga_drm.h -- Public header for the Matrox g200/g400 driver
- * Created: Tue Jan 25 01:50:01 1999 by jhartmann@precisioninsight.com
- *
- * 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: Jeff Hartmann <jhartmann@valinux.com>
- *          Keith Whitwell <keithw@valinux.com>
- *
- */
-
-#ifndef _MGA_DRM_H_
-#define _MGA_DRM_H_
-
-/* WARNING: If you change any of these defines, make sure to change the
- * defines in the Xserver file (xf86drmMga.h)
- */
-#ifndef _MGA_DEFINES_
-#define _MGA_DEFINES_
-
-#define MGA_F  0x1             /* fog */
-#define MGA_A  0x2             /* alpha */
-#define MGA_S  0x4             /* specular */
-#define MGA_T2 0x8             /* multitexture */
-
-#define MGA_WARP_TGZ            0
-#define MGA_WARP_TGZF           (MGA_F)
-#define MGA_WARP_TGZA           (MGA_A)
-#define MGA_WARP_TGZAF          (MGA_F|MGA_A)
-#define MGA_WARP_TGZS           (MGA_S)
-#define MGA_WARP_TGZSF          (MGA_S|MGA_F)
-#define MGA_WARP_TGZSA          (MGA_S|MGA_A)
-#define MGA_WARP_TGZSAF         (MGA_S|MGA_F|MGA_A)
-#define MGA_WARP_T2GZ           (MGA_T2)
-#define MGA_WARP_T2GZF          (MGA_T2|MGA_F)
-#define MGA_WARP_T2GZA          (MGA_T2|MGA_A)
-#define MGA_WARP_T2GZAF         (MGA_T2|MGA_A|MGA_F)
-#define MGA_WARP_T2GZS          (MGA_T2|MGA_S)
-#define MGA_WARP_T2GZSF         (MGA_T2|MGA_S|MGA_F)
-#define MGA_WARP_T2GZSA         (MGA_T2|MGA_S|MGA_A)
-#define MGA_WARP_T2GZSAF        (MGA_T2|MGA_S|MGA_F|MGA_A)
-
-#define MGA_MAX_G400_PIPES 16
-#define MGA_MAX_G200_PIPES  8  /* no multitex */
-#define MGA_MAX_WARP_PIPES MGA_MAX_G400_PIPES
-
-#define MGA_CARD_TYPE_G200 1
-#define MGA_CARD_TYPE_G400 2
-
-#define MGA_FRONT   0x1
-#define MGA_BACK    0x2
-#define MGA_DEPTH   0x4
-
-/* 3d state excluding texture units:
- */
-#define MGA_CTXREG_DSTORG   0  /* validated */
-#define MGA_CTXREG_MACCESS  1  
-#define MGA_CTXREG_PLNWT    2  
-#define MGA_CTXREG_DWGCTL    3 
-#define MGA_CTXREG_ALPHACTRL 4
-#define MGA_CTXREG_FOGCOLOR  5
-#define MGA_CTXREG_WFLAG     6
-#define MGA_CTXREG_TDUAL0    7
-#define MGA_CTXREG_TDUAL1    8
-#define MGA_CTXREG_FCOL      9
-#define MGA_CTXREG_STENCIL    10
-#define MGA_CTXREG_STENCILCTL 11
-#define MGA_CTX_SETUP_SIZE   12
-
-/* 2d state
- */
-#define MGA_2DREG_PITCH        0
-#define MGA_2D_SETUP_SIZE      1
-
-/* Each texture unit has a state:
- */
-#define MGA_TEXREG_CTL        0
-#define MGA_TEXREG_CTL2       1
-#define MGA_TEXREG_FILTER     2
-#define MGA_TEXREG_BORDERCOL  3
-#define MGA_TEXREG_ORG        4 /* validated */
-#define MGA_TEXREG_ORG1       5
-#define MGA_TEXREG_ORG2       6
-#define MGA_TEXREG_ORG3       7
-#define MGA_TEXREG_ORG4       8
-#define MGA_TEXREG_WIDTH      9
-#define MGA_TEXREG_HEIGHT     10
-#define MGA_TEX_SETUP_SIZE    11
-
-/* What needs to be changed for the current vertex dma buffer?
- */
-#define MGA_UPLOAD_CTX        0x1
-#define MGA_UPLOAD_TEX0       0x2
-#define MGA_UPLOAD_TEX1       0x4
-#define MGA_UPLOAD_PIPE       0x8
-#define MGA_UPLOAD_TEX0IMAGE  0x10 /* handled client-side */
-#define MGA_UPLOAD_TEX1IMAGE  0x20 /* handled client-side */
-#define MGA_UPLOAD_2D        0x40
-#define MGA_WAIT_AGE          0x80 /* handled client-side */
-#define MGA_UPLOAD_CLIPRECTS  0x100 /* handled client-side */
-#define MGA_DMA_FLUSH        0x200 /* set when someone gets the lock
-                                       quiescent */
-
-/* 32 buffers of 64k each, total 2 meg.
- */
-#define MGA_DMA_BUF_ORDER     16
-#define MGA_DMA_BUF_SZ        (1<<MGA_DMA_BUF_ORDER)
-#define MGA_DMA_BUF_NR        31
-
-/* Keep these small for testing.
- */
-#define MGA_NR_SAREA_CLIPRECTS 8
-
-/* 2 heaps (1 for card, 1 for agp), each divided into upto 128
- * regions, subject to a minimum region size of (1<<16) == 64k. 
- *
- * Clients may subdivide regions internally, but when sharing between
- * clients, the region size is the minimum granularity. 
- */
-
-#define MGA_CARD_HEAP 0
-#define MGA_AGP_HEAP  1
-#define MGA_NR_TEX_HEAPS 2
-#define MGA_NR_TEX_REGIONS 16
-#define MGA_LOG_MIN_TEX_REGION_SIZE 16
-#endif
-
-typedef struct _drm_mga_warp_index {
-       int installed;
-       unsigned long phys_addr;
-       int size;
-} drm_mga_warp_index_t;
-
-typedef struct drm_mga_init {
-       enum { 
-               MGA_INIT_DMA = 0x01,
-               MGA_CLEANUP_DMA = 0x02
-       } func;
-       int reserved_map_agpstart;
-       int reserved_map_idx;
-       int buffer_map_idx;
-       int sarea_priv_offset;
-       int primary_size;
-       int warp_ucode_size;
-       unsigned int frontOffset;
-       unsigned int backOffset;
-       unsigned int depthOffset;
-       unsigned int textureOffset;
-       unsigned int textureSize;
-        unsigned int agpTextureOffset;
-        unsigned int agpTextureSize;
-       unsigned int cpp;
-       unsigned int stride;
-       int sgram;
-       int chipset;
-       drm_mga_warp_index_t WarpIndex[MGA_MAX_WARP_PIPES];
-       unsigned int mAccess;
-} drm_mga_init_t;
-
-/* Warning: if you change the sarea structure, you must change the Xserver
- * structures as well */
-
-typedef struct _drm_mga_tex_region {
-       unsigned char next, prev;       
-       unsigned char in_use;   
-       unsigned int age;                       
-} drm_mga_tex_region_t;
-
-typedef struct _drm_mga_sarea {
-       /* The channel for communication of state information to the kernel
-        * on firing a vertex dma buffer.
-        */
-       unsigned int ContextState[MGA_CTX_SETUP_SIZE];
-       unsigned int ServerState[MGA_2D_SETUP_SIZE];
-       unsigned int TexState[2][MGA_TEX_SETUP_SIZE];
-       unsigned int WarpPipe;
-       unsigned int dirty;
-
-       unsigned int nbox;
-       drm_clip_rect_t boxes[MGA_NR_SAREA_CLIPRECTS];
-
-
-       /* Information about the most recently used 3d drawable.  The
-        * client fills in the req_* fields, the server fills in the 
-        * exported_ fields and puts the cliprects into boxes, above.
-        *
-        * The client clears the exported_drawable field before
-        * clobbering the boxes data.
-        */
-        unsigned int req_drawable;      /* the X drawable id */
-       unsigned int req_draw_buffer;    /* MGA_FRONT or MGA_BACK */
-
-        unsigned int exported_drawable;         
-       unsigned int exported_index; 
-        unsigned int exported_stamp;   
-        unsigned int exported_buffers;  
-        unsigned int exported_nfront;
-        unsigned int exported_nback;
-       int exported_back_x, exported_front_x, exported_w;      
-       int exported_back_y, exported_front_y, exported_h;
-       drm_clip_rect_t exported_boxes[MGA_NR_SAREA_CLIPRECTS];
-   
-       /* Counters for aging textures and for client-side throttling.
-        */
-        unsigned int last_enqueue;     /* last time a buffer was enqueued */
-       unsigned int last_dispatch;     /* age of the most recently dispatched buffer */
-       unsigned int last_quiescent;     /*  */
-
-
-       /* LRU lists for texture memory in agp space and on the card
-        */
-       drm_mga_tex_region_t texList[MGA_NR_TEX_HEAPS][MGA_NR_TEX_REGIONS+1];
-       unsigned int texAge[MGA_NR_TEX_HEAPS];
-       
-       /* Mechanism to validate card state.
-        */
-       int ctxOwner;
-        int vertexsize;
-} drm_mga_sarea_t;     
-
-/* Device specific ioctls:
- */
-typedef struct _drm_mga_clear {
-       unsigned int clear_color;
-       unsigned int clear_depth;
-       unsigned int flags;
-       unsigned int clear_depthmask;
-       unsigned int clear_color_mask;
-} drm_mga_clear_t;
-
-typedef struct _drm_mga_swap {
-       int dummy;
-} drm_mga_swap_t;
-
-typedef struct _drm_mga_iload {
-       int idx;
-       int length;
-       unsigned int destOrg;
-} drm_mga_iload_t;
-
-typedef struct _drm_mga_vertex {
-       int idx;                /* buffer to queue */
-       int used;               /* bytes in use */
-       int discard;            /* client finished with buffer?  */
-} drm_mga_vertex_t;
-
-typedef struct _drm_mga_indices {
-       int idx;                /* buffer to queue */
-       unsigned int start;             
-       unsigned int end;               
-       int discard;            /* client finished with buffer?  */
-} drm_mga_indices_t;
-
-#endif
diff --git a/bsd/r128_drm.h b/bsd/r128_drm.h
deleted file mode 100644 (file)
index bff103c..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* r128_drm.h -- Public header for the r128 driver -*- linux-c -*-
- * Created: Wed Apr  5 19:24:19 2000 by kevin@precisioninsight.com
- *
- * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
- * 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: Kevin E. Martin <kevin@precisioninsight.com>
- *
- * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/bsd/drm/kernel/r128_drm.h,v 1.1 2000/06/17 00:03:29 martin Exp $
- */
-
-#ifndef _R128_DRM_H_
-#define _R128_DRM_H_
-
-/* WARNING: If you change any of these defines, make sure to change the
- * defines in the Xserver file (xf86drmR128.h)
- */
-typedef struct drm_r128_init {
-       enum { 
-               R128_INIT_CCE    = 0x01,
-               R128_CLEANUP_CCE = 0x02
-       } func;
-       int sarea_priv_offset;
-       int is_pci;
-       int cce_mode;
-       int cce_fifo_size;
-       int cce_secure;
-       int ring_size;
-       int usec_timeout;
-
-       int fb_offset;
-       int agp_ring_offset;
-       int agp_read_ptr_offset;
-       int agp_vertbufs_offset;
-       int agp_indbufs_offset;
-       int agp_textures_offset;
-       int mmio_offset;
-} drm_r128_init_t;
-
-typedef struct drm_r128_packet {
-       unsigned long *buffer;
-       int            count;
-       int            flags;
-} drm_r128_packet_t;
-
-typedef enum drm_r128_prim {
-       _DRM_R128_PRIM_NONE             = 0x0001,
-       _DRM_R128_PRIM_POINT            = 0x0002,
-       _DRM_R128_PRIM_LINE             = 0x0004,
-       _DRM_R128_PRIM_POLY_LINE        = 0x0008,
-       _DRM_R128_PRIM_TRI_LIST         = 0x0010,
-       _DRM_R128_PRIM_TRI_FAN          = 0x0020,
-       _DRM_R128_PRIM_TRI_STRIP        = 0x0040,
-       _DRM_R128_PRIM_TRI_TYPE2        = 0x0080
-} drm_r128_prim_t;
-
-typedef struct drm_r128_vertex {
-                               /* Indices here refer to the offset into
-                                  buflist in drm_buf_get_t.  */
-       int             send_count;       /* Number of buffers to send      */
-       int             *send_indices;    /* List of handles to buffers     */
-       int             *send_sizes;      /* Lengths of data to send        */
-       drm_r128_prim_t prim;             /* Primitive type                 */
-       int             request_count;    /* Number of buffers requested    */
-       int             *request_indices; /* Buffer information             */
-       int             *request_sizes;
-       int             granted_count;    /* Number of buffers granted      */
-} drm_r128_vertex_t;
-
-/* WARNING: If you change any of these defines, make sure to change the
- * defines in the Xserver file (r128_sarea.h)
- */
-#define R128_LOCAL_TEX_HEAP       0
-#define R128_AGP_TEX_HEAP         1
-#define R128_NR_TEX_HEAPS         2
-#define R128_NR_TEX_REGIONS      64
-#define R128_LOG_TEX_GRANULARITY 16
-
-typedef struct drm_tex_region {
-       unsigned char next, prev;       
-       unsigned char in_use;   
-       int age;                        
-} drm_tex_region_t;
-
-typedef struct drm_r128_sarea {
-       drm_tex_region_t tex_list[R128_NR_TEX_HEAPS][R128_NR_TEX_REGIONS+1];
-       int              tex_age[R128_NR_TEX_HEAPS];
-       int              ctx_owner;
-       int              ring_write;
-} drm_r128_sarea_t;
-
-#endif
index c561f01..c933f59 100644 (file)
@@ -27,7 +27,7 @@
  * Authors: Rickard E. (Rik) Faith <faith@valinux.com>
  *         Kevin E. Martin <martin@valinux.com>
  *
- * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c,v 1.15 2000/08/09 14:44:27 alanh Exp $
+ * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/xf86drm.c,v 1.16 2000/08/28 16:55:52 dawes Exp $
  * 
  */
 
@@ -597,7 +597,15 @@ int drmMap(int fd,
           drmSize size,
           drmAddressPtr address)
 {
+    static unsigned long pagesize_mask = 0;
+
     if (fd < 0) return -EINVAL;
+
+    if (!pagesize_mask)
+       pagesize_mask = getpagesize() - 1;
+
+    size = (size + pagesize_mask) & ~pagesize_mask;
+
     *address = mmap(0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, handle);
     if (*address == MAP_FAILED) return -errno;
     return 0;
index b1b8d97..0791af4 100644 (file)
@@ -1,3 +1,4 @@
+# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.8 2000/08/28 02:43:14 tsi Exp $
 #
 # Makefile for the drm device driver.  This driver provides support for
 # the Direct Rendering Infrastructure (DRI) in XFree86 4.x.
index 6441e01..97dd0d8 100644 (file)
@@ -1,3 +1,5 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/README.drm,v 1.4 2000/08/28 02:43:14 tsi Exp $ */
+
 ************************************************************
 * For the very latest on DRI development, please see:      *
 *     http://dri.sourceforge.net/                          *
index 2bfd4be..bfd124d 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  * 
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drmP.h,v 1.9 2000/08/28 02:43:14 tsi Exp $ */
 
 #ifndef _DRM_P_H_
 #define _DRM_P_H_
@@ -152,6 +153,11 @@ typedef struct wait_queue *wait_queue_head_t;
 #define module_exit(x)  void cleanup_module(void) { x(); }
 #endif
 
+                               /* virt_to_page added in 2.4.0-test6 */
+#if LINUX_VERSION_CODE < 0x020400
+#define virt_to_page(kaddr) (mem_map + MAP_NR(kaddr))
+#endif
+
                                /* Generic cmpxchg added in 2.3.x */
 #ifndef __HAVE_ARCH_CMPXCHG
                                /* Include this here so that driver can be
index e2a8660..8a279be 100644 (file)
@@ -29,6 +29,7 @@
  *          Keith Whitwell <keithw@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_dma.c,v 1.6 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 86d5e23..a001b54 100644 (file)
@@ -28,6 +28,7 @@
  *         Jeff Hartmann <jhartmann@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_drv.c,v 1.5 2000/08/28 02:43:15 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index 1c95740..9f46be5 100644 (file)
@@ -28,6 +28,7 @@
  *         Jeff Hartmann <jhartmann@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_drv.h,v 1.5 2000/08/28 02:43:15 tsi Exp $ */
 
 #ifndef _I810_DRV_H_
 #define _I810_DRV_H_
index c551ba6..70d5d89 100644 (file)
@@ -29,6 +29,7 @@
  *
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/mga_drv.c,v 1.4 2000/08/28 02:43:15 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index b58dcf0..8d4a370 100644 (file)
@@ -28,6 +28,7 @@
  *          Kevin E. Martin <martin@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/r128_drv.c,v 1.3 2000/08/28 02:43:16 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index 06ae798..0b1990b 100644 (file)
@@ -1,6 +1,7 @@
 /* sis.c -- sis driver -*- linux-c -*-
  *
- * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
+ * 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
@@ -23,6 +24,7 @@
  * DEALINGS IN THE SOFTWARE.
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/sis_drv.c,v 1.5 2000/09/22 11:35:47 alanh Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
 #include "sis_drv.h"
 
 #define SIS_NAME        "sis"
-#define SIS_DESC        "sis"
-#define SIS_DATE        "19991009"
-#define SIS_MAJOR       0
+#define SIS_DESC        "SIS 300/630/540"
+#define SIS_DATE        "20000831"
+#define SIS_MAJOR       1
 #define SIS_MINOR       0
-#define SIS_PATCHLEVEL  1
+#define SIS_PATCHLEVEL  0
 
 static drm_device_t          sis_device;
 drm_ctx_t                    sis_res_ctx;
 
 static struct file_operations sis_fops = {
+#if LINUX_VERSION_CODE >= 0x020400
+                               /* This started being used during 2.4.0-test */
+       owner:   THIS_MODULE,
+#endif
        open:    sis_open,
        flush:   drm_flush,
        release: sis_release,
@@ -65,14 +71,14 @@ static drm_ioctl_desc_t           sis_ioctls[] = {
        [DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)] = { drm_setunique,   1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_BLOCK)]      = { drm_block,       1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)]    = { drm_unblock,     1, 1 },
-
        [DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic,   1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)]    = { drm_addmap,      1, 1 },
+       
        [DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)]    = { sis_addctx,      1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)]     = { sis_rmctx,       1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_MOD_CTX)]    = { sis_modctx,      1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_GET_CTX)]    = { sis_getctx,      1, 0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)] = { sis_switchctx,   1, 1 },
+       [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)] = { sis_switchctx,  1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_NEW_CTX)]    = { sis_newctx,      1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_RES_CTX)]    = { sis_resctx,      1, 0 },
        [DRM_IOCTL_NR(DRM_IOCTL_ADD_DRAW)]   = { drm_adddraw,     1, 1 },
@@ -80,18 +86,16 @@ static drm_ioctl_desc_t           sis_ioctls[] = {
        [DRM_IOCTL_NR(DRM_IOCTL_LOCK)]       = { sis_lock,        1, 0 },
        [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)]     = { sis_unlock,      1, 0 },
        [DRM_IOCTL_NR(DRM_IOCTL_FINISH)]     = { drm_finish,      1, 0 },
-
-#ifdef DRM_AGP
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)] = { drm_agp_acquire, 1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)] = { drm_agp_release, 1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)]  = { drm_agp_enable,  1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)]    = { drm_agp_info,    1, 0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)]   = { drm_agp_alloc,   1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)]    = { drm_agp_free,    1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)]    = { drm_agp_bind,    1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_UNBIND)]  = { drm_agp_unbind,  1, 1 },
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)]   = {drm_agp_acquire, 1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)]   = {drm_agp_release, 1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)]    = {drm_agp_enable,  1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)]      = {drm_agp_info,    1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)]     = {drm_agp_alloc,   1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)]      = {drm_agp_free,    1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)]      = {drm_agp_bind,    1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_UNBIND)]    = {drm_agp_unbind,  1, 1},
 #endif
-
         /* FB Memory Management */
         [DRM_IOCTL_NR(SIS_IOCTL_FB_ALLOC)]   = { sis_fb_alloc,   1, 1 },
         [DRM_IOCTL_NR(SIS_IOCTL_FB_FREE)]    = { sis_fb_free,    1, 1 },
@@ -114,10 +118,25 @@ static drm_ioctl_desc_t         sis_ioctls[] = {
 static char                  *sis = NULL;
 #endif
 
-MODULE_AUTHOR("Precision Insight, Inc., Cedar Park, Texas.");
+MODULE_AUTHOR("VA Linux Systems, Inc.");
 MODULE_DESCRIPTION("sis");
 MODULE_PARM(sis, "s");
 
+#ifndef MODULE
+/* sis_options is called by the kernel to parse command-line options
+ * passed via the boot-loader (e.g., LILO).  It calls the insmod option
+ * routine, drm_parse_drm.
+ */
+
+static int __init sis_options(char *str)
+{
+       drm_parse_options(str);
+       return 1;
+}
+
+__setup("sis=", sis_options);
+#endif
+
 static int sis_setup(drm_device_t *dev)
 {
        int i;
@@ -219,30 +238,22 @@ static int sis_takedown(drm_device_t *dev)
                }
                dev->magiclist[i].head = dev->magiclist[i].tail = NULL;
        }
-#ifdef DRM_AGP
-                               /* Clear AGP information */
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
+                               /* Clear AGP information */
        if (dev->agp) {
-               drm_agp_mem_t *entry;
-               drm_agp_mem_t *nexte;
-               
-                               /* Remove AGP resources, but leave dev->agp
-                                   intact until cleanup is called. */
-               for (entry = dev->agp->memory; entry; entry = nexte) {
-                       nexte = entry->next;
-                       if (entry->bound) drm_unbind_agp(entry->memory);
-                       drm_free_agp(entry->memory, entry->pages);
-                       drm_free(entry, sizeof(*entry), DRM_MEM_AGPLISTS);
+               drm_agp_mem_t *temp;
+               drm_agp_mem_t *temp_next;
+          
+               temp = dev->agp->memory;
+               while(temp != NULL) {
+                       temp_next = temp->next;
+                       drm_free_agp(temp->memory, temp->pages);
+                       drm_free(temp, sizeof(*temp), DRM_MEM_AGPLISTS);
+                       temp = temp_next;
                }
-               dev->agp->memory = NULL;
-               
-               if (dev->agp->acquired && drm_agp.release)
-                       (*drm_agp.release)();
-               
-               dev->agp->acquired = 0;
-               dev->agp->enabled  = 0;
-       }       
+               if (dev->agp->acquired) (*drm_agp.release)();
+       }
 #endif
-
                                /* Clear vma list (only built for debugging) */
        if (dev->vmalist) {
                for (vma = dev->vmalist; vma; vma = vma_next) {
@@ -303,7 +314,7 @@ static int sis_takedown(drm_device_t *dev)
 /* sis_init is called via init_module at module load time, or via
  * linux/init/main.c (this is not currently supported). */
 
-int sis_init(void)
+static int sis_init(void)
 {
        int                   retcode;
        drm_device_t          *dev = &sis_device;
@@ -327,27 +338,16 @@ int sis_init(void)
 
        drm_mem_init();
        drm_proc_init(dev);
-
-#ifdef DRM_AGP
-       DRM_DEBUG("doing agp init\n");
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
        dev->agp    = drm_agp_init();
-       if(dev->agp == NULL) {
-               /* TODO, if no agp, run MMIO mode */
-               DRM_INFO("The sis drm module requires the agpgart module"
-                        " to function correctly\nPlease load the agpgart"
-                        " module before you load the mga module\n");
-               drm_proc_cleanup();
-               misc_deregister(&sis_misc);
-               sis_takedown(dev);
-               return -ENOMEM;
-       }
-#ifdef CONFIG_MTRR
-       dev->agp->agp_mtrr = mtrr_add(dev->agp->agp_info.aper_base,
-                                     dev->agp->agp_info.aper_size * 1024 * 1024,
-                                     MTRR_TYPE_WRCOMB,
-                                     1);
-#endif
 #endif
+       if((retcode = drm_ctxbitmap_init(dev))) {
+               DRM_ERROR("Cannot allocate memory for context bitmap.\n");
+               drm_proc_cleanup();
+               misc_deregister(&sis_misc);
+               sis_takedown(dev);
+               return retcode;
+       }
 
        DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
                 SIS_NAME,
@@ -362,7 +362,7 @@ int sis_init(void)
 
 /* sis_cleanup is called via cleanup_module at module unload time. */
 
-void sis_cleanup(void)
+static void sis_cleanup(void)
 {
        drm_device_t          *dev = &sis_device;
 
@@ -374,27 +374,21 @@ void sis_cleanup(void)
        } else {
                DRM_INFO("Module unloaded\n");
        }
-#ifdef DRM_AGP
-#ifdef CONFIG_MTRR
-       if(dev->agp && dev->agp->agp_mtrr) {
-               int retval;
-               retval = mtrr_del(dev->agp->agp_mtrr, 
-                                 dev->agp->agp_info.aper_base,
-                                 dev->agp->agp_info.aper_size * 1024*1024);
-               DRM_DEBUG("mtrr_del = %d\n", retval);
-       }
-#endif
-#endif
-
+       drm_ctxbitmap_cleanup(dev);
        sis_takedown(dev);
-#ifdef DRM_AGP
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
        if (dev->agp) {
+               drm_agp_uninit();
                drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS);
                dev->agp = NULL;
        }
 #endif
 }
 
+module_init(sis_init);
+module_exit(sis_cleanup);
+
+
 int sis_version(struct inode *inode, struct file *filp, unsigned int cmd,
                  unsigned long arg)
 {
@@ -433,11 +427,12 @@ int sis_open(struct inode *inode, struct file *filp)
 {
        drm_device_t  *dev    = &sis_device;
        int           retcode = 0;
-              
+       
        DRM_DEBUG("open_count = %d\n", dev->open_count);
-
        if (!(retcode = drm_open_helper(inode, filp, dev))) {
-               MOD_INC_USE_COUNT;
+#if LINUX_VERSION_CODE < 0x020333
+               MOD_INC_USE_COUNT; /* Needed before Linux 2.3.51 */
+#endif
                atomic_inc(&dev->total_open);
                spin_lock(&dev->count_lock);
                if (!dev->open_count++) {
@@ -452,13 +447,17 @@ int sis_open(struct inode *inode, struct file *filp)
 int sis_release(struct inode *inode, struct file *filp)
 {
        drm_file_t    *priv   = filp->private_data;
-       drm_device_t  *dev    = priv->dev;
+       drm_device_t  *dev;
        int           retcode = 0;
 
-       DRM_DEBUG("open_count = %d\n", dev->open_count);
+       lock_kernel();
+       dev = priv->dev;
 
+       DRM_DEBUG("open_count = %d\n", dev->open_count);
        if (!(retcode = drm_release(inode, filp))) {
-               MOD_DEC_USE_COUNT;
+#if LINUX_VERSION_CODE < 0x020333
+               MOD_DEC_USE_COUNT; /* Needed before Linux 2.3.51 */
+#endif
                atomic_inc(&dev->total_close);
                spin_lock(&dev->count_lock);
                if (!--dev->open_count) {
@@ -467,13 +466,17 @@ int sis_release(struct inode *inode, struct file *filp)
                                          atomic_read(&dev->ioctl_count),
                                          dev->blocked);
                                spin_unlock(&dev->count_lock);
+                               unlock_kernel();
                                return -EBUSY;
                        }
                        spin_unlock(&dev->count_lock);
+                       unlock_kernel();
                        return sis_takedown(dev);
                }
                spin_unlock(&dev->count_lock);
        }
+
+       unlock_kernel();
        return retcode;
 }
 
@@ -588,7 +591,9 @@ int sis_lock(struct inode *inode, struct file *filp, unsigned int cmd,
                                 /* Contention */
                         atomic_inc(&dev->total_sleeps);
                         current->state = TASK_INTERRUPTIBLE;
+#if 1
                        current->policy |= SCHED_YIELD;
+#endif
                         schedule();
                         if (signal_pending(current)) {
                                 ret = -ERESTARTSYS;
@@ -689,21 +694,3 @@ int sis_unlock(struct inode *inode, struct file *filp, unsigned int cmd,
        unblock_all_signals();
        return 0;
 }
-
-module_init(sis_init);
-module_exit(sis_cleanup);
-
-#ifndef MODULE
-/*
- * sis_setup is called by the kernel to parse command-line options passed
- * via the boot-loader (e.g., LILO).  It calls the insmod option routine,
- * drm_parse_options.
- */
-static int __init sis_options(char *str)
-{
-       drm_parse_options(str);
-       return 1;
-}
-
-__setup("sis=", sis_options);
-#endif
index 2026e9d..689b360 100644 (file)
@@ -29,6 +29,7 @@
  *    Daryll Strauss <daryll@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/tdfx_drv.c,v 1.6 2000/08/28 02:43:16 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index b1b8d97..0791af4 100644 (file)
@@ -1,3 +1,4 @@
+# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.kernel,v 1.8 2000/08/28 02:43:14 tsi Exp $
 #
 # Makefile for the drm device driver.  This driver provides support for
 # the Direct Rendering Infrastructure (DRI) in XFree86 4.x.
index 7fe57f8..5f0465a 100644 (file)
@@ -24,7 +24,7 @@
 # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 # DEALINGS IN THE SOFTWARE.
 # 
-# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.linux,v 1.9 2000/08/04 03:51:47 tsi Exp $
+# $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/Makefile.linux,v 1.11 2000/09/01 02:31:38 tsi Exp $
 #
 # ***** NOTE NOTE NOTE NOTE NOTE *****
 # To override the automatic Linux source tree determination, pass the
@@ -118,7 +118,9 @@ all:; @echo Error: Could not locate kernel tree in $A $B $C
 else
 SMP := $(shell gcc -E -nostdinc -I$(TREE) picker.c 2>/dev/null \
        | grep -s 'SMP = ' | cut -d' ' -f3)
-MODVERSIONS := $(shell gcc -E -I $(TREE) picker.c 2>/dev/null \
+MODULES := $(shell gcc -E -nostdinc -I $(TREE) picker.c 2>/dev/null \
+       | grep -s 'MODULES = ' | cut -d' ' -f3)
+MODVERSIONS := $(shell gcc -E -nostdinc -I $(TREE) picker.c 2>/dev/null \
        | grep -s 'MODVERSIONS = ' | cut -d' ' -f3)
 AGP := $(shell gcc -E -nostdinc -I$(TREE) picker.c 2>/dev/null \
        | grep -s 'AGP = ' | cut -d' ' -f3)
@@ -162,12 +164,20 @@ SISHEADERS=       sis_drv.h sis_ds.h sis_drm.h $(DRMHEADERS)
 endif
 
 all::;@echo === KERNEL HEADERS IN $(TREE)
-all::;@echo === SMP=${SMP} MODVERSIONS=${MODVERSIONS} AGP=${AGP} SIS=${SIS}
+all::;@echo === SMP=${SMP} MODULES=${MODULES} MODVERSIONS=${MODVERSIONS} AGP=${AGP}
 all::;@echo === kill_fasync has $(PARAMS) parameters
 all::;@echo === Compiling for machine $(MACHINE)
+
+ifeq ($(MODULES),0)
+all::;@echo
+all::;@echo "*** Kernel modules must be configured.  Build aborted."
+all::;@echo
+else
 all:: $(LIBS) $(MODS) $(PROGS)
 endif
 
+endif
+
 # **** End of SMP/MODVERSIONS detection
 
 # **** Handle SMP/MODVERSIONS
index 6441e01..97dd0d8 100644 (file)
@@ -1,3 +1,5 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/README.drm,v 1.4 2000/08/28 02:43:14 tsi Exp $ */
+
 ************************************************************
 * For the very latest on DRI development, please see:      *
 *     http://dri.sourceforge.net/                          *
index 24fd59c..c63f690 100644 (file)
@@ -28,6 +28,8 @@
  *
  */
 
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/agpsupport.c,v 1.4 2000/08/28 02:43:14 tsi Exp $ */
+
 #define __NO_VERSION__
 #include "drmP.h"
 #include <linux/module.h>
index 80bb4b6..ad719cf 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/auth.c,v 1.5 2000/08/28 02:43:14 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 28e0eb5..679a096 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/bufs.c,v 1.8 2000/08/28 02:43:14 tsi Exp $ */
 
 #define __NO_VERSION__
 #include <linux/config.h>
index 5a979e1..6cfe88f 100644 (file)
  * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic cmpxchg.
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm.h,v 1.9 2000/08/24 22:20:18 tsi Exp $ */
 
 #ifndef _DRM_H_
 #define _DRM_H_
 
+#if defined(__linux__)
 #include <asm/ioctl.h>         /* For _IO* macros */
+#elif defined(__FreeBSD__)
+#include <sys/ioccom.h>
+#endif
 
 #define DRM_PROC_DEVICES "/proc/devices"
 #define DRM_PROC_MISC   "/proc/misc"
@@ -289,7 +294,11 @@ typedef struct drm_agp_info {
 } drm_agp_info_t;
 
 #define DRM_IOCTL_BASE      'd'
+#if defined(__linux__)
 #define DRM_IOCTL_NR(n)             _IOC_NR(n)
+#elif defined(__FreeBSD__)
+#define DRM_IOCTL_NR(n)             ((n) & 0xff)
+#endif
 #define DRM_IO(nr)          _IO(DRM_IOCTL_BASE,nr)
 #define DRM_IOR(nr,size)     _IOR(DRM_IOCTL_BASE,nr,size)
 #define DRM_IOW(nr,size)     _IOW(DRM_IOCTL_BASE,nr,size)
index 2bfd4be..bfd124d 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  * 
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drmP.h,v 1.9 2000/08/28 02:43:14 tsi Exp $ */
 
 #ifndef _DRM_P_H_
 #define _DRM_P_H_
@@ -152,6 +153,11 @@ typedef struct wait_queue *wait_queue_head_t;
 #define module_exit(x)  void cleanup_module(void) { x(); }
 #endif
 
+                               /* virt_to_page added in 2.4.0-test6 */
+#if LINUX_VERSION_CODE < 0x020400
+#define virt_to_page(kaddr) (mem_map + MAP_NR(kaddr))
+#endif
+
                                /* Generic cmpxchg added in 2.3.x */
 #ifndef __HAVE_ARCH_CMPXCHG
                                /* Include this here so that driver can be
index 8e373e5..e6110a3 100644 (file)
@@ -29,6 +29,7 @@
  *    Daryll Strauss <daryll@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/fops.c,v 1.9 2000/08/28 02:43:14 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index dba974c..44dded0 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/gamma_drv.c,v 1.8 2000/08/28 02:43:14 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index e9ce395..f8bbe07 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  * 
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/gamma_drv.h,v 1.6 2000/08/28 02:43:15 tsi Exp $ */
 
 #ifndef _GAMMA_DRV_H_
 #define _GAMMA_DRV_H_
index c331bee..259c299 100644 (file)
@@ -28,6 +28,7 @@
  *         Jeff Hartmann <jhartmann@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_context.c,v 1.3 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index e2a8660..8a279be 100644 (file)
@@ -29,6 +29,7 @@
  *          Keith Whitwell <keithw@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_dma.c,v 1.6 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 86d5e23..a001b54 100644 (file)
@@ -28,6 +28,7 @@
  *         Jeff Hartmann <jhartmann@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_drv.c,v 1.5 2000/08/28 02:43:15 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index 1c95740..9f46be5 100644 (file)
@@ -28,6 +28,7 @@
  *         Jeff Hartmann <jhartmann@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/i810_drv.h,v 1.5 2000/08/28 02:43:15 tsi Exp $ */
 
 #ifndef _I810_DRV_H_
 #define _I810_DRV_H_
index 8de3dac..81cbd8f 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/init.c,v 1.5 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 5da7cc6..0a21a91 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/lists.c,v 1.9 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 34d19b2..36d424f 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/memory.c,v 1.8 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include <linux/config.h>
index 43733c1..36f2342 100644 (file)
@@ -28,6 +28,7 @@
  *        Jeff Hartmann <jhartmann@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/mga_context.c,v 1.4 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 4daa03a..a718939 100644 (file)
@@ -29,6 +29,7 @@
  *         Keith Whitwell <keithw@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/mga_dma.c,v 1.5 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index c551ba6..70d5d89 100644 (file)
@@ -29,6 +29,7 @@
  *
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/mga_drv.c,v 1.4 2000/08/28 02:43:15 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index 6feba09..f7f7053 100644 (file)
@@ -28,6 +28,7 @@
  *         Jeff Hartmann <jhartmann@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/mga_drv.h,v 1.4 2000/08/28 02:43:15 tsi Exp $ */
 
 #ifndef _MGA_DRV_H_
 #define _MGA_DRV_H_
index 0c2f572..5bdc068 100644 (file)
@@ -28,6 +28,7 @@
  *         Keith Whitwell <keithw@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/mga_state.c,v 1.5 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 6053a94..492e535 100644 (file)
@@ -1,10 +1,16 @@
-#include <linux/config.h>
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/picker.c,v 1.3 2000/09/01 02:31:40 tsi Exp $ */
+
+#include <linux/autoconf.h>
 #include <linux/version.h>
 
 #ifndef CONFIG_SMP
 #define CONFIG_SMP 0
 #endif
 
+#ifndef CONFIG_MODULES
+#define CONFIG_MODULES 0
+#endif
+
 #ifndef CONFIG_MODVERSIONS
 #define CONFIG_MODVERSIONS 0
 #endif
@@ -22,6 +28,7 @@
 #endif
 
 SMP = CONFIG_SMP
+MODULES = CONFIG_MODULES
 MODVERSIONS = CONFIG_MODVERSIONS
 AGP = CONFIG_AGP
 AGP_MODULE = CONFIG_AGP_MODULE
index ca062a0..f585e91 100644 (file)
@@ -27,6 +27,7 @@
  * Authors:
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/proc.c,v 1.9 2000/08/28 02:43:15 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 7e76441..1712aa5 100644 (file)
@@ -29,6 +29,7 @@
  *         Jeff Hartmann <jhartmann@valinux.com>
  * 
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/r128_bufs.c,v 1.3 2000/08/28 02:43:16 tsi Exp $ */
 
 #define __NO_VERSION__
 #include <linux/config.h>
index 9cadadb..9ac4ad8 100644 (file)
@@ -27,6 +27,7 @@
  * Author: Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/r128_context.c,v 1.3 2000/08/28 02:43:16 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index b58dcf0..8d4a370 100644 (file)
@@ -28,6 +28,7 @@
  *          Kevin E. Martin <martin@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/r128_drv.c,v 1.3 2000/08/28 02:43:16 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index da2f676..dbb9ddc 100644 (file)
@@ -28,6 +28,7 @@
  *          Kevin E. Martin <martin@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/r128_drv.h,v 1.4 2000/08/28 02:43:16 tsi Exp $ */
 
 #ifndef _R128_DRV_H_
 #define _R128_DRV_H_
index 06ae798..0b1990b 100644 (file)
@@ -1,6 +1,7 @@
 /* sis.c -- sis driver -*- linux-c -*-
  *
- * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas.
+ * 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
@@ -23,6 +24,7 @@
  * DEALINGS IN THE SOFTWARE.
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/sis_drv.c,v 1.5 2000/09/22 11:35:47 alanh Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
 #include "sis_drv.h"
 
 #define SIS_NAME        "sis"
-#define SIS_DESC        "sis"
-#define SIS_DATE        "19991009"
-#define SIS_MAJOR       0
+#define SIS_DESC        "SIS 300/630/540"
+#define SIS_DATE        "20000831"
+#define SIS_MAJOR       1
 #define SIS_MINOR       0
-#define SIS_PATCHLEVEL  1
+#define SIS_PATCHLEVEL  0
 
 static drm_device_t          sis_device;
 drm_ctx_t                    sis_res_ctx;
 
 static struct file_operations sis_fops = {
+#if LINUX_VERSION_CODE >= 0x020400
+                               /* This started being used during 2.4.0-test */
+       owner:   THIS_MODULE,
+#endif
        open:    sis_open,
        flush:   drm_flush,
        release: sis_release,
@@ -65,14 +71,14 @@ static drm_ioctl_desc_t           sis_ioctls[] = {
        [DRM_IOCTL_NR(DRM_IOCTL_SET_UNIQUE)] = { drm_setunique,   1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_BLOCK)]      = { drm_block,       1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)]    = { drm_unblock,     1, 1 },
-
        [DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic,   1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)]    = { drm_addmap,      1, 1 },
+       
        [DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)]    = { sis_addctx,      1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)]     = { sis_rmctx,       1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_MOD_CTX)]    = { sis_modctx,      1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_GET_CTX)]    = { sis_getctx,      1, 0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)] = { sis_switchctx,   1, 1 },
+       [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)] = { sis_switchctx,  1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_NEW_CTX)]    = { sis_newctx,      1, 1 },
        [DRM_IOCTL_NR(DRM_IOCTL_RES_CTX)]    = { sis_resctx,      1, 0 },
        [DRM_IOCTL_NR(DRM_IOCTL_ADD_DRAW)]   = { drm_adddraw,     1, 1 },
@@ -80,18 +86,16 @@ static drm_ioctl_desc_t           sis_ioctls[] = {
        [DRM_IOCTL_NR(DRM_IOCTL_LOCK)]       = { sis_lock,        1, 0 },
        [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)]     = { sis_unlock,      1, 0 },
        [DRM_IOCTL_NR(DRM_IOCTL_FINISH)]     = { drm_finish,      1, 0 },
-
-#ifdef DRM_AGP
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)] = { drm_agp_acquire, 1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)] = { drm_agp_release, 1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)]  = { drm_agp_enable,  1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)]    = { drm_agp_info,    1, 0 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)]   = { drm_agp_alloc,   1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)]    = { drm_agp_free,    1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)]    = { drm_agp_bind,    1, 1 },
-       [DRM_IOCTL_NR(DRM_IOCTL_AGP_UNBIND)]  = { drm_agp_unbind,  1, 1 },
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)]   = {drm_agp_acquire, 1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_RELEASE)]   = {drm_agp_release, 1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ENABLE)]    = {drm_agp_enable,  1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_INFO)]      = {drm_agp_info,    1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_ALLOC)]     = {drm_agp_alloc,   1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_FREE)]      = {drm_agp_free,    1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_BIND)]      = {drm_agp_bind,    1, 1},
+       [DRM_IOCTL_NR(DRM_IOCTL_AGP_UNBIND)]    = {drm_agp_unbind,  1, 1},
 #endif
-
         /* FB Memory Management */
         [DRM_IOCTL_NR(SIS_IOCTL_FB_ALLOC)]   = { sis_fb_alloc,   1, 1 },
         [DRM_IOCTL_NR(SIS_IOCTL_FB_FREE)]    = { sis_fb_free,    1, 1 },
@@ -114,10 +118,25 @@ static drm_ioctl_desc_t         sis_ioctls[] = {
 static char                  *sis = NULL;
 #endif
 
-MODULE_AUTHOR("Precision Insight, Inc., Cedar Park, Texas.");
+MODULE_AUTHOR("VA Linux Systems, Inc.");
 MODULE_DESCRIPTION("sis");
 MODULE_PARM(sis, "s");
 
+#ifndef MODULE
+/* sis_options is called by the kernel to parse command-line options
+ * passed via the boot-loader (e.g., LILO).  It calls the insmod option
+ * routine, drm_parse_drm.
+ */
+
+static int __init sis_options(char *str)
+{
+       drm_parse_options(str);
+       return 1;
+}
+
+__setup("sis=", sis_options);
+#endif
+
 static int sis_setup(drm_device_t *dev)
 {
        int i;
@@ -219,30 +238,22 @@ static int sis_takedown(drm_device_t *dev)
                }
                dev->magiclist[i].head = dev->magiclist[i].tail = NULL;
        }
-#ifdef DRM_AGP
-                               /* Clear AGP information */
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
+                               /* Clear AGP information */
        if (dev->agp) {
-               drm_agp_mem_t *entry;
-               drm_agp_mem_t *nexte;
-               
-                               /* Remove AGP resources, but leave dev->agp
-                                   intact until cleanup is called. */
-               for (entry = dev->agp->memory; entry; entry = nexte) {
-                       nexte = entry->next;
-                       if (entry->bound) drm_unbind_agp(entry->memory);
-                       drm_free_agp(entry->memory, entry->pages);
-                       drm_free(entry, sizeof(*entry), DRM_MEM_AGPLISTS);
+               drm_agp_mem_t *temp;
+               drm_agp_mem_t *temp_next;
+          
+               temp = dev->agp->memory;
+               while(temp != NULL) {
+                       temp_next = temp->next;
+                       drm_free_agp(temp->memory, temp->pages);
+                       drm_free(temp, sizeof(*temp), DRM_MEM_AGPLISTS);
+                       temp = temp_next;
                }
-               dev->agp->memory = NULL;
-               
-               if (dev->agp->acquired && drm_agp.release)
-                       (*drm_agp.release)();
-               
-               dev->agp->acquired = 0;
-               dev->agp->enabled  = 0;
-       }       
+               if (dev->agp->acquired) (*drm_agp.release)();
+       }
 #endif
-
                                /* Clear vma list (only built for debugging) */
        if (dev->vmalist) {
                for (vma = dev->vmalist; vma; vma = vma_next) {
@@ -303,7 +314,7 @@ static int sis_takedown(drm_device_t *dev)
 /* sis_init is called via init_module at module load time, or via
  * linux/init/main.c (this is not currently supported). */
 
-int sis_init(void)
+static int sis_init(void)
 {
        int                   retcode;
        drm_device_t          *dev = &sis_device;
@@ -327,27 +338,16 @@ int sis_init(void)
 
        drm_mem_init();
        drm_proc_init(dev);
-
-#ifdef DRM_AGP
-       DRM_DEBUG("doing agp init\n");
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
        dev->agp    = drm_agp_init();
-       if(dev->agp == NULL) {
-               /* TODO, if no agp, run MMIO mode */
-               DRM_INFO("The sis drm module requires the agpgart module"
-                        " to function correctly\nPlease load the agpgart"
-                        " module before you load the mga module\n");
-               drm_proc_cleanup();
-               misc_deregister(&sis_misc);
-               sis_takedown(dev);
-               return -ENOMEM;
-       }
-#ifdef CONFIG_MTRR
-       dev->agp->agp_mtrr = mtrr_add(dev->agp->agp_info.aper_base,
-                                     dev->agp->agp_info.aper_size * 1024 * 1024,
-                                     MTRR_TYPE_WRCOMB,
-                                     1);
-#endif
 #endif
+       if((retcode = drm_ctxbitmap_init(dev))) {
+               DRM_ERROR("Cannot allocate memory for context bitmap.\n");
+               drm_proc_cleanup();
+               misc_deregister(&sis_misc);
+               sis_takedown(dev);
+               return retcode;
+       }
 
        DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",
                 SIS_NAME,
@@ -362,7 +362,7 @@ int sis_init(void)
 
 /* sis_cleanup is called via cleanup_module at module unload time. */
 
-void sis_cleanup(void)
+static void sis_cleanup(void)
 {
        drm_device_t          *dev = &sis_device;
 
@@ -374,27 +374,21 @@ void sis_cleanup(void)
        } else {
                DRM_INFO("Module unloaded\n");
        }
-#ifdef DRM_AGP
-#ifdef CONFIG_MTRR
-       if(dev->agp && dev->agp->agp_mtrr) {
-               int retval;
-               retval = mtrr_del(dev->agp->agp_mtrr, 
-                                 dev->agp->agp_info.aper_base,
-                                 dev->agp->agp_info.aper_size * 1024*1024);
-               DRM_DEBUG("mtrr_del = %d\n", retval);
-       }
-#endif
-#endif
-
+       drm_ctxbitmap_cleanup(dev);
        sis_takedown(dev);
-#ifdef DRM_AGP
+#if defined(CONFIG_AGP) || defined(CONFIG_AGP_MODULE)
        if (dev->agp) {
+               drm_agp_uninit();
                drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS);
                dev->agp = NULL;
        }
 #endif
 }
 
+module_init(sis_init);
+module_exit(sis_cleanup);
+
+
 int sis_version(struct inode *inode, struct file *filp, unsigned int cmd,
                  unsigned long arg)
 {
@@ -433,11 +427,12 @@ int sis_open(struct inode *inode, struct file *filp)
 {
        drm_device_t  *dev    = &sis_device;
        int           retcode = 0;
-              
+       
        DRM_DEBUG("open_count = %d\n", dev->open_count);
-
        if (!(retcode = drm_open_helper(inode, filp, dev))) {
-               MOD_INC_USE_COUNT;
+#if LINUX_VERSION_CODE < 0x020333
+               MOD_INC_USE_COUNT; /* Needed before Linux 2.3.51 */
+#endif
                atomic_inc(&dev->total_open);
                spin_lock(&dev->count_lock);
                if (!dev->open_count++) {
@@ -452,13 +447,17 @@ int sis_open(struct inode *inode, struct file *filp)
 int sis_release(struct inode *inode, struct file *filp)
 {
        drm_file_t    *priv   = filp->private_data;
-       drm_device_t  *dev    = priv->dev;
+       drm_device_t  *dev;
        int           retcode = 0;
 
-       DRM_DEBUG("open_count = %d\n", dev->open_count);
+       lock_kernel();
+       dev = priv->dev;
 
+       DRM_DEBUG("open_count = %d\n", dev->open_count);
        if (!(retcode = drm_release(inode, filp))) {
-               MOD_DEC_USE_COUNT;
+#if LINUX_VERSION_CODE < 0x020333
+               MOD_DEC_USE_COUNT; /* Needed before Linux 2.3.51 */
+#endif
                atomic_inc(&dev->total_close);
                spin_lock(&dev->count_lock);
                if (!--dev->open_count) {
@@ -467,13 +466,17 @@ int sis_release(struct inode *inode, struct file *filp)
                                          atomic_read(&dev->ioctl_count),
                                          dev->blocked);
                                spin_unlock(&dev->count_lock);
+                               unlock_kernel();
                                return -EBUSY;
                        }
                        spin_unlock(&dev->count_lock);
+                       unlock_kernel();
                        return sis_takedown(dev);
                }
                spin_unlock(&dev->count_lock);
        }
+
+       unlock_kernel();
        return retcode;
 }
 
@@ -588,7 +591,9 @@ int sis_lock(struct inode *inode, struct file *filp, unsigned int cmd,
                                 /* Contention */
                         atomic_inc(&dev->total_sleeps);
                         current->state = TASK_INTERRUPTIBLE;
+#if 1
                        current->policy |= SCHED_YIELD;
+#endif
                         schedule();
                         if (signal_pending(current)) {
                                 ret = -ERESTARTSYS;
@@ -689,21 +694,3 @@ int sis_unlock(struct inode *inode, struct file *filp, unsigned int cmd,
        unblock_all_signals();
        return 0;
 }
-
-module_init(sis_init);
-module_exit(sis_cleanup);
-
-#ifndef MODULE
-/*
- * sis_setup is called by the kernel to parse command-line options passed
- * via the boot-loader (e.g., LILO).  It calls the insmod option routine,
- * drm_parse_options.
- */
-static int __init sis_options(char *str)
-{
-       drm_parse_options(str);
-       return 1;
-}
-
-__setup("sis=", sis_options);
-#endif
index 24523b8..8dd25e0 100644 (file)
@@ -1,6 +1,7 @@
 /* sis_drv.h -- Private header for sis driver -*- linux-c -*-
  *
  * 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
  * DEALINGS IN THE SOFTWARE.
  * 
  */
-
-/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/sis_drv.h,v 1.2 2000/08/04 03:51:47 tsi Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/sis_drv.h,v 1.3 2000/09/22 11:35:47 alanh Exp $ */
 
 #ifndef _SIS_DRV_H_
 #define _SIS_DRV_H_
 
                                /* sis_drv.c */
-extern int  sis_init(void);
-extern void sis_cleanup(void);
 extern int  sis_version(struct inode *inode, struct file *filp,
                          unsigned int cmd, unsigned long arg);
 extern int  sis_open(struct inode *inode, struct file *filp);
@@ -72,7 +70,6 @@ int sis_fb_alloc(struct inode *inode, struct file *filp, unsigned int cmd,
 int sis_fb_free(struct inode *inode, struct file *filp, unsigned int cmd,
                  unsigned long arg);
 
-
 int sis_agp_init(struct inode *inode, struct file *filp, unsigned int cmd,
                  unsigned long arg);
 int sis_agp_alloc(struct inode *inode, struct file *filp, unsigned int cmd,
index 333b519..f60da78 100644 (file)
@@ -1,4 +1,33 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/sis_mm.c,v 1.2 2000/08/04 03:51:48 tsi Exp $ */
+/* sis_mm.c -- Private header for Direct Rendering Manager -*- linux-c -*-
+ * Created: Mon Jan  4 10:05:05 1999 by sclin@sis.com.tw
+ *
+ * Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan.
+ * 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:
+ *    Sung-Ching Lin <sclin@sis.com.tw>
+ * 
+ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/sis_mm.c,v 1.4 2000/09/22 11:35:47 alanh Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 1fd7331..9c07ed8 100644 (file)
@@ -29,6 +29,7 @@
  *    Daryll Strauss <daryll@valinux.com>
  * 
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/tdfx_context.c,v 1.5 2000/08/28 02:43:16 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 2026e9d..689b360 100644 (file)
@@ -29,6 +29,7 @@
  *    Daryll Strauss <daryll@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/tdfx_drv.c,v 1.6 2000/08/28 02:43:16 tsi Exp $ */
 
 #include <linux/config.h>
 #include "drmP.h"
index bee840e..e6ec7aa 100644 (file)
@@ -29,6 +29,7 @@
  *    Daryll Strauss <daryll@valinux.com>
  * 
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/tdfx_drv.h,v 1.5 2000/08/28 02:43:16 tsi Exp $ */
 
 #ifndef _TDFX_DRV_H_
 #define _TDFX_DRV_H_
index 7c5a24b..074e75d 100644 (file)
@@ -28,6 +28,7 @@
  *    Rickard E. (Rik) Faith <faith@valinux.com>
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/vm.c,v 1.8 2000/08/28 02:43:16 tsi Exp $ */
 
 #define __NO_VERSION__
 #include "drmP.h"
index 5a979e1..6cfe88f 100644 (file)
  * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic cmpxchg.
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm.h,v 1.9 2000/08/24 22:20:18 tsi Exp $ */
 
 #ifndef _DRM_H_
 #define _DRM_H_
 
+#if defined(__linux__)
 #include <asm/ioctl.h>         /* For _IO* macros */
+#elif defined(__FreeBSD__)
+#include <sys/ioccom.h>
+#endif
 
 #define DRM_PROC_DEVICES "/proc/devices"
 #define DRM_PROC_MISC   "/proc/misc"
@@ -289,7 +294,11 @@ typedef struct drm_agp_info {
 } drm_agp_info_t;
 
 #define DRM_IOCTL_BASE      'd'
+#if defined(__linux__)
 #define DRM_IOCTL_NR(n)             _IOC_NR(n)
+#elif defined(__FreeBSD__)
+#define DRM_IOCTL_NR(n)             ((n) & 0xff)
+#endif
 #define DRM_IO(nr)          _IO(DRM_IOCTL_BASE,nr)
 #define DRM_IOR(nr,size)     _IOR(DRM_IOCTL_BASE,nr,size)
 #define DRM_IOW(nr,size)     _IOW(DRM_IOCTL_BASE,nr,size)
index 5a979e1..6cfe88f 100644 (file)
  * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic cmpxchg.
  *
  */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/drm.h,v 1.9 2000/08/24 22:20:18 tsi Exp $ */
 
 #ifndef _DRM_H_
 #define _DRM_H_
 
+#if defined(__linux__)
 #include <asm/ioctl.h>         /* For _IO* macros */
+#elif defined(__FreeBSD__)
+#include <sys/ioccom.h>
+#endif
 
 #define DRM_PROC_DEVICES "/proc/devices"
 #define DRM_PROC_MISC   "/proc/misc"
@@ -289,7 +294,11 @@ typedef struct drm_agp_info {
 } drm_agp_info_t;
 
 #define DRM_IOCTL_BASE      'd'
+#if defined(__linux__)
 #define DRM_IOCTL_NR(n)             _IOC_NR(n)
+#elif defined(__FreeBSD__)
+#define DRM_IOCTL_NR(n)             ((n) & 0xff)
+#endif
 #define DRM_IO(nr)          _IO(DRM_IOCTL_BASE,nr)
 #define DRM_IOR(nr,size)     _IOR(DRM_IOCTL_BASE,nr,size)
 #define DRM_IOW(nr,size)     _IOW(DRM_IOCTL_BASE,nr,size)