ksysfs.c (0cce284537fb42d9c28b9b31038ffc9b464555f5) | ksysfs.c (f7750a79568788473c5e8092ee58a52248f34329) |
---|---|
1/* 2 * Architecture specific sysfs attributes in /sys/kernel 3 * 4 * Copyright (C) 2007, Intel Corp. 5 * Huang Ying <ying.huang@intel.com> 6 * Copyright (C) 2013, 2013 Red Hat, Inc. 7 * Dave Young <dyoung@redhat.com> 8 * 9 * This file is released under the GPLv2 10 */ 11 12#include <linux/kobject.h> 13#include <linux/string.h> 14#include <linux/sysfs.h> 15#include <linux/init.h> 16#include <linux/stat.h> 17#include <linux/slab.h> 18#include <linux/mm.h> | 1/* 2 * Architecture specific sysfs attributes in /sys/kernel 3 * 4 * Copyright (C) 2007, Intel Corp. 5 * Huang Ying <ying.huang@intel.com> 6 * Copyright (C) 2013, 2013 Red Hat, Inc. 7 * Dave Young <dyoung@redhat.com> 8 * 9 * This file is released under the GPLv2 10 */ 11 12#include <linux/kobject.h> 13#include <linux/string.h> 14#include <linux/sysfs.h> 15#include <linux/init.h> 16#include <linux/stat.h> 17#include <linux/slab.h> 18#include <linux/mm.h> |
19#include <linux/io.h> |
|
19 | 20 |
20#include <asm/io.h> | |
21#include <asm/setup.h> 22 23static ssize_t version_show(struct kobject *kobj, 24 struct kobj_attribute *attr, char *buf) 25{ 26 return sprintf(buf, "0x%04x\n", boot_params.hdr.version); 27} 28 --- 45 unchanged lines hidden (view full) --- 74 struct setup_data *data; 75 u64 pa_data = boot_params.hdr.setup_data; 76 77 while (pa_data) { 78 if (nr == i) { 79 *paddr = pa_data; 80 return 0; 81 } | 21#include <asm/setup.h> 22 23static ssize_t version_show(struct kobject *kobj, 24 struct kobj_attribute *attr, char *buf) 25{ 26 return sprintf(buf, "0x%04x\n", boot_params.hdr.version); 27} 28 --- 45 unchanged lines hidden (view full) --- 74 struct setup_data *data; 75 u64 pa_data = boot_params.hdr.setup_data; 76 77 while (pa_data) { 78 if (nr == i) { 79 *paddr = pa_data; 80 return 0; 81 } |
82 data = ioremap_cache(pa_data, sizeof(*data)); | 82 data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); |
83 if (!data) 84 return -ENOMEM; 85 86 pa_data = data->next; | 83 if (!data) 84 return -ENOMEM; 85 86 pa_data = data->next; |
87 iounmap(data); | 87 memunmap(data); |
88 i++; 89 } 90 return -EINVAL; 91} 92 93static int __init get_setup_data_size(int nr, size_t *size) 94{ 95 int i = 0; 96 struct setup_data *data; 97 u64 pa_data = boot_params.hdr.setup_data; 98 99 while (pa_data) { | 88 i++; 89 } 90 return -EINVAL; 91} 92 93static int __init get_setup_data_size(int nr, size_t *size) 94{ 95 int i = 0; 96 struct setup_data *data; 97 u64 pa_data = boot_params.hdr.setup_data; 98 99 while (pa_data) { |
100 data = ioremap_cache(pa_data, sizeof(*data)); | 100 data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); |
101 if (!data) 102 return -ENOMEM; 103 if (nr == i) { 104 *size = data->len; | 101 if (!data) 102 return -ENOMEM; 103 if (nr == i) { 104 *size = data->len; |
105 iounmap(data); | 105 memunmap(data); |
106 return 0; 107 } 108 109 pa_data = data->next; | 106 return 0; 107 } 108 109 pa_data = data->next; |
110 iounmap(data); | 110 memunmap(data); |
111 i++; 112 } 113 return -EINVAL; 114} 115 116static ssize_t type_show(struct kobject *kobj, 117 struct kobj_attribute *attr, char *buf) 118{ 119 int nr, ret; 120 u64 paddr; 121 struct setup_data *data; 122 123 ret = kobj_to_setup_data_nr(kobj, &nr); 124 if (ret) 125 return ret; 126 127 ret = get_setup_data_paddr(nr, &paddr); 128 if (ret) 129 return ret; | 111 i++; 112 } 113 return -EINVAL; 114} 115 116static ssize_t type_show(struct kobject *kobj, 117 struct kobj_attribute *attr, char *buf) 118{ 119 int nr, ret; 120 u64 paddr; 121 struct setup_data *data; 122 123 ret = kobj_to_setup_data_nr(kobj, &nr); 124 if (ret) 125 return ret; 126 127 ret = get_setup_data_paddr(nr, &paddr); 128 if (ret) 129 return ret; |
130 data = ioremap_cache(paddr, sizeof(*data)); | 130 data = memremap(paddr, sizeof(*data), MEMREMAP_WB); |
131 if (!data) 132 return -ENOMEM; 133 134 ret = sprintf(buf, "0x%x\n", data->type); | 131 if (!data) 132 return -ENOMEM; 133 134 ret = sprintf(buf, "0x%x\n", data->type); |
135 iounmap(data); | 135 memunmap(data); |
136 return ret; 137} 138 139static ssize_t setup_data_data_read(struct file *fp, 140 struct kobject *kobj, 141 struct bin_attribute *bin_attr, 142 char *buf, 143 loff_t off, size_t count) --- 5 unchanged lines hidden (view full) --- 149 150 ret = kobj_to_setup_data_nr(kobj, &nr); 151 if (ret) 152 return ret; 153 154 ret = get_setup_data_paddr(nr, &paddr); 155 if (ret) 156 return ret; | 136 return ret; 137} 138 139static ssize_t setup_data_data_read(struct file *fp, 140 struct kobject *kobj, 141 struct bin_attribute *bin_attr, 142 char *buf, 143 loff_t off, size_t count) --- 5 unchanged lines hidden (view full) --- 149 150 ret = kobj_to_setup_data_nr(kobj, &nr); 151 if (ret) 152 return ret; 153 154 ret = get_setup_data_paddr(nr, &paddr); 155 if (ret) 156 return ret; |
157 data = ioremap_cache(paddr, sizeof(*data)); | 157 data = memremap(paddr, sizeof(*data), MEMREMAP_WB); |
158 if (!data) 159 return -ENOMEM; 160 161 if (off > data->len) { 162 ret = -EINVAL; 163 goto out; 164 } 165 166 if (count > data->len - off) 167 count = data->len - off; 168 169 if (!count) 170 goto out; 171 172 ret = count; | 158 if (!data) 159 return -ENOMEM; 160 161 if (off > data->len) { 162 ret = -EINVAL; 163 goto out; 164 } 165 166 if (count > data->len - off) 167 count = data->len - off; 168 169 if (!count) 170 goto out; 171 172 ret = count; |
173 p = ioremap_cache(paddr + sizeof(*data), data->len); | 173 p = memremap(paddr + sizeof(*data), data->len, MEMREMAP_WB); |
174 if (!p) { 175 ret = -ENOMEM; 176 goto out; 177 } 178 memcpy(buf, p + off, count); | 174 if (!p) { 175 ret = -ENOMEM; 176 goto out; 177 } 178 memcpy(buf, p + off, count); |
179 iounmap(p); | 179 memunmap(p); |
180out: | 180out: |
181 iounmap(data); | 181 memunmap(data); |
182 return ret; 183} 184 185static struct kobj_attribute type_attr = __ATTR_RO(type); 186 187static struct bin_attribute data_attr __ro_after_init = { 188 .attr = { 189 .name = "data", --- 55 unchanged lines hidden (view full) --- 245static int __init get_setup_data_total_num(u64 pa_data, int *nr) 246{ 247 int ret = 0; 248 struct setup_data *data; 249 250 *nr = 0; 251 while (pa_data) { 252 *nr += 1; | 182 return ret; 183} 184 185static struct kobj_attribute type_attr = __ATTR_RO(type); 186 187static struct bin_attribute data_attr __ro_after_init = { 188 .attr = { 189 .name = "data", --- 55 unchanged lines hidden (view full) --- 245static int __init get_setup_data_total_num(u64 pa_data, int *nr) 246{ 247 int ret = 0; 248 struct setup_data *data; 249 250 *nr = 0; 251 while (pa_data) { 252 *nr += 1; |
253 data = ioremap_cache(pa_data, sizeof(*data)); | 253 data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); |
254 if (!data) { 255 ret = -ENOMEM; 256 goto out; 257 } 258 pa_data = data->next; | 254 if (!data) { 255 ret = -ENOMEM; 256 goto out; 257 } 258 pa_data = data->next; |
259 iounmap(data); | 259 memunmap(data); |
260 } 261 262out: 263 return ret; 264} 265 266static int __init create_setup_data_nodes(struct kobject *parent) 267{ --- 73 unchanged lines hidden --- | 260 } 261 262out: 263 return ret; 264} 265 266static int __init create_setup_data_nodes(struct kobject *parent) 267{ --- 73 unchanged lines hidden --- |