linux-2.6.33/uio_mmap()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#d33f59d5]
#backlinks
*説明 [#c1df3af1]
-パス: [[linux-2.6.33/drivers/uio/uio.c]]
-FIXME: これは何?
--説明
**引数 [#veb35a33]
-struct file *filep
--
--[[linux-2.6.33/file]]
-struct vm_area_struct *vma
--
--[[linux-2.6.33/vm_area_struct]]
**返り値 [#ded9c0fa]
-
--
**参考 [#pa122d58]
*実装 [#b326cc58]
static int uio_mmap(struct file *filep, struct vm_area_s...
{
struct uio_listener *listener = filep->private_data;
-指定されたファイルディスクリプタに記録させておいた、
UIO のリスナ情報(UIO のデバイス情報を含む)得る。
-参考: filep->private_data への UIO デバイス情報の設定は
uio_open() にて行っている。
--[[linux-2.6.33/uio_listener]]
--[[linux-2.6.33/uio_open()]]
struct uio_device *idev = listener->dev;
-UIO のデバイス情報を得る。
--[[linux-2.6.33/uio_device]]
int mi;
unsigned long requested_pages, actual_pages;
int ret = 0;
if (vma->vm_end < vma->vm_start)
return -EINVAL;
vma->vm_private_data = idev;
-メモリマップに、メモリマップと関連のある UIO のデバイス...
mi = uio_find_mem_index(vma);
if (mi < 0)
return -EINVAL;
-
--[[linux-2.6.33/uio_find_mem_index()]]
requested_pages = (vma->vm_end - vma->vm_start) >> PAGE...
actual_pages = ((idev->info->mem[mi].addr & ~PAGE_MASK)
+ idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SH...
if (requested_pages > actual_pages)
return -EINVAL;
if (idev->info->mmap) {
ret = idev->info->mmap(idev->info, vma);
return ret;
}
-ユーザが独自に mmap() を定義していれば、ユーザの mmap() ...
switch (idev->info->mem[mi].memtype) {
case UIO_MEM_PHYS:
return uio_mmap_physical(vma);
case UIO_MEM_LOGICAL:
case UIO_MEM_VIRTUAL:
return uio_mmap_logical(vma);
default:
return -EINVAL;
}
-
--[[linux-2.6.33/uio_mmap_physical()]]
-
--[[linux-2.6.33/uio_mmap_logical()]]
}
*コメント [#q1fbf337]
終了行:
*参照元 [#d33f59d5]
#backlinks
*説明 [#c1df3af1]
-パス: [[linux-2.6.33/drivers/uio/uio.c]]
-FIXME: これは何?
--説明
**引数 [#veb35a33]
-struct file *filep
--
--[[linux-2.6.33/file]]
-struct vm_area_struct *vma
--
--[[linux-2.6.33/vm_area_struct]]
**返り値 [#ded9c0fa]
-
--
**参考 [#pa122d58]
*実装 [#b326cc58]
static int uio_mmap(struct file *filep, struct vm_area_s...
{
struct uio_listener *listener = filep->private_data;
-指定されたファイルディスクリプタに記録させておいた、
UIO のリスナ情報(UIO のデバイス情報を含む)得る。
-参考: filep->private_data への UIO デバイス情報の設定は
uio_open() にて行っている。
--[[linux-2.6.33/uio_listener]]
--[[linux-2.6.33/uio_open()]]
struct uio_device *idev = listener->dev;
-UIO のデバイス情報を得る。
--[[linux-2.6.33/uio_device]]
int mi;
unsigned long requested_pages, actual_pages;
int ret = 0;
if (vma->vm_end < vma->vm_start)
return -EINVAL;
vma->vm_private_data = idev;
-メモリマップに、メモリマップと関連のある UIO のデバイス...
mi = uio_find_mem_index(vma);
if (mi < 0)
return -EINVAL;
-
--[[linux-2.6.33/uio_find_mem_index()]]
requested_pages = (vma->vm_end - vma->vm_start) >> PAGE...
actual_pages = ((idev->info->mem[mi].addr & ~PAGE_MASK)
+ idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SH...
if (requested_pages > actual_pages)
return -EINVAL;
if (idev->info->mmap) {
ret = idev->info->mmap(idev->info, vma);
return ret;
}
-ユーザが独自に mmap() を定義していれば、ユーザの mmap() ...
switch (idev->info->mem[mi].memtype) {
case UIO_MEM_PHYS:
return uio_mmap_physical(vma);
case UIO_MEM_LOGICAL:
case UIO_MEM_VIRTUAL:
return uio_mmap_logical(vma);
default:
return -EINVAL;
}
-
--[[linux-2.6.33/uio_mmap_physical()]]
-
--[[linux-2.6.33/uio_mmap_logical()]]
}
*コメント [#q1fbf337]
ページ名: