1/*
2 * Copyright 2004-2010, Haiku. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		J��r��me Duval, jerome.duval@gmail.com
7 *		Michael Pfeiffer, laplace@users.sourceforge.net
8 */
9
10
11#include <scheduler.h>
12
13#include <syscalls.h>
14
15
16static struct {
17	uint32 what;
18	int32 priority;
19} sWhatPriorityArray[] = {
20	// highest priority first
21	{B_MIDI_PROCESSING, 0x78},
22	{B_AUDIO_RECORDING | B_AUDIO_PLAYBACK, 0x73},
23	{B_LIVE_AUDIO_MANIPULATION, 0x6e},
24	{B_VIDEO_RECORDING, 0x19},
25	{B_VIDEO_PLAYBACK, 0x14},
26	{B_USER_INPUT_HANDLING, 0x0f},
27	{B_LIVE_VIDEO_MANIPULATION, 0x0e},
28	{B_LIVE_3D_RENDERING, 0x0c},
29	{B_STATUS_RENDERING, 0xa},
30	{B_OFFLINE_PROCESSING, 0x06},
31	{B_NUMBER_CRUNCHING, 0x05},
32	{(uint32)-1, -1}
33};
34
35status_t __set_scheduler_mode(int32 mode);
36int32 __get_scheduler_mode(void);
37
38
39int32
40suggest_thread_priority(uint32 what, int32 period, bigtime_t jitter,
41	bigtime_t length)
42{
43	int i;
44	int32 priority = what == B_DEFAULT_MEDIA_PRIORITY ? 0x0a : 0;
45		// default priority
46
47	// TODO: this needs kernel support, and is a pretty simplistic solution
48
49	for (i = 0; sWhatPriorityArray[i].what != (uint32)-1; i ++) {
50		if ((what & sWhatPriorityArray[i].what) != 0) {
51			priority = sWhatPriorityArray[i].priority;
52			break;
53		}
54	}
55
56	return priority;
57}
58
59
60bigtime_t
61estimate_max_scheduling_latency(thread_id thread)
62{
63	return _kern_estimate_max_scheduling_latency(thread);
64}
65
66
67status_t
68__set_scheduler_mode(int32 mode)
69{
70	return _kern_set_scheduler_mode(mode);
71}
72
73
74int32
75__get_scheduler_mode(void)
76{
77	return _kern_get_scheduler_mode();
78}
79
80
81B_DEFINE_WEAK_ALIAS(__set_scheduler_mode, set_scheduler_mode);
82B_DEFINE_WEAK_ALIAS(__get_scheduler_mode, get_scheduler_mode);
83
84