Changeset 1099

Show
Ignore:
Timestamp:
05/02/08 15:58:56 (13 years ago)
Author:
ppalmers
Message:

- transmit AMDTP packets earlier (3 to 4 packets instead of 6)

adheres to the spec.

- extra's in debug code
- switched off all extended debugging features by default

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/config.h.in

    r1083 r1099  
    4747#define DEBUG_MB_BUFFERS                  1024 
    4848 
     49// use an RT thread for reading out the messagebuffer. 
     50// can reduce the number of buffer xruns, but not 
     51// recommended 
     52#define DEBUG_MESSAGE_BUFFER_REALTIME        0 
     53#define DEBUG_MESSAGE_BUFFER_REALTIME_PRIO   1 
     54 
     55// When a write can't get the buffer lock, how many times 
     56// should it retry, and wait how long between retries? 
     57#define DEBUG_MESSAGE_BUFFER_COLLISION_WAIT_NTRIES      2 
     58#define DEBUG_MESSAGE_BUFFER_COLLISION_WAIT_NSEC    50000 
     59 
     60 
    4961// support a debug backlog 
    5062// note that this does not influence non-debug builds 
     
    5567// support backtrace debugging 
    5668// note that this does not influence non-debug builds 
    57 #define DEBUG_BACKTRACE_SUPPORT              1 
     69#define DEBUG_BACKTRACE_SUPPORT              0 
    5870// max length of backtrace 
    5971#define DEBUG_MAX_BACKTRACE_LENGTH           8 
     
    6274 
    6375// lock debugging 
    64 #define DEBUG_LOCK_COLLISION_TRACING         1 
     76#define DEBUG_LOCK_COLLISION_TRACING         0 
    6577 
    6678// make this zero to disable the most extreme 
    6779// debug logging in the critical sections 
    68 #define DEBUG_EXTREME_ENABLE       
     80#define DEBUG_EXTREME_ENABLE                 
    6981 
    7082// watchdog 
     
    8193// we should be using absolute clock_nanosleep 
    8294// but on my system it causes a problem on shutdown. 
    83 #define USE_ABSOLUTE_NANOSLEEP
     95#define USE_ABSOLUTE_NANOSLEEP              
    8496 
    8597// 1394 service constants  
    86 #define IEEE1394SERVICE_USE_CYCLETIMER_DLL 
    87 #define IEEE1394SERVICE_CYCLETIMER_DLL_UPDATE_INTERVAL_USEC 200000 
    88 #define IEEE1394SERVICE_MAX_FIREWIRE_PORTS 
    89  
    90 #define IEEE1394SERVICE_CYCLETIMER_HELPER_RUN_REALTIME   
    91 #define IEEE1394SERVICE_CYCLETIMER_HELPER_PRIO_INCREASE  -10 
     98#define IEEE1394SERVICE_USE_CYCLETIMER_DLL                         
     99#define IEEE1394SERVICE_CYCLETIMER_DLL_UPDATE_INTERVAL_USEC   200000 
     100#define IEEE1394SERVICE_MAX_FIREWIRE_PORTS                         
     101 
     102#define IEEE1394SERVICE_CYCLETIMER_HELPER_RUN_REALTIME       
     103#define IEEE1394SERVICE_CYCLETIMER_HELPER_PRIO_INCREASE    -10 
    92104 
    93105// The current version of libiec61883 doesn't seem to calculate 
    94106// the bandwidth correctly. Defining this to non-zero skips 
    95107// bandwidth allocation when doing CMP connections. 
    96 #define IEEE1394SERVICE_SKIP_IEC61883_BANDWIDTH_ALLOCATION
    97  
    98 #define MINIMUM_INTERRUPTS_PER_PERIOD       2U 
     108#define IEEE1394SERVICE_SKIP_IEC61883_BANDWIDTH_ALLOCATION  
     109 
     110#define MINIMUM_INTERRUPTS_PER_PERIOD                       2U 
    99111 
    100112// These are the result of a lot of trial and error 
    101113// due to weirdness in the kernel layer 
    102 #define MAX_XMIT_PACKET_SIZE                (2048-16) 
    103 #define MAX_XMIT_NB_BUFFERS                 200 
    104  
    105 #define ISOHANDLER_FLUSH_BEFORE_ITERATE     
    106  
    107 #define ISOHANDLER_DEATH_DETECT_TIMEOUT_USECS    1000000LL 
    108  
    109 #define ISOHANDLER_CHECK_CTR_RECONSTRUCTION
     114#define MAX_XMIT_PACKET_SIZE                         (2048-16) 
     115#define MAX_XMIT_NB_BUFFERS                                200 
     116 
     117#define ISOHANDLER_FLUSH_BEFORE_ITERATE                      
     118 
     119#define ISOHANDLER_DEATH_DETECT_TIMEOUT_USECS        1000000LL 
     120 
     121#define ISOHANDLER_CHECK_CTR_RECONSTRUCTION                  
    110122 
    111123#define ISOHANDLERMANAGER_MAX_ISO_HANDLERS_PER_PORT         16 
     
    171183// given by AMDTP_TRANSMIT_TRANSFER_DELAY (in ticks), but we can send 
    172184// packets early if we want to. (not completely according to spec) 
    173 // (for spec compliance you need to specify a value of 1 or 2
    174 #define AMDTP_MAX_CYCLES_TO_TRANSMIT_EARLY                  2 
     185// (for spec compliance you need to specify a value of 0
     186#define AMDTP_MAX_CYCLES_TO_TRANSMIT_EARLY                  0 
    175187 
    176188// ensure that the AMDTP SP clips all float values to [-1.0..1.0] 
     
    184196// AMDTP_ALLOW_PAYLOAD_IN_NODATA_XMIT is enabled. Devices can 
    185197// explicity override this 
    186 #define AMDTP_SEND_PAYLOAD_IN_NODATA_XMIT_BY_DEFAULT    true 
     198#define AMDTP_SEND_PAYLOAD_IN_NODATA_XMIT_BY_DEFAULT    true 
    187199 
    188200// -- MOTU options -- // 
     
    192204// then used to stamp the packet and determine the transmission 
    193205// time instant. 
    194 //#define MOTU_TRANSMIT_TRANSFER_DELAY    (11776U) 
    195 //#define MOTU_TRANSMIT_TRANSFER_DELAY    (3072U) 
    196206#define MOTU_TRANSMIT_TRANSFER_DELAY    (0U) 
    197207 
     
    209219// given by MOTU_TRANSMIT_TRANSFER_DELAY (in ticks), but we can send 
    210220// packets early if we want to. 
    211 //#define MOTU_MAX_CYCLES_TO_TRANSMIT_EARLY                  6 
    212221#define MOTU_MAX_CYCLES_TO_TRANSMIT_EARLY                  2 
    213222 
     
    220229// cluster info block for the stream configuration. Should not 
    221230// be necessary 
    222 #define AVC_STREAMCONFIG_USE_MUSICPLUG
     231#define AVC_STREAMCONFIG_USE_MUSICPLUG                    
    223232 
    224233#endif // CONFIG_H 
  • trunk/libffado/src/debugmodule/debugmodule.cpp

    r1074 r1099  
    332332 
    333333    mb_overruns = 0; 
    334     mb_initialized = 1; 
    335  
    336     if (pthread_create(&mb_writer_thread, NULL, &mb_thread_func, (void *)this) != 0) 
     334     
     335    #if DEBUG_MESSAGE_BUFFER_REALTIME 
     336    /* Get the client thread to run as an RT-FIFO 
     337        scheduled thread of appropriate priority. 
     338    */ 
     339    pthread_attr_t attributes; 
     340    struct sched_param rt_param; 
     341    pthread_attr_init(&attributes); 
     342    int res; 
     343    if ((res = pthread_attr_setinheritsched(&attributes, PTHREAD_EXPLICIT_SCHED))) { 
     344        fprintf(stderr, "Cannot request explicit scheduling for RT thread  %d %s\n", res, strerror(res)); 
     345        return -1; 
     346    } 
     347    if ((res = pthread_attr_setdetachstate(&attributes, PTHREAD_CREATE_JOINABLE))) { 
     348        fprintf(stderr, "Cannot request joinable thread creation for RT thread  %d %s\n", res, strerror(res)); 
     349        return -1; 
     350    } 
     351    if ((res = pthread_attr_setscope(&attributes, PTHREAD_SCOPE_SYSTEM))) { 
     352        fprintf(stderr, "Cannot set scheduling scope for RT thread %d %s\n", res, strerror(res)); 
     353        return -1; 
     354    } 
     355 
     356    if ((res = pthread_attr_setschedpolicy(&attributes, SCHED_FIFO))) { 
     357 
     358    //if ((res = pthread_attr_setschedpolicy(&attributes, SCHED_RR))) { 
     359        fprintf(stderr, "Cannot set FIFO scheduling class for RT thread  %d %s\n", res, strerror(res)); 
     360        return -1; 
     361    } 
     362 
     363    memset(&rt_param, 0, sizeof(rt_param)); 
     364    rt_param.sched_priority = DEBUG_MESSAGE_BUFFER_REALTIME_PRIO; 
     365 
     366    if ((res = pthread_attr_setschedparam(&attributes, &rt_param))) { 
     367        fprintf(stderr, "Cannot set scheduling priority for RT thread %d %s\n", res, strerror(res)); 
     368        return -1; 
     369    } 
     370 
     371    if ((res = pthread_create(&mb_writer_thread, &attributes, mb_thread_func, (void *)this))) { 
     372        fprintf(stderr, "Cannot set create thread %d %s\n", res, strerror(res)); 
     373        mb_initialized = 0; 
     374    } else { 
     375        mb_initialized = 1; 
     376    } 
     377    #else 
     378    if (pthread_create(&mb_writer_thread, NULL, &mb_thread_func, (void *)this) != 0) { 
    337379         mb_initialized = 0; 
     380    } else { 
     381        mb_initialized = 1; 
     382    } 
     383    #endif 
    338384#endif 
    339385 
     
    538584{ 
    539585    unsigned int ntries; 
    540     struct timespec wait = {0,50000}; 
     586    struct timespec wait = {0, DEBUG_MESSAGE_BUFFER_COLLISION_WAIT_NSEC}; 
    541587    // the backlog 
    542     ntries=1
     588    ntries=DEBUG_MESSAGE_BUFFER_COLLISION_WAIT_NTRIES
    543589    while (ntries) { // try a few times 
    544590        if (pthread_mutex_trylock(&bl_mb_write_lock) == 0) { 
     
    571617    } 
    572618 
    573     ntries=1
     619    ntries=6
    574620    while (ntries) { // try a few times 
    575621        if (pthread_mutex_trylock(&mb_write_lock) == 0) { 
  • trunk/libffado/src/libstreaming/StreamProcessorManager.cpp

    r1046 r1099  
    970970 
    971971    debugOutputExtreme( DEBUG_LEVEL_VERBOSE, 
    972                         "transfer at %llu ticks...\n", 
    973                         m_time_of_transfer); 
     972                        "transfer period %d at %llu ticks...\n", 
     973                        m_nbperiods, m_time_of_transfer); 
    974974 
    975975    // this is to notify the client of the delay that we introduced by waiting