*参照元 [#d33f59d5]
#backlinks

*説明 [#c1df3af1]
-パス: [[linux-2.6.33/drivers/uio/uio.c]]

-FIXME: これは何?
--説明


**引数 [#veb35a33]
-struct file *filep
--
-struct vm_area_struct *vma
--

**返り値 [#ded9c0fa]
-
--

**参考 [#pa122d58]


*実装 [#b326cc58]
 static int uio_mmap(struct file *filep, struct vm_area_struct *vma)
 {
 	struct uio_listener *listener = filep->private_data;
 	struct uio_device *idev = listener->dev;
 	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;
 
 	mi = uio_find_mem_index(vma);
 	if (mi < 0)
 		return -EINVAL;
 
 	requested_pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
 	actual_pages = ((idev->info->mem[mi].addr & ~PAGE_MASK)
 			+ idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SHIFT;
 	if (requested_pages > actual_pages)
 		return -EINVAL;
 
 	if (idev->info->mmap) {
 		ret = idev->info->mmap(idev->info, vma);
 		return ret;
 	}
 
 	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;
 	}
 }


*コメント [#q1fbf337]



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS