1a7975a2fSRahul Lakkireddy /*
2a7975a2fSRahul Lakkireddy  *  Copyright (C) 2017 Chelsio Communications.  All rights reserved.
3a7975a2fSRahul Lakkireddy  *
4a7975a2fSRahul Lakkireddy  *  This program is free software; you can redistribute it and/or modify it
5a7975a2fSRahul Lakkireddy  *  under the terms and conditions of the GNU General Public License,
6a7975a2fSRahul Lakkireddy  *  version 2, as published by the Free Software Foundation.
7a7975a2fSRahul Lakkireddy  *
8a7975a2fSRahul Lakkireddy  *  This program is distributed in the hope it will be useful, but WITHOUT
9a7975a2fSRahul Lakkireddy  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10a7975a2fSRahul Lakkireddy  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11a7975a2fSRahul Lakkireddy  *  more details.
12a7975a2fSRahul Lakkireddy  *
13a7975a2fSRahul Lakkireddy  *  The full GNU General Public License is included in this distribution in
14a7975a2fSRahul Lakkireddy  *  the file called "COPYING".
15a7975a2fSRahul Lakkireddy  *
16a7975a2fSRahul Lakkireddy  */
17a7975a2fSRahul Lakkireddy 
18a7975a2fSRahul Lakkireddy #include "cxgb4.h"
19a7975a2fSRahul Lakkireddy #include "cudbg_if.h"
20a7975a2fSRahul Lakkireddy #include "cudbg_lib_common.h"
21a7975a2fSRahul Lakkireddy 
22a7975a2fSRahul Lakkireddy int cudbg_get_buff(struct cudbg_buffer *pdbg_buff, u32 size,
23a7975a2fSRahul Lakkireddy 		   struct cudbg_buffer *pin_buff)
24a7975a2fSRahul Lakkireddy {
25a7975a2fSRahul Lakkireddy 	u32 offset;
26a7975a2fSRahul Lakkireddy 
27a7975a2fSRahul Lakkireddy 	offset = pdbg_buff->offset;
28a7975a2fSRahul Lakkireddy 	if (offset + size > pdbg_buff->size)
29a7975a2fSRahul Lakkireddy 		return CUDBG_STATUS_NO_MEM;
30a7975a2fSRahul Lakkireddy 
31a7975a2fSRahul Lakkireddy 	pin_buff->data = (char *)pdbg_buff->data + offset;
32a7975a2fSRahul Lakkireddy 	pin_buff->offset = offset;
33a7975a2fSRahul Lakkireddy 	pin_buff->size = size;
34a7975a2fSRahul Lakkireddy 	pdbg_buff->size -= size;
35a7975a2fSRahul Lakkireddy 	return 0;
36a7975a2fSRahul Lakkireddy }
37a7975a2fSRahul Lakkireddy 
38a7975a2fSRahul Lakkireddy void cudbg_put_buff(struct cudbg_buffer *pin_buff,
39a7975a2fSRahul Lakkireddy 		    struct cudbg_buffer *pdbg_buff)
40a7975a2fSRahul Lakkireddy {
41a7975a2fSRahul Lakkireddy 	pdbg_buff->size += pin_buff->size;
42a7975a2fSRahul Lakkireddy 	pin_buff->data = NULL;
43a7975a2fSRahul Lakkireddy 	pin_buff->offset = 0;
44a7975a2fSRahul Lakkireddy 	pin_buff->size = 0;
45a7975a2fSRahul Lakkireddy }
46a7975a2fSRahul Lakkireddy 
47a7975a2fSRahul Lakkireddy void cudbg_update_buff(struct cudbg_buffer *pin_buff,
48a7975a2fSRahul Lakkireddy 		       struct cudbg_buffer *pout_buff)
49a7975a2fSRahul Lakkireddy {
50a7975a2fSRahul Lakkireddy 	/* We already write to buffer provided by ethool, so just
51a7975a2fSRahul Lakkireddy 	 * increment offset to next free space.
52a7975a2fSRahul Lakkireddy 	 */
53a7975a2fSRahul Lakkireddy 	pout_buff->offset += pin_buff->size;
54a7975a2fSRahul Lakkireddy }
55