-#else /* !CONFIG_EMBEDDED */
- switch (iop_param.iop_scope) {
- case IOPOL_SCOPE_PROCESS:
- policy = &p->p_iopol_disk;
- break;
- case IOPOL_SCOPE_THREAD:
- thread = current_thread();
- ut = get_bsdthread_info(thread);
- policy = &ut->uu_iopol_disk;
- break;
- default:
- error = EINVAL;
- goto out;
- }
-
- switch(uap->cmd) {
- case IOPOL_CMD_SET:
- switch (iop_param.iop_policy) {
- case IOPOL_DEFAULT:
- case IOPOL_NORMAL:
- case IOPOL_THROTTLE:
- case IOPOL_PASSIVE:
- proc_lock(p);
- *policy = iop_param.iop_policy;
- proc_unlock(p);
- break;
- default:
- error = EINVAL;
- goto out;
- }
- break;
- case IOPOL_CMD_GET:
- switch (*policy) {
- case IOPOL_DEFAULT:
- case IOPOL_NORMAL:
- case IOPOL_THROTTLE:
- case IOPOL_PASSIVE:
- iop_param.iop_policy = *policy;
- break;
- default: // in-kernel
- // this should never happen
- printf("%s: unknown I/O policy %d\n", __func__, *policy);
- // restore to default value
- *policy = IOPOL_DEFAULT;
- iop_param.iop_policy = *policy;
- }
-
- error = copyout((caddr_t)&iop_param, uap->arg, sizeof(iop_param));
- break;
- default:
- error = EINVAL; // unknown command
- break;
- }
-
-#endif /* !CONFIG_EMBEDDED */