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_ */ |