Deleted Added
full compact
drmP.h (95746) drmP.h (112015)
1/* drmP.h -- Private header for Direct Rendering Manager -*- linux-c -*-
2 * Created: Mon Jan 4 10:05:05 1999 by faith@precisioninsight.com
3 *
4 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
5 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
6 * All rights reserved.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a

--- 13 unchanged lines hidden (view full) ---

22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 *
27 * Authors:
28 * Rickard E. (Rik) Faith <faith@valinux.com>
29 * Gareth Hughes <gareth@valinux.com>
1/* drmP.h -- Private header for Direct Rendering Manager -*- linux-c -*-
2 * Created: Mon Jan 4 10:05:05 1999 by faith@precisioninsight.com
3 *
4 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
5 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
6 * All rights reserved.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a

--- 13 unchanged lines hidden (view full) ---

22 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 *
27 * Authors:
28 * Rickard E. (Rik) Faith <faith@valinux.com>
29 * Gareth Hughes <gareth@valinux.com>
30 *
31 * $FreeBSD: head/sys/dev/drm/drmP.h 95746 2002-04-29 18:18:42Z anholt $
30 * $FreeBSD: head/sys/dev/drm/drmP.h 112015 2003-03-09 02:08:30Z anholt $
32 */
33
34#ifndef _DRM_P_H_
35#define _DRM_P_H_
36
37#if defined(_KERNEL) || defined(__KERNEL__)
38
39/* DRM template customization defaults

--- 25 unchanged lines hidden (view full) ---

65
66#define DRM_DEBUG_CODE 0 /* Include debugging code (if > 1, then
67 also include looping detection. */
68
69typedef struct drm_device drm_device_t;
70typedef struct drm_file drm_file_t;
71
72/* There's undoubtably more of this file to go into these OS dependent ones. */
31 */
32
33#ifndef _DRM_P_H_
34#define _DRM_P_H_
35
36#if defined(_KERNEL) || defined(__KERNEL__)
37
38/* DRM template customization defaults

--- 25 unchanged lines hidden (view full) ---

64
65#define DRM_DEBUG_CODE 0 /* Include debugging code (if > 1, then
66 also include looping detection. */
67
68typedef struct drm_device drm_device_t;
69typedef struct drm_file drm_file_t;
70
71/* There's undoubtably more of this file to go into these OS dependent ones. */
73#ifdef __linux__
74#include "dev/drm/drm_os_linux.h"
75#endif /* __linux__ */
76
77#ifdef __FreeBSD__
78#include "dev/drm/drm_os_freebsd.h"
72
73#ifdef __FreeBSD__
74#include "dev/drm/drm_os_freebsd.h"
79#endif /* __FreeBSD__ */
75#elif defined __NetBSD__
76#include "dev/drm/drm_os_netbsd.h"
77#endif
80
81#include "dev/drm/drm.h"
82
83/* Begin the DRM... */
84
85#define DRM_HASH_SIZE 16 /* Size of key hash table */
86#define DRM_KERNEL_CONTEXT 0 /* Change drm_resctx if changed */
87#define DRM_RESERVED_CONTEXTS 1 /* Change drm_resctx if changed */

--- 23 unchanged lines hidden (view full) ---

111#define DRM_MEM_TOTALAGP 16
112#define DRM_MEM_BOUNDAGP 17
113#define DRM_MEM_CTXBITMAP 18
114#define DRM_MEM_STUB 19
115#define DRM_MEM_SGLISTS 20
116
117#define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8)
118
78
79#include "dev/drm/drm.h"
80
81/* Begin the DRM... */
82
83#define DRM_HASH_SIZE 16 /* Size of key hash table */
84#define DRM_KERNEL_CONTEXT 0 /* Change drm_resctx if changed */
85#define DRM_RESERVED_CONTEXTS 1 /* Change drm_resctx if changed */

--- 23 unchanged lines hidden (view full) ---

