/** * zcrypt_card_unregister(): Unregister a crypto card device. * @zc: Pointer to crypto card device * * Unregister a crypto card device. */ void zcrypt_card_unregister(struct zcrypt_card *zc) { ZCRYPT_DBF(DBF_INFO, "card=%02x unregister\n", zc->card->id); spin_lock(&zcrypt_list_lock); list_del_init(&zc->list); spin_unlock(&zcrypt_list_lock); sysfs_remove_group(&zc->card->ap_dev.device.kobj, &zcrypt_card_attr_group); }
/** * Process a rescan of the transport layer. * * Returns 1, if the rescan has been processed, otherwise 0. */ static inline int zcrypt_process_rescan(void) { if (atomic_read(&zcrypt_rescan_req)) { atomic_set(&zcrypt_rescan_req, 0); atomic_inc(&zcrypt_rescan_count); ap_bus_force_rescan(); ZCRYPT_DBF(DBF_INFO, "rescan count=%07d", atomic_inc_return(&zcrypt_rescan_count)); return 1; } return 0; }
/** * zcrypt_card_register() - Register a crypto card device. * @zc: Pointer to a crypto card device * * Register a crypto card device. Returns 0 if successful. */ int zcrypt_card_register(struct zcrypt_card *zc) { int rc; rc = sysfs_create_group(&zc->card->ap_dev.device.kobj, &zcrypt_card_attr_group); if (rc) return rc; spin_lock(&zcrypt_list_lock); list_add_tail(&zc->list, &zcrypt_card_list); spin_unlock(&zcrypt_list_lock); zc->online = 1; ZCRYPT_DBF(DBF_INFO, "card=%02x register online=1\n", zc->card->id); return rc; }
static ssize_t zcrypt_card_online_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct zcrypt_card *zc = to_ap_card(dev)->private; struct zcrypt_queue *zq; int online, id; if (sscanf(buf, "%d\n", &online) != 1 || online < 0 || online > 1) return -EINVAL; zc->online = online; id = zc->card->id; ZCRYPT_DBF(DBF_INFO, "card=%02x online=%d\n", id, online); spin_lock(&zcrypt_list_lock); list_for_each_entry(zq, &zc->zqueues, list) zcrypt_queue_force_online(zq, online); spin_unlock(&zcrypt_list_lock); return count; }