agp_backend.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
- /*
- * AGPGART module version 0.99
- * Copyright (C) 1999 Jeff Hartmann
- * Copyright (C) 1999 Precision Insight, Inc.
- * Copyright (C) 1999 Xi Graphics, Inc.
- *
- * 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
- * JEFF HARTMANN, 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 _AGP_BACKEND_H
- #define _AGP_BACKEND_H 1
- #ifndef TRUE
- #define TRUE 1
- #endif
- #ifndef FALSE
- #define FALSE 0
- #endif
- #define AGPGART_VERSION_MAJOR 0
- #define AGPGART_VERSION_MINOR 99
- enum chipset_type {
- NOT_SUPPORTED,
- INTEL_GENERIC,
- INTEL_LX,
- INTEL_BX,
- INTEL_GX,
- INTEL_I810,
- INTEL_I815,
- INTEL_I820,
- INTEL_I830_M,
- INTEL_I840,
- INTEL_I845,
- INTEL_I850,
- INTEL_I860,
- VIA_GENERIC,
- VIA_VP3,
- VIA_MVP3,
- VIA_MVP4,
- VIA_APOLLO_PRO,
- VIA_APOLLO_KX133,
- VIA_APOLLO_KT133,
- SIS_GENERIC,
- AMD_GENERIC,
- AMD_IRONGATE,
- AMD_761,
- AMD_762,
- ALI_M1541,
- ALI_M1621,
- ALI_M1631,
- ALI_M1632,
- ALI_M1641,
- ALI_M1647,
- ALI_M1651,
- ALI_GENERIC,
- SVWRKS_HE,
- SVWRKS_LE,
- SVWRKS_GENERIC
- };
- typedef struct _agp_version {
- u16 major;
- u16 minor;
- } agp_version;
- typedef struct _agp_kern_info {
- agp_version version;
- struct pci_dev *device;
- enum chipset_type chipset;
- unsigned long mode;
- off_t aper_base;
- size_t aper_size;
- int max_memory; /* In pages */
- int current_memory;
- int cant_use_aperture;
- unsigned long page_mask;
- } agp_kern_info;
- /*
- * The agp_memory structure has information
- * about the block of agp memory allocated.
- * A caller may manipulate the next and prev
- * pointers to link each allocated item into
- * a list. These pointers are ignored by the
- * backend. Everything else should never be
- * written to, but the caller may read any of
- * the items to detrimine the status of this
- * block of agp memory.
- *
- */
- typedef struct _agp_memory {
- int key;
- struct _agp_memory *next;
- struct _agp_memory *prev;
- size_t page_count;
- int num_scratch_pages;
- unsigned long *memory;
- off_t pg_start;
- u32 type;
- u32 physical;
- u8 is_bound;
- u8 is_flushed;
- } agp_memory;
- #define AGP_NORMAL_MEMORY 0
- extern void agp_free_memory(agp_memory *);
- /*
- * agp_free_memory :
- *
- * This function frees memory associated with
- * an agp_memory pointer. It is the only function
- * that can be called when the backend is not owned
- * by the caller. (So it can free memory on client
- * death.)
- *
- * It takes an agp_memory pointer as an argument.
- *
- */
- extern agp_memory *agp_allocate_memory(size_t, u32);
- /*
- * agp_allocate_memory :
- *
- * This function allocates a group of pages of
- * a certain type.
- *
- * It takes a size_t argument of the number of pages, and
- * an u32 argument of the type of memory to be allocated.
- * Every agp bridge device will allow you to allocate
- * AGP_NORMAL_MEMORY which maps to physical ram. Any other
- * type is device dependant.
- *
- * It returns NULL whenever memory is unavailable.
- *
- */
- extern void agp_copy_info(agp_kern_info *);
- /*
- * agp_copy_info :
- *
- * This function copies information about the
- * agp bridge device and the state of the agp
- * backend into an agp_kern_info pointer.
- *
- * It takes an agp_kern_info pointer as an
- * argument. The caller should insure that
- * this pointer is valid.
- *
- */
- extern int agp_bind_memory(agp_memory *, off_t);
- /*
- * agp_bind_memory :
- *
- * This function binds an agp_memory structure
- * into the graphics aperture translation table.
- *
- * It takes an agp_memory pointer and an offset into
- * the graphics aperture translation table as arguments
- *
- * It returns -EINVAL if the pointer == NULL.
- * It returns -EBUSY if the area of the table
- * requested is already in use.
- *
- */
- extern int agp_unbind_memory(agp_memory *);
- /*
- * agp_unbind_memory :
- *
- * This function removes an agp_memory structure
- * from the graphics aperture translation table.
- *
- * It takes an agp_memory pointer as an argument.
- *
- * It returns -EINVAL if this piece of agp_memory
- * is not currently bound to the graphics aperture
- * translation table or if the agp_memory
- * pointer == NULL
- *
- */
- extern void agp_enable(u32);
- /*
- * agp_enable :
- *
- * This function initializes the agp point-to-point
- * connection.
- *
- * It takes an agp mode register as an argument
- *
- */
- extern int agp_backend_acquire(void);
- /*
- * agp_backend_acquire :
- *
- * This Function attempts to acquire the agp
- * backend.
- *
- * returns -EBUSY if agp is in use,
- * returns 0 if the caller owns the agp backend
- */
- extern void agp_backend_release(void);
- /*
- * agp_backend_release :
- *
- * This Function releases the lock on the agp
- * backend.
- *
- * The caller must insure that the graphics
- * aperture translation table is read for use
- * by another entity. (Ensure that all memory
- * it bound is unbound.)
- *
- */
- typedef struct {
- void (*free_memory)(agp_memory *);
- agp_memory *(*allocate_memory)(size_t, u32);
- int (*bind_memory)(agp_memory *, off_t);
- int (*unbind_memory)(agp_memory *);
- void (*enable)(u32);
- int (*acquire)(void);
- void (*release)(void);
- void (*copy_info)(agp_kern_info *);
- } drm_agp_t;
- extern const drm_agp_t *drm_agp_p;
- /*
- * Interface between drm and agp code. When agp initializes, it makes
- * the above structure available via inter_module_register(), drm might
- * use it. Keith Owens <kaos@ocs.com.au> 28 Oct 2000.
- */
- #endif /* _AGP_BACKEND_H */