// SPDX-License-Identifier: GPL-2.0-only /* * Architecture specific sysfs attributes in /sys/kernel * * Copyright (C) 2007, Intel Corp. * Huang Ying <ying.huang@intel.com> * Copyright (C) 2013, 2013 Red Hat, Inc. * Dave Young <dyoung@redhat.com>
*/
while (pa_data) {
data = memremap(pa_data, sizeof(*data), MEMREMAP_WB); if (!data) return -ENOMEM;
pa_next = data->next;
if (nr == i) { if (data->type == SETUP_INDIRECT) {
len = sizeof(*data) + data->len;
memunmap(data);
data = memremap(pa_data, len, MEMREMAP_WB); if (!data) return -ENOMEM;
ret = kobj_to_setup_data_nr(kobj, &nr); if (ret) return ret;
ret = get_setup_data_paddr(nr, &paddr); if (ret) return ret;
data = memremap(paddr, sizeof(*data), MEMREMAP_WB); if (!data) return -ENOMEM;
if (data->type == SETUP_INDIRECT) {
len = sizeof(*data) + data->len;
memunmap(data);
data = memremap(paddr, len, MEMREMAP_WB); if (!data) return -ENOMEM;
indirect = (struct setup_indirect *)data->data;
ret = sprintf(buf, "0x%x\n", indirect->type);
} else {
ret = sprintf(buf, "0x%x\n", data->type);
}
ret = kobj_to_setup_data_nr(kobj, &nr); if (ret) return ret;
ret = get_setup_data_paddr(nr, &paddr); if (ret) return ret;
data = memremap(paddr, sizeof(*data), MEMREMAP_WB); if (!data) return -ENOMEM;
if (data->type == SETUP_INDIRECT) {
len = sizeof(*data) + data->len;
memunmap(data);
data = memremap(paddr, len, MEMREMAP_WB); if (!data) return -ENOMEM;
indirect = (struct setup_indirect *)data->data;
if (indirect->type != SETUP_INDIRECT) {
paddr = indirect->addr;
len = indirect->len;
} else { /* * Even though this is technically undefined, return * the data as though it is a normal setup_data struct. * This will at least allow it to be inspected.
*/
paddr += sizeof(*data);
len = data->len;
}
} else {
paddr += sizeof(*data);
len = data->len;
}
if (off > len) {
ret = -EINVAL; goto out;
}
if (count > len - off)
count = len - off;
if (!count) goto out;
ret = count;
p = memremap(paddr, len, MEMREMAP_WB); if (!p) {
ret = -ENOMEM; goto out;
}
memcpy(buf, p + off, count);
memunmap(p);
out:
memunmap(data); return ret;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.