109#define DRM_MEM_TOTALAGP 16
110#define DRM_MEM_BOUNDAGP 17
111#define DRM_MEM_CTXBITMAP 18
112#define DRM_MEM_STUB 19
113#define DRM_MEM_SGLISTS 20
114
115#define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8)
116
117 /* Backward compatibility section */
118 /* _PAGE_WT changed to _PAGE_PWT in 2.2.6 */
119#ifndef _PAGE_PWT
120#define _PAGE_PWT _PAGE_WT
121#endif
122
119 /* Mapping helper macros */
120#define DRM_IOREMAP(map) \
123 /* Mapping helper macros */
124#define DRM_IOREMAP(map) \
121 (map)->handle = DRM(ioremap)( (map)->offset, (map)->size )
125 (map)->handle = DRM(ioremap)( dev, map )
122
126
127#define DRM_IOREMAP_NOCACHE(map) \
128 (map)->handle = DRM(ioremap_nocache)( dev, map )
129
123#define DRM_IOREMAPFREE(map) \
124 do { \
125 if ( (map)->handle && (map)->size ) \
130#define DRM_IOREMAPFREE(map) \
131 do { \
132 if ( (map)->handle && (map)->size ) \
126 DRM(ioremapfree)( (map)->handle, (map)->size ); \
133 DRM(ioremapfree)( map ); \
127 } while (0)
128
129 /* Internal types and structures */
130#define DRM_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
131#define DRM_MIN(a,b) ((a)<(b)?(a):(b))
132#define DRM_MAX(a,b) ((a)>(b)?(a):(b))
133
134#define DRM_LEFTCOUNT(x) (((x)->rp + (x)->count - (x)->wp) % ((x)->count + 1))
135#define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x))
136#define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist)
137
138#define DRM_GET_PRIV_SAREA(_dev, _ctx, _map) do { \
139 (_map) = (_dev)->context_sareas[_ctx]; \
140} while(0)
141
134 } while (0)
135
136 /* Internal types and structures */
137#define DRM_ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
138#define DRM_MIN(a,b) ((a)<(b)?(a):(b))
139#define DRM_MAX(a,b) ((a)>(b)?(a):(b))
140
141#define DRM_LEFTCOUNT(x) (((x)->rp + (x)->count - (x)->wp) % ((x)->count + 1))
142#define DRM_BUFCOUNT(x) ((x)->count - DRM_LEFTCOUNT(x))
143#define DRM_WAITCOUNT(dev,idx) DRM_BUFCOUNT(&dev->queuelist[idx]->waitlist)
144
145#define DRM_GET_PRIV_SAREA(_dev, _ctx, _map) do { \
146 (_map) = (_dev)->context_sareas[_ctx]; \
147} while(0)
148
142typedef int drm_ioctl_t( DRM_OS_IOCTL );
143
144typedef struct drm_pci_list {
145 u16 vendor;
146 u16 device;
147} drm_pci_list_t;
148
149typedef struct drm_ioctl_desc {
149
150typedef struct drm_pci_list {
151 u16 vendor;
152 u16 device;
153} drm_pci_list_t;
154
155typedef struct drm_ioctl_desc {
150 drm_ioctl_t *func;
156 d_ioctl_t *func;
151 int auth_needed;
152 int root_only;
153} drm_ioctl_desc_t;
154
155typedef struct drm_devstate {
156 pid_t owner; /* X server pid holding x_lock */
157
158} drm_devstate_t;

--- 74 unchanged lines hidden (view full) ---

233
234 /* bufs is one longer than it has to be */
235typedef struct drm_waitlist {
236 int count; /* Number of possible buffers */
237 drm_buf_t **bufs; /* List of pointers to buffers */
238 drm_buf_t **rp; /* Read pointer */
239 drm_buf_t **wp; /* Write pointer */
240 drm_buf_t **end; /* End pointer */
157 int auth_needed;
158 int root_only;
159} drm_ioctl_desc_t;
160
161typedef struct drm_devstate {
162 pid_t owner; /* X server pid holding x_lock */
163
164} drm_devstate_t;

--- 74 unchanged lines hidden (view full) ---

239
240 /* bufs is one longer than it has to be */
241typedef struct drm_waitlist {
242 int count; /* Number of possible buffers */
243 drm_buf_t **bufs; /* List of pointers to buffers */
244 drm_buf_t **rp; /* Read pointer */
245 drm_buf_t **wp; /* Write pointer */
246 drm_buf_t **end; /* End pointer */
241 DRM_OS_SPINTYPE read_lock;
242 DRM_OS_SPINTYPE write_lock;
247 DRM_SPINTYPE read_lock;
248 DRM_SPINTYPE write_lock;
243} drm_waitlist_t;
244
245typedef struct drm_freelist {
246 int initialized; /* Freelist in use */
247 atomic_t count; /* Number of free buffers */
248 drm_buf_t *next; /* End pointer */
249
250 wait_queue_head_t waiting; /* Processes waiting on free bufs */
251 int low_mark; /* Low water mark */
252 int high_mark; /* High water mark */
253 atomic_t wfh; /* If waiting for high mark */
249} drm_waitlist_t;
250
251typedef struct drm_freelist {
252 int initialized; /* Freelist in use */
253 atomic_t count; /* Number of free buffers */
254 drm_buf_t *next; /* End pointer */
255
256 wait_queue_head_t waiting; /* Processes waiting on free bufs */
257 int low_mark; /* Low water mark */
258 int high_mark; /* High water mark */
259 atomic_t wfh; /* If waiting for high mark */
254 DRM_OS_SPINTYPE lock;
260 DRM_SPINTYPE lock;
255} drm_freelist_t;
256
257typedef struct drm_buf_entry {
258 int buf_size;
259 int buf_count;
260 drm_buf_t *buflist;
261 int seg_count;
262 int page_order;
263 unsigned long *seglist;
264
265 drm_freelist_t freelist;
266} drm_buf_entry_t;
267
268typedef struct drm_hw_lock {
269 __volatile__ unsigned int lock;
270 char padding[60]; /* Pad to cache line */
271} drm_hw_lock_t;
272
261} drm_freelist_t;
262
263typedef struct drm_buf_entry {
264 int buf_size;
265 int buf_count;
266 drm_buf_t *buflist;
267 int seg_count;
268 int page_order;
269 unsigned long *seglist;
270
271 drm_freelist_t freelist;
272} drm_buf_entry_t;
273
274typedef struct drm_hw_lock {
275 __volatile__ unsigned int lock;
276 char padding[60]; /* Pad to cache line */
277} drm_hw_lock_t;
278
273#ifdef __linux__
274struct drm_file {
275 int authenticated;
276 int minor;
277 pid_t pid;
278 uid_t uid;
279 drm_magic_t magic;
280 unsigned long ioctl_count;
281 struct drm_file *next;
282 struct drm_file *prev;
283 struct drm_device *dev;
284 int remove_auth_on_close;
285};
286#endif /* __linux__ */
287#ifdef __FreeBSD__
288typedef TAILQ_HEAD(drm_file_list, drm_file) drm_file_list_t;
289struct drm_file {
290 TAILQ_ENTRY(drm_file) link;
291 int authenticated;
292 int minor;
293 pid_t pid;
294 uid_t uid;
295 int refs;
296 drm_magic_t magic;
297 unsigned long ioctl_count;
298 struct drm_device *devXX;
299};
279typedef TAILQ_HEAD(drm_file_list, drm_file) drm_file_list_t;
280struct drm_file {
281 TAILQ_ENTRY(drm_file) link;
282 int authenticated;
283 int minor;
284 pid_t pid;
285 uid_t uid;
286 int refs;
287 drm_magic_t magic;
288 unsigned long ioctl_count;
289 struct drm_device *devXX;
290};
300#endif /* __FreeBSD__ */
301
302typedef struct drm_queue {
303 atomic_t use_count; /* Outstanding uses (+1) */
304 atomic_t finalization; /* Finalization in progress */
305 atomic_t block_count; /* Count of processes waiting */
306 atomic_t block_read; /* Queue blocked for reads */
307 wait_queue_head_t read_queue; /* Processes waiting on block_read */
308 atomic_t block_write; /* Queue blocked for writes */

--- 48 unchanged lines hidden (view full) ---

357 drm_buf_t *this_buffer; /* Buffer being sent */
358 drm_buf_t *next_buffer; /* Selected buffer to send */
359 drm_queue_t *next_queue; /* Queue from which buffer selected*/
360 wait_queue_head_t waiting; /* Processes waiting on free bufs */
361} drm_device_dma_t;
362
363#if __REALLY_HAVE_AGP
364typedef struct drm_agp_mem {
291
292typedef struct drm_queue {
293 atomic_t use_count; /* Outstanding uses (+1) */
294 atomic_t finalization; /* Finalization in progress */
295 atomic_t block_count; /* Count of processes waiting */
296 atomic_t block_read; /* Queue blocked for reads */
297 wait_queue_head_t read_queue; /* Processes waiting on block_read */
298 atomic_t block_write; /* Queue blocked for writes */

--- 48 unchanged lines hidden (view full) ---

347 drm_buf_t *this_buffer; /* Buffer being sent */
348 drm_buf_t *next_buffer; /* Selected buffer to send */
349 drm_queue_t *next_queue; /* Queue from which buffer selected*/
350 wait_queue_head_t waiting; /* Processes waiting on free bufs */
351} drm_device_dma_t;
352
353#if __REALLY_HAVE_AGP
354typedef struct drm_agp_mem {
365#ifdef __linux__
366 unsigned long handle;
367 agp_memory *memory;
368#endif /* __linux__ */
369#ifdef __FreeBSD__
370 void *handle;
355 void *handle;
371#endif /* __FreeBSD__ */
372 unsigned long bound; /* address */
373 int pages;
374 struct drm_agp_mem *prev;
375 struct drm_agp_mem *next;
376} drm_agp_mem_t;
377
378typedef struct drm_agp_head {
356 unsigned long bound; /* address */
357 int pages;
358 struct drm_agp_mem *prev;
359 struct drm_agp_mem *next;
360} drm_agp_mem_t;
361
362typedef struct drm_agp_head {
379#ifdef __linux__
380 agp_kern_info agp_info;
381#endif /* __linux__ */
382#ifdef __FreeBSD__
383 device_t agpdev;
384 struct agp_info info;
363 device_t agpdev;
364 struct agp_info info;
385#endif /* __FreeBSD__ */
386 const char *chipset;
387 drm_agp_mem_t *memory;
388 unsigned long mode;
389 int enabled;
390 int acquired;
391 unsigned long base;
392 int agp_mtrr;
393 int cant_use_aperture;
394 unsigned long page_mask;
395} drm_agp_head_t;
396#endif
397
398typedef struct drm_sg_mem {
399 unsigned long handle;
400 void *virtual;
401 int pages;
365 const char *chipset;
366 drm_agp_mem_t *memory;
367 unsigned long mode;
368 int enabled;
369 int acquired;
370 unsigned long base;
371 int agp_mtrr;
372 int cant_use_aperture;
373 unsigned long page_mask;
374} drm_agp_head_t;
375#endif
376
377typedef struct drm_sg_mem {
378 unsigned long handle;
379 void *virtual;
380 int pages;
402 struct page **pagelist;
403#ifdef __linux__
404 dma_addr_t *busaddr;
381 dma_addr_t *busaddr;
405#endif /* __linux__ */
406} drm_sg_mem_t;
407
408typedef struct drm_sigdata {
409 int context;
410 drm_hw_lock_t *lock;
411} drm_sigdata_t;
412
382} drm_sg_mem_t;
383
384typedef struct drm_sigdata {
385 int context;
386 drm_hw_lock_t *lock;
387} drm_sigdata_t;
388
413#ifdef __linux__
414typedef struct drm_map_list {
415 struct list_head head;
416 drm_map_t *map;
417} drm_map_list_t;
418#endif /* __linux__ */
419#ifdef __FreeBSD__
389typedef struct drm_local_map {
390 unsigned long offset; /* Physical address (0 for SAREA)*/
391 unsigned long size; /* Physical size (bytes) */
392 drm_map_type_t type; /* Type of memory mapped */
393 drm_map_flags_t flags; /* Flags */
394 void *handle; /* User-space: "Handle" to pass to mmap */
395 /* Kernel-space: kernel-virtual address */
396 int mtrr; /* MTRR slot used */
397 /* Private data */
398 bus_space_tag_t iot;
399 bus_space_handle_t ioh;
400} drm_local_map_t;
401
420typedef TAILQ_HEAD(drm_map_list, drm_map_list_entry) drm_map_list_t;
421typedef struct drm_map_list_entry {
422 TAILQ_ENTRY(drm_map_list_entry) link;
402typedef TAILQ_HEAD(drm_map_list, drm_map_list_entry) drm_map_list_t;
403typedef struct drm_map_list_entry {
404 TAILQ_ENTRY(drm_map_list_entry) link;
423 drm_map_t *map;
405 drm_local_map_t *map;
424} drm_map_list_entry_t;
406} drm_map_list_entry_t;
425#endif /* __FreeBSD__ */
426
407
408TAILQ_HEAD(drm_vbl_sig_list, drm_vbl_sig);
409typedef struct drm_vbl_sig {
410 TAILQ_ENTRY(drm_vbl_sig) link;
411 unsigned int sequence;
412 int signo;
413 int pid;
414} drm_vbl_sig_t;
415
427struct drm_device {
416struct drm_device {
417#ifdef __NetBSD__
418 struct device device; /* NetBSD's softc is an extension of struct device */
419#endif
428 const char *name; /* Simple driver name */
429 char *unique; /* Unique identifier: e.g., busid */
430 int unique_len; /* Length of unique field */
420 const char *name; /* Simple driver name */
421 char *unique; /* Unique identifier: e.g., busid */
422 int unique_len; /* Length of unique field */
431#ifdef __linux__
432 dev_t device; /* Device number for mknod */
433#endif /* __linux__ */
434#ifdef __FreeBSD__
435 device_t device; /* Device instance from newbus */
423#ifdef __FreeBSD__
424 device_t device; /* Device instance from newbus */
425#endif
436 dev_t devnode; /* Device number for mknod */
426 dev_t devnode; /* Device number for mknod */
437#endif /* __FreeBSD__ */
438 char *devname; /* For /proc/interrupts */
439
440 int blocked; /* Blocked due to VC switch? */
427 char *devname; /* For /proc/interrupts */
428
429 int blocked; /* Blocked due to VC switch? */
441#ifdef __FreeBSD__
442 int flags; /* Flags to open(2) */
443 int writable; /* Opened with FWRITE */
430 int flags; /* Flags to open(2) */
431 int writable; /* Opened with FWRITE */
444#endif /* __FreeBSD__ */
445#ifdef __linux__
446 struct proc_dir_entry *root; /* Root for this device's entries */
447#endif /* __linux__ */
448
449 /* Locks */
432
433 /* Locks */
450 DRM_OS_SPINTYPE count_lock; /* For inuse, open_count, buf_use */
451#ifdef __linux__
452 struct semaphore struct_sem; /* For others */
453#endif /* __linux__ */
454#ifdef __FreeBSD__
434 DRM_SPINTYPE count_lock; /* For inuse, open_count, buf_use */
455 struct lock dev_lock; /* For others */
435 struct lock dev_lock; /* For others */
456#endif /* __FreeBSD__ */
457
458 /* Usage Counters */
459 int open_count; /* Outstanding files open */
460 atomic_t ioctl_count; /* Outstanding IOCTLs pending */
461 atomic_t vma_count; /* Outstanding vma areas open */
462 int buf_use; /* Buffers in use -- cannot alloc */
463 atomic_t buf_alloc; /* Buffer allocation in progress */
464
465 /* Performance counters */
466 unsigned long counters;
467 drm_stat_type_t types[15];
468 atomic_t counts[15];
469
470 /* Authentication */
436 /* Usage Counters */
437 int open_count; /* Outstanding files open */
438 atomic_t ioctl_count; /* Outstanding IOCTLs pending */
439 atomic_t vma_count; /* Outstanding vma areas open */
440 int buf_use; /* Buffers in use -- cannot alloc */
441 atomic_t buf_alloc; /* Buffer allocation in progress */
442
443 /* Performance counters */
444 unsigned long counters;
445 drm_stat_type_t types[15];
446 atomic_t counts[15];
447
448 /* Authentication */
471#ifdef __linux__
472 drm_file_t *file_first;
473 drm_file_t *file_last;
474#endif /* __linux__ */
475#ifdef __FreeBSD__
476 drm_file_list_t files;
449 drm_file_list_t files;
477#endif /* __FreeBSD__ */
478 drm_magic_head_t magiclist[DRM_HASH_SIZE];
479
480 /* Memory management */
481 drm_map_list_t *maplist; /* Linked list of regions */
482 int map_count; /* Number of mappable regions */
483
450 drm_magic_head_t magiclist[DRM_HASH_SIZE];
451
452 /* Memory management */
453 drm_map_list_t *maplist; /* Linked list of regions */
454 int map_count; /* Number of mappable regions */
455
484 drm_map_t **context_sareas;
456 drm_local_map_t **context_sareas;
485 int max_context;
486
487 drm_vma_entry_t *vmalist; /* List of vmas (for debugging) */
488 drm_lock_data_t lock; /* Information on hardware lock */
489
490 /* DMA queues (contexts) */
491 int queue_count; /* Number of active DMA queues */
492 int queue_reserved; /* Number of reserved DMA queues */
493 int queue_slots; /* Actual length of queuelist */
494 drm_queue_t **queuelist; /* Vector of pointers to DMA queues */
495 drm_device_dma_t *dma; /* Optional pointer for DMA support */
496
497 /* Context support */
498 int irq; /* Interrupt used by board */
457 int max_context;
458
459 drm_vma_entry_t *vmalist; /* List of vmas (for debugging) */
460 drm_lock_data_t lock; /* Information on hardware lock */
461
462 /* DMA queues (contexts) */
463 int queue_count; /* Number of active DMA queues */
464 int queue_reserved; /* Number of reserved DMA queues */
465 int queue_slots; /* Actual length of queuelist */
466 drm_queue_t **queuelist; /* Vector of pointers to DMA queues */
467 drm_device_dma_t *dma; /* Optional pointer for DMA support */
468
469 /* Context support */
470 int irq; /* Interrupt used by board */
471 int irqrid; /* Interrupt used by board */
499#ifdef __FreeBSD__
500 struct resource *irqr; /* Resource for interrupt used by board */
472#ifdef __FreeBSD__
473 struct resource *irqr; /* Resource for interrupt used by board */
474#elif defined(__NetBSD__)
475 struct pci_attach_args pa;
476 pci_intr_handle_t ih;
477#endif
501 void *irqh; /* Handle from bus_setup_intr */
478 void *irqh; /* Handle from bus_setup_intr */
502#endif /* __FreeBSD__ */
503 __volatile__ long context_flag; /* Context swapping flag */
504 __volatile__ long interrupt_flag; /* Interruption handler flag */
505 __volatile__ long dma_flag; /* DMA dispatch flag */
506#ifdef __linux__
507 struct timer_list timer; /* Timer for delaying ctx switch */
508#endif /* __linux__ */
509#ifdef __FreeBSD__
479 atomic_t context_flag; /* Context swapping flag */
480 atomic_t interrupt_flag; /* Interruption handler flag */
481 atomic_t dma_flag; /* DMA dispatch flag */
510 struct callout timer; /* Timer for delaying ctx switch */
482 struct callout timer; /* Timer for delaying ctx switch */
511#endif /* __FreeBSD__ */
512 wait_queue_head_t context_wait; /* Processes waiting on ctx switch */
513 int last_checked; /* Last context checked for DMA */
514 int last_context; /* Last current context */
515 unsigned long last_switch; /* jiffies at last context switch */
483 wait_queue_head_t context_wait; /* Processes waiting on ctx switch */
484 int last_checked; /* Last context checked for DMA */
485 int last_context; /* Last current context */
486 unsigned long last_switch; /* jiffies at last context switch */
516#ifdef __linux__
517 struct tq_struct tq;
518#endif /* __linux__ */
519#ifdef __FreeBSD__
520#if __FreeBSD_version >= 400005
521 struct task task;
522#endif
487#if __FreeBSD_version >= 400005
488 struct task task;
489#endif
523#endif /* __FreeBSD__ */
490#if __HAVE_VBL_IRQ
491 wait_queue_head_t vbl_queue; /* vbl wait channel */
492 atomic_t vbl_received;
493#if 0 /* vbl signals are untested, ntested */
494 struct drm_vbl_sig_list vbl_sig_list;
495 DRM_SPINTYPE vbl_lock;
496#endif
497#endif
524 cycles_t ctx_start;
525 cycles_t lck_start;
526#if __HAVE_DMA_HISTOGRAM
527 drm_histogram_t histo;
528#endif
529
530 /* Callback to X server for context switch
531 and for heavy-handed reset. */
532 char buf[DRM_BSZ]; /* Output buffer */
533 char *buf_rp; /* Read pointer */
534 char *buf_wp; /* Write pointer */
535 char *buf_end; /* End pointer */
498 cycles_t ctx_start;
499 cycles_t lck_start;
500#if __HAVE_DMA_HISTOGRAM
501 drm_histogram_t histo;
502#endif
503
504 /* Callback to X server for context switch
505 and for heavy-handed reset. */
506 char buf[DRM_BSZ]; /* Output buffer */
507 char *buf_rp; /* Read pointer */
508 char *buf_wp; /* Write pointer */
509 char *buf_end; /* End pointer */
536#ifdef __linux__
537 struct fasync_struct *buf_async;/* Processes waiting for SIGIO */
538#endif /* __linux__ */
539#ifdef __FreeBSD__
540 struct sigio *buf_sigio; /* Processes waiting for SIGIO */
510#ifdef __FreeBSD__
511 struct sigio *buf_sigio; /* Processes waiting for SIGIO */
512#elif defined(__NetBSD__)
513 pid_t buf_pgid;
514#endif
541 struct selinfo buf_sel; /* Workspace for select/poll */
542 int buf_selecting;/* True if poll sleeper */
515 struct selinfo buf_sel; /* Workspace for select/poll */
516 int buf_selecting;/* True if poll sleeper */
543#endif /* __FreeBSD__ */
544 wait_queue_head_t buf_readers; /* Processes waiting to read */
545 wait_queue_head_t buf_writers; /* Processes waiting to ctx switch */
546
517 wait_queue_head_t buf_readers; /* Processes waiting to read */
518 wait_queue_head_t buf_writers; /* Processes waiting to ctx switch */
519
547#ifdef __FreeBSD__
548 /* Sysctl support */
549 struct drm_sysctl_info *sysctl;
520 /* Sysctl support */
521 struct drm_sysctl_info *sysctl;
550#endif /* __FreeBSD__ */
551
552#if __REALLY_HAVE_AGP
553 drm_agp_head_t *agp;
554#endif
522
523#if __REALLY_HAVE_AGP
524 drm_agp_head_t *agp;
525#endif
555 struct pci_dev *pdev;
556#ifdef __alpha__
557#if LINUX_VERSION_CODE < 0x020403
558 struct pci_controler *hose;
559#else
560 struct pci_controller *hose;
561#endif
562#endif
563 drm_sg_mem_t *sg; /* Scatter gather memory */
526 drm_sg_mem_t *sg; /* Scatter gather memory */
564 unsigned long *ctx_bitmap;
527 atomic_t *ctx_bitmap;
565 void *dev_private;
566 drm_sigdata_t sigdata; /* For block_all_signals */
567 sigset_t sigmask;
568};
569
528 void *dev_private;
529 drm_sigdata_t sigdata; /* For block_all_signals */
530 sigset_t sigmask;
531};
532
570/* ================================================================
571 * Internal function definitions
572 */
573
574extern int DRM(flags);
575extern void DRM(parse_options)( char *s );
576extern int DRM(cpu_valid)( void );
577
533extern int DRM(flags);
534extern void DRM(parse_options)( char *s );
535extern int DRM(cpu_valid)( void );
536
537 /* Authentication (drm_auth.h) */
538extern int DRM(add_magic)(drm_device_t *dev, drm_file_t *priv,
539 drm_magic_t magic);
540extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
541
578 /* Driver support (drm_drv.h) */
542 /* Driver support (drm_drv.h) */
579extern int DRM(version)( DRM_OS_IOCTL );
580extern int DRM(ioctl)( DRM_OS_IOCTL );
581extern int DRM(lock)( DRM_OS_IOCTL );
582extern int DRM(unlock)( DRM_OS_IOCTL );
583extern int DRM(write_string)(drm_device_t *dev, const char *s);
543extern int DRM(version)( DRM_IOCTL_ARGS );
544extern int DRM(write_string)(drm_device_t *dev, const char *s);
584
585 /* Memory management support (drm_memory.h) */
586extern void DRM(mem_init)(void);
545
546 /* Memory management support (drm_memory.h) */
547extern void DRM(mem_init)(void);
548extern void DRM(mem_uninit)(void);
587extern void *DRM(alloc)(size_t size, int area);
588extern void *DRM(realloc)(void *oldpt, size_t oldsize, size_t size,
589 int area);
590extern char *DRM(strdup)(const char *s, int area);
591extern void DRM(strfree)(char *s, int area);
592extern void DRM(free)(void *pt, size_t size, int area);
549extern void *DRM(alloc)(size_t size, int area);
550extern void *DRM(realloc)(void *oldpt, size_t oldsize, size_t size,
551 int area);
552extern char *DRM(strdup)(const char *s, int area);
553extern void DRM(strfree)(char *s, int area);
554extern void DRM(free)(void *pt, size_t size, int area);
593extern unsigned long DRM(alloc_pages)(int order, int area);
594extern void DRM(free_pages)(unsigned long address, int order,
595 int area);
596extern void *DRM(ioremap)(unsigned long offset, unsigned long size);
597extern void DRM(ioremapfree)(void *pt, unsigned long size);
555extern void *DRM(ioremap)(drm_device_t *dev, drm_local_map_t *map);
556extern void *DRM(ioremap_nocache)(drm_device_t *dev, drm_local_map_t *map);
557extern void DRM(ioremapfree)(drm_local_map_t *map);
598
599#if __REALLY_HAVE_AGP
600extern agp_memory *DRM(alloc_agp)(int pages, u32 type);
601extern int DRM(free_agp)(agp_memory *handle, int pages);
602extern int DRM(bind_agp)(agp_memory *handle, unsigned int start);
603extern int DRM(unbind_agp)(agp_memory *handle);
604#endif
605
558
559#if __REALLY_HAVE_AGP
560extern agp_memory *DRM(alloc_agp)(int pages, u32 type);
561extern int DRM(free_agp)(agp_memory *handle, int pages);
562extern int DRM(bind_agp)(agp_memory *handle, unsigned int start);
563extern int DRM(unbind_agp)(agp_memory *handle);
564#endif
565
606 /* Misc. IOCTL support (drm_ioctl.h) */
607extern int DRM(irq_busid)( DRM_OS_IOCTL );
608extern int DRM(getunique)( DRM_OS_IOCTL );
609extern int DRM(setunique)( DRM_OS_IOCTL );
610extern int DRM(getmap)( DRM_OS_IOCTL );
611extern int DRM(getclient)( DRM_OS_IOCTL );
612extern int DRM(getstats)( DRM_OS_IOCTL );
613
614 /* Context IOCTL support (drm_context.h) */
615extern int DRM(resctx)( DRM_OS_IOCTL );
616extern int DRM(addctx)( DRM_OS_IOCTL );
617extern int DRM(modctx)( DRM_OS_IOCTL );
618extern int DRM(getctx)( DRM_OS_IOCTL );
619extern int DRM(switchctx)( DRM_OS_IOCTL );
620extern int DRM(newctx)( DRM_OS_IOCTL );
621extern int DRM(rmctx)( DRM_OS_IOCTL );
622
623extern int DRM(context_switch)(drm_device_t *dev, int old, int new);
624extern int DRM(context_switch_complete)(drm_device_t *dev, int new);
625
626#if __HAVE_CTX_BITMAP
627extern int DRM(ctxbitmap_init)( drm_device_t *dev );
628extern void DRM(ctxbitmap_cleanup)( drm_device_t *dev );
629extern void DRM(ctxbitmap_free)( drm_device_t *dev, int ctx_handle );
630extern int DRM(ctxbitmap_next)( drm_device_t *dev );
631#endif
632
566extern int DRM(context_switch)(drm_device_t *dev, int old, int new);
567extern int DRM(context_switch_complete)(drm_device_t *dev, int new);
568
569#if __HAVE_CTX_BITMAP
570extern int DRM(ctxbitmap_init)( drm_device_t *dev );
571extern void DRM(ctxbitmap_cleanup)( drm_device_t *dev );
572extern void DRM(ctxbitmap_free)( drm_device_t *dev, int ctx_handle );
573extern int DRM(ctxbitmap_next)( drm_device_t *dev );
574#endif
575
633extern int DRM(setsareactx)( DRM_OS_IOCTL );
634extern int DRM(getsareactx)( DRM_OS_IOCTL );
635
636 /* Drawable IOCTL support (drm_drawable.h) */
637extern int DRM(adddraw)( DRM_OS_IOCTL );
638extern int DRM(rmdraw)( DRM_OS_IOCTL );
639
640 /* Authentication IOCTL support (drm_auth.h) */
641extern int DRM(add_magic)(drm_device_t *dev, drm_file_t *priv,
642 drm_magic_t magic);
643extern int DRM(remove_magic)(drm_device_t *dev, drm_magic_t magic);
644extern int DRM(getmagic)( DRM_OS_IOCTL );
645extern int DRM(authmagic)( DRM_OS_IOCTL );
646
647 /* Locking IOCTL support (drm_lock.h) */
576 /* Locking IOCTL support (drm_lock.h) */
648extern int DRM(block)( DRM_OS_IOCTL );
649extern int DRM(unblock)( DRM_OS_IOCTL );
650extern int DRM(finish)( DRM_OS_IOCTL );
651extern int DRM(lock_take)(__volatile__ unsigned int *lock,
652 unsigned int context);
653extern int DRM(lock_transfer)(drm_device_t *dev,
654 __volatile__ unsigned int *lock,
655 unsigned int context);
656extern int DRM(lock_free)(drm_device_t *dev,
657 __volatile__ unsigned int *lock,
658 unsigned int context);
659extern int DRM(flush_unblock)(drm_device_t *dev, int context,
660 drm_lock_flags_t flags);
661extern int DRM(flush_block_and_flush)(drm_device_t *dev, int context,
662 drm_lock_flags_t flags);
663extern int DRM(notifier)(void *priv);
664
665 /* Buffer management support (drm_bufs.h) */
666extern int DRM(order)( unsigned long size );
577extern int DRM(lock_take)(__volatile__ unsigned int *lock,
578 unsigned int context);
579extern int DRM(lock_transfer)(drm_device_t *dev,
580 __volatile__ unsigned int *lock,
581 unsigned int context);
582extern int DRM(lock_free)(drm_device_t *dev,
583 __volatile__ unsigned int *lock,
584 unsigned int context);
585extern int DRM(flush_unblock)(drm_device_t *dev, int context,
586 drm_lock_flags_t flags);
587extern int DRM(flush_block_and_flush)(drm_device_t *dev, int context,
588 drm_lock_flags_t flags);
589extern int DRM(notifier)(void *priv);
590
591 /* Buffer management support (drm_bufs.h) */
592extern int DRM(order)( unsigned long size );
667extern int DRM(addmap)( DRM_OS_IOCTL );
668extern int DRM(rmmap)( DRM_OS_IOCTL );
669
670#if __HAVE_DMA
593
594#if __HAVE_DMA
671extern int DRM(addbufs)( DRM_OS_IOCTL );
672extern int DRM(infobufs)( DRM_OS_IOCTL );
673extern int DRM(markbufs)( DRM_OS_IOCTL );
674extern int DRM(freebufs)( DRM_OS_IOCTL );
675extern int DRM(mapbufs)( DRM_OS_IOCTL );
676extern int DRM(control)( DRM_OS_IOCTL );
677
678 /* DMA support (drm_dma.h) */
679extern int DRM(dma_setup)(drm_device_t *dev);
680extern void DRM(dma_takedown)(drm_device_t *dev);
681extern void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf);
682extern void DRM(reclaim_buffers)(drm_device_t *dev, pid_t pid);
683#if __HAVE_OLD_DMA
684/* GH: This is a dirty hack for now...
685 */
686extern void DRM(clear_next_buffer)(drm_device_t *dev);
687extern int DRM(select_queue)(drm_device_t *dev,
688 void (*wrapper)(unsigned long));
689extern int DRM(dma_enqueue)(drm_device_t *dev, drm_dma_t *dma);
690extern int DRM(dma_get_buffers)(drm_device_t *dev, drm_dma_t *dma);
691#endif
692#if __HAVE_DMA_IRQ
693extern int DRM(irq_install)( drm_device_t *dev, int irq );
694extern int DRM(irq_uninstall)( drm_device_t *dev );
595 /* DMA support (drm_dma.h) */
596extern int DRM(dma_setup)(drm_device_t *dev);
597extern void DRM(dma_takedown)(drm_device_t *dev);
598extern void DRM(free_buffer)(drm_device_t *dev, drm_buf_t *buf);
599extern void DRM(reclaim_buffers)(drm_device_t *dev, pid_t pid);
600#if __HAVE_OLD_DMA
601/* GH: This is a dirty hack for now...
602 */
603extern void DRM(clear_next_buffer)(drm_device_t *dev);
604extern int DRM(select_queue)(drm_device_t *dev,
605 void (*wrapper)(unsigned long));
606extern int DRM(dma_enqueue)(drm_device_t *dev, drm_dma_t *dma);
607extern int DRM(dma_get_buffers)(drm_device_t *dev, drm_dma_t *dma);
608#endif
609#if __HAVE_DMA_IRQ
610extern int DRM(irq_install)( drm_device_t *dev, int irq );
611extern int DRM(irq_uninstall)( drm_device_t *dev );
695extern void DRM(dma_service)( DRM_OS_IRQ_ARGS );
612extern void DRM(dma_service)( DRM_IRQ_ARGS );
613extern void DRM(driver_irq_preinstall)( drm_device_t *dev );
614extern void DRM(driver_irq_postinstall)( drm_device_t *dev );
615extern void DRM(driver_irq_uninstall)( drm_device_t *dev );
696#if __HAVE_DMA_IRQ_BH
616#if __HAVE_DMA_IRQ_BH
697extern void DRM(dma_immediate_bh)( DRM_OS_TASKQUEUE_ARGS );
617extern void DRM(dma_immediate_bh)( DRM_TASKQUEUE_ARGS );
698#endif
699#endif
700#if DRM_DMA_HISTOGRAM
701extern int DRM(histogram_slot)(unsigned long count);
702extern void DRM(histogram_compute)(drm_device_t *dev, drm_buf_t *buf);
703#endif
704
705 /* Buffer list support (drm_lists.h) */

