cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

agpgart.h (3881B)


      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_H
     27#define _AGP_H 1
     28
     29#include <linux/mutex.h>
     30#include <linux/agp_backend.h>
     31#include <uapi/linux/agpgart.h>
     32
     33struct agp_info {
     34	struct agp_version version;	/* version of the driver        */
     35	u32 bridge_id;		/* bridge vendor/device         */
     36	u32 agp_mode;		/* mode info of bridge          */
     37	unsigned long aper_base;/* base of aperture             */
     38	size_t aper_size;	/* size of aperture             */
     39	size_t pg_total;	/* max pages (swap + system)    */
     40	size_t pg_system;	/* max pages (system)           */
     41	size_t pg_used;		/* current pages used           */
     42};
     43
     44struct agp_setup {
     45	u32 agp_mode;		/* mode info of bridge          */
     46};
     47
     48/*
     49 * The "prot" down below needs still a "sleep" flag somehow ...
     50 */
     51struct agp_segment {
     52	off_t pg_start;		/* starting page to populate    */
     53	size_t pg_count;	/* number of pages              */
     54	int prot;		/* prot flags for mmap          */
     55};
     56
     57struct agp_segment_priv {
     58	off_t pg_start;
     59	size_t pg_count;
     60	pgprot_t prot;
     61};
     62
     63struct agp_region {
     64	pid_t pid;		/* pid of process               */
     65	size_t seg_count;	/* number of segments           */
     66	struct agp_segment *seg_list;
     67};
     68
     69struct agp_allocate {
     70	int key;		/* tag of allocation            */
     71	size_t pg_count;	/* number of pages              */
     72	u32 type;		/* 0 == normal, other devspec   */
     73	u32 physical;           /* device specific (some devices  
     74				 * need a phys address of the     
     75				 * actual page behind the gatt    
     76				 * table)                        */
     77};
     78
     79struct agp_bind {
     80	int key;		/* tag of allocation            */
     81	off_t pg_start;		/* starting page to populate    */
     82};
     83
     84struct agp_unbind {
     85	int key;		/* tag of allocation            */
     86	u32 priority;		/* priority for paging out      */
     87};
     88
     89struct agp_client {
     90	struct agp_client *next;
     91	struct agp_client *prev;
     92	pid_t pid;
     93	int num_segments;
     94	struct agp_segment_priv **segments;
     95};
     96
     97struct agp_controller {
     98	struct agp_controller *next;
     99	struct agp_controller *prev;
    100	pid_t pid;
    101	int num_clients;
    102	struct agp_memory *pool;
    103	struct agp_client *clients;
    104};
    105
    106#define AGP_FF_ALLOW_CLIENT		0
    107#define AGP_FF_ALLOW_CONTROLLER 	1
    108#define AGP_FF_IS_CLIENT		2
    109#define AGP_FF_IS_CONTROLLER		3
    110#define AGP_FF_IS_VALID 		4
    111
    112struct agp_file_private {
    113	struct agp_file_private *next;
    114	struct agp_file_private *prev;
    115	pid_t my_pid;
    116	unsigned long access_flags;	/* long req'd for set_bit --RR */
    117};
    118
    119struct agp_front_data {
    120	struct mutex agp_mutex;
    121	struct agp_controller *current_controller;
    122	struct agp_controller *controllers;
    123	struct agp_file_private *file_priv_list;
    124	bool used_by_controller;
    125	bool backend_acquired;
    126};
    127
    128#endif				/* _AGP_H */