Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
4fce628f
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
4fce628f
编写于
1月 07, 2014
作者:
V
Vinod Koul
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/defer_probe' into for-linus
上级
1080411c
0ad7c000
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
48 addition
and
10 deletion
+48
-10
drivers/dma/dmaengine.c
drivers/dma/dmaengine.c
+31
-4
drivers/dma/of-dma.c
drivers/dma/of-dma.c
+9
-6
include/linux/dmaengine.h
include/linux/dmaengine.h
+8
-0
未找到文件。
drivers/dma/dmaengine.c
浏览文件 @
4fce628f
...
...
@@ -540,6 +540,8 @@ EXPORT_SYMBOL_GPL(dma_get_slave_channel);
* @mask: capabilities that the channel must satisfy
* @fn: optional callback to disposition available channels
* @fn_param: opaque parameter to pass to dma_filter_fn
*
* Returns pointer to appropriate DMA channel on success or NULL.
*/
struct
dma_chan
*
__dma_request_channel
(
const
dma_cap_mask_t
*
mask
,
dma_filter_fn
fn
,
void
*
fn_param
)
...
...
@@ -591,18 +593,43 @@ EXPORT_SYMBOL_GPL(__dma_request_channel);
* dma_request_slave_channel - try to allocate an exclusive slave channel
* @dev: pointer to client device structure
* @name: slave channel name
*
* Returns pointer to appropriate DMA channel on success or an error pointer.
*/
struct
dma_chan
*
dma_request_slave_channel
(
struct
device
*
dev
,
const
char
*
name
)
struct
dma_chan
*
dma_request_slave_channel_reason
(
struct
device
*
dev
,
const
char
*
name
)
{
struct
dma_chan
*
chan
;
/* If device-tree is present get slave info from here */
if
(
dev
->
of_node
)
return
of_dma_request_slave_channel
(
dev
->
of_node
,
name
);
/* If device was enumerated by ACPI get slave info from here */
if
(
ACPI_HANDLE
(
dev
))
return
acpi_dma_request_slave_chan_by_name
(
dev
,
name
);
if
(
ACPI_HANDLE
(
dev
))
{
chan
=
acpi_dma_request_slave_chan_by_name
(
dev
,
name
);
if
(
chan
)
return
chan
;
}
return
NULL
;
return
ERR_PTR
(
-
ENODEV
);
}
EXPORT_SYMBOL_GPL
(
dma_request_slave_channel_reason
);
/**
* dma_request_slave_channel - try to allocate an exclusive slave channel
* @dev: pointer to client device structure
* @name: slave channel name
*
* Returns pointer to appropriate DMA channel on success or NULL.
*/
struct
dma_chan
*
dma_request_slave_channel
(
struct
device
*
dev
,
const
char
*
name
)
{
struct
dma_chan
*
ch
=
dma_request_slave_channel_reason
(
dev
,
name
);
if
(
IS_ERR
(
ch
))
return
NULL
;
return
ch
;
}
EXPORT_SYMBOL_GPL
(
dma_request_slave_channel
);
...
...
drivers/dma/of-dma.c
浏览文件 @
4fce628f
...
...
@@ -143,7 +143,7 @@ static int of_dma_match_channel(struct device_node *np, const char *name,
* @np: device node to get DMA request from
* @name: name of desired channel
*
* Returns pointer to appropriate
dma channel on success or NULL on erro
r.
* Returns pointer to appropriate
DMA channel on success or an error pointe
r.
*/
struct
dma_chan
*
of_dma_request_slave_channel
(
struct
device_node
*
np
,
const
char
*
name
)
...
...
@@ -152,17 +152,18 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
struct
of_dma
*
ofdma
;
struct
dma_chan
*
chan
;
int
count
,
i
;
int
ret_no_channel
=
-
ENODEV
;
if
(
!
np
||
!
name
)
{
pr_err
(
"%s: not enough information provided
\n
"
,
__func__
);
return
NULL
;
return
ERR_PTR
(
-
ENODEV
)
;
}
count
=
of_property_count_strings
(
np
,
"dma-names"
);
if
(
count
<
0
)
{
pr_err
(
"%s: dma-names property of node '%s' missing or empty
\n
"
,
__func__
,
np
->
full_name
);
return
NULL
;
return
ERR_PTR
(
-
ENODEV
)
;
}
for
(
i
=
0
;
i
<
count
;
i
++
)
{
...
...
@@ -172,10 +173,12 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
mutex_lock
(
&
of_dma_lock
);
ofdma
=
of_dma_find_controller
(
&
dma_spec
);
if
(
ofdma
)
if
(
ofdma
)
{
chan
=
ofdma
->
of_dma_xlate
(
&
dma_spec
,
ofdma
);
else
}
else
{
ret_no_channel
=
-
EPROBE_DEFER
;
chan
=
NULL
;
}
mutex_unlock
(
&
of_dma_lock
);
...
...
@@ -185,7 +188,7 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,
return
chan
;
}
return
NULL
;
return
ERR_PTR
(
ret_no_channel
)
;
}
/**
...
...
include/linux/dmaengine.h
浏览文件 @
4fce628f
...
...
@@ -22,6 +22,7 @@
#define LINUX_DMAENGINE_H
#include <linux/device.h>
#include <linux/err.h>
#include <linux/uio.h>
#include <linux/bug.h>
#include <linux/scatterlist.h>
...
...
@@ -1039,6 +1040,8 @@ enum dma_status dma_wait_for_async_tx(struct dma_async_tx_descriptor *tx);
void
dma_issue_pending_all
(
void
);
struct
dma_chan
*
__dma_request_channel
(
const
dma_cap_mask_t
*
mask
,
dma_filter_fn
fn
,
void
*
fn_param
);
struct
dma_chan
*
dma_request_slave_channel_reason
(
struct
device
*
dev
,
const
char
*
name
);
struct
dma_chan
*
dma_request_slave_channel
(
struct
device
*
dev
,
const
char
*
name
);
void
dma_release_channel
(
struct
dma_chan
*
chan
);
#else
...
...
@@ -1062,6 +1065,11 @@ static inline struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
{
return
NULL
;
}
static
inline
struct
dma_chan
*
dma_request_slave_channel_reason
(
struct
device
*
dev
,
const
char
*
name
)
{
return
ERR_PTR
(
-
ENODEV
);
}
static
inline
struct
dma_chan
*
dma_request_slave_channel
(
struct
device
*
dev
,
const
char
*
name
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录