root/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_cmds.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __nfp_nsp_identify
  2. nfp_hwmon_read_sensor

   1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
   2 /* Copyright (C) 2017 Netronome Systems, Inc. */
   3 
   4 #include <linux/kernel.h>
   5 #include <linux/slab.h>
   6 
   7 #include "nfp.h"
   8 #include "nfp_nsp.h"
   9 
  10 struct nsp_identify {
  11         u8 version[40];
  12         u8 flags;
  13         u8 br_primary;
  14         u8 br_secondary;
  15         u8 br_nsp;
  16         __le16 primary;
  17         __le16 secondary;
  18         __le16 nsp;
  19         u8 reserved[6];
  20         __le64 sensor_mask;
  21 };
  22 
  23 struct nfp_nsp_identify *__nfp_nsp_identify(struct nfp_nsp *nsp)
  24 {
  25         struct nfp_nsp_identify *nspi = NULL;
  26         struct nsp_identify *ni;
  27         int ret;
  28 
  29         if (nfp_nsp_get_abi_ver_minor(nsp) < 15)
  30                 return NULL;
  31 
  32         ni = kzalloc(sizeof(*ni), GFP_KERNEL);
  33         if (!ni)
  34                 return NULL;
  35 
  36         ret = nfp_nsp_read_identify(nsp, ni, sizeof(*ni));
  37         if (ret < 0) {
  38                 nfp_err(nfp_nsp_cpp(nsp), "reading bsp version failed %d\n",
  39                         ret);
  40                 goto exit_free;
  41         }
  42 
  43         nspi = kzalloc(sizeof(*nspi), GFP_KERNEL);
  44         if (!nspi)
  45                 goto exit_free;
  46 
  47         memcpy(nspi->version, ni->version, sizeof(nspi->version));
  48         nspi->version[sizeof(nspi->version) - 1] = '\0';
  49         nspi->flags = ni->flags;
  50         nspi->br_primary = ni->br_primary;
  51         nspi->br_secondary = ni->br_secondary;
  52         nspi->br_nsp = ni->br_nsp;
  53         nspi->primary = le16_to_cpu(ni->primary);
  54         nspi->secondary = le16_to_cpu(ni->secondary);
  55         nspi->nsp = le16_to_cpu(ni->nsp);
  56         nspi->sensor_mask = le64_to_cpu(ni->sensor_mask);
  57 
  58 exit_free:
  59         kfree(ni);
  60         return nspi;
  61 }
  62 
  63 struct nfp_sensors {
  64         __le32 chip_temp;
  65         __le32 assembly_power;
  66         __le32 assembly_12v_power;
  67         __le32 assembly_3v3_power;
  68 };
  69 
  70 int nfp_hwmon_read_sensor(struct nfp_cpp *cpp, enum nfp_nsp_sensor_id id,
  71                           long *val)
  72 {
  73         struct nfp_sensors s;
  74         struct nfp_nsp *nsp;
  75         int ret;
  76 
  77         nsp = nfp_nsp_open(cpp);
  78         if (IS_ERR(nsp))
  79                 return PTR_ERR(nsp);
  80 
  81         ret = nfp_nsp_read_sensors(nsp, BIT(id), &s, sizeof(s));
  82         nfp_nsp_close(nsp);
  83 
  84         if (ret < 0)
  85                 return ret;
  86 
  87         switch (id) {
  88         case NFP_SENSOR_CHIP_TEMPERATURE:
  89                 *val = le32_to_cpu(s.chip_temp);
  90                 break;
  91         case NFP_SENSOR_ASSEMBLY_POWER:
  92                 *val = le32_to_cpu(s.assembly_power);
  93                 break;
  94         case NFP_SENSOR_ASSEMBLY_12V_POWER:
  95                 *val = le32_to_cpu(s.assembly_12v_power);
  96                 break;
  97         case NFP_SENSOR_ASSEMBLY_3V3_POWER:
  98                 *val = le32_to_cpu(s.assembly_3v3_power);
  99                 break;
 100         default:
 101                 return -EINVAL;
 102         }
 103         return 0;
 104 }

/* [<][>][^][v][top][bottom][index][help] */