drmp.h

来自「linux 内核源代码」· C头文件 代码 · 共 1,152 行 · 第 1/3 页

H
1,152
字号
	drm_magic_t magic;	unsigned long ioctl_count;	struct list_head lhead;	struct drm_head *head;	int remove_auth_on_close;	unsigned long lock_count;	void *driver_priv;	struct file *filp;};/** Wait queue */struct drm_queue {	atomic_t use_count;		/**< Outstanding uses (+1) */	atomic_t finalization;		/**< Finalization in progress */	atomic_t block_count;		/**< Count of processes waiting */	atomic_t block_read;		/**< Queue blocked for reads */	wait_queue_head_t read_queue;	/**< Processes waiting on block_read */	atomic_t block_write;		/**< Queue blocked for writes */	wait_queue_head_t write_queue;	/**< Processes waiting on block_write */#if 1	atomic_t total_queued;		/**< Total queued statistic */	atomic_t total_flushed;		/**< Total flushes statistic */	atomic_t total_locks;		/**< Total locks statistics */#endif	enum drm_ctx_flags flags;	/**< Context preserving and 2D-only */	struct drm_waitlist waitlist;	/**< Pending buffers */	wait_queue_head_t flush_queue;	/**< Processes waiting until flush */};/** * Lock data. */struct drm_lock_data {	struct drm_hw_lock *hw_lock;	/**< Hardware lock */	struct drm_file *file_priv;	/**< File descr of lock holder (0=kernel) */	wait_queue_head_t lock_queue;	/**< Queue of blocked processes */	unsigned long lock_time;	/**< Time of last lock in jiffies */	spinlock_t spinlock;	uint32_t kernel_waiters;	uint32_t user_waiters;	int idle_has_lock;};/** * DMA data. */struct drm_device_dma {	struct drm_buf_entry bufs[DRM_MAX_ORDER + 1];	/**< buffers, grouped by their size order */	int buf_count;			/**< total number of buffers */	struct drm_buf **buflist;		/**< Vector of pointers into drm_device_dma::bufs */	int seg_count;	int page_count;			/**< number of pages */	unsigned long *pagelist;	/**< page list */	unsigned long byte_count;	enum {		_DRM_DMA_USE_AGP = 0x01,		_DRM_DMA_USE_SG = 0x02,		_DRM_DMA_USE_FB = 0x04,		_DRM_DMA_USE_PCI_RO = 0x08	} flags;};/** * AGP memory entry.  Stored as a doubly linked list. */struct drm_agp_mem {	unsigned long handle;		/**< handle */	DRM_AGP_MEM *memory;	unsigned long bound;		/**< address */	int pages;	struct list_head head;};/** * AGP data. * * \sa drm_agp_init() and drm_device::agp. */struct drm_agp_head {	DRM_AGP_KERN agp_info;		/**< AGP device information */	struct list_head memory;	unsigned long mode;		/**< AGP mode */	struct agp_bridge_data *bridge;	int enabled;			/**< whether the AGP bus as been enabled */	int acquired;			/**< whether the AGP device has been acquired */	unsigned long base;	int agp_mtrr;	int cant_use_aperture;	unsigned long page_mask;};/** * Scatter-gather memory. */struct drm_sg_mem {	unsigned long handle;	void *virtual;	int pages;	struct page **pagelist;	dma_addr_t *busaddr;};struct drm_sigdata {	int context;	struct drm_hw_lock *lock;};/** * Mappings list */struct drm_map_list {	struct list_head head;		/**< list head */	struct drm_hash_item hash;	struct drm_map *map;			/**< mapping */	unsigned int user_token;};typedef struct drm_map drm_local_map_t;/** * Context handle list */struct drm_ctx_list {	struct list_head head;		/**< list head */	drm_context_t handle;		/**< context handle */	struct drm_file *tag;		/**< associated fd private data */};struct drm_vbl_sig {	struct list_head head;	unsigned int sequence;	struct siginfo info;	struct task_struct *task;};/* location of GART table */#define DRM_ATI_GART_MAIN 1#define DRM_ATI_GART_FB   2#define DRM_ATI_GART_PCI 1#define DRM_ATI_GART_PCIE 2#define DRM_ATI_GART_IGP 3struct drm_ati_pcigart_info {	int gart_table_location;	int gart_reg_if;	void *addr;	dma_addr_t bus_addr;	drm_local_map_t mapping;	int table_size;};/* * Generic memory manager structs */struct drm_mm_node {	struct list_head fl_entry;	struct list_head ml_entry;	int free;	unsigned long start;	unsigned long size;	struct drm_mm *mm;	void *private;};struct drm_mm {	struct list_head fl_entry;	struct list_head ml_entry;};/** * DRM driver structure. This structure represent the common code for * a family of cards. There will one drm_device for each card present * in this family */struct drm_driver {	int (*load) (struct drm_device *, unsigned long flags);	int (*firstopen) (struct drm_device *);	int (*open) (struct drm_device *, struct drm_file *);	void (*preclose) (struct drm_device *, struct drm_file *file_priv);	void (*postclose) (struct drm_device *, struct drm_file *);	void (*lastclose) (struct drm_device *);	int (*unload) (struct drm_device *);	int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);	void (*dma_ready) (struct drm_device *);	int (*dma_quiescent) (struct drm_device *);	int (*context_ctor) (struct drm_device *dev, int context);	int (*context_dtor) (struct drm_device *dev, int context);	int (*kernel_context_switch) (struct drm_device *dev, int old,				      int new);	void (*kernel_context_switch_unlock) (struct drm_device *dev);	int (*vblank_wait) (struct drm_device *dev, unsigned int *sequence);	int (*vblank_wait2) (struct drm_device *dev, unsigned int *sequence);	int (*dri_library_name) (struct drm_device *dev, char *buf);	/**	 * Called by \c drm_device_is_agp.  Typically used to determine if a	 * card is really attached to AGP or not.	 *	 * \param dev  DRM device handle	 *	 * \returns	 * One of three values is returned depending on whether or not the	 * card is absolutely \b not AGP (return of 0), absolutely \b is AGP	 * (return of 1), or may or may not be AGP (return of 2).	 */	int (*device_is_agp) (struct drm_device *dev);	/* these have to be filled in */	irqreturn_t(*irq_handler) (DRM_IRQ_ARGS);	void (*irq_preinstall) (struct drm_device *dev);	void (*irq_postinstall) (struct drm_device *dev);	void (*irq_uninstall) (struct drm_device *dev);	void (*reclaim_buffers) (struct drm_device *dev,				 struct drm_file * file_priv);	void (*reclaim_buffers_locked) (struct drm_device *dev,					struct drm_file *file_priv);	void (*reclaim_buffers_idlelocked) (struct drm_device *dev,					    struct drm_file *file_priv);	unsigned long (*get_map_ofs) (struct drm_map * map);	unsigned long (*get_reg_ofs) (struct drm_device *dev);	void (*set_version) (struct drm_device *dev,			     struct drm_set_version *sv);	int major;	int minor;	int patchlevel;	char *name;	char *desc;	char *date;	u32 driver_features;	int dev_priv_size;	struct drm_ioctl_desc *ioctls;	int num_ioctls;	struct file_operations fops;	struct pci_driver pci_driver;};/** * DRM head structure. This structure represent a video head on a card * that may contain multiple heads. Embed one per head of these in the * private drm_device structure. */struct drm_head {	int minor;			/**< Minor device number */	struct drm_device *dev;	struct proc_dir_entry *dev_root;  /**< proc directory entry */	dev_t device;			/**< Device number for mknod */	struct class_device *dev_class;};/** * DRM device structure. This structure represent a complete card that * may contain multiple heads. */struct drm_device {	char *unique;			/**< Unique identifier: e.g., busid */	int unique_len;			/**< Length of unique field */	char *devname;			/**< For /proc/interrupts */	int if_version;			/**< Highest interface version set */	int blocked;			/**< Blocked due to VC switch? */	/** \name Locks */	/*@{ */	spinlock_t count_lock;		/**< For inuse, drm_device::open_count, drm_device::buf_use */	struct mutex struct_mutex;	/**< For others */	/*@} */	/** \name Usage Counters */	/*@{ */	int open_count;			/**< Outstanding files open */	atomic_t ioctl_count;		/**< Outstanding IOCTLs pending */	atomic_t vma_count;		/**< Outstanding vma areas open */	int buf_use;			/**< Buffers in use -- cannot alloc */	atomic_t buf_alloc;		/**< Buffer allocation in progress */	/*@} */	/** \name Performance counters */	/*@{ */	unsigned long counters;	enum drm_stat_type types[15];	atomic_t counts[15];	/*@} */	/** \name Authentication */	/*@{ */	struct list_head filelist;	struct drm_open_hash magiclist;	/**< magic hash table */	struct list_head magicfree;	/*@} */	/** \name Memory management */	/*@{ */	struct list_head maplist;	/**< Linked list of regions */	int map_count;			/**< Number of mappable regions */	struct drm_open_hash map_hash;	/**< User token hash table for maps */	/** \name Context handle management */	/*@{ */	struct list_head ctxlist;	/**< Linked list of context handles */	int ctx_count;			/**< Number of context handles */	struct mutex ctxlist_mutex;	/**< For ctxlist */	struct idr ctx_idr;	struct list_head vmalist;	/**< List of vmas (for debugging) */	struct drm_lock_data lock;	/**< Information on hardware lock */	/*@} */	/** \name DMA queues (contexts) */	/*@{ */	int queue_count;		/**< Number of active DMA queues */	int queue_reserved;		  /**< Number of reserved DMA queues */	int queue_slots;		/**< Actual length of queuelist */	struct drm_queue **queuelist;	/**< Vector of pointers to DMA queues */	struct drm_device_dma *dma;		/**< Optional pointer for DMA support */	/*@} */	/** \name Context support */	/*@{ */	int irq;			/**< Interrupt used by board */	int irq_enabled;		/**< True if irq handler is enabled */	__volatile__ long context_flag;	/**< Context swapping flag */	__volatile__ long interrupt_flag; /**< Interruption handler flag */	__volatile__ long dma_flag;	/**< DMA dispatch flag */	struct timer_list timer;	/**< Timer for delaying ctx switch */	wait_queue_head_t context_wait;	/**< Processes waiting on ctx switch */	int last_checked;		/**< Last context checked for DMA */	int last_context;		/**< Last current context */	unsigned long last_switch;	/**< jiffies at last context switch */	/*@} */	struct work_struct work;	/** \name VBLANK IRQ support */	/*@{ */	wait_queue_head_t vbl_queue;	/**< VBLANK wait queue */	atomic_t vbl_received;	atomic_t vbl_received2;		/**< number of secondary VBLANK interrupts */	spinlock_t vbl_lock;	struct list_head vbl_sigs;		/**< signal list to send on VBLANK */	struct list_head vbl_sigs2;	/**< signals to send on secondary VBLANK */	unsigned int vbl_pending;	spinlock_t tasklet_lock;	/**< For drm_locked_tasklet */	void (*locked_tasklet_func)(struct drm_device *dev);	/*@} */	cycles_t ctx_start;	cycles_t lck_start;	struct fasync_struct *buf_async;/**< Processes waiting for SIGIO */	wait_queue_head_t buf_readers;	/**< Processes waiting to read */	wait_queue_head_t buf_writers;	/**< Processes waiting to ctx switch */	struct drm_agp_head *agp;	/**< AGP data */	struct pci_dev *pdev;		/**< PCI device structure */	int pci_vendor;			/**< PCI vendor id */	int pci_device;			/**< PCI device id */#ifdef __alpha__	struct pci_controller *hose;#endif	struct drm_sg_mem *sg;	/**< Scatter gather memory */	unsigned long *ctx_bitmap;	/**< context bitmap */	void *dev_private;		/**< device private data */	struct drm_sigdata sigdata;	   /**< For block_all_signals */	sigset_t sigmask;	struct drm_driver *driver;	drm_local_map_t *agp_buffer_map;	unsigned int agp_buffer_token;	struct drm_head primary;		/**< primary screen head */	/** \name Drawable information */	/*@{ */	spinlock_t drw_lock;	struct idr drw_idr;	/*@} */};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?