⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drmp.h

📁 linux和2410结合开发 用他可以生成2410所需的zImage文件
💻 H
📖 第 1 页 / 共 3 页
字号:
			printk(KERN_DEBUG				\			       "[" DRM_NAME ":" __FUNCTION__ "] " fmt ,	\			       ##arg);					\	} while (0)#else#define DRM_DEBUG(fmt, arg...)		 do { } while (0)#endif#define DRM_PROC_LIMIT (PAGE_SIZE-80)#define DRM_PROC_PRINT(fmt, arg...)					\   len += sprintf(&buf[len], fmt , ##arg);				\   if (len > DRM_PROC_LIMIT) { *eof = 1; return len - offset; }#define DRM_PROC_PRINT_RET(ret, fmt, arg...)				\   len += sprintf(&buf[len], fmt , ##arg);				\   if (len > DRM_PROC_LIMIT) { ret; *eof = 1; return len - offset; }				/* Mapping helper macros */#define DRM_IOREMAP(map)						\	(map)->handle = DRM(ioremap)( (map)->offset, (map)->size )#define DRM_IOREMAPFREE(map)						\	do {								\		if ( (map)->handle && (map)->size )			\			DRM(ioremapfree)( (map)->handle, (map)->size );	\	} while (0)#define DRM_FIND_MAP(_map, _o)						\do {									\	struct list_head *_list;					\	list_for_each( _list, &dev->maplist->head ) {			\		drm_map_list_t *_entry = (drm_map_list_t *)_list;	\		if ( _entry->map &&					\		     _entry->map->offset == (_o) ) {			\			(_map) = _entry->map;				\			break;						\ 		}							\	}								\} while(0)				/* Internal types and structures */#define DRM_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))#define DRM_MIN(a,b) ((a)<(b)?(a):(b))#define DRM_MAX(a,b) ((a)>(b)?(a):(b))#define DRM_LEFTCOUNT(x) (((x)->rp + (x)->count - (x)->wp) % ((x)->count + 1))#define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x))#define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist)#define DRM_GET_PRIV_SAREA(_dev, _ctx, _map) do {	\	(_map) = (_dev)->context_sareas[_ctx];		\} while(0)typedef int drm_ioctl_t( struct inode *inode, struct file *filp,			 unsigned int cmd, unsigned long arg );typedef struct drm_pci_list {	u16 vendor;	u16 device;} drm_pci_list_t;typedef struct drm_ioctl_desc {	drm_ioctl_t	     *func;	int		     auth_needed;	int		     root_only;} drm_ioctl_desc_t;typedef struct drm_devstate {	pid_t		  owner;	/* X server pid holding x_lock */} drm_devstate_t;typedef struct drm_magic_entry {	drm_magic_t	       magic;	struct drm_file	       *priv;	struct drm_magic_entry *next;} drm_magic_entry_t;typedef struct drm_magic_head {	struct drm_magic_entry *head;	struct drm_magic_entry *tail;} drm_magic_head_t;typedef struct drm_vma_entry {	struct vm_area_struct *vma;	struct drm_vma_entry  *next;	pid_t		      pid;} drm_vma_entry_t;typedef struct drm_buf {	int		  idx;	       /* Index into master buflist	     */	int		  total;       /* Buffer size			     */	int		  order;       /* log-base-2(total)		     */	int		  used;	       /* Amount of buffer in use (for DMA)  */	unsigned long	  offset;      /* Byte offset (used internally)	     */	void		  *address;    /* Address of buffer		     */	unsigned long	  bus_address; /* Bus address of buffer		     */	struct drm_buf	  *next;       /* Kernel-only: used for free list    */	__volatile__ int  waiting;     /* On kernel DMA queue		     */	__volatile__ int  pending;     /* On hardware DMA queue		     */	wait_queue_head_t dma_wait;    /* Processes waiting		     */	pid_t		  pid;	       /* PID of holding process	     */	int		  context;     /* Kernel queue for this buffer	     */	int		  while_locked;/* Dispatch this buffer while locked  */	enum {		DRM_LIST_NONE	 = 0,		DRM_LIST_FREE	 = 1,		DRM_LIST_WAIT	 = 2,		DRM_LIST_PEND	 = 3,		DRM_LIST_PRIO	 = 4,		DRM_LIST_RECLAIM = 5	}		  list;	       /* Which list we're on		     */#if DRM_DMA_HISTOGRAM	cycles_t	  time_queued;	   /* Queued to kernel DMA queue     */	cycles_t	  time_dispatched; /* Dispatched to hardware	     */	cycles_t	  time_completed;  /* Completed by hardware	     */	cycles_t	  time_freed;	   /* Back on freelist		     */#endif	int		  dev_priv_size; /* Size of buffer private stoarge   */	void		  *dev_private;  /* Per-buffer private storage       */} drm_buf_t;#if DRM_DMA_HISTOGRAM#define DRM_DMA_HISTOGRAM_SLOTS		  9#define DRM_DMA_HISTOGRAM_INITIAL	 10#define DRM_DMA_HISTOGRAM_NEXT(current)	 ((current)*10)typedef struct drm_histogram {	atomic_t	  total;	atomic_t	  queued_to_dispatched[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  dispatched_to_completed[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  completed_to_freed[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  queued_to_completed[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  queued_to_freed[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  dma[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  schedule[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  ctx[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  lacq[DRM_DMA_HISTOGRAM_SLOTS];	atomic_t	  lhld[DRM_DMA_HISTOGRAM_SLOTS];} drm_histogram_t;#endif				/* bufs is one longer than it has to be */typedef struct drm_waitlist {	int		  count;	/* Number of possible buffers	   */	drm_buf_t	  **bufs;	/* List of pointers to buffers	   */	drm_buf_t	  **rp;		/* Read pointer			   */	drm_buf_t	  **wp;		/* Write pointer		   */	drm_buf_t	  **end;	/* End pointer			   */	spinlock_t	  read_lock;	spinlock_t	  write_lock;} drm_waitlist_t;typedef struct drm_freelist {	int		  initialized; /* Freelist in use		   */	atomic_t	  count;       /* Number of free buffers	   */	drm_buf_t	  *next;       /* End pointer			   */	wait_queue_head_t waiting;     /* Processes waiting on free bufs   */	int		  low_mark;    /* Low water mark		   */	int		  high_mark;   /* High water mark		   */	atomic_t	  wfh;	       /* If waiting for high mark	   */	spinlock_t        lock;} drm_freelist_t;typedef struct drm_buf_entry {	int		  buf_size;	int		  buf_count;	drm_buf_t	  *buflist;	int		  seg_count;	int		  page_order;	unsigned long	  *seglist;	drm_freelist_t	  freelist;} drm_buf_entry_t;typedef struct drm_hw_lock {	__volatile__ unsigned int lock;	char			  padding[60]; /* Pad to cache line */} drm_hw_lock_t;typedef struct drm_file {	int		  authenticated;	int		  minor;	pid_t		  pid;	uid_t		  uid;	drm_magic_t	  magic;	unsigned long	  ioctl_count;	struct drm_file	  *next;	struct drm_file	  *prev;	struct drm_device *dev;	int 		  remove_auth_on_close;} drm_file_t;typedef 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	drm_ctx_flags_t	  flags;	/* Context preserving and 2D-only   */	drm_waitlist_t	  waitlist;	/* Pending buffers		    */	wait_queue_head_t flush_queue;	/* Processes waiting until flush    */} drm_queue_t;typedef struct drm_lock_data {	drm_hw_lock_t	  *hw_lock;	/* Hardware lock		   */	pid_t		  pid;		/* PID 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	   */} drm_lock_data_t;typedef struct drm_device_dma {#if 0				/* Performance Counters */	atomic_t	  total_prio;	/* Total DRM_DMA_PRIORITY	   */	atomic_t	  total_bytes;	/* Total bytes DMA'd		   */	atomic_t	  total_dmas;	/* Total DMA buffers dispatched	   */	atomic_t	  total_missed_dma;  /* Missed drm_do_dma	    */	atomic_t	  total_missed_lock; /* Missed lock in drm_do_dma   */	atomic_t	  total_missed_free; /* Missed drm_free_this_buffer */	atomic_t	  total_missed_sched;/* Missed drm_dma_schedule	    */	atomic_t	  total_tried;	/* Tried next_buffer		    */	atomic_t	  total_hit;	/* Sent next_buffer		    */	atomic_t	  total_lost;	/* Lost interrupt		    */#endif	drm_buf_entry_t	  bufs[DRM_MAX_ORDER+1];	int		  buf_count;	drm_buf_t	  **buflist;	/* Vector of pointers info bufs	   */	int		  seg_count;	int		  page_count;	unsigned long	  *pagelist;	unsigned long	  byte_count;	enum {		_DRM_DMA_USE_AGP = 0x01,		_DRM_DMA_USE_SG  = 0x02	} flags;				/* DMA support */	drm_buf_t	  *this_buffer;	/* Buffer being sent		   */	drm_buf_t	  *next_buffer; /* Selected buffer to send	   */	drm_queue_t	  *next_queue;	/* Queue from which buffer selected*/	wait_queue_head_t waiting;	/* Processes waiting on free bufs  */} drm_device_dma_t;#if __REALLY_HAVE_AGPtypedef struct drm_agp_mem {	unsigned long      handle;	agp_memory         *memory;	unsigned long      bound; /* address */	int                pages;	struct drm_agp_mem *prev;	struct drm_agp_mem *next;} drm_agp_mem_t;typedef struct drm_agp_head {	agp_kern_info      agp_info;	const char         *chipset;	drm_agp_mem_t      *memory;	unsigned long      mode;	int                enabled;	int                acquired;	unsigned long      base;   	int 		   agp_mtrr;	int		   cant_use_aperture;	unsigned long	   page_mask;} drm_agp_head_t;#endiftypedef struct drm_sg_mem {	unsigned long   handle;	void            *virtual;	int             pages;	struct page     **pagelist;	dma_addr_t	*busaddr;} drm_sg_mem_t;typedef struct drm_sigdata {	int           context;	drm_hw_lock_t *lock;} drm_sigdata_t;typedef struct drm_map_list {	struct list_head	head;	drm_map_t		*map;} drm_map_list_t;typedef struct drm_device {	const char	  *name;	/* Simple driver name		   */	char		  *unique;	/* Unique identifier: e.g., busid  */	int		  unique_len;	/* Length of unique field	   */	dev_t		  device;	/* Device number for mknod	   */	char		  *devname;	/* For /proc/interrupts		   */	int		  blocked;	/* Blocked due to VC switch?	   */	struct proc_dir_entry *root;	/* Root for this device's entries  */				/* Locks */	spinlock_t	  count_lock;	/* For inuse, open_count, buf_use  */	struct semaphore  struct_sem;	/* For others			   */				/* 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   */				/* Performance counters */	unsigned long     counters;	drm_stat_type_t   types[15];	atomic_t          counts[15];				/* Authentication */	drm_file_t	  *file_first;	drm_file_t	  *file_last;	drm_magic_head_t  magiclist[DRM_HASH_SIZE];				/* Memory management */	drm_map_list_t	  *maplist;	/* Linked list of regions	   */	int		  map_count;	/* Number of mappable regions	   */	drm_map_t	  **context_sareas;	int		  max_context;	drm_vma_entry_t	  *vmalist;	/* List of vmas (for debugging)	   */	drm_lock_data_t	  lock;		/* Information on hardware lock	   */				/* 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	   */	drm_queue_t	  **queuelist;	/* Vector of pointers to DMA queues */

⌨️ 快捷键说明

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