do {
fwrc = rtas_call(token, 3, 1, NULL, param.token,
rtas_work_area_phys(work_area),
rtas_work_area_size(work_area));
} while (rtas_busy_delay(fwrc));
switch (fwrc) { case0:
ret = 0;
memcpy(buf, rtas_work_area_raw_buf(work_area), sizeof(*buf));
papr_sysparm_buf_clamp_length(buf); break; case -3: /* parameter not implemented */
ret = -EOPNOTSUPP; break; case -9002: /* this partition not authorized to retrieve this parameter */
ret = -EPERM; break; case -9999: /* "parameter error" e.g. the buffer is too small */
ret = -EINVAL; break; default:
pr_err("unexpected ibm,get-system-parameter result %d\n", fwrc);
fallthrough; case -1: /* Hardware/platform error */
ret = -EIO; break;
}
rtas_work_area_free(work_area);
return ret;
}
int papr_sysparm_set(papr_sysparm_t param, conststruct papr_sysparm_buf *buf)
{ const s32 token = rtas_function_token(RTAS_FN_IBM_SET_SYSTEM_PARAMETER); struct rtas_work_area *work_area;
s32 fwrc; int ret;
might_sleep();
if (WARN_ON(!buf)) return -EFAULT;
if (token == RTAS_UNKNOWN_SERVICE) return -ENOENT;
if (!papr_sysparm_buf_can_submit(buf)) return -EINVAL;
do {
fwrc = rtas_call(token, 2, 1, NULL, param.token,
rtas_work_area_phys(work_area));
} while (rtas_busy_delay(fwrc));
switch (fwrc) { case0:
ret = 0; break; case -3: /* parameter not supported */
ret = -EOPNOTSUPP; break; case -9002: /* this partition not authorized to modify this parameter */
ret = -EPERM; break; case -9999: /* "parameter error" e.g. invalid input data */
ret = -EINVAL; break; default:
pr_err("unexpected ibm,set-system-parameter result %d\n", fwrc);
fallthrough; case -1: /* Hardware/platform error */
ret = -EIO; break;
}
switch (ioctl) { case PAPR_SYSPARM_IOC_GET:
ret = papr_sysparm_ioctl_get(argp); break; case PAPR_SYSPARM_IOC_SET: if (filp->f_mode & FMODE_WRITE)
ret = papr_sysparm_ioctl_set(argp); else
ret = -EBADF; break; default:
ret = -ENOIOCTLCMD; break;
} 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.