Changeset 1411

Show
Ignore:
Timestamp:
11/02/08 02:34:48 (12 years ago)
Author:
ppalmers
Message:

transaction retry is now done at the 1394 service level

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/libffado-2.0/src/libavc/general/avc_generic.cpp

    r1371 r1411  
    211211    } 
    212212 
    213     int ntries = 10; 
    214213    bool result = false; 
    215     while(ntries--) { 
    216         unsigned int resp_len; 
    217         quadlet_t* resp = m_p1394Service->transactionBlock( m_nodeId, 
    218                                                             (quadlet_t*)m_fcpFrame, 
    219                                                             ( fcpFrameSize+3 ) / 4, 
    220                                                             &resp_len ); 
    221         if ( resp ) { 
    222             resp_len *= 4; 
    223             unsigned char* buf = ( unsigned char* ) resp; 
    224      
    225             m_eResponse = ( EResponse )( *buf ); 
    226             switch ( m_eResponse ) 
     214    unsigned int resp_len; 
     215    quadlet_t* resp = m_p1394Service->transactionBlock( m_nodeId, 
     216                                                        (quadlet_t*)m_fcpFrame, 
     217                                                        ( fcpFrameSize+3 ) / 4, 
     218                                                        &resp_len ); 
     219    if ( resp ) { 
     220        resp_len *= 4; 
     221        unsigned char* buf = ( unsigned char* ) resp; 
     222 
     223        m_eResponse = ( EResponse )( *buf ); 
     224        switch ( m_eResponse ) 
     225        { 
     226            case eR_Accepted: 
     227            case eR_Implemented: 
     228            case eR_Rejected: 
     229            case eR_NotImplemented: 
    227230            { 
    228                 case eR_Accepted: 
    229                 case eR_Implemented: 
    230                 case eR_Rejected: 
    231                 case eR_NotImplemented: 
    232                 { 
    233                     Util::Cmd::BufferDeserialize de( buf, resp_len ); 
    234                     result = deserialize( de ); 
    235          
    236                     debugOutputShort( DEBUG_LEVEL_VERY_VERBOSE,"  Response:\n"); 
    237                     showFcpFrame( buf, de.getNrOfConsumedBytes() ); 
    238          
    239                     Util::Cmd::StringSerializer se_dbg; 
    240                     serialize( se_dbg ); 
    241          
    242                     // output the debug message in smaller chunks to avoid problems 
    243                     // with a max message size 
    244                     unsigned int chars_to_write=se_dbg.getString().size(); 
    245                     unsigned int chars_written=0; 
    246                     while (chars_written<chars_to_write) { 
    247                         debugOutputShort(DEBUG_LEVEL_VERY_VERBOSE, "%s\n", 
    248                                     se_dbg.getString().substr(chars_written, DEBUG_MAX_MESSAGE_LENGTH).c_str()); 
    249                         chars_written += DEBUG_MAX_MESSAGE_LENGTH-1; 
    250                     } 
     231                Util::Cmd::BufferDeserialize de( buf, resp_len ); 
     232                result = deserialize( de ); 
     233     
     234                debugOutputShort( DEBUG_LEVEL_VERY_VERBOSE,"  Response:\n"); 
     235                showFcpFrame( buf, de.getNrOfConsumedBytes() ); 
     236     
     237                Util::Cmd::StringSerializer se_dbg; 
     238                serialize( se_dbg ); 
     239     
     240                // output the debug message in smaller chunks to avoid problems 
     241                // with a max message size 
     242                unsigned int chars_to_write=se_dbg.getString().size(); 
     243                unsigned int chars_written=0; 
     244                while (chars_written<chars_to_write) { 
     245                    debugOutputShort(DEBUG_LEVEL_VERY_VERBOSE, "%s\n", 
     246                                se_dbg.getString().substr(chars_written, DEBUG_MAX_MESSAGE_LENGTH).c_str()); 
     247                    chars_written += DEBUG_MAX_MESSAGE_LENGTH-1; 
    251248                } 
    252                 break; 
    253                 default: 
    254                     debugWarning( "unexpected response received (0x%x)\n", m_eResponse ); 
    255                     debugOutputShort( DEBUG_LEVEL_VERY_VERBOSE,"  Response:\n"); 
    256          
    257                     Util::Cmd::BufferDeserialize de( buf, resp_len ); 
    258                     deserialize( de ); 
    259          
    260                     showFcpFrame( buf, de.getNrOfConsumedBytes() ); 
    261      
    262249            } 
    263             debugOutputShort( DEBUG_LEVEL_VERY_VERBOSE, "\n" ); 
    264             m_p1394Service->transactionBlockClose(); 
    265             break; // response received 
    266         } else { 
    267             debugOutput( DEBUG_LEVEL_VERBOSE, "no response (ntries: %d)\n", ntries ); 
    268             m_p1394Service->transactionBlockClose(); 
     250            break; 
     251            default: 
     252                debugWarning( "unexpected response received (0x%x)\n", m_eResponse ); 
     253                debugOutputShort( DEBUG_LEVEL_VERY_VERBOSE,"  Response:\n"); 
     254     
     255                Util::Cmd::BufferDeserialize de( buf, resp_len ); 
     256                deserialize( de ); 
     257     
     258                showFcpFrame( buf, de.getNrOfConsumedBytes() ); 
     259                result = false; 
     260 
    269261        } 
    270     } 
    271  
    272     if (!ntries) { 
    273         debugWarning( "transaction failed\n" ); 
     262        debugOutputShort( DEBUG_LEVEL_VERY_VERBOSE, "\n" ); 
     263        m_p1394Service->transactionBlockClose(); 
     264    } else { 
     265        debugOutput( DEBUG_LEVEL_VERBOSE, "no response\n" ); 
     266        result = false; 
     267        m_p1394Service->transactionBlockClose(); 
    274268    } 
    275269