diff options
Diffstat (limited to 'arch')
62 files changed, 2723 insertions, 1262 deletions
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index 1533d3ecd7a0..f6f3689a86ee 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
@@ -195,7 +195,7 @@ static int leds_shutdown(struct sys_device *dev) | |||
195 | } | 195 | } |
196 | 196 | ||
197 | static struct sysdev_class leds_sysclass = { | 197 | static struct sysdev_class leds_sysclass = { |
198 | set_kset_name("leds"), | 198 | .name = "leds", |
199 | .shutdown = leds_shutdown, | 199 | .shutdown = leds_shutdown, |
200 | .suspend = leds_suspend, | 200 | .suspend = leds_suspend, |
201 | .resume = leds_resume, | 201 | .resume = leds_resume, |
@@ -369,7 +369,7 @@ static int timer_resume(struct sys_device *dev) | |||
369 | #endif | 369 | #endif |
370 | 370 | ||
371 | static struct sysdev_class timer_sysclass = { | 371 | static struct sysdev_class timer_sysclass = { |
372 | set_kset_name("timer"), | 372 | .name = "timer", |
373 | .suspend = timer_suspend, | 373 | .suspend = timer_suspend, |
374 | .resume = timer_resume, | 374 | .resume = timer_resume, |
375 | }; | 375 | }; |
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index 72280754354d..df37e93c6fc9 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c | |||
@@ -214,7 +214,7 @@ static int irq_resume(struct sys_device *dev) | |||
214 | #endif | 214 | #endif |
215 | 215 | ||
216 | static struct sysdev_class irq_class = { | 216 | static struct sysdev_class irq_class = { |
217 | set_kset_name("irq"), | 217 | .name = "irq", |
218 | .suspend = irq_suspend, | 218 | .suspend = irq_suspend, |
219 | .resume = irq_resume, | 219 | .resume = irq_resume, |
220 | }; | 220 | }; |
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index 3bf01e28df33..d9805e3d9304 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c | |||
@@ -69,14 +69,14 @@ static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE]; | |||
69 | 69 | ||
70 | static unsigned short enable_dyn_sleep = 1; | 70 | static unsigned short enable_dyn_sleep = 1; |
71 | 71 | ||
72 | static ssize_t omap_pm_sleep_while_idle_show(struct kset *kset, char *buf) | 72 | static ssize_t idle_show(struct kobject *kobj, struct kobj_attribute *attr, |
73 | char *buf) | ||
73 | { | 74 | { |
74 | return sprintf(buf, "%hu\n", enable_dyn_sleep); | 75 | return sprintf(buf, "%hu\n", enable_dyn_sleep); |
75 | } | 76 | } |
76 | 77 | ||
77 | static ssize_t omap_pm_sleep_while_idle_store(struct kset *kset, | 78 | static ssize_t idle_store(struct kobject *kobj, struct kobj_attribute *attr, |
78 | const char * buf, | 79 | const char * buf, size_t n) |
79 | size_t n) | ||
80 | { | 80 | { |
81 | unsigned short value; | 81 | unsigned short value; |
82 | if (sscanf(buf, "%hu", &value) != 1 || | 82 | if (sscanf(buf, "%hu", &value) != 1 || |
@@ -88,16 +88,9 @@ static ssize_t omap_pm_sleep_while_idle_store(struct kset *kset, | |||
88 | return n; | 88 | return n; |
89 | } | 89 | } |
90 | 90 | ||
91 | static struct subsys_attribute sleep_while_idle_attr = { | 91 | static struct kobj_attribute sleep_while_idle_attr = |
92 | .attr = { | 92 | __ATTR(sleep_while_idle, 0644, idle_show, idle_store); |
93 | .name = __stringify(sleep_while_idle), | ||
94 | .mode = 0644, | ||
95 | }, | ||
96 | .show = omap_pm_sleep_while_idle_show, | ||
97 | .store = omap_pm_sleep_while_idle_store, | ||
98 | }; | ||
99 | 93 | ||
100 | extern struct kset power_subsys; | ||
101 | static void (*omap_sram_idle)(void) = NULL; | 94 | static void (*omap_sram_idle)(void) = NULL; |
102 | static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL; | 95 | static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL; |
103 | 96 | ||
@@ -726,9 +719,9 @@ static int __init omap_pm_init(void) | |||
726 | omap_pm_init_proc(); | 719 | omap_pm_init_proc(); |
727 | #endif | 720 | #endif |
728 | 721 | ||
729 | error = subsys_create_file(&power_subsys, &sleep_while_idle_attr); | 722 | error = sysfs_create_file(power_kobj, &sleep_while_idle_attr); |
730 | if (error) | 723 | if (error) |
731 | printk(KERN_ERR "subsys_create_file failed: %d\n", error); | 724 | printk(KERN_ERR "sysfs_create_file failed: %d\n", error); |
732 | 725 | ||
733 | if (cpu_is_omap16xx()) { | 726 | if (cpu_is_omap16xx()) { |
734 | /* configure LOW_PWR pin */ | 727 | /* configure LOW_PWR pin */ |
diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c index 177664ccb2e2..a16349272f54 100644 --- a/arch/arm/mach-pxa/cm-x270.c +++ b/arch/arm/mach-pxa/cm-x270.c | |||
@@ -566,7 +566,7 @@ static int cmx270_resume(struct sys_device *dev) | |||
566 | } | 566 | } |
567 | 567 | ||
568 | static struct sysdev_class cmx270_pm_sysclass = { | 568 | static struct sysdev_class cmx270_pm_sysclass = { |
569 | set_kset_name("pm"), | 569 | .name = "pm", |
570 | .resume = cmx270_resume, | 570 | .resume = cmx270_resume, |
571 | .suspend = cmx270_suspend, | 571 | .suspend = cmx270_suspend, |
572 | }; | 572 | }; |
diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c index 26116440a7c9..78ebad063cba 100644 --- a/arch/arm/mach-pxa/lpd270.c +++ b/arch/arm/mach-pxa/lpd270.c | |||
@@ -122,7 +122,7 @@ static int lpd270_irq_resume(struct sys_device *dev) | |||
122 | } | 122 | } |
123 | 123 | ||
124 | static struct sysdev_class lpd270_irq_sysclass = { | 124 | static struct sysdev_class lpd270_irq_sysclass = { |
125 | set_kset_name("cpld_irq"), | 125 | .name = "cpld_irq", |
126 | .resume = lpd270_irq_resume, | 126 | .resume = lpd270_irq_resume, |
127 | }; | 127 | }; |
128 | 128 | ||
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index 011a1a72b61c..1d3112dc629e 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -126,7 +126,7 @@ static int lubbock_irq_resume(struct sys_device *dev) | |||
126 | } | 126 | } |
127 | 127 | ||
128 | static struct sysdev_class lubbock_irq_sysclass = { | 128 | static struct sysdev_class lubbock_irq_sysclass = { |
129 | set_kset_name("cpld_irq"), | 129 | .name = "cpld_irq", |
130 | .resume = lubbock_irq_resume, | 130 | .resume = lubbock_irq_resume, |
131 | }; | 131 | }; |
132 | 132 | ||
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index a4bc3483cbb3..41d8c6cea62b 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -120,7 +120,7 @@ static int mainstone_irq_resume(struct sys_device *dev) | |||
120 | } | 120 | } |
121 | 121 | ||
122 | static struct sysdev_class mainstone_irq_sysclass = { | 122 | static struct sysdev_class mainstone_irq_sysclass = { |
123 | set_kset_name("cpld_irq"), | 123 | .name = "cpld_irq", |
124 | .resume = mainstone_irq_resume, | 124 | .resume = mainstone_irq_resume, |
125 | }; | 125 | }; |
126 | 126 | ||
diff --git a/arch/arm/mach-s3c2410/s3c2410.c b/arch/arm/mach-s3c2410/s3c2410.c index e580303cb0ab..0e7991940f81 100644 --- a/arch/arm/mach-s3c2410/s3c2410.c +++ b/arch/arm/mach-s3c2410/s3c2410.c | |||
@@ -100,7 +100,7 @@ void __init s3c2410_init_clocks(int xtal) | |||
100 | } | 100 | } |
101 | 101 | ||
102 | struct sysdev_class s3c2410_sysclass = { | 102 | struct sysdev_class s3c2410_sysclass = { |
103 | set_kset_name("s3c2410-core"), | 103 | .name = "s3c2410-core", |
104 | }; | 104 | }; |
105 | 105 | ||
106 | static struct sys_device s3c2410_sysdev = { | 106 | static struct sys_device s3c2410_sysdev = { |
diff --git a/arch/arm/mach-s3c2412/s3c2412.c b/arch/arm/mach-s3c2412/s3c2412.c index 4f92a1562d77..265cd3f567a3 100644 --- a/arch/arm/mach-s3c2412/s3c2412.c +++ b/arch/arm/mach-s3c2412/s3c2412.c | |||
@@ -196,7 +196,7 @@ void __init s3c2412_init_clocks(int xtal) | |||
196 | */ | 196 | */ |
197 | 197 | ||
198 | struct sysdev_class s3c2412_sysclass = { | 198 | struct sysdev_class s3c2412_sysclass = { |
199 | set_kset_name("s3c2412-core"), | 199 | .name = "s3c2412-core", |
200 | }; | 200 | }; |
201 | 201 | ||
202 | static int __init s3c2412_core_init(void) | 202 | static int __init s3c2412_core_init(void) |
diff --git a/arch/arm/mach-s3c2440/mach-osiris.c b/arch/arm/mach-s3c2440/mach-osiris.c index c326983f4a8f..78af7664988b 100644 --- a/arch/arm/mach-s3c2440/mach-osiris.c +++ b/arch/arm/mach-s3c2440/mach-osiris.c | |||
@@ -312,7 +312,7 @@ static int osiris_pm_resume(struct sys_device *sd) | |||
312 | #endif | 312 | #endif |
313 | 313 | ||
314 | static struct sysdev_class osiris_pm_sysclass = { | 314 | static struct sysdev_class osiris_pm_sysclass = { |
315 | set_kset_name("mach-osiris"), | 315 | .name = "mach-osiris", |
316 | .suspend = osiris_pm_suspend, | 316 | .suspend = osiris_pm_suspend, |
317 | .resume = osiris_pm_resume, | 317 | .resume = osiris_pm_resume, |
318 | }; | 318 | }; |
diff --git a/arch/arm/mach-s3c2443/s3c2443.c b/arch/arm/mach-s3c2443/s3c2443.c index 8d8117158d23..9ce490560af9 100644 --- a/arch/arm/mach-s3c2443/s3c2443.c +++ b/arch/arm/mach-s3c2443/s3c2443.c | |||
@@ -43,7 +43,7 @@ static struct map_desc s3c2443_iodesc[] __initdata = { | |||
43 | }; | 43 | }; |
44 | 44 | ||
45 | struct sysdev_class s3c2443_sysclass = { | 45 | struct sysdev_class s3c2443_sysclass = { |
46 | set_kset_name("s3c2443-core"), | 46 | .name = "s3c2443-core", |
47 | }; | 47 | }; |
48 | 48 | ||
49 | static struct sys_device s3c2443_sysdev = { | 49 | static struct sys_device s3c2443_sysdev = { |
diff --git a/arch/arm/mach-sa1100/irq.c b/arch/arm/mach-sa1100/irq.c index edf3347d9c5b..3dc17d7bf38e 100644 --- a/arch/arm/mach-sa1100/irq.c +++ b/arch/arm/mach-sa1100/irq.c | |||
@@ -283,7 +283,7 @@ static int sa1100irq_resume(struct sys_device *dev) | |||
283 | } | 283 | } |
284 | 284 | ||
285 | static struct sysdev_class sa1100irq_sysclass = { | 285 | static struct sysdev_class sa1100irq_sysclass = { |
286 | set_kset_name("sa11x0-irq"), | 286 | .name = "sa11x0-irq", |
287 | .suspend = sa1100irq_suspend, | 287 | .suspend = sa1100irq_suspend, |
288 | .resume = sa1100irq_resume, | 288 | .resume = sa1100irq_resume, |
289 | }; | 289 | }; |
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c index a9de727c9327..0a5cf3a6438b 100644 --- a/arch/arm/oprofile/common.c +++ b/arch/arm/oprofile/common.c | |||
@@ -96,7 +96,7 @@ static int op_arm_resume(struct sys_device *dev) | |||
96 | } | 96 | } |
97 | 97 | ||
98 | static struct sysdev_class oprofile_sysclass = { | 98 | static struct sysdev_class oprofile_sysclass = { |
99 | set_kset_name("oprofile"), | 99 | .name = "oprofile", |
100 | .resume = op_arm_resume, | 100 | .resume = op_arm_resume, |
101 | .suspend = op_arm_suspend, | 101 | .suspend = op_arm_suspend, |
102 | }; | 102 | }; |
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 6097753394ad..b2a87b8ef673 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -1455,7 +1455,7 @@ static int omap_gpio_resume(struct sys_device *dev) | |||
1455 | } | 1455 | } |
1456 | 1456 | ||
1457 | static struct sysdev_class omap_gpio_sysclass = { | 1457 | static struct sysdev_class omap_gpio_sysclass = { |
1458 | set_kset_name("gpio"), | 1458 | .name = "gpio", |
1459 | .suspend = omap_gpio_suspend, | 1459 | .suspend = omap_gpio_suspend, |
1460 | .resume = omap_gpio_resume, | 1460 | .resume = omap_gpio_resume, |
1461 | }; | 1461 | }; |
diff --git a/arch/arm/plat-s3c24xx/dma.c b/arch/arm/plat-s3c24xx/dma.c index 29696e46ed65..aae1b9cbaf44 100644 --- a/arch/arm/plat-s3c24xx/dma.c +++ b/arch/arm/plat-s3c24xx/dma.c | |||
@@ -1265,7 +1265,7 @@ static int s3c2410_dma_resume(struct sys_device *dev) | |||
1265 | #endif /* CONFIG_PM */ | 1265 | #endif /* CONFIG_PM */ |
1266 | 1266 | ||
1267 | struct sysdev_class dma_sysclass = { | 1267 | struct sysdev_class dma_sysclass = { |
1268 | set_kset_name("s3c24xx-dma"), | 1268 | .name = "s3c24xx-dma", |
1269 | .suspend = s3c2410_dma_suspend, | 1269 | .suspend = s3c2410_dma_suspend, |
1270 | .resume = s3c2410_dma_resume, | 1270 | .resume = s3c2410_dma_resume, |
1271 | }; | 1271 | }; |
diff --git a/arch/arm/plat-s3c24xx/s3c244x.c b/arch/arm/plat-s3c24xx/s3c244x.c index 3444b13afac5..f197bb3a2366 100644 --- a/arch/arm/plat-s3c24xx/s3c244x.c +++ b/arch/arm/plat-s3c24xx/s3c244x.c | |||
@@ -151,13 +151,13 @@ static int s3c244x_resume(struct sys_device *dev) | |||
151 | /* Since the S3C2442 and S3C2440 share items, put both sysclasses here */ | 151 | /* Since the S3C2442 and S3C2440 share items, put both sysclasses here */ |
152 | 152 | ||
153 | struct sysdev_class s3c2440_sysclass = { | 153 | struct sysdev_class s3c2440_sysclass = { |
154 | set_kset_name("s3c2440-core"), | 154 | .name = "s3c2440-core", |
155 | .suspend = s3c244x_suspend, | 155 | .suspend = s3c244x_suspend, |
156 | .resume = s3c244x_resume | 156 | .resume = s3c244x_resume |
157 | }; | 157 | }; |
158 | 158 | ||
159 | struct sysdev_class s3c2442_sysclass = { | 159 | struct sysdev_class s3c2442_sysclass = { |
160 | set_kset_name("s3c2442-core"), | 160 | .name = "s3c2442-core", |
161 | .suspend = s3c244x_suspend, | 161 | .suspend = s3c244x_suspend, |
162 | .resume = s3c244x_resume | 162 | .resume = s3c244x_resume |
163 | }; | 163 | }; |
diff --git a/arch/avr32/kernel/time.c b/arch/avr32/kernel/time.c index 7014a3571ec0..36a46c3ae308 100644 --- a/arch/avr32/kernel/time.c +++ b/arch/avr32/kernel/time.c | |||
@@ -214,7 +214,7 @@ void __init time_init(void) | |||
214 | } | 214 | } |
215 | 215 | ||
216 | static struct sysdev_class timer_class = { | 216 | static struct sysdev_class timer_class = { |
217 | set_kset_name("timer"), | 217 | .name = "timer", |
218 | }; | 218 | }; |
219 | 219 | ||
220 | static struct sys_device timer_device = { | 220 | static struct sys_device timer_device = { |
diff --git a/arch/cris/arch-v32/drivers/iop_fw_load.c b/arch/cris/arch-v32/drivers/iop_fw_load.c index 11f9895ded50..f4bdc1dfa320 100644 --- a/arch/cris/arch-v32/drivers/iop_fw_load.c +++ b/arch/cris/arch-v32/drivers/iop_fw_load.c | |||
@@ -20,6 +20,9 @@ | |||
20 | 20 | ||
21 | #define IOP_TIMEOUT 100 | 21 | #define IOP_TIMEOUT 100 |
22 | 22 | ||
23 | #error "This driver is broken with regard to its driver core usage." | ||
24 | #error "Please contact <greg@kroah.com> for details on how to fix it properly." | ||
25 | |||
23 | static struct device iop_spu_device[2] = { | 26 | static struct device iop_spu_device[2] = { |
24 | { .bus_id = "iop-spu0", }, | 27 | { .bus_id = "iop-spu0", }, |
25 | { .bus_id = "iop-spu1", }, | 28 | { .bus_id = "iop-spu1", }, |
@@ -192,6 +195,13 @@ int iop_start_mpu(unsigned int start_addr) | |||
192 | 195 | ||
193 | static int __init iop_fw_load_init(void) | 196 | static int __init iop_fw_load_init(void) |
194 | { | 197 | { |
198 | #if 0 | ||
199 | /* | ||
200 | * static struct devices can not be added directly to sysfs by ignoring | ||
201 | * the driver model infrastructure. To fix this properly, please use | ||
202 | * the platform_bus to register these devices to be able to properly | ||
203 | * use the firmware infrastructure. | ||
204 | */ | ||
195 | device_initialize(&iop_spu_device[0]); | 205 | device_initialize(&iop_spu_device[0]); |
196 | kobject_set_name(&iop_spu_device[0].kobj, "iop-spu0"); | 206 | kobject_set_name(&iop_spu_device[0].kobj, "iop-spu0"); |
197 | kobject_add(&iop_spu_device[0].kobj); | 207 | kobject_add(&iop_spu_device[0].kobj); |
@@ -201,6 +211,7 @@ static int __init iop_fw_load_init(void) | |||
201 | device_initialize(&iop_mpu_device); | 211 | device_initialize(&iop_mpu_device); |
202 | kobject_set_name(&iop_mpu_device.kobj, "iop-mpu"); | 212 | kobject_set_name(&iop_mpu_device.kobj, "iop-mpu"); |
203 | kobject_add(&iop_mpu_device.kobj); | 213 | kobject_add(&iop_mpu_device.kobj); |
214 | #endif | ||
204 | return 0; | 215 | return 0; |
205 | } | 216 | } |
206 | 217 | ||
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c index 14261fee5f4d..a2484fc1a06c 100644 --- a/arch/ia64/kernel/topology.c +++ b/arch/ia64/kernel/topology.c | |||
@@ -354,27 +354,27 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev) | |||
354 | if (unlikely(retval < 0)) | 354 | if (unlikely(retval < 0)) |
355 | return retval; | 355 | return retval; |
356 | 356 | ||
357 | all_cpu_cache_info[cpu].kobj.parent = &sys_dev->kobj; | 357 | retval = kobject_init_and_add(&all_cpu_cache_info[cpu].kobj, |
358 | kobject_set_name(&all_cpu_cache_info[cpu].kobj, "%s", "cache"); | 358 | &cache_ktype_percpu_entry, &sys_dev->kobj, |
359 | all_cpu_cache_info[cpu].kobj.ktype = &cache_ktype_percpu_entry; | 359 | "%s", "cache"); |
360 | retval = kobject_register(&all_cpu_cache_info[cpu].kobj); | ||
361 | 360 | ||
362 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) { | 361 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) { |
363 | this_object = LEAF_KOBJECT_PTR(cpu,i); | 362 | this_object = LEAF_KOBJECT_PTR(cpu,i); |
364 | this_object->kobj.parent = &all_cpu_cache_info[cpu].kobj; | 363 | retval = kobject_init_and_add(&(this_object->kobj), |
365 | kobject_set_name(&(this_object->kobj), "index%1lu", i); | 364 | &cache_ktype, |
366 | this_object->kobj.ktype = &cache_ktype; | 365 | &all_cpu_cache_info[cpu].kobj, |
367 | retval = kobject_register(&(this_object->kobj)); | 366 | "index%1lu", i); |
368 | if (unlikely(retval)) { | 367 | if (unlikely(retval)) { |
369 | for (j = 0; j < i; j++) { | 368 | for (j = 0; j < i; j++) { |
370 | kobject_unregister( | 369 | kobject_put(&(LEAF_KOBJECT_PTR(cpu,j)->kobj)); |
371 | &(LEAF_KOBJECT_PTR(cpu,j)->kobj)); | ||
372 | } | 370 | } |
373 | kobject_unregister(&all_cpu_cache_info[cpu].kobj); | 371 | kobject_put(&all_cpu_cache_info[cpu].kobj); |
374 | cpu_cache_sysfs_exit(cpu); | 372 | cpu_cache_sysfs_exit(cpu); |
375 | break; | 373 | break; |
376 | } | 374 | } |
375 | kobject_uevent(&(this_object->kobj), KOBJ_ADD); | ||
377 | } | 376 | } |
377 | kobject_uevent(&all_cpu_cache_info[cpu].kobj, KOBJ_ADD); | ||
378 | return retval; | 378 | return retval; |
379 | } | 379 | } |
380 | 380 | ||
@@ -385,10 +385,10 @@ static int __cpuinit cache_remove_dev(struct sys_device * sys_dev) | |||
385 | unsigned long i; | 385 | unsigned long i; |
386 | 386 | ||
387 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) | 387 | for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) |
388 | kobject_unregister(&(LEAF_KOBJECT_PTR(cpu,i)->kobj)); | 388 | kobject_put(&(LEAF_KOBJECT_PTR(cpu,i)->kobj)); |
389 | 389 | ||
390 | if (all_cpu_cache_info[cpu].kobj.parent) { | 390 | if (all_cpu_cache_info[cpu].kobj.parent) { |
391 | kobject_unregister(&all_cpu_cache_info[cpu].kobj); | 391 | kobject_put(&all_cpu_cache_info[cpu].kobj); |
392 | memset(&all_cpu_cache_info[cpu].kobj, | 392 | memset(&all_cpu_cache_info[cpu].kobj, |
393 | 0, | 393 | 0, |
394 | sizeof(struct kobject)); | 394 | sizeof(struct kobject)); |
diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c index 471013577108..197d7977de35 100644 --- a/arch/mips/kernel/i8259.c +++ b/arch/mips/kernel/i8259.c | |||
@@ -238,7 +238,7 @@ static int i8259A_shutdown(struct sys_device *dev) | |||
238 | } | 238 | } |
239 | 239 | ||
240 | static struct sysdev_class i8259_sysdev_class = { | 240 | static struct sysdev_class i8259_sysdev_class = { |
241 | set_kset_name("i8259"), | 241 | .name = "i8259", |
242 | .resume = i8259A_resume, | 242 | .resume = i8259A_resume, |
243 | .shutdown = i8259A_shutdown, | 243 | .shutdown = i8259A_shutdown, |
244 | }; | 244 | }; |
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index c83c3e3f5178..a08862203643 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c | |||
@@ -459,7 +459,7 @@ static int spu_shutdown(struct sys_device *sysdev) | |||
459 | } | 459 | } |
460 | 460 | ||
461 | static struct sysdev_class spu_sysdev_class = { | 461 | static struct sysdev_class spu_sysdev_class = { |
462 | set_kset_name("spu"), | 462 | .name = "spu", |
463 | .shutdown = spu_shutdown, | 463 | .shutdown = spu_shutdown, |
464 | }; | 464 | }; |
465 | 465 | ||
diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c index 999f5e160897..84c0d4ef76a2 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c | |||
@@ -663,7 +663,7 @@ static int pmacpic_resume(struct sys_device *sysdev) | |||
663 | #endif /* CONFIG_PM && CONFIG_PPC32 */ | 663 | #endif /* CONFIG_PM && CONFIG_PPC32 */ |
664 | 664 | ||
665 | static struct sysdev_class pmacpic_sysclass = { | 665 | static struct sysdev_class pmacpic_sysclass = { |
666 | set_kset_name("pmac_pic"), | 666 | .name = "pmac_pic", |
667 | }; | 667 | }; |
668 | 668 | ||
669 | static struct sys_device device_pmacpic = { | 669 | static struct sys_device device_pmacpic = { |
diff --git a/arch/powerpc/platforms/pseries/power.c b/arch/powerpc/platforms/pseries/power.c index 73e69023d90a..e95fc1594c84 100644 --- a/arch/powerpc/platforms/pseries/power.c +++ b/arch/powerpc/platforms/pseries/power.c | |||
@@ -28,13 +28,15 @@ | |||
28 | 28 | ||
29 | unsigned long rtas_poweron_auto; /* default and normal state is 0 */ | 29 | unsigned long rtas_poweron_auto; /* default and normal state is 0 */ |
30 | 30 | ||
31 | static ssize_t auto_poweron_show(struct kset *kset, char *buf) | 31 | static ssize_t auto_poweron_show(struct kobject *kobj, |
32 | struct kobj_attribute *attr, char *buf) | ||
32 | { | 33 | { |
33 | return sprintf(buf, "%lu\n", rtas_poweron_auto); | 34 | return sprintf(buf, "%lu\n", rtas_poweron_auto); |
34 | } | 35 | } |
35 | 36 | ||
36 | static ssize_t | 37 | static ssize_t auto_poweron_store(struct kobject *kobj, |
37 | auto_poweron_store(struct kset *kset, const char *buf, size_t n) | 38 | struct kobj_attribute *attr, |
39 | const char *buf, size_t n) | ||
38 | { | 40 | { |
39 | int ret; | 41 | int ret; |
40 | unsigned long ups_restart; | 42 | unsigned long ups_restart; |
@@ -47,17 +49,11 @@ auto_poweron_store(struct kset *kset, const char *buf, size_t n) | |||
47 | return -EINVAL; | 49 | return -EINVAL; |
48 | } | 50 | } |
49 | 51 | ||
50 | static struct subsys_attribute auto_poweron_attr = { | 52 | static struct kobj_attribute auto_poweron_attr = |
51 | .attr = { | 53 | __ATTR(auto_poweron, 0644, auto_poweron_show, auto_poweron_store); |
52 | .name = __stringify(auto_poweron), | ||
53 | .mode = 0644, | ||
54 | }, | ||
55 | .show = auto_poweron_show, | ||
56 | .store = auto_poweron_store, | ||
57 | }; | ||
58 | 54 | ||
59 | #ifndef CONFIG_PM | 55 | #ifndef CONFIG_PM |
60 | decl_subsys(power,NULL,NULL); | 56 | struct kobject *power_kobj; |
61 | 57 | ||
62 | static struct attribute *g[] = { | 58 | static struct attribute *g[] = { |
63 | &auto_poweron_attr.attr, | 59 | &auto_poweron_attr.attr, |
@@ -70,18 +66,16 @@ static struct attribute_group attr_group = { | |||
70 | 66 | ||
71 | static int __init pm_init(void) | 67 | static int __init pm_init(void) |
72 | { | 68 | { |
73 | int error = subsystem_register(&power_subsys); | 69 | power_kobj = kobject_create_and_add("power", NULL); |
74 | if (!error) | 70 | if (!power_kobj) |
75 | error = sysfs_create_group(&power_subsys.kobj, &attr_group); | 71 | return -ENOMEM; |
76 | return error; | 72 | return sysfs_create_group(power_kobj, &attr_group); |
77 | } | 73 | } |
78 | core_initcall(pm_init); | 74 | core_initcall(pm_init); |
79 | #else | 75 | #else |
80 | extern struct kset power_subsys; | ||
81 | |||
82 | static int __init apo_pm_init(void) | 76 | static int __init apo_pm_init(void) |
83 | { | 77 | { |
84 | return (subsys_create_file(&power_subsys, &auto_poweron_attr)); | 78 | return (sysfs_create_file(power_kobj, &auto_poweron_attr)); |
85 | } | 79 | } |
86 | __initcall(apo_pm_init); | 80 | __initcall(apo_pm_init); |
87 | #endif | 81 | #endif |
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 05a56e55804c..e898ff4d2b97 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c | |||
@@ -725,7 +725,7 @@ unsigned int ipic_get_irq(void) | |||
725 | } | 725 | } |
726 | 726 | ||
727 | static struct sysdev_class ipic_sysclass = { | 727 | static struct sysdev_class ipic_sysclass = { |
728 | set_kset_name("ipic"), | 728 | .name = "ipic", |
729 | }; | 729 | }; |
730 | 730 | ||
731 | static struct sys_device device_ipic = { | 731 | static struct sys_device device_ipic = { |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index e47938899a92..212a94f5d34b 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -1584,7 +1584,7 @@ static struct sysdev_class mpic_sysclass = { | |||
1584 | .resume = mpic_resume, | 1584 | .resume = mpic_resume, |
1585 | .suspend = mpic_suspend, | 1585 | .suspend = mpic_suspend, |
1586 | #endif | 1586 | #endif |
1587 | set_kset_name("mpic"), | 1587 | .name = "mpic", |
1588 | }; | 1588 | }; |
1589 | 1589 | ||
1590 | static int mpic_init_sys(void) | 1590 | static int mpic_init_sys(void) |
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/arch/powerpc/sysdev/qe_lib/qe_ic.c index e1c0fd6dbc1a..f59444d3be75 100644 --- a/arch/powerpc/sysdev/qe_lib/qe_ic.c +++ b/arch/powerpc/sysdev/qe_lib/qe_ic.c | |||
@@ -483,7 +483,7 @@ int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high) | |||
483 | } | 483 | } |
484 | 484 | ||
485 | static struct sysdev_class qe_ic_sysclass = { | 485 | static struct sysdev_class qe_ic_sysclass = { |
486 | set_kset_name("qe_ic"), | 486 | .name = "qe_ic", |
487 | }; | 487 | }; |
488 | 488 | ||
489 | static struct sys_device device_qe_ic = { | 489 | static struct sys_device device_qe_ic = { |
diff --git a/arch/ppc/syslib/ipic.c b/arch/ppc/syslib/ipic.c index 9192777d0f78..4f163e20939e 100644 --- a/arch/ppc/syslib/ipic.c +++ b/arch/ppc/syslib/ipic.c | |||
@@ -614,7 +614,7 @@ int ipic_get_irq(void) | |||
614 | } | 614 | } |
615 | 615 | ||
616 | static struct sysdev_class ipic_sysclass = { | 616 | static struct sysdev_class ipic_sysclass = { |
617 | set_kset_name("ipic"), | 617 | .name = "ipic", |
618 | }; | 618 | }; |
619 | 619 | ||
620 | static struct sys_device device_ipic = { | 620 | static struct sys_device device_ipic = { |
diff --git a/arch/ppc/syslib/open_pic.c b/arch/ppc/syslib/open_pic.c index 18ec94733293..da36522d327a 100644 --- a/arch/ppc/syslib/open_pic.c +++ b/arch/ppc/syslib/open_pic.c | |||
@@ -1043,7 +1043,7 @@ int openpic_resume(struct sys_device *sysdev) | |||
1043 | #endif /* CONFIG_PM */ | 1043 | #endif /* CONFIG_PM */ |
1044 | 1044 | ||
1045 | static struct sysdev_class openpic_sysclass = { | 1045 | static struct sysdev_class openpic_sysclass = { |
1046 | set_kset_name("openpic"), | 1046 | .name = "openpic", |
1047 | }; | 1047 | }; |
1048 | 1048 | ||
1049 | static struct sys_device device_openpic = { | 1049 | static struct sys_device device_openpic = { |
diff --git a/arch/ppc/syslib/open_pic2.c b/arch/ppc/syslib/open_pic2.c index d585207f9f77..449075a04798 100644 --- a/arch/ppc/syslib/open_pic2.c +++ b/arch/ppc/syslib/open_pic2.c | |||
@@ -666,7 +666,7 @@ int openpic2_resume(struct sys_device *sysdev) | |||
666 | 666 | ||
667 | /* HACK ALERT */ | 667 | /* HACK ALERT */ |
668 | static struct sysdev_class openpic2_sysclass = { | 668 | static struct sysdev_class openpic2_sysclass = { |
669 | set_kset_name("openpic2"), | 669 | .name = "openpic2", |
670 | }; | 670 | }; |
671 | 671 | ||
672 | static struct sys_device device_openpic2 = { | 672 | static struct sys_device device_openpic2 = { |
diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c index 512669691ad0..46c97058ebe1 100644 --- a/arch/s390/crypto/aes_s390.c +++ b/arch/s390/crypto/aes_s390.c | |||
@@ -6,6 +6,7 @@ | |||
6 | * s390 Version: | 6 | * s390 Version: |
7 | * Copyright IBM Corp. 2005,2007 | 7 | * Copyright IBM Corp. 2005,2007 |
8 | * Author(s): Jan Glauber (jang@de.ibm.com) | 8 | * Author(s): Jan Glauber (jang@de.ibm.com) |
9 | * Sebastian Siewior (sebastian@breakpoint.cc> SW-Fallback | ||
9 | * | 10 | * |
10 | * Derived from "crypto/aes_generic.c" | 11 | * Derived from "crypto/aes_generic.c" |
11 | * | 12 | * |
@@ -16,17 +17,13 @@ | |||
16 | * | 17 | * |
17 | */ | 18 | */ |
18 | 19 | ||
20 | #include <crypto/aes.h> | ||
19 | #include <crypto/algapi.h> | 21 | #include <crypto/algapi.h> |
22 | #include <linux/err.h> | ||
20 | #include <linux/module.h> | 23 | #include <linux/module.h> |
21 | #include <linux/init.h> | 24 | #include <linux/init.h> |
22 | #include "crypt_s390.h" | 25 | #include "crypt_s390.h" |
23 | 26 | ||
24 | #define AES_MIN_KEY_SIZE 16 | ||
25 | #define AES_MAX_KEY_SIZE 32 | ||
26 | |||
27 | /* data block size for all key lengths */ | ||
28 | #define AES_BLOCK_SIZE 16 | ||
29 | |||
30 | #define AES_KEYLEN_128 1 | 27 | #define AES_KEYLEN_128 1 |
31 | #define AES_KEYLEN_192 2 | 28 | #define AES_KEYLEN_192 2 |
32 | #define AES_KEYLEN_256 4 | 29 | #define AES_KEYLEN_256 4 |
@@ -39,45 +36,89 @@ struct s390_aes_ctx { | |||
39 | long enc; | 36 | long enc; |
40 | long dec; | 37 | long dec; |
41 | int key_len; | 38 | int key_len; |
39 | union { | ||
40 | struct crypto_blkcipher *blk; | ||
41 | struct crypto_cipher *cip; | ||
42 | } fallback; | ||
42 | }; | 43 | }; |
43 | 44 | ||
44 | static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, | 45 | /* |
45 | unsigned int key_len) | 46 | * Check if the key_len is supported by the HW. |
47 | * Returns 0 if it is, a positive number if it is not and software fallback is | ||
48 | * required or a negative number in case the key size is not valid | ||
49 | */ | ||
50 | static int need_fallback(unsigned int key_len) | ||
46 | { | 51 | { |
47 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
48 | u32 *flags = &tfm->crt_flags; | ||
49 | |||
50 | switch (key_len) { | 52 | switch (key_len) { |
51 | case 16: | 53 | case 16: |
52 | if (!(keylen_flag & AES_KEYLEN_128)) | 54 | if (!(keylen_flag & AES_KEYLEN_128)) |
53 | goto fail; | 55 | return 1; |
54 | break; | 56 | break; |
55 | case 24: | 57 | case 24: |
56 | if (!(keylen_flag & AES_KEYLEN_192)) | 58 | if (!(keylen_flag & AES_KEYLEN_192)) |
57 | goto fail; | 59 | return 1; |
58 | |||
59 | break; | 60 | break; |
60 | case 32: | 61 | case 32: |
61 | if (!(keylen_flag & AES_KEYLEN_256)) | 62 | if (!(keylen_flag & AES_KEYLEN_256)) |
62 | goto fail; | 63 | return 1; |
63 | break; | 64 | break; |
64 | default: | 65 | default: |
65 | goto fail; | 66 | return -1; |
66 | break; | 67 | break; |
67 | } | 68 | } |
69 | return 0; | ||
70 | } | ||
71 | |||
72 | static int setkey_fallback_cip(struct crypto_tfm *tfm, const u8 *in_key, | ||
73 | unsigned int key_len) | ||
74 | { | ||
75 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
76 | int ret; | ||
77 | |||
78 | sctx->fallback.blk->base.crt_flags &= ~CRYPTO_TFM_REQ_MASK; | ||
79 | sctx->fallback.blk->base.crt_flags |= (tfm->crt_flags & | ||
80 | CRYPTO_TFM_REQ_MASK); | ||
81 | |||
82 | ret = crypto_cipher_setkey(sctx->fallback.cip, in_key, key_len); | ||
83 | if (ret) { | ||
84 | tfm->crt_flags &= ~CRYPTO_TFM_RES_MASK; | ||
85 | tfm->crt_flags |= (sctx->fallback.blk->base.crt_flags & | ||
86 | CRYPTO_TFM_RES_MASK); | ||
87 | } | ||
88 | return ret; | ||
89 | } | ||
90 | |||
91 | static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, | ||
92 | unsigned int key_len) | ||
93 | { | ||
94 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
95 | u32 *flags = &tfm->crt_flags; | ||
96 | int ret; | ||
97 | |||
98 | ret = need_fallback(key_len); | ||
99 | if (ret < 0) { | ||
100 | *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; | ||
101 | return -EINVAL; | ||
102 | } | ||
68 | 103 | ||
69 | sctx->key_len = key_len; | 104 | sctx->key_len = key_len; |
70 | memcpy(sctx->key, in_key, key_len); | 105 | if (!ret) { |
71 | return 0; | 106 | memcpy(sctx->key, in_key, key_len); |
72 | fail: | 107 | return 0; |
73 | *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; | 108 | } |
74 | return -EINVAL; | 109 | |
110 | return setkey_fallback_cip(tfm, in_key, key_len); | ||
75 | } | 111 | } |
76 | 112 | ||
77 | static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) | 113 | static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) |
78 | { | 114 | { |
79 | const struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | 115 | const struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); |
80 | 116 | ||
117 | if (unlikely(need_fallback(sctx->key_len))) { | ||
118 | crypto_cipher_encrypt_one(sctx->fallback.cip, out, in); | ||
119 | return; | ||
120 | } | ||
121 | |||
81 | switch (sctx->key_len) { | 122 | switch (sctx->key_len) { |
82 | case 16: | 123 | case 16: |
83 | crypt_s390_km(KM_AES_128_ENCRYPT, &sctx->key, out, in, | 124 | crypt_s390_km(KM_AES_128_ENCRYPT, &sctx->key, out, in, |
@@ -98,6 +139,11 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) | |||
98 | { | 139 | { |
99 | const struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | 140 | const struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); |
100 | 141 | ||
142 | if (unlikely(need_fallback(sctx->key_len))) { | ||
143 | crypto_cipher_decrypt_one(sctx->fallback.cip, out, in); | ||
144 | return; | ||
145 | } | ||
146 | |||
101 | switch (sctx->key_len) { | 147 | switch (sctx->key_len) { |
102 | case 16: | 148 | case 16: |
103 | crypt_s390_km(KM_AES_128_DECRYPT, &sctx->key, out, in, | 149 | crypt_s390_km(KM_AES_128_DECRYPT, &sctx->key, out, in, |
@@ -114,6 +160,29 @@ static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in) | |||
114 | } | 160 | } |
115 | } | 161 | } |
116 | 162 | ||
163 | static int fallback_init_cip(struct crypto_tfm *tfm) | ||
164 | { | ||
165 | const char *name = tfm->__crt_alg->cra_name; | ||
166 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
167 | |||
168 | sctx->fallback.cip = crypto_alloc_cipher(name, 0, | ||
169 | CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK); | ||
170 | |||
171 | if (IS_ERR(sctx->fallback.cip)) { | ||
172 | printk(KERN_ERR "Error allocating fallback algo %s\n", name); | ||
173 | return PTR_ERR(sctx->fallback.blk); | ||
174 | } | ||
175 | |||
176 | return 0; | ||
177 | } | ||
178 | |||
179 | static void fallback_exit_cip(struct crypto_tfm *tfm) | ||
180 | { | ||
181 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
182 | |||
183 | crypto_free_cipher(sctx->fallback.cip); | ||
184 | sctx->fallback.cip = NULL; | ||
185 | } | ||
117 | 186 | ||
118 | static struct crypto_alg aes_alg = { | 187 | static struct crypto_alg aes_alg = { |
119 | .cra_name = "aes", | 188 | .cra_name = "aes", |
@@ -125,6 +194,8 @@ static struct crypto_alg aes_alg = { | |||
125 | .cra_ctxsize = sizeof(struct s390_aes_ctx), | 194 | .cra_ctxsize = sizeof(struct s390_aes_ctx), |
126 | .cra_module = THIS_MODULE, | 195 | .cra_module = THIS_MODULE, |
127 | .cra_list = LIST_HEAD_INIT(aes_alg.cra_list), | 196 | .cra_list = LIST_HEAD_INIT(aes_alg.cra_list), |
197 | .cra_init = fallback_init_cip, | ||
198 | .cra_exit = fallback_exit_cip, | ||
128 | .cra_u = { | 199 | .cra_u = { |
129 | .cipher = { | 200 | .cipher = { |
130 | .cia_min_keysize = AES_MIN_KEY_SIZE, | 201 | .cia_min_keysize = AES_MIN_KEY_SIZE, |
@@ -136,10 +207,70 @@ static struct crypto_alg aes_alg = { | |||
136 | } | 207 | } |
137 | }; | 208 | }; |
138 | 209 | ||
210 | static int setkey_fallback_blk(struct crypto_tfm *tfm, const u8 *key, | ||
211 | unsigned int len) | ||
212 | { | ||
213 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
214 | unsigned int ret; | ||
215 | |||
216 | sctx->fallback.blk->base.crt_flags &= ~CRYPTO_TFM_REQ_MASK; | ||
217 | sctx->fallback.blk->base.crt_flags |= (tfm->crt_flags & | ||
218 | CRYPTO_TFM_REQ_MASK); | ||
219 | |||
220 | ret = crypto_blkcipher_setkey(sctx->fallback.blk, key, len); | ||
221 | if (ret) { | ||
222 | tfm->crt_flags &= ~CRYPTO_TFM_RES_MASK; | ||
223 | tfm->crt_flags |= (sctx->fallback.blk->base.crt_flags & | ||
224 | CRYPTO_TFM_RES_MASK); | ||
225 | } | ||
226 | return ret; | ||
227 | } | ||
228 | |||
229 | static int fallback_blk_dec(struct blkcipher_desc *desc, | ||
230 | struct scatterlist *dst, struct scatterlist *src, | ||
231 | unsigned int nbytes) | ||
232 | { | ||
233 | unsigned int ret; | ||
234 | struct crypto_blkcipher *tfm; | ||
235 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); | ||
236 | |||
237 | tfm = desc->tfm; | ||
238 | desc->tfm = sctx->fallback.blk; | ||
239 | |||
240 | ret = crypto_blkcipher_decrypt_iv(desc, dst, src, nbytes); | ||
241 | |||
242 | desc->tfm = tfm; | ||
243 | return ret; | ||
244 | } | ||
245 | |||
246 | static int fallback_blk_enc(struct blkcipher_desc *desc, | ||
247 | struct scatterlist *dst, struct scatterlist *src, | ||
248 | unsigned int nbytes) | ||
249 | { | ||
250 | unsigned int ret; | ||
251 | struct crypto_blkcipher *tfm; | ||
252 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); | ||
253 | |||
254 | tfm = desc->tfm; | ||
255 | desc->tfm = sctx->fallback.blk; | ||
256 | |||
257 | ret = crypto_blkcipher_encrypt_iv(desc, dst, src, nbytes); | ||
258 | |||
259 | desc->tfm = tfm; | ||
260 | return ret; | ||
261 | } | ||
262 | |||
139 | static int ecb_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, | 263 | static int ecb_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, |
140 | unsigned int key_len) | 264 | unsigned int key_len) |
141 | { | 265 | { |
142 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | 266 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); |
267 | int ret; | ||
268 | |||
269 | ret = need_fallback(key_len); | ||
270 | if (ret > 0) { | ||
271 | sctx->key_len = key_len; | ||
272 | return setkey_fallback_blk(tfm, in_key, key_len); | ||
273 | } | ||
143 | 274 | ||
144 | switch (key_len) { | 275 | switch (key_len) { |
145 | case 16: | 276 | case 16: |
@@ -188,6 +319,9 @@ static int ecb_aes_encrypt(struct blkcipher_desc *desc, | |||
188 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); | 319 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); |
189 | struct blkcipher_walk walk; | 320 | struct blkcipher_walk walk; |
190 | 321 | ||
322 | if (unlikely(need_fallback(sctx->key_len))) | ||
323 | return fallback_blk_enc(desc, dst, src, nbytes); | ||
324 | |||
191 | blkcipher_walk_init(&walk, dst, src, nbytes); | 325 | blkcipher_walk_init(&walk, dst, src, nbytes); |
192 | return ecb_aes_crypt(desc, sctx->enc, sctx->key, &walk); | 326 | return ecb_aes_crypt(desc, sctx->enc, sctx->key, &walk); |
193 | } | 327 | } |
@@ -199,10 +333,37 @@ static int ecb_aes_decrypt(struct blkcipher_desc *desc, | |||
199 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); | 333 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); |
200 | struct blkcipher_walk walk; | 334 | struct blkcipher_walk walk; |
201 | 335 | ||
336 | if (unlikely(need_fallback(sctx->key_len))) | ||
337 | return fallback_blk_dec(desc, dst, src, nbytes); | ||
338 | |||
202 | blkcipher_walk_init(&walk, dst, src, nbytes); | 339 | blkcipher_walk_init(&walk, dst, src, nbytes); |
203 | return ecb_aes_crypt(desc, sctx->dec, sctx->key, &walk); | 340 | return ecb_aes_crypt(desc, sctx->dec, sctx->key, &walk); |
204 | } | 341 | } |
205 | 342 | ||
343 | static int fallback_init_blk(struct crypto_tfm *tfm) | ||
344 | { | ||
345 | const char *name = tfm->__crt_alg->cra_name; | ||
346 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
347 | |||
348 | sctx->fallback.blk = crypto_alloc_blkcipher(name, 0, | ||
349 | CRYPTO_ALG_ASYNC | CRYPTO_ALG_NEED_FALLBACK); | ||
350 | |||
351 | if (IS_ERR(sctx->fallback.blk)) { | ||
352 | printk(KERN_ERR "Error allocating fallback algo %s\n", name); | ||
353 | return PTR_ERR(sctx->fallback.blk); | ||
354 | } | ||
355 | |||
356 | return 0; | ||
357 | } | ||
358 | |||
359 | static void fallback_exit_blk(struct crypto_tfm *tfm) | ||
360 | { | ||
361 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | ||
362 | |||
363 | crypto_free_blkcipher(sctx->fallback.blk); | ||
364 | sctx->fallback.blk = NULL; | ||
365 | } | ||
366 | |||
206 | static struct crypto_alg ecb_aes_alg = { | 367 | static struct crypto_alg ecb_aes_alg = { |
207 | .cra_name = "ecb(aes)", | 368 | .cra_name = "ecb(aes)", |
208 | .cra_driver_name = "ecb-aes-s390", | 369 | .cra_driver_name = "ecb-aes-s390", |
@@ -214,6 +375,8 @@ static struct crypto_alg ecb_aes_alg = { | |||
214 | .cra_type = &crypto_blkcipher_type, | 375 | .cra_type = &crypto_blkcipher_type, |
215 | .cra_module = THIS_MODULE, | 376 | .cra_module = THIS_MODULE, |
216 | .cra_list = LIST_HEAD_INIT(ecb_aes_alg.cra_list), | 377 | .cra_list = LIST_HEAD_INIT(ecb_aes_alg.cra_list), |
378 | .cra_init = fallback_init_blk, | ||
379 | .cra_exit = fallback_exit_blk, | ||
217 | .cra_u = { | 380 | .cra_u = { |
218 | .blkcipher = { | 381 | .blkcipher = { |
219 | .min_keysize = AES_MIN_KEY_SIZE, | 382 | .min_keysize = AES_MIN_KEY_SIZE, |
@@ -229,6 +392,13 @@ static int cbc_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, | |||
229 | unsigned int key_len) | 392 | unsigned int key_len) |
230 | { | 393 | { |
231 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); | 394 | struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm); |
395 | int ret; | ||
396 | |||
397 | ret = need_fallback(key_len); | ||
398 | if (ret > 0) { | ||
399 | sctx->key_len = key_len; | ||
400 | return setkey_fallback_blk(tfm, in_key, key_len); | ||
401 | } | ||
232 | 402 | ||
233 | switch (key_len) { | 403 | switch (key_len) { |
234 | case 16: | 404 | case 16: |
@@ -283,6 +453,9 @@ static int cbc_aes_encrypt(struct blkcipher_desc *desc, | |||
283 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); | 453 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); |
284 | struct blkcipher_walk walk; | 454 | struct blkcipher_walk walk; |
285 | 455 | ||
456 | if (unlikely(need_fallback(sctx->key_len))) | ||
457 | return fallback_blk_enc(desc, dst, src, nbytes); | ||
458 | |||
286 | blkcipher_walk_init(&walk, dst, src, nbytes); | 459 | blkcipher_walk_init(&walk, dst, src, nbytes); |
287 | return cbc_aes_crypt(desc, sctx->enc, sctx->iv, &walk); | 460 | return cbc_aes_crypt(desc, sctx->enc, sctx->iv, &walk); |
288 | } | 461 | } |
@@ -294,6 +467,9 @@ static int cbc_aes_decrypt(struct blkcipher_desc *desc, | |||
294 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); | 467 | struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm); |
295 | struct blkcipher_walk walk; | 468 | struct blkcipher_walk walk; |
296 | 469 | ||
470 | if (unlikely(need_fallback(sctx->key_len))) | ||
471 | return fallback_blk_dec(desc, dst, src, nbytes); | ||
472 | |||
297 | blkcipher_walk_init(&walk, dst, src, nbytes); | 473 | blkcipher_walk_init(&walk, dst, src, nbytes); |
298 | return cbc_aes_crypt(desc, sctx->dec, sctx->iv, &walk); | 474 | return cbc_aes_crypt(desc, sctx->dec, sctx->iv, &walk); |
299 | } | 475 | } |
@@ -309,6 +485,8 @@ static struct crypto_alg cbc_aes_alg = { | |||
309 | .cra_type = &crypto_blkcipher_type, | 485 | .cra_type = &crypto_blkcipher_type, |
310 | .cra_module = THIS_MODULE, | 486 | .cra_module = THIS_MODULE, |
311 | .cra_list = LIST_HEAD_INIT(cbc_aes_alg.cra_list), | 487 | .cra_list = LIST_HEAD_INIT(cbc_aes_alg.cra_list), |
488 | .cra_init = fallback_init_blk, | ||
489 | .cra_exit = fallback_exit_blk, | ||
312 | .cra_u = { | 490 | .cra_u = { |
313 | .blkcipher = { | 491 | .blkcipher = { |
314 | .min_keysize = AES_MIN_KEY_SIZE, | 492 | .min_keysize = AES_MIN_KEY_SIZE, |
@@ -336,14 +514,10 @@ static int __init aes_init(void) | |||
336 | return -EOPNOTSUPP; | 514 | return -EOPNOTSUPP; |
337 | 515 | ||
338 | /* z9 109 and z9 BC/EC only support 128 bit key length */ | 516 | /* z9 109 and z9 BC/EC only support 128 bit key length */ |
339 | if (keylen_flag == AES_KEYLEN_128) { | 517 | if (keylen_flag == AES_KEYLEN_128) |
340 | aes_alg.cra_u.cipher.cia_max_keysize = AES_MIN_KEY_SIZE; | ||
341 | ecb_aes_alg.cra_u.blkcipher.max_keysize = AES_MIN_KEY_SIZE; | ||
342 | cbc_aes_alg.cra_u.blkcipher.max_keysize = AES_MIN_KEY_SIZE; | ||
343 | printk(KERN_INFO | 518 | printk(KERN_INFO |
344 | "aes_s390: hardware acceleration only available for" | 519 | "aes_s390: hardware acceleration only available for" |
345 | "128 bit keys\n"); | 520 | "128 bit keys\n"); |
346 | } | ||
347 | 521 | ||
348 | ret = crypto_register_alg(&aes_alg); | 522 | ret = crypto_register_alg(&aes_alg); |
349 | if (ret) | 523 | if (ret) |
@@ -382,4 +556,3 @@ MODULE_ALIAS("aes"); | |||
382 | 556 | ||
383 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); | 557 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); |
384 | MODULE_LICENSE("GPL"); | 558 | MODULE_LICENSE("GPL"); |
385 | |||
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c index 5245717295b8..4b010ff814c9 100644 --- a/arch/s390/hypfs/inode.c +++ b/arch/s390/hypfs/inode.c | |||
@@ -490,7 +490,7 @@ static struct super_operations hypfs_s_ops = { | |||
490 | .show_options = hypfs_show_options, | 490 | .show_options = hypfs_show_options, |
491 | }; | 491 | }; |
492 | 492 | ||
493 | static decl_subsys(s390, NULL, NULL); | 493 | static struct kobject *s390_kobj; |
494 | 494 | ||
495 | static int __init hypfs_init(void) | 495 | static int __init hypfs_init(void) |
496 | { | 496 | { |
@@ -506,17 +506,18 @@ static int __init hypfs_init(void) | |||
506 | goto fail_diag; | 506 | goto fail_diag; |
507 | } | 507 | } |
508 | } | 508 | } |
509 | kobj_set_kset_s(&s390_subsys, hypervisor_subsys); | 509 | s390_kobj = kobject_create_and_add("s390", hypervisor_kobj); |
510 | rc = subsystem_register(&s390_subsys); | 510 | if (!s390_kobj) { |
511 | if (rc) | 511 | rc = -ENOMEM;; |
512 | goto fail_sysfs; | 512 | goto fail_sysfs; |
513 | } | ||
513 | rc = register_filesystem(&hypfs_type); | 514 | rc = register_filesystem(&hypfs_type); |
514 | if (rc) | 515 | if (rc) |
515 | goto fail_filesystem; | 516 | goto fail_filesystem; |
516 | return 0; | 517 | return 0; |
517 | 518 | ||
518 | fail_filesystem: | 519 | fail_filesystem: |
519 | subsystem_unregister(&s390_subsys); | 520 | kobject_put(s390_kobj); |
520 | fail_sysfs: | 521 | fail_sysfs: |
521 | if (!MACHINE_IS_VM) | 522 | if (!MACHINE_IS_VM) |
522 | hypfs_diag_exit(); | 523 | hypfs_diag_exit(); |
@@ -530,7 +531,7 @@ static void __exit hypfs_exit(void) | |||
530 | if (!MACHINE_IS_VM) | 531 | if (!MACHINE_IS_VM) |
531 | hypfs_diag_exit(); | 532 | hypfs_diag_exit(); |
532 | unregister_filesystem(&hypfs_type); | 533 | unregister_filesystem(&hypfs_type); |
533 | subsystem_unregister(&s390_subsys); | 534 | kobject_put(s390_kobj); |
534 | } | 535 | } |
535 | 536 | ||
536 | module_init(hypfs_init) | 537 | module_init(hypfs_init) |
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index ce0856d32500..b97694fa62ec 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -162,22 +162,25 @@ EXPORT_SYMBOL_GPL(diag308); | |||
162 | /* SYSFS */ | 162 | /* SYSFS */ |
163 | 163 | ||
164 | #define DEFINE_IPL_ATTR_RO(_prefix, _name, _format, _value) \ | 164 | #define DEFINE_IPL_ATTR_RO(_prefix, _name, _format, _value) \ |
165 | static ssize_t sys_##_prefix##_##_name##_show(struct kset *kset, \ | 165 | static ssize_t sys_##_prefix##_##_name##_show(struct kobject *kobj, \ |
166 | struct kobj_attribute *attr, \ | ||
166 | char *page) \ | 167 | char *page) \ |
167 | { \ | 168 | { \ |
168 | return sprintf(page, _format, _value); \ | 169 | return sprintf(page, _format, _value); \ |
169 | } \ | 170 | } \ |
170 | static struct subsys_attribute sys_##_prefix##_##_name##_attr = \ | 171 | static struct kobj_attribute sys_##_prefix##_##_name##_attr = \ |
171 | __ATTR(_name, S_IRUGO, sys_##_prefix##_##_name##_show, NULL); | 172 | __ATTR(_name, S_IRUGO, sys_##_prefix##_##_name##_show, NULL); |
172 | 173 | ||
173 | #define DEFINE_IPL_ATTR_RW(_prefix, _name, _fmt_out, _fmt_in, _value) \ | 174 | #define DEFINE_IPL_ATTR_RW(_prefix, _name, _fmt_out, _fmt_in, _value) \ |
174 | static ssize_t sys_##_prefix##_##_name##_show(struct kset *kset, \ | 175 | static ssize_t sys_##_prefix##_##_name##_show(struct kobject *kobj, \ |
176 | struct kobj_attribute *attr, \ | ||
175 | char *page) \ | 177 | char *page) \ |
176 | { \ | 178 | { \ |
177 | return sprintf(page, _fmt_out, \ | 179 | return sprintf(page, _fmt_out, \ |
178 | (unsigned long long) _value); \ | 180 | (unsigned long long) _value); \ |
179 | } \ | 181 | } \ |
180 | static ssize_t sys_##_prefix##_##_name##_store(struct kset *kset, \ | 182 | static ssize_t sys_##_prefix##_##_name##_store(struct kobject *kobj, \ |
183 | struct kobj_attribute *attr, \ | ||
181 | const char *buf, size_t len) \ | 184 | const char *buf, size_t len) \ |
182 | { \ | 185 | { \ |
183 | unsigned long long value; \ | 186 | unsigned long long value; \ |
@@ -186,25 +189,27 @@ static ssize_t sys_##_prefix##_##_name##_store(struct kset *kset, \ | |||
186 | _value = value; \ | 189 | _value = value; \ |
187 | return len; \ | 190 | return len; \ |
188 | } \ | 191 | } \ |
189 | static struct subsys_attribute sys_##_prefix##_##_name##_attr = \ | 192 | static struct kobj_attribute sys_##_prefix##_##_name##_attr = \ |
190 | __ATTR(_name,(S_IRUGO | S_IWUSR), \ | 193 | __ATTR(_name,(S_IRUGO | S_IWUSR), \ |
191 | sys_##_prefix##_##_name##_show, \ | 194 | sys_##_prefix##_##_name##_show, \ |
192 | sys_##_prefix##_##_name##_store); | 195 | sys_##_prefix##_##_name##_store); |
193 | 196 | ||
194 | #define DEFINE_IPL_ATTR_STR_RW(_prefix, _name, _fmt_out, _fmt_in, _value)\ | 197 | #define DEFINE_IPL_ATTR_STR_RW(_prefix, _name, _fmt_out, _fmt_in, _value)\ |
195 | static ssize_t sys_##_prefix##_##_name##_show(struct kset *kset, \ | 198 | static ssize_t sys_##_prefix##_##_name##_show(struct kobject *kobj, \ |
199 | struct kobj_attribute *attr, \ | ||
196 | char *page) \ | 200 | char *page) \ |
197 | { \ | 201 | { \ |
198 | return sprintf(page, _fmt_out, _value); \ | 202 | return sprintf(page, _fmt_out, _value); \ |
199 | } \ | 203 | } \ |
200 | static ssize_t sys_##_prefix##_##_name##_store(struct kset *kset, \ | 204 | static ssize_t sys_##_prefix##_##_name##_store(struct kobject *kobj, \ |
205 | struct kobj_attribute *attr, \ | ||
201 | const char *buf, size_t len) \ | 206 | const char *buf, size_t len) \ |
202 | { \ | 207 | { \ |
203 | if (sscanf(buf, _fmt_in, _value) != 1) \ | 208 | if (sscanf(buf, _fmt_in, _value) != 1) \ |
204 | return -EINVAL; \ | 209 | return -EINVAL; \ |
205 | return len; \ | 210 | return len; \ |
206 | } \ | 211 | } \ |
207 | static struct subsys_attribute sys_##_prefix##_##_name##_attr = \ | 212 | static struct kobj_attribute sys_##_prefix##_##_name##_attr = \ |
208 | __ATTR(_name,(S_IRUGO | S_IWUSR), \ | 213 | __ATTR(_name,(S_IRUGO | S_IWUSR), \ |
209 | sys_##_prefix##_##_name##_show, \ | 214 | sys_##_prefix##_##_name##_show, \ |
210 | sys_##_prefix##_##_name##_store); | 215 | sys_##_prefix##_##_name##_store); |
@@ -270,14 +275,16 @@ void __init setup_ipl_info(void) | |||
270 | struct ipl_info ipl_info; | 275 | struct ipl_info ipl_info; |
271 | EXPORT_SYMBOL_GPL(ipl_info); | 276 | EXPORT_SYMBOL_GPL(ipl_info); |
272 | 277 | ||
273 | static ssize_t ipl_type_show(struct kset *kset, char *page) | 278 | static ssize_t ipl_type_show(struct kobject *kobj, struct kobj_attribute *attr, |
279 | char *page) | ||
274 | { | 280 | { |
275 | return sprintf(page, "%s\n", ipl_type_str(ipl_info.type)); | 281 | return sprintf(page, "%s\n", ipl_type_str(ipl_info.type)); |
276 | } | 282 | } |
277 | 283 | ||
278 | static struct subsys_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type); | 284 | static struct kobj_attribute sys_ipl_type_attr = __ATTR_RO(ipl_type); |
279 | 285 | ||
280 | static ssize_t sys_ipl_device_show(struct kset *kset, char *page) | 286 | static ssize_t sys_ipl_device_show(struct kobject *kobj, |
287 | struct kobj_attribute *attr, char *page) | ||
281 | { | 288 | { |
282 | struct ipl_parameter_block *ipl = IPL_PARMBLOCK_START; | 289 | struct ipl_parameter_block *ipl = IPL_PARMBLOCK_START; |
283 | 290 | ||
@@ -292,7 +299,7 @@ static ssize_t sys_ipl_device_show(struct kset *kset, char *page) | |||
292 | } | 299 | } |
293 | } | 300 | } |
294 | 301 | ||
295 | static struct subsys_attribute sys_ipl_device_attr = | 302 | static struct kobj_attribute sys_ipl_device_attr = |
296 | __ATTR(device, S_IRUGO, sys_ipl_device_show, NULL); | 303 | __ATTR(device, S_IRUGO, sys_ipl_device_show, NULL); |
297 | 304 | ||
298 | static ssize_t ipl_parameter_read(struct kobject *kobj, struct bin_attribute *attr, | 305 | static ssize_t ipl_parameter_read(struct kobject *kobj, struct bin_attribute *attr, |
@@ -367,7 +374,8 @@ static struct attribute_group ipl_fcp_attr_group = { | |||
367 | 374 | ||
368 | /* CCW ipl device attributes */ | 375 | /* CCW ipl device attributes */ |
369 | 376 | ||
370 | static ssize_t ipl_ccw_loadparm_show(struct kset *kset, char *page) | 377 | static ssize_t ipl_ccw_loadparm_show(struct kobject *kobj, |
378 | struct kobj_attribute *attr, char *page) | ||
371 | { | 379 | { |
372 | char loadparm[LOADPARM_LEN + 1] = {}; | 380 | char loadparm[LOADPARM_LEN + 1] = {}; |
373 | 381 | ||
@@ -379,7 +387,7 @@ static ssize_t ipl_ccw_loadparm_show(struct kset *kset, char *page) | |||
379 | return sprintf(page, "%s\n", loadparm); | 387 | return sprintf(page, "%s\n", loadparm); |
380 | } | 388 | } |
381 | 389 | ||
382 | static struct subsys_attribute sys_ipl_ccw_loadparm_attr = | 390 | static struct kobj_attribute sys_ipl_ccw_loadparm_attr = |
383 | __ATTR(loadparm, 0444, ipl_ccw_loadparm_show, NULL); | 391 | __ATTR(loadparm, 0444, ipl_ccw_loadparm_show, NULL); |
384 | 392 | ||
385 | static struct attribute *ipl_ccw_attrs[] = { | 393 | static struct attribute *ipl_ccw_attrs[] = { |
@@ -418,7 +426,7 @@ static struct attribute_group ipl_unknown_attr_group = { | |||
418 | .attrs = ipl_unknown_attrs, | 426 | .attrs = ipl_unknown_attrs, |
419 | }; | 427 | }; |
420 | 428 | ||
421 | static decl_subsys(ipl, NULL, NULL); | 429 | static struct kset *ipl_kset; |
422 | 430 | ||
423 | /* | 431 | /* |
424 | * reipl section | 432 | * reipl section |
@@ -465,7 +473,8 @@ static void reipl_get_ascii_loadparm(char *loadparm) | |||
465 | strstrip(loadparm); | 473 | strstrip(loadparm); |
466 | } | 474 | } |
467 | 475 | ||
468 | static ssize_t reipl_ccw_loadparm_show(struct kset *kset, char *page) | 476 | static ssize_t reipl_ccw_loadparm_show(struct kobject *kobj, |
477 | struct kobj_attribute *attr, char *page) | ||
469 | { | 478 | { |
470 | char buf[LOADPARM_LEN + 1]; | 479 | char buf[LOADPARM_LEN + 1]; |
471 | 480 | ||
@@ -473,7 +482,8 @@ static ssize_t reipl_ccw_loadparm_show(struct kset *kset, char *page) | |||
473 | return sprintf(page, "%s\n", buf); | 482 | return sprintf(page, "%s\n", buf); |
474 | } | 483 | } |
475 | 484 | ||
476 | static ssize_t reipl_ccw_loadparm_store(struct kset *kset, | 485 | static ssize_t reipl_ccw_loadparm_store(struct kobject *kobj, |
486 | struct kobj_attribute *attr, | ||
477 | const char *buf, size_t len) | 487 | const char *buf, size_t len) |
478 | { | 488 | { |
479 | int i, lp_len; | 489 | int i, lp_len; |
@@ -500,7 +510,7 @@ static ssize_t reipl_ccw_loadparm_store(struct kset *kset, | |||
500 | return len; | 510 | return len; |
501 | } | 511 | } |
502 | 512 | ||
503 | static struct subsys_attribute sys_reipl_ccw_loadparm_attr = | 513 | static struct kobj_attribute sys_reipl_ccw_loadparm_attr = |
504 | __ATTR(loadparm, 0644, reipl_ccw_loadparm_show, | 514 | __ATTR(loadparm, 0644, reipl_ccw_loadparm_show, |
505 | reipl_ccw_loadparm_store); | 515 | reipl_ccw_loadparm_store); |
506 | 516 | ||
@@ -568,13 +578,15 @@ static int reipl_set_type(enum ipl_type type) | |||
568 | return 0; | 578 | return 0; |
569 | } | 579 | } |
570 | 580 | ||
571 | static ssize_t reipl_type_show(struct kset *kset, char *page) | 581 | static ssize_t reipl_type_show(struct kobject *kobj, |
582 | struct kobj_attribute *attr, char *page) | ||
572 | { | 583 | { |
573 | return sprintf(page, "%s\n", ipl_type_str(reipl_type)); | 584 | return sprintf(page, "%s\n", ipl_type_str(reipl_type)); |
574 | } | 585 | } |
575 | 586 | ||
576 | static ssize_t reipl_type_store(struct kset *kset, const char *buf, | 587 | static ssize_t reipl_type_store(struct kobject *kobj, |
577 | size_t len) | 588 | struct kobj_attribute *attr, |
589 | const char *buf, size_t len) | ||
578 | { | 590 | { |
579 | int rc = -EINVAL; | 591 | int rc = -EINVAL; |
580 | 592 | ||
@@ -587,10 +599,10 @@ static ssize_t reipl_type_store(struct kset *kset, const char *buf, | |||
587 | return (rc != 0) ? rc : len; | 599 | return (rc != 0) ? rc : len; |
588 | } | 600 | } |
589 | 601 | ||
590 | static struct subsys_attribute reipl_type_attr = | 602 | static struct kobj_attribute reipl_type_attr = |
591 | __ATTR(reipl_type, 0644, reipl_type_show, reipl_type_store); | 603 | __ATTR(reipl_type, 0644, reipl_type_show, reipl_type_store); |
592 | 604 | ||
593 | static decl_subsys(reipl, NULL, NULL); | 605 | static struct kset *reipl_kset; |
594 | 606 | ||
595 | /* | 607 | /* |
596 | * dump section | 608 | * dump section |
@@ -663,13 +675,15 @@ static int dump_set_type(enum dump_type type) | |||
663 | return 0; | 675 | return 0; |
664 | } | 676 | } |
665 | 677 | ||
666 | static ssize_t dump_type_show(struct kset *kset, char *page) | 678 | static ssize_t dump_type_show(struct kobject *kobj, |
679 | struct kobj_attribute *attr, char *page) | ||
667 | { | 680 | { |
668 | return sprintf(page, "%s\n", dump_type_str(dump_type)); | 681 | return sprintf(page, "%s\n", dump_type_str(dump_type)); |
669 | } | 682 | } |
670 | 683 | ||
671 | static ssize_t dump_type_store(struct kset *kset, const char *buf, | 684 | static ssize_t dump_type_store(struct kobject *kobj, |
672 | size_t len) | 685 | struct kobj_attribute *attr, |
686 | const char *buf, size_t len) | ||
673 | { | 687 | { |
674 | int rc = -EINVAL; | 688 | int rc = -EINVAL; |
675 | 689 | ||
@@ -682,26 +696,28 @@ static ssize_t dump_type_store(struct kset *kset, const char *buf, | |||
682 | return (rc != 0) ? rc : len; | 696 | return (rc != 0) ? rc : len; |
683 | } | 697 | } |
684 | 698 | ||
685 | static struct subsys_attribute dump_type_attr = | 699 | static struct kobj_attribute dump_type_attr = |
686 | __ATTR(dump_type, 0644, dump_type_show, dump_type_store); | 700 | __ATTR(dump_type, 0644, dump_type_show, dump_type_store); |
687 | 701 | ||
688 | static decl_subsys(dump, NULL, NULL); | 702 | static struct kset *dump_kset; |
689 | 703 | ||
690 | /* | 704 | /* |
691 | * Shutdown actions section | 705 | * Shutdown actions section |
692 | */ | 706 | */ |
693 | 707 | ||
694 | static decl_subsys(shutdown_actions, NULL, NULL); | 708 | static struct kset *shutdown_actions_kset; |
695 | 709 | ||
696 | /* on panic */ | 710 | /* on panic */ |
697 | 711 | ||
698 | static ssize_t on_panic_show(struct kset *kset, char *page) | 712 | static ssize_t on_panic_show(struct kobject *kobj, |
713 | struct kobj_attribute *attr, char *page) | ||
699 | { | 714 | { |
700 | return sprintf(page, "%s\n", shutdown_action_str(on_panic_action)); | 715 | return sprintf(page, "%s\n", shutdown_action_str(on_panic_action)); |
701 | } | 716 | } |
702 | 717 | ||
703 | static ssize_t on_panic_store(struct kset *kset, const char *buf, | 718 | static ssize_t on_panic_store(struct kobject *kobj, |
704 | size_t len) | 719 | struct kobj_attribute *attr, |
720 | const char *buf, size_t len) | ||
705 | { | 721 | { |
706 | if (strncmp(buf, SHUTDOWN_REIPL_STR, strlen(SHUTDOWN_REIPL_STR)) == 0) | 722 | if (strncmp(buf, SHUTDOWN_REIPL_STR, strlen(SHUTDOWN_REIPL_STR)) == 0) |
707 | on_panic_action = SHUTDOWN_REIPL; | 723 | on_panic_action = SHUTDOWN_REIPL; |
@@ -717,7 +733,7 @@ static ssize_t on_panic_store(struct kset *kset, const char *buf, | |||
717 | return len; | 733 | return len; |
718 | } | 734 | } |
719 | 735 | ||
720 | static struct subsys_attribute on_panic_attr = | 736 | static struct kobj_attribute on_panic_attr = |
721 | __ATTR(on_panic, 0644, on_panic_show, on_panic_store); | 737 | __ATTR(on_panic, 0644, on_panic_show, on_panic_store); |
722 | 738 | ||
723 | void do_reipl(void) | 739 | void do_reipl(void) |
@@ -814,23 +830,23 @@ static int __init ipl_register_fcp_files(void) | |||
814 | { | 830 | { |
815 | int rc; | 831 | int rc; |
816 | 832 | ||
817 | rc = sysfs_create_group(&ipl_subsys.kobj, | 833 | rc = sysfs_create_group(&ipl_kset->kobj, |
818 | &ipl_fcp_attr_group); | 834 | &ipl_fcp_attr_group); |
819 | if (rc) | 835 | if (rc) |
820 | goto out; | 836 | goto out; |
821 | rc = sysfs_create_bin_file(&ipl_subsys.kobj, | 837 | rc = sysfs_create_bin_file(&ipl_kset->kobj, |
822 | &ipl_parameter_attr); | 838 | &ipl_parameter_attr); |
823 | if (rc) | 839 | if (rc) |
824 | goto out_ipl_parm; | 840 | goto out_ipl_parm; |
825 | rc = sysfs_create_bin_file(&ipl_subsys.kobj, | 841 | rc = sysfs_create_bin_file(&ipl_kset->kobj, |
826 | &ipl_scp_data_attr); | 842 | &ipl_scp_data_attr); |
827 | if (!rc) | 843 | if (!rc) |
828 | goto out; | 844 | goto out; |
829 | 845 | ||
830 | sysfs_remove_bin_file(&ipl_subsys.kobj, &ipl_parameter_attr); | 846 | sysfs_remove_bin_file(&ipl_kset->kobj, &ipl_parameter_attr); |
831 | 847 | ||
832 | out_ipl_parm: | 848 | out_ipl_parm: |
833 | sysfs_remove_group(&ipl_subsys.kobj, &ipl_fcp_attr_group); | 849 | sysfs_remove_group(&ipl_kset->kobj, &ipl_fcp_attr_group); |
834 | out: | 850 | out: |
835 | return rc; | 851 | return rc; |
836 | } | 852 | } |
@@ -839,12 +855,12 @@ static int __init ipl_init(void) | |||
839 | { | 855 | { |
840 | int rc; | 856 | int rc; |
841 | 857 | ||
842 | rc = firmware_register(&ipl_subsys); | 858 | ipl_kset = kset_create_and_add("ipl", NULL, firmware_kobj); |
843 | if (rc) | 859 | if (!ipl_kset) |
844 | return rc; | 860 | return -ENOMEM; |
845 | switch (ipl_info.type) { | 861 | switch (ipl_info.type) { |
846 | case IPL_TYPE_CCW: | 862 | case IPL_TYPE_CCW: |
847 | rc = sysfs_create_group(&ipl_subsys.kobj, | 863 | rc = sysfs_create_group(&ipl_kset->kobj, |
848 | &ipl_ccw_attr_group); | 864 | &ipl_ccw_attr_group); |
849 | break; | 865 | break; |
850 | case IPL_TYPE_FCP: | 866 | case IPL_TYPE_FCP: |
@@ -852,16 +868,16 @@ static int __init ipl_init(void) | |||
852 | rc = ipl_register_fcp_files(); | 868 | rc = ipl_register_fcp_files(); |
853 | break; | 869 | break; |
854 | case IPL_TYPE_NSS: | 870 | case IPL_TYPE_NSS: |
855 | rc = sysfs_create_group(&ipl_subsys.kobj, | 871 | rc = sysfs_create_group(&ipl_kset->kobj, |
856 | &ipl_nss_attr_group); | 872 | &ipl_nss_attr_group); |
857 | break; | 873 | break; |
858 | default: | 874 | default: |
859 | rc = sysfs_create_group(&ipl_subsys.kobj, | 875 | rc = sysfs_create_group(&ipl_kset->kobj, |
860 | &ipl_unknown_attr_group); | 876 | &ipl_unknown_attr_group); |
861 | break; | 877 | break; |
862 | } | 878 | } |
863 | if (rc) | 879 | if (rc) |
864 | firmware_unregister(&ipl_subsys); | 880 | kset_unregister(ipl_kset); |
865 | return rc; | 881 | return rc; |
866 | } | 882 | } |
867 | 883 | ||
@@ -883,7 +899,7 @@ static int __init reipl_nss_init(void) | |||
883 | 899 | ||
884 | if (!MACHINE_IS_VM) | 900 | if (!MACHINE_IS_VM) |
885 | return 0; | 901 | return 0; |
886 | rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_nss_attr_group); | 902 | rc = sysfs_create_group(&reipl_kset->kobj, &reipl_nss_attr_group); |
887 | if (rc) | 903 | if (rc) |
888 | return rc; | 904 | return rc; |
889 | strncpy(reipl_nss_name, kernel_nss_name, NSS_NAME_SIZE + 1); | 905 | strncpy(reipl_nss_name, kernel_nss_name, NSS_NAME_SIZE + 1); |
@@ -898,7 +914,7 @@ static int __init reipl_ccw_init(void) | |||
898 | reipl_block_ccw = (void *) get_zeroed_page(GFP_KERNEL); | 914 | reipl_block_ccw = (void *) get_zeroed_page(GFP_KERNEL); |
899 | if (!reipl_block_ccw) | 915 | if (!reipl_block_ccw) |
900 | return -ENOMEM; | 916 | return -ENOMEM; |
901 | rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_ccw_attr_group); | 917 | rc = sysfs_create_group(&reipl_kset->kobj, &reipl_ccw_attr_group); |
902 | if (rc) { | 918 | if (rc) { |
903 | free_page((unsigned long)reipl_block_ccw); | 919 | free_page((unsigned long)reipl_block_ccw); |
904 | return rc; | 920 | return rc; |
@@ -936,7 +952,7 @@ static int __init reipl_fcp_init(void) | |||
936 | reipl_block_fcp = (void *) get_zeroed_page(GFP_KERNEL); | 952 | reipl_block_fcp = (void *) get_zeroed_page(GFP_KERNEL); |
937 | if (!reipl_block_fcp) | 953 | if (!reipl_block_fcp) |
938 | return -ENOMEM; | 954 | return -ENOMEM; |
939 | rc = sysfs_create_group(&reipl_subsys.kobj, &reipl_fcp_attr_group); | 955 | rc = sysfs_create_group(&reipl_kset->kobj, &reipl_fcp_attr_group); |
940 | if (rc) { | 956 | if (rc) { |
941 | free_page((unsigned long)reipl_block_fcp); | 957 | free_page((unsigned long)reipl_block_fcp); |
942 | return rc; | 958 | return rc; |
@@ -958,12 +974,12 @@ static int __init reipl_init(void) | |||
958 | { | 974 | { |
959 | int rc; | 975 | int rc; |
960 | 976 | ||
961 | rc = firmware_register(&reipl_subsys); | 977 | reipl_kset = kset_create_and_add("reipl", NULL, firmware_kobj); |
962 | if (rc) | 978 | if (!reipl_kset) |
963 | return rc; | 979 | return -ENOMEM; |
964 | rc = subsys_create_file(&reipl_subsys, &reipl_type_attr); | 980 | rc = sysfs_create_file(&reipl_kset->kobj, &reipl_type_attr.attr); |
965 | if (rc) { | 981 | if (rc) { |
966 | firmware_unregister(&reipl_subsys); | 982 | kset_unregister(reipl_kset); |
967 | return rc; | 983 | return rc; |
968 | } | 984 | } |
969 | rc = reipl_ccw_init(); | 985 | rc = reipl_ccw_init(); |
@@ -988,7 +1004,7 @@ static int __init dump_ccw_init(void) | |||
988 | dump_block_ccw = (void *) get_zeroed_page(GFP_KERNEL); | 1004 | dump_block_ccw = (void *) get_zeroed_page(GFP_KERNEL); |
989 | if (!dump_block_ccw) | 1005 | if (!dump_block_ccw) |
990 | return -ENOMEM; | 1006 | return -ENOMEM; |
991 | rc = sysfs_create_group(&dump_subsys.kobj, &dump_ccw_attr_group); | 1007 | rc = sysfs_create_group(&dump_kset->kobj, &dump_ccw_attr_group); |
992 | if (rc) { | 1008 | if (rc) { |
993 | free_page((unsigned long)dump_block_ccw); | 1009 | free_page((unsigned long)dump_block_ccw); |
994 | return rc; | 1010 | return rc; |
@@ -1012,7 +1028,7 @@ static int __init dump_fcp_init(void) | |||
1012 | dump_block_fcp = (void *) get_zeroed_page(GFP_KERNEL); | 1028 | dump_block_fcp = (void *) get_zeroed_page(GFP_KERNEL); |
1013 | if (!dump_block_fcp) | 1029 | if (!dump_block_fcp) |
1014 | return -ENOMEM; | 1030 | return -ENOMEM; |
1015 | rc = sysfs_create_group(&dump_subsys.kobj, &dump_fcp_attr_group); | 1031 | rc = sysfs_create_group(&dump_kset->kobj, &dump_fcp_attr_group); |
1016 | if (rc) { | 1032 | if (rc) { |
1017 | free_page((unsigned long)dump_block_fcp); | 1033 | free_page((unsigned long)dump_block_fcp); |
1018 | return rc; | 1034 | return rc; |
@@ -1047,12 +1063,12 @@ static int __init dump_init(void) | |||
1047 | { | 1063 | { |
1048 | int rc; | 1064 | int rc; |
1049 | 1065 | ||
1050 | rc = firmware_register(&dump_subsys); | 1066 | dump_kset = kset_create_and_add("dump", NULL, firmware_kobj); |
1051 | if (rc) | 1067 | if (!dump_kset) |
1052 | return rc; | 1068 | return -ENOMEM; |
1053 | rc = subsys_create_file(&dump_subsys, &dump_type_attr); | 1069 | rc = sysfs_create_file(&dump_kset->kobj, &dump_type_attr); |
1054 | if (rc) { | 1070 | if (rc) { |
1055 | firmware_unregister(&dump_subsys); | 1071 | kset_unregister(dump_kset); |
1056 | return rc; | 1072 | return rc; |
1057 | } | 1073 | } |
1058 | rc = dump_ccw_init(); | 1074 | rc = dump_ccw_init(); |
@@ -1069,12 +1085,13 @@ static int __init shutdown_actions_init(void) | |||
1069 | { | 1085 | { |
1070 | int rc; | 1086 | int rc; |
1071 | 1087 | ||
1072 | rc = firmware_register(&shutdown_actions_subsys); | 1088 | shutdown_actions_kset = kset_create_and_add("shutdown_actions", NULL, |
1073 | if (rc) | 1089 | firmware_kobj); |
1074 | return rc; | 1090 | if (!shutdown_actions_kset) |
1075 | rc = subsys_create_file(&shutdown_actions_subsys, &on_panic_attr); | 1091 | return -ENOMEM; |
1092 | rc = sysfs_create_file(&shutdown_actions_kset->kobj, &on_panic_attr); | ||
1076 | if (rc) { | 1093 | if (rc) { |
1077 | firmware_unregister(&shutdown_actions_subsys); | 1094 | kset_unregister(shutdown_actions_kset); |
1078 | return rc; | 1095 | return rc; |
1079 | } | 1096 | } |
1080 | atomic_notifier_chain_register(&panic_notifier_list, | 1097 | atomic_notifier_chain_register(&panic_notifier_list, |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index 22b800ce2126..3bbac1293be4 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -1145,7 +1145,7 @@ static void etr_work_fn(struct work_struct *work) | |||
1145 | * Sysfs interface functions | 1145 | * Sysfs interface functions |
1146 | */ | 1146 | */ |
1147 | static struct sysdev_class etr_sysclass = { | 1147 | static struct sysdev_class etr_sysclass = { |
1148 | set_kset_name("etr") | 1148 | .name = "etr", |
1149 | }; | 1149 | }; |
1150 | 1150 | ||
1151 | static struct sys_device etr_port0_dev = { | 1151 | static struct sys_device etr_port0_dev = { |
diff --git a/arch/sh/drivers/dma/dma-sysfs.c b/arch/sh/drivers/dma/dma-sysfs.c index eebcd4768bbf..51b57c0d1a3c 100644 --- a/arch/sh/drivers/dma/dma-sysfs.c +++ b/arch/sh/drivers/dma/dma-sysfs.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <asm/dma.h> | 19 | #include <asm/dma.h> |
20 | 20 | ||
21 | static struct sysdev_class dma_sysclass = { | 21 | static struct sysdev_class dma_sysclass = { |
22 | set_kset_name("dma"), | 22 | .name = "dma", |
23 | }; | 23 | }; |
24 | EXPORT_SYMBOL(dma_sysclass); | 24 | EXPORT_SYMBOL(dma_sysclass); |
25 | 25 | ||
diff --git a/arch/sh/kernel/cpu/sh4/sq.c b/arch/sh/kernel/cpu/sh4/sq.c index b22a78c807e6..3008c00eea6b 100644 --- a/arch/sh/kernel/cpu/sh4/sq.c +++ b/arch/sh/kernel/cpu/sh4/sq.c | |||
@@ -341,17 +341,18 @@ static int __devinit sq_sysdev_add(struct sys_device *sysdev) | |||
341 | { | 341 | { |
342 | unsigned int cpu = sysdev->id; | 342 | unsigned int cpu = sysdev->id; |
343 | struct kobject *kobj; | 343 | struct kobject *kobj; |
344 | int error; | ||
344 | 345 | ||
345 | sq_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL); | 346 | sq_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL); |
346 | if (unlikely(!sq_kobject[cpu])) | 347 | if (unlikely(!sq_kobject[cpu])) |
347 | return -ENOMEM; | 348 | return -ENOMEM; |
348 | 349 | ||
349 | kobj = sq_kobject[cpu]; | 350 | kobj = sq_kobject[cpu]; |
350 | kobj->parent = &sysdev->kobj; | 351 | error = kobject_init_and_add(kobj, &ktype_percpu_entry, &sysdev->kobj, |
351 | kobject_set_name(kobj, "%s", "sq"); | 352 | "%s", "sq"); |
352 | kobj->ktype = &ktype_percpu_entry; | 353 | if (!error) |
353 | 354 | kobject_uevent(kobj, KOBJ_ADD); | |
354 | return kobject_register(kobj); | 355 | return error; |
355 | } | 356 | } |
356 | 357 | ||
357 | static int __devexit sq_sysdev_remove(struct sys_device *sysdev) | 358 | static int __devexit sq_sysdev_remove(struct sys_device *sysdev) |
@@ -359,7 +360,7 @@ static int __devexit sq_sysdev_remove(struct sys_device *sysdev) | |||
359 | unsigned int cpu = sysdev->id; | 360 | unsigned int cpu = sysdev->id; |
360 | struct kobject *kobj = sq_kobject[cpu]; | 361 | struct kobject *kobj = sq_kobject[cpu]; |
361 | 362 | ||
362 | kobject_unregister(kobj); | 363 | kobject_put(kobj); |
363 | return 0; | 364 | return 0; |
364 | } | 365 | } |
365 | 366 | ||
diff --git a/arch/sh/kernel/time.c b/arch/sh/kernel/time.c index a3a67d151e52..2bc04bfee738 100644 --- a/arch/sh/kernel/time.c +++ b/arch/sh/kernel/time.c | |||
@@ -174,7 +174,7 @@ int timer_resume(struct sys_device *dev) | |||
174 | #endif | 174 | #endif |
175 | 175 | ||
176 | static struct sysdev_class timer_sysclass = { | 176 | static struct sysdev_class timer_sysclass = { |
177 | set_kset_name("timer"), | 177 | .name = "timer", |
178 | .suspend = timer_suspend, | 178 | .suspend = timer_suspend, |
179 | .resume = timer_resume, | 179 | .resume = timer_resume, |
180 | }; | 180 | }; |
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile index 46bb609e2444..3874c2de5403 100644 --- a/arch/x86/crypto/Makefile +++ b/arch/x86/crypto/Makefile | |||
@@ -4,12 +4,16 @@ | |||
4 | 4 | ||
5 | obj-$(CONFIG_CRYPTO_AES_586) += aes-i586.o | 5 | obj-$(CONFIG_CRYPTO_AES_586) += aes-i586.o |
6 | obj-$(CONFIG_CRYPTO_TWOFISH_586) += twofish-i586.o | 6 | obj-$(CONFIG_CRYPTO_TWOFISH_586) += twofish-i586.o |
7 | obj-$(CONFIG_CRYPTO_SALSA20_586) += salsa20-i586.o | ||
7 | 8 | ||
8 | obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o | 9 | obj-$(CONFIG_CRYPTO_AES_X86_64) += aes-x86_64.o |
9 | obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o | 10 | obj-$(CONFIG_CRYPTO_TWOFISH_X86_64) += twofish-x86_64.o |
11 | obj-$(CONFIG_CRYPTO_SALSA20_X86_64) += salsa20-x86_64.o | ||
10 | 12 | ||
11 | aes-i586-y := aes-i586-asm_32.o aes_32.o | 13 | aes-i586-y := aes-i586-asm_32.o aes_glue.o |
12 | twofish-i586-y := twofish-i586-asm_32.o twofish_32.o | 14 | twofish-i586-y := twofish-i586-asm_32.o twofish_glue.o |
15 | salsa20-i586-y := salsa20-i586-asm_32.o salsa20_glue.o | ||
13 | 16 | ||
14 | aes-x86_64-y := aes-x86_64-asm_64.o aes_64.o | 17 | aes-x86_64-y := aes-x86_64-asm_64.o aes_glue.o |
15 | twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_64.o | 18 | twofish-x86_64-y := twofish-x86_64-asm_64.o twofish_glue.o |
19 | salsa20-x86_64-y := salsa20-x86_64-asm_64.o salsa20_glue.o | ||
diff --git a/arch/x86/crypto/aes-i586-asm_32.S b/arch/x86/crypto/aes-i586-asm_32.S index f942f0c8f630..1093bede3e0a 100644 --- a/arch/x86/crypto/aes-i586-asm_32.S +++ b/arch/x86/crypto/aes-i586-asm_32.S | |||
@@ -46,9 +46,9 @@ | |||
46 | #define in_blk 16 | 46 | #define in_blk 16 |
47 | 47 | ||
48 | /* offsets in crypto_tfm structure */ | 48 | /* offsets in crypto_tfm structure */ |
49 | #define ekey (crypto_tfm_ctx_offset + 0) | 49 | #define klen (crypto_tfm_ctx_offset + 0) |
50 | #define nrnd (crypto_tfm_ctx_offset + 256) | 50 | #define ekey (crypto_tfm_ctx_offset + 4) |
51 | #define dkey (crypto_tfm_ctx_offset + 260) | 51 | #define dkey (crypto_tfm_ctx_offset + 244) |
52 | 52 | ||
53 | // register mapping for encrypt and decrypt subroutines | 53 | // register mapping for encrypt and decrypt subroutines |
54 | 54 | ||
@@ -221,8 +221,8 @@ | |||
221 | 221 | ||
222 | .global aes_enc_blk | 222 | .global aes_enc_blk |
223 | 223 | ||
224 | .extern ft_tab | 224 | .extern crypto_ft_tab |
225 | .extern fl_tab | 225 | .extern crypto_fl_tab |
226 | 226 | ||
227 | .align 4 | 227 | .align 4 |
228 | 228 | ||
@@ -236,7 +236,7 @@ aes_enc_blk: | |||
236 | 1: push %ebx | 236 | 1: push %ebx |
237 | mov in_blk+4(%esp),%r2 | 237 | mov in_blk+4(%esp),%r2 |
238 | push %esi | 238 | push %esi |
239 | mov nrnd(%ebp),%r3 // number of rounds | 239 | mov klen(%ebp),%r3 // key size |
240 | push %edi | 240 | push %edi |
241 | #if ekey != 0 | 241 | #if ekey != 0 |
242 | lea ekey(%ebp),%ebp // key pointer | 242 | lea ekey(%ebp),%ebp // key pointer |
@@ -255,26 +255,26 @@ aes_enc_blk: | |||
255 | 255 | ||
256 | sub $8,%esp // space for register saves on stack | 256 | sub $8,%esp // space for register saves on stack |
257 | add $16,%ebp // increment to next round key | 257 | add $16,%ebp // increment to next round key |
258 | cmp $12,%r3 | 258 | cmp $24,%r3 |
259 | jb 4f // 10 rounds for 128-bit key | 259 | jb 4f // 10 rounds for 128-bit key |
260 | lea 32(%ebp),%ebp | 260 | lea 32(%ebp),%ebp |
261 | je 3f // 12 rounds for 192-bit key | 261 | je 3f // 12 rounds for 192-bit key |
262 | lea 32(%ebp),%ebp | 262 | lea 32(%ebp),%ebp |
263 | 263 | ||
264 | 2: fwd_rnd1( -64(%ebp) ,ft_tab) // 14 rounds for 256-bit key | 264 | 2: fwd_rnd1( -64(%ebp), crypto_ft_tab) // 14 rounds for 256-bit key |
265 | fwd_rnd2( -48(%ebp) ,ft_tab) | 265 | fwd_rnd2( -48(%ebp), crypto_ft_tab) |
266 | 3: fwd_rnd1( -32(%ebp) ,ft_tab) // 12 rounds for 192-bit key | 266 | 3: fwd_rnd1( -32(%ebp), crypto_ft_tab) // 12 rounds for 192-bit key |
267 | fwd_rnd2( -16(%ebp) ,ft_tab) | 267 | fwd_rnd2( -16(%ebp), crypto_ft_tab) |
268 | 4: fwd_rnd1( (%ebp) ,ft_tab) // 10 rounds for 128-bit key | 268 | 4: fwd_rnd1( (%ebp), crypto_ft_tab) // 10 rounds for 128-bit key |
269 | fwd_rnd2( +16(%ebp) ,ft_tab) | 269 | fwd_rnd2( +16(%ebp), crypto_ft_tab) |
270 | fwd_rnd1( +32(%ebp) ,ft_tab) | 270 | fwd_rnd1( +32(%ebp), crypto_ft_tab) |
271 | fwd_rnd2( +48(%ebp) ,ft_tab) | 271 | fwd_rnd2( +48(%ebp), crypto_ft_tab) |
272 | fwd_rnd1( +64(%ebp) ,ft_tab) | 272 | fwd_rnd1( +64(%ebp), crypto_ft_tab) |
273 | fwd_rnd2( +80(%ebp) ,ft_tab) | 273 | fwd_rnd2( +80(%ebp), crypto_ft_tab) |
274 | fwd_rnd1( +96(%ebp) ,ft_tab) | 274 | fwd_rnd1( +96(%ebp), crypto_ft_tab) |
275 | fwd_rnd2(+112(%ebp) ,ft_tab) | 275 | fwd_rnd2(+112(%ebp), crypto_ft_tab) |
276 | fwd_rnd1(+128(%ebp) ,ft_tab) | 276 | fwd_rnd1(+128(%ebp), crypto_ft_tab) |
277 | fwd_rnd2(+144(%ebp) ,fl_tab) // last round uses a different table | 277 | fwd_rnd2(+144(%ebp), crypto_fl_tab) // last round uses a different table |
278 | 278 | ||
279 | // move final values to the output array. CAUTION: the | 279 | // move final values to the output array. CAUTION: the |
280 | // order of these assigns rely on the register mappings | 280 | // order of these assigns rely on the register mappings |
@@ -297,8 +297,8 @@ aes_enc_blk: | |||
297 | 297 | ||
298 | .global aes_dec_blk | 298 | .global aes_dec_blk |
299 | 299 | ||
300 | .extern it_tab | 300 | .extern crypto_it_tab |
301 | .extern il_tab | 301 | .extern crypto_il_tab |
302 | 302 | ||
303 | .align 4 | 303 | .align 4 |
304 | 304 | ||
@@ -312,14 +312,11 @@ aes_dec_blk: | |||
312 | 1: push %ebx | 312 | 1: push %ebx |
313 | mov in_blk+4(%esp),%r2 | 313 | mov in_blk+4(%esp),%r2 |
314 | push %esi | 314 | push %esi |
315 | mov nrnd(%ebp),%r3 // number of rounds | 315 | mov klen(%ebp),%r3 // key size |
316 | push %edi | 316 | push %edi |
317 | #if dkey != 0 | 317 | #if dkey != 0 |
318 | lea dkey(%ebp),%ebp // key pointer | 318 | lea dkey(%ebp),%ebp // key pointer |
319 | #endif | 319 | #endif |
320 | mov %r3,%r0 | ||
321 | shl $4,%r0 | ||
322 | add %r0,%ebp | ||
323 | 320 | ||
324 | // input four columns and xor in first round key | 321 | // input four columns and xor in first round key |
325 | 322 | ||
@@ -333,27 +330,27 @@ aes_dec_blk: | |||
333 | xor 12(%ebp),%r5 | 330 | xor 12(%ebp),%r5 |
334 | 331 | ||
335 | sub $8,%esp // space for register saves on stack | 332 | sub $8,%esp // space for register saves on stack |
336 | sub $16,%ebp // increment to next round key | 333 | add $16,%ebp // increment to next round key |
337 | cmp $12,%r3 | 334 | cmp $24,%r3 |
338 | jb 4f // 10 rounds for 128-bit key | 335 | jb 4f // 10 rounds for 128-bit key |
339 | lea -32(%ebp),%ebp | 336 | lea 32(%ebp),%ebp |
340 | je 3f // 12 rounds for 192-bit key | 337 | je 3f // 12 rounds for 192-bit key |
341 | lea -32(%ebp),%ebp | 338 | lea 32(%ebp),%ebp |
342 | 339 | ||
343 | 2: inv_rnd1( +64(%ebp), it_tab) // 14 rounds for 256-bit key | 340 | 2: inv_rnd1( -64(%ebp), crypto_it_tab) // 14 rounds for 256-bit key |
344 | inv_rnd2( +48(%ebp), it_tab) | 341 | inv_rnd2( -48(%ebp), crypto_it_tab) |
345 | 3: inv_rnd1( +32(%ebp), it_tab) // 12 rounds for 192-bit key | 342 | 3: inv_rnd1( -32(%ebp), crypto_it_tab) // 12 rounds for 192-bit key |
346 | inv_rnd2( +16(%ebp), it_tab) | 343 | inv_rnd2( -16(%ebp), crypto_it_tab) |
347 | 4: inv_rnd1( (%ebp), it_tab) // 10 rounds for 128-bit key | 344 | 4: inv_rnd1( (%ebp), crypto_it_tab) // 10 rounds for 128-bit key |
348 | inv_rnd2( -16(%ebp), it_tab) | 345 | inv_rnd2( +16(%ebp), crypto_it_tab) |
349 | inv_rnd1( -32(%ebp), it_tab) | 346 | inv_rnd1( +32(%ebp), crypto_it_tab) |
350 | inv_rnd2( -48(%ebp), it_tab) | 347 | inv_rnd2( +48(%ebp), crypto_it_tab) |
351 | inv_rnd1( -64(%ebp), it_tab) | 348 | inv_rnd1( +64(%ebp), crypto_it_tab) |
352 | inv_rnd2( -80(%ebp), it_tab) | 349 | inv_rnd2( +80(%ebp), crypto_it_tab) |
353 | inv_rnd1( -96(%ebp), it_tab) | 350 | inv_rnd1( +96(%ebp), crypto_it_tab) |
354 | inv_rnd2(-112(%ebp), it_tab) | 351 | inv_rnd2(+112(%ebp), crypto_it_tab) |
355 | inv_rnd1(-128(%ebp), it_tab) | 352 | inv_rnd1(+128(%ebp), crypto_it_tab) |
356 | inv_rnd2(-144(%ebp), il_tab) // last round uses a different table | 353 | inv_rnd2(+144(%ebp), crypto_il_tab) // last round uses a different table |
357 | 354 | ||
358 | // move final values to the output array. CAUTION: the | 355 | // move final values to the output array. CAUTION: the |
359 | // order of these assigns rely on the register mappings | 356 | // order of these assigns rely on the register mappings |
diff --git a/arch/x86/crypto/aes-x86_64-asm_64.S b/arch/x86/crypto/aes-x86_64-asm_64.S index 26b40de4d0b0..a120f526c3df 100644 --- a/arch/x86/crypto/aes-x86_64-asm_64.S +++ b/arch/x86/crypto/aes-x86_64-asm_64.S | |||
@@ -8,10 +8,10 @@ | |||
8 | * including this sentence is retained in full. | 8 | * including this sentence is retained in full. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | .extern aes_ft_tab | 11 | .extern crypto_ft_tab |
12 | .extern aes_it_tab | 12 | .extern crypto_it_tab |
13 | .extern aes_fl_tab | 13 | .extern crypto_fl_tab |
14 | .extern aes_il_tab | 14 | .extern crypto_il_tab |
15 | 15 | ||
16 | .text | 16 | .text |
17 | 17 | ||
@@ -56,13 +56,13 @@ | |||
56 | .align 8; \ | 56 | .align 8; \ |
57 | FUNC: movq r1,r2; \ | 57 | FUNC: movq r1,r2; \ |
58 | movq r3,r4; \ | 58 | movq r3,r4; \ |
59 | leaq BASE+KEY+52(r8),r9; \ | 59 | leaq BASE+KEY+48+4(r8),r9; \ |
60 | movq r10,r11; \ | 60 | movq r10,r11; \ |
61 | movl (r7),r5 ## E; \ | 61 | movl (r7),r5 ## E; \ |
62 | movl 4(r7),r1 ## E; \ | 62 | movl 4(r7),r1 ## E; \ |
63 | movl 8(r7),r6 ## E; \ | 63 | movl 8(r7),r6 ## E; \ |
64 | movl 12(r7),r7 ## E; \ | 64 | movl 12(r7),r7 ## E; \ |
65 | movl BASE(r8),r10 ## E; \ | 65 | movl BASE+0(r8),r10 ## E; \ |
66 | xorl -48(r9),r5 ## E; \ | 66 | xorl -48(r9),r5 ## E; \ |
67 | xorl -44(r9),r1 ## E; \ | 67 | xorl -44(r9),r1 ## E; \ |
68 | xorl -40(r9),r6 ## E; \ | 68 | xorl -40(r9),r6 ## E; \ |
@@ -154,37 +154,37 @@ FUNC: movq r1,r2; \ | |||
154 | /* void aes_enc_blk(stuct crypto_tfm *tfm, u8 *out, const u8 *in) */ | 154 | /* void aes_enc_blk(stuct crypto_tfm *tfm, u8 *out, const u8 *in) */ |
155 | 155 | ||
156 | entry(aes_enc_blk,0,enc128,enc192) | 156 | entry(aes_enc_blk,0,enc128,enc192) |
157 | encrypt_round(aes_ft_tab,-96) | 157 | encrypt_round(crypto_ft_tab,-96) |
158 | encrypt_round(aes_ft_tab,-80) | 158 | encrypt_round(crypto_ft_tab,-80) |
159 | enc192: encrypt_round(aes_ft_tab,-64) | 159 | enc192: encrypt_round(crypto_ft_tab,-64) |
160 | encrypt_round(aes_ft_tab,-48) | 160 | encrypt_round(crypto_ft_tab,-48) |
161 | enc128: encrypt_round(aes_ft_tab,-32) | 161 | enc128: encrypt_round(crypto_ft_tab,-32) |
162 | encrypt_round(aes_ft_tab,-16) | 162 | encrypt_round(crypto_ft_tab,-16) |
163 | encrypt_round(aes_ft_tab, 0) | 163 | encrypt_round(crypto_ft_tab, 0) |
164 | encrypt_round(aes_ft_tab, 16) | 164 | encrypt_round(crypto_ft_tab, 16) |
165 | encrypt_round(aes_ft_tab, 32) | 165 | encrypt_round(crypto_ft_tab, 32) |
166 | encrypt_round(aes_ft_tab, 48) | 166 | encrypt_round(crypto_ft_tab, 48) |
167 | encrypt_round(aes_ft_tab, 64) | 167 | encrypt_round(crypto_ft_tab, 64) |
168 | encrypt_round(aes_ft_tab, 80) | 168 | encrypt_round(crypto_ft_tab, 80) |
169 | encrypt_round(aes_ft_tab, 96) | 169 | encrypt_round(crypto_ft_tab, 96) |
170 | encrypt_final(aes_fl_tab,112) | 170 | encrypt_final(crypto_fl_tab,112) |
171 | return | 171 | return |
172 | 172 | ||
173 | /* void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in) */ | 173 | /* void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in) */ |
174 | 174 | ||
175 | entry(aes_dec_blk,240,dec128,dec192) | 175 | entry(aes_dec_blk,240,dec128,dec192) |
176 | decrypt_round(aes_it_tab,-96) | 176 | decrypt_round(crypto_it_tab,-96) |
177 | decrypt_round(aes_it_tab,-80) | 177 | decrypt_round(crypto_it_tab,-80) |
178 | dec192: decrypt_round(aes_it_tab,-64) | 178 | dec192: decrypt_round(crypto_it_tab,-64) |
179 | decrypt_round(aes_it_tab,-48) | 179 | decrypt_round(crypto_it_tab,-48) |
180 | dec128: decrypt_round(aes_it_tab,-32) | 180 | dec128: decrypt_round(crypto_it_tab,-32) |
181 | decrypt_round(aes_it_tab,-16) | 181 | decrypt_round(crypto_it_tab,-16) |
182 | decrypt_round(aes_it_tab, 0) | 182 | decrypt_round(crypto_it_tab, 0) |
183 | decrypt_round(aes_it_tab, 16) | 183 | decrypt_round(crypto_it_tab, 16) |
184 | decrypt_round(aes_it_tab, 32) | 184 | decrypt_round(crypto_it_tab, 32) |
185 | decrypt_round(aes_it_tab, 48) | 185 | decrypt_round(crypto_it_tab, 48) |
186 | decrypt_round(aes_it_tab, 64) | 186 | decrypt_round(crypto_it_tab, 64) |
187 | decrypt_round(aes_it_tab, 80) | 187 | decrypt_round(crypto_it_tab, 80) |
188 | decrypt_round(aes_it_tab, 96) | 188 | decrypt_round(crypto_it_tab, 96) |
189 | decrypt_final(aes_il_tab,112) | 189 | decrypt_final(crypto_il_tab,112) |
190 | return | 190 | return |
diff --git a/arch/x86/crypto/aes_32.c b/arch/x86/crypto/aes_32.c deleted file mode 100644 index 49aad9397f10..000000000000 --- a/arch/x86/crypto/aes_32.c +++ /dev/null | |||
@@ -1,515 +0,0 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Glue Code for optimized 586 assembler version of AES | ||
4 | * | ||
5 | * Copyright (c) 2002, Dr Brian Gladman <>, Worcester, UK. | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * LICENSE TERMS | ||
9 | * | ||
10 | * The free distribution and use of this software in both source and binary | ||
11 | * form is allowed (with or without changes) provided that: | ||
12 | * | ||
13 | * 1. distributions of this source code include the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer; | ||
15 | * | ||
16 | * 2. distributions in binary form include the above copyright | ||
17 | * notice, this list of conditions and the following disclaimer | ||
18 | * in the documentation and/or other associated materials; | ||
19 | * | ||
20 | * 3. the copyright holder's name is not used to endorse products | ||
21 | * built using this software without specific written permission. | ||
22 | * | ||
23 | * ALTERNATIVELY, provided that this notice is retained in full, this product | ||
24 | * may be distributed under the terms of the GNU General Public License (GPL), | ||
25 | * in which case the provisions of the GPL apply INSTEAD OF those given above. | ||
26 | * | ||
27 | * DISCLAIMER | ||
28 | * | ||
29 | * This software is provided 'as is' with no explicit or implied warranties | ||
30 | * in respect of its properties, including, but not limited to, correctness | ||
31 | * and/or fitness for purpose. | ||
32 | * | ||
33 | * Copyright (c) 2003, Adam J. Richter <adam@yggdrasil.com> (conversion to | ||
34 | * 2.5 API). | ||
35 | * Copyright (c) 2003, 2004 Fruhwirth Clemens <clemens@endorphin.org> | ||
36 | * Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com> | ||
37 | * | ||
38 | */ | ||
39 | |||
40 | #include <asm/byteorder.h> | ||
41 | #include <linux/kernel.h> | ||
42 | #include <linux/module.h> | ||
43 | #include <linux/init.h> | ||
44 | #include <linux/types.h> | ||
45 | #include <linux/crypto.h> | ||
46 | #include <linux/linkage.h> | ||
47 | |||
48 | asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); | ||
49 | asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); | ||
50 | |||
51 | #define AES_MIN_KEY_SIZE 16 | ||
52 | #define AES_MAX_KEY_SIZE 32 | ||
53 | #define AES_BLOCK_SIZE 16 | ||
54 | #define AES_KS_LENGTH 4 * AES_BLOCK_SIZE | ||
55 | #define RC_LENGTH 29 | ||
56 | |||
57 | struct aes_ctx { | ||
58 | u32 ekey[AES_KS_LENGTH]; | ||
59 | u32 rounds; | ||
60 | u32 dkey[AES_KS_LENGTH]; | ||
61 | }; | ||
62 | |||
63 | #define WPOLY 0x011b | ||
64 | #define bytes2word(b0, b1, b2, b3) \ | ||
65 | (((u32)(b3) << 24) | ((u32)(b2) << 16) | ((u32)(b1) << 8) | (b0)) | ||
66 | |||
67 | /* define the finite field multiplies required for Rijndael */ | ||
68 | #define f2(x) ((x) ? pow[log[x] + 0x19] : 0) | ||
69 | #define f3(x) ((x) ? pow[log[x] + 0x01] : 0) | ||
70 | #define f9(x) ((x) ? pow[log[x] + 0xc7] : 0) | ||
71 | #define fb(x) ((x) ? pow[log[x] + 0x68] : 0) | ||
72 | #define fd(x) ((x) ? pow[log[x] + 0xee] : 0) | ||
73 | #define fe(x) ((x) ? pow[log[x] + 0xdf] : 0) | ||
74 | #define fi(x) ((x) ? pow[255 - log[x]]: 0) | ||
75 | |||
76 | static inline u32 upr(u32 x, int n) | ||
77 | { | ||
78 | return (x << 8 * n) | (x >> (32 - 8 * n)); | ||
79 | } | ||
80 | |||
81 | static inline u8 bval(u32 x, int n) | ||
82 | { | ||
83 | return x >> 8 * n; | ||
84 | } | ||
85 | |||
86 | /* The forward and inverse affine transformations used in the S-box */ | ||
87 | #define fwd_affine(x) \ | ||
88 | (w = (u32)x, w ^= (w<<1)^(w<<2)^(w<<3)^(w<<4), 0x63^(u8)(w^(w>>8))) | ||
89 | |||
90 | #define inv_affine(x) \ | ||
91 | (w = (u32)x, w = (w<<1)^(w<<3)^(w<<6), 0x05^(u8)(w^(w>>8))) | ||
92 | |||
93 | static u32 rcon_tab[RC_LENGTH]; | ||
94 | |||
95 | u32 ft_tab[4][256]; | ||
96 | u32 fl_tab[4][256]; | ||
97 | static u32 im_tab[4][256]; | ||
98 | u32 il_tab[4][256]; | ||
99 | u32 it_tab[4][256]; | ||
100 | |||
101 | static void gen_tabs(void) | ||
102 | { | ||
103 | u32 i, w; | ||
104 | u8 pow[512], log[256]; | ||
105 | |||
106 | /* | ||
107 | * log and power tables for GF(2^8) finite field with | ||
108 | * WPOLY as modular polynomial - the simplest primitive | ||
109 | * root is 0x03, used here to generate the tables. | ||
110 | */ | ||
111 | i = 0; w = 1; | ||
112 | |||
113 | do { | ||
114 | pow[i] = (u8)w; | ||
115 | pow[i + 255] = (u8)w; | ||
116 | log[w] = (u8)i++; | ||
117 | w ^= (w << 1) ^ (w & 0x80 ? WPOLY : 0); | ||
118 | } while (w != 1); | ||
119 | |||
120 | for(i = 0, w = 1; i < RC_LENGTH; ++i) { | ||
121 | rcon_tab[i] = bytes2word(w, 0, 0, 0); | ||
122 | w = f2(w); | ||
123 | } | ||
124 | |||
125 | for(i = 0; i < 256; ++i) { | ||
126 | u8 b; | ||
127 | |||
128 | b = fwd_affine(fi((u8)i)); | ||
129 | w = bytes2word(f2(b), b, b, f3(b)); | ||
130 | |||
131 | /* tables for a normal encryption round */ | ||
132 | ft_tab[0][i] = w; | ||
133 | ft_tab[1][i] = upr(w, 1); | ||
134 | ft_tab[2][i] = upr(w, 2); | ||
135 | ft_tab[3][i] = upr(w, 3); | ||
136 | w = bytes2word(b, 0, 0, 0); | ||
137 | |||
138 | /* | ||
139 | * tables for last encryption round | ||
140 | * (may also be used in the key schedule) | ||
141 | */ | ||
142 | fl_tab[0][i] = w; | ||
143 | fl_tab[1][i] = upr(w, 1); | ||
144 | fl_tab[2][i] = upr(w, 2); | ||
145 | fl_tab[3][i] = upr(w, 3); | ||
146 | |||
147 | b = fi(inv_affine((u8)i)); | ||
148 | w = bytes2word(fe(b), f9(b), fd(b), fb(b)); | ||
149 | |||
150 | /* tables for the inverse mix column operation */ | ||
151 | im_tab[0][b] = w; | ||
152 | im_tab[1][b] = upr(w, 1); | ||
153 | im_tab[2][b] = upr(w, 2); | ||
154 | im_tab[3][b] = upr(w, 3); | ||
155 | |||
156 | /* tables for a normal decryption round */ | ||
157 | it_tab[0][i] = w; | ||
158 | it_tab[1][i] = upr(w,1); | ||
159 | it_tab[2][i] = upr(w,2); | ||
160 | it_tab[3][i] = upr(w,3); | ||
161 | |||
162 | w = bytes2word(b, 0, 0, 0); | ||
163 | |||
164 | /* tables for last decryption round */ | ||
165 | il_tab[0][i] = w; | ||
166 | il_tab[1][i] = upr(w,1); | ||
167 | il_tab[2][i] = upr(w,2); | ||
168 | il_tab[3][i] = upr(w,3); | ||
169 | } | ||
170 | } | ||
171 | |||
172 | #define four_tables(x,tab,vf,rf,c) \ | ||
173 | ( tab[0][bval(vf(x,0,c),rf(0,c))] ^ \ | ||
174 | tab[1][bval(vf(x,1,c),rf(1,c))] ^ \ | ||
175 | tab[2][bval(vf(x,2,c),rf(2,c))] ^ \ | ||
176 | tab[3][bval(vf(x,3,c),rf(3,c))] \ | ||
177 | ) | ||
178 | |||
179 | #define vf1(x,r,c) (x) | ||
180 | #define rf1(r,c) (r) | ||
181 | #define rf2(r,c) ((r-c)&3) | ||
182 | |||
183 | #define inv_mcol(x) four_tables(x,im_tab,vf1,rf1,0) | ||
184 | #define ls_box(x,c) four_tables(x,fl_tab,vf1,rf2,c) | ||
185 | |||
186 | #define ff(x) inv_mcol(x) | ||
187 | |||
188 | #define ke4(k,i) \ | ||
189 | { \ | ||
190 | k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; \ | ||
191 | k[4*(i)+5] = ss[1] ^= ss[0]; \ | ||
192 | k[4*(i)+6] = ss[2] ^= ss[1]; \ | ||
193 | k[4*(i)+7] = ss[3] ^= ss[2]; \ | ||
194 | } | ||
195 | |||
196 | #define kel4(k,i) \ | ||
197 | { \ | ||
198 | k[4*(i)+4] = ss[0] ^= ls_box(ss[3],3) ^ rcon_tab[i]; \ | ||
199 | k[4*(i)+5] = ss[1] ^= ss[0]; \ | ||
200 | k[4*(i)+6] = ss[2] ^= ss[1]; k[4*(i)+7] = ss[3] ^= ss[2]; \ | ||
201 | } | ||
202 | |||
203 | #define ke6(k,i) \ | ||
204 | { \ | ||
205 | k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; \ | ||
206 | k[6*(i)+ 7] = ss[1] ^= ss[0]; \ | ||
207 | k[6*(i)+ 8] = ss[2] ^= ss[1]; \ | ||
208 | k[6*(i)+ 9] = ss[3] ^= ss[2]; \ | ||
209 | k[6*(i)+10] = ss[4] ^= ss[3]; \ | ||
210 | k[6*(i)+11] = ss[5] ^= ss[4]; \ | ||
211 | } | ||
212 | |||
213 | #define kel6(k,i) \ | ||
214 | { \ | ||
215 | k[6*(i)+ 6] = ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; \ | ||
216 | k[6*(i)+ 7] = ss[1] ^= ss[0]; \ | ||
217 | k[6*(i)+ 8] = ss[2] ^= ss[1]; \ | ||
218 | k[6*(i)+ 9] = ss[3] ^= ss[2]; \ | ||
219 | } | ||
220 | |||
221 | #define ke8(k,i) \ | ||
222 | { \ | ||
223 | k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; \ | ||
224 | k[8*(i)+ 9] = ss[1] ^= ss[0]; \ | ||
225 | k[8*(i)+10] = ss[2] ^= ss[1]; \ | ||
226 | k[8*(i)+11] = ss[3] ^= ss[2]; \ | ||
227 | k[8*(i)+12] = ss[4] ^= ls_box(ss[3],0); \ | ||
228 | k[8*(i)+13] = ss[5] ^= ss[4]; \ | ||
229 | k[8*(i)+14] = ss[6] ^= ss[5]; \ | ||
230 | k[8*(i)+15] = ss[7] ^= ss[6]; \ | ||
231 | } | ||
232 | |||
233 | #define kel8(k,i) \ | ||
234 | { \ | ||
235 | k[8*(i)+ 8] = ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; \ | ||
236 | k[8*(i)+ 9] = ss[1] ^= ss[0]; \ | ||
237 | k[8*(i)+10] = ss[2] ^= ss[1]; \ | ||
238 | k[8*(i)+11] = ss[3] ^= ss[2]; \ | ||
239 | } | ||
240 | |||
241 | #define kdf4(k,i) \ | ||
242 | { \ | ||
243 | ss[0] = ss[0] ^ ss[2] ^ ss[1] ^ ss[3]; \ | ||
244 | ss[1] = ss[1] ^ ss[3]; \ | ||
245 | ss[2] = ss[2] ^ ss[3]; \ | ||
246 | ss[3] = ss[3]; \ | ||
247 | ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; \ | ||
248 | ss[i % 4] ^= ss[4]; \ | ||
249 | ss[4] ^= k[4*(i)]; \ | ||
250 | k[4*(i)+4] = ff(ss[4]); \ | ||
251 | ss[4] ^= k[4*(i)+1]; \ | ||
252 | k[4*(i)+5] = ff(ss[4]); \ | ||
253 | ss[4] ^= k[4*(i)+2]; \ | ||
254 | k[4*(i)+6] = ff(ss[4]); \ | ||
255 | ss[4] ^= k[4*(i)+3]; \ | ||
256 | k[4*(i)+7] = ff(ss[4]); \ | ||
257 | } | ||
258 | |||
259 | #define kd4(k,i) \ | ||
260 | { \ | ||
261 | ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; \ | ||
262 | ss[i % 4] ^= ss[4]; \ | ||
263 | ss[4] = ff(ss[4]); \ | ||
264 | k[4*(i)+4] = ss[4] ^= k[4*(i)]; \ | ||
265 | k[4*(i)+5] = ss[4] ^= k[4*(i)+1]; \ | ||
266 | k[4*(i)+6] = ss[4] ^= k[4*(i)+2]; \ | ||
267 | k[4*(i)+7] = ss[4] ^= k[4*(i)+3]; \ | ||
268 | } | ||
269 | |||
270 | #define kdl4(k,i) \ | ||
271 | { \ | ||
272 | ss[4] = ls_box(ss[(i+3) % 4], 3) ^ rcon_tab[i]; \ | ||
273 | ss[i % 4] ^= ss[4]; \ | ||
274 | k[4*(i)+4] = (ss[0] ^= ss[1]) ^ ss[2] ^ ss[3]; \ | ||
275 | k[4*(i)+5] = ss[1] ^ ss[3]; \ | ||
276 | k[4*(i)+6] = ss[0]; \ | ||
277 | k[4*(i)+7] = ss[1]; \ | ||
278 | } | ||
279 | |||
280 | #define kdf6(k,i) \ | ||
281 | { \ | ||
282 | ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; \ | ||
283 | k[6*(i)+ 6] = ff(ss[0]); \ | ||
284 | ss[1] ^= ss[0]; \ | ||
285 | k[6*(i)+ 7] = ff(ss[1]); \ | ||
286 | ss[2] ^= ss[1]; \ | ||
287 | k[6*(i)+ 8] = ff(ss[2]); \ | ||
288 | ss[3] ^= ss[2]; \ | ||
289 | k[6*(i)+ 9] = ff(ss[3]); \ | ||
290 | ss[4] ^= ss[3]; \ | ||
291 | k[6*(i)+10] = ff(ss[4]); \ | ||
292 | ss[5] ^= ss[4]; \ | ||
293 | k[6*(i)+11] = ff(ss[5]); \ | ||
294 | } | ||
295 | |||
296 | #define kd6(k,i) \ | ||
297 | { \ | ||
298 | ss[6] = ls_box(ss[5],3) ^ rcon_tab[i]; \ | ||
299 | ss[0] ^= ss[6]; ss[6] = ff(ss[6]); \ | ||
300 | k[6*(i)+ 6] = ss[6] ^= k[6*(i)]; \ | ||
301 | ss[1] ^= ss[0]; \ | ||
302 | k[6*(i)+ 7] = ss[6] ^= k[6*(i)+ 1]; \ | ||
303 | ss[2] ^= ss[1]; \ | ||
304 | k[6*(i)+ 8] = ss[6] ^= k[6*(i)+ 2]; \ | ||
305 | ss[3] ^= ss[2]; \ | ||
306 | k[6*(i)+ 9] = ss[6] ^= k[6*(i)+ 3]; \ | ||
307 | ss[4] ^= ss[3]; \ | ||
308 | k[6*(i)+10] = ss[6] ^= k[6*(i)+ 4]; \ | ||
309 | ss[5] ^= ss[4]; \ | ||
310 | k[6*(i)+11] = ss[6] ^= k[6*(i)+ 5]; \ | ||
311 | } | ||
312 | |||
313 | #define kdl6(k,i) \ | ||
314 | { \ | ||
315 | ss[0] ^= ls_box(ss[5],3) ^ rcon_tab[i]; \ | ||
316 | k[6*(i)+ 6] = ss[0]; \ | ||
317 | ss[1] ^= ss[0]; \ | ||
318 | k[6*(i)+ 7] = ss[1]; \ | ||
319 | ss[2] ^= ss[1]; \ | ||
320 | k[6*(i)+ 8] = ss[2]; \ | ||
321 | ss[3] ^= ss[2]; \ | ||
322 | k[6*(i)+ 9] = ss[3]; \ | ||
323 | } | ||
324 | |||
325 | #define kdf8(k,i) \ | ||
326 | { \ | ||
327 | ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; \ | ||
328 | k[8*(i)+ 8] = ff(ss[0]); \ | ||
329 | ss[1] ^= ss[0]; \ | ||
330 | k[8*(i)+ 9] = ff(ss[1]); \ | ||
331 | ss[2] ^= ss[1]; \ | ||
332 | k[8*(i)+10] = ff(ss[2]); \ | ||
333 | ss[3] ^= ss[2]; \ | ||
334 | k[8*(i)+11] = ff(ss[3]); \ | ||
335 | ss[4] ^= ls_box(ss[3],0); \ | ||
336 | k[8*(i)+12] = ff(ss[4]); \ | ||
337 | ss[5] ^= ss[4]; \ | ||
338 | k[8*(i)+13] = ff(ss[5]); \ | ||
339 | ss[6] ^= ss[5]; \ | ||
340 | k[8*(i)+14] = ff(ss[6]); \ | ||
341 | ss[7] ^= ss[6]; \ | ||
342 | k[8*(i)+15] = ff(ss[7]); \ | ||
343 | } | ||
344 | |||
345 | #define kd8(k,i) \ | ||
346 | { \ | ||
347 | u32 __g = ls_box(ss[7],3) ^ rcon_tab[i]; \ | ||
348 | ss[0] ^= __g; \ | ||
349 | __g = ff(__g); \ | ||
350 | k[8*(i)+ 8] = __g ^= k[8*(i)]; \ | ||
351 | ss[1] ^= ss[0]; \ | ||
352 | k[8*(i)+ 9] = __g ^= k[8*(i)+ 1]; \ | ||
353 | ss[2] ^= ss[1]; \ | ||
354 | k[8*(i)+10] = __g ^= k[8*(i)+ 2]; \ | ||
355 | ss[3] ^= ss[2]; \ | ||
356 | k[8*(i)+11] = __g ^= k[8*(i)+ 3]; \ | ||
357 | __g = ls_box(ss[3],0); \ | ||
358 | ss[4] ^= __g; \ | ||
359 | __g = ff(__g); \ | ||
360 | k[8*(i)+12] = __g ^= k[8*(i)+ 4]; \ | ||
361 | ss[5] ^= ss[4]; \ | ||
362 | k[8*(i)+13] = __g ^= k[8*(i)+ 5]; \ | ||
363 | ss[6] ^= ss[5]; \ | ||
364 | k[8*(i)+14] = __g ^= k[8*(i)+ 6]; \ | ||
365 | ss[7] ^= ss[6]; \ | ||
366 | k[8*(i)+15] = __g ^= k[8*(i)+ 7]; \ | ||
367 | } | ||
368 | |||
369 | #define kdl8(k,i) \ | ||
370 | { \ | ||
371 | ss[0] ^= ls_box(ss[7],3) ^ rcon_tab[i]; \ | ||
372 | k[8*(i)+ 8] = ss[0]; \ | ||
373 | ss[1] ^= ss[0]; \ | ||
374 | k[8*(i)+ 9] = ss[1]; \ | ||
375 | ss[2] ^= ss[1]; \ | ||
376 | k[8*(i)+10] = ss[2]; \ | ||
377 | ss[3] ^= ss[2]; \ | ||
378 | k[8*(i)+11] = ss[3]; \ | ||
379 | } | ||
380 | |||
381 | static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, | ||
382 | unsigned int key_len) | ||
383 | { | ||
384 | int i; | ||
385 | u32 ss[8]; | ||
386 | struct aes_ctx *ctx = crypto_tfm_ctx(tfm); | ||
387 | const __le32 *key = (const __le32 *)in_key; | ||
388 | u32 *flags = &tfm->crt_flags; | ||
389 | |||
390 | /* encryption schedule */ | ||
391 | |||
392 | ctx->ekey[0] = ss[0] = le32_to_cpu(key[0]); | ||
393 | ctx->ekey[1] = ss[1] = le32_to_cpu(key[1]); | ||
394 | ctx->ekey[2] = ss[2] = le32_to_cpu(key[2]); | ||
395 | ctx->ekey[3] = ss[3] = le32_to_cpu(key[3]); | ||
396 | |||
397 | switch(key_len) { | ||
398 | case 16: | ||
399 | for (i = 0; i < 9; i++) | ||
400 | ke4(ctx->ekey, i); | ||
401 | kel4(ctx->ekey, 9); | ||
402 | ctx->rounds = 10; | ||
403 | break; | ||
404 | |||
405 | case 24: | ||
406 | ctx->ekey[4] = ss[4] = le32_to_cpu(key[4]); | ||
407 | ctx->ekey[5] = ss[5] = le32_to_cpu(key[5]); | ||
408 | for (i = 0; i < 7; i++) | ||
409 | ke6(ctx->ekey, i); | ||
410 | kel6(ctx->ekey, 7); | ||
411 | ctx->rounds = 12; | ||
412 | break; | ||
413 | |||
414 | case 32: | ||
415 | ctx->ekey[4] = ss[4] = le32_to_cpu(key[4]); | ||
416 | ctx->ekey[5] = ss[5] = le32_to_cpu(key[5]); | ||
417 | ctx->ekey[6] = ss[6] = le32_to_cpu(key[6]); | ||
418 | ctx->ekey[7] = ss[7] = le32_to_cpu(key[7]); | ||
419 | for (i = 0; i < 6; i++) | ||
420 | ke8(ctx->ekey, i); | ||
421 | kel8(ctx->ekey, 6); | ||
422 | ctx->rounds = 14; | ||
423 | break; | ||
424 | |||
425 | default: | ||
426 | *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; | ||
427 | return -EINVAL; | ||
428 | } | ||
429 | |||
430 | /* decryption schedule */ | ||
431 | |||
432 | ctx->dkey[0] = ss[0] = le32_to_cpu(key[0]); | ||
433 | ctx->dkey[1] = ss[1] = le32_to_cpu(key[1]); | ||
434 | ctx->dkey[2] = ss[2] = le32_to_cpu(key[2]); | ||
435 | ctx->dkey[3] = ss[3] = le32_to_cpu(key[3]); | ||
436 | |||
437 | switch (key_len) { | ||
438 | case 16: | ||
439 | kdf4(ctx->dkey, 0); | ||
440 | for (i = 1; i < 9; i++) | ||
441 | kd4(ctx->dkey, i); | ||
442 | kdl4(ctx->dkey, 9); | ||
443 | break; | ||
444 | |||
445 | case 24: | ||
446 | ctx->dkey[4] = ff(ss[4] = le32_to_cpu(key[4])); | ||
447 | ctx->dkey[5] = ff(ss[5] = le32_to_cpu(key[5])); | ||
448 | kdf6(ctx->dkey, 0); | ||
449 | for (i = 1; i < 7; i++) | ||
450 | kd6(ctx->dkey, i); | ||
451 | kdl6(ctx->dkey, 7); | ||
452 | break; | ||
453 | |||
454 | case 32: | ||
455 | ctx->dkey[4] = ff(ss[4] = le32_to_cpu(key[4])); | ||
456 | ctx->dkey[5] = ff(ss[5] = le32_to_cpu(key[5])); | ||
457 | ctx->dkey[6] = ff(ss[6] = le32_to_cpu(key[6])); | ||
458 | ctx->dkey[7] = ff(ss[7] = le32_to_cpu(key[7])); | ||
459 | kdf8(ctx->dkey, 0); | ||
460 | for (i = 1; i < 6; i++) | ||
461 | kd8(ctx->dkey, i); | ||
462 | kdl8(ctx->dkey, 6); | ||
463 | break; | ||
464 | } | ||
465 | return 0; | ||
466 | } | ||
467 | |||
468 | static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
469 | { | ||
470 | aes_enc_blk(tfm, dst, src); | ||
471 | } | ||
472 | |||
473 | static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
474 | { | ||
475 | aes_dec_blk(tfm, dst, src); | ||
476 | } | ||
477 | |||
478 | static struct crypto_alg aes_alg = { | ||
479 | .cra_name = "aes", | ||
480 | .cra_driver_name = "aes-i586", | ||
481 | .cra_priority = 200, | ||
482 | .cra_flags = CRYPTO_ALG_TYPE_CIPHER, | ||
483 | .cra_blocksize = AES_BLOCK_SIZE, | ||
484 | .cra_ctxsize = sizeof(struct aes_ctx), | ||
485 | .cra_module = THIS_MODULE, | ||
486 | .cra_list = LIST_HEAD_INIT(aes_alg.cra_list), | ||
487 | .cra_u = { | ||
488 | .cipher = { | ||
489 | .cia_min_keysize = AES_MIN_KEY_SIZE, | ||
490 | .cia_max_keysize = AES_MAX_KEY_SIZE, | ||
491 | .cia_setkey = aes_set_key, | ||
492 | .cia_encrypt = aes_encrypt, | ||
493 | .cia_decrypt = aes_decrypt | ||
494 | } | ||
495 | } | ||
496 | }; | ||
497 | |||
498 | static int __init aes_init(void) | ||
499 | { | ||
500 | gen_tabs(); | ||
501 | return crypto_register_alg(&aes_alg); | ||
502 | } | ||
503 | |||
504 | static void __exit aes_fini(void) | ||
505 | { | ||
506 | crypto_unregister_alg(&aes_alg); | ||
507 | } | ||
508 | |||
509 | module_init(aes_init); | ||
510 | module_exit(aes_fini); | ||
511 | |||
512 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, i586 asm optimized"); | ||
513 | MODULE_LICENSE("Dual BSD/GPL"); | ||
514 | MODULE_AUTHOR("Fruhwirth Clemens, James Morris, Brian Gladman, Adam Richter"); | ||
515 | MODULE_ALIAS("aes"); | ||
diff --git a/arch/x86/crypto/aes_64.c b/arch/x86/crypto/aes_64.c deleted file mode 100644 index 5cdb13ea5cc2..000000000000 --- a/arch/x86/crypto/aes_64.c +++ /dev/null | |||
@@ -1,336 +0,0 @@ | |||
1 | /* | ||
2 | * Cryptographic API. | ||
3 | * | ||
4 | * AES Cipher Algorithm. | ||
5 | * | ||
6 | * Based on Brian Gladman's code. | ||
7 | * | ||
8 | * Linux developers: | ||
9 | * Alexander Kjeldaas <astor@fast.no> | ||
10 | * Herbert Valerio Riedel <hvr@hvrlab.org> | ||
11 | * Kyle McMartin <kyle@debian.org> | ||
12 | * Adam J. Richter <adam@yggdrasil.com> (conversion to 2.5 API). | ||
13 | * Andreas Steinmetz <ast@domdv.de> (adapted to x86_64 assembler) | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or modify | ||
16 | * it under the terms of the GNU General Public License as published by | ||
17 | * the Free Software Foundation; either version 2 of the License, or | ||
18 | * (at your option) any later version. | ||
19 | * | ||
20 | * --------------------------------------------------------------------------- | ||
21 | * Copyright (c) 2002, Dr Brian Gladman <brg@gladman.me.uk>, Worcester, UK. | ||
22 | * All rights reserved. | ||
23 | * | ||
24 | * LICENSE TERMS | ||
25 | * | ||
26 | * The free distribution and use of this software in both source and binary | ||
27 | * form is allowed (with or without changes) provided that: | ||
28 | * | ||
29 | * 1. distributions of this source code include the above copyright | ||
30 | * notice, this list of conditions and the following disclaimer; | ||
31 | * | ||
32 | * 2. distributions in binary form include the above copyright | ||
33 | * notice, this list of conditions and the following disclaimer | ||
34 | * in the documentation and/or other associated materials; | ||
35 | * | ||
36 | * 3. the copyright holder's name is not used to endorse products | ||
37 | * built using this software without specific written permission. | ||
38 | * | ||
39 | * ALTERNATIVELY, provided that this notice is retained in full, this product | ||
40 | * may be distributed under the terms of the GNU General Public License (GPL), | ||
41 | * in which case the provisions of the GPL apply INSTEAD OF those given above. | ||
42 | * | ||
43 | * DISCLAIMER | ||
44 | * | ||
45 | * This software is provided 'as is' with no explicit or implied warranties | ||
46 | * in respect of its properties, including, but not limited to, correctness | ||
47 | * and/or fitness for purpose. | ||
48 | * --------------------------------------------------------------------------- | ||
49 | */ | ||
50 | |||
51 | /* Some changes from the Gladman version: | ||
52 | s/RIJNDAEL(e_key)/E_KEY/g | ||
53 | s/RIJNDAEL(d_key)/D_KEY/g | ||
54 | */ | ||
55 | |||
56 | #include <asm/byteorder.h> | ||
57 | #include <linux/bitops.h> | ||
58 | #include <linux/crypto.h> | ||
59 | #include <linux/errno.h> | ||
60 | #include <linux/init.h> | ||
61 | #include <linux/module.h> | ||
62 | #include <linux/types.h> | ||
63 | |||
64 | #define AES_MIN_KEY_SIZE 16 | ||
65 | #define AES_MAX_KEY_SIZE 32 | ||
66 | |||
67 | #define AES_BLOCK_SIZE 16 | ||
68 | |||
69 | /* | ||
70 | * #define byte(x, nr) ((unsigned char)((x) >> (nr*8))) | ||
71 | */ | ||
72 | static inline u8 byte(const u32 x, const unsigned n) | ||
73 | { | ||
74 | return x >> (n << 3); | ||
75 | } | ||
76 | |||
77 | struct aes_ctx | ||
78 | { | ||
79 | u32 key_length; | ||
80 | u32 buf[120]; | ||
81 | }; | ||
82 | |||
83 | #define E_KEY (&ctx->buf[0]) | ||
84 | #define D_KEY (&ctx->buf[60]) | ||
85 | |||
86 | static u8 pow_tab[256] __initdata; | ||
87 | static u8 log_tab[256] __initdata; | ||
88 | static u8 sbx_tab[256] __initdata; | ||
89 | static u8 isb_tab[256] __initdata; | ||
90 | static u32 rco_tab[10]; | ||
91 | u32 aes_ft_tab[4][256]; | ||
92 | u32 aes_it_tab[4][256]; | ||
93 | |||
94 | u32 aes_fl_tab[4][256]; | ||
95 | u32 aes_il_tab[4][256]; | ||
96 | |||
97 | static inline u8 f_mult(u8 a, u8 b) | ||
98 | { | ||
99 | u8 aa = log_tab[a], cc = aa + log_tab[b]; | ||
100 | |||
101 | return pow_tab[cc + (cc < aa ? 1 : 0)]; | ||
102 | } | ||
103 | |||
104 | #define ff_mult(a, b) (a && b ? f_mult(a, b) : 0) | ||
105 | |||
106 | #define ls_box(x) \ | ||
107 | (aes_fl_tab[0][byte(x, 0)] ^ \ | ||
108 | aes_fl_tab[1][byte(x, 1)] ^ \ | ||
109 | aes_fl_tab[2][byte(x, 2)] ^ \ | ||
110 | aes_fl_tab[3][byte(x, 3)]) | ||
111 | |||
112 | static void __init gen_tabs(void) | ||
113 | { | ||
114 | u32 i, t; | ||
115 | u8 p, q; | ||
116 | |||
117 | /* log and power tables for GF(2**8) finite field with | ||
118 | 0x011b as modular polynomial - the simplest primitive | ||
119 | root is 0x03, used here to generate the tables */ | ||
120 | |||
121 | for (i = 0, p = 1; i < 256; ++i) { | ||
122 | pow_tab[i] = (u8)p; | ||
123 | log_tab[p] = (u8)i; | ||
124 | |||
125 | p ^= (p << 1) ^ (p & 0x80 ? 0x01b : 0); | ||
126 | } | ||
127 | |||
128 | log_tab[1] = 0; | ||
129 | |||
130 | for (i = 0, p = 1; i < 10; ++i) { | ||
131 | rco_tab[i] = p; | ||
132 | |||
133 | p = (p << 1) ^ (p & 0x80 ? 0x01b : 0); | ||
134 | } | ||
135 | |||
136 | for (i = 0; i < 256; ++i) { | ||
137 | p = (i ? pow_tab[255 - log_tab[i]] : 0); | ||
138 | q = ((p >> 7) | (p << 1)) ^ ((p >> 6) | (p << 2)); | ||
139 | p ^= 0x63 ^ q ^ ((q >> 6) | (q << 2)); | ||
140 | sbx_tab[i] = p; | ||
141 | isb_tab[p] = (u8)i; | ||
142 | } | ||
143 | |||
144 | for (i = 0; i < 256; ++i) { | ||
145 | p = sbx_tab[i]; | ||
146 | |||
147 | t = p; | ||
148 | aes_fl_tab[0][i] = t; | ||
149 | aes_fl_tab[1][i] = rol32(t, 8); | ||
150 | aes_fl_tab[2][i] = rol32(t, 16); | ||
151 | aes_fl_tab[3][i] = rol32(t, 24); | ||
152 | |||
153 | t = ((u32)ff_mult(2, p)) | | ||
154 | ((u32)p << 8) | | ||
155 | ((u32)p << 16) | ((u32)ff_mult(3, p) << 24); | ||
156 | |||
157 | aes_ft_tab[0][i] = t; | ||
158 | aes_ft_tab[1][i] = rol32(t, 8); | ||
159 | aes_ft_tab[2][i] = rol32(t, 16); | ||
160 | aes_ft_tab[3][i] = rol32(t, 24); | ||
161 | |||
162 | p = isb_tab[i]; | ||
163 | |||
164 | t = p; | ||
165 | aes_il_tab[0][i] = t; | ||
166 | aes_il_tab[1][i] = rol32(t, 8); | ||
167 | aes_il_tab[2][i] = rol32(t, 16); | ||
168 | aes_il_tab[3][i] = rol32(t, 24); | ||
169 | |||
170 | t = ((u32)ff_mult(14, p)) | | ||
171 | ((u32)ff_mult(9, p) << 8) | | ||
172 | ((u32)ff_mult(13, p) << 16) | | ||
173 | ((u32)ff_mult(11, p) << 24); | ||
174 | |||
175 | aes_it_tab[0][i] = t; | ||
176 | aes_it_tab[1][i] = rol32(t, 8); | ||
177 | aes_it_tab[2][i] = rol32(t, 16); | ||
178 | aes_it_tab[3][i] = rol32(t, 24); | ||
179 | } | ||
180 | } | ||
181 | |||
182 | #define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b) | ||
183 | |||
184 | #define imix_col(y, x) \ | ||
185 | u = star_x(x); \ | ||
186 | v = star_x(u); \ | ||
187 | w = star_x(v); \ | ||
188 | t = w ^ (x); \ | ||
189 | (y) = u ^ v ^ w; \ | ||
190 | (y) ^= ror32(u ^ t, 8) ^ \ | ||
191 | ror32(v ^ t, 16) ^ \ | ||
192 | ror32(t, 24) | ||
193 | |||
194 | /* initialise the key schedule from the user supplied key */ | ||
195 | |||
196 | #define loop4(i) \ | ||
197 | { \ | ||
198 | t = ror32(t, 8); t = ls_box(t) ^ rco_tab[i]; \ | ||
199 | t ^= E_KEY[4 * i]; E_KEY[4 * i + 4] = t; \ | ||
200 | t ^= E_KEY[4 * i + 1]; E_KEY[4 * i + 5] = t; \ | ||
201 | t ^= E_KEY[4 * i + 2]; E_KEY[4 * i + 6] = t; \ | ||
202 | t ^= E_KEY[4 * i + 3]; E_KEY[4 * i + 7] = t; \ | ||
203 | } | ||
204 | |||
205 | #define loop6(i) \ | ||
206 | { \ | ||
207 | t = ror32(t, 8); t = ls_box(t) ^ rco_tab[i]; \ | ||
208 | t ^= E_KEY[6 * i]; E_KEY[6 * i + 6] = t; \ | ||
209 | t ^= E_KEY[6 * i + 1]; E_KEY[6 * i + 7] = t; \ | ||
210 | t ^= E_KEY[6 * i + 2]; E_KEY[6 * i + 8] = t; \ | ||
211 | t ^= E_KEY[6 * i + 3]; E_KEY[6 * i + 9] = t; \ | ||
212 | t ^= E_KEY[6 * i + 4]; E_KEY[6 * i + 10] = t; \ | ||
213 | t ^= E_KEY[6 * i + 5]; E_KEY[6 * i + 11] = t; \ | ||
214 | } | ||
215 | |||
216 | #define loop8(i) \ | ||
217 | { \ | ||
218 | t = ror32(t, 8); ; t = ls_box(t) ^ rco_tab[i]; \ | ||
219 | t ^= E_KEY[8 * i]; E_KEY[8 * i + 8] = t; \ | ||
220 | t ^= E_KEY[8 * i + 1]; E_KEY[8 * i + 9] = t; \ | ||
221 | t ^= E_KEY[8 * i + 2]; E_KEY[8 * i + 10] = t; \ | ||
222 | t ^= E_KEY[8 * i + 3]; E_KEY[8 * i + 11] = t; \ | ||
223 | t = E_KEY[8 * i + 4] ^ ls_box(t); \ | ||
224 | E_KEY[8 * i + 12] = t; \ | ||
225 | t ^= E_KEY[8 * i + 5]; E_KEY[8 * i + 13] = t; \ | ||
226 | t ^= E_KEY[8 * i + 6]; E_KEY[8 * i + 14] = t; \ | ||
227 | t ^= E_KEY[8 * i + 7]; E_KEY[8 * i + 15] = t; \ | ||
228 | } | ||
229 | |||
230 | static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key, | ||
231 | unsigned int key_len) | ||
232 | { | ||
233 | struct aes_ctx *ctx = crypto_tfm_ctx(tfm); | ||
234 | const __le32 *key = (const __le32 *)in_key; | ||
235 | u32 *flags = &tfm->crt_flags; | ||
236 | u32 i, j, t, u, v, w; | ||
237 | |||
238 | if (key_len % 8) { | ||
239 | *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; | ||
240 | return -EINVAL; | ||
241 | } | ||
242 | |||
243 | ctx->key_length = key_len; | ||
244 | |||
245 | D_KEY[key_len + 24] = E_KEY[0] = le32_to_cpu(key[0]); | ||
246 | D_KEY[key_len + 25] = E_KEY[1] = le32_to_cpu(key[1]); | ||
247 | D_KEY[key_len + 26] = E_KEY[2] = le32_to_cpu(key[2]); | ||
248 | D_KEY[key_len + 27] = E_KEY[3] = le32_to_cpu(key[3]); | ||
249 | |||
250 | switch (key_len) { | ||
251 | case 16: | ||
252 | t = E_KEY[3]; | ||
253 | for (i = 0; i < 10; ++i) | ||
254 | loop4(i); | ||
255 | break; | ||
256 | |||
257 | case 24: | ||
258 | E_KEY[4] = le32_to_cpu(key[4]); | ||
259 | t = E_KEY[5] = le32_to_cpu(key[5]); | ||
260 | for (i = 0; i < 8; ++i) | ||
261 | loop6 (i); | ||
262 | break; | ||
263 | |||
264 | case 32: | ||
265 | E_KEY[4] = le32_to_cpu(key[4]); | ||
266 | E_KEY[5] = le32_to_cpu(key[5]); | ||
267 | E_KEY[6] = le32_to_cpu(key[6]); | ||
268 | t = E_KEY[7] = le32_to_cpu(key[7]); | ||
269 | for (i = 0; i < 7; ++i) | ||
270 | loop8(i); | ||
271 | break; | ||
272 | } | ||
273 | |||
274 | D_KEY[0] = E_KEY[key_len + 24]; | ||
275 | D_KEY[1] = E_KEY[key_len + 25]; | ||
276 | D_KEY[2] = E_KEY[key_len + 26]; | ||
277 | D_KEY[3] = E_KEY[key_len + 27]; | ||
278 | |||
279 | for (i = 4; i < key_len + 24; ++i) { | ||
280 | j = key_len + 24 - (i & ~3) + (i & 3); | ||
281 | imix_col(D_KEY[j], E_KEY[i]); | ||
282 | } | ||
283 | |||
284 | return 0; | ||
285 | } | ||
286 | |||
287 | asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in); | ||
288 | asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in); | ||
289 | |||
290 | static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
291 | { | ||
292 | aes_enc_blk(tfm, dst, src); | ||
293 | } | ||
294 | |||
295 | static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
296 | { | ||
297 | aes_dec_blk(tfm, dst, src); | ||
298 | } | ||
299 | |||
300 | static struct crypto_alg aes_alg = { | ||
301 | .cra_name = "aes", | ||
302 | .cra_driver_name = "aes-x86_64", | ||
303 | .cra_priority = 200, | ||
304 | .cra_flags = CRYPTO_ALG_TYPE_CIPHER, | ||
305 | .cra_blocksize = AES_BLOCK_SIZE, | ||
306 | .cra_ctxsize = sizeof(struct aes_ctx), | ||
307 | .cra_module = THIS_MODULE, | ||
308 | .cra_list = LIST_HEAD_INIT(aes_alg.cra_list), | ||
309 | .cra_u = { | ||
310 | .cipher = { | ||
311 | .cia_min_keysize = AES_MIN_KEY_SIZE, | ||
312 | .cia_max_keysize = AES_MAX_KEY_SIZE, | ||
313 | .cia_setkey = aes_set_key, | ||
314 | .cia_encrypt = aes_encrypt, | ||
315 | .cia_decrypt = aes_decrypt | ||
316 | } | ||
317 | } | ||
318 | }; | ||
319 | |||
320 | static int __init aes_init(void) | ||
321 | { | ||
322 | gen_tabs(); | ||
323 | return crypto_register_alg(&aes_alg); | ||
324 | } | ||
325 | |||
326 | static void __exit aes_fini(void) | ||
327 | { | ||
328 | crypto_unregister_alg(&aes_alg); | ||
329 | } | ||
330 | |||
331 | module_init(aes_init); | ||
332 | module_exit(aes_fini); | ||
333 | |||
334 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm"); | ||
335 | MODULE_LICENSE("GPL"); | ||
336 | MODULE_ALIAS("aes"); | ||
diff --git a/arch/x86/crypto/aes_glue.c b/arch/x86/crypto/aes_glue.c new file mode 100644 index 000000000000..71f457827116 --- /dev/null +++ b/arch/x86/crypto/aes_glue.c | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * Glue Code for the asm optimized version of the AES Cipher Algorithm | ||
3 | * | ||
4 | */ | ||
5 | |||
6 | #include <crypto/aes.h> | ||
7 | |||
8 | asmlinkage void aes_enc_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in); | ||
9 | asmlinkage void aes_dec_blk(struct crypto_tfm *tfm, u8 *out, const u8 *in); | ||
10 | |||
11 | static void aes_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
12 | { | ||
13 | aes_enc_blk(tfm, dst, src); | ||
14 | } | ||
15 | |||
16 | static void aes_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
17 | { | ||
18 | aes_dec_blk(tfm, dst, src); | ||
19 | } | ||
20 | |||
21 | static struct crypto_alg aes_alg = { | ||
22 | .cra_name = "aes", | ||
23 | .cra_driver_name = "aes-asm", | ||
24 | .cra_priority = 200, | ||
25 | .cra_flags = CRYPTO_ALG_TYPE_CIPHER, | ||
26 | .cra_blocksize = AES_BLOCK_SIZE, | ||
27 | .cra_ctxsize = sizeof(struct crypto_aes_ctx), | ||
28 | .cra_module = THIS_MODULE, | ||
29 | .cra_list = LIST_HEAD_INIT(aes_alg.cra_list), | ||
30 | .cra_u = { | ||
31 | .cipher = { | ||
32 | .cia_min_keysize = AES_MIN_KEY_SIZE, | ||
33 | .cia_max_keysize = AES_MAX_KEY_SIZE, | ||
34 | .cia_setkey = crypto_aes_set_key, | ||
35 | .cia_encrypt = aes_encrypt, | ||
36 | .cia_decrypt = aes_decrypt | ||
37 | } | ||
38 | } | ||
39 | }; | ||
40 | |||
41 | static int __init aes_init(void) | ||
42 | { | ||
43 | return crypto_register_alg(&aes_alg); | ||
44 | } | ||
45 | |||
46 | static void __exit aes_fini(void) | ||
47 | { | ||
48 | crypto_unregister_alg(&aes_alg); | ||
49 | } | ||
50 | |||
51 | module_init(aes_init); | ||
52 | module_exit(aes_fini); | ||
53 | |||
54 | MODULE_DESCRIPTION("Rijndael (AES) Cipher Algorithm, asm optimized"); | ||
55 | MODULE_LICENSE("GPL"); | ||
56 | MODULE_ALIAS("aes"); | ||
57 | MODULE_ALIAS("aes-asm"); | ||
diff --git a/arch/x86/crypto/salsa20-i586-asm_32.S b/arch/x86/crypto/salsa20-i586-asm_32.S new file mode 100644 index 000000000000..72eb306680b2 --- /dev/null +++ b/arch/x86/crypto/salsa20-i586-asm_32.S | |||
@@ -0,0 +1,1114 @@ | |||
1 | # salsa20_pm.s version 20051229 | ||
2 | # D. J. Bernstein | ||
3 | # Public domain. | ||
4 | |||
5 | # enter ECRYPT_encrypt_bytes | ||
6 | .text | ||
7 | .p2align 5 | ||
8 | .globl ECRYPT_encrypt_bytes | ||
9 | ECRYPT_encrypt_bytes: | ||
10 | mov %esp,%eax | ||
11 | and $31,%eax | ||
12 | add $256,%eax | ||
13 | sub %eax,%esp | ||
14 | # eax_stack = eax | ||
15 | movl %eax,80(%esp) | ||
16 | # ebx_stack = ebx | ||
17 | movl %ebx,84(%esp) | ||
18 | # esi_stack = esi | ||
19 | movl %esi,88(%esp) | ||
20 | # edi_stack = edi | ||
21 | movl %edi,92(%esp) | ||
22 | # ebp_stack = ebp | ||
23 | movl %ebp,96(%esp) | ||
24 | # x = arg1 | ||
25 | movl 4(%esp,%eax),%edx | ||
26 | # m = arg2 | ||
27 | movl 8(%esp,%eax),%esi | ||
28 | # out = arg3 | ||
29 | movl 12(%esp,%eax),%edi | ||
30 | # bytes = arg4 | ||
31 | movl 16(%esp,%eax),%ebx | ||
32 | # bytes -= 0 | ||
33 | sub $0,%ebx | ||
34 | # goto done if unsigned<= | ||
35 | jbe ._done | ||
36 | ._start: | ||
37 | # in0 = *(uint32 *) (x + 0) | ||
38 | movl 0(%edx),%eax | ||
39 | # in1 = *(uint32 *) (x + 4) | ||
40 | movl 4(%edx),%ecx | ||
41 | # in2 = *(uint32 *) (x + 8) | ||
42 | movl 8(%edx),%ebp | ||
43 | # j0 = in0 | ||
44 | movl %eax,164(%esp) | ||
45 | # in3 = *(uint32 *) (x + 12) | ||
46 | movl 12(%edx),%eax | ||
47 | # j1 = in1 | ||
48 | movl %ecx,168(%esp) | ||
49 | # in4 = *(uint32 *) (x + 16) | ||
50 | movl 16(%edx),%ecx | ||
51 | # j2 = in2 | ||
52 | movl %ebp,172(%esp) | ||
53 | # in5 = *(uint32 *) (x + 20) | ||
54 | movl 20(%edx),%ebp | ||
55 | # j3 = in3 | ||
56 | movl %eax,176(%esp) | ||
57 | # in6 = *(uint32 *) (x + 24) | ||
58 | movl 24(%edx),%eax | ||
59 | # j4 = in4 | ||
60 | movl %ecx,180(%esp) | ||
61 | # in7 = *(uint32 *) (x + 28) | ||
62 | movl 28(%edx),%ecx | ||
63 | # j5 = in5 | ||
64 | movl %ebp,184(%esp) | ||
65 | # in8 = *(uint32 *) (x + 32) | ||
66 | movl 32(%edx),%ebp | ||
67 | # j6 = in6 | ||
68 | movl %eax,188(%esp) | ||
69 | # in9 = *(uint32 *) (x + 36) | ||
70 | movl 36(%edx),%eax | ||
71 | # j7 = in7 | ||
72 | movl %ecx,192(%esp) | ||
73 | # in10 = *(uint32 *) (x + 40) | ||
74 | movl 40(%edx),%ecx | ||
75 | # j8 = in8 | ||
76 | movl %ebp,196(%esp) | ||
77 | # in11 = *(uint32 *) (x + 44) | ||
78 | movl 44(%edx),%ebp | ||
79 | # j9 = in9 | ||
80 | movl %eax,200(%esp) | ||
81 | # in12 = *(uint32 *) (x + 48) | ||
82 | movl 48(%edx),%eax | ||
83 | # j10 = in10 | ||
84 | movl %ecx,204(%esp) | ||
85 | # in13 = *(uint32 *) (x + 52) | ||
86 | movl 52(%edx),%ecx | ||
87 | # j11 = in11 | ||
88 | movl %ebp,208(%esp) | ||
89 | # in14 = *(uint32 *) (x + 56) | ||
90 | movl 56(%edx),%ebp | ||
91 | # j12 = in12 | ||
92 | movl %eax,212(%esp) | ||
93 | # in15 = *(uint32 *) (x + 60) | ||
94 | movl 60(%edx),%eax | ||
95 | # j13 = in13 | ||
96 | movl %ecx,216(%esp) | ||
97 | # j14 = in14 | ||
98 | movl %ebp,220(%esp) | ||
99 | # j15 = in15 | ||
100 | movl %eax,224(%esp) | ||
101 | # x_backup = x | ||
102 | movl %edx,64(%esp) | ||
103 | ._bytesatleast1: | ||
104 | # bytes - 64 | ||
105 | cmp $64,%ebx | ||
106 | # goto nocopy if unsigned>= | ||
107 | jae ._nocopy | ||
108 | # ctarget = out | ||
109 | movl %edi,228(%esp) | ||
110 | # out = &tmp | ||
111 | leal 0(%esp),%edi | ||
112 | # i = bytes | ||
113 | mov %ebx,%ecx | ||
114 | # while (i) { *out++ = *m++; --i } | ||
115 | rep movsb | ||
116 | # out = &tmp | ||
117 | leal 0(%esp),%edi | ||
118 | # m = &tmp | ||
119 | leal 0(%esp),%esi | ||
120 | ._nocopy: | ||
121 | # out_backup = out | ||
122 | movl %edi,72(%esp) | ||
123 | # m_backup = m | ||
124 | movl %esi,68(%esp) | ||
125 | # bytes_backup = bytes | ||
126 | movl %ebx,76(%esp) | ||
127 | # in0 = j0 | ||
128 | movl 164(%esp),%eax | ||
129 | # in1 = j1 | ||
130 | movl 168(%esp),%ecx | ||
131 | # in2 = j2 | ||
132 | movl 172(%esp),%edx | ||
133 | # in3 = j3 | ||
134 | movl 176(%esp),%ebx | ||
135 | # x0 = in0 | ||
136 | movl %eax,100(%esp) | ||
137 | # x1 = in1 | ||
138 | movl %ecx,104(%esp) | ||
139 | # x2 = in2 | ||
140 | movl %edx,108(%esp) | ||
141 | # x3 = in3 | ||
142 | movl %ebx,112(%esp) | ||
143 | # in4 = j4 | ||
144 | movl 180(%esp),%eax | ||
145 | # in5 = j5 | ||
146 | movl 184(%esp),%ecx | ||
147 | # in6 = j6 | ||
148 | movl 188(%esp),%edx | ||
149 | # in7 = j7 | ||
150 | movl 192(%esp),%ebx | ||
151 | # x4 = in4 | ||
152 | movl %eax,116(%esp) | ||
153 | # x5 = in5 | ||
154 | movl %ecx,120(%esp) | ||
155 | # x6 = in6 | ||
156 | movl %edx,124(%esp) | ||
157 | # x7 = in7 | ||
158 | movl %ebx,128(%esp) | ||
159 | # in8 = j8 | ||
160 | movl 196(%esp),%eax | ||
161 | # in9 = j9 | ||
162 | movl 200(%esp),%ecx | ||
163 | # in10 = j10 | ||
164 | movl 204(%esp),%edx | ||
165 | # in11 = j11 | ||
166 | movl 208(%esp),%ebx | ||
167 | # x8 = in8 | ||
168 | movl %eax,132(%esp) | ||
169 | # x9 = in9 | ||
170 | movl %ecx,136(%esp) | ||
171 | # x10 = in10 | ||
172 | movl %edx,140(%esp) | ||
173 | # x11 = in11 | ||
174 | movl %ebx,144(%esp) | ||
175 | # in12 = j12 | ||
176 | movl 212(%esp),%eax | ||
177 | # in13 = j13 | ||
178 | movl 216(%esp),%ecx | ||
179 | # in14 = j14 | ||
180 | movl 220(%esp),%edx | ||
181 | # in15 = j15 | ||
182 | movl 224(%esp),%ebx | ||
183 | # x12 = in12 | ||
184 | movl %eax,148(%esp) | ||
185 | # x13 = in13 | ||
186 | movl %ecx,152(%esp) | ||
187 | # x14 = in14 | ||
188 | movl %edx,156(%esp) | ||
189 | # x15 = in15 | ||
190 | movl %ebx,160(%esp) | ||
191 | # i = 20 | ||
192 | mov $20,%ebp | ||
193 | # p = x0 | ||
194 | movl 100(%esp),%eax | ||
195 | # s = x5 | ||
196 | movl 120(%esp),%ecx | ||
197 | # t = x10 | ||
198 | movl 140(%esp),%edx | ||
199 | # w = x15 | ||
200 | movl 160(%esp),%ebx | ||
201 | ._mainloop: | ||
202 | # x0 = p | ||
203 | movl %eax,100(%esp) | ||
204 | # x10 = t | ||
205 | movl %edx,140(%esp) | ||
206 | # p += x12 | ||
207 | addl 148(%esp),%eax | ||
208 | # x5 = s | ||
209 | movl %ecx,120(%esp) | ||
210 | # t += x6 | ||
211 | addl 124(%esp),%edx | ||
212 | # x15 = w | ||
213 | movl %ebx,160(%esp) | ||
214 | # r = x1 | ||
215 | movl 104(%esp),%esi | ||
216 | # r += s | ||
217 | add %ecx,%esi | ||
218 | # v = x11 | ||
219 | movl 144(%esp),%edi | ||
220 | # v += w | ||
221 | add %ebx,%edi | ||
222 | # p <<<= 7 | ||
223 | rol $7,%eax | ||
224 | # p ^= x4 | ||
225 | xorl 116(%esp),%eax | ||
226 | # t <<<= 7 | ||
227 | rol $7,%edx | ||
228 | # t ^= x14 | ||
229 | xorl 156(%esp),%edx | ||
230 | # r <<<= 7 | ||
231 | rol $7,%esi | ||
232 | # r ^= x9 | ||
233 | xorl 136(%esp),%esi | ||
234 | # v <<<= 7 | ||
235 | rol $7,%edi | ||
236 | # v ^= x3 | ||
237 | xorl 112(%esp),%edi | ||
238 | # x4 = p | ||
239 | movl %eax,116(%esp) | ||
240 | # x14 = t | ||
241 | movl %edx,156(%esp) | ||
242 | # p += x0 | ||
243 | addl 100(%esp),%eax | ||
244 | # x9 = r | ||
245 | movl %esi,136(%esp) | ||
246 | # t += x10 | ||
247 | addl 140(%esp),%edx | ||
248 | # x3 = v | ||
249 | movl %edi,112(%esp) | ||
250 | # p <<<= 9 | ||
251 | rol $9,%eax | ||
252 | # p ^= x8 | ||
253 | xorl 132(%esp),%eax | ||
254 | # t <<<= 9 | ||
255 | rol $9,%edx | ||
256 | # t ^= x2 | ||
257 | xorl 108(%esp),%edx | ||
258 | # s += r | ||
259 | add %esi,%ecx | ||
260 | # s <<<= 9 | ||
261 | rol $9,%ecx | ||
262 | # s ^= x13 | ||
263 | xorl 152(%esp),%ecx | ||
264 | # w += v | ||
265 | add %edi,%ebx | ||
266 | # w <<<= 9 | ||
267 | rol $9,%ebx | ||
268 | # w ^= x7 | ||
269 | xorl 128(%esp),%ebx | ||
270 | # x8 = p | ||
271 | movl %eax,132(%esp) | ||
272 | # x2 = t | ||
273 | movl %edx,108(%esp) | ||
274 | # p += x4 | ||
275 | addl 116(%esp),%eax | ||
276 | # x13 = s | ||
277 | movl %ecx,152(%esp) | ||
278 | # t += x14 | ||
279 | addl 156(%esp),%edx | ||
280 | # x7 = w | ||
281 | movl %ebx,128(%esp) | ||
282 | # p <<<= 13 | ||
283 | rol $13,%eax | ||
284 | # p ^= x12 | ||
285 | xorl 148(%esp),%eax | ||
286 | # t <<<= 13 | ||
287 | rol $13,%edx | ||
288 | # t ^= x6 | ||
289 | xorl 124(%esp),%edx | ||
290 | # r += s | ||
291 | add %ecx,%esi | ||
292 | # r <<<= 13 | ||
293 | rol $13,%esi | ||
294 | # r ^= x1 | ||
295 | xorl 104(%esp),%esi | ||
296 | # v += w | ||
297 | add %ebx,%edi | ||
298 | # v <<<= 13 | ||
299 | rol $13,%edi | ||
300 | # v ^= x11 | ||
301 | xorl 144(%esp),%edi | ||
302 | # x12 = p | ||
303 | movl %eax,148(%esp) | ||
304 | # x6 = t | ||
305 | movl %edx,124(%esp) | ||
306 | # p += x8 | ||
307 | addl 132(%esp),%eax | ||
308 | # x1 = r | ||
309 | movl %esi,104(%esp) | ||
310 | # t += x2 | ||
311 | addl 108(%esp),%edx | ||
312 | # x11 = v | ||
313 | movl %edi,144(%esp) | ||
314 | # p <<<= 18 | ||
315 | rol $18,%eax | ||
316 | # p ^= x0 | ||
317 | xorl 100(%esp),%eax | ||
318 | # t <<<= 18 | ||
319 | rol $18,%edx | ||
320 | # t ^= x10 | ||
321 | xorl 140(%esp),%edx | ||
322 | # s += r | ||
323 | add %esi,%ecx | ||
324 | # s <<<= 18 | ||
325 | rol $18,%ecx | ||
326 | # s ^= x5 | ||
327 | xorl 120(%esp),%ecx | ||
328 | # w += v | ||
329 | add %edi,%ebx | ||
330 | # w <<<= 18 | ||
331 | rol $18,%ebx | ||
332 | # w ^= x15 | ||
333 | xorl 160(%esp),%ebx | ||
334 | # x0 = p | ||
335 | movl %eax,100(%esp) | ||
336 | # x10 = t | ||
337 | movl %edx,140(%esp) | ||
338 | # p += x3 | ||
339 | addl 112(%esp),%eax | ||
340 | # p <<<= 7 | ||
341 | rol $7,%eax | ||
342 | # x5 = s | ||
343 | movl %ecx,120(%esp) | ||
344 | # t += x9 | ||
345 | addl 136(%esp),%edx | ||
346 | # x15 = w | ||
347 | movl %ebx,160(%esp) | ||
348 | # r = x4 | ||
349 | movl 116(%esp),%esi | ||
350 | # r += s | ||
351 | add %ecx,%esi | ||
352 | # v = x14 | ||
353 | movl 156(%esp),%edi | ||
354 | # v += w | ||
355 | add %ebx,%edi | ||
356 | # p ^= x1 | ||
357 | xorl 104(%esp),%eax | ||
358 | # t <<<= 7 | ||
359 | rol $7,%edx | ||
360 | # t ^= x11 | ||
361 | xorl 144(%esp),%edx | ||
362 | # r <<<= 7 | ||
363 | rol $7,%esi | ||
364 | # r ^= x6 | ||
365 | xorl 124(%esp),%esi | ||
366 | # v <<<= 7 | ||
367 | rol $7,%edi | ||
368 | # v ^= x12 | ||
369 | xorl 148(%esp),%edi | ||
370 | # x1 = p | ||
371 | movl %eax,104(%esp) | ||
372 | # x11 = t | ||
373 | movl %edx,144(%esp) | ||
374 | # p += x0 | ||
375 | addl 100(%esp),%eax | ||
376 | # x6 = r | ||
377 | movl %esi,124(%esp) | ||
378 | # t += x10 | ||
379 | addl 140(%esp),%edx | ||
380 | # x12 = v | ||
381 | movl %edi,148(%esp) | ||
382 | # p <<<= 9 | ||
383 | rol $9,%eax | ||
384 | # p ^= x2 | ||
385 | xorl 108(%esp),%eax | ||
386 | # t <<<= 9 | ||
387 | rol $9,%edx | ||
388 | # t ^= x8 | ||
389 | xorl 132(%esp),%edx | ||
390 | # s += r | ||
391 | add %esi,%ecx | ||
392 | # s <<<= 9 | ||
393 | rol $9,%ecx | ||
394 | # s ^= x7 | ||
395 | xorl 128(%esp),%ecx | ||
396 | # w += v | ||
397 | add %edi,%ebx | ||
398 | # w <<<= 9 | ||
399 | rol $9,%ebx | ||
400 | # w ^= x13 | ||
401 | xorl 152(%esp),%ebx | ||
402 | # x2 = p | ||
403 | movl %eax,108(%esp) | ||
404 | # x8 = t | ||
405 | movl %edx,132(%esp) | ||
406 | # p += x1 | ||
407 | addl 104(%esp),%eax | ||
408 | # x7 = s | ||
409 | movl %ecx,128(%esp) | ||
410 | # t += x11 | ||
411 | addl 144(%esp),%edx | ||
412 | # x13 = w | ||
413 | movl %ebx,152(%esp) | ||
414 | # p <<<= 13 | ||
415 | rol $13,%eax | ||
416 | # p ^= x3 | ||
417 | xorl 112(%esp),%eax | ||
418 | # t <<<= 13 | ||
419 | rol $13,%edx | ||
420 | # t ^= x9 | ||
421 | xorl 136(%esp),%edx | ||
422 | # r += s | ||
423 | add %ecx,%esi | ||
424 | # r <<<= 13 | ||
425 | rol $13,%esi | ||
426 | # r ^= x4 | ||
427 | xorl 116(%esp),%esi | ||
428 | # v += w | ||
429 | add %ebx,%edi | ||
430 | # v <<<= 13 | ||
431 | rol $13,%edi | ||
432 | # v ^= x14 | ||
433 | xorl 156(%esp),%edi | ||
434 | # x3 = p | ||
435 | movl %eax,112(%esp) | ||
436 | # x9 = t | ||
437 | movl %edx,136(%esp) | ||
438 | # p += x2 | ||
439 | addl 108(%esp),%eax | ||
440 | # x4 = r | ||
441 | movl %esi,116(%esp) | ||
442 | # t += x8 | ||
443 | addl 132(%esp),%edx | ||
444 | # x14 = v | ||
445 | movl %edi,156(%esp) | ||
446 | # p <<<= 18 | ||
447 | rol $18,%eax | ||
448 | # p ^= x0 | ||
449 | xorl 100(%esp),%eax | ||
450 | # t <<<= 18 | ||
451 | rol $18,%edx | ||
452 | # t ^= x10 | ||
453 | xorl 140(%esp),%edx | ||
454 | # s += r | ||
455 | add %esi,%ecx | ||
456 | # s <<<= 18 | ||
457 | rol $18,%ecx | ||
458 | # s ^= x5 | ||
459 | xorl 120(%esp),%ecx | ||
460 | # w += v | ||
461 | add %edi,%ebx | ||
462 | # w <<<= 18 | ||
463 | rol $18,%ebx | ||
464 | # w ^= x15 | ||
465 | xorl 160(%esp),%ebx | ||
466 | # x0 = p | ||
467 | movl %eax,100(%esp) | ||
468 | # x10 = t | ||
469 | movl %edx,140(%esp) | ||
470 | # p += x12 | ||
471 | addl 148(%esp),%eax | ||
472 | # x5 = s | ||
473 | movl %ecx,120(%esp) | ||
474 | # t += x6 | ||
475 | addl 124(%esp),%edx | ||
476 | # x15 = w | ||
477 | movl %ebx,160(%esp) | ||
478 | # r = x1 | ||
479 | movl 104(%esp),%esi | ||
480 | # r += s | ||
481 | add %ecx,%esi | ||
482 | # v = x11 | ||
483 | movl 144(%esp),%edi | ||
484 | # v += w | ||
485 | add %ebx,%edi | ||
486 | # p <<<= 7 | ||
487 | rol $7,%eax | ||
488 | # p ^= x4 | ||
489 | xorl 116(%esp),%eax | ||
490 | # t <<<= 7 | ||
491 | rol $7,%edx | ||
492 | # t ^= x14 | ||
493 | xorl 156(%esp),%edx | ||
494 | # r <<<= 7 | ||
495 | rol $7,%esi | ||
496 | # r ^= x9 | ||
497 | xorl 136(%esp),%esi | ||
498 | # v <<<= 7 | ||
499 | rol $7,%edi | ||
500 | # v ^= x3 | ||
501 | xorl 112(%esp),%edi | ||
502 | # x4 = p | ||
503 | movl %eax,116(%esp) | ||
504 | # x14 = t | ||
505 | movl %edx,156(%esp) | ||
506 | # p += x0 | ||
507 | addl 100(%esp),%eax | ||
508 | # x9 = r | ||
509 | movl %esi,136(%esp) | ||
510 | # t += x10 | ||
511 | addl 140(%esp),%edx | ||
512 | # x3 = v | ||
513 | movl %edi,112(%esp) | ||
514 | # p <<<= 9 | ||
515 | rol $9,%eax | ||
516 | # p ^= x8 | ||
517 | xorl 132(%esp),%eax | ||
518 | # t <<<= 9 | ||
519 | rol $9,%edx | ||
520 | # t ^= x2 | ||
521 | xorl 108(%esp),%edx | ||
522 | # s += r | ||
523 | add %esi,%ecx | ||
524 | # s <<<= 9 | ||
525 | rol $9,%ecx | ||
526 | # s ^= x13 | ||
527 | xorl 152(%esp),%ecx | ||
528 | # w += v | ||
529 | add %edi,%ebx | ||
530 | # w <<<= 9 | ||
531 | rol $9,%ebx | ||
532 | # w ^= x7 | ||
533 | xorl 128(%esp),%ebx | ||
534 | # x8 = p | ||
535 | movl %eax,132(%esp) | ||
536 | # x2 = t | ||
537 | movl %edx,108(%esp) | ||
538 | # p += x4 | ||
539 | addl 116(%esp),%eax | ||
540 | # x13 = s | ||
541 | movl %ecx,152(%esp) | ||
542 | # t += x14 | ||
543 | addl 156(%esp),%edx | ||
544 | # x7 = w | ||
545 | movl %ebx,128(%esp) | ||
546 | # p <<<= 13 | ||
547 | rol $13,%eax | ||
548 | # p ^= x12 | ||
549 | xorl 148(%esp),%eax | ||
550 | # t <<<= 13 | ||
551 | rol $13,%edx | ||
552 | # t ^= x6 | ||
553 | xorl 124(%esp),%edx | ||
554 | # r += s | ||
555 | add %ecx,%esi | ||
556 | # r <<<= 13 | ||
557 | rol $13,%esi | ||
558 | # r ^= x1 | ||
559 | xorl 104(%esp),%esi | ||
560 | # v += w | ||
561 | add %ebx,%edi | ||
562 | # v <<<= 13 | ||
563 | rol $13,%edi | ||
564 | # v ^= x11 | ||
565 | xorl 144(%esp),%edi | ||
566 | # x12 = p | ||
567 | movl %eax,148(%esp) | ||
568 | # x6 = t | ||
569 | movl %edx,124(%esp) | ||
570 | # p += x8 | ||
571 | addl 132(%esp),%eax | ||
572 | # x1 = r | ||
573 | movl %esi,104(%esp) | ||
574 | # t += x2 | ||
575 | addl 108(%esp),%edx | ||
576 | # x11 = v | ||
577 | movl %edi,144(%esp) | ||
578 | # p <<<= 18 | ||
579 | rol $18,%eax | ||
580 | # p ^= x0 | ||
581 | xorl 100(%esp),%eax | ||
582 | # t <<<= 18 | ||
583 | rol $18,%edx | ||
584 | # t ^= x10 | ||
585 | xorl 140(%esp),%edx | ||
586 | # s += r | ||
587 | add %esi,%ecx | ||
588 | # s <<<= 18 | ||
589 | rol $18,%ecx | ||
590 | # s ^= x5 | ||
591 | xorl 120(%esp),%ecx | ||
592 | # w += v | ||
593 | add %edi,%ebx | ||
594 | # w <<<= 18 | ||
595 | rol $18,%ebx | ||
596 | # w ^= x15 | ||
597 | xorl 160(%esp),%ebx | ||
598 | # x0 = p | ||
599 | movl %eax,100(%esp) | ||
600 | # x10 = t | ||
601 | movl %edx,140(%esp) | ||
602 | # p += x3 | ||
603 | addl 112(%esp),%eax | ||
604 | # p <<<= 7 | ||
605 | rol $7,%eax | ||
606 | # x5 = s | ||
607 | movl %ecx,120(%esp) | ||
608 | # t += x9 | ||
609 | addl 136(%esp),%edx | ||
610 | # x15 = w | ||
611 | movl %ebx,160(%esp) | ||
612 | # r = x4 | ||
613 | movl 116(%esp),%esi | ||
614 | # r += s | ||
615 | add %ecx,%esi | ||
616 | # v = x14 | ||
617 | movl 156(%esp),%edi | ||
618 | # v += w | ||
619 | add %ebx,%edi | ||
620 | # p ^= x1 | ||
621 | xorl 104(%esp),%eax | ||
622 | # t <<<= 7 | ||
623 | rol $7,%edx | ||
624 | # t ^= x11 | ||
625 | xorl 144(%esp),%edx | ||
626 | # r <<<= 7 | ||
627 | rol $7,%esi | ||
628 | # r ^= x6 | ||
629 | xorl 124(%esp),%esi | ||
630 | # v <<<= 7 | ||
631 | rol $7,%edi | ||
632 | # v ^= x12 | ||
633 | xorl 148(%esp),%edi | ||
634 | # x1 = p | ||
635 | movl %eax,104(%esp) | ||
636 | # x11 = t | ||
637 | movl %edx,144(%esp) | ||
638 | # p += x0 | ||
639 | addl 100(%esp),%eax | ||
640 | # x6 = r | ||
641 | movl %esi,124(%esp) | ||
642 | # t += x10 | ||
643 | addl 140(%esp),%edx | ||
644 | # x12 = v | ||
645 | movl %edi,148(%esp) | ||
646 | # p <<<= 9 | ||
647 | rol $9,%eax | ||
648 | # p ^= x2 | ||
649 | xorl 108(%esp),%eax | ||
650 | # t <<<= 9 | ||
651 | rol $9,%edx | ||
652 | # t ^= x8 | ||
653 | xorl 132(%esp),%edx | ||
654 | # s += r | ||
655 | add %esi,%ecx | ||
656 | # s <<<= 9 | ||
657 | rol $9,%ecx | ||
658 | # s ^= x7 | ||
659 | xorl 128(%esp),%ecx | ||
660 | # w += v | ||
661 | add %edi,%ebx | ||
662 | # w <<<= 9 | ||
663 | rol $9,%ebx | ||
664 | # w ^= x13 | ||
665 | xorl 152(%esp),%ebx | ||
666 | # x2 = p | ||
667 | movl %eax,108(%esp) | ||
668 | # x8 = t | ||
669 | movl %edx,132(%esp) | ||
670 | # p += x1 | ||
671 | addl 104(%esp),%eax | ||
672 | # x7 = s | ||
673 | movl %ecx,128(%esp) | ||
674 | # t += x11 | ||
675 | addl 144(%esp),%edx | ||
676 | # x13 = w | ||
677 | movl %ebx,152(%esp) | ||
678 | # p <<<= 13 | ||
679 | rol $13,%eax | ||
680 | # p ^= x3 | ||
681 | xorl 112(%esp),%eax | ||
682 | # t <<<= 13 | ||
683 | rol $13,%edx | ||
684 | # t ^= x9 | ||
685 | xorl 136(%esp),%edx | ||
686 | # r += s | ||
687 | add %ecx,%esi | ||
688 | # r <<<= 13 | ||
689 | rol $13,%esi | ||
690 | # r ^= x4 | ||
691 | xorl 116(%esp),%esi | ||
692 | # v += w | ||
693 | add %ebx,%edi | ||
694 | # v <<<= 13 | ||
695 | rol $13,%edi | ||
696 | # v ^= x14 | ||
697 | xorl 156(%esp),%edi | ||
698 | # x3 = p | ||
699 | movl %eax,112(%esp) | ||
700 | # x9 = t | ||
701 | movl %edx,136(%esp) | ||
702 | # p += x2 | ||
703 | addl 108(%esp),%eax | ||
704 | # x4 = r | ||
705 | movl %esi,116(%esp) | ||
706 | # t += x8 | ||
707 | addl 132(%esp),%edx | ||
708 | # x14 = v | ||
709 | movl %edi,156(%esp) | ||
710 | # p <<<= 18 | ||
711 | rol $18,%eax | ||
712 | # p ^= x0 | ||
713 | xorl 100(%esp),%eax | ||
714 | # t <<<= 18 | ||
715 | rol $18,%edx | ||
716 | # t ^= x10 | ||
717 | xorl 140(%esp),%edx | ||
718 | # s += r | ||
719 | add %esi,%ecx | ||
720 | # s <<<= 18 | ||
721 | rol $18,%ecx | ||
722 | # s ^= x5 | ||
723 | xorl 120(%esp),%ecx | ||
724 | # w += v | ||
725 | add %edi,%ebx | ||
726 | # w <<<= 18 | ||
727 | rol $18,%ebx | ||
728 | # w ^= x15 | ||
729 | xorl 160(%esp),%ebx | ||
730 | # i -= 4 | ||
731 | sub $4,%ebp | ||
732 | # goto mainloop if unsigned > | ||
733 | ja ._mainloop | ||
734 | # x0 = p | ||
735 | movl %eax,100(%esp) | ||
736 | # x5 = s | ||
737 | movl %ecx,120(%esp) | ||
738 | # x10 = t | ||
739 | movl %edx,140(%esp) | ||
740 | # x15 = w | ||
741 | movl %ebx,160(%esp) | ||
742 | # out = out_backup | ||
743 | movl 72(%esp),%edi | ||
744 | # m = m_backup | ||
745 | movl 68(%esp),%esi | ||
746 | # in0 = x0 | ||
747 | movl 100(%esp),%eax | ||
748 | # in1 = x1 | ||
749 | movl 104(%esp),%ecx | ||
750 | # in0 += j0 | ||
751 | addl 164(%esp),%eax | ||
752 | # in1 += j1 | ||
753 | addl 168(%esp),%ecx | ||
754 | # in0 ^= *(uint32 *) (m + 0) | ||
755 | xorl 0(%esi),%eax | ||
756 | # in1 ^= *(uint32 *) (m + 4) | ||
757 | xorl 4(%esi),%ecx | ||
758 | # *(uint32 *) (out + 0) = in0 | ||
759 | movl %eax,0(%edi) | ||
760 | # *(uint32 *) (out + 4) = in1 | ||
761 | movl %ecx,4(%edi) | ||
762 | # in2 = x2 | ||
763 | movl 108(%esp),%eax | ||
764 | # in3 = x3 | ||
765 | movl 112(%esp),%ecx | ||
766 | # in2 += j2 | ||
767 | addl 172(%esp),%eax | ||
768 | # in3 += j3 | ||
769 | addl 176(%esp),%ecx | ||
770 | # in2 ^= *(uint32 *) (m + 8) | ||
771 | xorl 8(%esi),%eax | ||
772 | # in3 ^= *(uint32 *) (m + 12) | ||
773 | xorl 12(%esi),%ecx | ||
774 | # *(uint32 *) (out + 8) = in2 | ||
775 | movl %eax,8(%edi) | ||
776 | # *(uint32 *) (out + 12) = in3 | ||
777 | movl %ecx,12(%edi) | ||
778 | # in4 = x4 | ||
779 | movl 116(%esp),%eax | ||
780 | # in5 = x5 | ||
781 | movl 120(%esp),%ecx | ||
782 | # in4 += j4 | ||
783 | addl 180(%esp),%eax | ||
784 | # in5 += j5 | ||
785 | addl 184(%esp),%ecx | ||
786 | # in4 ^= *(uint32 *) (m + 16) | ||
787 | xorl 16(%esi),%eax | ||
788 | # in5 ^= *(uint32 *) (m + 20) | ||
789 | xorl 20(%esi),%ecx | ||
790 | # *(uint32 *) (out + 16) = in4 | ||
791 | movl %eax,16(%edi) | ||
792 | # *(uint32 *) (out + 20) = in5 | ||
793 | movl %ecx,20(%edi) | ||
794 | # in6 = x6 | ||
795 | movl 124(%esp),%eax | ||
796 | # in7 = x7 | ||
797 | movl 128(%esp),%ecx | ||
798 | # in6 += j6 | ||
799 | addl 188(%esp),%eax | ||
800 | # in7 += j7 | ||
801 | addl 192(%esp),%ecx | ||
802 | # in6 ^= *(uint32 *) (m + 24) | ||
803 | xorl 24(%esi),%eax | ||
804 | # in7 ^= *(uint32 *) (m + 28) | ||
805 | xorl 28(%esi),%ecx | ||
806 | # *(uint32 *) (out + 24) = in6 | ||
807 | movl %eax,24(%edi) | ||
808 | # *(uint32 *) (out + 28) = in7 | ||
809 | movl %ecx,28(%edi) | ||
810 | # in8 = x8 | ||
811 | movl 132(%esp),%eax | ||
812 | # in9 = x9 | ||
813 | movl 136(%esp),%ecx | ||
814 | # in8 += j8 | ||
815 | addl 196(%esp),%eax | ||
816 | # in9 += j9 | ||
817 | addl 200(%esp),%ecx | ||
818 | # in8 ^= *(uint32 *) (m + 32) | ||
819 | xorl 32(%esi),%eax | ||
820 | # in9 ^= *(uint32 *) (m + 36) | ||
821 | xorl 36(%esi),%ecx | ||
822 | # *(uint32 *) (out + 32) = in8 | ||
823 | movl %eax,32(%edi) | ||
824 | # *(uint32 *) (out + 36) = in9 | ||
825 | movl %ecx,36(%edi) | ||
826 | # in10 = x10 | ||
827 | movl 140(%esp),%eax | ||
828 | # in11 = x11 | ||
829 | movl 144(%esp),%ecx | ||
830 | # in10 += j10 | ||
831 | addl 204(%esp),%eax | ||
832 | # in11 += j11 | ||
833 | addl 208(%esp),%ecx | ||
834 | # in10 ^= *(uint32 *) (m + 40) | ||
835 | xorl 40(%esi),%eax | ||
836 | # in11 ^= *(uint32 *) (m + 44) | ||
837 | xorl 44(%esi),%ecx | ||
838 | # *(uint32 *) (out + 40) = in10 | ||
839 | movl %eax,40(%edi) | ||
840 | # *(uint32 *) (out + 44) = in11 | ||
841 | movl %ecx,44(%edi) | ||
842 | # in12 = x12 | ||
843 | movl 148(%esp),%eax | ||
844 | # in13 = x13 | ||
845 | movl 152(%esp),%ecx | ||
846 | # in12 += j12 | ||
847 | addl 212(%esp),%eax | ||
848 | # in13 += j13 | ||
849 | addl 216(%esp),%ecx | ||
850 | # in12 ^= *(uint32 *) (m + 48) | ||
851 | xorl 48(%esi),%eax | ||
852 | # in13 ^= *(uint32 *) (m + 52) | ||
853 | xorl 52(%esi),%ecx | ||
854 | # *(uint32 *) (out + 48) = in12 | ||
855 | movl %eax,48(%edi) | ||
856 | # *(uint32 *) (out + 52) = in13 | ||
857 | movl %ecx,52(%edi) | ||
858 | # in14 = x14 | ||
859 | movl 156(%esp),%eax | ||
860 | # in15 = x15 | ||
861 | movl 160(%esp),%ecx | ||
862 | # in14 += j14 | ||
863 | addl 220(%esp),%eax | ||
864 | # in15 += j15 | ||
865 | addl 224(%esp),%ecx | ||
866 | # in14 ^= *(uint32 *) (m + 56) | ||
867 | xorl 56(%esi),%eax | ||
868 | # in15 ^= *(uint32 *) (m + 60) | ||
869 | xorl 60(%esi),%ecx | ||
870 | # *(uint32 *) (out + 56) = in14 | ||
871 | movl %eax,56(%edi) | ||
872 | # *(uint32 *) (out + 60) = in15 | ||
873 | movl %ecx,60(%edi) | ||
874 | # bytes = bytes_backup | ||
875 | movl 76(%esp),%ebx | ||
876 | # in8 = j8 | ||
877 | movl 196(%esp),%eax | ||
878 | # in9 = j9 | ||
879 | movl 200(%esp),%ecx | ||
880 | # in8 += 1 | ||
881 | add $1,%eax | ||
882 | # in9 += 0 + carry | ||
883 | adc $0,%ecx | ||
884 | # j8 = in8 | ||
885 | movl %eax,196(%esp) | ||
886 | # j9 = in9 | ||
887 | movl %ecx,200(%esp) | ||
888 | # bytes - 64 | ||
889 | cmp $64,%ebx | ||
890 | # goto bytesatleast65 if unsigned> | ||
891 | ja ._bytesatleast65 | ||
892 | # goto bytesatleast64 if unsigned>= | ||
893 | jae ._bytesatleast64 | ||
894 | # m = out | ||
895 | mov %edi,%esi | ||
896 | # out = ctarget | ||
897 | movl 228(%esp),%edi | ||
898 | # i = bytes | ||
899 | mov %ebx,%ecx | ||
900 | # while (i) { *out++ = *m++; --i } | ||
901 | rep movsb | ||
902 | ._bytesatleast64: | ||
903 | # x = x_backup | ||
904 | movl 64(%esp),%eax | ||
905 | # in8 = j8 | ||
906 | movl 196(%esp),%ecx | ||
907 | # in9 = j9 | ||
908 | movl 200(%esp),%edx | ||
909 | # *(uint32 *) (x + 32) = in8 | ||
910 | movl %ecx,32(%eax) | ||
911 | # *(uint32 *) (x + 36) = in9 | ||
912 | movl %edx,36(%eax) | ||
913 | ._done: | ||
914 | # eax = eax_stack | ||
915 | movl 80(%esp),%eax | ||
916 | # ebx = ebx_stack | ||
917 | movl 84(%esp),%ebx | ||
918 | # esi = esi_stack | ||
919 | movl 88(%esp),%esi | ||
920 | # edi = edi_stack | ||
921 | movl 92(%esp),%edi | ||
922 | # ebp = ebp_stack | ||
923 | movl 96(%esp),%ebp | ||
924 | # leave | ||
925 | add %eax,%esp | ||
926 | ret | ||
927 | ._bytesatleast65: | ||
928 | # bytes -= 64 | ||
929 | sub $64,%ebx | ||
930 | # out += 64 | ||
931 | add $64,%edi | ||
932 | # m += 64 | ||
933 | add $64,%esi | ||
934 | # goto bytesatleast1 | ||
935 | jmp ._bytesatleast1 | ||
936 | # enter ECRYPT_keysetup | ||
937 | .text | ||
938 | .p2align 5 | ||
939 | .globl ECRYPT_keysetup | ||
940 | ECRYPT_keysetup: | ||
941 | mov %esp,%eax | ||
942 | and $31,%eax | ||
943 | add $256,%eax | ||
944 | sub %eax,%esp | ||
945 | # eax_stack = eax | ||
946 | movl %eax,64(%esp) | ||
947 | # ebx_stack = ebx | ||
948 | movl %ebx,68(%esp) | ||
949 | # esi_stack = esi | ||
950 | movl %esi,72(%esp) | ||
951 | # edi_stack = edi | ||
952 | movl %edi,76(%esp) | ||
953 | # ebp_stack = ebp | ||
954 | movl %ebp,80(%esp) | ||
955 | # k = arg2 | ||
956 | movl 8(%esp,%eax),%ecx | ||
957 | # kbits = arg3 | ||
958 | movl 12(%esp,%eax),%edx | ||
959 | # x = arg1 | ||
960 | movl 4(%esp,%eax),%eax | ||
961 | # in1 = *(uint32 *) (k + 0) | ||
962 | movl 0(%ecx),%ebx | ||
963 | # in2 = *(uint32 *) (k + 4) | ||
964 | movl 4(%ecx),%esi | ||
965 | # in3 = *(uint32 *) (k + 8) | ||
966 | movl 8(%ecx),%edi | ||
967 | # in4 = *(uint32 *) (k + 12) | ||
968 | movl 12(%ecx),%ebp | ||
969 | # *(uint32 *) (x + 4) = in1 | ||
970 | movl %ebx,4(%eax) | ||
971 | # *(uint32 *) (x + 8) = in2 | ||
972 | movl %esi,8(%eax) | ||
973 | # *(uint32 *) (x + 12) = in3 | ||
974 | movl %edi,12(%eax) | ||
975 | # *(uint32 *) (x + 16) = in4 | ||
976 | movl %ebp,16(%eax) | ||
977 | # kbits - 256 | ||
978 | cmp $256,%edx | ||
979 | # goto kbits128 if unsigned< | ||
980 | jb ._kbits128 | ||
981 | ._kbits256: | ||
982 | # in11 = *(uint32 *) (k + 16) | ||
983 | movl 16(%ecx),%edx | ||
984 | # in12 = *(uint32 *) (k + 20) | ||
985 | movl 20(%ecx),%ebx | ||
986 | # in13 = *(uint32 *) (k + 24) | ||
987 | movl 24(%ecx),%esi | ||
988 | # in14 = *(uint32 *) (k + 28) | ||
989 | movl 28(%ecx),%ecx | ||
990 | # *(uint32 *) (x + 44) = in11 | ||
991 | movl %edx,44(%eax) | ||
992 | # *(uint32 *) (x + 48) = in12 | ||
993 | movl %ebx,48(%eax) | ||
994 | # *(uint32 *) (x + 52) = in13 | ||
995 | movl %esi,52(%eax) | ||
996 | # *(uint32 *) (x + 56) = in14 | ||
997 | movl %ecx,56(%eax) | ||
998 | # in0 = 1634760805 | ||
999 | mov $1634760805,%ecx | ||
1000 | # in5 = 857760878 | ||
1001 | mov $857760878,%edx | ||
1002 | # in10 = 2036477234 | ||
1003 | mov $2036477234,%ebx | ||
1004 | # in15 = 1797285236 | ||
1005 | mov $1797285236,%esi | ||
1006 | # *(uint32 *) (x + 0) = in0 | ||
1007 | movl %ecx,0(%eax) | ||
1008 | # *(uint32 *) (x + 20) = in5 | ||
1009 | movl %edx,20(%eax) | ||
1010 | # *(uint32 *) (x + 40) = in10 | ||
1011 | movl %ebx,40(%eax) | ||
1012 | # *(uint32 *) (x + 60) = in15 | ||
1013 | movl %esi,60(%eax) | ||
1014 | # goto keysetupdone | ||
1015 | jmp ._keysetupdone | ||
1016 | ._kbits128: | ||
1017 | # in11 = *(uint32 *) (k + 0) | ||
1018 | movl 0(%ecx),%edx | ||
1019 | # in12 = *(uint32 *) (k + 4) | ||
1020 | movl 4(%ecx),%ebx | ||
1021 | # in13 = *(uint32 *) (k + 8) | ||
1022 | movl 8(%ecx),%esi | ||
1023 | # in14 = *(uint32 *) (k + 12) | ||
1024 | movl 12(%ecx),%ecx | ||
1025 | # *(uint32 *) (x + 44) = in11 | ||
1026 | movl %edx,44(%eax) | ||
1027 | # *(uint32 *) (x + 48) = in12 | ||
1028 | movl %ebx,48(%eax) | ||
1029 | # *(uint32 *) (x + 52) = in13 | ||
1030 | movl %esi,52(%eax) | ||
1031 | # *(uint32 *) (x + 56) = in14 | ||
1032 | movl %ecx,56(%eax) | ||
1033 | # in0 = 1634760805 | ||
1034 | mov $1634760805,%ecx | ||
1035 | # in5 = 824206446 | ||
1036 | mov $824206446,%edx | ||
1037 | # in10 = 2036477238 | ||
1038 | mov $2036477238,%ebx | ||
1039 | # in15 = 1797285236 | ||
1040 | mov $1797285236,%esi | ||
1041 | # *(uint32 *) (x + 0) = in0 | ||
1042 | movl %ecx,0(%eax) | ||
1043 | # *(uint32 *) (x + 20) = in5 | ||
1044 | movl %edx,20(%eax) | ||
1045 | # *(uint32 *) (x + 40) = in10 | ||
1046 | movl %ebx,40(%eax) | ||
1047 | # *(uint32 *) (x + 60) = in15 | ||
1048 | movl %esi,60(%eax) | ||
1049 | ._keysetupdone: | ||
1050 | # eax = eax_stack | ||
1051 | movl 64(%esp),%eax | ||
1052 | # ebx = ebx_stack | ||
1053 | movl 68(%esp),%ebx | ||
1054 | # esi = esi_stack | ||
1055 | movl 72(%esp),%esi | ||
1056 | # edi = edi_stack | ||
1057 | movl 76(%esp),%edi | ||
1058 | # ebp = ebp_stack | ||
1059 | movl 80(%esp),%ebp | ||
1060 | # leave | ||
1061 | add %eax,%esp | ||
1062 | ret | ||
1063 | # enter ECRYPT_ivsetup | ||
1064 | .text | ||
1065 | .p2align 5 | ||
1066 | .globl ECRYPT_ivsetup | ||
1067 | ECRYPT_ivsetup: | ||
1068 | mov %esp,%eax | ||
1069 | and $31,%eax | ||
1070 | add $256,%eax | ||
1071 | sub %eax,%esp | ||
1072 | # eax_stack = eax | ||
1073 | movl %eax,64(%esp) | ||
1074 | # ebx_stack = ebx | ||
1075 | movl %ebx,68(%esp) | ||
1076 | # esi_stack = esi | ||
1077 | movl %esi,72(%esp) | ||
1078 | # edi_stack = edi | ||
1079 | movl %edi,76(%esp) | ||
1080 | # ebp_stack = ebp | ||
1081 | movl %ebp,80(%esp) | ||
1082 | # iv = arg2 | ||
1083 | movl 8(%esp,%eax),%ecx | ||
1084 | # x = arg1 | ||
1085 | movl 4(%esp,%eax),%eax | ||
1086 | # in6 = *(uint32 *) (iv + 0) | ||
1087 | movl 0(%ecx),%edx | ||
1088 | # in7 = *(uint32 *) (iv + 4) | ||
1089 | movl 4(%ecx),%ecx | ||
1090 | # in8 = 0 | ||
1091 | mov $0,%ebx | ||
1092 | # in9 = 0 | ||
1093 | mov $0,%esi | ||
1094 | # *(uint32 *) (x + 24) = in6 | ||
1095 | movl %edx,24(%eax) | ||
1096 | # *(uint32 *) (x + 28) = in7 | ||
1097 | movl %ecx,28(%eax) | ||
1098 | # *(uint32 *) (x + 32) = in8 | ||
1099 | movl %ebx,32(%eax) | ||
1100 | # *(uint32 *) (x + 36) = in9 | ||
1101 | movl %esi,36(%eax) | ||
1102 | # eax = eax_stack | ||
1103 | movl 64(%esp),%eax | ||
1104 | # ebx = ebx_stack | ||
1105 | movl 68(%esp),%ebx | ||
1106 | # esi = esi_stack | ||
1107 | movl 72(%esp),%esi | ||
1108 | # edi = edi_stack | ||
1109 | movl 76(%esp),%edi | ||
1110 | # ebp = ebp_stack | ||
1111 | movl 80(%esp),%ebp | ||
1112 | # leave | ||
1113 | add %eax,%esp | ||
1114 | ret | ||
diff --git a/arch/x86/crypto/salsa20-x86_64-asm_64.S b/arch/x86/crypto/salsa20-x86_64-asm_64.S new file mode 100644 index 000000000000..6214a9b09706 --- /dev/null +++ b/arch/x86/crypto/salsa20-x86_64-asm_64.S | |||
@@ -0,0 +1,920 @@ | |||
1 | # enter ECRYPT_encrypt_bytes | ||
2 | .text | ||
3 | .p2align 5 | ||
4 | .globl ECRYPT_encrypt_bytes | ||
5 | ECRYPT_encrypt_bytes: | ||
6 | mov %rsp,%r11 | ||
7 | and $31,%r11 | ||
8 | add $256,%r11 | ||
9 | sub %r11,%rsp | ||
10 | # x = arg1 | ||
11 | mov %rdi,%r8 | ||
12 | # m = arg2 | ||
13 | mov %rsi,%rsi | ||
14 | # out = arg3 | ||
15 | mov %rdx,%rdi | ||
16 | # bytes = arg4 | ||
17 | mov %rcx,%rdx | ||
18 | # unsigned>? bytes - 0 | ||
19 | cmp $0,%rdx | ||
20 | # comment:fp stack unchanged by jump | ||
21 | # goto done if !unsigned> | ||
22 | jbe ._done | ||
23 | # comment:fp stack unchanged by fallthrough | ||
24 | # start: | ||
25 | ._start: | ||
26 | # r11_stack = r11 | ||
27 | movq %r11,0(%rsp) | ||
28 | # r12_stack = r12 | ||
29 | movq %r12,8(%rsp) | ||
30 | # r13_stack = r13 | ||
31 | movq %r13,16(%rsp) | ||
32 | # r14_stack = r14 | ||
33 | movq %r14,24(%rsp) | ||
34 | # r15_stack = r15 | ||
35 | movq %r15,32(%rsp) | ||
36 | # rbx_stack = rbx | ||
37 | movq %rbx,40(%rsp) | ||
38 | # rbp_stack = rbp | ||
39 | movq %rbp,48(%rsp) | ||
40 | # in0 = *(uint64 *) (x + 0) | ||
41 | movq 0(%r8),%rcx | ||
42 | # in2 = *(uint64 *) (x + 8) | ||
43 | movq 8(%r8),%r9 | ||
44 | # in4 = *(uint64 *) (x + 16) | ||
45 | movq 16(%r8),%rax | ||
46 | # in6 = *(uint64 *) (x + 24) | ||
47 | movq 24(%r8),%r10 | ||
48 | # in8 = *(uint64 *) (x + 32) | ||
49 | movq 32(%r8),%r11 | ||
50 | # in10 = *(uint64 *) (x + 40) | ||
51 | movq 40(%r8),%r12 | ||
52 | # in12 = *(uint64 *) (x + 48) | ||
53 | movq 48(%r8),%r13 | ||
54 | # in14 = *(uint64 *) (x + 56) | ||
55 | movq 56(%r8),%r14 | ||
56 | # j0 = in0 | ||
57 | movq %rcx,56(%rsp) | ||
58 | # j2 = in2 | ||
59 | movq %r9,64(%rsp) | ||
60 | # j4 = in4 | ||
61 | movq %rax,72(%rsp) | ||
62 | # j6 = in6 | ||
63 | movq %r10,80(%rsp) | ||
64 | # j8 = in8 | ||
65 | movq %r11,88(%rsp) | ||
66 | # j10 = in10 | ||
67 | movq %r12,96(%rsp) | ||
68 | # j12 = in12 | ||
69 | movq %r13,104(%rsp) | ||
70 | # j14 = in14 | ||
71 | movq %r14,112(%rsp) | ||
72 | # x_backup = x | ||
73 | movq %r8,120(%rsp) | ||
74 | # bytesatleast1: | ||
75 | ._bytesatleast1: | ||
76 | # unsigned<? bytes - 64 | ||
77 | cmp $64,%rdx | ||
78 | # comment:fp stack unchanged by jump | ||
79 | # goto nocopy if !unsigned< | ||
80 | jae ._nocopy | ||
81 | # ctarget = out | ||
82 | movq %rdi,128(%rsp) | ||
83 | # out = &tmp | ||
84 | leaq 192(%rsp),%rdi | ||
85 | # i = bytes | ||
86 | mov %rdx,%rcx | ||
87 | # while (i) { *out++ = *m++; --i } | ||
88 | rep movsb | ||
89 | # out = &tmp | ||
90 | leaq 192(%rsp),%rdi | ||
91 | # m = &tmp | ||
92 | leaq 192(%rsp),%rsi | ||
93 | # comment:fp stack unchanged by fallthrough | ||
94 | # nocopy: | ||
95 | ._nocopy: | ||
96 | # out_backup = out | ||
97 | movq %rdi,136(%rsp) | ||
98 | # m_backup = m | ||
99 | movq %rsi,144(%rsp) | ||
100 | # bytes_backup = bytes | ||
101 | movq %rdx,152(%rsp) | ||
102 | # x1 = j0 | ||
103 | movq 56(%rsp),%rdi | ||
104 | # x0 = x1 | ||
105 | mov %rdi,%rdx | ||
106 | # (uint64) x1 >>= 32 | ||
107 | shr $32,%rdi | ||
108 | # x3 = j2 | ||
109 | movq 64(%rsp),%rsi | ||
110 | # x2 = x3 | ||
111 | mov %rsi,%rcx | ||
112 | # (uint64) x3 >>= 32 | ||
113 | shr $32,%rsi | ||
114 | # x5 = j4 | ||
115 | movq 72(%rsp),%r8 | ||
116 | # x4 = x5 | ||
117 | mov %r8,%r9 | ||
118 | # (uint64) x5 >>= 32 | ||
119 | shr $32,%r8 | ||
120 | # x5_stack = x5 | ||
121 | movq %r8,160(%rsp) | ||
122 | # x7 = j6 | ||
123 | movq 80(%rsp),%r8 | ||
124 | # x6 = x7 | ||
125 | mov %r8,%rax | ||
126 | # (uint64) x7 >>= 32 | ||
127 | shr $32,%r8 | ||
128 | # x9 = j8 | ||
129 | movq 88(%rsp),%r10 | ||
130 | # x8 = x9 | ||
131 | mov %r10,%r11 | ||
132 | # (uint64) x9 >>= 32 | ||
133 | shr $32,%r10 | ||
134 | # x11 = j10 | ||
135 | movq 96(%rsp),%r12 | ||
136 | # x10 = x11 | ||
137 | mov %r12,%r13 | ||
138 | # x10_stack = x10 | ||
139 | movq %r13,168(%rsp) | ||
140 | # (uint64) x11 >>= 32 | ||
141 | shr $32,%r12 | ||
142 | # x13 = j12 | ||
143 | movq 104(%rsp),%r13 | ||
144 | # x12 = x13 | ||
145 | mov %r13,%r14 | ||
146 | # (uint64) x13 >>= 32 | ||
147 | shr $32,%r13 | ||
148 | # x15 = j14 | ||
149 | movq 112(%rsp),%r15 | ||
150 | # x14 = x15 | ||
151 | mov %r15,%rbx | ||
152 | # (uint64) x15 >>= 32 | ||
153 | shr $32,%r15 | ||
154 | # x15_stack = x15 | ||
155 | movq %r15,176(%rsp) | ||
156 | # i = 20 | ||
157 | mov $20,%r15 | ||
158 | # mainloop: | ||
159 | ._mainloop: | ||
160 | # i_backup = i | ||
161 | movq %r15,184(%rsp) | ||
162 | # x5 = x5_stack | ||
163 | movq 160(%rsp),%r15 | ||
164 | # a = x12 + x0 | ||
165 | lea (%r14,%rdx),%rbp | ||
166 | # (uint32) a <<<= 7 | ||
167 | rol $7,%ebp | ||
168 | # x4 ^= a | ||
169 | xor %rbp,%r9 | ||
170 | # b = x1 + x5 | ||
171 | lea (%rdi,%r15),%rbp | ||
172 | # (uint32) b <<<= 7 | ||
173 | rol $7,%ebp | ||
174 | # x9 ^= b | ||
175 | xor %rbp,%r10 | ||
176 | # a = x0 + x4 | ||
177 | lea (%rdx,%r9),%rbp | ||
178 | # (uint32) a <<<= 9 | ||
179 | rol $9,%ebp | ||
180 | # x8 ^= a | ||
181 | xor %rbp,%r11 | ||
182 | # b = x5 + x9 | ||
183 | lea (%r15,%r10),%rbp | ||
184 | # (uint32) b <<<= 9 | ||
185 | rol $9,%ebp | ||
186 | # x13 ^= b | ||
187 | xor %rbp,%r13 | ||
188 | # a = x4 + x8 | ||
189 | lea (%r9,%r11),%rbp | ||
190 | # (uint32) a <<<= 13 | ||
191 | rol $13,%ebp | ||
192 | # x12 ^= a | ||
193 | xor %rbp,%r14 | ||
194 | # b = x9 + x13 | ||
195 | lea (%r10,%r13),%rbp | ||
196 | # (uint32) b <<<= 13 | ||
197 | rol $13,%ebp | ||
198 | # x1 ^= b | ||
199 | xor %rbp,%rdi | ||
200 | # a = x8 + x12 | ||
201 | lea (%r11,%r14),%rbp | ||
202 | # (uint32) a <<<= 18 | ||
203 | rol $18,%ebp | ||
204 | # x0 ^= a | ||
205 | xor %rbp,%rdx | ||
206 | # b = x13 + x1 | ||
207 | lea (%r13,%rdi),%rbp | ||
208 | # (uint32) b <<<= 18 | ||
209 | rol $18,%ebp | ||
210 | # x5 ^= b | ||
211 | xor %rbp,%r15 | ||
212 | # x10 = x10_stack | ||
213 | movq 168(%rsp),%rbp | ||
214 | # x5_stack = x5 | ||
215 | movq %r15,160(%rsp) | ||
216 | # c = x6 + x10 | ||
217 | lea (%rax,%rbp),%r15 | ||
218 | # (uint32) c <<<= 7 | ||
219 | rol $7,%r15d | ||
220 | # x14 ^= c | ||
221 | xor %r15,%rbx | ||
222 | # c = x10 + x14 | ||
223 | lea (%rbp,%rbx),%r15 | ||
224 | # (uint32) c <<<= 9 | ||
225 | rol $9,%r15d | ||
226 | # x2 ^= c | ||
227 | xor %r15,%rcx | ||
228 | # c = x14 + x2 | ||
229 | lea (%rbx,%rcx),%r15 | ||
230 | # (uint32) c <<<= 13 | ||
231 | rol $13,%r15d | ||
232 | # x6 ^= c | ||
233 | xor %r15,%rax | ||
234 | # c = x2 + x6 | ||
235 | lea (%rcx,%rax),%r15 | ||
236 | # (uint32) c <<<= 18 | ||
237 | rol $18,%r15d | ||
238 | # x10 ^= c | ||
239 | xor %r15,%rbp | ||
240 | # x15 = x15_stack | ||
241 | movq 176(%rsp),%r15 | ||
242 | # x10_stack = x10 | ||
243 | movq %rbp,168(%rsp) | ||
244 | # d = x11 + x15 | ||
245 | lea (%r12,%r15),%rbp | ||
246 | # (uint32) d <<<= 7 | ||
247 | rol $7,%ebp | ||
248 | # x3 ^= d | ||
249 | xor %rbp,%rsi | ||
250 | # d = x15 + x3 | ||
251 | lea (%r15,%rsi),%rbp | ||
252 | # (uint32) d <<<= 9 | ||
253 | rol $9,%ebp | ||
254 | # x7 ^= d | ||
255 | xor %rbp,%r8 | ||
256 | # d = x3 + x7 | ||
257 | lea (%rsi,%r8),%rbp | ||
258 | # (uint32) d <<<= 13 | ||
259 | rol $13,%ebp | ||
260 | # x11 ^= d | ||
261 | xor %rbp,%r12 | ||
262 | # d = x7 + x11 | ||
263 | lea (%r8,%r12),%rbp | ||
264 | # (uint32) d <<<= 18 | ||
265 | rol $18,%ebp | ||
266 | # x15 ^= d | ||
267 | xor %rbp,%r15 | ||
268 | # x15_stack = x15 | ||
269 | movq %r15,176(%rsp) | ||
270 | # x5 = x5_stack | ||
271 | movq 160(%rsp),%r15 | ||
272 | # a = x3 + x0 | ||
273 | lea (%rsi,%rdx),%rbp | ||
274 | # (uint32) a <<<= 7 | ||
275 | rol $7,%ebp | ||
276 | # x1 ^= a | ||
277 | xor %rbp,%rdi | ||
278 | # b = x4 + x5 | ||
279 | lea (%r9,%r15),%rbp | ||
280 | # (uint32) b <<<= 7 | ||
281 | rol $7,%ebp | ||
282 | # x6 ^= b | ||
283 | xor %rbp,%rax | ||
284 | # a = x0 + x1 | ||
285 | lea (%rdx,%rdi),%rbp | ||
286 | # (uint32) a <<<= 9 | ||
287 | rol $9,%ebp | ||
288 | # x2 ^= a | ||
289 | xor %rbp,%rcx | ||
290 | # b = x5 + x6 | ||
291 | lea (%r15,%rax),%rbp | ||
292 | # (uint32) b <<<= 9 | ||
293 | rol $9,%ebp | ||
294 | # x7 ^= b | ||
295 | xor %rbp,%r8 | ||
296 | # a = x1 + x2 | ||
297 | lea (%rdi,%rcx),%rbp | ||
298 | # (uint32) a <<<= 13 | ||
299 | rol $13,%ebp | ||
300 | # x3 ^= a | ||
301 | xor %rbp,%rsi | ||
302 | # b = x6 + x7 | ||
303 | lea (%rax,%r8),%rbp | ||
304 | # (uint32) b <<<= 13 | ||
305 | rol $13,%ebp | ||
306 | # x4 ^= b | ||
307 | xor %rbp,%r9 | ||
308 | # a = x2 + x3 | ||
309 | lea (%rcx,%rsi),%rbp | ||
310 | # (uint32) a <<<= 18 | ||
311 | rol $18,%ebp | ||
312 | # x0 ^= a | ||
313 | xor %rbp,%rdx | ||
314 | # b = x7 + x4 | ||
315 | lea (%r8,%r9),%rbp | ||
316 | # (uint32) b <<<= 18 | ||
317 | rol $18,%ebp | ||
318 | # x5 ^= b | ||
319 | xor %rbp,%r15 | ||
320 | # x10 = x10_stack | ||
321 | movq 168(%rsp),%rbp | ||
322 | # x5_stack = x5 | ||
323 | movq %r15,160(%rsp) | ||
324 | # c = x9 + x10 | ||
325 | lea (%r10,%rbp),%r15 | ||
326 | # (uint32) c <<<= 7 | ||
327 | rol $7,%r15d | ||
328 | # x11 ^= c | ||
329 | xor %r15,%r12 | ||
330 | # c = x10 + x11 | ||
331 | lea (%rbp,%r12),%r15 | ||
332 | # (uint32) c <<<= 9 | ||
333 | rol $9,%r15d | ||
334 | # x8 ^= c | ||
335 | xor %r15,%r11 | ||
336 | # c = x11 + x8 | ||
337 | lea (%r12,%r11),%r15 | ||
338 | # (uint32) c <<<= 13 | ||
339 | rol $13,%r15d | ||
340 | # x9 ^= c | ||
341 | xor %r15,%r10 | ||
342 | # c = x8 + x9 | ||
343 | lea (%r11,%r10),%r15 | ||
344 | # (uint32) c <<<= 18 | ||
345 | rol $18,%r15d | ||
346 | # x10 ^= c | ||
347 | xor %r15,%rbp | ||
348 | # x15 = x15_stack | ||
349 | movq 176(%rsp),%r15 | ||
350 | # x10_stack = x10 | ||
351 | movq %rbp,168(%rsp) | ||
352 | # d = x14 + x15 | ||
353 | lea (%rbx,%r15),%rbp | ||
354 | # (uint32) d <<<= 7 | ||
355 | rol $7,%ebp | ||
356 | # x12 ^= d | ||
357 | xor %rbp,%r14 | ||
358 | # d = x15 + x12 | ||
359 | lea (%r15,%r14),%rbp | ||
360 | # (uint32) d <<<= 9 | ||
361 | rol $9,%ebp | ||
362 | # x13 ^= d | ||
363 | xor %rbp,%r13 | ||
364 | # d = x12 + x13 | ||
365 | lea (%r14,%r13),%rbp | ||
366 | # (uint32) d <<<= 13 | ||
367 | rol $13,%ebp | ||
368 | # x14 ^= d | ||
369 | xor %rbp,%rbx | ||
370 | # d = x13 + x14 | ||
371 | lea (%r13,%rbx),%rbp | ||
372 | # (uint32) d <<<= 18 | ||
373 | rol $18,%ebp | ||
374 | # x15 ^= d | ||
375 | xor %rbp,%r15 | ||
376 | # x15_stack = x15 | ||
377 | movq %r15,176(%rsp) | ||
378 | # x5 = x5_stack | ||
379 | movq 160(%rsp),%r15 | ||
380 | # a = x12 + x0 | ||
381 | lea (%r14,%rdx),%rbp | ||
382 | # (uint32) a <<<= 7 | ||
383 | rol $7,%ebp | ||
384 | # x4 ^= a | ||
385 | xor %rbp,%r9 | ||
386 | # b = x1 + x5 | ||
387 | lea (%rdi,%r15),%rbp | ||
388 | # (uint32) b <<<= 7 | ||
389 | rol $7,%ebp | ||
390 | # x9 ^= b | ||
391 | xor %rbp,%r10 | ||
392 | # a = x0 + x4 | ||
393 | lea (%rdx,%r9),%rbp | ||
394 | # (uint32) a <<<= 9 | ||
395 | rol $9,%ebp | ||
396 | # x8 ^= a | ||
397 | xor %rbp,%r11 | ||
398 | # b = x5 + x9 | ||
399 | lea (%r15,%r10),%rbp | ||
400 | # (uint32) b <<<= 9 | ||
401 | rol $9,%ebp | ||
402 | # x13 ^= b | ||
403 | xor %rbp,%r13 | ||
404 | # a = x4 + x8 | ||
405 | lea (%r9,%r11),%rbp | ||
406 | # (uint32) a <<<= 13 | ||
407 | rol $13,%ebp | ||
408 | # x12 ^= a | ||
409 | xor %rbp,%r14 | ||
410 | # b = x9 + x13 | ||
411 | lea (%r10,%r13),%rbp | ||
412 | # (uint32) b <<<= 13 | ||
413 | rol $13,%ebp | ||
414 | # x1 ^= b | ||
415 | xor %rbp,%rdi | ||
416 | # a = x8 + x12 | ||
417 | lea (%r11,%r14),%rbp | ||
418 | # (uint32) a <<<= 18 | ||
419 | rol $18,%ebp | ||
420 | # x0 ^= a | ||
421 | xor %rbp,%rdx | ||
422 | # b = x13 + x1 | ||
423 | lea (%r13,%rdi),%rbp | ||
424 | # (uint32) b <<<= 18 | ||
425 | rol $18,%ebp | ||
426 | # x5 ^= b | ||
427 | xor %rbp,%r15 | ||
428 | # x10 = x10_stack | ||
429 | movq 168(%rsp),%rbp | ||
430 | # x5_stack = x5 | ||
431 | movq %r15,160(%rsp) | ||
432 | # c = x6 + x10 | ||
433 | lea (%rax,%rbp),%r15 | ||
434 | # (uint32) c <<<= 7 | ||
435 | rol $7,%r15d | ||
436 | # x14 ^= c | ||
437 | xor %r15,%rbx | ||
438 | # c = x10 + x14 | ||
439 | lea (%rbp,%rbx),%r15 | ||
440 | # (uint32) c <<<= 9 | ||
441 | rol $9,%r15d | ||
442 | # x2 ^= c | ||
443 | xor %r15,%rcx | ||
444 | # c = x14 + x2 | ||
445 | lea (%rbx,%rcx),%r15 | ||
446 | # (uint32) c <<<= 13 | ||
447 | rol $13,%r15d | ||
448 | # x6 ^= c | ||
449 | xor %r15,%rax | ||
450 | # c = x2 + x6 | ||
451 | lea (%rcx,%rax),%r15 | ||
452 | # (uint32) c <<<= 18 | ||
453 | rol $18,%r15d | ||
454 | # x10 ^= c | ||
455 | xor %r15,%rbp | ||
456 | # x15 = x15_stack | ||
457 | movq 176(%rsp),%r15 | ||
458 | # x10_stack = x10 | ||
459 | movq %rbp,168(%rsp) | ||
460 | # d = x11 + x15 | ||
461 | lea (%r12,%r15),%rbp | ||
462 | # (uint32) d <<<= 7 | ||
463 | rol $7,%ebp | ||
464 | # x3 ^= d | ||
465 | xor %rbp,%rsi | ||
466 | # d = x15 + x3 | ||
467 | lea (%r15,%rsi),%rbp | ||
468 | # (uint32) d <<<= 9 | ||
469 | rol $9,%ebp | ||
470 | # x7 ^= d | ||
471 | xor %rbp,%r8 | ||
472 | # d = x3 + x7 | ||
473 | lea (%rsi,%r8),%rbp | ||
474 | # (uint32) d <<<= 13 | ||
475 | rol $13,%ebp | ||
476 | # x11 ^= d | ||
477 | xor %rbp,%r12 | ||
478 | # d = x7 + x11 | ||
479 | lea (%r8,%r12),%rbp | ||
480 | # (uint32) d <<<= 18 | ||
481 | rol $18,%ebp | ||
482 | # x15 ^= d | ||
483 | xor %rbp,%r15 | ||
484 | # x15_stack = x15 | ||
485 | movq %r15,176(%rsp) | ||
486 | # x5 = x5_stack | ||
487 | movq 160(%rsp),%r15 | ||
488 | # a = x3 + x0 | ||
489 | lea (%rsi,%rdx),%rbp | ||
490 | # (uint32) a <<<= 7 | ||
491 | rol $7,%ebp | ||
492 | # x1 ^= a | ||
493 | xor %rbp,%rdi | ||
494 | # b = x4 + x5 | ||
495 | lea (%r9,%r15),%rbp | ||
496 | # (uint32) b <<<= 7 | ||
497 | rol $7,%ebp | ||
498 | # x6 ^= b | ||
499 | xor %rbp,%rax | ||
500 | # a = x0 + x1 | ||
501 | lea (%rdx,%rdi),%rbp | ||
502 | # (uint32) a <<<= 9 | ||
503 | rol $9,%ebp | ||
504 | # x2 ^= a | ||
505 | xor %rbp,%rcx | ||
506 | # b = x5 + x6 | ||
507 | lea (%r15,%rax),%rbp | ||
508 | # (uint32) b <<<= 9 | ||
509 | rol $9,%ebp | ||
510 | # x7 ^= b | ||
511 | xor %rbp,%r8 | ||
512 | # a = x1 + x2 | ||
513 | lea (%rdi,%rcx),%rbp | ||
514 | # (uint32) a <<<= 13 | ||
515 | rol $13,%ebp | ||
516 | # x3 ^= a | ||
517 | xor %rbp,%rsi | ||
518 | # b = x6 + x7 | ||
519 | lea (%rax,%r8),%rbp | ||
520 | # (uint32) b <<<= 13 | ||
521 | rol $13,%ebp | ||
522 | # x4 ^= b | ||
523 | xor %rbp,%r9 | ||
524 | # a = x2 + x3 | ||
525 | lea (%rcx,%rsi),%rbp | ||
526 | # (uint32) a <<<= 18 | ||
527 | rol $18,%ebp | ||
528 | # x0 ^= a | ||
529 | xor %rbp,%rdx | ||
530 | # b = x7 + x4 | ||
531 | lea (%r8,%r9),%rbp | ||
532 | # (uint32) b <<<= 18 | ||
533 | rol $18,%ebp | ||
534 | # x5 ^= b | ||
535 | xor %rbp,%r15 | ||
536 | # x10 = x10_stack | ||
537 | movq 168(%rsp),%rbp | ||
538 | # x5_stack = x5 | ||
539 | movq %r15,160(%rsp) | ||
540 | # c = x9 + x10 | ||
541 | lea (%r10,%rbp),%r15 | ||
542 | # (uint32) c <<<= 7 | ||
543 | rol $7,%r15d | ||
544 | # x11 ^= c | ||
545 | xor %r15,%r12 | ||
546 | # c = x10 + x11 | ||
547 | lea (%rbp,%r12),%r15 | ||
548 | # (uint32) c <<<= 9 | ||
549 | rol $9,%r15d | ||
550 | # x8 ^= c | ||
551 | xor %r15,%r11 | ||
552 | # c = x11 + x8 | ||
553 | lea (%r12,%r11),%r15 | ||
554 | # (uint32) c <<<= 13 | ||
555 | rol $13,%r15d | ||
556 | # x9 ^= c | ||
557 | xor %r15,%r10 | ||
558 | # c = x8 + x9 | ||
559 | lea (%r11,%r10),%r15 | ||
560 | # (uint32) c <<<= 18 | ||
561 | rol $18,%r15d | ||
562 | # x10 ^= c | ||
563 | xor %r15,%rbp | ||
564 | # x15 = x15_stack | ||
565 | movq 176(%rsp),%r15 | ||
566 | # x10_stack = x10 | ||
567 | movq %rbp,168(%rsp) | ||
568 | # d = x14 + x15 | ||
569 | lea (%rbx,%r15),%rbp | ||
570 | # (uint32) d <<<= 7 | ||
571 | rol $7,%ebp | ||
572 | # x12 ^= d | ||
573 | xor %rbp,%r14 | ||
574 | # d = x15 + x12 | ||
575 | lea (%r15,%r14),%rbp | ||
576 | # (uint32) d <<<= 9 | ||
577 | rol $9,%ebp | ||
578 | # x13 ^= d | ||
579 | xor %rbp,%r13 | ||
580 | # d = x12 + x13 | ||
581 | lea (%r14,%r13),%rbp | ||
582 | # (uint32) d <<<= 13 | ||
583 | rol $13,%ebp | ||
584 | # x14 ^= d | ||
585 | xor %rbp,%rbx | ||
586 | # d = x13 + x14 | ||
587 | lea (%r13,%rbx),%rbp | ||
588 | # (uint32) d <<<= 18 | ||
589 | rol $18,%ebp | ||
590 | # x15 ^= d | ||
591 | xor %rbp,%r15 | ||
592 | # x15_stack = x15 | ||
593 | movq %r15,176(%rsp) | ||
594 | # i = i_backup | ||
595 | movq 184(%rsp),%r15 | ||
596 | # unsigned>? i -= 4 | ||
597 | sub $4,%r15 | ||
598 | # comment:fp stack unchanged by jump | ||
599 | # goto mainloop if unsigned> | ||
600 | ja ._mainloop | ||
601 | # (uint32) x2 += j2 | ||
602 | addl 64(%rsp),%ecx | ||
603 | # x3 <<= 32 | ||
604 | shl $32,%rsi | ||
605 | # x3 += j2 | ||
606 | addq 64(%rsp),%rsi | ||
607 | # (uint64) x3 >>= 32 | ||
608 | shr $32,%rsi | ||
609 | # x3 <<= 32 | ||
610 | shl $32,%rsi | ||
611 | # x2 += x3 | ||
612 | add %rsi,%rcx | ||
613 | # (uint32) x6 += j6 | ||
614 | addl 80(%rsp),%eax | ||
615 | # x7 <<= 32 | ||
616 | shl $32,%r8 | ||
617 | # x7 += j6 | ||
618 | addq 80(%rsp),%r8 | ||
619 | # (uint64) x7 >>= 32 | ||
620 | shr $32,%r8 | ||
621 | # x7 <<= 32 | ||
622 | shl $32,%r8 | ||
623 | # x6 += x7 | ||
624 | add %r8,%rax | ||
625 | # (uint32) x8 += j8 | ||
626 | addl 88(%rsp),%r11d | ||
627 | # x9 <<= 32 | ||
628 | shl $32,%r10 | ||
629 | # x9 += j8 | ||
630 | addq 88(%rsp),%r10 | ||
631 | # (uint64) x9 >>= 32 | ||
632 | shr $32,%r10 | ||
633 | # x9 <<= 32 | ||
634 | shl $32,%r10 | ||
635 | # x8 += x9 | ||
636 | add %r10,%r11 | ||
637 | # (uint32) x12 += j12 | ||
638 | addl 104(%rsp),%r14d | ||
639 | # x13 <<= 32 | ||
640 | shl $32,%r13 | ||
641 | # x13 += j12 | ||
642 | addq 104(%rsp),%r13 | ||
643 | # (uint64) x13 >>= 32 | ||
644 | shr $32,%r13 | ||
645 | # x13 <<= 32 | ||
646 | shl $32,%r13 | ||
647 | # x12 += x13 | ||
648 | add %r13,%r14 | ||
649 | # (uint32) x0 += j0 | ||
650 | addl 56(%rsp),%edx | ||
651 | # x1 <<= 32 | ||
652 | shl $32,%rdi | ||
653 | # x1 += j0 | ||
654 | addq 56(%rsp),%rdi | ||
655 | # (uint64) x1 >>= 32 | ||
656 | shr $32,%rdi | ||
657 | # x1 <<= 32 | ||
658 | shl $32,%rdi | ||
659 | # x0 += x1 | ||
660 | add %rdi,%rdx | ||
661 | # x5 = x5_stack | ||
662 | movq 160(%rsp),%rdi | ||
663 | # (uint32) x4 += j4 | ||
664 | addl 72(%rsp),%r9d | ||
665 | # x5 <<= 32 | ||
666 | shl $32,%rdi | ||
667 | # x5 += j4 | ||
668 | addq 72(%rsp),%rdi | ||
669 | # (uint64) x5 >>= 32 | ||
670 | shr $32,%rdi | ||
671 | # x5 <<= 32 | ||
672 | shl $32,%rdi | ||
673 | # x4 += x5 | ||
674 | add %rdi,%r9 | ||
675 | # x10 = x10_stack | ||
676 | movq 168(%rsp),%r8 | ||
677 | # (uint32) x10 += j10 | ||
678 | addl 96(%rsp),%r8d | ||
679 | # x11 <<= 32 | ||
680 | shl $32,%r12 | ||
681 | # x11 += j10 | ||
682 | addq 96(%rsp),%r12 | ||
683 | # (uint64) x11 >>= 32 | ||
684 | shr $32,%r12 | ||
685 | # x11 <<= 32 | ||
686 | shl $32,%r12 | ||
687 | # x10 += x11 | ||
688 | add %r12,%r8 | ||
689 | # x15 = x15_stack | ||
690 | movq 176(%rsp),%rdi | ||
691 | # (uint32) x14 += j14 | ||
692 | addl 112(%rsp),%ebx | ||
693 | # x15 <<= 32 | ||
694 | shl $32,%rdi | ||
695 | # x15 += j14 | ||
696 | addq 112(%rsp),%rdi | ||
697 | # (uint64) x15 >>= 32 | ||
698 | shr $32,%rdi | ||
699 | # x15 <<= 32 | ||
700 | shl $32,%rdi | ||
701 | # x14 += x15 | ||
702 | add %rdi,%rbx | ||
703 | # out = out_backup | ||
704 | movq 136(%rsp),%rdi | ||
705 | # m = m_backup | ||
706 | movq 144(%rsp),%rsi | ||
707 | # x0 ^= *(uint64 *) (m + 0) | ||
708 | xorq 0(%rsi),%rdx | ||
709 | # *(uint64 *) (out + 0) = x0 | ||
710 | movq %rdx,0(%rdi) | ||
711 | # x2 ^= *(uint64 *) (m + 8) | ||
712 | xorq 8(%rsi),%rcx | ||
713 | # *(uint64 *) (out + 8) = x2 | ||
714 | movq %rcx,8(%rdi) | ||
715 | # x4 ^= *(uint64 *) (m + 16) | ||
716 | xorq 16(%rsi),%r9 | ||
717 | # *(uint64 *) (out + 16) = x4 | ||
718 | movq %r9,16(%rdi) | ||
719 | # x6 ^= *(uint64 *) (m + 24) | ||
720 | xorq 24(%rsi),%rax | ||
721 | # *(uint64 *) (out + 24) = x6 | ||
722 | movq %rax,24(%rdi) | ||
723 | # x8 ^= *(uint64 *) (m + 32) | ||
724 | xorq 32(%rsi),%r11 | ||
725 | # *(uint64 *) (out + 32) = x8 | ||
726 | movq %r11,32(%rdi) | ||
727 | # x10 ^= *(uint64 *) (m + 40) | ||
728 | xorq 40(%rsi),%r8 | ||
729 | # *(uint64 *) (out + 40) = x10 | ||
730 | movq %r8,40(%rdi) | ||
731 | # x12 ^= *(uint64 *) (m + 48) | ||
732 | xorq 48(%rsi),%r14 | ||
733 | # *(uint64 *) (out + 48) = x12 | ||
734 | movq %r14,48(%rdi) | ||
735 | # x14 ^= *(uint64 *) (m + 56) | ||
736 | xorq 56(%rsi),%rbx | ||
737 | # *(uint64 *) (out + 56) = x14 | ||
738 | movq %rbx,56(%rdi) | ||
739 | # bytes = bytes_backup | ||
740 | movq 152(%rsp),%rdx | ||
741 | # in8 = j8 | ||
742 | movq 88(%rsp),%rcx | ||
743 | # in8 += 1 | ||
744 | add $1,%rcx | ||
745 | # j8 = in8 | ||
746 | movq %rcx,88(%rsp) | ||
747 | # unsigned>? unsigned<? bytes - 64 | ||
748 | cmp $64,%rdx | ||
749 | # comment:fp stack unchanged by jump | ||
750 | # goto bytesatleast65 if unsigned> | ||
751 | ja ._bytesatleast65 | ||
752 | # comment:fp stack unchanged by jump | ||
753 | # goto bytesatleast64 if !unsigned< | ||
754 | jae ._bytesatleast64 | ||
755 | # m = out | ||
756 | mov %rdi,%rsi | ||
757 | # out = ctarget | ||
758 | movq 128(%rsp),%rdi | ||
759 | # i = bytes | ||
760 | mov %rdx,%rcx | ||
761 | # while (i) { *out++ = *m++; --i } | ||
762 | rep movsb | ||
763 | # comment:fp stack unchanged by fallthrough | ||
764 | # bytesatleast64: | ||
765 | ._bytesatleast64: | ||
766 | # x = x_backup | ||
767 | movq 120(%rsp),%rdi | ||
768 | # in8 = j8 | ||
769 | movq 88(%rsp),%rsi | ||
770 | # *(uint64 *) (x + 32) = in8 | ||
771 | movq %rsi,32(%rdi) | ||
772 | # r11 = r11_stack | ||
773 | movq 0(%rsp),%r11 | ||
774 | # r12 = r12_stack | ||
775 | movq 8(%rsp),%r12 | ||
776 | # r13 = r13_stack | ||
777 | movq 16(%rsp),%r13 | ||
778 | # r14 = r14_stack | ||
779 | movq 24(%rsp),%r14 | ||
780 | # r15 = r15_stack | ||
781 | movq 32(%rsp),%r15 | ||
782 | # rbx = rbx_stack | ||
783 | movq 40(%rsp),%rbx | ||
784 | # rbp = rbp_stack | ||
785 | movq 48(%rsp),%rbp | ||
786 | # comment:fp stack unchanged by fallthrough | ||
787 | # done: | ||
788 | ._done: | ||
789 | # leave | ||
790 | add %r11,%rsp | ||
791 | mov %rdi,%rax | ||
792 | mov %rsi,%rdx | ||
793 | ret | ||
794 | # bytesatleast65: | ||
795 | ._bytesatleast65: | ||
796 | # bytes -= 64 | ||
797 | sub $64,%rdx | ||
798 | # out += 64 | ||
799 | add $64,%rdi | ||
800 | # m += 64 | ||
801 | add $64,%rsi | ||
802 | # comment:fp stack unchanged by jump | ||
803 | # goto bytesatleast1 | ||
804 | jmp ._bytesatleast1 | ||
805 | # enter ECRYPT_keysetup | ||
806 | .text | ||
807 | .p2align 5 | ||
808 | .globl ECRYPT_keysetup | ||
809 | ECRYPT_keysetup: | ||
810 | mov %rsp,%r11 | ||
811 | and $31,%r11 | ||
812 | add $256,%r11 | ||
813 | sub %r11,%rsp | ||
814 | # k = arg2 | ||
815 | mov %rsi,%rsi | ||
816 | # kbits = arg3 | ||
817 | mov %rdx,%rdx | ||
818 | # x = arg1 | ||
819 | mov %rdi,%rdi | ||
820 | # in0 = *(uint64 *) (k + 0) | ||
821 | movq 0(%rsi),%r8 | ||
822 | # in2 = *(uint64 *) (k + 8) | ||
823 | movq 8(%rsi),%r9 | ||
824 | # *(uint64 *) (x + 4) = in0 | ||
825 | movq %r8,4(%rdi) | ||
826 | # *(uint64 *) (x + 12) = in2 | ||
827 | movq %r9,12(%rdi) | ||
828 | # unsigned<? kbits - 256 | ||
829 | cmp $256,%rdx | ||
830 | # comment:fp stack unchanged by jump | ||
831 | # goto kbits128 if unsigned< | ||
832 | jb ._kbits128 | ||
833 | # kbits256: | ||
834 | ._kbits256: | ||
835 | # in10 = *(uint64 *) (k + 16) | ||
836 | movq 16(%rsi),%rdx | ||
837 | # in12 = *(uint64 *) (k + 24) | ||
838 | movq 24(%rsi),%rsi | ||
839 | # *(uint64 *) (x + 44) = in10 | ||
840 | movq %rdx,44(%rdi) | ||
841 | # *(uint64 *) (x + 52) = in12 | ||
842 | movq %rsi,52(%rdi) | ||
843 | # in0 = 1634760805 | ||
844 | mov $1634760805,%rsi | ||
845 | # in4 = 857760878 | ||
846 | mov $857760878,%rdx | ||
847 | # in10 = 2036477234 | ||
848 | mov $2036477234,%rcx | ||
849 | # in14 = 1797285236 | ||
850 | mov $1797285236,%r8 | ||
851 | # *(uint32 *) (x + 0) = in0 | ||
852 | movl %esi,0(%rdi) | ||
853 | # *(uint32 *) (x + 20) = in4 | ||
854 | movl %edx,20(%rdi) | ||
855 | # *(uint32 *) (x + 40) = in10 | ||
856 | movl %ecx,40(%rdi) | ||
857 | # *(uint32 *) (x + 60) = in14 | ||
858 | movl %r8d,60(%rdi) | ||
859 | # comment:fp stack unchanged by jump | ||
860 | # goto keysetupdone | ||
861 | jmp ._keysetupdone | ||
862 | # kbits128: | ||
863 | ._kbits128: | ||
864 | # in10 = *(uint64 *) (k + 0) | ||
865 | movq 0(%rsi),%rdx | ||
866 | # in12 = *(uint64 *) (k + 8) | ||
867 | movq 8(%rsi),%rsi | ||
868 | # *(uint64 *) (x + 44) = in10 | ||
869 | movq %rdx,44(%rdi) | ||
870 | # *(uint64 *) (x + 52) = in12 | ||
871 | movq %rsi,52(%rdi) | ||
872 | # in0 = 1634760805 | ||
873 | mov $1634760805,%rsi | ||
874 | # in4 = 824206446 | ||
875 | mov $824206446,%rdx | ||
876 | # in10 = 2036477238 | ||
877 | mov $2036477238,%rcx | ||
878 | # in14 = 1797285236 | ||
879 | mov $1797285236,%r8 | ||
880 | # *(uint32 *) (x + 0) = in0 | ||
881 | movl %esi,0(%rdi) | ||
882 | # *(uint32 *) (x + 20) = in4 | ||
883 | movl %edx,20(%rdi) | ||
884 | # *(uint32 *) (x + 40) = in10 | ||
885 | movl %ecx,40(%rdi) | ||
886 | # *(uint32 *) (x + 60) = in14 | ||
887 | movl %r8d,60(%rdi) | ||
888 | # keysetupdone: | ||
889 | ._keysetupdone: | ||
890 | # leave | ||
891 | add %r11,%rsp | ||
892 | mov %rdi,%rax | ||
893 | mov %rsi,%rdx | ||
894 | ret | ||
895 | # enter ECRYPT_ivsetup | ||
896 | .text | ||
897 | .p2align 5 | ||
898 | .globl ECRYPT_ivsetup | ||
899 | ECRYPT_ivsetup: | ||
900 | mov %rsp,%r11 | ||
901 | and $31,%r11 | ||
902 | add $256,%r11 | ||
903 | sub %r11,%rsp | ||
904 | # iv = arg2 | ||
905 | mov %rsi,%rsi | ||
906 | # x = arg1 | ||
907 | mov %rdi,%rdi | ||
908 | # in6 = *(uint64 *) (iv + 0) | ||
909 | movq 0(%rsi),%rsi | ||
910 | # in8 = 0 | ||
911 | mov $0,%r8 | ||
912 | # *(uint64 *) (x + 24) = in6 | ||
913 | movq %rsi,24(%rdi) | ||
914 | # *(uint64 *) (x + 32) = in8 | ||
915 | movq %r8,32(%rdi) | ||
916 | # leave | ||
917 | add %r11,%rsp | ||
918 | mov %rdi,%rax | ||
919 | mov %rsi,%rdx | ||
920 | ret | ||
diff --git a/arch/x86/crypto/salsa20_glue.c b/arch/x86/crypto/salsa20_glue.c new file mode 100644 index 000000000000..bccb76d80987 --- /dev/null +++ b/arch/x86/crypto/salsa20_glue.c | |||
@@ -0,0 +1,129 @@ | |||
1 | /* | ||
2 | * Glue code for optimized assembly version of Salsa20. | ||
3 | * | ||
4 | * Copyright (c) 2007 Tan Swee Heng <thesweeheng@gmail.com> | ||
5 | * | ||
6 | * The assembly codes are public domain assembly codes written by Daniel. J. | ||
7 | * Bernstein <djb@cr.yp.to>. The codes are modified to include indentation | ||
8 | * and to remove extraneous comments and functions that are not needed. | ||
9 | * - i586 version, renamed as salsa20-i586-asm_32.S | ||
10 | * available from <http://cr.yp.to/snuffle/salsa20/x86-pm/salsa20.s> | ||
11 | * - x86-64 version, renamed as salsa20-x86_64-asm_64.S | ||
12 | * available from <http://cr.yp.to/snuffle/salsa20/amd64-3/salsa20.s> | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify it | ||
15 | * under the terms of the GNU General Public License as published by the Free | ||
16 | * Software Foundation; either version 2 of the License, or (at your option) | ||
17 | * any later version. | ||
18 | * | ||
19 | */ | ||
20 | |||
21 | #include <crypto/algapi.h> | ||
22 | #include <linux/module.h> | ||
23 | #include <linux/crypto.h> | ||
24 | |||
25 | #define SALSA20_IV_SIZE 8U | ||
26 | #define SALSA20_MIN_KEY_SIZE 16U | ||
27 | #define SALSA20_MAX_KEY_SIZE 32U | ||
28 | |||
29 | // use the ECRYPT_* function names | ||
30 | #define salsa20_keysetup ECRYPT_keysetup | ||
31 | #define salsa20_ivsetup ECRYPT_ivsetup | ||
32 | #define salsa20_encrypt_bytes ECRYPT_encrypt_bytes | ||
33 | |||
34 | struct salsa20_ctx | ||
35 | { | ||
36 | u32 input[16]; | ||
37 | }; | ||
38 | |||
39 | asmlinkage void salsa20_keysetup(struct salsa20_ctx *ctx, const u8 *k, | ||
40 | u32 keysize, u32 ivsize); | ||
41 | asmlinkage void salsa20_ivsetup(struct salsa20_ctx *ctx, const u8 *iv); | ||
42 | asmlinkage void salsa20_encrypt_bytes(struct salsa20_ctx *ctx, | ||
43 | const u8 *src, u8 *dst, u32 bytes); | ||
44 | |||
45 | static int setkey(struct crypto_tfm *tfm, const u8 *key, | ||
46 | unsigned int keysize) | ||
47 | { | ||
48 | struct salsa20_ctx *ctx = crypto_tfm_ctx(tfm); | ||
49 | salsa20_keysetup(ctx, key, keysize*8, SALSA20_IV_SIZE*8); | ||
50 | return 0; | ||
51 | } | ||
52 | |||
53 | static int encrypt(struct blkcipher_desc *desc, | ||
54 | struct scatterlist *dst, struct scatterlist *src, | ||
55 | unsigned int nbytes) | ||
56 | { | ||
57 | struct blkcipher_walk walk; | ||
58 | struct crypto_blkcipher *tfm = desc->tfm; | ||
59 | struct salsa20_ctx *ctx = crypto_blkcipher_ctx(tfm); | ||
60 | int err; | ||
61 | |||
62 | blkcipher_walk_init(&walk, dst, src, nbytes); | ||
63 | err = blkcipher_walk_virt_block(desc, &walk, 64); | ||
64 | |||
65 | salsa20_ivsetup(ctx, walk.iv); | ||
66 | |||
67 | if (likely(walk.nbytes == nbytes)) | ||
68 | { | ||
69 | salsa20_encrypt_bytes(ctx, walk.src.virt.addr, | ||
70 | walk.dst.virt.addr, nbytes); | ||
71 | return blkcipher_walk_done(desc, &walk, 0); | ||
72 | } | ||
73 | |||
74 | while (walk.nbytes >= 64) { | ||
75 | salsa20_encrypt_bytes(ctx, walk.src.virt.addr, | ||
76 | walk.dst.virt.addr, | ||
77 | walk.nbytes - (walk.nbytes % 64)); | ||
78 | err = blkcipher_walk_done(desc, &walk, walk.nbytes % 64); | ||
79 | } | ||
80 | |||
81 | if (walk.nbytes) { | ||
82 | salsa20_encrypt_bytes(ctx, walk.src.virt.addr, | ||
83 | walk.dst.virt.addr, walk.nbytes); | ||
84 | err = blkcipher_walk_done(desc, &walk, 0); | ||
85 | } | ||
86 | |||
87 | return err; | ||
88 | } | ||
89 | |||
90 | static struct crypto_alg alg = { | ||
91 | .cra_name = "salsa20", | ||
92 | .cra_driver_name = "salsa20-asm", | ||
93 | .cra_priority = 200, | ||
94 | .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, | ||
95 | .cra_type = &crypto_blkcipher_type, | ||
96 | .cra_blocksize = 1, | ||
97 | .cra_ctxsize = sizeof(struct salsa20_ctx), | ||
98 | .cra_alignmask = 3, | ||
99 | .cra_module = THIS_MODULE, | ||
100 | .cra_list = LIST_HEAD_INIT(alg.cra_list), | ||
101 | .cra_u = { | ||
102 | .blkcipher = { | ||
103 | .setkey = setkey, | ||
104 | .encrypt = encrypt, | ||
105 | .decrypt = encrypt, | ||
106 | .min_keysize = SALSA20_MIN_KEY_SIZE, | ||
107 | .max_keysize = SALSA20_MAX_KEY_SIZE, | ||
108 | .ivsize = SALSA20_IV_SIZE, | ||
109 | } | ||
110 | } | ||
111 | }; | ||
112 | |||
113 | static int __init init(void) | ||
114 | { | ||
115 | return crypto_register_alg(&alg); | ||
116 | } | ||
117 | |||
118 | static void __exit fini(void) | ||
119 | { | ||
120 | crypto_unregister_alg(&alg); | ||
121 | } | ||
122 | |||
123 | module_init(init); | ||
124 | module_exit(fini); | ||
125 | |||
126 | MODULE_LICENSE("GPL"); | ||
127 | MODULE_DESCRIPTION ("Salsa20 stream cipher algorithm (optimized assembly version)"); | ||
128 | MODULE_ALIAS("salsa20"); | ||
129 | MODULE_ALIAS("salsa20-asm"); | ||
diff --git a/arch/x86/crypto/twofish_64.c b/arch/x86/crypto/twofish_64.c deleted file mode 100644 index 182d91d5cfb9..000000000000 --- a/arch/x86/crypto/twofish_64.c +++ /dev/null | |||
@@ -1,97 +0,0 @@ | |||
1 | /* | ||
2 | * Glue Code for optimized x86_64 assembler version of TWOFISH | ||
3 | * | ||
4 | * Originally Twofish for GPG | ||
5 | * By Matthew Skala <mskala@ansuz.sooke.bc.ca>, July 26, 1998 | ||
6 | * 256-bit key length added March 20, 1999 | ||
7 | * Some modifications to reduce the text size by Werner Koch, April, 1998 | ||
8 | * Ported to the kerneli patch by Marc Mutz <Marc@Mutz.com> | ||
9 | * Ported to CryptoAPI by Colin Slater <hoho@tacomeat.net> | ||
10 | * | ||
11 | * The original author has disclaimed all copyright interest in this | ||
12 | * code and thus put it in the public domain. The subsequent authors | ||
13 | * have put this under the GNU General Public License. | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or modify | ||
16 | * it under the terms of the GNU General Public License as published by | ||
17 | * the Free Software Foundation; either version 2 of the License, or | ||
18 | * (at your option) any later version. | ||
19 | * | ||
20 | * This program is distributed in the hope that it will be useful, | ||
21 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
22 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
23 | * GNU General Public License for more details. | ||
24 | * | ||
25 | * You should have received a copy of the GNU General Public License | ||
26 | * along with this program; if not, write to the Free Software | ||
27 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | ||
28 | * USA | ||
29 | * | ||
30 | * This code is a "clean room" implementation, written from the paper | ||
31 | * _Twofish: A 128-Bit Block Cipher_ by Bruce Schneier, John Kelsey, | ||
32 | * Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson, available | ||
33 | * through http://www.counterpane.com/twofish.html | ||
34 | * | ||
35 | * For background information on multiplication in finite fields, used for | ||
36 | * the matrix operations in the key schedule, see the book _Contemporary | ||
37 | * Abstract Algebra_ by Joseph A. Gallian, especially chapter 22 in the | ||
38 | * Third Edition. | ||
39 | */ | ||
40 | |||
41 | #include <crypto/twofish.h> | ||
42 | #include <linux/crypto.h> | ||
43 | #include <linux/init.h> | ||
44 | #include <linux/kernel.h> | ||
45 | #include <linux/module.h> | ||
46 | #include <linux/types.h> | ||
47 | |||
48 | asmlinkage void twofish_enc_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); | ||
49 | asmlinkage void twofish_dec_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); | ||
50 | |||
51 | static void twofish_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
52 | { | ||
53 | twofish_enc_blk(tfm, dst, src); | ||
54 | } | ||
55 | |||
56 | static void twofish_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | ||
57 | { | ||
58 | twofish_dec_blk(tfm, dst, src); | ||
59 | } | ||
60 | |||
61 | static struct crypto_alg alg = { | ||
62 | .cra_name = "twofish", | ||
63 | .cra_driver_name = "twofish-x86_64", | ||
64 | .cra_priority = 200, | ||
65 | .cra_flags = CRYPTO_ALG_TYPE_CIPHER, | ||
66 | .cra_blocksize = TF_BLOCK_SIZE, | ||
67 | .cra_ctxsize = sizeof(struct twofish_ctx), | ||
68 | .cra_alignmask = 3, | ||
69 | .cra_module = THIS_MODULE, | ||
70 | .cra_list = LIST_HEAD_INIT(alg.cra_list), | ||
71 | .cra_u = { | ||
72 | .cipher = { | ||
73 | .cia_min_keysize = TF_MIN_KEY_SIZE, | ||
74 | .cia_max_keysize = TF_MAX_KEY_SIZE, | ||
75 | .cia_setkey = twofish_setkey, | ||
76 | .cia_encrypt = twofish_encrypt, | ||
77 | .cia_decrypt = twofish_decrypt | ||
78 | } | ||
79 | } | ||
80 | }; | ||
81 | |||
82 | static int __init init(void) | ||
83 | { | ||
84 | return crypto_register_alg(&alg); | ||
85 | } | ||
86 | |||
87 | static void __exit fini(void) | ||
88 | { | ||
89 | crypto_unregister_alg(&alg); | ||
90 | } | ||
91 | |||
92 | module_init(init); | ||
93 | module_exit(fini); | ||
94 | |||
95 | MODULE_LICENSE("GPL"); | ||
96 | MODULE_DESCRIPTION ("Twofish Cipher Algorithm, x86_64 asm optimized"); | ||
97 | MODULE_ALIAS("twofish"); | ||
diff --git a/arch/x86/crypto/twofish_32.c b/arch/x86/crypto/twofish_glue.c index e3004dfe9c7a..cefaf8b9aa18 100644 --- a/arch/x86/crypto/twofish_32.c +++ b/arch/x86/crypto/twofish_glue.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Glue Code for optimized 586 assembler version of TWOFISH | 2 | * Glue Code for assembler optimized version of TWOFISH |
3 | * | 3 | * |
4 | * Originally Twofish for GPG | 4 | * Originally Twofish for GPG |
5 | * By Matthew Skala <mskala@ansuz.sooke.bc.ca>, July 26, 1998 | 5 | * By Matthew Skala <mskala@ansuz.sooke.bc.ca>, July 26, 1998 |
@@ -44,7 +44,6 @@ | |||
44 | #include <linux/module.h> | 44 | #include <linux/module.h> |
45 | #include <linux/types.h> | 45 | #include <linux/types.h> |
46 | 46 | ||
47 | |||
48 | asmlinkage void twofish_enc_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); | 47 | asmlinkage void twofish_enc_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); |
49 | asmlinkage void twofish_dec_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); | 48 | asmlinkage void twofish_dec_blk(struct crypto_tfm *tfm, u8 *dst, const u8 *src); |
50 | 49 | ||
@@ -60,7 +59,7 @@ static void twofish_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) | |||
60 | 59 | ||
61 | static struct crypto_alg alg = { | 60 | static struct crypto_alg alg = { |
62 | .cra_name = "twofish", | 61 | .cra_name = "twofish", |
63 | .cra_driver_name = "twofish-i586", | 62 | .cra_driver_name = "twofish-asm", |
64 | .cra_priority = 200, | 63 | .cra_priority = 200, |
65 | .cra_flags = CRYPTO_ALG_TYPE_CIPHER, | 64 | .cra_flags = CRYPTO_ALG_TYPE_CIPHER, |
66 | .cra_blocksize = TF_BLOCK_SIZE, | 65 | .cra_blocksize = TF_BLOCK_SIZE, |
@@ -93,5 +92,6 @@ module_init(init); | |||
93 | module_exit(fini); | 92 | module_exit(fini); |
94 | 93 | ||
95 | MODULE_LICENSE("GPL"); | 94 | MODULE_LICENSE("GPL"); |
96 | MODULE_DESCRIPTION ("Twofish Cipher Algorithm, i586 asm optimized"); | 95 | MODULE_DESCRIPTION ("Twofish Cipher Algorithm, asm optimized"); |
97 | MODULE_ALIAS("twofish"); | 96 | MODULE_ALIAS("twofish"); |
97 | MODULE_ALIAS("twofish-asm"); | ||
diff --git a/arch/x86/kernel/apic_32.c b/arch/x86/kernel/apic_32.c index edb5108e5d0e..a56c782653be 100644 --- a/arch/x86/kernel/apic_32.c +++ b/arch/x86/kernel/apic_32.c | |||
@@ -1530,7 +1530,7 @@ static int lapic_resume(struct sys_device *dev) | |||
1530 | */ | 1530 | */ |
1531 | 1531 | ||
1532 | static struct sysdev_class lapic_sysclass = { | 1532 | static struct sysdev_class lapic_sysclass = { |
1533 | set_kset_name("lapic"), | 1533 | .name = "lapic", |
1534 | .resume = lapic_resume, | 1534 | .resume = lapic_resume, |
1535 | .suspend = lapic_suspend, | 1535 | .suspend = lapic_suspend, |
1536 | }; | 1536 | }; |
diff --git a/arch/x86/kernel/apic_64.c b/arch/x86/kernel/apic_64.c index f28ccb588fba..fa6cdee6d303 100644 --- a/arch/x86/kernel/apic_64.c +++ b/arch/x86/kernel/apic_64.c | |||
@@ -639,7 +639,7 @@ static int lapic_resume(struct sys_device *dev) | |||
639 | } | 639 | } |
640 | 640 | ||
641 | static struct sysdev_class lapic_sysclass = { | 641 | static struct sysdev_class lapic_sysclass = { |
642 | set_kset_name("lapic"), | 642 | .name = "lapic", |
643 | .resume = lapic_resume, | 643 | .resume = lapic_resume, |
644 | .suspend = lapic_suspend, | 644 | .suspend = lapic_suspend, |
645 | }; | 645 | }; |
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c index 9f530ff43c21..8b4507b8469b 100644 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c +++ b/arch/x86/kernel/cpu/intel_cacheinfo.c | |||
@@ -733,10 +733,8 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev) | |||
733 | if (unlikely(retval < 0)) | 733 | if (unlikely(retval < 0)) |
734 | return retval; | 734 | return retval; |
735 | 735 | ||
736 | cache_kobject[cpu]->parent = &sys_dev->kobj; | 736 | retval = kobject_init_and_add(cache_kobject[cpu], &ktype_percpu_entry, |
737 | kobject_set_name(cache_kobject[cpu], "%s", "cache"); | 737 | &sys_dev->kobj, "%s", "cache"); |
738 | cache_kobject[cpu]->ktype = &ktype_percpu_entry; | ||
739 | retval = kobject_register(cache_kobject[cpu]); | ||
740 | if (retval < 0) { | 738 | if (retval < 0) { |
741 | cpuid4_cache_sysfs_exit(cpu); | 739 | cpuid4_cache_sysfs_exit(cpu); |
742 | return retval; | 740 | return retval; |
@@ -746,23 +744,23 @@ static int __cpuinit cache_add_dev(struct sys_device * sys_dev) | |||
746 | this_object = INDEX_KOBJECT_PTR(cpu,i); | 744 | this_object = INDEX_KOBJECT_PTR(cpu,i); |
747 | this_object->cpu = cpu; | 745 | this_object->cpu = cpu; |
748 | this_object->index = i; | 746 | this_object->index = i; |
749 | this_object->kobj.parent = cache_kobject[cpu]; | 747 | retval = kobject_init_and_add(&(this_object->kobj), |
750 | kobject_set_name(&(this_object->kobj), "index%1lu", i); | 748 | &ktype_cache, cache_kobject[cpu], |
751 | this_object->kobj.ktype = &ktype_cache; | 749 | "index%1lu", i); |
752 | retval = kobject_register(&(this_object->kobj)); | ||
753 | if (unlikely(retval)) { | 750 | if (unlikely(retval)) { |
754 | for (j = 0; j < i; j++) { | 751 | for (j = 0; j < i; j++) { |
755 | kobject_unregister( | 752 | kobject_put(&(INDEX_KOBJECT_PTR(cpu,j)->kobj)); |
756 | &(INDEX_KOBJECT_PTR(cpu,j)->kobj)); | ||
757 | } | 753 | } |
758 | kobject_unregister(cache_kobject[cpu]); | 754 | kobject_put(cache_kobject[cpu]); |
759 | cpuid4_cache_sysfs_exit(cpu); | 755 | cpuid4_cache_sysfs_exit(cpu); |
760 | break; | 756 | break; |
761 | } | 757 | } |
758 | kobject_uevent(&(this_object->kobj), KOBJ_ADD); | ||
762 | } | 759 | } |
763 | if (!retval) | 760 | if (!retval) |
764 | cpu_set(cpu, cache_dev_map); | 761 | cpu_set(cpu, cache_dev_map); |
765 | 762 | ||
763 | kobject_uevent(cache_kobject[cpu], KOBJ_ADD); | ||
766 | return retval; | 764 | return retval; |
767 | } | 765 | } |
768 | 766 | ||
@@ -778,8 +776,8 @@ static void __cpuinit cache_remove_dev(struct sys_device * sys_dev) | |||
778 | cpu_clear(cpu, cache_dev_map); | 776 | cpu_clear(cpu, cache_dev_map); |
779 | 777 | ||
780 | for (i = 0; i < num_cache_leaves; i++) | 778 | for (i = 0; i < num_cache_leaves; i++) |
781 | kobject_unregister(&(INDEX_KOBJECT_PTR(cpu,i)->kobj)); | 779 | kobject_put(&(INDEX_KOBJECT_PTR(cpu,i)->kobj)); |
782 | kobject_unregister(cache_kobject[cpu]); | 780 | kobject_put(cache_kobject[cpu]); |
783 | cpuid4_cache_sysfs_exit(cpu); | 781 | cpuid4_cache_sysfs_exit(cpu); |
784 | } | 782 | } |
785 | 783 | ||
diff --git a/arch/x86/kernel/cpu/mcheck/mce_64.c b/arch/x86/kernel/cpu/mcheck/mce_64.c index 4b21d29fb5aa..242e8668dbeb 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_64.c | |||
@@ -745,7 +745,7 @@ static void mce_restart(void) | |||
745 | 745 | ||
746 | static struct sysdev_class mce_sysclass = { | 746 | static struct sysdev_class mce_sysclass = { |
747 | .resume = mce_resume, | 747 | .resume = mce_resume, |
748 | set_kset_name("machinecheck"), | 748 | .name = "machinecheck", |
749 | }; | 749 | }; |
750 | 750 | ||
751 | DEFINE_PER_CPU(struct sys_device, device_mce); | 751 | DEFINE_PER_CPU(struct sys_device, device_mce); |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c index 752fb16a817d..753588755fee 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_amd_64.c +++ b/arch/x86/kernel/cpu/mcheck/mce_amd_64.c | |||
@@ -65,7 +65,7 @@ static struct threshold_block threshold_defaults = { | |||
65 | }; | 65 | }; |
66 | 66 | ||
67 | struct threshold_bank { | 67 | struct threshold_bank { |
68 | struct kobject kobj; | 68 | struct kobject *kobj; |
69 | struct threshold_block *blocks; | 69 | struct threshold_block *blocks; |
70 | cpumask_t cpus; | 70 | cpumask_t cpus; |
71 | }; | 71 | }; |
@@ -432,10 +432,9 @@ static __cpuinit int allocate_threshold_blocks(unsigned int cpu, | |||
432 | else | 432 | else |
433 | per_cpu(threshold_banks, cpu)[bank]->blocks = b; | 433 | per_cpu(threshold_banks, cpu)[bank]->blocks = b; |
434 | 434 | ||
435 | kobject_set_name(&b->kobj, "misc%i", block); | 435 | err = kobject_init_and_add(&b->kobj, &threshold_ktype, |
436 | b->kobj.parent = &per_cpu(threshold_banks, cpu)[bank]->kobj; | 436 | per_cpu(threshold_banks, cpu)[bank]->kobj, |
437 | b->kobj.ktype = &threshold_ktype; | 437 | "misc%i", block); |
438 | err = kobject_register(&b->kobj); | ||
439 | if (err) | 438 | if (err) |
440 | goto out_free; | 439 | goto out_free; |
441 | recurse: | 440 | recurse: |
@@ -451,11 +450,13 @@ recurse: | |||
451 | if (err) | 450 | if (err) |
452 | goto out_free; | 451 | goto out_free; |
453 | 452 | ||
453 | kobject_uevent(&b->kobj, KOBJ_ADD); | ||
454 | |||
454 | return err; | 455 | return err; |
455 | 456 | ||
456 | out_free: | 457 | out_free: |
457 | if (b) { | 458 | if (b) { |
458 | kobject_unregister(&b->kobj); | 459 | kobject_put(&b->kobj); |
459 | kfree(b); | 460 | kfree(b); |
460 | } | 461 | } |
461 | return err; | 462 | return err; |
@@ -489,7 +490,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) | |||
489 | goto out; | 490 | goto out; |
490 | 491 | ||
491 | err = sysfs_create_link(&per_cpu(device_mce, cpu).kobj, | 492 | err = sysfs_create_link(&per_cpu(device_mce, cpu).kobj, |
492 | &b->kobj, name); | 493 | b->kobj, name); |
493 | if (err) | 494 | if (err) |
494 | goto out; | 495 | goto out; |
495 | 496 | ||
@@ -505,16 +506,15 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) | |||
505 | goto out; | 506 | goto out; |
506 | } | 507 | } |
507 | 508 | ||
508 | kobject_set_name(&b->kobj, "threshold_bank%i", bank); | 509 | b->kobj = kobject_create_and_add(name, &per_cpu(device_mce, cpu).kobj); |
509 | b->kobj.parent = &per_cpu(device_mce, cpu).kobj; | 510 | if (!b->kobj) |
511 | goto out_free; | ||
512 | |||
510 | #ifndef CONFIG_SMP | 513 | #ifndef CONFIG_SMP |
511 | b->cpus = CPU_MASK_ALL; | 514 | b->cpus = CPU_MASK_ALL; |
512 | #else | 515 | #else |
513 | b->cpus = per_cpu(cpu_core_map, cpu); | 516 | b->cpus = per_cpu(cpu_core_map, cpu); |
514 | #endif | 517 | #endif |
515 | err = kobject_register(&b->kobj); | ||
516 | if (err) | ||
517 | goto out_free; | ||
518 | 518 | ||
519 | per_cpu(threshold_banks, cpu)[bank] = b; | 519 | per_cpu(threshold_banks, cpu)[bank] = b; |
520 | 520 | ||
@@ -531,7 +531,7 @@ static __cpuinit int threshold_create_bank(unsigned int cpu, unsigned int bank) | |||
531 | continue; | 531 | continue; |
532 | 532 | ||
533 | err = sysfs_create_link(&per_cpu(device_mce, i).kobj, | 533 | err = sysfs_create_link(&per_cpu(device_mce, i).kobj, |
534 | &b->kobj, name); | 534 | b->kobj, name); |
535 | if (err) | 535 | if (err) |
536 | goto out; | 536 | goto out; |
537 | 537 | ||
@@ -581,7 +581,7 @@ static void deallocate_threshold_block(unsigned int cpu, | |||
581 | return; | 581 | return; |
582 | 582 | ||
583 | list_for_each_entry_safe(pos, tmp, &head->blocks->miscj, miscj) { | 583 | list_for_each_entry_safe(pos, tmp, &head->blocks->miscj, miscj) { |
584 | kobject_unregister(&pos->kobj); | 584 | kobject_put(&pos->kobj); |
585 | list_del(&pos->miscj); | 585 | list_del(&pos->miscj); |
586 | kfree(pos); | 586 | kfree(pos); |
587 | } | 587 | } |
@@ -627,7 +627,7 @@ static void threshold_remove_bank(unsigned int cpu, int bank) | |||
627 | deallocate_threshold_block(cpu, bank); | 627 | deallocate_threshold_block(cpu, bank); |
628 | 628 | ||
629 | free_out: | 629 | free_out: |
630 | kobject_unregister(&b->kobj); | 630 | kobject_put(b->kobj); |
631 | kfree(b); | 631 | kfree(b); |
632 | per_cpu(threshold_banks, cpu)[bank] = NULL; | 632 | per_cpu(threshold_banks, cpu)[bank] = NULL; |
633 | } | 633 | } |
diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c index 05c9936a16cc..d387c770c518 100644 --- a/arch/x86/kernel/cpuid.c +++ b/arch/x86/kernel/cpuid.c | |||
@@ -157,15 +157,15 @@ static int __cpuinit cpuid_class_cpu_callback(struct notifier_block *nfb, | |||
157 | 157 | ||
158 | switch (action) { | 158 | switch (action) { |
159 | case CPU_UP_PREPARE: | 159 | case CPU_UP_PREPARE: |
160 | case CPU_UP_PREPARE_FROZEN: | ||
161 | err = cpuid_device_create(cpu); | 160 | err = cpuid_device_create(cpu); |
162 | break; | 161 | break; |
163 | case CPU_UP_CANCELED: | 162 | case CPU_UP_CANCELED: |
164 | case CPU_UP_CANCELED_FROZEN: | ||
165 | case CPU_DEAD: | 163 | case CPU_DEAD: |
166 | case CPU_DEAD_FROZEN: | ||
167 | cpuid_device_destroy(cpu); | 164 | cpuid_device_destroy(cpu); |
168 | break; | 165 | break; |
166 | case CPU_UP_CANCELED_FROZEN: | ||
167 | destroy_suspended_device(cpuid_class, MKDEV(CPUID_MAJOR, cpu)); | ||
168 | break; | ||
169 | } | 169 | } |
170 | return err ? NOTIFY_BAD : NOTIFY_OK; | 170 | return err ? NOTIFY_BAD : NOTIFY_OK; |
171 | } | 171 | } |
diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c index 29313832df0c..dbd6c1d1b638 100644 --- a/arch/x86/kernel/i8237.c +++ b/arch/x86/kernel/i8237.c | |||
@@ -51,7 +51,7 @@ static int i8237A_suspend(struct sys_device *dev, pm_message_t state) | |||
51 | } | 51 | } |
52 | 52 | ||
53 | static struct sysdev_class i8237_sysdev_class = { | 53 | static struct sysdev_class i8237_sysdev_class = { |
54 | set_kset_name("i8237"), | 54 | .name = "i8237", |
55 | .suspend = i8237A_suspend, | 55 | .suspend = i8237A_suspend, |
56 | .resume = i8237A_resume, | 56 | .resume = i8237A_resume, |
57 | }; | 57 | }; |
diff --git a/arch/x86/kernel/i8259_32.c b/arch/x86/kernel/i8259_32.c index f634fc715c99..5f3496d01984 100644 --- a/arch/x86/kernel/i8259_32.c +++ b/arch/x86/kernel/i8259_32.c | |||
@@ -258,7 +258,7 @@ static int i8259A_shutdown(struct sys_device *dev) | |||
258 | } | 258 | } |
259 | 259 | ||
260 | static struct sysdev_class i8259_sysdev_class = { | 260 | static struct sysdev_class i8259_sysdev_class = { |
261 | set_kset_name("i8259"), | 261 | .name = "i8259", |
262 | .suspend = i8259A_suspend, | 262 | .suspend = i8259A_suspend, |
263 | .resume = i8259A_resume, | 263 | .resume = i8259A_resume, |
264 | .shutdown = i8259A_shutdown, | 264 | .shutdown = i8259A_shutdown, |
diff --git a/arch/x86/kernel/i8259_64.c b/arch/x86/kernel/i8259_64.c index 3f27ea0b9816..ba6d57286f56 100644 --- a/arch/x86/kernel/i8259_64.c +++ b/arch/x86/kernel/i8259_64.c | |||
@@ -370,7 +370,7 @@ static int i8259A_shutdown(struct sys_device *dev) | |||
370 | } | 370 | } |
371 | 371 | ||
372 | static struct sysdev_class i8259_sysdev_class = { | 372 | static struct sysdev_class i8259_sysdev_class = { |
373 | set_kset_name("i8259"), | 373 | .name = "i8259", |
374 | .suspend = i8259A_suspend, | 374 | .suspend = i8259A_suspend, |
375 | .resume = i8259A_resume, | 375 | .resume = i8259A_resume, |
376 | .shutdown = i8259A_shutdown, | 376 | .shutdown = i8259A_shutdown, |
diff --git a/arch/x86/kernel/io_apic_32.c b/arch/x86/kernel/io_apic_32.c index a6b1490e00c4..ab77f1905469 100644 --- a/arch/x86/kernel/io_apic_32.c +++ b/arch/x86/kernel/io_apic_32.c | |||
@@ -2401,7 +2401,7 @@ static int ioapic_resume(struct sys_device *dev) | |||
2401 | } | 2401 | } |
2402 | 2402 | ||
2403 | static struct sysdev_class ioapic_sysdev_class = { | 2403 | static struct sysdev_class ioapic_sysdev_class = { |
2404 | set_kset_name("ioapic"), | 2404 | .name = "ioapic", |
2405 | .suspend = ioapic_suspend, | 2405 | .suspend = ioapic_suspend, |
2406 | .resume = ioapic_resume, | 2406 | .resume = ioapic_resume, |
2407 | }; | 2407 | }; |
diff --git a/arch/x86/kernel/io_apic_64.c b/arch/x86/kernel/io_apic_64.c index cbac1670c7c3..23a3ac06a23e 100644 --- a/arch/x86/kernel/io_apic_64.c +++ b/arch/x86/kernel/io_apic_64.c | |||
@@ -1850,7 +1850,7 @@ static int ioapic_resume(struct sys_device *dev) | |||
1850 | } | 1850 | } |
1851 | 1851 | ||
1852 | static struct sysdev_class ioapic_sysdev_class = { | 1852 | static struct sysdev_class ioapic_sysdev_class = { |
1853 | set_kset_name("ioapic"), | 1853 | .name = "ioapic", |
1854 | .suspend = ioapic_suspend, | 1854 | .suspend = ioapic_suspend, |
1855 | .resume = ioapic_resume, | 1855 | .resume = ioapic_resume, |
1856 | }; | 1856 | }; |
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index ee6eba4ecfea..21f6e3c0be18 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c | |||
@@ -155,15 +155,15 @@ static int __cpuinit msr_class_cpu_callback(struct notifier_block *nfb, | |||
155 | 155 | ||
156 | switch (action) { | 156 | switch (action) { |
157 | case CPU_UP_PREPARE: | 157 | case CPU_UP_PREPARE: |
158 | case CPU_UP_PREPARE_FROZEN: | ||
159 | err = msr_device_create(cpu); | 158 | err = msr_device_create(cpu); |
160 | break; | 159 | break; |
161 | case CPU_UP_CANCELED: | 160 | case CPU_UP_CANCELED: |
162 | case CPU_UP_CANCELED_FROZEN: | ||
163 | case CPU_DEAD: | 161 | case CPU_DEAD: |
164 | case CPU_DEAD_FROZEN: | ||
165 | msr_device_destroy(cpu); | 162 | msr_device_destroy(cpu); |
166 | break; | 163 | break; |
164 | case CPU_UP_CANCELED_FROZEN: | ||
165 | destroy_suspended_device(msr_class, MKDEV(MSR_MAJOR, cpu)); | ||
166 | break; | ||
167 | } | 167 | } |
168 | return err ? NOTIFY_BAD : NOTIFY_OK; | 168 | return err ? NOTIFY_BAD : NOTIFY_OK; |
169 | } | 169 | } |
diff --git a/arch/x86/kernel/nmi_32.c b/arch/x86/kernel/nmi_32.c index 852db2906921..4f4bfd3a88b6 100644 --- a/arch/x86/kernel/nmi_32.c +++ b/arch/x86/kernel/nmi_32.c | |||
@@ -176,7 +176,7 @@ static int lapic_nmi_resume(struct sys_device *dev) | |||
176 | 176 | ||
177 | 177 | ||
178 | static struct sysdev_class nmi_sysclass = { | 178 | static struct sysdev_class nmi_sysclass = { |
179 | set_kset_name("lapic_nmi"), | 179 | .name = "lapic_nmi", |
180 | .resume = lapic_nmi_resume, | 180 | .resume = lapic_nmi_resume, |
181 | .suspend = lapic_nmi_suspend, | 181 | .suspend = lapic_nmi_suspend, |
182 | }; | 182 | }; |
diff --git a/arch/x86/kernel/nmi_64.c b/arch/x86/kernel/nmi_64.c index 4253c4e8849c..c3d1476b6a11 100644 --- a/arch/x86/kernel/nmi_64.c +++ b/arch/x86/kernel/nmi_64.c | |||
@@ -211,7 +211,7 @@ static int lapic_nmi_resume(struct sys_device *dev) | |||
211 | } | 211 | } |
212 | 212 | ||
213 | static struct sysdev_class nmi_sysclass = { | 213 | static struct sysdev_class nmi_sysclass = { |
214 | set_kset_name("lapic_nmi"), | 214 | .name = "lapic_nmi", |
215 | .resume = lapic_nmi_resume, | 215 | .resume = lapic_nmi_resume, |
216 | .suspend = lapic_nmi_suspend, | 216 | .suspend = lapic_nmi_suspend, |
217 | }; | 217 | }; |
diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index 944bbcdd2b8d..c8ab79ef4276 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c | |||
@@ -51,7 +51,7 @@ static int nmi_resume(struct sys_device *dev) | |||
51 | 51 | ||
52 | 52 | ||
53 | static struct sysdev_class oprofile_sysclass = { | 53 | static struct sysdev_class oprofile_sysclass = { |
54 | set_kset_name("oprofile"), | 54 | .name = "oprofile", |
55 | .resume = nmi_resume, | 55 | .resume = nmi_resume, |
56 | .suspend = nmi_suspend, | 56 | .suspend = nmi_suspend, |
57 | }; | 57 | }; |