linux/drivers/net/ethernet/chelsio/cxgb4/cudbg_common.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 *  Copyright (C) 2017 Chelsio Communications.  All rights reserved.
   4 */
   5
   6#include "cxgb4.h"
   7#include "cudbg_if.h"
   8#include "cudbg_lib_common.h"
   9
  10int cudbg_get_buff(struct cudbg_init *pdbg_init,
  11                   struct cudbg_buffer *pdbg_buff, u32 size,
  12                   struct cudbg_buffer *pin_buff)
  13{
  14        u32 offset;
  15
  16        offset = pdbg_buff->offset;
  17        if (offset + size > pdbg_buff->size)
  18                return CUDBG_STATUS_NO_MEM;
  19
  20        if (pdbg_init->compress_type != CUDBG_COMPRESSION_NONE) {
  21                if (size > pdbg_init->compress_buff_size)
  22                        return CUDBG_STATUS_NO_MEM;
  23
  24                pin_buff->data = (char *)pdbg_init->compress_buff;
  25                pin_buff->offset = 0;
  26                pin_buff->size = size;
  27                return 0;
  28        }
  29
  30        pin_buff->data = (char *)pdbg_buff->data + offset;
  31        pin_buff->offset = offset;
  32        pin_buff->size = size;
  33        return 0;
  34}
  35
  36void cudbg_put_buff(struct cudbg_init *pdbg_init,
  37                    struct cudbg_buffer *pin_buff)
  38{
  39        /* Clear compression buffer for re-use */
  40        if (pdbg_init->compress_type != CUDBG_COMPRESSION_NONE)
  41                memset(pdbg_init->compress_buff, 0,
  42                       pdbg_init->compress_buff_size);
  43
  44        pin_buff->data = NULL;
  45        pin_buff->offset = 0;
  46        pin_buff->size = 0;
  47}
  48
  49void cudbg_update_buff(struct cudbg_buffer *pin_buff,
  50                       struct cudbg_buffer *pout_buff)
  51{
  52        /* We already write to buffer provided by ethool, so just
  53         * increment offset to next free space.
  54         */
  55        pout_buff->offset += pin_buff->size;
  56}
  57