Merge drm-upstream/drm-next into drm-intel-next-queued
Need MST sideband message transaction to power up/down nodes. Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
+17
-77
@@ -144,7 +144,6 @@ struct __drm_planes_state {
|
||||
struct __drm_crtcs_state {
|
||||
struct drm_crtc *ptr;
|
||||
struct drm_crtc_state *state, *old_state, *new_state;
|
||||
struct drm_crtc_commit *commit;
|
||||
s32 __user *out_fence_ptr;
|
||||
unsigned last_vblank_count;
|
||||
};
|
||||
@@ -236,6 +235,18 @@ struct drm_atomic_state {
|
||||
|
||||
struct drm_modeset_acquire_ctx *acquire_ctx;
|
||||
|
||||
/**
|
||||
* @fake_commit:
|
||||
*
|
||||
* Used for signaling unbound planes/connectors.
|
||||
* When a connector or plane is not bound to any CRTC, it's still important
|
||||
* to preserve linearity to prevent the atomic states from being freed to early.
|
||||
*
|
||||
* This commit (if set) is not bound to any crtc, but will be completed when
|
||||
* drm_atomic_helper_commit_hw_done() is called.
|
||||
*/
|
||||
struct drm_crtc_commit *fake_commit;
|
||||
|
||||
/**
|
||||
* @commit_work:
|
||||
*
|
||||
@@ -252,10 +263,14 @@ void __drm_crtc_commit_free(struct kref *kref);
|
||||
* @commit: CRTC commit
|
||||
*
|
||||
* Increases the reference of @commit.
|
||||
*
|
||||
* Returns:
|
||||
* The pointer to @commit, with reference increased.
|
||||
*/
|
||||
static inline void drm_crtc_commit_get(struct drm_crtc_commit *commit)
|
||||
static inline struct drm_crtc_commit *drm_crtc_commit_get(struct drm_crtc_commit *commit)
|
||||
{
|
||||
kref_get(&commit->ref);
|
||||
return commit;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -554,31 +569,6 @@ int __must_check drm_atomic_nonblocking_commit(struct drm_atomic_state *state);
|
||||
|
||||
void drm_state_dump(struct drm_device *dev, struct drm_printer *p);
|
||||
|
||||
/**
|
||||
* for_each_connector_in_state - iterate over all connectors in an atomic update
|
||||
* @__state: &struct drm_atomic_state pointer
|
||||
* @connector: &struct drm_connector iteration cursor
|
||||
* @connector_state: &struct drm_connector_state iteration cursor
|
||||
* @__i: int iteration cursor, for macro-internal use
|
||||
*
|
||||
* This iterates over all connectors in an atomic update. Note that before the
|
||||
* software state is committed (by calling drm_atomic_helper_swap_state(), this
|
||||
* points to the new state, while afterwards it points to the old state. Due to
|
||||
* this tricky confusion this macro is deprecated.
|
||||
*
|
||||
* FIXME:
|
||||
*
|
||||
* Replace all usage of this with one of the explicit iterators below and then
|
||||
* remove this macro.
|
||||
*/
|
||||
#define for_each_connector_in_state(__state, connector, connector_state, __i) \
|
||||
for ((__i) = 0; \
|
||||
(__i) < (__state)->num_connector && \
|
||||
((connector) = (__state)->connectors[__i].ptr, \
|
||||
(connector_state) = (__state)->connectors[__i].state, 1); \
|
||||
(__i)++) \
|
||||
for_each_if (connector)
|
||||
|
||||
/**
|
||||
* for_each_oldnew_connector_in_state - iterate over all connectors in an atomic update
|
||||
* @__state: &struct drm_atomic_state pointer
|
||||
@@ -642,31 +632,6 @@ void drm_state_dump(struct drm_device *dev, struct drm_printer *p);
|
||||
(__i)++) \
|
||||
for_each_if (connector)
|
||||
|
||||
/**
|
||||
* for_each_crtc_in_state - iterate over all connectors in an atomic update
|
||||
* @__state: &struct drm_atomic_state pointer
|
||||
* @crtc: &struct drm_crtc iteration cursor
|
||||
* @crtc_state: &struct drm_crtc_state iteration cursor
|
||||
* @__i: int iteration cursor, for macro-internal use
|
||||
*
|
||||
* This iterates over all CRTCs in an atomic update. Note that before the
|
||||
* software state is committed (by calling drm_atomic_helper_swap_state(), this
|
||||
* points to the new state, while afterwards it points to the old state. Due to
|
||||
* this tricky confusion this macro is deprecated.
|
||||
*
|
||||
* FIXME:
|
||||
*
|
||||
* Replace all usage of this with one of the explicit iterators below and then
|
||||
* remove this macro.
|
||||
*/
|
||||
#define for_each_crtc_in_state(__state, crtc, crtc_state, __i) \
|
||||
for ((__i) = 0; \
|
||||
(__i) < (__state)->dev->mode_config.num_crtc && \
|
||||
((crtc) = (__state)->crtcs[__i].ptr, \
|
||||
(crtc_state) = (__state)->crtcs[__i].state, 1); \
|
||||
(__i)++) \
|
||||
for_each_if (crtc_state)
|
||||
|
||||
/**
|
||||
* for_each_oldnew_crtc_in_state - iterate over all CRTCs in an atomic update
|
||||
* @__state: &struct drm_atomic_state pointer
|
||||
@@ -726,31 +691,6 @@ void drm_state_dump(struct drm_device *dev, struct drm_printer *p);
|
||||
(__i)++) \
|
||||
for_each_if (crtc)
|
||||
|
||||
/**
|
||||
* for_each_plane_in_state - iterate over all planes in an atomic update
|
||||
* @__state: &struct drm_atomic_state pointer
|
||||
* @plane: &struct drm_plane iteration cursor
|
||||
* @plane_state: &struct drm_plane_state iteration cursor
|
||||
* @__i: int iteration cursor, for macro-internal use
|
||||
*
|
||||
* This iterates over all planes in an atomic update. Note that before the
|
||||
* software state is committed (by calling drm_atomic_helper_swap_state(), this
|
||||
* points to the new state, while afterwards it points to the old state. Due to
|
||||
* this tricky confusion this macro is deprecated.
|
||||
*
|
||||
* FIXME:
|
||||
*
|
||||
* Replace all usage of this with one of the explicit iterators below and then
|
||||
* remove this macro.
|
||||
*/
|
||||
#define for_each_plane_in_state(__state, plane, plane_state, __i) \
|
||||
for ((__i) = 0; \
|
||||
(__i) < (__state)->dev->mode_config.num_total_plane && \
|
||||
((plane) = (__state)->planes[__i].ptr, \
|
||||
(plane_state) = (__state)->planes[__i].state, 1); \
|
||||
(__i)++) \
|
||||
for_each_if (plane_state)
|
||||
|
||||
/**
|
||||
* for_each_oldnew_plane_in_state - iterate over all planes in an atomic update
|
||||
* @__state: &struct drm_atomic_state pointer
|
||||
|
||||
@@ -245,7 +245,7 @@ struct drm_bridge {
|
||||
void *driver_private;
|
||||
};
|
||||
|
||||
int drm_bridge_add(struct drm_bridge *bridge);
|
||||
void drm_bridge_add(struct drm_bridge *bridge);
|
||||
void drm_bridge_remove(struct drm_bridge *bridge);
|
||||
struct drm_bridge *of_drm_find_bridge(struct device_node *np);
|
||||
int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
|
||||
|
||||
@@ -347,6 +347,13 @@ struct drm_connector_state {
|
||||
|
||||
struct drm_atomic_state *state;
|
||||
|
||||
/**
|
||||
* @commit: Tracks the pending commit to prevent use-after-free conditions.
|
||||
*
|
||||
* Is only set when @crtc is NULL.
|
||||
*/
|
||||
struct drm_crtc_commit *commit;
|
||||
|
||||
struct drm_tv_connector_state tv;
|
||||
|
||||
/**
|
||||
@@ -888,8 +895,7 @@ struct drm_connector {
|
||||
* This is protected by @drm_mode_config.connection_mutex. Note that
|
||||
* nonblocking atomic commits access the current connector state without
|
||||
* taking locks. Either by going through the &struct drm_atomic_state
|
||||
* pointers, see for_each_connector_in_state(),
|
||||
* for_each_oldnew_connector_in_state(),
|
||||
* pointers, see for_each_oldnew_connector_in_state(),
|
||||
* for_each_old_connector_in_state() and
|
||||
* for_each_new_connector_in_state(). Or through careful ordering of
|
||||
* atomic commit operations as implemented in the atomic helpers, see
|
||||
|
||||
+23
-8
@@ -253,6 +253,15 @@ struct drm_crtc_state {
|
||||
*/
|
||||
struct drm_pending_vblank_event *event;
|
||||
|
||||
/**
|
||||
* @commit:
|
||||
*
|
||||
* This tracks how the commit for this update proceeds through the
|
||||
* various phases. This is never cleared, except when we destroy the
|
||||
* state, so that subsequent commits can synchronize with previous ones.
|
||||
*/
|
||||
struct drm_crtc_commit *commit;
|
||||
|
||||
struct drm_atomic_state *state;
|
||||
};
|
||||
|
||||
@@ -797,10 +806,10 @@ struct drm_crtc {
|
||||
* This is protected by @mutex. Note that nonblocking atomic commits
|
||||
* access the current CRTC state without taking locks. Either by going
|
||||
* through the &struct drm_atomic_state pointers, see
|
||||
* for_each_crtc_in_state(), for_each_oldnew_crtc_in_state(),
|
||||
* for_each_old_crtc_in_state() and for_each_new_crtc_in_state(). Or
|
||||
* through careful ordering of atomic commit operations as implemented
|
||||
* in the atomic helpers, see &struct drm_crtc_commit.
|
||||
* for_each_oldnew_crtc_in_state(), for_each_old_crtc_in_state() and
|
||||
* for_each_new_crtc_in_state(). Or through careful ordering of atomic
|
||||
* commit operations as implemented in the atomic helpers, see
|
||||
* &struct drm_crtc_commit.
|
||||
*/
|
||||
struct drm_crtc_state *state;
|
||||
|
||||
@@ -808,10 +817,16 @@ struct drm_crtc {
|
||||
* @commit_list:
|
||||
*
|
||||
* List of &drm_crtc_commit structures tracking pending commits.
|
||||
* Protected by @commit_lock. This list doesn't hold its own full
|
||||
* reference, but burrows it from the ongoing commit. Commit entries
|
||||
* must be removed from this list once the commit is fully completed,
|
||||
* but before it's correspoding &drm_atomic_state gets destroyed.
|
||||
* Protected by @commit_lock. This list holds its own full reference,
|
||||
* as does the ongoing commit.
|
||||
*
|
||||
* "Note that the commit for a state change is also tracked in
|
||||
* &drm_crtc_state.commit. For accessing the immediately preceding
|
||||
* commit in an atomic update it is recommended to just use that
|
||||
* pointer in the old CRTC state, since accessing that doesn't need
|
||||
* any locking or list-walking. @commit_list should only be used to
|
||||
* stall for framebuffer cleanup that's signalled through
|
||||
* &drm_crtc_commit.cleanup_done."
|
||||
*/
|
||||
struct list_head commit_list;
|
||||
|
||||
|
||||
@@ -738,6 +738,11 @@
|
||||
#define DP_RECEIVER_ALPM_STATUS 0x200b /* eDP 1.4 */
|
||||
# define DP_ALPM_LOCK_TIMEOUT_ERROR (1 << 0)
|
||||
|
||||
#define DP_LANE0_1_STATUS_ESI 0x200c /* status same as 0x202 */
|
||||
#define DP_LANE2_3_STATUS_ESI 0x200d /* status same as 0x203 */
|
||||
#define DP_LANE_ALIGN_STATUS_UPDATED_ESI 0x200e /* status same as 0x204 */
|
||||
#define DP_SINK_STATUS_ESI 0x200f /* status same as 0x205 */
|
||||
|
||||
#define DP_DPRX_FEATURE_ENUMERATION_LIST 0x2210 /* DP 1.3 */
|
||||
# define DP_GTC_CAP (1 << 0) /* DP 1.3 */
|
||||
# define DP_SST_SPLIT_SDP_CAP (1 << 1) /* DP 1.4 */
|
||||
@@ -871,6 +876,18 @@ void drm_dp_link_train_channel_eq_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]);
|
||||
u8 drm_dp_link_rate_to_bw_code(int link_rate);
|
||||
int drm_dp_bw_code_to_link_rate(u8 link_bw);
|
||||
|
||||
#define DP_SDP_AUDIO_TIMESTAMP 0x01
|
||||
#define DP_SDP_AUDIO_STREAM 0x02
|
||||
#define DP_SDP_EXTENSION 0x04 /* DP 1.1 */
|
||||
#define DP_SDP_AUDIO_COPYMANAGEMENT 0x05 /* DP 1.2 */
|
||||
#define DP_SDP_ISRC 0x06 /* DP 1.2 */
|
||||
#define DP_SDP_VSC 0x07 /* DP 1.2 */
|
||||
#define DP_SDP_CAMERA_GENERIC(i) (0x08 + (i)) /* 0-7, DP 1.3 */
|
||||
#define DP_SDP_PPS 0x10 /* DP 1.4 */
|
||||
#define DP_SDP_VSC_EXT_VESA 0x20 /* DP 1.4 */
|
||||
#define DP_SDP_VSC_EXT_CEA 0x21 /* DP 1.4 */
|
||||
/* 0x80+ CEA-861 infoframe types */
|
||||
|
||||
struct edp_sdp_header {
|
||||
u8 HB0; /* Secondary Data Packet ID */
|
||||
u8 HB1; /* Secondary Data Packet Type */
|
||||
|
||||
@@ -631,5 +631,7 @@ int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
|
||||
int drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state,
|
||||
struct drm_dp_mst_topology_mgr *mgr,
|
||||
int slots);
|
||||
int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr,
|
||||
struct drm_dp_mst_port *port, bool power_up);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -341,6 +341,8 @@ int drm_av_sync_delay(struct drm_connector *connector,
|
||||
|
||||
#ifdef CONFIG_DRM_LOAD_EDID_FIRMWARE
|
||||
struct edid *drm_load_edid_firmware(struct drm_connector *connector);
|
||||
int __drm_set_edid_firmware_path(const char *path);
|
||||
int __drm_get_edid_firmware_path(char *buf, size_t bufsize);
|
||||
#else
|
||||
static inline struct edid *
|
||||
drm_load_edid_firmware(struct drm_connector *connector)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#define __DRM_GEM_FB_HELPER_H__
|
||||
|
||||
struct drm_device;
|
||||
struct drm_file;
|
||||
struct drm_fb_helper_surface_size;
|
||||
struct drm_file;
|
||||
struct drm_framebuffer;
|
||||
struct drm_framebuffer_funcs;
|
||||
struct drm_gem_object;
|
||||
|
||||
@@ -172,7 +172,7 @@ struct drm_mm {
|
||||
* according to the (increasing) start address of the memory node. */
|
||||
struct drm_mm_node head_node;
|
||||
/* Keep an interval_tree for fast lookup of drm_mm_nodes by address. */
|
||||
struct rb_root interval_tree;
|
||||
struct rb_root_cached interval_tree;
|
||||
struct rb_root holes_size;
|
||||
struct rb_root holes_addr;
|
||||
|
||||
|
||||
@@ -314,7 +314,7 @@ struct drm_crtc_helper_funcs {
|
||||
* implementation in drm_atomic_helper_check().
|
||||
*
|
||||
* When using drm_atomic_helper_check_planes() this hook is called
|
||||
* after the &drm_plane_helper_funcs.atomc_check hook for planes, which
|
||||
* after the &drm_plane_helper_funcs.atomic_check hook for planes, which
|
||||
* allows drivers to assign shared resources requested by planes in this
|
||||
* callback here. For more complicated dependencies the driver can call
|
||||
* the provided check helpers multiple times until the computed state
|
||||
|
||||
@@ -34,6 +34,7 @@ struct drm_modeset_lock;
|
||||
* @contended: used internally for -EDEADLK handling
|
||||
* @locked: list of held locks
|
||||
* @trylock_only: trylock mode used in atomic contexts/panic notifiers
|
||||
* @interruptible: whether interruptible locking should be used.
|
||||
*
|
||||
* Each thread competing for a set of locks must use one acquire
|
||||
* ctx. And if any lock fxn returns -EDEADLK, it must backoff and
|
||||
@@ -59,6 +60,9 @@ struct drm_modeset_acquire_ctx {
|
||||
* Trylock mode, use only for panic handlers!
|
||||
*/
|
||||
bool trylock_only;
|
||||
|
||||
/* Perform interruptible waits on this context. */
|
||||
bool interruptible;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -82,12 +86,13 @@ struct drm_modeset_lock {
|
||||
struct list_head head;
|
||||
};
|
||||
|
||||
#define DRM_MODESET_ACQUIRE_INTERRUPTIBLE BIT(0)
|
||||
|
||||
void drm_modeset_acquire_init(struct drm_modeset_acquire_ctx *ctx,
|
||||
uint32_t flags);
|
||||
void drm_modeset_acquire_fini(struct drm_modeset_acquire_ctx *ctx);
|
||||
void drm_modeset_drop_locks(struct drm_modeset_acquire_ctx *ctx);
|
||||
void drm_modeset_backoff(struct drm_modeset_acquire_ctx *ctx);
|
||||
int drm_modeset_backoff_interruptible(struct drm_modeset_acquire_ctx *ctx);
|
||||
int drm_modeset_backoff(struct drm_modeset_acquire_ctx *ctx);
|
||||
|
||||
void drm_modeset_lock_init(struct drm_modeset_lock *lock);
|
||||
|
||||
@@ -111,8 +116,7 @@ static inline bool drm_modeset_is_locked(struct drm_modeset_lock *lock)
|
||||
|
||||
int drm_modeset_lock(struct drm_modeset_lock *lock,
|
||||
struct drm_modeset_acquire_ctx *ctx);
|
||||
int drm_modeset_lock_interruptible(struct drm_modeset_lock *lock,
|
||||
struct drm_modeset_acquire_ctx *ctx);
|
||||
int __must_check drm_modeset_lock_single_interruptible(struct drm_modeset_lock *lock);
|
||||
void drm_modeset_unlock(struct drm_modeset_lock *lock);
|
||||
|
||||
struct drm_device;
|
||||
|
||||
+12
-4
@@ -123,6 +123,14 @@ struct drm_plane_state {
|
||||
*/
|
||||
bool visible;
|
||||
|
||||
/**
|
||||
* @commit: Tracks the pending commit to prevent use-after-free conditions,
|
||||
* and for async plane updates.
|
||||
*
|
||||
* May be NULL.
|
||||
*/
|
||||
struct drm_crtc_commit *commit;
|
||||
|
||||
struct drm_atomic_state *state;
|
||||
};
|
||||
|
||||
@@ -531,10 +539,10 @@ struct drm_plane {
|
||||
* This is protected by @mutex. Note that nonblocking atomic commits
|
||||
* access the current plane state without taking locks. Either by going
|
||||
* through the &struct drm_atomic_state pointers, see
|
||||
* for_each_plane_in_state(), for_each_oldnew_plane_in_state(),
|
||||
* for_each_old_plane_in_state() and for_each_new_plane_in_state(). Or
|
||||
* through careful ordering of atomic commit operations as implemented
|
||||
* in the atomic helpers, see &struct drm_crtc_commit.
|
||||
* for_each_oldnew_plane_in_state(), for_each_old_plane_in_state() and
|
||||
* for_each_new_plane_in_state(). Or through careful ordering of atomic
|
||||
* commit operations as implemented in the atomic helpers, see
|
||||
* &struct drm_crtc_commit.
|
||||
*/
|
||||
struct drm_plane_state *state;
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright (c) 2017 Advanced Micro Devices, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
**************************************************************************/
|
||||
/*
|
||||
* Authors: Tom St Denis <tom.stdenis@amd.com>
|
||||
*/
|
||||
extern void ttm_trace_dma_map(struct device *dev, struct ttm_dma_tt *tt);
|
||||
extern void ttm_trace_dma_unmap(struct device *dev, struct ttm_dma_tt *tt);
|
||||
@@ -47,7 +47,7 @@ void ttm_page_alloc_fini(void);
|
||||
*
|
||||
* Add backing pages to all of @ttm
|
||||
*/
|
||||
extern int ttm_pool_populate(struct ttm_tt *ttm);
|
||||
int ttm_pool_populate(struct ttm_tt *ttm);
|
||||
|
||||
/**
|
||||
* ttm_pool_unpopulate:
|
||||
@@ -56,12 +56,12 @@ extern int ttm_pool_populate(struct ttm_tt *ttm);
|
||||
*
|
||||
* Free all pages of @ttm
|
||||
*/
|
||||
extern void ttm_pool_unpopulate(struct ttm_tt *ttm);
|
||||
void ttm_pool_unpopulate(struct ttm_tt *ttm);
|
||||
|
||||
/**
|
||||
* Output the state of pools to debugfs file
|
||||
*/
|
||||
extern int ttm_page_alloc_debugfs(struct seq_file *m, void *data);
|
||||
int ttm_page_alloc_debugfs(struct seq_file *m, void *data);
|
||||
|
||||
|
||||
#if defined(CONFIG_SWIOTLB) || defined(CONFIG_INTEL_IOMMU)
|
||||
@@ -78,10 +78,21 @@ void ttm_dma_page_alloc_fini(void);
|
||||
/**
|
||||
* Output the state of pools to debugfs file
|
||||
*/
|
||||
extern int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data);
|
||||
int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data);
|
||||
|
||||
extern int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev);
|
||||
extern void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev);
|
||||
int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev);
|
||||
void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev);
|
||||
|
||||
|
||||
/**
|
||||
* Populates and DMA maps pages to fullfil a ttm_dma_populate() request
|
||||
*/
|
||||
int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt *tt);
|
||||
|
||||
/**
|
||||
* Unpopulates and DMA unmaps pages as part of a
|
||||
* ttm_dma_unpopulate() request */
|
||||
void ttm_unmap_and_unpopulate_pages(struct device *dev, struct ttm_dma_tt *tt);
|
||||
|
||||
#else
|
||||
static inline int ttm_dma_page_alloc_init(struct ttm_mem_global *glob,
|
||||
@@ -105,6 +116,16 @@ static inline void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma,
|
||||
struct device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt *tt)
|
||||
{
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static inline void ttm_unmap_and_unpopulate_pages(struct device *dev, struct ttm_dma_tt *tt)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user