rwtm 76 drivers/firmware/turris-mox-rwtm.c struct mox_rwtm *rwtm; rwtm 79 drivers/firmware/turris-mox-rwtm.c static inline struct kobject *rwtm_to_kobj(struct mox_rwtm *rwtm) rwtm 81 drivers/firmware/turris-mox-rwtm.c return &rwtm->kobj->kobj; rwtm 86 drivers/firmware/turris-mox-rwtm.c return container_of(kobj, struct mox_kobject, kobj)->rwtm; rwtm 99 drivers/firmware/turris-mox-rwtm.c static int mox_kobj_create(struct mox_rwtm *rwtm) rwtm 101 drivers/firmware/turris-mox-rwtm.c rwtm->kobj = kzalloc(sizeof(*rwtm->kobj), GFP_KERNEL); rwtm 102 drivers/firmware/turris-mox-rwtm.c if (!rwtm->kobj) rwtm 105 drivers/firmware/turris-mox-rwtm.c kobject_init(rwtm_to_kobj(rwtm), &mox_kobj_ktype); rwtm 106 drivers/firmware/turris-mox-rwtm.c if (kobject_add(rwtm_to_kobj(rwtm), firmware_kobj, "turris-mox-rwtm")) { rwtm 107 drivers/firmware/turris-mox-rwtm.c kobject_put(rwtm_to_kobj(rwtm)); rwtm 111 drivers/firmware/turris-mox-rwtm.c rwtm->kobj->rwtm = rwtm; rwtm 121 drivers/firmware/turris-mox-rwtm.c struct mox_rwtm *rwtm = to_rwtm(kobj); \ rwtm 122 drivers/firmware/turris-mox-rwtm.c if (!rwtm->has_##cat) \ rwtm 124 drivers/firmware/turris-mox-rwtm.c return sprintf(buf, format, rwtm->name); \ rwtm 158 drivers/firmware/turris-mox-rwtm.c struct mox_rwtm *rwtm = dev_get_drvdata(cl->dev); rwtm 161 drivers/firmware/turris-mox-rwtm.c rwtm->reply = *msg; rwtm 162 drivers/firmware/turris-mox-rwtm.c complete(&rwtm->cmd_done); rwtm 175 drivers/firmware/turris-mox-rwtm.c static int mox_get_board_info(struct mox_rwtm *rwtm) rwtm 178 drivers/firmware/turris-mox-rwtm.c struct armada_37xx_rwtm_rx_msg *reply = &rwtm->reply; rwtm 182 drivers/firmware/turris-mox-rwtm.c ret = mbox_send_message(rwtm->mbox, &msg); rwtm 186 drivers/firmware/turris-mox-rwtm.c ret = wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2); rwtm 194 drivers/firmware/turris-mox-rwtm.c dev_warn(rwtm->dev, rwtm 197 drivers/firmware/turris-mox-rwtm.c rwtm->serial_number = reply->status[1]; rwtm 198 drivers/firmware/turris-mox-rwtm.c rwtm->serial_number <<= 32; rwtm 199 drivers/firmware/turris-mox-rwtm.c rwtm->serial_number |= reply->status[0]; rwtm 200 drivers/firmware/turris-mox-rwtm.c rwtm->board_version = reply->status[2]; rwtm 201 drivers/firmware/turris-mox-rwtm.c rwtm->ram_size = reply->status[3]; rwtm 202 drivers/firmware/turris-mox-rwtm.c reply_to_mac_addr(rwtm->mac_address1, reply->status[4], rwtm 204 drivers/firmware/turris-mox-rwtm.c reply_to_mac_addr(rwtm->mac_address2, reply->status[6], rwtm 206 drivers/firmware/turris-mox-rwtm.c rwtm->has_board_info = 1; rwtm 209 drivers/firmware/turris-mox-rwtm.c rwtm->serial_number); rwtm 210 drivers/firmware/turris-mox-rwtm.c pr_info(" board version %i\n", rwtm->board_version); rwtm 211 drivers/firmware/turris-mox-rwtm.c pr_info(" burned RAM size %i MiB\n", rwtm->ram_size); rwtm 215 drivers/firmware/turris-mox-rwtm.c ret = mbox_send_message(rwtm->mbox, &msg); rwtm 219 drivers/firmware/turris-mox-rwtm.c ret = wait_for_completion_timeout(&rwtm->cmd_done, HZ / 2); rwtm 227 drivers/firmware/turris-mox-rwtm.c dev_warn(rwtm->dev, "Board has no public key burned!\n"); rwtm 231 drivers/firmware/turris-mox-rwtm.c rwtm->has_pubkey = 1; rwtm 232 drivers/firmware/turris-mox-rwtm.c sprintf(rwtm->pubkey, rwtm 243 drivers/firmware/turris-mox-rwtm.c struct mox_rwtm *rwtm = (struct mox_rwtm *) rng->priv; rwtm 252 drivers/firmware/turris-mox-rwtm.c msg.args[1] = rwtm->buf_phys; rwtm 256 drivers/firmware/turris-mox-rwtm.c if (!mutex_trylock(&rwtm->busy)) rwtm 259 drivers/firmware/turris-mox-rwtm.c mutex_lock(&rwtm->busy); rwtm 262 drivers/firmware/turris-mox-rwtm.c ret = mbox_send_message(rwtm->mbox, &msg); rwtm 266 drivers/firmware/turris-mox-rwtm.c ret = wait_for_completion_interruptible(&rwtm->cmd_done); rwtm 270 drivers/firmware/turris-mox-rwtm.c ret = mox_get_status(MBOX_CMD_GET_RANDOM, rwtm->reply.retval); rwtm 274 drivers/firmware/turris-mox-rwtm.c memcpy(data, rwtm->buf, max); rwtm 278 drivers/firmware/turris-mox-rwtm.c mutex_unlock(&rwtm->busy); rwtm 284 drivers/firmware/turris-mox-rwtm.c struct mox_rwtm *rwtm; rwtm 288 drivers/firmware/turris-mox-rwtm.c rwtm = devm_kzalloc(dev, sizeof(*rwtm), GFP_KERNEL); rwtm 289 drivers/firmware/turris-mox-rwtm.c if (!rwtm) rwtm 292 drivers/firmware/turris-mox-rwtm.c rwtm->dev = dev; rwtm 293 drivers/firmware/turris-mox-rwtm.c rwtm->buf = dmam_alloc_coherent(dev, PAGE_SIZE, &rwtm->buf_phys, rwtm 295 drivers/firmware/turris-mox-rwtm.c if (!rwtm->buf) rwtm 298 drivers/firmware/turris-mox-rwtm.c ret = mox_kobj_create(rwtm); rwtm 304 drivers/firmware/turris-mox-rwtm.c ret = sysfs_create_files(rwtm_to_kobj(rwtm), mox_rwtm_attrs); rwtm 310 drivers/firmware/turris-mox-rwtm.c platform_set_drvdata(pdev, rwtm); rwtm 312 drivers/firmware/turris-mox-rwtm.c mutex_init(&rwtm->busy); rwtm 314 drivers/firmware/turris-mox-rwtm.c rwtm->mbox_client.dev = dev; rwtm 315 drivers/firmware/turris-mox-rwtm.c rwtm->mbox_client.rx_callback = mox_rwtm_rx_callback; rwtm 317 drivers/firmware/turris-mox-rwtm.c rwtm->mbox = mbox_request_channel(&rwtm->mbox_client, 0); rwtm 318 drivers/firmware/turris-mox-rwtm.c if (IS_ERR(rwtm->mbox)) { rwtm 319 drivers/firmware/turris-mox-rwtm.c ret = PTR_ERR(rwtm->mbox); rwtm 326 drivers/firmware/turris-mox-rwtm.c init_completion(&rwtm->cmd_done); rwtm 328 drivers/firmware/turris-mox-rwtm.c ret = mox_get_board_info(rwtm); rwtm 332 drivers/firmware/turris-mox-rwtm.c rwtm->hwrng.name = DRIVER_NAME "_hwrng"; rwtm 333 drivers/firmware/turris-mox-rwtm.c rwtm->hwrng.read = mox_hwrng_read; rwtm 334 drivers/firmware/turris-mox-rwtm.c rwtm->hwrng.priv = (unsigned long) rwtm; rwtm 335 drivers/firmware/turris-mox-rwtm.c rwtm->hwrng.quality = 1024; rwtm 337 drivers/firmware/turris-mox-rwtm.c ret = devm_hwrng_register(dev, &rwtm->hwrng); rwtm 346 drivers/firmware/turris-mox-rwtm.c mbox_free_channel(rwtm->mbox); rwtm 348 drivers/firmware/turris-mox-rwtm.c sysfs_remove_files(rwtm_to_kobj(rwtm), mox_rwtm_attrs); rwtm 350 drivers/firmware/turris-mox-rwtm.c kobject_put(rwtm_to_kobj(rwtm)); rwtm 356 drivers/firmware/turris-mox-rwtm.c struct mox_rwtm *rwtm = platform_get_drvdata(pdev); rwtm 358 drivers/firmware/turris-mox-rwtm.c sysfs_remove_files(rwtm_to_kobj(rwtm), mox_rwtm_attrs); rwtm 359 drivers/firmware/turris-mox-rwtm.c kobject_put(rwtm_to_kobj(rwtm)); rwtm 360 drivers/firmware/turris-mox-rwtm.c mbox_free_channel(rwtm->mbox);