11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * AGPGART module version 0.99 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Jeff Hartmann 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Precision Insight, Inc. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Xi Graphics, Inc. 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Permission is hereby granted, free of charge, to any person obtaining a 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * copy of this software and associated documentation files (the "Software"), 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to deal in the Software without restriction, including without limitation 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the rights to use, copy, modify, merge, publish, distribute, sublicense, 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and/or sell copies of the Software, and to permit persons to whom the 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Software is furnished to do so, subject to the following conditions: 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The above copyright notice and this permission notice shall be included 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * in all copies or substantial portions of the Software. 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _AGP_H 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _AGP_H 1 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 29168678233ca45af3f74fef60c4265fa5dd217e29Andrew Morton#include <linux/mutex.h> 3072b9760b65cbe0d24e668c34c8fefb2ba417f14bDavid Woodhouse#include <linux/agp_backend.h> 31607ca46e97a1b6594b29647d98a32d545c24bdffDavid Howells#include <uapi/linux/agpgart.h> 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGPGART_MINOR 175 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_info { 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_version version; /* version of the driver */ 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 bridge_id; /* bridge vendor/device */ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 agp_mode; /* mode info of bridge */ 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long aper_base;/* base of aperture */ 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t aper_size; /* size of aperture */ 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t pg_total; /* max pages (swap + system) */ 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t pg_system; /* max pages (system) */ 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t pg_used; /* current pages used */ 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_setup { 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 agp_mode; /* mode info of bridge */ 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The "prot" down below needs still a "sleep" flag somehow ... 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_segment { 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds off_t pg_start; /* starting page to populate */ 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t pg_count; /* number of pages */ 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int prot; /* prot flags for mmap */ 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_segment_priv { 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds off_t pg_start; 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t pg_count; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pgprot_t prot; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_region { 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pid_t pid; /* pid of process */ 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t seg_count; /* number of segments */ 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_segment *seg_list; 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_allocate { 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int key; /* tag of allocation */ 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t pg_count; /* number of pages */ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 type; /* 0 == normal, other devspec */ 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 physical; /* device specific (some devices 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * need a phys address of the 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * actual page behind the gatt 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * table) */ 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_bind { 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int key; /* tag of allocation */ 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds off_t pg_start; /* starting page to populate */ 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_unbind { 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int key; /* tag of allocation */ 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 priority; /* priority for paging out */ 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_client { 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_client *next; 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_client *prev; 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pid_t pid; 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int num_segments; 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_segment_priv **segments; 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_controller { 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_controller *next; 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_controller *prev; 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pid_t pid; 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int num_clients; 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_memory *pool; 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_client *clients; 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_ALLOW_CLIENT 0 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_ALLOW_CONTROLLER 1 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_IS_CLIENT 2 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_IS_CONTROLLER 3 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_FF_IS_VALID 4 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_file_private { 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_file_private *next; 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_file_private *prev; 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pid_t my_pid; 11864b33619a30ff18c1535ee779572ecffcc4711d2Al Viro unsigned long access_flags; /* long req'd for set_bit --RR */ 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct agp_front_data { 122168678233ca45af3f74fef60c4265fa5dd217e29Andrew Morton struct mutex agp_mutex; 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_controller *current_controller; 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_controller *controllers; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct agp_file_private *file_priv_list; 1269516b030b484fc99cf24213caf88df01f99248ddDave Airlie bool used_by_controller; 1279516b030b484fc99cf24213caf88df01f99248ddDave Airlie bool backend_acquired; 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _AGP_H */ 131