diff options
| author | Huy Nguyen <huyn@mellanox.com> | 2017-08-02 22:36:23 -0400 |
|---|---|---|
| committer | Saeed Mahameed <saeedm@mellanox.com> | 2017-11-05 00:24:42 -0400 |
| commit | 71c70eb21c33c60433b95e72a59d40bb128db649 (patch) | |
| tree | 263acbdc1ed245fad94812103cb95b8c605d3ce8 /include/linux | |
| parent | c02762eb20cb57ec5b7c037b056c37d5838c803f (diff) | |
net/mlx5: Add MLX5_SET16 and MLX5_GET16
Add MLX5_SET16 and MLX5_GET16 for 16bit structure field in firmware
command.
Signed-off-by: Huy Nguyen <huyn@mellanox.com>
Reviewed-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mlx5/device.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/include/linux/mlx5/device.h b/include/linux/mlx5/device.h index 6d79b3f79458..409ffb14298a 100644 --- a/include/linux/mlx5/device.h +++ b/include/linux/mlx5/device.h | |||
| @@ -49,11 +49,15 @@ | |||
| 49 | #define __mlx5_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)0) | 49 | #define __mlx5_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)0) |
| 50 | #define __mlx5_bit_sz(typ, fld) sizeof(__mlx5_nullp(typ)->fld) | 50 | #define __mlx5_bit_sz(typ, fld) sizeof(__mlx5_nullp(typ)->fld) |
| 51 | #define __mlx5_bit_off(typ, fld) (offsetof(struct mlx5_ifc_##typ##_bits, fld)) | 51 | #define __mlx5_bit_off(typ, fld) (offsetof(struct mlx5_ifc_##typ##_bits, fld)) |
| 52 | #define __mlx5_16_off(typ, fld) (__mlx5_bit_off(typ, fld) / 16) | ||
| 52 | #define __mlx5_dw_off(typ, fld) (__mlx5_bit_off(typ, fld) / 32) | 53 | #define __mlx5_dw_off(typ, fld) (__mlx5_bit_off(typ, fld) / 32) |
| 53 | #define __mlx5_64_off(typ, fld) (__mlx5_bit_off(typ, fld) / 64) | 54 | #define __mlx5_64_off(typ, fld) (__mlx5_bit_off(typ, fld) / 64) |
| 55 | #define __mlx5_16_bit_off(typ, fld) (16 - __mlx5_bit_sz(typ, fld) - (__mlx5_bit_off(typ, fld) & 0xf)) | ||
| 54 | #define __mlx5_dw_bit_off(typ, fld) (32 - __mlx5_bit_sz(typ, fld) - (__mlx5_bit_off(typ, fld) & 0x1f)) | 56 | #define __mlx5_dw_bit_off(typ, fld) (32 - __mlx5_bit_sz(typ, fld) - (__mlx5_bit_off(typ, fld) & 0x1f)) |
| 55 | #define __mlx5_mask(typ, fld) ((u32)((1ull << __mlx5_bit_sz(typ, fld)) - 1)) | 57 | #define __mlx5_mask(typ, fld) ((u32)((1ull << __mlx5_bit_sz(typ, fld)) - 1)) |
| 56 | #define __mlx5_dw_mask(typ, fld) (__mlx5_mask(typ, fld) << __mlx5_dw_bit_off(typ, fld)) | 58 | #define __mlx5_dw_mask(typ, fld) (__mlx5_mask(typ, fld) << __mlx5_dw_bit_off(typ, fld)) |
| 59 | #define __mlx5_mask16(typ, fld) ((u16)((1ull << __mlx5_bit_sz(typ, fld)) - 1)) | ||
| 60 | #define __mlx5_16_mask(typ, fld) (__mlx5_mask16(typ, fld) << __mlx5_16_bit_off(typ, fld)) | ||
| 57 | #define __mlx5_st_sz_bits(typ) sizeof(struct mlx5_ifc_##typ##_bits) | 61 | #define __mlx5_st_sz_bits(typ) sizeof(struct mlx5_ifc_##typ##_bits) |
| 58 | 62 | ||
| 59 | #define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8) | 63 | #define MLX5_FLD_SZ_BYTES(typ, fld) (__mlx5_bit_sz(typ, fld) / 8) |
| @@ -116,6 +120,19 @@ __mlx5_mask(typ, fld)) | |||
| 116 | ___t; \ | 120 | ___t; \ |
| 117 | }) | 121 | }) |
| 118 | 122 | ||
| 123 | #define MLX5_GET16(typ, p, fld) ((be16_to_cpu(*((__be16 *)(p) +\ | ||
| 124 | __mlx5_16_off(typ, fld))) >> __mlx5_16_bit_off(typ, fld)) & \ | ||
| 125 | __mlx5_mask16(typ, fld)) | ||
| 126 | |||
| 127 | #define MLX5_SET16(typ, p, fld, v) do { \ | ||
| 128 | u16 _v = v; \ | ||
| 129 | BUILD_BUG_ON(__mlx5_st_sz_bits(typ) % 16); \ | ||
| 130 | *((__be16 *)(p) + __mlx5_16_off(typ, fld)) = \ | ||
| 131 | cpu_to_be16((be16_to_cpu(*((__be16 *)(p) + __mlx5_16_off(typ, fld))) & \ | ||
| 132 | (~__mlx5_16_mask(typ, fld))) | (((_v) & __mlx5_mask16(typ, fld)) \ | ||
| 133 | << __mlx5_16_bit_off(typ, fld))); \ | ||
| 134 | } while (0) | ||
| 135 | |||
| 119 | /* Big endian getters */ | 136 | /* Big endian getters */ |
| 120 | #define MLX5_GET64_BE(typ, p, fld) (*((__be64 *)(p) +\ | 137 | #define MLX5_GET64_BE(typ, p, fld) (*((__be64 *)(p) +\ |
| 121 | __mlx5_64_off(typ, fld))) | 138 | __mlx5_64_off(typ, fld))) |
