Blame view
arch/powerpc/kernel/proc_ppc64.c
3.1 KB
1da177e4c Linux-2.6.12-rc2 |
1 |
/* |
1da177e4c Linux-2.6.12-rc2 |
2 |
* Copyright (C) 2001 Mike Corrigan & Dave Engebretsen IBM Corporation |
d3d2176a0 [PATCH] powerpc: ... |
3 |
* |
1da177e4c Linux-2.6.12-rc2 |
4 5 6 7 |
* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. |
d3d2176a0 [PATCH] powerpc: ... |
8 |
* |
1da177e4c Linux-2.6.12-rc2 |
9 10 11 12 |
* This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. |
d3d2176a0 [PATCH] powerpc: ... |
13 |
* |
1da177e4c Linux-2.6.12-rc2 |
14 15 16 17 |
* You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ |
1da177e4c Linux-2.6.12-rc2 |
18 19 20 21 22 |
#include <linux/init.h> #include <linux/mm.h> #include <linux/proc_fs.h> #include <linux/slab.h> #include <linux/kernel.h> |
e8222502e [PATCH] powerpc: ... |
23 |
#include <asm/machdep.h> |
a7f290dad [PATCH] powerpc: ... |
24 |
#include <asm/vdso_datapage.h> |
1da177e4c Linux-2.6.12-rc2 |
25 26 27 28 29 30 31 32 |
#include <asm/rtas.h> #include <asm/uaccess.h> #include <asm/prom.h> static loff_t page_map_seek( struct file *file, loff_t off, int whence); static ssize_t page_map_read( struct file *file, char __user *buf, size_t nbytes, loff_t *ppos); static int page_map_mmap( struct file *file, struct vm_area_struct *vma ); |
5dfe4c964 [PATCH] mark stru... |
33 |
static const struct file_operations page_map_fops = { |
1da177e4c Linux-2.6.12-rc2 |
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
.llseek = page_map_seek, .read = page_map_read, .mmap = page_map_mmap }; /* * Create the ppc64 and ppc64/rtas directories early. This allows us to * assume that they have been previously created in drivers. */ static int __init proc_ppc64_create(void) { struct proc_dir_entry *root; root = proc_mkdir("ppc64", NULL); if (!root) return 1; |
9dabbfbab [PATCH] powerpc: ... |
50 |
if (!of_find_node_by_path("/rtas")) |
1da177e4c Linux-2.6.12-rc2 |
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
return 0; if (!proc_mkdir("rtas", root)) return 1; if (!proc_symlink("rtas", NULL, "ppc64/rtas")) return 1; return 0; } core_initcall(proc_ppc64_create); static int __init proc_ppc64_init(void) { struct proc_dir_entry *pde; pde = create_proc_entry("ppc64/systemcfg", S_IFREG|S_IRUGO, NULL); if (!pde) return 1; |
a7f290dad [PATCH] powerpc: ... |
70 |
pde->data = vdso_data; |
1da177e4c Linux-2.6.12-rc2 |
71 72 73 74 75 76 77 78 79 80 |
pde->size = PAGE_SIZE; pde->proc_fops = &page_map_fops; return 0; } __initcall(proc_ppc64_init); static loff_t page_map_seek( struct file *file, loff_t off, int whence) { loff_t new; |
b4d1ab58c [PATCH] struct pa... |
81 |
struct proc_dir_entry *dp = PDE(file->f_path.dentry->d_inode); |
1da177e4c Linux-2.6.12-rc2 |
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
switch(whence) { case 0: new = off; break; case 1: new = file->f_pos + off; break; case 2: new = dp->size + off; break; default: return -EINVAL; } if ( new < 0 || new > dp->size ) return -EINVAL; return (file->f_pos = new); } static ssize_t page_map_read( struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) { |
b4d1ab58c [PATCH] struct pa... |
104 |
struct proc_dir_entry *dp = PDE(file->f_path.dentry->d_inode); |
1da177e4c Linux-2.6.12-rc2 |
105 106 107 108 109 |
return simple_read_from_buffer(buf, nbytes, ppos, dp->data, dp->size); } static int page_map_mmap( struct file *file, struct vm_area_struct *vma ) { |
b4d1ab58c [PATCH] struct pa... |
110 |
struct proc_dir_entry *dp = PDE(file->f_path.dentry->d_inode); |
1da177e4c Linux-2.6.12-rc2 |
111 |
|
1da177e4c Linux-2.6.12-rc2 |
112 113 114 115 116 117 118 |
if ((vma->vm_end - vma->vm_start) > dp->size) return -EINVAL; remap_pfn_range(vma, vma->vm_start, __pa(dp->data) >> PAGE_SHIFT, dp->size, vma->vm_page_prot); return 0; } |