2017-10-13 18:48:14 +05:30
/*
* Copyright ( C ) 2017 Chelsio Communications . All rights reserved .
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms and conditions of the GNU General Public License ,
* version 2 , as published by the Free Software Foundation .
*
* This program is distributed in the hope it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*
* The full GNU General Public License is included in this distribution in
* the file called " COPYING " .
*
*/
# include "cxgb4.h"
# include "cudbg_if.h"
# include "cudbg_lib_common.h"
2018-01-17 12:53:46 +05:30
int cudbg_get_buff ( struct cudbg_init * pdbg_init ,
struct cudbg_buffer * pdbg_buff , u32 size ,
2017-10-13 18:48:14 +05:30
struct cudbg_buffer * pin_buff )
{
u32 offset ;
offset = pdbg_buff - > offset ;
if ( offset + size > pdbg_buff - > size )
return CUDBG_STATUS_NO_MEM ;
2018-01-17 12:53:46 +05:30
if ( pdbg_init - > compress_type ! = CUDBG_COMPRESSION_NONE ) {
if ( size > pdbg_init - > compress_buff_size )
return CUDBG_STATUS_NO_MEM ;
pin_buff - > data = ( char * ) pdbg_init - > compress_buff ;
pin_buff - > offset = 0 ;
pin_buff - > size = size ;
return 0 ;
}
2017-10-13 18:48:14 +05:30
pin_buff - > data = ( char * ) pdbg_buff - > data + offset ;
pin_buff - > offset = offset ;
pin_buff - > size = size ;
return 0 ;
}
2018-01-17 12:53:46 +05:30
void cudbg_put_buff ( struct cudbg_init * pdbg_init ,
struct cudbg_buffer * pin_buff )
2017-10-13 18:48:14 +05:30
{
2018-01-17 12:53:46 +05:30
/* Clear compression buffer for re-use */
if ( pdbg_init - > compress_type ! = CUDBG_COMPRESSION_NONE )
memset ( pdbg_init - > compress_buff , 0 ,
pdbg_init - > compress_buff_size ) ;
2017-10-13 18:48:14 +05:30
pin_buff - > data = NULL ;
pin_buff - > offset = 0 ;
pin_buff - > size = 0 ;
}
void cudbg_update_buff ( struct cudbg_buffer * pin_buff ,
struct cudbg_buffer * pout_buff )
{
/* We already write to buffer provided by ethool, so just
* increment offset to next free space .
*/
pout_buff - > offset + = pin_buff - > size ;
}