1*4fa9c49fSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 2a7975a2fSRahul Lakkireddy /* 3a7975a2fSRahul Lakkireddy * Copyright (C) 2017 Chelsio Communications. All rights reserved. 4a7975a2fSRahul Lakkireddy */ 5a7975a2fSRahul Lakkireddy 6a7975a2fSRahul Lakkireddy #include "cxgb4.h" 7a7975a2fSRahul Lakkireddy #include "cudbg_if.h" 8a7975a2fSRahul Lakkireddy #include "cudbg_lib_common.h" 9a7975a2fSRahul Lakkireddy 1056cf2635SRahul Lakkireddy int cudbg_get_buff(struct cudbg_init *pdbg_init, 1156cf2635SRahul Lakkireddy struct cudbg_buffer *pdbg_buff, u32 size, 12a7975a2fSRahul Lakkireddy struct cudbg_buffer *pin_buff) 13a7975a2fSRahul Lakkireddy { 14a7975a2fSRahul Lakkireddy u32 offset; 15a7975a2fSRahul Lakkireddy 16a7975a2fSRahul Lakkireddy offset = pdbg_buff->offset; 17a7975a2fSRahul Lakkireddy if (offset + size > pdbg_buff->size) 18a7975a2fSRahul Lakkireddy return CUDBG_STATUS_NO_MEM; 19a7975a2fSRahul Lakkireddy 2056cf2635SRahul Lakkireddy if (pdbg_init->compress_type != CUDBG_COMPRESSION_NONE) { 2156cf2635SRahul Lakkireddy if (size > pdbg_init->compress_buff_size) 2256cf2635SRahul Lakkireddy return CUDBG_STATUS_NO_MEM; 2356cf2635SRahul Lakkireddy 2456cf2635SRahul Lakkireddy pin_buff->data = (char *)pdbg_init->compress_buff; 2556cf2635SRahul Lakkireddy pin_buff->offset = 0; 26a7975a2fSRahul Lakkireddy pin_buff->size = size; 27a7975a2fSRahul Lakkireddy return 0; 28a7975a2fSRahul Lakkireddy } 29a7975a2fSRahul Lakkireddy 3056cf2635SRahul Lakkireddy pin_buff->data = (char *)pdbg_buff->data + offset; 3156cf2635SRahul Lakkireddy pin_buff->offset = offset; 3256cf2635SRahul Lakkireddy pin_buff->size = size; 3356cf2635SRahul Lakkireddy return 0; 3456cf2635SRahul Lakkireddy } 3556cf2635SRahul Lakkireddy 3656cf2635SRahul Lakkireddy void cudbg_put_buff(struct cudbg_init *pdbg_init, 3756cf2635SRahul Lakkireddy struct cudbg_buffer *pin_buff) 38a7975a2fSRahul Lakkireddy { 3956cf2635SRahul Lakkireddy /* Clear compression buffer for re-use */ 4056cf2635SRahul Lakkireddy if (pdbg_init->compress_type != CUDBG_COMPRESSION_NONE) 4156cf2635SRahul Lakkireddy memset(pdbg_init->compress_buff, 0, 4256cf2635SRahul Lakkireddy pdbg_init->compress_buff_size); 4356cf2635SRahul Lakkireddy 44a7975a2fSRahul Lakkireddy pin_buff->data = NULL; 45a7975a2fSRahul Lakkireddy pin_buff->offset = 0; 46a7975a2fSRahul Lakkireddy pin_buff->size = 0; 47a7975a2fSRahul Lakkireddy } 48a7975a2fSRahul Lakkireddy 49a7975a2fSRahul Lakkireddy void cudbg_update_buff(struct cudbg_buffer *pin_buff, 50a7975a2fSRahul Lakkireddy struct cudbg_buffer *pout_buff) 51a7975a2fSRahul Lakkireddy { 52a7975a2fSRahul Lakkireddy /* We already write to buffer provided by ethool, so just 53a7975a2fSRahul Lakkireddy * increment offset to next free space. 54a7975a2fSRahul Lakkireddy */ 55a7975a2fSRahul Lakkireddy pout_buff->offset += pin_buff->size; 56a7975a2fSRahul Lakkireddy } 57