285 lines
12 KiB
C
285 lines
12 KiB
C
/* config.h.in. */
|
|
#ifndef CONFIG_H
|
|
#define CONFIG_H
|
|
|
|
#define BINDIR "$BINDIR"
|
|
#define LIBDIR "$LIBDIR"
|
|
#define SHAREDIR "$SHAREDIR"
|
|
|
|
/* configuration file locations */
|
|
#define USER_CONFIG_FILE "$USER_CONFIG_FILE"
|
|
#define SYSTEM_CONFIG_FILE "$SYSTEM_CONFIG_FILE"
|
|
|
|
/* Define indicating availability of lrint() */
|
|
#define HAVE_LRINT $HAVE_LRINT
|
|
|
|
/* Define indicatin availability of lrintf() */
|
|
#define HAVE_LRINTF $HAVE_LRINTF
|
|
|
|
// serialization
|
|
#define SERIALIZE_USE_EXPAT $SERIALIZE_USE_EXPAT
|
|
|
|
#define CACHEDIR "$CACHEDIR"
|
|
|
|
// discovery
|
|
#define ENABLE_DISCOVERY_CACHE 1
|
|
|
|
// watchdog
|
|
#define WATCHDOG_DEFAULT_CHECK_INTERVAL_USECS (1000*1000*4)
|
|
#define WATCHDOG_DEFAULT_RUN_REALTIME 1
|
|
#define WATCHDOG_DEFAULT_PRIORITY 98
|
|
|
|
// threading
|
|
#define THREAD_MAX_RTPRIO 98
|
|
#define THREAD_MIN_RTPRIO 1
|
|
|
|
// time
|
|
|
|
// we should be using absolute clock_nanosleep
|
|
// but on my system it causes a problem on shutdown.
|
|
#define USE_ABSOLUTE_NANOSLEEP 1
|
|
|
|
// 1394 service constants
|
|
#define IEEE1394SERVICE_USE_CYCLETIMER_DLL 1
|
|
#define IEEE1394SERVICE_CYCLETIMER_DLL_UPDATE_INTERVAL_USEC 200000
|
|
#define IEEE1394SERVICE_CYCLETIMER_DLL_BANDWIDTH_HZ 0.5
|
|
#define IEEE1394SERVICE_MAX_FIREWIRE_PORTS 4
|
|
#define IEEE1394SERVICE_MIN_SPLIT_TIMEOUT_USECS 1000000
|
|
|
|
#define IEEE1394SERVICE_CYCLETIMER_HELPER_RUN_REALTIME 1
|
|
#define IEEE1394SERVICE_CYCLETIMER_HELPER_PRIO 1
|
|
|
|
// config rom read wait interval
|
|
#define IEEE1394SERVICE_CONFIGROM_READ_WAIT_USECS 1000
|
|
|
|
// FCP defines
|
|
#define IEEE1394SERVICE_FCP_MAX_TRIES 2
|
|
#define IEEE1394SERVICE_FCP_SLEEP_BETWEEN_FAILURES_USECS 1000
|
|
#define IEEE1394SERVICE_FCP_POLL_TIMEOUT_MSEC 200
|
|
#define IEEE1394SERVICE_FCP_RESPONSE_TIMEOUT_USEC 200000
|
|
|
|
// The current version of libiec61883 doesn't seem to calculate
|
|
// the bandwidth correctly. Defining this to non-zero skips
|
|
// bandwidth allocation when doing CMP connections.
|
|
#define IEEE1394SERVICE_SKIP_IEC61883_BANDWIDTH_ALLOCATION 1
|
|
|
|
#define MINIMUM_INTERRUPTS_PER_PERIOD 2U
|
|
|
|
// These are the result of a lot of trial and error
|
|
// due to weirdness in the kernel layer
|
|
#define MAX_XMIT_PACKET_SIZE (2048-16)
|
|
#define MIN_XMIT_PACKET_SIZE 72
|
|
#define MAX_XMIT_NB_BUFFERS 128
|
|
#define MAX_RECV_NB_BUFFERS 128
|
|
#define MIN_RECV_PACKET_SIZE 72
|
|
|
|
// the default ISO receive mode.
|
|
// 0 = auto, 1 = packet-per-buffer, 2 = bufferfill.
|
|
// 'auto' will automatically choose the mode that is expected
|
|
// to perform best for the given situation. For large periods
|
|
// this is 'bufferfill' mode, for small periods this is
|
|
// 'packet-per-buffer' mode. The 'BUFFERFILL_MODE_THRESHOLD'
|
|
// defines what a 'large period' is.
|
|
#define DEFAULT_ISO_RECEIVE_MODE 0
|
|
|
|
// the number of packets required to fill one period from which
|
|
// the bufferfill mode is to be used
|
|
#define BUFFERFILL_MODE_THRESHOLD 64
|
|
|
|
|
|
#define ISOHANDLER_FLUSH_BEFORE_ITERATE 0
|
|
|
|
#define ISOHANDLER_DEATH_DETECT_TIMEOUT_USECS 1000000LL
|
|
|
|
#define ISOHANDLER_CHECK_CTR_RECONSTRUCTION 1
|
|
|
|
#define ISOHANDLERMANAGER_MAX_ISO_HANDLERS_PER_PORT 16
|
|
#define ISOHANDLERMANAGER_MAX_STREAMS_PER_ISOTHREAD 16
|
|
|
|
// The best setup is if the receive handlers have lower priority
|
|
// than the client thread since that ensures that as soon as we
|
|
// received sufficient frames, the client thread runs.
|
|
// The transmit thread should have higher priority to ensure that
|
|
// all available data is flushed to the ISO kernel buffers as
|
|
// soon as possible
|
|
// At this moment, the jack backend uses base+5 to init ffado
|
|
// prio
|
|
#define ISOHANDLERMANAGER_ISO_PRIO_INCREASE 0
|
|
#define ISOHANDLERMANAGER_ISO_PRIO_INCREASE_RECV -1
|
|
#define ISOHANDLERMANAGER_ISO_PRIO_INCREASE_XMIT 1
|
|
|
|
// the timeout for ISO activity on any thread
|
|
// NOTE: don't make this 0
|
|
#define ISOHANDLERMANAGER_ISO_TASK_WAIT_TIMEOUT_USECS 1000000LL
|
|
|
|
// allows to add some processing margin. This shifts the time
|
|
// at which the buffer is transfer()'ed, making things somewhat
|
|
// more robust. It should be noted though that shifting the transfer
|
|
// time to a later time instant also causes the xmit buffer fill to be
|
|
// lower on average. This can be counteracted by increasing the
|
|
// STREAMPROCESSORMANAGER_XMIT_PREBUFFER_FRAMES option
|
|
#define STREAMPROCESSORMANAGER_SIGNAL_DELAY_TICKS (3072*0)
|
|
|
|
// the number of frames that we prebuffer in the 1394 ISO layer
|
|
// this adds directly to the roundtrip latency
|
|
#define STREAMPROCESSORMANAGER_XMIT_PREBUFFER_FRAMES 100
|
|
|
|
// causes the waitForPeriod() call to wait until sufficient
|
|
// data is present in the buffer such that a transfer() will
|
|
// succeed. Normally we wait for the period of time that theoretically
|
|
// would mean that his is true. However sometimes the kernel hasn't
|
|
// flushed everything to userspace (or the card hasn't IRQ'd).
|
|
// the side-effect of this is some jitter in the return timing
|
|
// whenever this occurs.
|
|
#define STREAMPROCESSORMANAGER_ALLOW_DELAYED_PERIOD_SIGNAL 1
|
|
|
|
// startup control
|
|
#define STREAMPROCESSORMANAGER_CYCLES_FOR_DRYRUN 40000
|
|
#define STREAMPROCESSORMANAGER_CYCLES_FOR_STARTUP 200
|
|
#define STREAMPROCESSORMANAGER_PRESTART_CYCLES_FOR_XMIT 20
|
|
#define STREAMPROCESSORMANAGER_PRESTART_CYCLES_FOR_RECV 0
|
|
#define STREAMPROCESSORMANAGER_SYNCSTART_TRIES 10
|
|
#define STREAMPROCESSORMANAGER_SYNC_WAIT_TIME_MSEC 200
|
|
#define STREAMPROCESSORMANAGER_NB_ALIGN_TRIES 40
|
|
#define STREAMPROCESSORMANAGER_ALIGN_AVERAGE_TIME_MSEC 400
|
|
|
|
#define STREAMPROCESSORMANAGER_DYNAMIC_SYNC_DELAY 0
|
|
|
|
// the default bandwidth of the stream processor timestamp DLL when synchronizing (should be fast)
|
|
#define STREAMPROCESSOR_DLL_FAST_BW_HZ 5.0
|
|
// the default bandwidth of the stream processor timestamp DLL when streaming
|
|
#define STREAMPROCESSOR_DLL_BW_HZ 0.1
|
|
|
|
// -- AMDTP options -- //
|
|
|
|
// in ticks
|
|
// as per AMDTP2.1: 354.17us + 125us, but FFADO measures from the
|
|
// packet transmission time, so subtract 125 us:
|
|
// 354.17us @ 24.576ticks/usec = 8704 ticks
|
|
#define AMDTP_TRANSMIT_TRANSFER_DELAY (8704U)
|
|
|
|
// the absolute minimum number of cycles we want to transmit
|
|
// a packet ahead of the presentation time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by AMDTP_TRANSMIT_TRANSFER_DELAY (in ticks), but in case we
|
|
// are too late for that, this constant defines how late we can
|
|
// be.
|
|
#define AMDTP_MIN_CYCLES_BEFORE_PRESENTATION 1
|
|
|
|
// the absolute maximum number of cycles we want to transmit
|
|
// a packet ahead of the ideal transmit time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by AMDTP_TRANSMIT_TRANSFER_DELAY (in ticks), but we can send
|
|
// packets early if we want to. (not completely according to spec)
|
|
// (for spec compliance you need to specify a value of 0)
|
|
#define AMDTP_MAX_CYCLES_TO_TRANSMIT_EARLY 1
|
|
|
|
// ensure that the AMDTP SP clips all float values to [-1.0..1.0]
|
|
#define AMDTP_CLIP_FLOATS 1
|
|
|
|
// Allow that devices request that the AMDTP transmit SP adds
|
|
// payload to the NO-DATA packets.
|
|
#define AMDTP_ALLOW_PAYLOAD_IN_NODATA_XMIT 1
|
|
|
|
// Default setting for the payload setting if
|
|
// AMDTP_ALLOW_PAYLOAD_IN_NODATA_XMIT is enabled. Devices can
|
|
// explicity override this
|
|
#define AMDTP_SEND_PAYLOAD_IN_NODATA_XMIT_BY_DEFAULT true
|
|
|
|
// -- MOTU options -- //
|
|
|
|
// the transfer delay is substracted from the ideal presentation
|
|
// time to obtain a corrected presentation time. This values is
|
|
// then used to stamp the packet and determine the transmission
|
|
// time instant.
|
|
#define MOTU_TRANSMIT_TRANSFER_DELAY (0U)
|
|
|
|
// the absolute minimum number of cycles we want to transmit
|
|
// a packet ahead of the presentation time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by MOTU_TRANSMIT_TRANSFER_DELAY (in ticks), but in case we
|
|
// are too late for that, this constant defines how late we can
|
|
// be.
|
|
#define MOTU_MIN_CYCLES_BEFORE_PRESENTATION 0
|
|
|
|
// the absolute maximum number of cycles we want to transmit
|
|
// a packet ahead of the ideal transmit time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by MOTU_TRANSMIT_TRANSFER_DELAY (in ticks), but we can send
|
|
// packets early if we want to.
|
|
#define MOTU_MAX_CYCLES_TO_TRANSMIT_EARLY 2
|
|
|
|
// ensure that the MOTU tx SP clips all float values to [-1.0..1.0]
|
|
#define MOTU_CLIP_FLOATS 1
|
|
|
|
// -- RME options -- //
|
|
|
|
// the transfer delay is substracted from the ideal presentation
|
|
// time to obtain a corrected presentation time. This value is
|
|
// then used to stamp the packet and determine the transmission
|
|
// time instant. This is in ticks, and has been determined
|
|
// experimentally to provide the most stability.
|
|
#define RME_TRANSMIT_TRANSFER_DELAY (3U*TICKS_PER_CYCLE)
|
|
|
|
// the absolute minimum number of cycles we want to transmit
|
|
// a packet ahead of the presentation time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by RME_TRANSMIT_TRANSFER_DELAY (in ticks), but in case we
|
|
// are too late for that, this constant defines how late we can
|
|
// be.
|
|
#define RME_MIN_CYCLES_BEFORE_PRESENTATION 1
|
|
|
|
// the absolute maximum number of cycles we want to transmit
|
|
// a packet ahead of the ideal transmit time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by RME_TRANSMIT_TRANSFER_DELAY (in ticks), but we can send
|
|
// packets early if we want to.
|
|
#define RME_MAX_CYCLES_TO_TRANSMIT_EARLY 5
|
|
|
|
// The transfer delay assumed for incoming packets from an RME.
|
|
// Normally this would be the same as the transmit transfer delay.
|
|
// This value is in ticks.
|
|
#define RME_RECEIVE_TRANSFER_DELAY RME_TRANSMIT_TRANSFER_DELAY
|
|
|
|
// ensure that the RME tx SP clips all float values to [-1.0..1.0]
|
|
#define RME_CLIP_FLOATS 1
|
|
|
|
// -- Digidesign options -- //
|
|
//
|
|
// Currently these are just verbatim copies of the values which
|
|
// seem to work for MOTU devices. Some tweaks may well be
|
|
// necessary once testing begins with real devices.
|
|
|
|
// the transfer delay is substracted from the ideal presentation
|
|
// time to obtain a corrected presentation time. This values is
|
|
// then used to stamp the packet and determine the transmission
|
|
// time instant.
|
|
#define DIGIDESIGN_TRANSMIT_TRANSFER_DELAY (0U)
|
|
|
|
// the absolute minimum number of cycles we want to transmit
|
|
// a packet ahead of the presentation time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by DIGIDESIGN_TRANSMIT_TRANSFER_DELAY (in ticks), but
|
|
// in case we are too late for that, this constant defines how
|
|
// late we can be.
|
|
#define DIGIDESIGN_MIN_CYCLES_BEFORE_PRESENTATION 0
|
|
|
|
// the absolute maximum number of cycles we want to transmit
|
|
// a packet ahead of the ideal transmit time. The nominal time
|
|
// the packet is transmitted ahead of the presentation time is
|
|
// given by DIGIDESIGN_TRANSMIT_TRANSFER_DELAY (in ticks), but
|
|
// we can send packets early if we want to.
|
|
#define DIGIDESIGN_MAX_CYCLES_TO_TRANSMIT_EARLY 2
|
|
|
|
// ensure that the DIGIDESIGN tx SP clips all float values to [-1.0..1.0]
|
|
#define DIGIDESIGN_CLIP_FLOATS 1
|
|
|
|
/// The unavoidable device specific hacks
|
|
|
|
// Use the information in the music plug instead of that in the
|
|
// cluster info block for the stream configuration. Should not
|
|
// be necessary
|
|
#define AVC_STREAMCONFIG_USE_MUSICPLUG 0
|
|
|
|
#endif // CONFIG_H
|