• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/staging/pohmelfs/

Lines Matching refs:psb

24 static struct crypto_hash *pohmelfs_init_hash(struct pohmelfs_sb *psb)
29 hash = crypto_alloc_hash(psb->hash_string, 0, CRYPTO_ALG_ASYNC);
33 __func__, psb->idx, psb->hash_string, err);
37 psb->crypto_attached_size = crypto_hash_digestsize(hash);
39 if (!psb->hash_keysize)
42 err = crypto_hash_setkey(hash, psb->hash_key, psb->hash_keysize);
45 __func__, psb->idx, psb->hash_string, err);
57 static struct crypto_ablkcipher *pohmelfs_init_cipher(struct pohmelfs_sb *psb)
62 if (!psb->cipher_keysize)
65 cipher = crypto_alloc_ablkcipher(psb->cipher_string, 0, 0);
69 __func__, psb->idx, psb->cipher_string, err);
75 err = crypto_ablkcipher_setkey(cipher, psb->cipher_key, psb->cipher_keysize);
78 __func__, psb->idx, psb->cipher_string, err);
90 int pohmelfs_crypto_engine_init(struct pohmelfs_crypto_engine *e, struct pohmelfs_sb *psb)
103 if (psb->hash_string) {
104 e->hash = pohmelfs_init_hash(psb);
112 if (psb->cipher_string) {
113 e->cipher = pohmelfs_init_cipher(psb);
278 void *data = t->iovec.iov_base + sizeof(struct netfs_cmd) + t->psb->crypto_attached_size;
279 unsigned int size = t->iovec.iov_len - sizeof(struct netfs_cmd) - t->psb->crypto_attached_size;
397 for (i = 0; i < tc->psb->crypto_attached_size; ++i)
414 static int pohmelfs_crypto_pages_alloc(struct pohmelfs_crypto_engine *e, struct pohmelfs_sb *psb)
418 e->pages = kmalloc(psb->trans_max_pages * sizeof(struct page *), GFP_KERNEL);
422 for (i = 0; i < psb->trans_max_pages; ++i) {
441 struct pohmelfs_sb *psb = t->psb;
446 mutex_lock(&psb->crypto_thread_lock);
448 psb->crypto_thread_num--;
449 mutex_unlock(&psb->crypto_thread_lock);
456 static int pohmelfs_crypto_finish(struct netfs_trans *t, struct pohmelfs_sb *psb, int err)
462 err = netfs_trans_finish_send(t, psb);
472 struct pohmelfs_sb *psb = th->psb;
477 mutex_lock(&psb->crypto_thread_lock);
478 list_move_tail(&th->thread_entry, &psb->crypto_ready_list);
479 mutex_unlock(&psb->crypto_thread_lock);
480 wake_up(&psb->wait);
511 pohmelfs_crypto_finish(trans, t->psb, err);
562 static void pohmelfs_crypto_flush(struct pohmelfs_sb *psb, struct list_head *head)
567 mutex_lock(&psb->crypto_thread_lock);
572 mutex_unlock(&psb->crypto_thread_lock);
579 static void pohmelfs_sys_crypto_exit(struct pohmelfs_sb *psb)
581 while (!list_empty(&psb->crypto_active_list) || !list_empty(&psb->crypto_ready_list)) {
582 dprintk("%s: crypto_thread_num: %u.\n", __func__, psb->crypto_thread_num);
583 pohmelfs_crypto_flush(psb, &psb->crypto_active_list);
584 pohmelfs_crypto_flush(psb, &psb->crypto_ready_list);
588 static int pohmelfs_sys_crypto_init(struct pohmelfs_sb *psb)
596 list_for_each_entry(c, &psb->state_list, config_entry) {
599 err = pohmelfs_crypto_engine_init(&st->eng, psb);
607 for (i = 0; i < psb->crypto_thread_num; ++i) {
615 t->psb = psb;
619 err = pohmelfs_crypto_engine_init(&t->eng, psb);
623 err = pohmelfs_crypto_pages_alloc(&t->eng, psb);
628 "pohmelfs-crypto-%d-%d", psb->idx, i);
636 psb->crypto_align_size = crypto_ablkcipher_blocksize(t->eng.cipher);
638 mutex_lock(&psb->crypto_thread_lock);
639 list_add_tail(&t->thread_entry, &psb->crypto_ready_list);
640 mutex_unlock(&psb->crypto_thread_lock);
643 psb->crypto_thread_num = i;
649 list_for_each_entry(c, &psb->state_list, config_entry) {
654 pohmelfs_sys_crypto_exit(psb);
658 void pohmelfs_crypto_exit(struct pohmelfs_sb *psb)
660 pohmelfs_sys_crypto_exit(psb);
662 kfree(psb->hash_string);
663 kfree(psb->cipher_string);
669 struct pohmelfs_sb *psb = private;
671 psb->flags = -err;
674 wake_up(&psb->wait);
679 static int pohmelfs_crypto_init_handshake(struct pohmelfs_sb *psb)
688 psb->cipher_strlen + psb->hash_strlen + 2; /* 0 bytes */
690 t = netfs_trans_alloc(psb, size, 0, 0);
695 t->private = psb;
711 cap->hash_strlen = psb->hash_strlen;
713 sprintf(str, "%s", psb->hash_string);
717 cap->cipher_strlen = psb->cipher_strlen;
718 cap->cipher_keysize = psb->cipher_keysize;
720 sprintf(str, "%s", psb->cipher_string);
724 psb->flags = ~0;
725 err = netfs_trans_finish(t, psb);
729 err = wait_event_interruptible_timeout(psb->wait, (psb->flags != ~0),
730 psb->wait_on_page_timeout);
734 err = -psb->flags;
737 psb->perform_crypto = 1;
738 psb->flags = 0;
756 int pohmelfs_crypto_init(struct pohmelfs_sb *psb)
760 if (!psb->cipher_string && !psb->hash_string)
763 err = pohmelfs_crypto_init_handshake(psb);
767 err = pohmelfs_sys_crypto_init(psb);
774 static int pohmelfs_crypto_thread_get(struct pohmelfs_sb *psb,
781 err = wait_event_interruptible_timeout(psb->wait,
782 !list_empty(&psb->crypto_ready_list),
783 psb->wait_on_page_timeout);
787 mutex_lock(&psb->crypto_thread_lock);
788 if (!list_empty(&psb->crypto_ready_list)) {
789 t = list_entry(psb->crypto_ready_list.prev,
794 &psb->crypto_active_list);
800 mutex_unlock(&psb->crypto_thread_lock);
817 int pohmelfs_trans_crypt(struct netfs_trans *trans, struct pohmelfs_sb *psb)
819 if ((!psb->hash_string && !psb->cipher_string) || !psb->perform_crypto) {
821 return pohmelfs_crypto_finish(trans, psb, 0);
824 return pohmelfs_crypto_thread_get(psb, pohmelfs_trans_crypt_action, trans);
838 memcpy(t->eng.data, act->e->data, t->psb->crypto_attached_size);