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