agp_backend.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * AGPGART module version 0.99
  3.  * Copyright (C) 1999 Jeff Hartmann
  4.  * Copyright (C) 1999 Precision Insight, Inc.
  5.  * Copyright (C) 1999 Xi Graphics, Inc.
  6.  *
  7.  * Permission is hereby granted, free of charge, to any person obtaining a
  8.  * copy of this software and associated documentation files (the "Software"),
  9.  * to deal in the Software without restriction, including without limitation
  10.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  11.  * and/or sell copies of the Software, and to permit persons to whom the
  12.  * Software is furnished to do so, subject to the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice shall be included
  15.  * in all copies or substantial portions of the Software.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  18.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  19.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  20.  * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 
  21.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 
  22.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
  23.  * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  24.  *
  25.  */
  26. #ifndef _AGP_BACKEND_H
  27. #define _AGP_BACKEND_H 1
  28. #ifndef TRUE
  29. #define TRUE 1
  30. #endif
  31. #ifndef FALSE
  32. #define FALSE 0
  33. #endif
  34. #define AGPGART_VERSION_MAJOR 0
  35. #define AGPGART_VERSION_MINOR 99
  36. enum chipset_type {
  37. NOT_SUPPORTED,
  38. INTEL_GENERIC,
  39. INTEL_LX,
  40. INTEL_BX,
  41. INTEL_GX,
  42. INTEL_I810,
  43. INTEL_I815,
  44. INTEL_I820,
  45. INTEL_I830_M,
  46. INTEL_I840,
  47. INTEL_I845,
  48. INTEL_I850,
  49. INTEL_I860,
  50. VIA_GENERIC,
  51. VIA_VP3,
  52. VIA_MVP3,
  53. VIA_MVP4,
  54. VIA_APOLLO_PRO,
  55. VIA_APOLLO_KX133,
  56. VIA_APOLLO_KT133,
  57. SIS_GENERIC,
  58. AMD_GENERIC,
  59. AMD_IRONGATE,
  60. AMD_761,
  61. AMD_762,
  62. ALI_M1541,
  63. ALI_M1621,
  64. ALI_M1631,
  65. ALI_M1632,
  66. ALI_M1641,
  67. ALI_M1647,
  68. ALI_M1651,
  69. ALI_GENERIC,
  70. SVWRKS_HE,
  71. SVWRKS_LE,
  72. SVWRKS_GENERIC
  73. };
  74. typedef struct _agp_version {
  75. u16 major;
  76. u16 minor;
  77. } agp_version;
  78. typedef struct _agp_kern_info {
  79. agp_version version;
  80. struct pci_dev *device;
  81. enum chipset_type chipset;
  82. unsigned long mode;
  83. off_t aper_base;
  84. size_t aper_size;
  85. int max_memory; /* In pages */
  86. int current_memory;
  87. int cant_use_aperture;
  88. unsigned long page_mask;
  89. } agp_kern_info;
  90. /* 
  91.  * The agp_memory structure has information
  92.  * about the block of agp memory allocated.
  93.  * A caller may manipulate the next and prev
  94.  * pointers to link each allocated item into
  95.  * a list.  These pointers are ignored by the 
  96.  * backend.  Everything else should never be
  97.  * written to, but the caller may read any of
  98.  * the items to detrimine the status of this
  99.  * block of agp memory.
  100.  * 
  101.  */
  102. typedef struct _agp_memory {
  103. int key;
  104. struct _agp_memory *next;
  105. struct _agp_memory *prev;
  106. size_t page_count;
  107. int num_scratch_pages;
  108. unsigned long *memory;
  109. off_t pg_start;
  110. u32 type;
  111. u32 physical;
  112. u8 is_bound;
  113. u8 is_flushed;
  114. } agp_memory;
  115. #define AGP_NORMAL_MEMORY 0
  116. extern void agp_free_memory(agp_memory *);
  117. /*
  118.  * agp_free_memory :
  119.  * 
  120.  * This function frees memory associated with
  121.  * an agp_memory pointer.  It is the only function
  122.  * that can be called when the backend is not owned
  123.  * by the caller.  (So it can free memory on client
  124.  * death.)
  125.  * 
  126.  * It takes an agp_memory pointer as an argument.
  127.  * 
  128.  */
  129. extern agp_memory *agp_allocate_memory(size_t, u32);
  130. /*
  131.  * agp_allocate_memory :
  132.  * 
  133.  * This function allocates a group of pages of
  134.  * a certain type.
  135.  * 
  136.  * It takes a size_t argument of the number of pages, and
  137.  * an u32 argument of the type of memory to be allocated.  
  138.  * Every agp bridge device will allow you to allocate 
  139.  * AGP_NORMAL_MEMORY which maps to physical ram.  Any other
  140.  * type is device dependant.
  141.  * 
  142.  * It returns NULL whenever memory is unavailable.
  143.  * 
  144.  */
  145. extern void agp_copy_info(agp_kern_info *);
  146. /*
  147.  * agp_copy_info :
  148.  * 
  149.  * This function copies information about the
  150.  * agp bridge device and the state of the agp
  151.  * backend into an agp_kern_info pointer.
  152.  * 
  153.  * It takes an agp_kern_info pointer as an
  154.  * argument.  The caller should insure that
  155.  * this pointer is valid.
  156.  * 
  157.  */
  158. extern int agp_bind_memory(agp_memory *, off_t);
  159. /*
  160.  * agp_bind_memory :
  161.  * 
  162.  * This function binds an agp_memory structure
  163.  * into the graphics aperture translation table.
  164.  * 
  165.  * It takes an agp_memory pointer and an offset into
  166.  * the graphics aperture translation table as arguments
  167.  * 
  168.  * It returns -EINVAL if the pointer == NULL.
  169.  * It returns -EBUSY if the area of the table
  170.  * requested is already in use.
  171.  * 
  172.  */
  173. extern int agp_unbind_memory(agp_memory *);
  174. /* 
  175.  * agp_unbind_memory :
  176.  * 
  177.  * This function removes an agp_memory structure
  178.  * from the graphics aperture translation table.
  179.  * 
  180.  * It takes an agp_memory pointer as an argument.
  181.  * 
  182.  * It returns -EINVAL if this piece of agp_memory
  183.  * is not currently bound to the graphics aperture
  184.  * translation table or if the agp_memory 
  185.  * pointer == NULL
  186.  * 
  187.  */
  188. extern void agp_enable(u32);
  189. /* 
  190.  * agp_enable :
  191.  * 
  192.  * This function initializes the agp point-to-point
  193.  * connection.
  194.  * 
  195.  * It takes an agp mode register as an argument
  196.  * 
  197.  */
  198. extern int agp_backend_acquire(void);
  199. /*
  200.  * agp_backend_acquire :
  201.  * 
  202.  * This Function attempts to acquire the agp
  203.  * backend.
  204.  * 
  205.  * returns -EBUSY if agp is in use,
  206.  * returns 0 if the caller owns the agp backend
  207.  */
  208. extern void agp_backend_release(void);
  209. /*
  210.  * agp_backend_release :
  211.  * 
  212.  * This Function releases the lock on the agp
  213.  * backend.
  214.  * 
  215.  * The caller must insure that the graphics
  216.  * aperture translation table is read for use
  217.  * by another entity.  (Ensure that all memory
  218.  * it bound is unbound.)
  219.  * 
  220.  */
  221. typedef struct {
  222. void       (*free_memory)(agp_memory *);
  223. agp_memory *(*allocate_memory)(size_t, u32);
  224. int        (*bind_memory)(agp_memory *, off_t);
  225. int        (*unbind_memory)(agp_memory *);
  226. void       (*enable)(u32);
  227. int        (*acquire)(void);
  228. void       (*release)(void);
  229. void       (*copy_info)(agp_kern_info *);
  230. } drm_agp_t;
  231. extern const drm_agp_t *drm_agp_p;
  232. /*
  233.  * Interface between drm and agp code.  When agp initializes, it makes
  234.  * the above structure available via inter_module_register(), drm might
  235.  * use it.  Keith Owens <kaos@ocs.com.au> 28 Oct 2000.
  236.  */
  237. #endif /* _AGP_BACKEND_H */