Deleted Added
full compact
mlx5_mad.c (329206) mlx5_mad.c (331807)
1/*-
2 * Copyright (c) 2013-2015, Mellanox Technologies, Ltd. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 8 unchanged lines hidden (view full) ---

17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
1/*-
2 * Copyright (c) 2013-2015, Mellanox Technologies, Ltd. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 8 unchanged lines hidden (view full) ---

17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 * $FreeBSD: stable/11/sys/dev/mlx5/mlx5_core/mlx5_mad.c 329206 2018-02-13 15:07:39Z hselasky $
25 * $FreeBSD: stable/11/sys/dev/mlx5/mlx5_core/mlx5_mad.c 331807 2018-03-30 19:13:17Z hselasky $
26 */
27
28#include <linux/kernel.h>
29#include <linux/module.h>
30#include <dev/mlx5/driver.h>
31#include "mlx5_core.h"
32
33int mlx5_core_mad_ifc(struct mlx5_core_dev *dev, const void *inb, void *outb,
34 u16 opmod, u8 port)
35{
26 */
27
28#include <linux/kernel.h>
29#include <linux/module.h>
30#include <dev/mlx5/driver.h>
31#include "mlx5_core.h"
32
33int mlx5_core_mad_ifc(struct mlx5_core_dev *dev, const void *inb, void *outb,
34 u16 opmod, u8 port)
35{
36 struct mlx5_mad_ifc_mbox_in *in = NULL;
37 struct mlx5_mad_ifc_mbox_out *out = NULL;
38 int err;
36 int outlen = MLX5_ST_SZ_BYTES(mad_ifc_out);
37 int inlen = MLX5_ST_SZ_BYTES(mad_ifc_in);
38 int err = -ENOMEM;
39 void *data;
40 void *resp;
41 u32 *out;
42 u32 *in;
39
43
40 in = kzalloc(sizeof(*in), GFP_KERNEL);
44 in = kzalloc(inlen, GFP_KERNEL);
45 out = kzalloc(outlen, GFP_KERNEL);
46 if (!in || !out)
47 goto out;
41
48
42 out = kzalloc(sizeof(*out), GFP_KERNEL);
49 MLX5_SET(mad_ifc_in, in, opcode, MLX5_CMD_OP_MAD_IFC);
50 MLX5_SET(mad_ifc_in, in, op_mod, opmod);
51 MLX5_SET(mad_ifc_in, in, port, port);
43
52
44 in->hdr.opcode = cpu_to_be16(MLX5_CMD_OP_MAD_IFC);
45 in->hdr.opmod = cpu_to_be16(opmod);
46 in->port = port;
53 data = MLX5_ADDR_OF(mad_ifc_in, in, mad);
54 memcpy(data, inb, MLX5_FLD_SZ_BYTES(mad_ifc_in, mad));
47
55
48 memcpy(in->data, inb, sizeof(in->data));
49
50 err = mlx5_cmd_exec(dev, in, sizeof(*in), out, sizeof(*out));
56 err = mlx5_cmd_exec(dev, in, inlen, out, outlen);
51 if (err)
52 goto out;
53
57 if (err)
58 goto out;
59
54 if (out->hdr.status) {
55 err = mlx5_cmd_status_to_err(&out->hdr);
56 goto out;
57 }
60 resp = MLX5_ADDR_OF(mad_ifc_out, out, response_mad_packet);
61 memcpy(outb, resp,
62 MLX5_FLD_SZ_BYTES(mad_ifc_out, response_mad_packet));
58
63
59 memcpy(outb, out->data, sizeof(out->data));
60
61out:
62 kfree(out);
63 kfree(in);
64 return err;
65}
66EXPORT_SYMBOL_GPL(mlx5_core_mad_ifc);
64out:
65 kfree(out);
66 kfree(in);
67 return err;
68}
69EXPORT_SYMBOL_GPL(mlx5_core_mad_ifc);