diff --git a/bsd/Imakefile b/bsd/Imakefile index 7d33c205..81445a7d 100644 --- a/bsd/Imakefile +++ b/bsd/Imakefile @@ -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 @@ -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 index ddad1be7..00000000 --- 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 - * - * Acknowledgements: - * Dec 1999, Richard Henderson , move to generic cmpxchg. - * - */ - -#ifndef _DRM_H_ -#define _DRM_H_ - -#include /* 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 index 4c8e09f6..00000000 --- a/bsd/i810_drm.h +++ /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< - * Keith Whitwell - * - */ - -#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< - * - * $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 diff --git a/libdrm/xf86drm.c b/libdrm/xf86drm.c index c561f01f..c933f593 100644 --- a/libdrm/xf86drm.c +++ b/libdrm/xf86drm.c @@ -27,7 +27,7 @@ * Authors: Rickard E. (Rik) Faith * Kevin E. Martin * - * $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; diff --git a/linux-core/Makefile.kernel b/linux-core/Makefile.kernel index b1b8d976..0791af45 100644 --- a/linux-core/Makefile.kernel +++ b/linux-core/Makefile.kernel @@ -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. diff --git a/linux-core/README.drm b/linux-core/README.drm index 6441e01e..97dd0d84 100644 --- a/linux-core/README.drm +++ b/linux-core/README.drm @@ -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/ * diff --git a/linux-core/drmP.h b/linux-core/drmP.h index 2bfd4bef..bfd124dd 100644 --- a/linux-core/drmP.h +++ b/linux-core/drmP.h @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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_ @@ -150,6 +151,11 @@ typedef struct wait_queue *wait_queue_head_t; #endif #ifndef module_exit #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 */ diff --git a/linux-core/i810_dma.c b/linux-core/i810_dma.c index e2a86606..8a279be8 100644 --- a/linux-core/i810_dma.c +++ b/linux-core/i810_dma.c @@ -29,6 +29,7 @@ * Keith Whitwell * */ +/* $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" diff --git a/linux-core/i810_drv.c b/linux-core/i810_drv.c index 86d5e230..a001b544 100644 --- a/linux-core/i810_drv.c +++ b/linux-core/i810_drv.c @@ -28,6 +28,7 @@ * Jeff Hartmann * */ +/* $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 #include "drmP.h" diff --git a/linux-core/i810_drv.h b/linux-core/i810_drv.h index 1c957401..9f46be50 100644 --- a/linux-core/i810_drv.h +++ b/linux-core/i810_drv.h @@ -28,6 +28,7 @@ * Jeff Hartmann * */ +/* $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_ diff --git a/linux-core/mga_drv.c b/linux-core/mga_drv.c index c551ba6e..70d5d89f 100644 --- a/linux-core/mga_drv.c +++ b/linux-core/mga_drv.c @@ -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 #include "drmP.h" diff --git a/linux-core/r128_drv.c b/linux-core/r128_drv.c index b58dcf06..8d4a3705 100644 --- a/linux-core/r128_drv.c +++ b/linux-core/r128_drv.c @@ -28,6 +28,7 @@ * Kevin E. Martin * */ +/* $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 #include "drmP.h" diff --git a/linux-core/sis_drv.c b/linux-core/sis_drv.c index 06ae7988..0b1990b0 100644 --- a/linux-core/sis_drv.c +++ b/linux-core/sis_drv.c @@ -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 #include "drmP.h" @@ -30,16 +32,20 @@ #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; +#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; } -#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 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 diff --git a/linux-core/tdfx_drv.c b/linux-core/tdfx_drv.c index 2026e9d0..689b360a 100644 --- a/linux-core/tdfx_drv.c +++ b/linux-core/tdfx_drv.c @@ -29,6 +29,7 @@ * Daryll Strauss * */ +/* $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 #include "drmP.h" diff --git a/linux/Makefile.kernel b/linux/Makefile.kernel index b1b8d976..0791af45 100644 --- a/linux/Makefile.kernel +++ b/linux/Makefile.kernel @@ -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. diff --git a/linux/Makefile.linux b/linux/Makefile.linux index 7fe57f8e..5f0465a4 100644 --- a/linux/Makefile.linux +++ b/linux/Makefile.linux @@ -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 diff --git a/linux/README.drm b/linux/README.drm index 6441e01e..97dd0d84 100644 --- a/linux/README.drm +++ b/linux/README.drm @@ -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/ * diff --git a/linux/agpsupport.c b/linux/agpsupport.c index 24fd59cd..c63f690c 100644 --- a/linux/agpsupport.c +++ b/linux/agpsupport.c @@ -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 diff --git a/linux/auth.c b/linux/auth.c index 80bb4b65..ad719cf1 100644 --- a/linux/auth.c +++ b/linux/auth.c @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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" diff --git a/linux/bufs.c b/linux/bufs.c index 28e0eb5f..679a096f 100644 --- a/linux/bufs.c +++ b/linux/bufs.c @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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 diff --git a/linux/drm.h b/linux/drm.h index 5a979e1c..6cfe88fa 100644 --- a/linux/drm.h +++ b/linux/drm.h @@ -31,11 +31,16 @@ * Dec 1999, Richard Henderson , 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 /* For _IO* macros */ +#elif defined(__FreeBSD__) +#include +#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) diff --git a/linux/drmP.h b/linux/drmP.h index 2bfd4bef..bfd124dd 100644 --- a/linux/drmP.h +++ b/linux/drmP.h @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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_ @@ -150,6 +151,11 @@ typedef struct wait_queue *wait_queue_head_t; #endif #ifndef module_exit #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 */ diff --git a/linux/fops.c b/linux/fops.c index 8e373e5a..e6110a34 100644 --- a/linux/fops.c +++ b/linux/fops.c @@ -29,6 +29,7 @@ * Daryll Strauss * */ +/* $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" diff --git a/linux/gamma_drv.c b/linux/gamma_drv.c index dba974c2..44dded04 100644 --- a/linux/gamma_drv.c +++ b/linux/gamma_drv.c @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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 #include "drmP.h" diff --git a/linux/gamma_drv.h b/linux/gamma_drv.h index e9ce3958..f8bbe077 100644 --- a/linux/gamma_drv.h +++ b/linux/gamma_drv.h @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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_ diff --git a/linux/i810_context.c b/linux/i810_context.c index c331beed..259c2991 100644 --- a/linux/i810_context.c +++ b/linux/i810_context.c @@ -28,6 +28,7 @@ * Jeff Hartmann * */ +/* $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" diff --git a/linux/i810_dma.c b/linux/i810_dma.c index e2a86606..8a279be8 100644 --- a/linux/i810_dma.c +++ b/linux/i810_dma.c @@ -29,6 +29,7 @@ * Keith Whitwell * */ +/* $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" diff --git a/linux/i810_drv.c b/linux/i810_drv.c index 86d5e230..a001b544 100644 --- a/linux/i810_drv.c +++ b/linux/i810_drv.c @@ -28,6 +28,7 @@ * Jeff Hartmann * */ +/* $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 #include "drmP.h" diff --git a/linux/i810_drv.h b/linux/i810_drv.h index 1c957401..9f46be50 100644 --- a/linux/i810_drv.h +++ b/linux/i810_drv.h @@ -28,6 +28,7 @@ * Jeff Hartmann * */ +/* $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_ diff --git a/linux/init.c b/linux/init.c index 8de3dac9..81cbd8ff 100644 --- a/linux/init.c +++ b/linux/init.c @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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" diff --git a/linux/lists.c b/linux/lists.c index 5da7cc6c..0a21a910 100644 --- a/linux/lists.c +++ b/linux/lists.c @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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" diff --git a/linux/memory.c b/linux/memory.c index 34d19b20..36d424fd 100644 --- a/linux/memory.c +++ b/linux/memory.c @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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 diff --git a/linux/mga_context.c b/linux/mga_context.c index 43733c14..36f23420 100644 --- a/linux/mga_context.c +++ b/linux/mga_context.c @@ -28,6 +28,7 @@ * Jeff Hartmann * */ +/* $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" diff --git a/linux/mga_dma.c b/linux/mga_dma.c index 4daa03ac..a718939b 100644 --- a/linux/mga_dma.c +++ b/linux/mga_dma.c @@ -29,6 +29,7 @@ * Keith Whitwell * */ +/* $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" diff --git a/linux/mga_drv.c b/linux/mga_drv.c index c551ba6e..70d5d89f 100644 --- a/linux/mga_drv.c +++ b/linux/mga_drv.c @@ -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 #include "drmP.h" diff --git a/linux/mga_drv.h b/linux/mga_drv.h index 6feba09a..f7f70538 100644 --- a/linux/mga_drv.h +++ b/linux/mga_drv.h @@ -28,6 +28,7 @@ * Jeff Hartmann * */ +/* $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_ diff --git a/linux/mga_state.c b/linux/mga_state.c index 0c2f5729..5bdc0684 100644 --- a/linux/mga_state.c +++ b/linux/mga_state.c @@ -28,6 +28,7 @@ * Keith Whitwell * */ +/* $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" diff --git a/linux/picker.c b/linux/picker.c index 6053a947..492e5350 100644 --- a/linux/picker.c +++ b/linux/picker.c @@ -1,10 +1,16 @@ -#include +/* $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 #include #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 diff --git a/linux/proc.c b/linux/proc.c index ca062a09..f585e915 100644 --- a/linux/proc.c +++ b/linux/proc.c @@ -27,6 +27,7 @@ * Authors: * Rickard E. (Rik) Faith */ +/* $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" diff --git a/linux/r128_bufs.c b/linux/r128_bufs.c index 7e76441e..1712aa55 100644 --- a/linux/r128_bufs.c +++ b/linux/r128_bufs.c @@ -29,6 +29,7 @@ * Jeff Hartmann * */ +/* $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 diff --git a/linux/r128_context.c b/linux/r128_context.c index 9cadadba..9ac4ad86 100644 --- a/linux/r128_context.c +++ b/linux/r128_context.c @@ -27,6 +27,7 @@ * Author: Rickard E. (Rik) Faith * */ +/* $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" diff --git a/linux/r128_drv.c b/linux/r128_drv.c index b58dcf06..8d4a3705 100644 --- a/linux/r128_drv.c +++ b/linux/r128_drv.c @@ -28,6 +28,7 @@ * Kevin E. Martin * */ +/* $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 #include "drmP.h" diff --git a/linux/r128_drv.h b/linux/r128_drv.h index da2f676d..dbb9ddcb 100644 --- a/linux/r128_drv.h +++ b/linux/r128_drv.h @@ -28,6 +28,7 @@ * Kevin E. Martin * */ +/* $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_ diff --git a/linux/sis_drv.c b/linux/sis_drv.c index 06ae7988..0b1990b0 100644 --- a/linux/sis_drv.c +++ b/linux/sis_drv.c @@ -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 #include "drmP.h" @@ -30,16 +32,20 @@ #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; +#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; } -#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 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 diff --git a/linux/sis_drv.h b/linux/sis_drv.h index 24523b8f..8dd25e0a 100644 --- a/linux/sis_drv.h +++ b/linux/sis_drv.h @@ -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 @@ -23,15 +24,12 @@ * 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, diff --git a/linux/sis_mm.c b/linux/sis_mm.c index 333b5196..f60da781 100644 --- a/linux/sis_mm.c +++ b/linux/sis_mm.c @@ -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 + * + */ +/* $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" diff --git a/linux/tdfx_context.c b/linux/tdfx_context.c index 1fd73310..9c07ed87 100644 --- a/linux/tdfx_context.c +++ b/linux/tdfx_context.c @@ -29,6 +29,7 @@ * Daryll Strauss * */ +/* $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" diff --git a/linux/tdfx_drv.c b/linux/tdfx_drv.c index 2026e9d0..689b360a 100644 --- a/linux/tdfx_drv.c +++ b/linux/tdfx_drv.c @@ -29,6 +29,7 @@ * Daryll Strauss * */ +/* $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 #include "drmP.h" diff --git a/linux/tdfx_drv.h b/linux/tdfx_drv.h index bee840e1..e6ec7aa4 100644 --- a/linux/tdfx_drv.h +++ b/linux/tdfx_drv.h @@ -29,6 +29,7 @@ * Daryll Strauss * */ +/* $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_ diff --git a/linux/vm.c b/linux/vm.c index 7c5a24bc..074e75d9 100644 --- a/linux/vm.c +++ b/linux/vm.c @@ -28,6 +28,7 @@ * Rickard E. (Rik) Faith * */ +/* $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" diff --git a/shared-core/drm.h b/shared-core/drm.h index 5a979e1c..6cfe88fa 100644 --- a/shared-core/drm.h +++ b/shared-core/drm.h @@ -31,11 +31,16 @@ * Dec 1999, Richard Henderson , 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 /* For _IO* macros */ +#elif defined(__FreeBSD__) +#include +#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) diff --git a/shared/drm.h b/shared/drm.h index 5a979e1c..6cfe88fa 100644 --- a/shared/drm.h +++ b/shared/drm.h @@ -31,11 +31,16 @@ * Dec 1999, Richard Henderson , 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 /* For _IO* macros */ +#elif defined(__FreeBSD__) +#include +#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)