1 // SPDX-License-Identifier: GPL-2.0+
3 Copyright (c) 2015 Broadcom
9 #include "rdp_common.h"
10 #include "xrdp_drv_drivers_common_ag.h"
11 #include "xrdp_drv_sbpm.h"
13 bdmf_error_t
ag_drv_sbpm_regs_bn_alloc_set(uint8_t sa
)
15 uint32_t reg_regs_bn_alloc
=0;
18 if((sa
>= _6BITS_MAX_VAL_
))
20 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_RANGE
), BDMF_ERR_RANGE
);
21 return BDMF_ERR_RANGE
;
25 reg_regs_bn_alloc
= RU_FIELD_SET(0, SBPM
, REGS_BN_ALLOC
, SA
, reg_regs_bn_alloc
, sa
);
27 RU_REG_WRITE(0, SBPM
, REGS_BN_ALLOC
, reg_regs_bn_alloc
);
32 bdmf_error_t
ag_drv_sbpm_regs_bn_alloc_rply_get(sbpm_regs_bn_alloc_rply
*regs_bn_alloc_rply
)
34 uint32_t reg_regs_bn_alloc_rply
;
37 if(!regs_bn_alloc_rply
)
39 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_PARM
), BDMF_ERR_PARM
);
44 RU_REG_READ(0, SBPM
, REGS_BN_ALLOC_RPLY
, reg_regs_bn_alloc_rply
);
46 regs_bn_alloc_rply
->alloc_bn_valid
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, ALLOC_BN_VALID
, reg_regs_bn_alloc_rply
);
47 regs_bn_alloc_rply
->alloc_bn
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, ALLOC_BN
, reg_regs_bn_alloc_rply
);
48 regs_bn_alloc_rply
->ack
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, ACK
, reg_regs_bn_alloc_rply
);
49 regs_bn_alloc_rply
->nack
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, NACK
, reg_regs_bn_alloc_rply
);
50 regs_bn_alloc_rply
->excl_high
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, EXCL_HIGH
, reg_regs_bn_alloc_rply
);
51 regs_bn_alloc_rply
->excl_low
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, EXCL_LOW
, reg_regs_bn_alloc_rply
);
52 regs_bn_alloc_rply
->busy
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, BUSY
, reg_regs_bn_alloc_rply
);
53 regs_bn_alloc_rply
->rdy
= RU_FIELD_GET(0, SBPM
, REGS_BN_ALLOC_RPLY
, RDY
, reg_regs_bn_alloc_rply
);
58 bdmf_error_t
ag_drv_sbpm_regs_bn_connect_set(uint16_t bn
, bdmf_boolean ack_req
, bdmf_boolean wr_req
, uint16_t pointed_bn
)
60 uint32_t reg_regs_bn_connect
=0;
63 if((bn
>= _14BITS_MAX_VAL_
) ||
64 (ack_req
>= _1BITS_MAX_VAL_
) ||
65 (wr_req
>= _1BITS_MAX_VAL_
) ||
66 (pointed_bn
>= _14BITS_MAX_VAL_
))
68 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_RANGE
), BDMF_ERR_RANGE
);
69 return BDMF_ERR_RANGE
;
73 reg_regs_bn_connect
= RU_FIELD_SET(0, SBPM
, REGS_BN_CONNECT
, BN
, reg_regs_bn_connect
, bn
);
74 reg_regs_bn_connect
= RU_FIELD_SET(0, SBPM
, REGS_BN_CONNECT
, ACK_REQ
, reg_regs_bn_connect
, ack_req
);
75 reg_regs_bn_connect
= RU_FIELD_SET(0, SBPM
, REGS_BN_CONNECT
, WR_REQ
, reg_regs_bn_connect
, wr_req
);
76 reg_regs_bn_connect
= RU_FIELD_SET(0, SBPM
, REGS_BN_CONNECT
, POINTED_BN
, reg_regs_bn_connect
, pointed_bn
);
78 RU_REG_WRITE(0, SBPM
, REGS_BN_CONNECT
, reg_regs_bn_connect
);
83 bdmf_error_t
ag_drv_sbpm_regs_bn_connect_rply_get(bdmf_boolean
*connect_ack
, bdmf_boolean
*busy
, bdmf_boolean
*rdy
)
85 uint32_t reg_regs_bn_connect_rply
;
88 if(!connect_ack
|| !busy
|| !rdy
)
90 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_PARM
), BDMF_ERR_PARM
);
95 RU_REG_READ(0, SBPM
, REGS_BN_CONNECT_RPLY
, reg_regs_bn_connect_rply
);
97 *connect_ack
= RU_FIELD_GET(0, SBPM
, REGS_BN_CONNECT_RPLY
, CONNECT_ACK
, reg_regs_bn_connect_rply
);
98 *busy
= RU_FIELD_GET(0, SBPM
, REGS_BN_CONNECT_RPLY
, BUSY
, reg_regs_bn_connect_rply
);
99 *rdy
= RU_FIELD_GET(0, SBPM
, REGS_BN_CONNECT_RPLY
, RDY
, reg_regs_bn_connect_rply
);
104 bdmf_error_t
ag_drv_sbpm_regs_get_next_set(uint16_t bn
)
106 uint32_t reg_regs_get_next
=0;
108 #ifdef VALIDATE_PARMS
109 if((bn
>= _14BITS_MAX_VAL_
))
111 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_RANGE
), BDMF_ERR_RANGE
);
112 return BDMF_ERR_RANGE
;
116 reg_regs_get_next
= RU_FIELD_SET(0, SBPM
, REGS_GET_NEXT
, BN
, reg_regs_get_next
, bn
);
118 RU_REG_WRITE(0, SBPM
, REGS_GET_NEXT
, reg_regs_get_next
);
123 bdmf_error_t
ag_drv_sbpm_regs_get_next_rply_get(sbpm_regs_get_next_rply
*regs_get_next_rply
)
125 uint32_t reg_regs_get_next_rply
;
127 #ifdef VALIDATE_PARMS
128 if(!regs_get_next_rply
)
130 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_PARM
), BDMF_ERR_PARM
);
131 return BDMF_ERR_PARM
;
135 RU_REG_READ(0, SBPM
, REGS_GET_NEXT_RPLY
, reg_regs_get_next_rply
);
137 regs_get_next_rply
->bn_valid
= RU_FIELD_GET(0, SBPM
, REGS_GET_NEXT_RPLY
, BN_VALID
, reg_regs_get_next_rply
);
138 regs_get_next_rply
->next_bn
= RU_FIELD_GET(0, SBPM
, REGS_GET_NEXT_RPLY
, NEXT_BN
, reg_regs_get_next_rply
);
139 regs_get_next_rply
->bn_null
= RU_FIELD_GET(0, SBPM
, REGS_GET_NEXT_RPLY
, BN_NULL
, reg_regs_get_next_rply
);
140 regs_get_next_rply
->mcnt_val
= RU_FIELD_GET(0, SBPM
, REGS_GET_NEXT_RPLY
, MCNT_VAL
, reg_regs_get_next_rply
);
141 regs_get_next_rply
->busy
= RU_FIELD_GET(0, SBPM
, REGS_GET_NEXT_RPLY
, BUSY
, reg_regs_get_next_rply
);
142 regs_get_next_rply
->rdy
= RU_FIELD_GET(0, SBPM
, REGS_GET_NEXT_RPLY
, RDY
, reg_regs_get_next_rply
);
147 bdmf_error_t
ag_drv_sbpm_regs_bn_free_without_contxt_set(uint16_t head_bn
, uint8_t sa
, bdmf_boolean ack_req
)
149 uint32_t reg_regs_bn_free_without_contxt
=0;
151 #ifdef VALIDATE_PARMS
152 if((head_bn
>= _14BITS_MAX_VAL_
) ||
153 (sa
>= _6BITS_MAX_VAL_
) ||
154 (ack_req
>= _1BITS_MAX_VAL_
))
156 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_RANGE
), BDMF_ERR_RANGE
);
157 return BDMF_ERR_RANGE
;
161 reg_regs_bn_free_without_contxt
= RU_FIELD_SET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT
, HEAD_BN
, reg_regs_bn_free_without_contxt
, head_bn
);
162 reg_regs_bn_free_without_contxt
= RU_FIELD_SET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT
, SA
, reg_regs_bn_free_without_contxt
, sa
);
163 reg_regs_bn_free_without_contxt
= RU_FIELD_SET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT
, ACK_REQ
, reg_regs_bn_free_without_contxt
, ack_req
);
165 RU_REG_WRITE(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT
, reg_regs_bn_free_without_contxt
);
170 bdmf_error_t
ag_drv_sbpm_regs_bn_free_without_contxt_rply_get(sbpm_regs_bn_free_without_contxt_rply
*regs_bn_free_without_contxt_rply
)
172 uint32_t reg_regs_bn_free_without_contxt_rply
;
174 #ifdef VALIDATE_PARMS
175 if(!regs_bn_free_without_contxt_rply
)
177 bdmf_trace("ERROR driver %s:%u| err=%s (%d)\n", __FILE__
, __LINE__
, bdmf_strerror(BDMF_ERR_PARM
), BDMF_ERR_PARM
);
178 return BDMF_ERR_PARM
;
182 RU_REG_READ(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, reg_regs_bn_free_without_contxt_rply
);
184 regs_bn_free_without_contxt_rply
->free_ack
= RU_FIELD_GET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, FREE_ACK
, reg_regs_bn_free_without_contxt_rply
);
185 regs_bn_free_without_contxt_rply
->ack_stat
= RU_FIELD_GET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, ACK_STAT
, reg_regs_bn_free_without_contxt_rply
);
186 regs_bn_free_without_contxt_rply
->nack_stat
= RU_FIELD_GET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, NACK_STAT
, reg_regs_bn_free_without_contxt_rply
);
187 regs_bn_free_without_contxt_rply
->excl_high_stat
= RU_FIELD_GET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, EXCL_HIGH_STAT
, reg_regs_bn_free_without_contxt_rply
);
188 regs_bn_free_without_contxt_rply
->excl_low_stat
= RU_FIELD_GET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, EXCL_LOW_STAT
, reg_regs_bn_free_without_contxt_rply
);
189 regs_bn_free_without_contxt_rply
->bsy
= RU_FIELD_GET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, BSY
, reg_regs_bn_free_without_contxt_rply
);
190 regs_bn_free_without_contxt_rply
->rdy
= RU_FIELD_GET(0, SBPM
, REGS_BN_FREE_WITHOUT_CONTXT_RPLY
, RDY
, reg_regs_bn_free_without_contxt_rply
);