root/trunk/libffado/config.h.in

Revision 1005, 6.7 kB (checked in by ppalmers, 13 years ago)

Improve thread synchronisation. Switch back to separate threads for transmit and
receive since it is not possible to statically schedule things properly. One
of the threads (i.e. the client thread) is out of our control, hence it's
execution can't be controlled. Using separate threads and correct priorities
will shift this problem to the OS. Note that the priority of the packet
receive thread should be lower than the client thread (such that the client
thread is woken ASAP), and the priority of the transmit thread should be
higher than the client thread (such that packets are queued ASAP).
Extra benefit: multi-cores are used.

Some other startup improvements.

Line 
1 /* config.h.in. */
2 #ifndef CONFIG_H
3 #define CONFIG_H
4
5 /* Name of package */
6 #define PACKAGE $PACKAGE
7
8 /* Define to the address where bug reports for this package should be sent. */
9 #define PACKAGE_BUGREPORT "<ffado-devel@lists.sf.net>"
10
11 /* Define to the full name of this package. */
12 #define PACKAGE_NAME "$PACKAGE"
13
14 /* Define to the full name and version of this package. */
15 #define PACKAGE_STRING "$PACKAGE $VERSION-$REVISION"
16
17 /* Define to the one symbol short name of this package. */
18 #define PACKAGE_TARNAME "$PACKAGE"
19
20 /* Define to the version of this package. */
21 #define PACKAGE_VERSION "$VERSION-$REVISION"
22
23 /* Define to the version of the cace. */
24 #define CACHE_VERSION "$VERSION-$REVISION"
25
26 /* Define to the api version */
27 #define FFADO_API_VERSION $FFADO_API_VERSION
28
29 #define CACHEDIR "~/.ffado"
30
31 #define BINDIR "$BINDIR"
32 #define LIBDIR "$LIBDIR"
33 #define SHAREDIR "$SHAREDIR"
34
35 /* Define indicating availability of lrint() */
36 #define HAVE_LRINT $HAVE_LRINT
37
38 /* Define indicatin availability of lrintf() */
39 #define HAVE_LRINTF $HAVE_LRINTF
40
41 #define DEBUG_IMPLEMENT_BACKLOG     0
42
43 // make this zero to disable the most extreme
44 // debug logging in the critical sections
45 #define DEBUG_EXTREME_ENABLE        0
46
47 // watchdog
48 #define WATCHDOG_DEFAULT_CHECK_INTERVAL_USECS   (1000*1000*4)
49 #define WATCHDOG_DEFAULT_RUN_REALTIME           1
50 #define WATCHDOG_DEFAULT_PRIORITY               98
51
52 // 1394 service constants
53 #define IEEE1394SERVICE_USE_CYCLETIMER_DLL  1
54 #define IEEE1394SERVICE_CYCLETIMER_DLL_UPDATE_INTERVAL_USEC 200000
55 #define IEEE1394SERVICE_MAX_FIREWIRE_PORTS  4
56
57 #define IEEE1394SERVICE_CYCLETIMER_HELPER_RUN_REALTIME    1
58 #define IEEE1394SERVICE_CYCLETIMER_HELPER_PRIO_INCREASE  -10
59
60 // The current version of libiec61883 doesn't seem to calculate
61 // the bandwidth correctly. Defining this to non-zero skips
62 // bandwidth allocation when doing CMP connections.
63 #define IEEE1394SERVICE_SKIP_IEC61883_BANDWIDTH_ALLOCATION 1
64
65 #define THREAD_MAX_RTPRIO                   98
66 #define THREAD_MIN_RTPRIO                   1
67
68 #define MINIMUM_INTERRUPTS_PER_PERIOD       4U
69
70 // These are the result of a lot of trial and error
71 // due to weirdness in the kernel layer
72 #define MAX_XMIT_PACKET_SIZE                (2048-16)
73 #define MAX_XMIT_NB_BUFFERS                 200
74
75 #define ISOHANDLER_FLUSH_BEFORE_ITERATE     0
76
77 #define ISOHANDLER_DEATH_DETECT_TIMEOUT_USECS    1000000LL
78
79 #define ISOHANDLERMANAGER_MAX_ISO_HANDLERS_PER_PORT         16
80 #define ISOHANDLERMANAGER_MAX_STREAMS_PER_ISOTHREAD         16
81
82 // The best setup is if the receive handlers have lower priority
83 // than the client thread since that ensures that as soon as we
84 // received sufficient frames, the client thread runs.
85 // The transmit thread should have higher priority to ensure that
86 // all available data is flushed to the ISO kernel buffers as
87 // soon as possible
88 // At this moment, the jack backend uses base+5 to init ffado
89 // prio
90 #define ISOHANDLERMANAGER_ISO_PRIO_INCREASE                  0
91 #define ISOHANDLERMANAGER_ISO_PRIO_INCREASE_RECV            -6
92 #define ISOHANDLERMANAGER_ISO_PRIO_INCREASE_XMIT             1
93
94 // the timeout for ISO activity on any thread
95 // NOTE: don't make this 0
96 #define ISOHANDLERMANAGER_ISO_TASK_WAIT_TIMEOUT_USECS        1000000LL
97
98 // allows to add some processing margin. This shifts the time
99 // at which the buffer is transfer()'ed, making things somewhat
100 // more robust. It should be noted though that shifting the transfer
101 // time to a later time instant also causes the xmit buffer fill to be
102 // lower on average.
103 #define STREAMPROCESSORMANAGER_SIGNAL_DELAY_TICKS           (3072*6)
104
105 // startup control
106 #define STREAMPROCESSORMANAGER_CYCLES_FOR_DRYRUN            40000
107 #define STREAMPROCESSORMANAGER_CYCLES_FOR_STARTUP           200
108 #define STREAMPROCESSORMANAGER_PRESTART_CYCLES_FOR_XMIT     20
109 #define STREAMPROCESSORMANAGER_PRESTART_CYCLES_FOR_RECV     0
110 #define STREAMPROCESSORMANAGER_SYNCSTART_TRIES              10
111 #define STREAMPROCESSORMANAGER_SYNC_WAIT_TIME_MSEC          200
112 #define STREAMPROCESSORMANAGER_ALIGN_AVERAGE_TIME_MSEC      400
113 #define STREAMPROCESSORMANAGER_NB_ALIGN_TRIES               40
114
115 #define STREAMPROCESSORMANAGER_DYNAMIC_SYNC_DELAY           0
116
117 // FIXME: note that it will probably be better to use a DLL bandwidth that is
118 //        dependant on the sample rate
119 #define TIMESTAMPEDBUFFER_DLL_BANDWIDTH                     (0.01)
120
121 // -- AMDTP options -- //
122
123 // in ticks
124 // as per AMDTP2.1:
125 // 354.17us + 125us @ 24.576ticks/usec = 11776.08192 ticks
126 #define AMDTP_TRANSMIT_TRANSFER_DELAY   (11776U)
127
128 // the absolute minimum number of cycles we want to transmit
129 // a packet ahead of the presentation time. The nominal time
130 // the packet is transmitted ahead of the presentation time is
131 // given by AMDTP_TRANSMIT_TRANSFER_DELAY (in ticks), but in case we
132 // are too late for that, this constant defines how late we can
133 // be.
134 #define AMDTP_MIN_CYCLES_BEFORE_PRESENTATION                1
135
136 // the absolute maximum number of cycles we want to transmit
137 // a packet ahead of the ideal transmit time. The nominal time
138 // the packet is transmitted ahead of the presentation time is
139 // given by AMDTP_TRANSMIT_TRANSFER_DELAY (in ticks), but we can send
140 // packets early if we want to. (not completely according to spec)
141 // (for spec compliance you need to specify a value of 1 or 2)
142 #define AMDTP_MAX_CYCLES_TO_TRANSMIT_EARLY                  2
143
144 // ensure that the AMDTP SP clips all float values to [-1.0..1.0]
145 #define AMDTP_CLIP_FLOATS                                   1
146
147 // -- MOTU options -- //
148
149 // the transfer delay is substracted from the ideal presentation
150 // time to obtain a corrected presentation time. This values is
151 // then used to stamp the packet and determine the transmission
152 // time instant.
153 //#define MOTU_TRANSMIT_TRANSFER_DELAY    (11776U)
154 //#define MOTU_TRANSMIT_TRANSFER_DELAY    (3072U)
155 #define MOTU_TRANSMIT_TRANSFER_DELAY    (0U)
156
157 // the absolute minimum number of cycles we want to transmit
158 // a packet ahead of the presentation time. The nominal time
159 // the packet is transmitted ahead of the presentation time is
160 // given by MOTU_TRANSMIT_TRANSFER_DELAY (in ticks), but in case we
161 // are too late for that, this constant defines how late we can
162 // be.
163 #define MOTU_MIN_CYCLES_BEFORE_PRESENTATION                0
164
165 // the absolute maximum number of cycles we want to transmit
166 // a packet ahead of the ideal transmit time. The nominal time
167 // the packet is transmitted ahead of the presentation time is
168 // given by MOTU_TRANSMIT_TRANSFER_DELAY (in ticks), but we can send
169 // packets early if we want to.
170 //#define MOTU_MAX_CYCLES_TO_TRANSMIT_EARLY                  6
171 #define MOTU_MAX_CYCLES_TO_TRANSMIT_EARLY                  2
172
173 // ensure that the MOTU tx SP clips all float values to [-1.0..1.0]
174 #define MOTU_CLIP_FLOATS                                   1
175
176 #endif // CONFIG_H
Note: See TracBrowser for help on using the browser.