mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-19 23:48:36 +07:00
mlxsw: item: Add MLXSW_ITEM_BUF_INDEXED helper
Add missing item helper which allows to access char bufs on multiple offsets. This is needed by SFD and SFN register definitions. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7b0989b5bc
commit
d64b159253
@ -171,15 +171,21 @@ static inline void __mlxsw_item_set64(char *buf, struct mlxsw_item *item,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline void __mlxsw_item_memcpy_from(char *buf, char *dst,
|
static inline void __mlxsw_item_memcpy_from(char *buf, char *dst,
|
||||||
struct mlxsw_item *item)
|
struct mlxsw_item *item,
|
||||||
|
unsigned short index)
|
||||||
{
|
{
|
||||||
memcpy(dst, &buf[item->offset], item->size.bytes);
|
unsigned int offset = __mlxsw_item_offset(item, index, sizeof(char));
|
||||||
|
|
||||||
|
memcpy(dst, &buf[offset], item->size.bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void __mlxsw_item_memcpy_to(char *buf, const char *src,
|
static inline void __mlxsw_item_memcpy_to(char *buf, const char *src,
|
||||||
struct mlxsw_item *item)
|
struct mlxsw_item *item,
|
||||||
|
unsigned short index)
|
||||||
{
|
{
|
||||||
memcpy(&buf[item->offset], src, item->size.bytes);
|
unsigned int offset = __mlxsw_item_offset(item, index, sizeof(char));
|
||||||
|
|
||||||
|
memcpy(&buf[offset], src, item->size.bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline u16
|
static inline u16
|
||||||
@ -371,12 +377,40 @@ static struct mlxsw_item __ITEM_NAME(_type, _cname, _iname) = { \
|
|||||||
static inline void \
|
static inline void \
|
||||||
mlxsw_##_type##_##_cname##_##_iname##_memcpy_from(char *buf, char *dst) \
|
mlxsw_##_type##_##_cname##_##_iname##_memcpy_from(char *buf, char *dst) \
|
||||||
{ \
|
{ \
|
||||||
__mlxsw_item_memcpy_from(buf, dst, &__ITEM_NAME(_type, _cname, _iname));\
|
__mlxsw_item_memcpy_from(buf, dst, \
|
||||||
|
&__ITEM_NAME(_type, _cname, _iname), 0); \
|
||||||
} \
|
} \
|
||||||
static inline void \
|
static inline void \
|
||||||
mlxsw_##_type##_##_cname##_##_iname##_memcpy_to(char *buf, const char *src) \
|
mlxsw_##_type##_##_cname##_##_iname##_memcpy_to(char *buf, const char *src) \
|
||||||
{ \
|
{ \
|
||||||
__mlxsw_item_memcpy_to(buf, src, &__ITEM_NAME(_type, _cname, _iname)); \
|
__mlxsw_item_memcpy_to(buf, src, \
|
||||||
|
&__ITEM_NAME(_type, _cname, _iname), 0); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MLXSW_ITEM_BUF_INDEXED(_type, _cname, _iname, _offset, _sizebytes, \
|
||||||
|
_step, _instepoffset) \
|
||||||
|
static struct mlxsw_item __ITEM_NAME(_type, _cname, _iname) = { \
|
||||||
|
.offset = _offset, \
|
||||||
|
.step = _step, \
|
||||||
|
.in_step_offset = _instepoffset, \
|
||||||
|
.size = {.bytes = _sizebytes,}, \
|
||||||
|
.name = #_type "_" #_cname "_" #_iname, \
|
||||||
|
}; \
|
||||||
|
static inline void \
|
||||||
|
mlxsw_##_type##_##_cname##_##_iname##_memcpy_from(char *buf, \
|
||||||
|
unsigned short index, \
|
||||||
|
char *dst) \
|
||||||
|
{ \
|
||||||
|
__mlxsw_item_memcpy_from(buf, dst, \
|
||||||
|
&__ITEM_NAME(_type, _cname, _iname), index); \
|
||||||
|
} \
|
||||||
|
static inline void \
|
||||||
|
mlxsw_##_type##_##_cname##_##_iname##_memcpy_to(char *buf, \
|
||||||
|
unsigned short index, \
|
||||||
|
const char *src) \
|
||||||
|
{ \
|
||||||
|
__mlxsw_item_memcpy_to(buf, src, \
|
||||||
|
&__ITEM_NAME(_type, _cname, _iname), index); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MLXSW_ITEM_BIT_ARRAY(_type, _cname, _iname, _offset, _sizebytes, \
|
#define MLXSW_ITEM_BIT_ARRAY(_type, _cname, _iname, _offset, _sizebytes, \
|
||||||
|
Loading…
Reference in New Issue
Block a user