diff options
Diffstat (limited to 'linux')
| -rw-r--r-- | linux/Makefile.linux | 2 | ||||
| -rw-r--r-- | linux/sis.h | 81 | ||||
| -rw-r--r-- | linux/sis_drm.h | 46 | ||||
| -rw-r--r-- | linux/sis_drv.h | 45 | ||||
| -rw-r--r-- | linux/sis_ds.c | 408 | ||||
| -rw-r--r-- | linux/sis_ds.h | 163 | ||||
| -rw-r--r-- | linux/sis_mm.c | 307 | 
7 files changed, 1 insertions, 1051 deletions
| diff --git a/linux/Makefile.linux b/linux/Makefile.linux index c3451399..9de67667 100644 --- a/linux/Makefile.linux +++ b/linux/Makefile.linux @@ -44,7 +44,7 @@ endif  MACHINE := $(shell uname -m)  # Modules for all architectures -MODULE_LIST := gamma.o tdfx.o r128.o radeon.o mga.o #sis.o +MODULE_LIST := gamma.o tdfx.o r128.o radeon.o mga.o sis.o  # Modules only for ix86 architectures  ifneq (,$(findstring 86,$(MACHINE))) diff --git a/linux/sis.h b/linux/sis.h deleted file mode 100644 index bc66f4dc..00000000 --- a/linux/sis.h +++ /dev/null @@ -1,81 +0,0 @@ -/* 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 - * 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. - *  - */ -/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel/sis.h,v 1.3 2002/10/30 12:52:38 alanh Exp $ */ - -#ifndef __SIS_H__ -#define __SIS_H__ - -/* This remains constant for all DRM template files. - * Name it sisdrv_##x as there's a conflict with sis_free/malloc in the kernel - * that's used for fb devices  - */ -#define DRM(x) sisdrv_##x - -/* General customization: - */ -#define __HAVE_AGP		1 -#define __MUST_HAVE_AGP		0 -#define __HAVE_MTRR		1 -#define __HAVE_CTX_BITMAP	1 - -#define DRIVER_AUTHOR	 "SIS" -#define DRIVER_NAME	 "sis" -#define DRIVER_DESC	 "SIS 300/630/540" -#define DRIVER_DATE	 "20010503" -#define DRIVER_MAJOR	 1 -#define DRIVER_MINOR	 0 -#define DRIVER_PATCHLEVEL  0 - -#define DRIVER_IOCTLS \ -        [DRM_IOCTL_NR(SIS_IOCTL_FB_ALLOC)]   = { sis_fb_alloc,	  1, 0 }, \ -        [DRM_IOCTL_NR(SIS_IOCTL_FB_FREE)]    = { sis_fb_free,	  1, 0 }, \ -        /* AGP Memory Management */					  \ -        [DRM_IOCTL_NR(SIS_IOCTL_AGP_INIT)]   = { sisp_agp_init,	  1, 0 }, \ -        [DRM_IOCTL_NR(SIS_IOCTL_AGP_ALLOC)]  = { sisp_agp_alloc,  1, 0 }, \ -        [DRM_IOCTL_NR(SIS_IOCTL_AGP_FREE)]   = { sisp_agp_free,	  1, 0 } -#if 0 /* these don't appear to be defined */ -	/* SIS Stereo */						  -	[DRM_IOCTL_NR(DRM_IOCTL_CONTROL)]    = { sis_control,	  1, 1 },  -        [DRM_IOCTL_NR(SIS_IOCTL_FLIP)]       = { sis_flip,	  1, 1 },  -        [DRM_IOCTL_NR(SIS_IOCTL_FLIP_INIT)]  = { sis_flip_init,	  1, 1 },  -        [DRM_IOCTL_NR(SIS_IOCTL_FLIP_FINAL)] = { sis_flip_final,  1, 1 } -#endif - -#define __HAVE_COUNTERS		5 - -/* Buffer customization: - */ -#define DRIVER_AGP_BUFFERS_MAP( dev )					\ -	((drm_sis_private_t *)((dev)->dev_private))->buffers - -extern int sis_init_context(int context); -extern int sis_final_context(int context); - -#define DRIVER_CTX_CTOR sis_init_context -#define DRIVER_CTX_DTOR sis_final_context - -#endif diff --git a/linux/sis_drm.h b/linux/sis_drm.h deleted file mode 100644 index 8aaee224..00000000 --- a/linux/sis_drm.h +++ /dev/null @@ -1,46 +0,0 @@ - -#ifndef _sis_drm_public_h_ -#define _sis_drm_public_h_ - -/* SiS specific ioctls */ -#define SIS_IOCTL_FB_ALLOC		DRM_IOWR(0x44, drm_sis_mem_t) -#define SIS_IOCTL_FB_FREE		DRM_IOW( 0x45, drm_sis_mem_t) -#define SIS_IOCTL_AGP_INIT		DRM_IOWR(0x53, drm_sis_agp_t) -#define SIS_IOCTL_AGP_ALLOC		DRM_IOWR(0x54, drm_sis_mem_t) -#define SIS_IOCTL_AGP_FREE		DRM_IOW( 0x55, drm_sis_mem_t) -#define SIS_IOCTL_FLIP			DRM_IOW( 0x48, drm_sis_flip_t) -#define SIS_IOCTL_FLIP_INIT		DRM_IO(  0x49) -#define SIS_IOCTL_FLIP_FINAL		DRM_IO(  0x50) - -typedef struct { -  int context; -  unsigned int offset; -  unsigned int size; -  unsigned int free; -} drm_sis_mem_t; - -typedef struct { -  unsigned int offset, size; -} drm_sis_agp_t; - -typedef struct { -  unsigned int left, right; -} drm_sis_flip_t; - -#ifdef __KERNEL__ - -int sis_fb_alloc(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); -int sis_fb_free(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); - -int sisp_agp_init(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); -int sisp_agp_alloc(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); -int sisp_agp_free(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); - -#endif - -#endif diff --git a/linux/sis_drv.h b/linux/sis_drv.h deleted file mode 100644 index 844e38b0..00000000 --- a/linux/sis_drv.h +++ /dev/null @@ -1,45 +0,0 @@ -/* 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 - * 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. - *  - */ - -#ifndef _SIS_DRV_H_ -#define _SIS_DRV_H_ - -typedef struct drm_sis_private { -	drm_map_t *buffers; -} drm_sis_private_t; - -/* Stereo ? - this was never committed */ - -int sis_flip(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); -int sis_flip_init(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); -int sis_flip_final(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg); -void flip_final(void); - -#endif diff --git a/linux/sis_ds.c b/linux/sis_ds.c deleted file mode 100644 index f55cf6ab..00000000 --- a/linux/sis_ds.c +++ /dev/null @@ -1,408 +0,0 @@ -/* sis_ds.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> - *  - */ - -#define __NO_VERSION__ -#include <linux/module.h> -#include <linux/delay.h> -#include <linux/errno.h> -#include <linux/kernel.h> -#include <linux/slab.h> -#include <linux/poll.h> -#include <asm/io.h> -#include <linux/pci.h> - -#include "sis_ds.h" - -/* Set Data Structure, not check repeated value - * temporarily used - */ - -set_t *setInit(void) -{ -  int i; -  set_t *set; - -  set = (set_t *)MALLOC(sizeof(set_t)); -  if (set) { -    for(i = 0; i < SET_SIZE; i++){ -      set->list[i].free_next = i+1;     -      set->list[i].alloc_next = -1; -    }     -    set->list[SET_SIZE-1].free_next = -1; -    set->free = 0; -    set->alloc = -1; -    set->trace = -1; -  }   -  return set; -} - -int setAdd(set_t *set, ITEM_TYPE item) -{ -  int free = set->free; -   -  if(free != -1){ -    set->list[free].val = item; -    set->free = set->list[free].free_next; -  } -  else{ -    return 0; -  } - -  set->list[free].alloc_next = set->alloc; -  set->alloc = free;   -  set->list[free].free_next = -1;     - -  return 1; -} - -int setDel(set_t *set, ITEM_TYPE item) -{ -  int alloc = set->alloc; -  int prev = -1;   -   -  while(alloc != -1){ -    if(set->list[alloc].val == item){ -      if(prev != -1)       -        set->list[prev].alloc_next = set->list[alloc].alloc_next;  -      else -        set->alloc = set->list[alloc].alloc_next; -      break; -    } -    prev = alloc; -    alloc = set->list[alloc].alloc_next;       -  } - -  if(alloc == -1) -    return 0; -   -  set->list[alloc].free_next = set->free; -  set->free = alloc; -  set->list[alloc].alloc_next = -1;    - -  return 1; -} - -/* setFirst -> setAdd -> setNext is wrong */ - -int setFirst(set_t *set, ITEM_TYPE *item) -{ -  if(set->alloc == -1) -    return 0; - -  *item = set->list[set->alloc].val; -  set->trace = set->list[set->alloc].alloc_next;  - -  return 1; -} - -int setNext(set_t *set, ITEM_TYPE *item) -{ -  if(set->trace == -1) -    return 0; -   -  *item = set->list[set->trace].val; -  set->trace = set->list[set->trace].alloc_next;       - -  return 1; -} - -int setDestroy(set_t *set) -{ -  FREE(set); - -  return 1; -} - -/* - * GLX Hardware Device Driver common code - * Copyright (C) 1999 Keith Whitwell - * - * 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 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 - * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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. - * - */ - -#define ISFREE(bptr) ((bptr)->free) - -#define PRINTF(fmt, arg...) do{}while(0) -#define fprintf(fmt, arg...) do{}while(0) - -static void *calloc(size_t nmemb, size_t size) -{ -  void *addr; -  addr = kmalloc(nmemb*size, GFP_KERNEL); -  if (addr) -    memset(addr, 0, nmemb*size); -  return addr; -} -#define free(n) kfree(n) -            -void mmDumpMemInfo( memHeap_t *heap ) -{ -  TMemBlock *p; - -  PRINTF ("Memory heap %p:\n", heap); -  if (heap == 0) { -    PRINTF ("  heap == 0\n"); -  } else { -    p = (TMemBlock *)heap; -    while (p) { -      PRINTF ("  Offset:%08x, Size:%08x, %c%c\n",p->ofs,p->size, -	     p->free ? '.':'U', -	     p->reserved ? 'R':'.'); -      p = p->next; -    } -  } -  PRINTF ("End of memory blocks\n"); -} - -memHeap_t *mmInit(int ofs, -		  int size) -{ -   PMemBlock blocks; -   -   if (size <= 0) { -      return 0; -   } -   blocks = (TMemBlock *) calloc(1,sizeof(TMemBlock)); -   if (blocks) { -      blocks->ofs = ofs; -      blocks->size = size; -      blocks->free = 1; -      return (memHeap_t *)blocks; -   } else -      return 0; -} - -/* Kludgey workaround for existing i810 server.  Remove soon. - */ -memHeap_t *mmAddRange( memHeap_t *heap, -		       int ofs, -		       int size ) -{ -   PMemBlock blocks; -   blocks = (TMemBlock *) calloc(2,sizeof(TMemBlock)); -   if (blocks) { -      blocks[0].size = size; -      blocks[0].free = 1; -      blocks[0].ofs = ofs; -      blocks[0].next = &blocks[1]; - -      /* Discontinuity - stops JoinBlock from trying to join non-adjacent -       * ranges. -       */ -      blocks[1].size = 0; -      blocks[1].free = 0; -      blocks[1].ofs = ofs+size; -      blocks[1].next = (PMemBlock) heap;       -      return (memHeap_t *)blocks; -   }  -   else -      return heap; -} - -static TMemBlock* SliceBlock(TMemBlock *p,  -			     int startofs, int size,  -			     int reserved, int alignment) -{ -  TMemBlock *newblock; - -  /* break left */ -  if (startofs > p->ofs) { -    newblock = (TMemBlock*) calloc(1,sizeof(TMemBlock)); -    newblock->ofs = startofs; -    newblock->size = p->size - (startofs - p->ofs); -    newblock->free = 1; -    newblock->next = p->next; -    p->size -= newblock->size; -    p->next = newblock; -    p = newblock; -  } - -  /* break right */ -  if (size < p->size) { -    newblock = (TMemBlock*) calloc(1,sizeof(TMemBlock)); -    newblock->ofs = startofs + size; -    newblock->size = p->size - size; -    newblock->free = 1; -    newblock->next = p->next; -    p->size = size; -    p->next = newblock; -  } - -  /* p = middle block */ -  p->align = alignment; -  p->free = 0; -  p->reserved = reserved; -  return p; -} - -PMemBlock mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch) -{ -  int mask,startofs,endofs; -  TMemBlock *p; - -  if (!heap || align2 < 0 || size <= 0) -    return NULL; -  mask = (1 << align2)-1; -  startofs = 0; -  p = (TMemBlock *)heap; -  while (p) { -    if (ISFREE(p)) { -      startofs = (p->ofs + mask) & ~mask; -      if ( startofs < startSearch ) { -      	startofs = startSearch; -      } -      endofs = startofs+size; -      if (endofs <= (p->ofs+p->size)) -	break; -    } -    p = p->next; -  } -  if (!p) -    return NULL; -  p = SliceBlock(p,startofs,size,0,mask+1); -  p->heap = heap; -  return p; -} - -static __inline__ int Join2Blocks(TMemBlock *p) -{ -  if (p->free && p->next && p->next->free) { -    TMemBlock *q = p->next; -    p->size += q->size; -    p->next = q->next; -    free(q); -    return 1; -  } -  return 0; -} - -int mmFreeMem(PMemBlock b) -{ -  TMemBlock *p,*prev; - -  if (!b) -    return 0; -  if (!b->heap) { -     fprintf(stderr, "no heap\n"); -     return -1; -  } -  p = b->heap; -  prev = NULL; -  while (p && p != b) { -    prev = p; -    p = p->next; -  } -  if (!p || p->free || p->reserved) { -     if (!p) -	fprintf(stderr, "block not found in heap\n"); -     else if (p->free) -	fprintf(stderr, "block already free\n"); -     else -	fprintf(stderr, "block is reserved\n"); -    return -1; -  } -  p->free = 1; -  Join2Blocks(p); -  if (prev) -    Join2Blocks(prev); -  return 0; -} - -int mmReserveMem(memHeap_t *heap, int offset,int size) -{ -  int endofs; -  TMemBlock *p; - -  if (!heap || size <= 0) -    return -1; -  endofs = offset+size; -  p = (TMemBlock *)heap; -  while (p && p->ofs <= offset) { -    if (ISFREE(p) && endofs <= (p->ofs+p->size)) { -      SliceBlock(p,offset,size,1,1); -      return 0; -    } -    p = p->next; -  } -  return -1; -} - -int mmFreeReserved(memHeap_t *heap, int offset) -{ -  TMemBlock *p,*prev; - -  if (!heap) -    return -1; -  p = (TMemBlock *)heap; -  prev = NULL; -  while (p && p->ofs != offset) { -    prev = p; -    p = p->next; -  } -  if (!p || !p->reserved) -    return -1; -  p->free = 1; -  p->reserved = 0; -  Join2Blocks(p); -  if (prev) -    Join2Blocks(prev); -  return 0; -} - -void mmDestroy(memHeap_t *heap) -{ -  TMemBlock *p,*q; - -  if (!heap) -    return; -  p = (TMemBlock *)heap; -  while (p) { -    q = p->next; -    free(p); -    p = q; -  } -} diff --git a/linux/sis_ds.h b/linux/sis_ds.h deleted file mode 100644 index c3367dba..00000000 --- a/linux/sis_ds.h +++ /dev/null @@ -1,163 +0,0 @@ -/* sis_ds.h -- 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> - *  - */ - -#ifndef _sis_ds_h_ -#define _sis_ds_h_ - -/* Set Data Structure */ - -#define SET_SIZE 5000 -#define MALLOC(s) kmalloc(s, GFP_KERNEL) -#define FREE(s) kfree(s) - -typedef unsigned int ITEM_TYPE; - -typedef struct { -  ITEM_TYPE val; -  int alloc_next, free_next; -} list_item_t; - -typedef struct { -  int alloc; -  int free; -  int trace; -  list_item_t list[SET_SIZE]; -} set_t; - -set_t *setInit(void); -int setAdd(set_t *set, ITEM_TYPE item); -int setDel(set_t *set, ITEM_TYPE item); -int setFirst(set_t *set, ITEM_TYPE *item); -int setNext(set_t *set, ITEM_TYPE *item); -int setDestroy(set_t *set); - -#endif - -/* - * GLX Hardware Device Driver common code - * Copyright (C) 1999 Keith Whitwell - * - * 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 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 - * KEITH WHITWELL, OR ANY OTHER CONTRIBUTORS 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. - * - */ - -#ifndef MM_INC -#define MM_INC - -struct mem_block_t { -  struct mem_block_t *next; -  struct mem_block_t *heap; -  int ofs,size; -  int align; -  int free:1; -  int reserved:1; -}; -typedef struct mem_block_t TMemBlock; -typedef struct mem_block_t *PMemBlock; - -/* a heap is just the first block in a chain */ -typedef struct mem_block_t memHeap_t; - -static __inline__ int mmBlockSize(PMemBlock b) -{ return b->size; } - -static __inline__ int mmOffset(PMemBlock b) -{ return b->ofs; } - -static __inline__ void mmMarkReserved(PMemBlock b) -{ b->reserved = 1; } - -/*  - * input: total size in bytes - * return: a heap pointer if OK, NULL if error - */ -memHeap_t *mmInit( int ofs, int size ); - - - -memHeap_t *mmAddRange( memHeap_t *heap, -		       int ofs, -		       int size ); - - -/* - * Allocate 'size' bytes with 2^align2 bytes alignment, - * restrict the search to free memory after 'startSearch' - * depth and back buffers should be in different 4mb banks - * to get better page hits if possible - * input:	size = size of block - *       	align2 = 2^align2 bytes alignment - *		startSearch = linear offset from start of heap to begin search - * return: pointer to the allocated block, 0 if error - */ -PMemBlock  mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch ); - -/* - * Free block starts at offset - * input: pointer to a block - * return: 0 if OK, -1 if error - */ -int  mmFreeMem( PMemBlock b ); - -/* - * Reserve 'size' bytes block start at offset - * This is used to prevent allocation of memory already used - * by the X server for the front buffer, pixmaps, and cursor - * input: size, offset - * output: 0 if OK, -1 if error - */ -int mmReserveMem( memHeap_t *heap, int offset,int size ); -int mmFreeReserved( memHeap_t *heap, int offset ); - -/* - * destroy MM - */ -void mmDestroy( memHeap_t *mmInit ); - -/* For debuging purpose. */ -void mmDumpMemInfo( memHeap_t *mmInit ); - -#endif diff --git a/linux/sis_mm.c b/linux/sis_mm.c deleted file mode 100644 index b2aa22d4..00000000 --- a/linux/sis_mm.c +++ /dev/null @@ -1,307 +0,0 @@ -/* 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> - *  - */ - -#define __NO_VERSION__ -#include "sis.h" -#include <linux/sisfb.h> -#include "drmP.h" -#include "sis_drm.h" -#include "sis_drv.h" -#include "sis_ds.h" - -#define MAX_CONTEXT 100 -#define VIDEO_TYPE 0  -#define AGP_TYPE 1 - -typedef struct { -  int used; -  int context; -  set_t *sets[2]; /* 0 for video, 1 for AGP */ -} sis_context_t; - -static sis_context_t global_ppriv[MAX_CONTEXT]; - -static int add_alloc_set(int context, int type, unsigned int val) -{ -  int i, retval = 0; -   -  for(i = 0; i < MAX_CONTEXT; i++) -    if(global_ppriv[i].used && global_ppriv[i].context == context){ -      retval = setAdd(global_ppriv[i].sets[type], val); -      break; -    } -  return retval; -} - -static int del_alloc_set(int context, int type, unsigned int val) -{   -  int i, retval = 0; -  for(i = 0; i < MAX_CONTEXT; i++) -    if(global_ppriv[i].used && global_ppriv[i].context == context){ -      retval = setDel(global_ppriv[i].sets[type], val); -      break; -    } -  return retval; -} - -/* fb management via fb device */  -#if 1 -int sis_fb_alloc(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg) -{ -  drm_sis_mem_t fb; -  struct sis_memreq req; -  int retval = 0; -    -  if (copy_from_user(&fb, (drm_sis_mem_t *)arg, sizeof(fb))) -	  return -EFAULT; -   -  req.size = fb.size; -  sis_malloc(&req); -  if(req.offset){ -    /* TODO */ -    fb.offset = req.offset; -    fb.free = req.offset; -    if(!add_alloc_set(fb.context, VIDEO_TYPE, fb.free)){ -      DRM_DEBUG("adding to allocation set fails\n"); -      sis_free(req.offset); -      retval = -1; -    } -  } -  else{   -    fb.offset = 0; -    fb.size = 0; -    fb.free = 0; -  } -    -  if (copy_to_user((drm_sis_mem_t *)arg, &fb, sizeof(fb))) return -EFAULT; - -  DRM_DEBUG("alloc fb, size = %d, offset = %ld\n", fb.size, req.offset); - -  return retval; -} - -int sis_fb_free(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg) -{ -  drm_sis_mem_t fb; -  int retval = 0; -     -  if (copy_from_user(&fb, (drm_sis_mem_t *)arg, sizeof(fb))) -	  return -EFAULT; -   -  if(!fb.free){ -    return -1; -  } - -  sis_free(fb.free); -  if(!del_alloc_set(fb.context, VIDEO_TYPE, fb.free)) -    retval = -1; - -  DRM_DEBUG("free fb, offset = %d\n", fb.free); -   -  return retval; -} - -#else - -int sis_fb_alloc(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg) -{ -  return -1; -} - -int sis_fb_free(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg) -{ -  return 0; -} - -#endif - -/* agp memory management */  -#if 1 - -static memHeap_t *AgpHeap = NULL; - -int sisp_agp_init(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg) -{ -  drm_sis_agp_t agp; -    -  if (copy_from_user(&agp, (drm_sis_agp_t *)arg, sizeof(agp))) -	  return -EFAULT; - -  AgpHeap = mmInit(agp.offset, agp.size); - -  DRM_DEBUG("offset = %u, size = %u", agp.offset, agp.size); -   -  return 0; -} - -int sisp_agp_alloc(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg) -{ -  drm_sis_mem_t agp; -  PMemBlock block; -  int retval = 0; -    -  if(!AgpHeap) -    return -1; -   -  if (copy_from_user(&agp, (drm_sis_mem_t *)arg, sizeof(agp))) -	  return -EFAULT; -   -  block = mmAllocMem(AgpHeap, agp.size, 0, 0); -  if(block){ -    /* TODO */ -    agp.offset = block->ofs; -    agp.free = (unsigned long)block; -    if(!add_alloc_set(agp.context, AGP_TYPE, agp.free)){ -      DRM_DEBUG("adding to allocation set fails\n"); -      mmFreeMem((PMemBlock)(unsigned long)agp.free); -      retval = -1; -    } -  } -  else{   -    agp.offset = 0; -    agp.size = 0; -    agp.free = 0; -  } -    -  if (copy_to_user((drm_sis_mem_t *)arg, &agp, sizeof(agp))) return -EFAULT; - -  DRM_DEBUG("alloc agp, size = %d, offset = %d\n", agp.size, agp.offset); - -  return retval; -} - -int sisp_agp_free(struct inode *inode, struct file *filp, unsigned int cmd, -		  unsigned long arg) -{ -  drm_sis_mem_t agp; -  int retval = 0; - -  if(!AgpHeap) -    return -1; -     -  if (copy_from_user(&agp, (drm_sis_mem_t *)arg, sizeof(agp))) -	  return -EFAULT; -   -  if(!agp.free){ -    return -1; -  } - -  mmFreeMem((PMemBlock)(unsigned long)agp.free); -  if(!del_alloc_set(agp.context, AGP_TYPE, agp.free)) -    retval = -1; - -  DRM_DEBUG("free agp, free = %d\n", agp.free); -   -  return retval; -} - -#endif - -int sis_init_context(int context) -{ -	int i; -	 -	for(i = 0; i < MAX_CONTEXT ; i++) -	  if(global_ppriv[i].used && (global_ppriv[i].context == context)) -	    break; - -	if(i >= MAX_CONTEXT){ -	  for(i = 0; i < MAX_CONTEXT ; i++){ -	    if(!global_ppriv[i].used){ -	      global_ppriv[i].context = context; -	      global_ppriv[i].used = 1; -	      global_ppriv[i].sets[0] = setInit(); -	      global_ppriv[i].sets[1] = setInit(); -	      DRM_DEBUG("init allocation set, socket=%d, context = %d\n",  -	                 i, context); -	      break; -	    }	 -	  } -	  if((i >= MAX_CONTEXT) || (global_ppriv[i].sets[0] == NULL) || -	     (global_ppriv[i].sets[1] == NULL)){ -	    return 0; -	  } -	} -	 -	return 1; -} - -int sis_final_context(int context) -{ -	int i; - -	for(i=0; i<MAX_CONTEXT; i++) -	  if(global_ppriv[i].used && (global_ppriv[i].context == context)) -	    break; -           -	if(i < MAX_CONTEXT){ -	  set_t *set; -	  unsigned int item; -	  int retval; -	   -  	  DRM_DEBUG("find socket %d, context = %d\n", i, context); - -	  /* Video Memory */ -	  set = global_ppriv[i].sets[0]; -	  retval = setFirst(set, &item); -	  while(retval){ -   	    DRM_DEBUG("free video memory 0x%x\n", item); -            sis_free(item); -	    retval = setNext(set, &item); -	  } -	  setDestroy(set); - -	  /* AGP Memory */ -	  set = global_ppriv[i].sets[1]; -	  retval = setFirst(set, &item); -	  while(retval){ -   	    DRM_DEBUG("free agp memory 0x%x\n", item); -	    mmFreeMem((PMemBlock)(unsigned long)item); -	    retval = setNext(set, &item); -	  } -	  setDestroy(set); -	   -	  global_ppriv[i].used = 0;	   -        } - -	/* turn-off auto-flip */ -	/* TODO */ -#if defined(SIS_STEREO) -	flip_final(); -#endif -	 -	return 1; -} | 
