forked from KolibriOS/kolibrios
RC11.01 includes
git-svn-id: svn://kolibrios.org@2003 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c80e5bc09b
commit
22a5a068ee
@ -698,6 +698,11 @@ struct drm_get_cap {
|
|||||||
#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
|
#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
|
||||||
#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip)
|
#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip)
|
||||||
#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd)
|
#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd)
|
||||||
|
|
||||||
|
#define DRM_IOCTL_MODE_CREATE_DUMB DRM_IOWR(0xB2, struct drm_mode_create_dumb)
|
||||||
|
#define DRM_IOCTL_MODE_MAP_DUMB DRM_IOWR(0xB3, struct drm_mode_map_dumb)
|
||||||
|
#define DRM_IOCTL_MODE_DESTROY_DUMB DRM_IOWR(0xB4, struct drm_mode_destroy_dumb)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -313,7 +313,8 @@ extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy,
|
|||||||
* @bo: The buffer object.
|
* @bo: The buffer object.
|
||||||
* @placement: Proposed placement for the buffer object.
|
* @placement: Proposed placement for the buffer object.
|
||||||
* @interruptible: Sleep interruptible if sleeping.
|
* @interruptible: Sleep interruptible if sleeping.
|
||||||
* @no_wait: Return immediately if the buffer is busy.
|
* @no_wait_reserve: Return immediately if other buffers are busy.
|
||||||
|
* @no_wait_gpu: Return immediately if the GPU is busy.
|
||||||
*
|
*
|
||||||
* Changes placement and caching policy of the buffer object
|
* Changes placement and caching policy of the buffer object
|
||||||
* according proposed placement.
|
* according proposed placement.
|
||||||
@ -325,7 +326,8 @@ extern int ttm_bo_wait(struct ttm_buffer_object *bo, bool lazy,
|
|||||||
*/
|
*/
|
||||||
extern int ttm_bo_validate(struct ttm_buffer_object *bo,
|
extern int ttm_bo_validate(struct ttm_buffer_object *bo,
|
||||||
struct ttm_placement *placement,
|
struct ttm_placement *placement,
|
||||||
bool interruptible, bool no_wait);
|
bool interruptible, bool no_wait_reserve,
|
||||||
|
bool no_wait_gpu);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ttm_bo_unref
|
* ttm_bo_unref
|
||||||
@ -374,9 +376,9 @@ extern void ttm_bo_synccpu_write_release(struct ttm_buffer_object *bo);
|
|||||||
* user buffer object.
|
* user buffer object.
|
||||||
* @interruptible: If needing to sleep to wait for GPU resources,
|
* @interruptible: If needing to sleep to wait for GPU resources,
|
||||||
* sleep interruptible.
|
* sleep interruptible.
|
||||||
* @persistant_swap_storage: Usually the swap storage is deleted for buffers
|
* @persistent_swap_storage: Usually the swap storage is deleted for buffers
|
||||||
* pinned in physical memory. If this behaviour is not desired, this member
|
* pinned in physical memory. If this behaviour is not desired, this member
|
||||||
* holds a pointer to a persistant shmem object. Typically, this would
|
* holds a pointer to a persistent shmem object. Typically, this would
|
||||||
* point to the shmem object backing a GEM object if TTM is used to back a
|
* point to the shmem object backing a GEM object if TTM is used to back a
|
||||||
* GEM user interface.
|
* GEM user interface.
|
||||||
* @acc_size: Accounted size for this object.
|
* @acc_size: Accounted size for this object.
|
||||||
@ -387,6 +389,10 @@ extern void ttm_bo_synccpu_write_release(struct ttm_buffer_object *bo);
|
|||||||
* together with the @destroy function,
|
* together with the @destroy function,
|
||||||
* enables driver-specific objects derived from a ttm_buffer_object.
|
* enables driver-specific objects derived from a ttm_buffer_object.
|
||||||
* On successful return, the object kref and list_kref are set to 1.
|
* On successful return, the object kref and list_kref are set to 1.
|
||||||
|
* If a failure occurs, the function will call the @destroy function, or
|
||||||
|
* kfree() if @destroy is NULL. Thus, after a failure, dereferencing @bo is
|
||||||
|
* illegal and will likely cause memory corruption.
|
||||||
|
*
|
||||||
* Returns
|
* Returns
|
||||||
* -ENOMEM: Out of memory.
|
* -ENOMEM: Out of memory.
|
||||||
* -EINVAL: Invalid placement flags.
|
* -EINVAL: Invalid placement flags.
|
||||||
@ -401,7 +407,7 @@ extern int ttm_bo_init(struct ttm_bo_device *bdev,
|
|||||||
uint32_t page_alignment,
|
uint32_t page_alignment,
|
||||||
unsigned long buffer_start,
|
unsigned long buffer_start,
|
||||||
bool interrubtible,
|
bool interrubtible,
|
||||||
struct file *persistant_swap_storage,
|
struct file *persistent_swap_storage,
|
||||||
size_t acc_size,
|
size_t acc_size,
|
||||||
void (*destroy) (struct ttm_buffer_object *));
|
void (*destroy) (struct ttm_buffer_object *));
|
||||||
/**
|
/**
|
||||||
@ -417,9 +423,9 @@ extern int ttm_bo_init(struct ttm_bo_device *bdev,
|
|||||||
* user buffer object.
|
* user buffer object.
|
||||||
* @interruptible: If needing to sleep while waiting for GPU resources,
|
* @interruptible: If needing to sleep while waiting for GPU resources,
|
||||||
* sleep interruptible.
|
* sleep interruptible.
|
||||||
* @persistant_swap_storage: Usually the swap storage is deleted for buffers
|
* @persistent_swap_storage: Usually the swap storage is deleted for buffers
|
||||||
* pinned in physical memory. If this behaviour is not desired, this member
|
* pinned in physical memory. If this behaviour is not desired, this member
|
||||||
* holds a pointer to a persistant shmem object. Typically, this would
|
* holds a pointer to a persistent shmem object. Typically, this would
|
||||||
* point to the shmem object backing a GEM object if TTM is used to back a
|
* point to the shmem object backing a GEM object if TTM is used to back a
|
||||||
* GEM user interface.
|
* GEM user interface.
|
||||||
* @p_bo: On successful completion *p_bo points to the created object.
|
* @p_bo: On successful completion *p_bo points to the created object.
|
||||||
@ -439,7 +445,7 @@ extern int ttm_bo_create(struct ttm_bo_device *bdev,
|
|||||||
uint32_t page_alignment,
|
uint32_t page_alignment,
|
||||||
unsigned long buffer_start,
|
unsigned long buffer_start,
|
||||||
bool interruptible,
|
bool interruptible,
|
||||||
struct file *persistant_swap_storage,
|
struct file *persistent_swap_storage,
|
||||||
struct ttm_buffer_object **p_bo);
|
struct ttm_buffer_object **p_bo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,7 +53,8 @@ struct ttm_backend_func {
|
|||||||
*/
|
*/
|
||||||
int (*populate) (struct ttm_backend *backend,
|
int (*populate) (struct ttm_backend *backend,
|
||||||
unsigned long num_pages, struct page **pages,
|
unsigned long num_pages, struct page **pages,
|
||||||
struct page *dummy_read_page);
|
struct page *dummy_read_page,
|
||||||
|
dma_addr_t *dma_addrs);
|
||||||
/**
|
/**
|
||||||
* struct ttm_backend_func member clear
|
* struct ttm_backend_func member clear
|
||||||
*
|
*
|
||||||
@ -113,12 +114,11 @@ struct ttm_backend {
|
|||||||
struct ttm_backend_func *func;
|
struct ttm_backend_func *func;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TTM_PAGE_FLAG_VMALLOC (1 << 0)
|
|
||||||
#define TTM_PAGE_FLAG_USER (1 << 1)
|
#define TTM_PAGE_FLAG_USER (1 << 1)
|
||||||
#define TTM_PAGE_FLAG_USER_DIRTY (1 << 2)
|
#define TTM_PAGE_FLAG_USER_DIRTY (1 << 2)
|
||||||
#define TTM_PAGE_FLAG_WRITE (1 << 3)
|
#define TTM_PAGE_FLAG_WRITE (1 << 3)
|
||||||
#define TTM_PAGE_FLAG_SWAPPED (1 << 4)
|
#define TTM_PAGE_FLAG_SWAPPED (1 << 4)
|
||||||
#define TTM_PAGE_FLAG_PERSISTANT_SWAP (1 << 5)
|
#define TTM_PAGE_FLAG_PERSISTENT_SWAP (1 << 5)
|
||||||
#define TTM_PAGE_FLAG_ZERO_ALLOC (1 << 6)
|
#define TTM_PAGE_FLAG_ZERO_ALLOC (1 << 6)
|
||||||
#define TTM_PAGE_FLAG_DMA32 (1 << 7)
|
#define TTM_PAGE_FLAG_DMA32 (1 << 7)
|
||||||
|
|
||||||
@ -147,6 +147,7 @@ enum ttm_caching_state {
|
|||||||
* @swap_storage: Pointer to shmem struct file for swap storage.
|
* @swap_storage: Pointer to shmem struct file for swap storage.
|
||||||
* @caching_state: The current caching state of the pages.
|
* @caching_state: The current caching state of the pages.
|
||||||
* @state: The current binding state of the pages.
|
* @state: The current binding state of the pages.
|
||||||
|
* @dma_address: The DMA (bus) addresses of the pages (if TTM_PAGE_FLAG_DMA32)
|
||||||
*
|
*
|
||||||
* This is a structure holding the pages, caching- and aperture binding
|
* This is a structure holding the pages, caching- and aperture binding
|
||||||
* status for a buffer object that isn't backed by fixed (VRAM / AGP)
|
* status for a buffer object that isn't backed by fixed (VRAM / AGP)
|
||||||
@ -171,12 +172,11 @@ struct ttm_tt {
|
|||||||
tt_unbound,
|
tt_unbound,
|
||||||
tt_unpopulated,
|
tt_unpopulated,
|
||||||
} state;
|
} state;
|
||||||
|
dma_addr_t *dma_address;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
|
#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
|
||||||
#define TTM_MEMTYPE_FLAG_MAPPABLE (1 << 1) /* Memory mappable */
|
#define TTM_MEMTYPE_FLAG_MAPPABLE (1 << 1) /* Memory mappable */
|
||||||
#define TTM_MEMTYPE_FLAG_NEEDS_IOREMAP (1 << 2) /* Fixed memory needs ioremap
|
|
||||||
before kernel access. */
|
|
||||||
#define TTM_MEMTYPE_FLAG_CMA (1 << 3) /* Can't map aperture */
|
#define TTM_MEMTYPE_FLAG_CMA (1 << 3) /* Can't map aperture */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -188,29 +188,29 @@ struct ttm_tt {
|
|||||||
* managed by this memory type.
|
* managed by this memory type.
|
||||||
* @gpu_offset: If used, the GPU offset of the first managed page of
|
* @gpu_offset: If used, the GPU offset of the first managed page of
|
||||||
* fixed memory or the first managed location in an aperture.
|
* fixed memory or the first managed location in an aperture.
|
||||||
* @io_offset: The io_offset of the first managed page of IO memory or
|
|
||||||
* the first managed location in an aperture. For TTM_MEMTYPE_FLAG_CMA
|
|
||||||
* memory, this should be set to NULL.
|
|
||||||
* @io_size: The size of a managed IO region (fixed memory or aperture).
|
|
||||||
* @io_addr: Virtual kernel address if the io region is pre-mapped. For
|
|
||||||
* TTM_MEMTYPE_FLAG_NEEDS_IOREMAP there is no pre-mapped io map and
|
|
||||||
* @io_addr should be set to NULL.
|
|
||||||
* @size: Size of the managed region.
|
* @size: Size of the managed region.
|
||||||
* @available_caching: A mask of available caching types, TTM_PL_FLAG_XX,
|
* @available_caching: A mask of available caching types, TTM_PL_FLAG_XX,
|
||||||
* as defined in ttm_placement_common.h
|
* as defined in ttm_placement_common.h
|
||||||
* @default_caching: The default caching policy used for a buffer object
|
* @default_caching: The default caching policy used for a buffer object
|
||||||
* placed in this memory type if the user doesn't provide one.
|
* placed in this memory type if the user doesn't provide one.
|
||||||
* @manager: The range manager used for this memory type. FIXME: If the aperture
|
* @func: structure pointer implementing the range manager. See above
|
||||||
* has a page size different from the underlying system, the granularity
|
* @priv: Driver private closure for @func.
|
||||||
* of this manager should take care of this. But the range allocating code
|
* @io_reserve_mutex: Mutex optionally protecting shared io_reserve structures
|
||||||
* in ttm_bo.c needs to be modified for this.
|
* @use_io_reserve_lru: Use an lru list to try to unreserve io_mem_regions
|
||||||
|
* reserved by the TTM vm system.
|
||||||
|
* @io_reserve_lru: Optional lru list for unreserving io mem regions.
|
||||||
|
* @io_reserve_fastpath: Only use bdev::driver::io_mem_reserve to obtain
|
||||||
|
* static information. bdev::driver::io_mem_free is never used.
|
||||||
* @lru: The lru list for this memory type.
|
* @lru: The lru list for this memory type.
|
||||||
*
|
*
|
||||||
* This structure is used to identify and manage memory types for a device.
|
* This structure is used to identify and manage memory types for a device.
|
||||||
* It's set up by the ttm_bo_driver::init_mem_type method.
|
* It's set up by the ttm_bo_driver::init_mem_type method.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct ttm_mem_type_manager {
|
struct ttm_mem_type_manager {
|
||||||
|
struct ttm_bo_device *bdev;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No protection. Constant from start.
|
* No protection. Constant from start.
|
||||||
@ -220,20 +220,25 @@ struct ttm_mem_type_manager {
|
|||||||
bool use_type;
|
bool use_type;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
unsigned long gpu_offset;
|
unsigned long gpu_offset;
|
||||||
unsigned long io_offset;
|
|
||||||
unsigned long io_size;
|
|
||||||
void *io_addr;
|
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
uint32_t available_caching;
|
uint32_t available_caching;
|
||||||
uint32_t default_caching;
|
uint32_t default_caching;
|
||||||
|
const struct ttm_mem_type_manager_func *func;
|
||||||
|
void *priv;
|
||||||
|
struct mutex io_reserve_mutex;
|
||||||
|
bool use_io_reserve_lru;
|
||||||
|
bool io_reserve_fastpath;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Protected by the bdev->lru_lock.
|
* Protected by @io_reserve_mutex:
|
||||||
* TODO: Consider one lru_lock per ttm_mem_type_manager.
|
*/
|
||||||
* Plays ill with list removal, though.
|
|
||||||
|
struct list_head io_reserve_lru;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Protected by the global->lru_lock.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct drm_mm manager;
|
|
||||||
struct list_head lru;
|
struct list_head lru;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
19
drivers/include/linux/irqreturn.h
Normal file
19
drivers/include/linux/irqreturn.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef _LINUX_IRQRETURN_H
|
||||||
|
#define _LINUX_IRQRETURN_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum irqreturn
|
||||||
|
* @IRQ_NONE interrupt was not from this device
|
||||||
|
* @IRQ_HANDLED interrupt was handled by this device
|
||||||
|
* @IRQ_WAKE_THREAD handler requests to wake the handler thread
|
||||||
|
*/
|
||||||
|
enum irqreturn {
|
||||||
|
IRQ_NONE = (0 << 0),
|
||||||
|
IRQ_HANDLED = (1 << 0),
|
||||||
|
IRQ_WAKE_THREAD = (1 << 1),
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum irqreturn irqreturn_t;
|
||||||
|
#define IRQ_RETVAL(x) ((x) != IRQ_NONE)
|
||||||
|
|
||||||
|
#endif
|
@ -34,7 +34,14 @@
|
|||||||
do { local_irq_disable(); __LOCK(lock); } while (0)
|
do { local_irq_disable(); __LOCK(lock); } while (0)
|
||||||
|
|
||||||
#define __LOCK_IRQSAVE(lock, flags) \
|
#define __LOCK_IRQSAVE(lock, flags) \
|
||||||
do { local_irq_save(flags); __LOCK(lock); } while (0)
|
do { \
|
||||||
|
__asm__ __volatile__ ( \
|
||||||
|
"pushf\n\t" \
|
||||||
|
"popl %0\n\t" \
|
||||||
|
"cli\n" \
|
||||||
|
: "=r" (flags)); \
|
||||||
|
__LOCK(lock); \
|
||||||
|
} while (0) \
|
||||||
|
|
||||||
#define __UNLOCK(lock) \
|
#define __UNLOCK(lock) \
|
||||||
do { preempt_enable(); __release(lock); (void)(lock); } while (0)
|
do { preempt_enable(); __release(lock); (void)(lock); } while (0)
|
||||||
@ -46,8 +53,12 @@
|
|||||||
#define __UNLOCK_IRQ(lock) \
|
#define __UNLOCK_IRQ(lock) \
|
||||||
do { local_irq_enable(); __UNLOCK(lock); } while (0)
|
do { local_irq_enable(); __UNLOCK(lock); } while (0)
|
||||||
|
|
||||||
#define __UNLOCK_IRQRESTORE(lock, flags) \
|
#define __UNLOCK_IRQRESTORE(lock, flags) \
|
||||||
do { local_irq_restore(flags); __UNLOCK(lock); } while (0)
|
do { \
|
||||||
|
if (flags & (1<<9)) \
|
||||||
|
__asm__ __volatile__ ("sti"); \
|
||||||
|
__UNLOCK(lock); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define _spin_lock(lock) __LOCK(lock)
|
#define _spin_lock(lock) __LOCK(lock)
|
||||||
#define _spin_lock_nested(lock, subclass) __LOCK(lock)
|
#define _spin_lock_nested(lock, subclass) __LOCK(lock)
|
||||||
|
Loading…
Reference in New Issue
Block a user