2 * Copyright(c) 2019-2020 Broadcom Limited.
7 #include "hcapi_cfa_defs.h"
11 /* HCAPI CFA common PUT APIs */
12 int hcapi_cfa_put_field(uint64_t *data_buf,
13 const struct hcapi_cfa_layout *layout,
14 uint16_t field_id, uint64_t val)
18 if (field_id > layout->array_sz)
19 /* Invalid field_id */
22 if (layout->is_msb_order)
24 layout->field_array[field_id].bitpos,
25 layout->field_array[field_id].bitlen, val);
28 layout->field_array[field_id].bitpos,
29 layout->field_array[field_id].bitlen, val);
33 int hcapi_cfa_put_fields(uint64_t *obj_data,
34 const struct hcapi_cfa_layout *layout,
35 struct hcapi_cfa_data_obj *field_tbl,
36 uint16_t field_tbl_sz)
46 if (layout->is_msb_order) {
47 for (i = 0; i < field_tbl_sz; i++) {
48 field_id = field_tbl[i].field_id;
49 if (field_id > layout->array_sz)
51 bitpos = layout->field_array[field_id].bitpos;
52 bitlen = layout->field_array[field_id].bitlen;
53 bs_put_msb(obj_data, bitpos, bitlen,
57 for (i = 0; i < field_tbl_sz; i++) {
58 field_id = field_tbl[i].field_id;
59 if (field_id > layout->array_sz)
61 bitpos = layout->field_array[field_id].bitpos;
62 bitlen = layout->field_array[field_id].bitlen;
63 bs_put_lsb(obj_data, bitpos, bitlen,
70 /* HCAPI CFA common GET APIs */
71 int hcapi_cfa_get_field(uint64_t *obj_data,
72 const struct hcapi_cfa_layout *layout,
79 if (field_id > layout->array_sz)
80 /* Invalid field_id */
83 if (layout->is_msb_order)
84 *val = bs_get_msb(obj_data,
85 layout->field_array[field_id].bitpos,
86 layout->field_array[field_id].bitlen);
88 *val = bs_get_lsb(obj_data,
89 layout->field_array[field_id].bitpos,
90 layout->field_array[field_id].bitlen);