--- 6 unchanged lines hidden (view full) ---

712#if __HAVE_DMA_FREELIST
713extern int DRM(freelist_create)(drm_freelist_t *bl, int count);
714extern int DRM(freelist_destroy)(drm_freelist_t *bl);
715extern int DRM(freelist_put)(drm_device_t *dev, drm_freelist_t *bl,
716 drm_buf_t *buf);
717extern drm_buf_t *DRM(freelist_get)(drm_freelist_t *bl, int block);
718#endif
719#endif /* __HAVE_DMA */
618#endif
619#endif
620#if DRM_DMA_HISTOGRAM
621extern int DRM(histogram_slot)(unsigned long count);
622extern void DRM(histogram_compute)(drm_device_t *dev, drm_buf_t *buf);
623#endif
624
625 /* Buffer list support (drm_lists.h) */

--- 6 unchanged lines hidden (view full) ---

632#if __HAVE_DMA_FREELIST
633extern int DRM(freelist_create)(drm_freelist_t *bl, int count);
634extern int DRM(freelist_destroy)(drm_freelist_t *bl);
635extern int DRM(freelist_put)(drm_device_t *dev, drm_freelist_t *bl,
636 drm_buf_t *buf);
637extern drm_buf_t *DRM(freelist_get)(drm_freelist_t *bl, int block);
638#endif
639#endif /* __HAVE_DMA */
640#if __HAVE_VBL_IRQ
641extern int DRM(vblank_wait)(drm_device_t *dev, unsigned int *vbl_seq);
642extern void DRM(vbl_send_signals)( drm_device_t *dev );
643#endif
720
721#if __REALLY_HAVE_AGP
722 /* AGP/GART support (drm_agpsupport.h) */
644
645#if __REALLY_HAVE_AGP
646 /* AGP/GART support (drm_agpsupport.h) */
723extern int DRM(agp_acquire)( DRM_OS_IOCTL );
724extern int DRM(agp_release)( DRM_OS_IOCTL );
725extern int DRM(agp_enable)( DRM_OS_IOCTL );
726extern int DRM(agp_info)( DRM_OS_IOCTL );
727extern int DRM(agp_alloc)( DRM_OS_IOCTL );
728extern int DRM(agp_free)( DRM_OS_IOCTL );
729extern int DRM(agp_unbind)( DRM_OS_IOCTL );
730extern int DRM(agp_bind)( DRM_OS_IOCTL );
731extern drm_agp_head_t *DRM(agp_init)(void);
732extern void DRM(agp_uninit)(void);
733extern void DRM(agp_do_release)(void);
734extern agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type);
735extern int DRM(agp_free_memory)(agp_memory *handle);
736extern int DRM(agp_bind_memory)(agp_memory *handle, off_t start);
737extern int DRM(agp_unbind_memory)(agp_memory *handle);
738#endif
739
740#if __HAVE_SG
741 /* Scatter Gather Support (drm_scatter.h) */
742extern void DRM(sg_cleanup)(drm_sg_mem_t *entry);
647extern drm_agp_head_t *DRM(agp_init)(void);
648extern void DRM(agp_uninit)(void);
649extern void DRM(agp_do_release)(void);
650extern agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type);
651extern int DRM(agp_free_memory)(agp_memory *handle);
652extern int DRM(agp_bind_memory)(agp_memory *handle, off_t start);
653extern int DRM(agp_unbind_memory)(agp_memory *handle);
654#endif
655
656#if __HAVE_SG
657 /* Scatter Gather Support (drm_scatter.h) */
658extern void DRM(sg_cleanup)(drm_sg_mem_t *entry);
743extern int DRM(sg_alloc)( DRM_OS_IOCTL );
744extern int DRM(sg_free)( DRM_OS_IOCTL );
745#endif
746
747#if __REALLY_HAVE_SG
748 /* ATI PCIGART support (ati_pcigart.h) */
749extern int DRM(ati_pcigart_init)(drm_device_t *dev,
750 unsigned long *addr,
751 dma_addr_t *bus_addr);
752extern int DRM(ati_pcigart_cleanup)(drm_device_t *dev,
753 unsigned long addr,
754 dma_addr_t bus_addr);
755#endif
756
757#endif /* __KERNEL__ */
659#endif
660
661#if __REALLY_HAVE_SG
662 /* ATI PCIGART support (ati_pcigart.h) */
663extern int DRM(ati_pcigart_init)(drm_device_t *dev,
664 unsigned long *addr,
665 dma_addr_t *bus_addr);
666extern int DRM(ati_pcigart_cleanup)(drm_device_t *dev,
667 unsigned long addr,
668 dma_addr_t bus_addr);
669#endif
670
671#endif /* __KERNEL__ */
758#endif
672#endif /* _DRM_P_H_ */