Lines Matching refs:dbc_dev

43 static inline int send_dbc_cmd_thru_ext(struct psp_dbc_device *dbc_dev, int msg)  in send_dbc_cmd_thru_ext()  argument
45 dbc_dev->mbox->ext_req.header.sub_cmd_id = msg; in send_dbc_cmd_thru_ext()
47 return psp_extended_mailbox_cmd(dbc_dev->psp, in send_dbc_cmd_thru_ext()
49 (struct psp_ext_request *)dbc_dev->mbox); in send_dbc_cmd_thru_ext()
52 static inline int send_dbc_cmd_thru_pa(struct psp_dbc_device *dbc_dev, int msg) in send_dbc_cmd_thru_pa() argument
55 (struct psp_request *)dbc_dev->mbox); in send_dbc_cmd_thru_pa()
58 static int send_dbc_cmd(struct psp_dbc_device *dbc_dev, int msg) in send_dbc_cmd() argument
62 *dbc_dev->result = 0; in send_dbc_cmd()
63 ret = dbc_dev->use_ext ? send_dbc_cmd_thru_ext(dbc_dev, msg) : in send_dbc_cmd()
64 send_dbc_cmd_thru_pa(dbc_dev, msg); in send_dbc_cmd()
68 dev_dbg(dbc_dev->dev, in send_dbc_cmd()
70 msg, *dbc_dev->result); in send_dbc_cmd()
73 if (*dbc_dev->result == error_codes[i].psp) in send_dbc_cmd()
81 static int send_dbc_nonce(struct psp_dbc_device *dbc_dev) in send_dbc_nonce() argument
85 *dbc_dev->payload_size = dbc_dev->header_size + sizeof(struct dbc_user_nonce); in send_dbc_nonce()
86 ret = send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_GET_NONCE); in send_dbc_nonce()
88 dev_dbg(dbc_dev->dev, "retrying get nonce\n"); in send_dbc_nonce()
89 ret = send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_GET_NONCE); in send_dbc_nonce()
95 static int send_dbc_parameter(struct psp_dbc_device *dbc_dev) in send_dbc_parameter() argument
97 struct dbc_user_param *user_param = (struct dbc_user_param *)dbc_dev->payload; in send_dbc_parameter()
103 return send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_SET_PARAMETER); in send_dbc_parameter()
113 return send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_GET_PARAMETER); in send_dbc_parameter()
121 struct psp_dbc_device *dbc_dev = psp->dbc_data; in dbc_dev_destroy() local
123 if (!dbc_dev) in dbc_dev_destroy()
126 misc_deregister(&dbc_dev->char_dev); in dbc_dev_destroy()
127 mutex_destroy(&dbc_dev->ioctl_mutex); in dbc_dev_destroy()
135 struct psp_dbc_device *dbc_dev; in dbc_ioctl() local
140 dbc_dev = psp_master->dbc_data; in dbc_ioctl()
142 guard(mutex)(&dbc_dev->ioctl_mutex); in dbc_ioctl()
146 if (copy_from_user(dbc_dev->payload, argp, sizeof(struct dbc_user_nonce))) in dbc_ioctl()
149 ret = send_dbc_nonce(dbc_dev); in dbc_ioctl()
153 if (copy_to_user(argp, dbc_dev->payload, sizeof(struct dbc_user_nonce))) in dbc_ioctl()
157 if (copy_from_user(dbc_dev->payload, argp, sizeof(struct dbc_user_setuid))) in dbc_ioctl()
160 *dbc_dev->payload_size = dbc_dev->header_size + sizeof(struct dbc_user_setuid); in dbc_ioctl()
161 ret = send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_SET_UID); in dbc_ioctl()
165 if (copy_to_user(argp, dbc_dev->payload, sizeof(struct dbc_user_setuid))) in dbc_ioctl()
169 if (copy_from_user(dbc_dev->payload, argp, sizeof(struct dbc_user_param))) in dbc_ioctl()
172 *dbc_dev->payload_size = dbc_dev->header_size + sizeof(struct dbc_user_param); in dbc_ioctl()
173 ret = send_dbc_parameter(dbc_dev); in dbc_ioctl()
177 if (copy_to_user(argp, dbc_dev->payload, sizeof(struct dbc_user_param))) in dbc_ioctl()
195 struct psp_dbc_device *dbc_dev; in dbc_dev_init() local
198 dbc_dev = devm_kzalloc(dev, sizeof(*dbc_dev), GFP_KERNEL); in dbc_dev_init()
199 if (!dbc_dev) in dbc_dev_init()
203 dbc_dev->mbox = (void *)devm_get_free_pages(dev, GFP_KERNEL | __GFP_ZERO, 0); in dbc_dev_init()
204 if (!dbc_dev->mbox) { in dbc_dev_init()
209 psp->dbc_data = dbc_dev; in dbc_dev_init()
210 dbc_dev->dev = dev; in dbc_dev_init()
211 dbc_dev->psp = psp; in dbc_dev_init()
214 dbc_dev->use_ext = true; in dbc_dev_init()
215 dbc_dev->payload_size = &dbc_dev->mbox->ext_req.header.payload_size; in dbc_dev_init()
216 dbc_dev->result = &dbc_dev->mbox->ext_req.header.status; in dbc_dev_init()
217 dbc_dev->payload = &dbc_dev->mbox->ext_req.buf; in dbc_dev_init()
218 dbc_dev->header_size = sizeof(struct psp_ext_req_buffer_hdr); in dbc_dev_init()
220 dbc_dev->payload_size = &dbc_dev->mbox->pa_req.header.payload_size; in dbc_dev_init()
221 dbc_dev->result = &dbc_dev->mbox->pa_req.header.status; in dbc_dev_init()
222 dbc_dev->payload = &dbc_dev->mbox->pa_req.buf; in dbc_dev_init()
223 dbc_dev->header_size = sizeof(struct psp_req_buffer_hdr); in dbc_dev_init()
226 ret = send_dbc_nonce(dbc_dev); in dbc_dev_init()
228 dev_dbg(dbc_dev->dev, in dbc_dev_init()
232 dev_dbg(dbc_dev->dev, "dynamic boost control is %savailable\n", in dbc_dev_init()
239 dbc_dev->char_dev.minor = MISC_DYNAMIC_MINOR; in dbc_dev_init()
240 dbc_dev->char_dev.name = "dbc"; in dbc_dev_init()
241 dbc_dev->char_dev.fops = &dbc_fops; in dbc_dev_init()
242 dbc_dev->char_dev.mode = 0600; in dbc_dev_init()
243 ret = misc_register(&dbc_dev->char_dev); in dbc_dev_init()
247 mutex_init(&dbc_dev->ioctl_mutex); in dbc_dev_init()
252 devm_free_pages(dev, (unsigned long)dbc_dev->mbox); in dbc_dev_init()
256 devm_kfree(dev, dbc_dev); in dbc_dev_init()