1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 12 /**************************************************************************/ 13 /**************************************************************************/ 14 /** */ 15 /** POSIX wrapper for THREADX */ 16 /** */ 17 /** */ 18 /** */ 19 /**************************************************************************/ 20 /**************************************************************************/ 21 22 /* Include necessary system files. */ 23 24 #include "tx_api.h" /* Threadx API */ 25 #include "pthread.h" /* Posix API */ 26 #include "px_int.h" /* Posix helper functions */ 27 28 29 /**************************************************************************/ 30 /* */ 31 /* FUNCTION RELEASE */ 32 /* */ 33 /* pthread_attr_setschedparam PORTABLE C */ 34 /* 6.1.7 */ 35 /* AUTHOR */ 36 /* */ 37 /* William E. Lamie, Microsoft Corporation */ 38 /* */ 39 /* DESCRIPTION */ 40 /* */ 41 /* This function sets the scheduling parameters attribute for the */ 42 /* pthread attributes object. */ 43 /* */ 44 /* */ 45 /* INPUT */ 46 /* */ 47 /* attr Address of the thread attributes */ 48 /* sched_param Address of structure containing the */ 49 /* scheduling parameters to set */ 50 /* */ 51 /* */ 52 /* OUTPUT */ 53 /* */ 54 /* 0 if successful */ 55 /* Value in case of any error */ 56 /* */ 57 /* CALLS */ 58 /* */ 59 /* None */ 60 /* */ 61 /* CALLED BY */ 62 /* */ 63 /* Application Code */ 64 /* */ 65 /* RELEASE HISTORY */ 66 /* */ 67 /* DATE NAME DESCRIPTION */ 68 /* */ 69 /* 06-02-2021 William E. Lamie Initial Version 6.1.7 */ 70 /* */ 71 /**************************************************************************/ pthread_attr_setschedparam(pthread_attr_t * attr,struct sched_param * param)72INT pthread_attr_setschedparam(pthread_attr_t *attr,struct sched_param *param) 73 { 74 /* First check the attribute object is already destroyed? */ 75 if (attr->inuse == TX_FALSE) 76 { 77 posix_errno = EINVAL; 78 posix_set_pthread_errno(EINVAL); 79 return(EINVAL); 80 } 81 if (param->sched_priority == 0) 82 { 83 posix_errno = EINVAL; 84 posix_set_pthread_errno(EINVAL); 85 return(EINVAL); 86 } 87 if(param->sched_priority >= PX_LOWEST_PRIORITY && param->sched_priority <= PX_HIGHEST_PRIORITY ) 88 { 89 90 attr->sched_attr.sched_priority = param->sched_priority; 91 } 92 return(OK); 93 } 94 95