mlxsw: item: Add helpers for getting pointer into payload for char buffer item
authorJiri Pirko <jiri@mellanox.com>
Fri, 3 Feb 2017 09:28:52 +0000 (10:28 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 3 Feb 2017 21:35:38 +0000 (16:35 -0500)
Sometimes it is handy to get a pointer to a char buffer item and use it
direcly to write/read data. So add these helpers.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/item.h

index 09f35de0a371097bc6b6305a75a972706c7a5e96..28427f0758c7ed3ddb35870aee9e450cc451151a 100644 (file)
@@ -225,6 +225,14 @@ static inline void __mlxsw_item_memcpy_to(char *buf, const char *src,
        memcpy(&buf[offset], src, item->size.bytes);
 }
 
+static inline char *__mlxsw_item_data(char *buf, const struct mlxsw_item *item,
+                                     unsigned short index)
+{
+       unsigned int offset = __mlxsw_item_offset(item, index, sizeof(char));
+
+       return &buf[offset];
+}
+
 static inline u16
 __mlxsw_item_bit_array_offset(const struct mlxsw_item *item,
                              u16 index, u8 *shift)
@@ -468,6 +476,11 @@ mlxsw_##_type##_##_cname##_##_iname##_memcpy_to(char *buf, const char *src)        \
 {                                                                              \
        __mlxsw_item_memcpy_to(buf, src,                                        \
                               &__ITEM_NAME(_type, _cname, _iname), 0);         \
+}                                                                              \
+static inline char *                                                           \
+mlxsw_##_type##_##_cname##_##_iname##_data(char *buf)                          \
+{                                                                              \
+       return __mlxsw_item_data(buf, &__ITEM_NAME(_type, _cname, _iname), 0);  \
 }
 
 #define MLXSW_ITEM_BUF_INDEXED(_type, _cname, _iname, _offset, _sizebytes,     \
@@ -494,6 +507,12 @@ mlxsw_##_type##_##_cname##_##_iname##_memcpy_to(char *buf,                 \
 {                                                                              \
        __mlxsw_item_memcpy_to(buf, src,                                        \
                               &__ITEM_NAME(_type, _cname, _iname), index);     \
+}                                                                              \
+static inline char *                                                           \
+mlxsw_##_type##_##_cname##_##_iname##_data(char *buf, unsigned short index)    \
+{                                                                              \
+       return __mlxsw_item_data(buf,                                           \
+                                &__ITEM_NAME(_type, _cname, _iname), index);   \
 }
 
 #define MLXSW_ITEM_BIT_ARRAY(_type, _cname, _iname, _offset, _sizebytes,       \