forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
crypto: nx - make platform drivers directly register with crypto
Remove the common 'platform' registration module, and move the crypto compression driver registration into each of the pSeries and PowerNV platform NX 842 drivers. Change the nx-842.c code into simple common functions that each platform driver uses to perform constraints-based buffer changes, i.e. realigning and/or resizing buffers to match the driver's hardware requirements. The common 'platform' module was my mistake to create - since each platform driver will only load/operate when running on its own platform (i.e. a pSeries platform or a PowerNV platform), they can directly register with the crypto subsystem, using the same alg and driver name. This removes unneeded complexity. Signed-off-by: Dan Streetman <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
- Loading branch information
Showing
6 changed files
with
114 additions
and
191 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,6 +26,8 @@ | |
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Dan Streetman <[email protected]>"); | ||
MODULE_DESCRIPTION("842 H/W Compression driver for IBM PowerNV processors"); | ||
MODULE_ALIAS_CRYPTO("842"); | ||
MODULE_ALIAS_CRYPTO("842-nx"); | ||
|
||
#define WORKMEM_ALIGN (CRB_ALIGN) | ||
#define CSB_WAIT_MAX (5000) /* ms */ | ||
|
@@ -581,9 +583,29 @@ static struct nx842_driver nx842_powernv_driver = { | |
.decompress = nx842_powernv_decompress, | ||
}; | ||
|
||
static int nx842_powernv_crypto_init(struct crypto_tfm *tfm) | ||
{ | ||
return nx842_crypto_init(tfm, &nx842_powernv_driver); | ||
} | ||
|
||
static struct crypto_alg nx842_powernv_alg = { | ||
.cra_name = "842", | ||
.cra_driver_name = "842-nx", | ||
.cra_priority = 300, | ||
.cra_flags = CRYPTO_ALG_TYPE_COMPRESS, | ||
.cra_ctxsize = sizeof(struct nx842_crypto_ctx), | ||
.cra_module = THIS_MODULE, | ||
.cra_init = nx842_powernv_crypto_init, | ||
.cra_exit = nx842_crypto_exit, | ||
.cra_u = { .compress = { | ||
.coa_compress = nx842_crypto_compress, | ||
.coa_decompress = nx842_crypto_decompress } } | ||
}; | ||
|
||
static __init int nx842_powernv_init(void) | ||
{ | ||
struct device_node *dn; | ||
int ret; | ||
|
||
/* verify workmem size/align restrictions */ | ||
BUILD_BUG_ON(WORKMEM_ALIGN % CRB_ALIGN); | ||
|
@@ -600,15 +622,16 @@ static __init int nx842_powernv_init(void) | |
if (!nx842_ct) | ||
return -ENODEV; | ||
|
||
if (!nx842_platform_driver_set(&nx842_powernv_driver)) { | ||
ret = crypto_register_alg(&nx842_powernv_alg); | ||
if (ret) { | ||
struct nx842_coproc *coproc, *n; | ||
|
||
list_for_each_entry_safe(coproc, n, &nx842_coprocs, list) { | ||
list_del(&coproc->list); | ||
kfree(coproc); | ||
} | ||
|
||
return -EEXIST; | ||
return ret; | ||
} | ||
|
||
return 0; | ||
|
@@ -619,7 +642,7 @@ static void __exit nx842_powernv_exit(void) | |
{ | ||
struct nx842_coproc *coproc, *n; | ||
|
||
nx842_platform_driver_unset(&nx842_powernv_driver); | ||
crypto_unregister_alg(&nx842_powernv_alg); | ||
|
||
list_for_each_entry_safe(coproc, n, &nx842_coprocs, list) { | ||
list_del(&coproc->list); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,6 +29,8 @@ | |
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Robert Jennings <[email protected]>"); | ||
MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors"); | ||
MODULE_ALIAS_CRYPTO("842"); | ||
MODULE_ALIAS_CRYPTO("842-nx"); | ||
|
||
static struct nx842_constraints nx842_pseries_constraints = { | ||
.alignment = DDE_BUFFER_ALIGN, | ||
|
@@ -957,6 +959,25 @@ static struct nx842_driver nx842_pseries_driver = { | |
.decompress = nx842_pseries_decompress, | ||
}; | ||
|
||
static int nx842_pseries_crypto_init(struct crypto_tfm *tfm) | ||
{ | ||
return nx842_crypto_init(tfm, &nx842_pseries_driver); | ||
} | ||
|
||
static struct crypto_alg nx842_pseries_alg = { | ||
.cra_name = "842", | ||
.cra_driver_name = "842-nx", | ||
.cra_priority = 300, | ||
.cra_flags = CRYPTO_ALG_TYPE_COMPRESS, | ||
.cra_ctxsize = sizeof(struct nx842_crypto_ctx), | ||
.cra_module = THIS_MODULE, | ||
.cra_init = nx842_pseries_crypto_init, | ||
.cra_exit = nx842_crypto_exit, | ||
.cra_u = { .compress = { | ||
.coa_compress = nx842_crypto_compress, | ||
.coa_decompress = nx842_crypto_decompress } } | ||
}; | ||
|
||
static int nx842_probe(struct vio_dev *viodev, | ||
const struct vio_device_id *id) | ||
{ | ||
|
@@ -1002,6 +1023,12 @@ static int nx842_probe(struct vio_dev *viodev, | |
if (ret) | ||
goto error; | ||
|
||
ret = crypto_register_alg(&nx842_pseries_alg); | ||
if (ret) { | ||
dev_err(&viodev->dev, "could not register comp alg: %d\n", ret); | ||
goto error; | ||
} | ||
|
||
rcu_read_lock(); | ||
dev_set_drvdata(&viodev->dev, rcu_dereference(devdata)); | ||
rcu_read_unlock(); | ||
|
@@ -1031,6 +1058,8 @@ static int nx842_remove(struct vio_dev *viodev) | |
pr_info("Removing IBM Power 842 compression device\n"); | ||
sysfs_remove_group(&viodev->dev.kobj, &nx842_attribute_group); | ||
|
||
crypto_unregister_alg(&nx842_pseries_alg); | ||
|
||
spin_lock_irqsave(&devdata_mutex, flags); | ||
old_devdata = rcu_dereference_check(devdata, | ||
lockdep_is_held(&devdata_mutex)); | ||
|
@@ -1083,12 +1112,6 @@ static int __init nx842_pseries_init(void) | |
return ret; | ||
} | ||
|
||
if (!nx842_platform_driver_set(&nx842_pseries_driver)) { | ||
vio_unregister_driver(&nx842_vio_driver); | ||
kfree(new_devdata); | ||
return -EEXIST; | ||
} | ||
|
||
return 0; | ||
} | ||
|
||
|
@@ -1099,7 +1122,8 @@ static void __exit nx842_pseries_exit(void) | |
struct nx842_devdata *old_devdata; | ||
unsigned long flags; | ||
|
||
nx842_platform_driver_unset(&nx842_pseries_driver); | ||
crypto_unregister_alg(&nx842_pseries_alg); | ||
|
||
spin_lock_irqsave(&devdata_mutex, flags); | ||
old_devdata = rcu_dereference_check(devdata, | ||
lockdep_is_held(&devdata_mutex)); | ||
|
Oops, something went wrong.