root / trunk / data / kext-tools / getiopolicy_np.c

Revision 2, 2.2 kB (checked in by saurik, 11 months ago)

Initial commit.

Line 
1/*
2 * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#include <errno.h>
24#include <sys/resource.h>
25
26extern int __iopolicysys(int, struct _iopol_param_t *);
27
28int
29getiopolicy_np(int iotype, int scope)
30{
31        int policy, error;
32        struct _iopol_param_t iop_param;
33
34        if (iotype != IOPOL_TYPE_DISK ||
35                (scope != IOPOL_SCOPE_PROCESS && scope != IOPOL_SCOPE_THREAD)) {
36                errno = EINVAL;
37                policy = -1;
38                goto exit;
39        }
40
41        iop_param.iop_scope = scope;
42        iop_param.iop_iotype = iotype;
43        error = syscall(322, IOPOL_CMD_GET, &iop_param);
44        if (error != 0) {
45                errno = error;
46                policy = -1;
47                goto exit;
48        }
49
50        policy = iop_param.iop_policy;
51
52  exit:
53        return policy;
54}
55
56int
57setiopolicy_np(int iotype, int scope, int policy)
58{
59        int error;
60        struct _iopol_param_t iop_param;
61       
62        if (iotype != IOPOL_TYPE_DISK ||
63                (scope != IOPOL_SCOPE_PROCESS && scope != IOPOL_SCOPE_THREAD)) {
64                errno = EINVAL;
65                error = -1;
66                goto exit;
67        }
68
69        switch (policy) {
70        case IOPOL_DEFAULT:
71        case IOPOL_NORMAL:
72        case IOPOL_THROTTLE:
73        case IOPOL_PASSIVE:
74                break;
75        default:
76                errno = EINVAL;
77                error = -1;
78                goto exit;
79        }
80
81        iop_param.iop_scope = scope;
82        iop_param.iop_iotype = iotype;
83        iop_param.iop_policy = policy;
84        error = syscall(322, IOPOL_CMD_SET, &iop_param);
85        if (error != 0) {
86                errno = error;
87                error = -1;
88                goto exit;
89        }
90
91  exit:
92        return error;
93}
Note: See TracBrowser for help on using the browser.