2  * Copyright (c) 2013 Apple Inc. All rights reserved. 
   4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 
   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. The rights granted to you under the License 
  10  * may not be used to create, or enable the creation or redistribution of, 
  11  * unlawful or unlicensed copies of an Apple operating system, or to 
  12  * circumvent, violate, or enable the circumvention or violation of, any 
  13  * terms of an Apple operating system software license agreement. 
  15  * Please obtain a copy of the License at 
  16  * http://www.opensource.apple.com/apsl/ and read it before using this file. 
  18  * The Original Code and all software distributed under the License are 
  19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  23  * Please see the License for the specific language governing rights and 
  24  * limitations under the License. 
  26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 
  29 #include "kern_internal.h" 
  30 #include <kern/debug.h> 
  33 pthread_qos_class_get_priority(int qos
) 
  35     /* Map the buckets we have in pthread_priority_t into a QoS tier. */ 
  37                 case THREAD_QOS_USER_INTERACTIVE
: return _pthread_priority_make_newest(QOS_CLASS_USER_INTERACTIVE
, 0, 0); 
  38                 case THREAD_QOS_USER_INITIATED
: return _pthread_priority_make_newest(QOS_CLASS_USER_INITIATED
, 0, 0); 
  39                 case THREAD_QOS_LEGACY
: return _pthread_priority_make_newest(QOS_CLASS_DEFAULT
, 0, 0); 
  40                 case THREAD_QOS_UTILITY
: return _pthread_priority_make_newest(QOS_CLASS_UTILITY
, 0, 0); 
  41                 case THREAD_QOS_BACKGROUND
: return _pthread_priority_make_newest(QOS_CLASS_BACKGROUND
, 0, 0); 
  42                 case THREAD_QOS_MAINTENANCE
: return _pthread_priority_make_newest(QOS_CLASS_MAINTENANCE
, 0, 0); 
  43                 default: return _pthread_priority_make_newest(QOS_CLASS_UNSPECIFIED
, 0, 0); 
  48 pthread_priority_get_qos_class(pthread_priority_t priority
) 
  50         /* Map the buckets we have in pthread_priority_t into a QoS tier. */ 
  51         switch (_pthread_priority_get_qos_newest(priority
)) { 
  52                 case QOS_CLASS_USER_INTERACTIVE
: return THREAD_QOS_USER_INTERACTIVE
; 
  53                 case QOS_CLASS_USER_INITIATED
: return THREAD_QOS_USER_INITIATED
; 
  54                 case QOS_CLASS_DEFAULT
: return THREAD_QOS_LEGACY
; 
  55                 case QOS_CLASS_UTILITY
: return THREAD_QOS_UTILITY
; 
  56                 case QOS_CLASS_BACKGROUND
: return THREAD_QOS_BACKGROUND
; 
  57                 case QOS_CLASS_MAINTENANCE
: return THREAD_QOS_MAINTENANCE
; 
  58                 default: return THREAD_QOS_UNSPECIFIED
; 
  63 pthread_priority_from_class_index(int index
) 
  67                 case 0: qos 
= QOS_CLASS_USER_INTERACTIVE
; break; 
  68                 case 1: qos 
= QOS_CLASS_USER_INITIATED
; break; 
  69                 case 2: qos 
= QOS_CLASS_DEFAULT
; break; 
  70                 case 3: qos 
= QOS_CLASS_UTILITY
; break; 
  71                 case 4: qos 
= QOS_CLASS_BACKGROUND
; break; 
  72                 case 5: qos 
= QOS_CLASS_MAINTENANCE
; break; 
  74                         /* Return the utility band if we don't understand the input. */ 
  75                         qos 
= QOS_CLASS_UTILITY
; 
  78         pthread_priority_t priority
; 
  79         priority 
= _pthread_priority_make_newest(qos
, 0, 0); 
  85 pthread_priority_get_class_index(pthread_priority_t priority
) 
  87         switch (_pthread_priority_get_qos_newest(priority
)) { 
  88                 case QOS_CLASS_USER_INTERACTIVE
: return 0; 
  89                 case QOS_CLASS_USER_INITIATED
: return 1; 
  90                 case QOS_CLASS_DEFAULT
: return 2; 
  91                 case QOS_CLASS_UTILITY
: return 3; 
  92                 case QOS_CLASS_BACKGROUND
: return 4; 
  93                 case QOS_CLASS_MAINTENANCE
: return 5; 
  95                         /* Return the utility band if we don't understand the input. */