Lines Matching refs:dbc_dev

41 static inline int send_dbc_cmd_thru_ext(struct psp_dbc_device *dbc_dev, int msg)  in send_dbc_cmd_thru_ext()  argument
43 dbc_dev->mbox->ext_req.header.sub_cmd_id = msg; in send_dbc_cmd_thru_ext()
45 return psp_extended_mailbox_cmd(dbc_dev->psp, in send_dbc_cmd_thru_ext()
47 (struct psp_ext_request *)dbc_dev->mbox); in send_dbc_cmd_thru_ext()
50 static inline int send_dbc_cmd_thru_pa(struct psp_dbc_device *dbc_dev, int msg) in send_dbc_cmd_thru_pa() argument
53 (struct psp_request *)dbc_dev->mbox); in send_dbc_cmd_thru_pa()
56 static int send_dbc_cmd(struct psp_dbc_device *dbc_dev, int msg) in send_dbc_cmd() argument
60 *dbc_dev->result = 0; in send_dbc_cmd()
61 ret = dbc_dev->use_ext ? send_dbc_cmd_thru_ext(dbc_dev, msg) : in send_dbc_cmd()
62 send_dbc_cmd_thru_pa(dbc_dev, msg); in send_dbc_cmd()
66 dev_dbg(dbc_dev->dev, in send_dbc_cmd()
68 msg, *dbc_dev->result); in send_dbc_cmd()
71 if (*dbc_dev->result == error_codes[i].psp) in send_dbc_cmd()
79 static int send_dbc_nonce(struct psp_dbc_device *dbc_dev) in send_dbc_nonce() argument
83 *dbc_dev->payload_size = dbc_dev->header_size + sizeof(struct dbc_user_nonce); in send_dbc_nonce()
84 ret = send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_GET_NONCE); in send_dbc_nonce()
86 dev_dbg(dbc_dev->dev, "retrying get nonce\n"); in send_dbc_nonce()
87 ret = send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_GET_NONCE); in send_dbc_nonce()
93 static int send_dbc_parameter(struct psp_dbc_device *dbc_dev) in send_dbc_parameter() argument
95 struct dbc_user_param *user_param = (struct dbc_user_param *)dbc_dev->payload; in send_dbc_parameter()
101 return send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_SET_PARAMETER); in send_dbc_parameter()
111 return send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_GET_PARAMETER); in send_dbc_parameter()
119 struct psp_dbc_device *dbc_dev = psp->dbc_data; in dbc_dev_destroy() local
121 if (!dbc_dev) in dbc_dev_destroy()
124 misc_deregister(&dbc_dev->char_dev); in dbc_dev_destroy()
125 mutex_destroy(&dbc_dev->ioctl_mutex); in dbc_dev_destroy()
133 struct psp_dbc_device *dbc_dev; in dbc_ioctl() local
138 dbc_dev = psp_master->dbc_data; in dbc_ioctl()
140 mutex_lock(&dbc_dev->ioctl_mutex); in dbc_ioctl()
144 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()
159 if (copy_from_user(dbc_dev->payload, argp, sizeof(struct dbc_user_setuid))) { in dbc_ioctl()
164 *dbc_dev->payload_size = dbc_dev->header_size + sizeof(struct dbc_user_setuid); in dbc_ioctl()
165 ret = send_dbc_cmd(dbc_dev, PSP_DYNAMIC_BOOST_SET_UID); in dbc_ioctl()
169 if (copy_to_user(argp, dbc_dev->payload, sizeof(struct dbc_user_setuid))) { in dbc_ioctl()
175 if (copy_from_user(dbc_dev->payload, argp, sizeof(struct dbc_user_param))) { in dbc_ioctl()
180 *dbc_dev->payload_size = dbc_dev->header_size + sizeof(struct dbc_user_param); in dbc_ioctl()
181 ret = send_dbc_parameter(dbc_dev); in dbc_ioctl()
185 if (copy_to_user(argp, dbc_dev->payload, sizeof(struct dbc_user_param))) { in dbc_ioctl()
195 mutex_unlock(&dbc_dev->ioctl_mutex); in dbc_ioctl()
208 struct psp_dbc_device *dbc_dev; in dbc_dev_init() local
211 dbc_dev = devm_kzalloc(dev, sizeof(*dbc_dev), GFP_KERNEL); in dbc_dev_init()
212 if (!dbc_dev) in dbc_dev_init()
216 dbc_dev->mbox = (void *)devm_get_free_pages(dev, GFP_KERNEL | __GFP_ZERO, 0); in dbc_dev_init()
217 if (!dbc_dev->mbox) { in dbc_dev_init()
222 psp->dbc_data = dbc_dev; in dbc_dev_init()
223 dbc_dev->dev = dev; in dbc_dev_init()
224 dbc_dev->psp = psp; in dbc_dev_init()
227 dbc_dev->use_ext = true; in dbc_dev_init()
228 dbc_dev->payload_size = &dbc_dev->mbox->ext_req.header.payload_size; in dbc_dev_init()
229 dbc_dev->result = &dbc_dev->mbox->ext_req.header.status; in dbc_dev_init()
230 dbc_dev->payload = &dbc_dev->mbox->ext_req.buf; in dbc_dev_init()
231 dbc_dev->header_size = sizeof(struct psp_ext_req_buffer_hdr); in dbc_dev_init()
233 dbc_dev->payload_size = &dbc_dev->mbox->pa_req.header.payload_size; in dbc_dev_init()
234 dbc_dev->result = &dbc_dev->mbox->pa_req.header.status; in dbc_dev_init()
235 dbc_dev->payload = &dbc_dev->mbox->pa_req.buf; in dbc_dev_init()
236 dbc_dev->header_size = sizeof(struct psp_req_buffer_hdr); in dbc_dev_init()
239 ret = send_dbc_nonce(dbc_dev); in dbc_dev_init()
241 dev_dbg(dbc_dev->dev, in dbc_dev_init()
245 dev_dbg(dbc_dev->dev, "dynamic boost control is %savailable\n", in dbc_dev_init()
252 dbc_dev->char_dev.minor = MISC_DYNAMIC_MINOR; in dbc_dev_init()
253 dbc_dev->char_dev.name = "dbc"; in dbc_dev_init()
254 dbc_dev->char_dev.fops = &dbc_fops; in dbc_dev_init()
255 dbc_dev->char_dev.mode = 0600; in dbc_dev_init()
256 ret = misc_register(&dbc_dev->char_dev); in dbc_dev_init()
260 mutex_init(&dbc_dev->ioctl_mutex); in dbc_dev_init()
265 devm_free_pages(dev, (unsigned long)dbc_dev->mbox); in dbc_dev_init()
269 devm_kfree(dev, dbc_dev); in dbc_dev_init()