xref: /openbmc/linux/net/iucv/iucv.c (revision e4c0d0e2)
1 /*
2  * IUCV base infrastructure.
3  *
4  * Copyright IBM Corp. 2001, 2009
5  *
6  * Author(s):
7  *    Original source:
8  *	Alan Altmark (Alan_Altmark@us.ibm.com)	Sept. 2000
9  *	Xenia Tkatschow (xenia@us.ibm.com)
10  *    2Gb awareness and general cleanup:
11  *	Fritz Elfert (elfert@de.ibm.com, felfert@millenux.com)
12  *    Rewritten for af_iucv:
13  *	Martin Schwidefsky <schwidefsky@de.ibm.com>
14  *    PM functions:
15  *	Ursula Braun (ursula.braun@de.ibm.com)
16  *
17  * Documentation used:
18  *    The original source
19  *    CP Programming Service, IBM document # SC24-5760
20  *
21  * This program is free software; you can redistribute it and/or modify
22  * it under the terms of the GNU General Public License as published by
23  * the Free Software Foundation; either version 2, or (at your option)
24  * any later version.
25  *
26  * This program is distributed in the hope that it will be useful,
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
29  * GNU General Public License for more details.
30  *
31  * You should have received a copy of the GNU General Public License
32  * along with this program; if not, write to the Free Software
33  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
34  */
35 
36 #define KMSG_COMPONENT "iucv"
37 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
38 
39 #include <linux/kernel_stat.h>
40 #include <linux/module.h>
41 #include <linux/moduleparam.h>
42 #include <linux/spinlock.h>
43 #include <linux/kernel.h>
44 #include <linux/slab.h>
45 #include <linux/init.h>
46 #include <linux/interrupt.h>
47 #include <linux/list.h>
48 #include <linux/errno.h>
49 #include <linux/err.h>
50 #include <linux/device.h>
51 #include <linux/cpu.h>
52 #include <linux/reboot.h>
53 #include <net/iucv/iucv.h>
54 #include <asm/atomic.h>
55 #include <asm/ebcdic.h>
56 #include <asm/io.h>
57 #include <asm/irq.h>
58 #include <asm/smp.h>
59 
60 /*
61  * FLAGS:
62  * All flags are defined in the field IPFLAGS1 of each function
63  * and can be found in CP Programming Services.
64  * IPSRCCLS - Indicates you have specified a source class.
65  * IPTRGCLS - Indicates you have specified a target class.
66  * IPFGPID  - Indicates you have specified a pathid.
67  * IPFGMID  - Indicates you have specified a message ID.
68  * IPNORPY  - Indicates a one-way message. No reply expected.
69  * IPALL    - Indicates that all paths are affected.
70  */
71 #define IUCV_IPSRCCLS	0x01
72 #define IUCV_IPTRGCLS	0x01
73 #define IUCV_IPFGPID	0x02
74 #define IUCV_IPFGMID	0x04
75 #define IUCV_IPNORPY	0x10
76 #define IUCV_IPALL	0x80
77 
78 static int iucv_bus_match(struct device *dev, struct device_driver *drv)
79 {
80 	return 0;
81 }
82 
83 enum iucv_pm_states {
84 	IUCV_PM_INITIAL = 0,
85 	IUCV_PM_FREEZING = 1,
86 	IUCV_PM_THAWING = 2,
87 	IUCV_PM_RESTORING = 3,
88 };
89 static enum iucv_pm_states iucv_pm_state;
90 
91 static int iucv_pm_prepare(struct device *);
92 static void iucv_pm_complete(struct device *);
93 static int iucv_pm_freeze(struct device *);
94 static int iucv_pm_thaw(struct device *);
95 static int iucv_pm_restore(struct device *);
96 
97 static const struct dev_pm_ops iucv_pm_ops = {
98 	.prepare = iucv_pm_prepare,
99 	.complete = iucv_pm_complete,
100 	.freeze = iucv_pm_freeze,
101 	.thaw = iucv_pm_thaw,
102 	.restore = iucv_pm_restore,
103 };
104 
105 struct bus_type iucv_bus = {
106 	.name = "iucv",
107 	.match = iucv_bus_match,
108 	.pm = &iucv_pm_ops,
109 };
110 EXPORT_SYMBOL(iucv_bus);
111 
112 struct device *iucv_root;
113 EXPORT_SYMBOL(iucv_root);
114 
115 static int iucv_available;
116 
117 /* General IUCV interrupt structure */
118 struct iucv_irq_data {
119 	u16 ippathid;
120 	u8  ipflags1;
121 	u8  iptype;
122 	u32 res2[8];
123 };
124 
125 struct iucv_irq_list {
126 	struct list_head list;
127 	struct iucv_irq_data data;
128 };
129 
130 static struct iucv_irq_data *iucv_irq_data[NR_CPUS];
131 static cpumask_t iucv_buffer_cpumask = { CPU_BITS_NONE };
132 static cpumask_t iucv_irq_cpumask = { CPU_BITS_NONE };
133 
134 /*
135  * Queue of interrupt buffers lock for delivery via the tasklet
136  * (fast but can't call smp_call_function).
137  */
138 static LIST_HEAD(iucv_task_queue);
139 
140 /*
141  * The tasklet for fast delivery of iucv interrupts.
142  */
143 static void iucv_tasklet_fn(unsigned long);
144 static DECLARE_TASKLET(iucv_tasklet, iucv_tasklet_fn,0);
145 
146 /*
147  * Queue of interrupt buffers for delivery via a work queue
148  * (slower but can call smp_call_function).
149  */
150 static LIST_HEAD(iucv_work_queue);
151 
152 /*
153  * The work element to deliver path pending interrupts.
154  */
155 static void iucv_work_fn(struct work_struct *work);
156 static DECLARE_WORK(iucv_work, iucv_work_fn);
157 
158 /*
159  * Spinlock protecting task and work queue.
160  */
161 static DEFINE_SPINLOCK(iucv_queue_lock);
162 
163 enum iucv_command_codes {
164 	IUCV_QUERY = 0,
165 	IUCV_RETRIEVE_BUFFER = 2,
166 	IUCV_SEND = 4,
167 	IUCV_RECEIVE = 5,
168 	IUCV_REPLY = 6,
169 	IUCV_REJECT = 8,
170 	IUCV_PURGE = 9,
171 	IUCV_ACCEPT = 10,
172 	IUCV_CONNECT = 11,
173 	IUCV_DECLARE_BUFFER = 12,
174 	IUCV_QUIESCE = 13,
175 	IUCV_RESUME = 14,
176 	IUCV_SEVER = 15,
177 	IUCV_SETMASK = 16,
178 	IUCV_SETCONTROLMASK = 17,
179 };
180 
181 /*
182  * Error messages that are used with the iucv_sever function. They get
183  * converted to EBCDIC.
184  */
185 static char iucv_error_no_listener[16] = "NO LISTENER";
186 static char iucv_error_no_memory[16] = "NO MEMORY";
187 static char iucv_error_pathid[16] = "INVALID PATHID";
188 
189 /*
190  * iucv_handler_list: List of registered handlers.
191  */
192 static LIST_HEAD(iucv_handler_list);
193 
194 /*
195  * iucv_path_table: an array of iucv_path structures.
196  */
197 static struct iucv_path **iucv_path_table;
198 static unsigned long iucv_max_pathid;
199 
200 /*
201  * iucv_lock: spinlock protecting iucv_handler_list and iucv_pathid_table
202  */
203 static DEFINE_SPINLOCK(iucv_table_lock);
204 
205 /*
206  * iucv_active_cpu: contains the number of the cpu executing the tasklet
207  * or the work handler. Needed for iucv_path_sever called from tasklet.
208  */
209 static int iucv_active_cpu = -1;
210 
211 /*
212  * Mutex and wait queue for iucv_register/iucv_unregister.
213  */
214 static DEFINE_MUTEX(iucv_register_mutex);
215 
216 /*
217  * Counter for number of non-smp capable handlers.
218  */
219 static int iucv_nonsmp_handler;
220 
221 /*
222  * IUCV control data structure. Used by iucv_path_accept, iucv_path_connect,
223  * iucv_path_quiesce and iucv_path_sever.
224  */
225 struct iucv_cmd_control {
226 	u16 ippathid;
227 	u8  ipflags1;
228 	u8  iprcode;
229 	u16 ipmsglim;
230 	u16 res1;
231 	u8  ipvmid[8];
232 	u8  ipuser[16];
233 	u8  iptarget[8];
234 } __attribute__ ((packed,aligned(8)));
235 
236 /*
237  * Data in parameter list iucv structure. Used by iucv_message_send,
238  * iucv_message_send2way and iucv_message_reply.
239  */
240 struct iucv_cmd_dpl {
241 	u16 ippathid;
242 	u8  ipflags1;
243 	u8  iprcode;
244 	u32 ipmsgid;
245 	u32 iptrgcls;
246 	u8  iprmmsg[8];
247 	u32 ipsrccls;
248 	u32 ipmsgtag;
249 	u32 ipbfadr2;
250 	u32 ipbfln2f;
251 	u32 res;
252 } __attribute__ ((packed,aligned(8)));
253 
254 /*
255  * Data in buffer iucv structure. Used by iucv_message_receive,
256  * iucv_message_reject, iucv_message_send, iucv_message_send2way
257  * and iucv_declare_cpu.
258  */
259 struct iucv_cmd_db {
260 	u16 ippathid;
261 	u8  ipflags1;
262 	u8  iprcode;
263 	u32 ipmsgid;
264 	u32 iptrgcls;
265 	u32 ipbfadr1;
266 	u32 ipbfln1f;
267 	u32 ipsrccls;
268 	u32 ipmsgtag;
269 	u32 ipbfadr2;
270 	u32 ipbfln2f;
271 	u32 res;
272 } __attribute__ ((packed,aligned(8)));
273 
274 /*
275  * Purge message iucv structure. Used by iucv_message_purge.
276  */
277 struct iucv_cmd_purge {
278 	u16 ippathid;
279 	u8  ipflags1;
280 	u8  iprcode;
281 	u32 ipmsgid;
282 	u8  ipaudit[3];
283 	u8  res1[5];
284 	u32 res2;
285 	u32 ipsrccls;
286 	u32 ipmsgtag;
287 	u32 res3[3];
288 } __attribute__ ((packed,aligned(8)));
289 
290 /*
291  * Set mask iucv structure. Used by iucv_enable_cpu.
292  */
293 struct iucv_cmd_set_mask {
294 	u8  ipmask;
295 	u8  res1[2];
296 	u8  iprcode;
297 	u32 res2[9];
298 } __attribute__ ((packed,aligned(8)));
299 
300 union iucv_param {
301 	struct iucv_cmd_control ctrl;
302 	struct iucv_cmd_dpl dpl;
303 	struct iucv_cmd_db db;
304 	struct iucv_cmd_purge purge;
305 	struct iucv_cmd_set_mask set_mask;
306 };
307 
308 /*
309  * Anchor for per-cpu IUCV command parameter block.
310  */
311 static union iucv_param *iucv_param[NR_CPUS];
312 static union iucv_param *iucv_param_irq[NR_CPUS];
313 
314 /**
315  * iucv_call_b2f0
316  * @code: identifier of IUCV call to CP.
317  * @parm: pointer to a struct iucv_parm block
318  *
319  * Calls CP to execute IUCV commands.
320  *
321  * Returns the result of the CP IUCV call.
322  */
323 static inline int iucv_call_b2f0(int command, union iucv_param *parm)
324 {
325 	register unsigned long reg0 asm ("0");
326 	register unsigned long reg1 asm ("1");
327 	int ccode;
328 
329 	reg0 = command;
330 	reg1 = virt_to_phys(parm);
331 	asm volatile(
332 		"	.long 0xb2f01000\n"
333 		"	ipm	%0\n"
334 		"	srl	%0,28\n"
335 		: "=d" (ccode), "=m" (*parm), "+d" (reg0), "+a" (reg1)
336 		:  "m" (*parm) : "cc");
337 	return (ccode == 1) ? parm->ctrl.iprcode : ccode;
338 }
339 
340 /**
341  * iucv_query_maxconn
342  *
343  * Determines the maximum number of connections that may be established.
344  *
345  * Returns the maximum number of connections or -EPERM is IUCV is not
346  * available.
347  */
348 static int iucv_query_maxconn(void)
349 {
350 	register unsigned long reg0 asm ("0");
351 	register unsigned long reg1 asm ("1");
352 	void *param;
353 	int ccode;
354 
355 	param = kzalloc(sizeof(union iucv_param), GFP_KERNEL|GFP_DMA);
356 	if (!param)
357 		return -ENOMEM;
358 	reg0 = IUCV_QUERY;
359 	reg1 = (unsigned long) param;
360 	asm volatile (
361 		"	.long	0xb2f01000\n"
362 		"	ipm	%0\n"
363 		"	srl	%0,28\n"
364 		: "=d" (ccode), "+d" (reg0), "+d" (reg1) : : "cc");
365 	if (ccode == 0)
366 		iucv_max_pathid = reg1;
367 	kfree(param);
368 	return ccode ? -EPERM : 0;
369 }
370 
371 /**
372  * iucv_allow_cpu
373  * @data: unused
374  *
375  * Allow iucv interrupts on this cpu.
376  */
377 static void iucv_allow_cpu(void *data)
378 {
379 	int cpu = smp_processor_id();
380 	union iucv_param *parm;
381 
382 	/*
383 	 * Enable all iucv interrupts.
384 	 * ipmask contains bits for the different interrupts
385 	 *	0x80 - Flag to allow nonpriority message pending interrupts
386 	 *	0x40 - Flag to allow priority message pending interrupts
387 	 *	0x20 - Flag to allow nonpriority message completion interrupts
388 	 *	0x10 - Flag to allow priority message completion interrupts
389 	 *	0x08 - Flag to allow IUCV control interrupts
390 	 */
391 	parm = iucv_param_irq[cpu];
392 	memset(parm, 0, sizeof(union iucv_param));
393 	parm->set_mask.ipmask = 0xf8;
394 	iucv_call_b2f0(IUCV_SETMASK, parm);
395 
396 	/*
397 	 * Enable all iucv control interrupts.
398 	 * ipmask contains bits for the different interrupts
399 	 *	0x80 - Flag to allow pending connections interrupts
400 	 *	0x40 - Flag to allow connection complete interrupts
401 	 *	0x20 - Flag to allow connection severed interrupts
402 	 *	0x10 - Flag to allow connection quiesced interrupts
403 	 *	0x08 - Flag to allow connection resumed interrupts
404 	 */
405 	memset(parm, 0, sizeof(union iucv_param));
406 	parm->set_mask.ipmask = 0xf8;
407 	iucv_call_b2f0(IUCV_SETCONTROLMASK, parm);
408 	/* Set indication that iucv interrupts are allowed for this cpu. */
409 	cpumask_set_cpu(cpu, &iucv_irq_cpumask);
410 }
411 
412 /**
413  * iucv_block_cpu
414  * @data: unused
415  *
416  * Block iucv interrupts on this cpu.
417  */
418 static void iucv_block_cpu(void *data)
419 {
420 	int cpu = smp_processor_id();
421 	union iucv_param *parm;
422 
423 	/* Disable all iucv interrupts. */
424 	parm = iucv_param_irq[cpu];
425 	memset(parm, 0, sizeof(union iucv_param));
426 	iucv_call_b2f0(IUCV_SETMASK, parm);
427 
428 	/* Clear indication that iucv interrupts are allowed for this cpu. */
429 	cpumask_clear_cpu(cpu, &iucv_irq_cpumask);
430 }
431 
432 /**
433  * iucv_block_cpu_almost
434  * @data: unused
435  *
436  * Allow connection-severed interrupts only on this cpu.
437  */
438 static void iucv_block_cpu_almost(void *data)
439 {
440 	int cpu = smp_processor_id();
441 	union iucv_param *parm;
442 
443 	/* Allow iucv control interrupts only */
444 	parm = iucv_param_irq[cpu];
445 	memset(parm, 0, sizeof(union iucv_param));
446 	parm->set_mask.ipmask = 0x08;
447 	iucv_call_b2f0(IUCV_SETMASK, parm);
448 	/* Allow iucv-severed interrupt only */
449 	memset(parm, 0, sizeof(union iucv_param));
450 	parm->set_mask.ipmask = 0x20;
451 	iucv_call_b2f0(IUCV_SETCONTROLMASK, parm);
452 
453 	/* Clear indication that iucv interrupts are allowed for this cpu. */
454 	cpumask_clear_cpu(cpu, &iucv_irq_cpumask);
455 }
456 
457 /**
458  * iucv_declare_cpu
459  * @data: unused
460  *
461  * Declare a interrupt buffer on this cpu.
462  */
463 static void iucv_declare_cpu(void *data)
464 {
465 	int cpu = smp_processor_id();
466 	union iucv_param *parm;
467 	int rc;
468 
469 	if (cpumask_test_cpu(cpu, &iucv_buffer_cpumask))
470 		return;
471 
472 	/* Declare interrupt buffer. */
473 	parm = iucv_param_irq[cpu];
474 	memset(parm, 0, sizeof(union iucv_param));
475 	parm->db.ipbfadr1 = virt_to_phys(iucv_irq_data[cpu]);
476 	rc = iucv_call_b2f0(IUCV_DECLARE_BUFFER, parm);
477 	if (rc) {
478 		char *err = "Unknown";
479 		switch (rc) {
480 		case 0x03:
481 			err = "Directory error";
482 			break;
483 		case 0x0a:
484 			err = "Invalid length";
485 			break;
486 		case 0x13:
487 			err = "Buffer already exists";
488 			break;
489 		case 0x3e:
490 			err = "Buffer overlap";
491 			break;
492 		case 0x5c:
493 			err = "Paging or storage error";
494 			break;
495 		}
496 		pr_warning("Defining an interrupt buffer on CPU %i"
497 			   " failed with 0x%02x (%s)\n", cpu, rc, err);
498 		return;
499 	}
500 
501 	/* Set indication that an iucv buffer exists for this cpu. */
502 	cpumask_set_cpu(cpu, &iucv_buffer_cpumask);
503 
504 	if (iucv_nonsmp_handler == 0 || cpumask_empty(&iucv_irq_cpumask))
505 		/* Enable iucv interrupts on this cpu. */
506 		iucv_allow_cpu(NULL);
507 	else
508 		/* Disable iucv interrupts on this cpu. */
509 		iucv_block_cpu(NULL);
510 }
511 
512 /**
513  * iucv_retrieve_cpu
514  * @data: unused
515  *
516  * Retrieve interrupt buffer on this cpu.
517  */
518 static void iucv_retrieve_cpu(void *data)
519 {
520 	int cpu = smp_processor_id();
521 	union iucv_param *parm;
522 
523 	if (!cpumask_test_cpu(cpu, &iucv_buffer_cpumask))
524 		return;
525 
526 	/* Block iucv interrupts. */
527 	iucv_block_cpu(NULL);
528 
529 	/* Retrieve interrupt buffer. */
530 	parm = iucv_param_irq[cpu];
531 	iucv_call_b2f0(IUCV_RETRIEVE_BUFFER, parm);
532 
533 	/* Clear indication that an iucv buffer exists for this cpu. */
534 	cpumask_clear_cpu(cpu, &iucv_buffer_cpumask);
535 }
536 
537 /**
538  * iucv_setmask_smp
539  *
540  * Allow iucv interrupts on all cpus.
541  */
542 static void iucv_setmask_mp(void)
543 {
544 	int cpu;
545 
546 	get_online_cpus();
547 	for_each_online_cpu(cpu)
548 		/* Enable all cpus with a declared buffer. */
549 		if (cpumask_test_cpu(cpu, &iucv_buffer_cpumask) &&
550 		    !cpumask_test_cpu(cpu, &iucv_irq_cpumask))
551 			smp_call_function_single(cpu, iucv_allow_cpu,
552 						 NULL, 1);
553 	put_online_cpus();
554 }
555 
556 /**
557  * iucv_setmask_up
558  *
559  * Allow iucv interrupts on a single cpu.
560  */
561 static void iucv_setmask_up(void)
562 {
563 	cpumask_t cpumask;
564 	int cpu;
565 
566 	/* Disable all cpu but the first in cpu_irq_cpumask. */
567 	cpumask_copy(&cpumask, &iucv_irq_cpumask);
568 	cpumask_clear_cpu(cpumask_first(&iucv_irq_cpumask), &cpumask);
569 	for_each_cpu(cpu, &cpumask)
570 		smp_call_function_single(cpu, iucv_block_cpu, NULL, 1);
571 }
572 
573 /**
574  * iucv_enable
575  *
576  * This function makes iucv ready for use. It allocates the pathid
577  * table, declares an iucv interrupt buffer and enables the iucv
578  * interrupts. Called when the first user has registered an iucv
579  * handler.
580  */
581 static int iucv_enable(void)
582 {
583 	size_t alloc_size;
584 	int cpu, rc;
585 
586 	get_online_cpus();
587 	rc = -ENOMEM;
588 	alloc_size = iucv_max_pathid * sizeof(struct iucv_path);
589 	iucv_path_table = kzalloc(alloc_size, GFP_KERNEL);
590 	if (!iucv_path_table)
591 		goto out;
592 	/* Declare per cpu buffers. */
593 	rc = -EIO;
594 	for_each_online_cpu(cpu)
595 		smp_call_function_single(cpu, iucv_declare_cpu, NULL, 1);
596 	if (cpumask_empty(&iucv_buffer_cpumask))
597 		/* No cpu could declare an iucv buffer. */
598 		goto out;
599 	put_online_cpus();
600 	return 0;
601 out:
602 	kfree(iucv_path_table);
603 	iucv_path_table = NULL;
604 	put_online_cpus();
605 	return rc;
606 }
607 
608 /**
609  * iucv_disable
610  *
611  * This function shuts down iucv. It disables iucv interrupts, retrieves
612  * the iucv interrupt buffer and frees the pathid table. Called after the
613  * last user unregister its iucv handler.
614  */
615 static void iucv_disable(void)
616 {
617 	get_online_cpus();
618 	on_each_cpu(iucv_retrieve_cpu, NULL, 1);
619 	kfree(iucv_path_table);
620 	iucv_path_table = NULL;
621 	put_online_cpus();
622 }
623 
624 static int __cpuinit iucv_cpu_notify(struct notifier_block *self,
625 				     unsigned long action, void *hcpu)
626 {
627 	cpumask_t cpumask;
628 	long cpu = (long) hcpu;
629 
630 	switch (action) {
631 	case CPU_UP_PREPARE:
632 	case CPU_UP_PREPARE_FROZEN:
633 		iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
634 					GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
635 		if (!iucv_irq_data[cpu])
636 			return notifier_from_errno(-ENOMEM);
637 
638 		iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
639 				     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
640 		if (!iucv_param[cpu]) {
641 			kfree(iucv_irq_data[cpu]);
642 			iucv_irq_data[cpu] = NULL;
643 			return notifier_from_errno(-ENOMEM);
644 		}
645 		iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
646 					GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
647 		if (!iucv_param_irq[cpu]) {
648 			kfree(iucv_param[cpu]);
649 			iucv_param[cpu] = NULL;
650 			kfree(iucv_irq_data[cpu]);
651 			iucv_irq_data[cpu] = NULL;
652 			return notifier_from_errno(-ENOMEM);
653 		}
654 		break;
655 	case CPU_UP_CANCELED:
656 	case CPU_UP_CANCELED_FROZEN:
657 	case CPU_DEAD:
658 	case CPU_DEAD_FROZEN:
659 		kfree(iucv_param_irq[cpu]);
660 		iucv_param_irq[cpu] = NULL;
661 		kfree(iucv_param[cpu]);
662 		iucv_param[cpu] = NULL;
663 		kfree(iucv_irq_data[cpu]);
664 		iucv_irq_data[cpu] = NULL;
665 		break;
666 	case CPU_ONLINE:
667 	case CPU_ONLINE_FROZEN:
668 	case CPU_DOWN_FAILED:
669 	case CPU_DOWN_FAILED_FROZEN:
670 		if (!iucv_path_table)
671 			break;
672 		smp_call_function_single(cpu, iucv_declare_cpu, NULL, 1);
673 		break;
674 	case CPU_DOWN_PREPARE:
675 	case CPU_DOWN_PREPARE_FROZEN:
676 		if (!iucv_path_table)
677 			break;
678 		cpumask_copy(&cpumask, &iucv_buffer_cpumask);
679 		cpumask_clear_cpu(cpu, &cpumask);
680 		if (cpumask_empty(&cpumask))
681 			/* Can't offline last IUCV enabled cpu. */
682 			return notifier_from_errno(-EINVAL);
683 		smp_call_function_single(cpu, iucv_retrieve_cpu, NULL, 1);
684 		if (cpumask_empty(&iucv_irq_cpumask))
685 			smp_call_function_single(
686 				cpumask_first(&iucv_buffer_cpumask),
687 				iucv_allow_cpu, NULL, 1);
688 		break;
689 	}
690 	return NOTIFY_OK;
691 }
692 
693 static struct notifier_block __refdata iucv_cpu_notifier = {
694 	.notifier_call = iucv_cpu_notify,
695 };
696 
697 /**
698  * iucv_sever_pathid
699  * @pathid: path identification number.
700  * @userdata: 16-bytes of user data.
701  *
702  * Sever an iucv path to free up the pathid. Used internally.
703  */
704 static int iucv_sever_pathid(u16 pathid, u8 userdata[16])
705 {
706 	union iucv_param *parm;
707 
708 	parm = iucv_param_irq[smp_processor_id()];
709 	memset(parm, 0, sizeof(union iucv_param));
710 	if (userdata)
711 		memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
712 	parm->ctrl.ippathid = pathid;
713 	return iucv_call_b2f0(IUCV_SEVER, parm);
714 }
715 
716 /**
717  * __iucv_cleanup_queue
718  * @dummy: unused dummy argument
719  *
720  * Nop function called via smp_call_function to force work items from
721  * pending external iucv interrupts to the work queue.
722  */
723 static void __iucv_cleanup_queue(void *dummy)
724 {
725 }
726 
727 /**
728  * iucv_cleanup_queue
729  *
730  * Function called after a path has been severed to find all remaining
731  * work items for the now stale pathid. The caller needs to hold the
732  * iucv_table_lock.
733  */
734 static void iucv_cleanup_queue(void)
735 {
736 	struct iucv_irq_list *p, *n;
737 
738 	/*
739 	 * When a path is severed, the pathid can be reused immediately
740 	 * on a iucv connect or a connection pending interrupt. Remove
741 	 * all entries from the task queue that refer to a stale pathid
742 	 * (iucv_path_table[ix] == NULL). Only then do the iucv connect
743 	 * or deliver the connection pending interrupt. To get all the
744 	 * pending interrupts force them to the work queue by calling
745 	 * an empty function on all cpus.
746 	 */
747 	smp_call_function(__iucv_cleanup_queue, NULL, 1);
748 	spin_lock_irq(&iucv_queue_lock);
749 	list_for_each_entry_safe(p, n, &iucv_task_queue, list) {
750 		/* Remove stale work items from the task queue. */
751 		if (iucv_path_table[p->data.ippathid] == NULL) {
752 			list_del(&p->list);
753 			kfree(p);
754 		}
755 	}
756 	spin_unlock_irq(&iucv_queue_lock);
757 }
758 
759 /**
760  * iucv_register:
761  * @handler: address of iucv handler structure
762  * @smp: != 0 indicates that the handler can deal with out of order messages
763  *
764  * Registers a driver with IUCV.
765  *
766  * Returns 0 on success, -ENOMEM if the memory allocation for the pathid
767  * table failed, or -EIO if IUCV_DECLARE_BUFFER failed on all cpus.
768  */
769 int iucv_register(struct iucv_handler *handler, int smp)
770 {
771 	int rc;
772 
773 	if (!iucv_available)
774 		return -ENOSYS;
775 	mutex_lock(&iucv_register_mutex);
776 	if (!smp)
777 		iucv_nonsmp_handler++;
778 	if (list_empty(&iucv_handler_list)) {
779 		rc = iucv_enable();
780 		if (rc)
781 			goto out_mutex;
782 	} else if (!smp && iucv_nonsmp_handler == 1)
783 		iucv_setmask_up();
784 	INIT_LIST_HEAD(&handler->paths);
785 
786 	spin_lock_bh(&iucv_table_lock);
787 	list_add_tail(&handler->list, &iucv_handler_list);
788 	spin_unlock_bh(&iucv_table_lock);
789 	rc = 0;
790 out_mutex:
791 	mutex_unlock(&iucv_register_mutex);
792 	return rc;
793 }
794 EXPORT_SYMBOL(iucv_register);
795 
796 /**
797  * iucv_unregister
798  * @handler:  address of iucv handler structure
799  * @smp: != 0 indicates that the handler can deal with out of order messages
800  *
801  * Unregister driver from IUCV.
802  */
803 void iucv_unregister(struct iucv_handler *handler, int smp)
804 {
805 	struct iucv_path *p, *n;
806 
807 	mutex_lock(&iucv_register_mutex);
808 	spin_lock_bh(&iucv_table_lock);
809 	/* Remove handler from the iucv_handler_list. */
810 	list_del_init(&handler->list);
811 	/* Sever all pathids still referring to the handler. */
812 	list_for_each_entry_safe(p, n, &handler->paths, list) {
813 		iucv_sever_pathid(p->pathid, NULL);
814 		iucv_path_table[p->pathid] = NULL;
815 		list_del(&p->list);
816 		iucv_path_free(p);
817 	}
818 	spin_unlock_bh(&iucv_table_lock);
819 	if (!smp)
820 		iucv_nonsmp_handler--;
821 	if (list_empty(&iucv_handler_list))
822 		iucv_disable();
823 	else if (!smp && iucv_nonsmp_handler == 0)
824 		iucv_setmask_mp();
825 	mutex_unlock(&iucv_register_mutex);
826 }
827 EXPORT_SYMBOL(iucv_unregister);
828 
829 static int iucv_reboot_event(struct notifier_block *this,
830 			     unsigned long event, void *ptr)
831 {
832 	int i;
833 
834 	get_online_cpus();
835 	on_each_cpu(iucv_block_cpu, NULL, 1);
836 	preempt_disable();
837 	for (i = 0; i < iucv_max_pathid; i++) {
838 		if (iucv_path_table[i])
839 			iucv_sever_pathid(i, NULL);
840 	}
841 	preempt_enable();
842 	put_online_cpus();
843 	iucv_disable();
844 	return NOTIFY_DONE;
845 }
846 
847 static struct notifier_block iucv_reboot_notifier = {
848 	.notifier_call = iucv_reboot_event,
849 };
850 
851 /**
852  * iucv_path_accept
853  * @path: address of iucv path structure
854  * @handler: address of iucv handler structure
855  * @userdata: 16 bytes of data reflected to the communication partner
856  * @private: private data passed to interrupt handlers for this path
857  *
858  * This function is issued after the user received a connection pending
859  * external interrupt and now wishes to complete the IUCV communication path.
860  *
861  * Returns the result of the CP IUCV call.
862  */
863 int iucv_path_accept(struct iucv_path *path, struct iucv_handler *handler,
864 		     u8 userdata[16], void *private)
865 {
866 	union iucv_param *parm;
867 	int rc;
868 
869 	local_bh_disable();
870 	if (cpumask_empty(&iucv_buffer_cpumask)) {
871 		rc = -EIO;
872 		goto out;
873 	}
874 	/* Prepare parameter block. */
875 	parm = iucv_param[smp_processor_id()];
876 	memset(parm, 0, sizeof(union iucv_param));
877 	parm->ctrl.ippathid = path->pathid;
878 	parm->ctrl.ipmsglim = path->msglim;
879 	if (userdata)
880 		memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
881 	parm->ctrl.ipflags1 = path->flags;
882 
883 	rc = iucv_call_b2f0(IUCV_ACCEPT, parm);
884 	if (!rc) {
885 		path->private = private;
886 		path->msglim = parm->ctrl.ipmsglim;
887 		path->flags = parm->ctrl.ipflags1;
888 	}
889 out:
890 	local_bh_enable();
891 	return rc;
892 }
893 EXPORT_SYMBOL(iucv_path_accept);
894 
895 /**
896  * iucv_path_connect
897  * @path: address of iucv path structure
898  * @handler: address of iucv handler structure
899  * @userid: 8-byte user identification
900  * @system: 8-byte target system identification
901  * @userdata: 16 bytes of data reflected to the communication partner
902  * @private: private data passed to interrupt handlers for this path
903  *
904  * This function establishes an IUCV path. Although the connect may complete
905  * successfully, you are not able to use the path until you receive an IUCV
906  * Connection Complete external interrupt.
907  *
908  * Returns the result of the CP IUCV call.
909  */
910 int iucv_path_connect(struct iucv_path *path, struct iucv_handler *handler,
911 		      u8 userid[8], u8 system[8], u8 userdata[16],
912 		      void *private)
913 {
914 	union iucv_param *parm;
915 	int rc;
916 
917 	spin_lock_bh(&iucv_table_lock);
918 	iucv_cleanup_queue();
919 	if (cpumask_empty(&iucv_buffer_cpumask)) {
920 		rc = -EIO;
921 		goto out;
922 	}
923 	parm = iucv_param[smp_processor_id()];
924 	memset(parm, 0, sizeof(union iucv_param));
925 	parm->ctrl.ipmsglim = path->msglim;
926 	parm->ctrl.ipflags1 = path->flags;
927 	if (userid) {
928 		memcpy(parm->ctrl.ipvmid, userid, sizeof(parm->ctrl.ipvmid));
929 		ASCEBC(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid));
930 		EBC_TOUPPER(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid));
931 	}
932 	if (system) {
933 		memcpy(parm->ctrl.iptarget, system,
934 		       sizeof(parm->ctrl.iptarget));
935 		ASCEBC(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget));
936 		EBC_TOUPPER(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget));
937 	}
938 	if (userdata)
939 		memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
940 
941 	rc = iucv_call_b2f0(IUCV_CONNECT, parm);
942 	if (!rc) {
943 		if (parm->ctrl.ippathid < iucv_max_pathid) {
944 			path->pathid = parm->ctrl.ippathid;
945 			path->msglim = parm->ctrl.ipmsglim;
946 			path->flags = parm->ctrl.ipflags1;
947 			path->handler = handler;
948 			path->private = private;
949 			list_add_tail(&path->list, &handler->paths);
950 			iucv_path_table[path->pathid] = path;
951 		} else {
952 			iucv_sever_pathid(parm->ctrl.ippathid,
953 					  iucv_error_pathid);
954 			rc = -EIO;
955 		}
956 	}
957 out:
958 	spin_unlock_bh(&iucv_table_lock);
959 	return rc;
960 }
961 EXPORT_SYMBOL(iucv_path_connect);
962 
963 /**
964  * iucv_path_quiesce:
965  * @path: address of iucv path structure
966  * @userdata: 16 bytes of data reflected to the communication partner
967  *
968  * This function temporarily suspends incoming messages on an IUCV path.
969  * You can later reactivate the path by invoking the iucv_resume function.
970  *
971  * Returns the result from the CP IUCV call.
972  */
973 int iucv_path_quiesce(struct iucv_path *path, u8 userdata[16])
974 {
975 	union iucv_param *parm;
976 	int rc;
977 
978 	local_bh_disable();
979 	if (cpumask_empty(&iucv_buffer_cpumask)) {
980 		rc = -EIO;
981 		goto out;
982 	}
983 	parm = iucv_param[smp_processor_id()];
984 	memset(parm, 0, sizeof(union iucv_param));
985 	if (userdata)
986 		memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
987 	parm->ctrl.ippathid = path->pathid;
988 	rc = iucv_call_b2f0(IUCV_QUIESCE, parm);
989 out:
990 	local_bh_enable();
991 	return rc;
992 }
993 EXPORT_SYMBOL(iucv_path_quiesce);
994 
995 /**
996  * iucv_path_resume:
997  * @path: address of iucv path structure
998  * @userdata: 16 bytes of data reflected to the communication partner
999  *
1000  * This function resumes incoming messages on an IUCV path that has
1001  * been stopped with iucv_path_quiesce.
1002  *
1003  * Returns the result from the CP IUCV call.
1004  */
1005 int iucv_path_resume(struct iucv_path *path, u8 userdata[16])
1006 {
1007 	union iucv_param *parm;
1008 	int rc;
1009 
1010 	local_bh_disable();
1011 	if (cpumask_empty(&iucv_buffer_cpumask)) {
1012 		rc = -EIO;
1013 		goto out;
1014 	}
1015 	parm = iucv_param[smp_processor_id()];
1016 	memset(parm, 0, sizeof(union iucv_param));
1017 	if (userdata)
1018 		memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
1019 	parm->ctrl.ippathid = path->pathid;
1020 	rc = iucv_call_b2f0(IUCV_RESUME, parm);
1021 out:
1022 	local_bh_enable();
1023 	return rc;
1024 }
1025 
1026 /**
1027  * iucv_path_sever
1028  * @path: address of iucv path structure
1029  * @userdata: 16 bytes of data reflected to the communication partner
1030  *
1031  * This function terminates an IUCV path.
1032  *
1033  * Returns the result from the CP IUCV call.
1034  */
1035 int iucv_path_sever(struct iucv_path *path, u8 userdata[16])
1036 {
1037 	int rc;
1038 
1039 	preempt_disable();
1040 	if (cpumask_empty(&iucv_buffer_cpumask)) {
1041 		rc = -EIO;
1042 		goto out;
1043 	}
1044 	if (iucv_active_cpu != smp_processor_id())
1045 		spin_lock_bh(&iucv_table_lock);
1046 	rc = iucv_sever_pathid(path->pathid, userdata);
1047 	iucv_path_table[path->pathid] = NULL;
1048 	list_del_init(&path->list);
1049 	if (iucv_active_cpu != smp_processor_id())
1050 		spin_unlock_bh(&iucv_table_lock);
1051 out:
1052 	preempt_enable();
1053 	return rc;
1054 }
1055 EXPORT_SYMBOL(iucv_path_sever);
1056 
1057 /**
1058  * iucv_message_purge
1059  * @path: address of iucv path structure
1060  * @msg: address of iucv msg structure
1061  * @srccls: source class of message
1062  *
1063  * Cancels a message you have sent.
1064  *
1065  * Returns the result from the CP IUCV call.
1066  */
1067 int iucv_message_purge(struct iucv_path *path, struct iucv_message *msg,
1068 		       u32 srccls)
1069 {
1070 	union iucv_param *parm;
1071 	int rc;
1072 
1073 	local_bh_disable();
1074 	if (cpumask_empty(&iucv_buffer_cpumask)) {
1075 		rc = -EIO;
1076 		goto out;
1077 	}
1078 	parm = iucv_param[smp_processor_id()];
1079 	memset(parm, 0, sizeof(union iucv_param));
1080 	parm->purge.ippathid = path->pathid;
1081 	parm->purge.ipmsgid = msg->id;
1082 	parm->purge.ipsrccls = srccls;
1083 	parm->purge.ipflags1 = IUCV_IPSRCCLS | IUCV_IPFGMID | IUCV_IPFGPID;
1084 	rc = iucv_call_b2f0(IUCV_PURGE, parm);
1085 	if (!rc) {
1086 		msg->audit = (*(u32 *) &parm->purge.ipaudit) >> 8;
1087 		msg->tag = parm->purge.ipmsgtag;
1088 	}
1089 out:
1090 	local_bh_enable();
1091 	return rc;
1092 }
1093 EXPORT_SYMBOL(iucv_message_purge);
1094 
1095 /**
1096  * iucv_message_receive_iprmdata
1097  * @path: address of iucv path structure
1098  * @msg: address of iucv msg structure
1099  * @flags: how the message is received (IUCV_IPBUFLST)
1100  * @buffer: address of data buffer or address of struct iucv_array
1101  * @size: length of data buffer
1102  * @residual:
1103  *
1104  * Internal function used by iucv_message_receive and __iucv_message_receive
1105  * to receive RMDATA data stored in struct iucv_message.
1106  */
1107 static int iucv_message_receive_iprmdata(struct iucv_path *path,
1108 					 struct iucv_message *msg,
1109 					 u8 flags, void *buffer,
1110 					 size_t size, size_t *residual)
1111 {
1112 	struct iucv_array *array;
1113 	u8 *rmmsg;
1114 	size_t copy;
1115 
1116 	/*
1117 	 * Message is 8 bytes long and has been stored to the
1118 	 * message descriptor itself.
1119 	 */
1120 	if (residual)
1121 		*residual = abs(size - 8);
1122 	rmmsg = msg->rmmsg;
1123 	if (flags & IUCV_IPBUFLST) {
1124 		/* Copy to struct iucv_array. */
1125 		size = (size < 8) ? size : 8;
1126 		for (array = buffer; size > 0; array++) {
1127 			copy = min_t(size_t, size, array->length);
1128 			memcpy((u8 *)(addr_t) array->address,
1129 				rmmsg, copy);
1130 			rmmsg += copy;
1131 			size -= copy;
1132 		}
1133 	} else {
1134 		/* Copy to direct buffer. */
1135 		memcpy(buffer, rmmsg, min_t(size_t, size, 8));
1136 	}
1137 	return 0;
1138 }
1139 
1140 /**
1141  * __iucv_message_receive
1142  * @path: address of iucv path structure
1143  * @msg: address of iucv msg structure
1144  * @flags: how the message is received (IUCV_IPBUFLST)
1145  * @buffer: address of data buffer or address of struct iucv_array
1146  * @size: length of data buffer
1147  * @residual:
1148  *
1149  * This function receives messages that are being sent to you over
1150  * established paths. This function will deal with RMDATA messages
1151  * embedded in struct iucv_message as well.
1152  *
1153  * Locking:	no locking
1154  *
1155  * Returns the result from the CP IUCV call.
1156  */
1157 int __iucv_message_receive(struct iucv_path *path, struct iucv_message *msg,
1158 			   u8 flags, void *buffer, size_t size, size_t *residual)
1159 {
1160 	union iucv_param *parm;
1161 	int rc;
1162 
1163 	if (msg->flags & IUCV_IPRMDATA)
1164 		return iucv_message_receive_iprmdata(path, msg, flags,
1165 						     buffer, size, residual);
1166 	 if (cpumask_empty(&iucv_buffer_cpumask)) {
1167 		rc = -EIO;
1168 		goto out;
1169 	}
1170 	parm = iucv_param[smp_processor_id()];
1171 	memset(parm, 0, sizeof(union iucv_param));
1172 	parm->db.ipbfadr1 = (u32)(addr_t) buffer;
1173 	parm->db.ipbfln1f = (u32) size;
1174 	parm->db.ipmsgid = msg->id;
1175 	parm->db.ippathid = path->pathid;
1176 	parm->db.iptrgcls = msg->class;
1177 	parm->db.ipflags1 = (flags | IUCV_IPFGPID |
1178 			     IUCV_IPFGMID | IUCV_IPTRGCLS);
1179 	rc = iucv_call_b2f0(IUCV_RECEIVE, parm);
1180 	if (!rc || rc == 5) {
1181 		msg->flags = parm->db.ipflags1;
1182 		if (residual)
1183 			*residual = parm->db.ipbfln1f;
1184 	}
1185 out:
1186 	return rc;
1187 }
1188 EXPORT_SYMBOL(__iucv_message_receive);
1189 
1190 /**
1191  * iucv_message_receive
1192  * @path: address of iucv path structure
1193  * @msg: address of iucv msg structure
1194  * @flags: how the message is received (IUCV_IPBUFLST)
1195  * @buffer: address of data buffer or address of struct iucv_array
1196  * @size: length of data buffer
1197  * @residual:
1198  *
1199  * This function receives messages that are being sent to you over
1200  * established paths. This function will deal with RMDATA messages
1201  * embedded in struct iucv_message as well.
1202  *
1203  * Locking:	local_bh_enable/local_bh_disable
1204  *
1205  * Returns the result from the CP IUCV call.
1206  */
1207 int iucv_message_receive(struct iucv_path *path, struct iucv_message *msg,
1208 			 u8 flags, void *buffer, size_t size, size_t *residual)
1209 {
1210 	int rc;
1211 
1212 	if (msg->flags & IUCV_IPRMDATA)
1213 		return iucv_message_receive_iprmdata(path, msg, flags,
1214 						     buffer, size, residual);
1215 	local_bh_disable();
1216 	rc = __iucv_message_receive(path, msg, flags, buffer, size, residual);
1217 	local_bh_enable();
1218 	return rc;
1219 }
1220 EXPORT_SYMBOL(iucv_message_receive);
1221 
1222 /**
1223  * iucv_message_reject
1224  * @path: address of iucv path structure
1225  * @msg: address of iucv msg structure
1226  *
1227  * The reject function refuses a specified message. Between the time you
1228  * are notified of a message and the time that you complete the message,
1229  * the message may be rejected.
1230  *
1231  * Returns the result from the CP IUCV call.
1232  */
1233 int iucv_message_reject(struct iucv_path *path, struct iucv_message *msg)
1234 {
1235 	union iucv_param *parm;
1236 	int rc;
1237 
1238 	local_bh_disable();
1239 	if (cpumask_empty(&iucv_buffer_cpumask)) {
1240 		rc = -EIO;
1241 		goto out;
1242 	}
1243 	parm = iucv_param[smp_processor_id()];
1244 	memset(parm, 0, sizeof(union iucv_param));
1245 	parm->db.ippathid = path->pathid;
1246 	parm->db.ipmsgid = msg->id;
1247 	parm->db.iptrgcls = msg->class;
1248 	parm->db.ipflags1 = (IUCV_IPTRGCLS | IUCV_IPFGMID | IUCV_IPFGPID);
1249 	rc = iucv_call_b2f0(IUCV_REJECT, parm);
1250 out:
1251 	local_bh_enable();
1252 	return rc;
1253 }
1254 EXPORT_SYMBOL(iucv_message_reject);
1255 
1256 /**
1257  * iucv_message_reply
1258  * @path: address of iucv path structure
1259  * @msg: address of iucv msg structure
1260  * @flags: how the reply is sent (IUCV_IPRMDATA, IUCV_IPPRTY, IUCV_IPBUFLST)
1261  * @reply: address of reply data buffer or address of struct iucv_array
1262  * @size: length of reply data buffer
1263  *
1264  * This function responds to the two-way messages that you receive. You
1265  * must identify completely the message to which you wish to reply. ie,
1266  * pathid, msgid, and trgcls. Prmmsg signifies the data is moved into
1267  * the parameter list.
1268  *
1269  * Returns the result from the CP IUCV call.
1270  */
1271 int iucv_message_reply(struct iucv_path *path, struct iucv_message *msg,
1272 		       u8 flags, void *reply, size_t size)
1273 {
1274 	union iucv_param *parm;
1275 	int rc;
1276 
1277 	local_bh_disable();
1278 	if (cpumask_empty(&iucv_buffer_cpumask)) {
1279 		rc = -EIO;
1280 		goto out;
1281 	}
1282 	parm = iucv_param[smp_processor_id()];
1283 	memset(parm, 0, sizeof(union iucv_param));
1284 	if (flags & IUCV_IPRMDATA) {
1285 		parm->dpl.ippathid = path->pathid;
1286 		parm->dpl.ipflags1 = flags;
1287 		parm->dpl.ipmsgid = msg->id;
1288 		parm->dpl.iptrgcls = msg->class;
1289 		memcpy(parm->dpl.iprmmsg, reply, min_t(size_t, size, 8));
1290 	} else {
1291 		parm->db.ipbfadr1 = (u32)(addr_t) reply;
1292 		parm->db.ipbfln1f = (u32) size;
1293 		parm->db.ippathid = path->pathid;
1294 		parm->db.ipflags1 = flags;
1295 		parm->db.ipmsgid = msg->id;
1296 		parm->db.iptrgcls = msg->class;
1297 	}
1298 	rc = iucv_call_b2f0(IUCV_REPLY, parm);
1299 out:
1300 	local_bh_enable();
1301 	return rc;
1302 }
1303 EXPORT_SYMBOL(iucv_message_reply);
1304 
1305 /**
1306  * __iucv_message_send
1307  * @path: address of iucv path structure
1308  * @msg: address of iucv msg structure
1309  * @flags: how the message is sent (IUCV_IPRMDATA, IUCV_IPPRTY, IUCV_IPBUFLST)
1310  * @srccls: source class of message
1311  * @buffer: address of send buffer or address of struct iucv_array
1312  * @size: length of send buffer
1313  *
1314  * This function transmits data to another application. Data to be
1315  * transmitted is in a buffer and this is a one-way message and the
1316  * receiver will not reply to the message.
1317  *
1318  * Locking:	no locking
1319  *
1320  * Returns the result from the CP IUCV call.
1321  */
1322 int __iucv_message_send(struct iucv_path *path, struct iucv_message *msg,
1323 		      u8 flags, u32 srccls, void *buffer, size_t size)
1324 {
1325 	union iucv_param *parm;
1326 	int rc;
1327 
1328 	if (cpumask_empty(&iucv_buffer_cpumask)) {
1329 		rc = -EIO;
1330 		goto out;
1331 	}
1332 	parm = iucv_param[smp_processor_id()];
1333 	memset(parm, 0, sizeof(union iucv_param));
1334 	if (flags & IUCV_IPRMDATA) {
1335 		/* Message of 8 bytes can be placed into the parameter list. */
1336 		parm->dpl.ippathid = path->pathid;
1337 		parm->dpl.ipflags1 = flags | IUCV_IPNORPY;
1338 		parm->dpl.iptrgcls = msg->class;
1339 		parm->dpl.ipsrccls = srccls;
1340 		parm->dpl.ipmsgtag = msg->tag;
1341 		memcpy(parm->dpl.iprmmsg, buffer, 8);
1342 	} else {
1343 		parm->db.ipbfadr1 = (u32)(addr_t) buffer;
1344 		parm->db.ipbfln1f = (u32) size;
1345 		parm->db.ippathid = path->pathid;
1346 		parm->db.ipflags1 = flags | IUCV_IPNORPY;
1347 		parm->db.iptrgcls = msg->class;
1348 		parm->db.ipsrccls = srccls;
1349 		parm->db.ipmsgtag = msg->tag;
1350 	}
1351 	rc = iucv_call_b2f0(IUCV_SEND, parm);
1352 	if (!rc)
1353 		msg->id = parm->db.ipmsgid;
1354 out:
1355 	return rc;
1356 }
1357 EXPORT_SYMBOL(__iucv_message_send);
1358 
1359 /**
1360  * iucv_message_send
1361  * @path: address of iucv path structure
1362  * @msg: address of iucv msg structure
1363  * @flags: how the message is sent (IUCV_IPRMDATA, IUCV_IPPRTY, IUCV_IPBUFLST)
1364  * @srccls: source class of message
1365  * @buffer: address of send buffer or address of struct iucv_array
1366  * @size: length of send buffer
1367  *
1368  * This function transmits data to another application. Data to be
1369  * transmitted is in a buffer and this is a one-way message and the
1370  * receiver will not reply to the message.
1371  *
1372  * Locking:	local_bh_enable/local_bh_disable
1373  *
1374  * Returns the result from the CP IUCV call.
1375  */
1376 int iucv_message_send(struct iucv_path *path, struct iucv_message *msg,
1377 		      u8 flags, u32 srccls, void *buffer, size_t size)
1378 {
1379 	int rc;
1380 
1381 	local_bh_disable();
1382 	rc = __iucv_message_send(path, msg, flags, srccls, buffer, size);
1383 	local_bh_enable();
1384 	return rc;
1385 }
1386 EXPORT_SYMBOL(iucv_message_send);
1387 
1388 /**
1389  * iucv_message_send2way
1390  * @path: address of iucv path structure
1391  * @msg: address of iucv msg structure
1392  * @flags: how the message is sent and the reply is received
1393  *	   (IUCV_IPRMDATA, IUCV_IPBUFLST, IUCV_IPPRTY, IUCV_ANSLST)
1394  * @srccls: source class of message
1395  * @buffer: address of send buffer or address of struct iucv_array
1396  * @size: length of send buffer
1397  * @ansbuf: address of answer buffer or address of struct iucv_array
1398  * @asize: size of reply buffer
1399  *
1400  * This function transmits data to another application. Data to be
1401  * transmitted is in a buffer. The receiver of the send is expected to
1402  * reply to the message and a buffer is provided into which IUCV moves
1403  * the reply to this message.
1404  *
1405  * Returns the result from the CP IUCV call.
1406  */
1407 int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg,
1408 			  u8 flags, u32 srccls, void *buffer, size_t size,
1409 			  void *answer, size_t asize, size_t *residual)
1410 {
1411 	union iucv_param *parm;
1412 	int rc;
1413 
1414 	local_bh_disable();
1415 	if (cpumask_empty(&iucv_buffer_cpumask)) {
1416 		rc = -EIO;
1417 		goto out;
1418 	}
1419 	parm = iucv_param[smp_processor_id()];
1420 	memset(parm, 0, sizeof(union iucv_param));
1421 	if (flags & IUCV_IPRMDATA) {
1422 		parm->dpl.ippathid = path->pathid;
1423 		parm->dpl.ipflags1 = path->flags;	/* priority message */
1424 		parm->dpl.iptrgcls = msg->class;
1425 		parm->dpl.ipsrccls = srccls;
1426 		parm->dpl.ipmsgtag = msg->tag;
1427 		parm->dpl.ipbfadr2 = (u32)(addr_t) answer;
1428 		parm->dpl.ipbfln2f = (u32) asize;
1429 		memcpy(parm->dpl.iprmmsg, buffer, 8);
1430 	} else {
1431 		parm->db.ippathid = path->pathid;
1432 		parm->db.ipflags1 = path->flags;	/* priority message */
1433 		parm->db.iptrgcls = msg->class;
1434 		parm->db.ipsrccls = srccls;
1435 		parm->db.ipmsgtag = msg->tag;
1436 		parm->db.ipbfadr1 = (u32)(addr_t) buffer;
1437 		parm->db.ipbfln1f = (u32) size;
1438 		parm->db.ipbfadr2 = (u32)(addr_t) answer;
1439 		parm->db.ipbfln2f = (u32) asize;
1440 	}
1441 	rc = iucv_call_b2f0(IUCV_SEND, parm);
1442 	if (!rc)
1443 		msg->id = parm->db.ipmsgid;
1444 out:
1445 	local_bh_enable();
1446 	return rc;
1447 }
1448 EXPORT_SYMBOL(iucv_message_send2way);
1449 
1450 /**
1451  * iucv_path_pending
1452  * @data: Pointer to external interrupt buffer
1453  *
1454  * Process connection pending work item. Called from tasklet while holding
1455  * iucv_table_lock.
1456  */
1457 struct iucv_path_pending {
1458 	u16 ippathid;
1459 	u8  ipflags1;
1460 	u8  iptype;
1461 	u16 ipmsglim;
1462 	u16 res1;
1463 	u8  ipvmid[8];
1464 	u8  ipuser[16];
1465 	u32 res3;
1466 	u8  ippollfg;
1467 	u8  res4[3];
1468 } __packed;
1469 
1470 static void iucv_path_pending(struct iucv_irq_data *data)
1471 {
1472 	struct iucv_path_pending *ipp = (void *) data;
1473 	struct iucv_handler *handler;
1474 	struct iucv_path *path;
1475 	char *error;
1476 
1477 	BUG_ON(iucv_path_table[ipp->ippathid]);
1478 	/* New pathid, handler found. Create a new path struct. */
1479 	error = iucv_error_no_memory;
1480 	path = iucv_path_alloc(ipp->ipmsglim, ipp->ipflags1, GFP_ATOMIC);
1481 	if (!path)
1482 		goto out_sever;
1483 	path->pathid = ipp->ippathid;
1484 	iucv_path_table[path->pathid] = path;
1485 	EBCASC(ipp->ipvmid, 8);
1486 
1487 	/* Call registered handler until one is found that wants the path. */
1488 	list_for_each_entry(handler, &iucv_handler_list, list) {
1489 		if (!handler->path_pending)
1490 			continue;
1491 		/*
1492 		 * Add path to handler to allow a call to iucv_path_sever
1493 		 * inside the path_pending function. If the handler returns
1494 		 * an error remove the path from the handler again.
1495 		 */
1496 		list_add(&path->list, &handler->paths);
1497 		path->handler = handler;
1498 		if (!handler->path_pending(path, ipp->ipvmid, ipp->ipuser))
1499 			return;
1500 		list_del(&path->list);
1501 		path->handler = NULL;
1502 	}
1503 	/* No handler wanted the path. */
1504 	iucv_path_table[path->pathid] = NULL;
1505 	iucv_path_free(path);
1506 	error = iucv_error_no_listener;
1507 out_sever:
1508 	iucv_sever_pathid(ipp->ippathid, error);
1509 }
1510 
1511 /**
1512  * iucv_path_complete
1513  * @data: Pointer to external interrupt buffer
1514  *
1515  * Process connection complete work item. Called from tasklet while holding
1516  * iucv_table_lock.
1517  */
1518 struct iucv_path_complete {
1519 	u16 ippathid;
1520 	u8  ipflags1;
1521 	u8  iptype;
1522 	u16 ipmsglim;
1523 	u16 res1;
1524 	u8  res2[8];
1525 	u8  ipuser[16];
1526 	u32 res3;
1527 	u8  ippollfg;
1528 	u8  res4[3];
1529 } __packed;
1530 
1531 static void iucv_path_complete(struct iucv_irq_data *data)
1532 {
1533 	struct iucv_path_complete *ipc = (void *) data;
1534 	struct iucv_path *path = iucv_path_table[ipc->ippathid];
1535 
1536 	if (path)
1537 		path->flags = ipc->ipflags1;
1538 	if (path && path->handler && path->handler->path_complete)
1539 		path->handler->path_complete(path, ipc->ipuser);
1540 }
1541 
1542 /**
1543  * iucv_path_severed
1544  * @data: Pointer to external interrupt buffer
1545  *
1546  * Process connection severed work item. Called from tasklet while holding
1547  * iucv_table_lock.
1548  */
1549 struct iucv_path_severed {
1550 	u16 ippathid;
1551 	u8  res1;
1552 	u8  iptype;
1553 	u32 res2;
1554 	u8  res3[8];
1555 	u8  ipuser[16];
1556 	u32 res4;
1557 	u8  ippollfg;
1558 	u8  res5[3];
1559 } __packed;
1560 
1561 static void iucv_path_severed(struct iucv_irq_data *data)
1562 {
1563 	struct iucv_path_severed *ips = (void *) data;
1564 	struct iucv_path *path = iucv_path_table[ips->ippathid];
1565 
1566 	if (!path || !path->handler)	/* Already severed */
1567 		return;
1568 	if (path->handler->path_severed)
1569 		path->handler->path_severed(path, ips->ipuser);
1570 	else {
1571 		iucv_sever_pathid(path->pathid, NULL);
1572 		iucv_path_table[path->pathid] = NULL;
1573 		list_del(&path->list);
1574 		iucv_path_free(path);
1575 	}
1576 }
1577 
1578 /**
1579  * iucv_path_quiesced
1580  * @data: Pointer to external interrupt buffer
1581  *
1582  * Process connection quiesced work item. Called from tasklet while holding
1583  * iucv_table_lock.
1584  */
1585 struct iucv_path_quiesced {
1586 	u16 ippathid;
1587 	u8  res1;
1588 	u8  iptype;
1589 	u32 res2;
1590 	u8  res3[8];
1591 	u8  ipuser[16];
1592 	u32 res4;
1593 	u8  ippollfg;
1594 	u8  res5[3];
1595 } __packed;
1596 
1597 static void iucv_path_quiesced(struct iucv_irq_data *data)
1598 {
1599 	struct iucv_path_quiesced *ipq = (void *) data;
1600 	struct iucv_path *path = iucv_path_table[ipq->ippathid];
1601 
1602 	if (path && path->handler && path->handler->path_quiesced)
1603 		path->handler->path_quiesced(path, ipq->ipuser);
1604 }
1605 
1606 /**
1607  * iucv_path_resumed
1608  * @data: Pointer to external interrupt buffer
1609  *
1610  * Process connection resumed work item. Called from tasklet while holding
1611  * iucv_table_lock.
1612  */
1613 struct iucv_path_resumed {
1614 	u16 ippathid;
1615 	u8  res1;
1616 	u8  iptype;
1617 	u32 res2;
1618 	u8  res3[8];
1619 	u8  ipuser[16];
1620 	u32 res4;
1621 	u8  ippollfg;
1622 	u8  res5[3];
1623 } __packed;
1624 
1625 static void iucv_path_resumed(struct iucv_irq_data *data)
1626 {
1627 	struct iucv_path_resumed *ipr = (void *) data;
1628 	struct iucv_path *path = iucv_path_table[ipr->ippathid];
1629 
1630 	if (path && path->handler && path->handler->path_resumed)
1631 		path->handler->path_resumed(path, ipr->ipuser);
1632 }
1633 
1634 /**
1635  * iucv_message_complete
1636  * @data: Pointer to external interrupt buffer
1637  *
1638  * Process message complete work item. Called from tasklet while holding
1639  * iucv_table_lock.
1640  */
1641 struct iucv_message_complete {
1642 	u16 ippathid;
1643 	u8  ipflags1;
1644 	u8  iptype;
1645 	u32 ipmsgid;
1646 	u32 ipaudit;
1647 	u8  iprmmsg[8];
1648 	u32 ipsrccls;
1649 	u32 ipmsgtag;
1650 	u32 res;
1651 	u32 ipbfln2f;
1652 	u8  ippollfg;
1653 	u8  res2[3];
1654 } __packed;
1655 
1656 static void iucv_message_complete(struct iucv_irq_data *data)
1657 {
1658 	struct iucv_message_complete *imc = (void *) data;
1659 	struct iucv_path *path = iucv_path_table[imc->ippathid];
1660 	struct iucv_message msg;
1661 
1662 	if (path && path->handler && path->handler->message_complete) {
1663 		msg.flags = imc->ipflags1;
1664 		msg.id = imc->ipmsgid;
1665 		msg.audit = imc->ipaudit;
1666 		memcpy(msg.rmmsg, imc->iprmmsg, 8);
1667 		msg.class = imc->ipsrccls;
1668 		msg.tag = imc->ipmsgtag;
1669 		msg.length = imc->ipbfln2f;
1670 		path->handler->message_complete(path, &msg);
1671 	}
1672 }
1673 
1674 /**
1675  * iucv_message_pending
1676  * @data: Pointer to external interrupt buffer
1677  *
1678  * Process message pending work item. Called from tasklet while holding
1679  * iucv_table_lock.
1680  */
1681 struct iucv_message_pending {
1682 	u16 ippathid;
1683 	u8  ipflags1;
1684 	u8  iptype;
1685 	u32 ipmsgid;
1686 	u32 iptrgcls;
1687 	union {
1688 		u32 iprmmsg1_u32;
1689 		u8  iprmmsg1[4];
1690 	} ln1msg1;
1691 	union {
1692 		u32 ipbfln1f;
1693 		u8  iprmmsg2[4];
1694 	} ln1msg2;
1695 	u32 res1[3];
1696 	u32 ipbfln2f;
1697 	u8  ippollfg;
1698 	u8  res2[3];
1699 } __packed;
1700 
1701 static void iucv_message_pending(struct iucv_irq_data *data)
1702 {
1703 	struct iucv_message_pending *imp = (void *) data;
1704 	struct iucv_path *path = iucv_path_table[imp->ippathid];
1705 	struct iucv_message msg;
1706 
1707 	if (path && path->handler && path->handler->message_pending) {
1708 		msg.flags = imp->ipflags1;
1709 		msg.id = imp->ipmsgid;
1710 		msg.class = imp->iptrgcls;
1711 		if (imp->ipflags1 & IUCV_IPRMDATA) {
1712 			memcpy(msg.rmmsg, imp->ln1msg1.iprmmsg1, 8);
1713 			msg.length = 8;
1714 		} else
1715 			msg.length = imp->ln1msg2.ipbfln1f;
1716 		msg.reply_size = imp->ipbfln2f;
1717 		path->handler->message_pending(path, &msg);
1718 	}
1719 }
1720 
1721 /**
1722  * iucv_tasklet_fn:
1723  *
1724  * This tasklet loops over the queue of irq buffers created by
1725  * iucv_external_interrupt, calls the appropriate action handler
1726  * and then frees the buffer.
1727  */
1728 static void iucv_tasklet_fn(unsigned long ignored)
1729 {
1730 	typedef void iucv_irq_fn(struct iucv_irq_data *);
1731 	static iucv_irq_fn *irq_fn[] = {
1732 		[0x02] = iucv_path_complete,
1733 		[0x03] = iucv_path_severed,
1734 		[0x04] = iucv_path_quiesced,
1735 		[0x05] = iucv_path_resumed,
1736 		[0x06] = iucv_message_complete,
1737 		[0x07] = iucv_message_complete,
1738 		[0x08] = iucv_message_pending,
1739 		[0x09] = iucv_message_pending,
1740 	};
1741 	LIST_HEAD(task_queue);
1742 	struct iucv_irq_list *p, *n;
1743 
1744 	/* Serialize tasklet, iucv_path_sever and iucv_path_connect. */
1745 	if (!spin_trylock(&iucv_table_lock)) {
1746 		tasklet_schedule(&iucv_tasklet);
1747 		return;
1748 	}
1749 	iucv_active_cpu = smp_processor_id();
1750 
1751 	spin_lock_irq(&iucv_queue_lock);
1752 	list_splice_init(&iucv_task_queue, &task_queue);
1753 	spin_unlock_irq(&iucv_queue_lock);
1754 
1755 	list_for_each_entry_safe(p, n, &task_queue, list) {
1756 		list_del_init(&p->list);
1757 		irq_fn[p->data.iptype](&p->data);
1758 		kfree(p);
1759 	}
1760 
1761 	iucv_active_cpu = -1;
1762 	spin_unlock(&iucv_table_lock);
1763 }
1764 
1765 /**
1766  * iucv_work_fn:
1767  *
1768  * This work function loops over the queue of path pending irq blocks
1769  * created by iucv_external_interrupt, calls the appropriate action
1770  * handler and then frees the buffer.
1771  */
1772 static void iucv_work_fn(struct work_struct *work)
1773 {
1774 	LIST_HEAD(work_queue);
1775 	struct iucv_irq_list *p, *n;
1776 
1777 	/* Serialize tasklet, iucv_path_sever and iucv_path_connect. */
1778 	spin_lock_bh(&iucv_table_lock);
1779 	iucv_active_cpu = smp_processor_id();
1780 
1781 	spin_lock_irq(&iucv_queue_lock);
1782 	list_splice_init(&iucv_work_queue, &work_queue);
1783 	spin_unlock_irq(&iucv_queue_lock);
1784 
1785 	iucv_cleanup_queue();
1786 	list_for_each_entry_safe(p, n, &work_queue, list) {
1787 		list_del_init(&p->list);
1788 		iucv_path_pending(&p->data);
1789 		kfree(p);
1790 	}
1791 
1792 	iucv_active_cpu = -1;
1793 	spin_unlock_bh(&iucv_table_lock);
1794 }
1795 
1796 /**
1797  * iucv_external_interrupt
1798  * @code: irq code
1799  *
1800  * Handles external interrupts coming in from CP.
1801  * Places the interrupt buffer on a queue and schedules iucv_tasklet_fn().
1802  */
1803 static void iucv_external_interrupt(unsigned int ext_int_code,
1804 				    unsigned int param32, unsigned long param64)
1805 {
1806 	struct iucv_irq_data *p;
1807 	struct iucv_irq_list *work;
1808 
1809 	kstat_cpu(smp_processor_id()).irqs[EXTINT_IUC]++;
1810 	p = iucv_irq_data[smp_processor_id()];
1811 	if (p->ippathid >= iucv_max_pathid) {
1812 		WARN_ON(p->ippathid >= iucv_max_pathid);
1813 		iucv_sever_pathid(p->ippathid, iucv_error_no_listener);
1814 		return;
1815 	}
1816 	BUG_ON(p->iptype  < 0x01 || p->iptype > 0x09);
1817 	work = kmalloc(sizeof(struct iucv_irq_list), GFP_ATOMIC);
1818 	if (!work) {
1819 		pr_warning("iucv_external_interrupt: out of memory\n");
1820 		return;
1821 	}
1822 	memcpy(&work->data, p, sizeof(work->data));
1823 	spin_lock(&iucv_queue_lock);
1824 	if (p->iptype == 0x01) {
1825 		/* Path pending interrupt. */
1826 		list_add_tail(&work->list, &iucv_work_queue);
1827 		schedule_work(&iucv_work);
1828 	} else {
1829 		/* The other interrupts. */
1830 		list_add_tail(&work->list, &iucv_task_queue);
1831 		tasklet_schedule(&iucv_tasklet);
1832 	}
1833 	spin_unlock(&iucv_queue_lock);
1834 }
1835 
1836 static int iucv_pm_prepare(struct device *dev)
1837 {
1838 	int rc = 0;
1839 
1840 #ifdef CONFIG_PM_DEBUG
1841 	printk(KERN_INFO "iucv_pm_prepare\n");
1842 #endif
1843 	if (dev->driver && dev->driver->pm && dev->driver->pm->prepare)
1844 		rc = dev->driver->pm->prepare(dev);
1845 	return rc;
1846 }
1847 
1848 static void iucv_pm_complete(struct device *dev)
1849 {
1850 #ifdef CONFIG_PM_DEBUG
1851 	printk(KERN_INFO "iucv_pm_complete\n");
1852 #endif
1853 	if (dev->driver && dev->driver->pm && dev->driver->pm->complete)
1854 		dev->driver->pm->complete(dev);
1855 }
1856 
1857 /**
1858  * iucv_path_table_empty() - determine if iucv path table is empty
1859  *
1860  * Returns 0 if there are still iucv pathes defined
1861  *	   1 if there are no iucv pathes defined
1862  */
1863 int iucv_path_table_empty(void)
1864 {
1865 	int i;
1866 
1867 	for (i = 0; i < iucv_max_pathid; i++) {
1868 		if (iucv_path_table[i])
1869 			return 0;
1870 	}
1871 	return 1;
1872 }
1873 
1874 /**
1875  * iucv_pm_freeze() - Freeze PM callback
1876  * @dev:	iucv-based device
1877  *
1878  * disable iucv interrupts
1879  * invoke callback function of the iucv-based driver
1880  * shut down iucv, if no iucv-pathes are established anymore
1881  */
1882 static int iucv_pm_freeze(struct device *dev)
1883 {
1884 	int cpu;
1885 	struct iucv_irq_list *p, *n;
1886 	int rc = 0;
1887 
1888 #ifdef CONFIG_PM_DEBUG
1889 	printk(KERN_WARNING "iucv_pm_freeze\n");
1890 #endif
1891 	if (iucv_pm_state != IUCV_PM_FREEZING) {
1892 		for_each_cpu(cpu, &iucv_irq_cpumask)
1893 			smp_call_function_single(cpu, iucv_block_cpu_almost,
1894 						 NULL, 1);
1895 		cancel_work_sync(&iucv_work);
1896 		list_for_each_entry_safe(p, n, &iucv_work_queue, list) {
1897 			list_del_init(&p->list);
1898 			iucv_sever_pathid(p->data.ippathid,
1899 					  iucv_error_no_listener);
1900 			kfree(p);
1901 		}
1902 	}
1903 	iucv_pm_state = IUCV_PM_FREEZING;
1904 	if (dev->driver && dev->driver->pm && dev->driver->pm->freeze)
1905 		rc = dev->driver->pm->freeze(dev);
1906 	if (iucv_path_table_empty())
1907 		iucv_disable();
1908 	return rc;
1909 }
1910 
1911 /**
1912  * iucv_pm_thaw() - Thaw PM callback
1913  * @dev:	iucv-based device
1914  *
1915  * make iucv ready for use again: allocate path table, declare interrupt buffers
1916  *				  and enable iucv interrupts
1917  * invoke callback function of the iucv-based driver
1918  */
1919 static int iucv_pm_thaw(struct device *dev)
1920 {
1921 	int rc = 0;
1922 
1923 #ifdef CONFIG_PM_DEBUG
1924 	printk(KERN_WARNING "iucv_pm_thaw\n");
1925 #endif
1926 	iucv_pm_state = IUCV_PM_THAWING;
1927 	if (!iucv_path_table) {
1928 		rc = iucv_enable();
1929 		if (rc)
1930 			goto out;
1931 	}
1932 	if (cpumask_empty(&iucv_irq_cpumask)) {
1933 		if (iucv_nonsmp_handler)
1934 			/* enable interrupts on one cpu */
1935 			iucv_allow_cpu(NULL);
1936 		else
1937 			/* enable interrupts on all cpus */
1938 			iucv_setmask_mp();
1939 	}
1940 	if (dev->driver && dev->driver->pm && dev->driver->pm->thaw)
1941 		rc = dev->driver->pm->thaw(dev);
1942 out:
1943 	return rc;
1944 }
1945 
1946 /**
1947  * iucv_pm_restore() - Restore PM callback
1948  * @dev:	iucv-based device
1949  *
1950  * make iucv ready for use again: allocate path table, declare interrupt buffers
1951  *				  and enable iucv interrupts
1952  * invoke callback function of the iucv-based driver
1953  */
1954 static int iucv_pm_restore(struct device *dev)
1955 {
1956 	int rc = 0;
1957 
1958 #ifdef CONFIG_PM_DEBUG
1959 	printk(KERN_WARNING "iucv_pm_restore %p\n", iucv_path_table);
1960 #endif
1961 	if ((iucv_pm_state != IUCV_PM_RESTORING) && iucv_path_table)
1962 		pr_warning("Suspending Linux did not completely close all IUCV "
1963 			"connections\n");
1964 	iucv_pm_state = IUCV_PM_RESTORING;
1965 	if (cpumask_empty(&iucv_irq_cpumask)) {
1966 		rc = iucv_query_maxconn();
1967 		rc = iucv_enable();
1968 		if (rc)
1969 			goto out;
1970 	}
1971 	if (dev->driver && dev->driver->pm && dev->driver->pm->restore)
1972 		rc = dev->driver->pm->restore(dev);
1973 out:
1974 	return rc;
1975 }
1976 
1977 /**
1978  * iucv_init
1979  *
1980  * Allocates and initializes various data structures.
1981  */
1982 static int __init iucv_init(void)
1983 {
1984 	int rc;
1985 	int cpu;
1986 
1987 	if (!MACHINE_IS_VM) {
1988 		rc = -EPROTONOSUPPORT;
1989 		goto out;
1990 	}
1991 	rc = iucv_query_maxconn();
1992 	if (rc)
1993 		goto out;
1994 	rc = register_external_interrupt(0x4000, iucv_external_interrupt);
1995 	if (rc)
1996 		goto out;
1997 	iucv_root = root_device_register("iucv");
1998 	if (IS_ERR(iucv_root)) {
1999 		rc = PTR_ERR(iucv_root);
2000 		goto out_int;
2001 	}
2002 
2003 	for_each_online_cpu(cpu) {
2004 		/* Note: GFP_DMA used to get memory below 2G */
2005 		iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
2006 				     GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
2007 		if (!iucv_irq_data[cpu]) {
2008 			rc = -ENOMEM;
2009 			goto out_free;
2010 		}
2011 
2012 		/* Allocate parameter blocks. */
2013 		iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
2014 				  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
2015 		if (!iucv_param[cpu]) {
2016 			rc = -ENOMEM;
2017 			goto out_free;
2018 		}
2019 		iucv_param_irq[cpu] = kmalloc_node(sizeof(union iucv_param),
2020 				  GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
2021 		if (!iucv_param_irq[cpu]) {
2022 			rc = -ENOMEM;
2023 			goto out_free;
2024 		}
2025 
2026 	}
2027 	rc = register_hotcpu_notifier(&iucv_cpu_notifier);
2028 	if (rc)
2029 		goto out_free;
2030 	rc = register_reboot_notifier(&iucv_reboot_notifier);
2031 	if (rc)
2032 		goto out_cpu;
2033 	ASCEBC(iucv_error_no_listener, 16);
2034 	ASCEBC(iucv_error_no_memory, 16);
2035 	ASCEBC(iucv_error_pathid, 16);
2036 	iucv_available = 1;
2037 	rc = bus_register(&iucv_bus);
2038 	if (rc)
2039 		goto out_reboot;
2040 	return 0;
2041 
2042 out_reboot:
2043 	unregister_reboot_notifier(&iucv_reboot_notifier);
2044 out_cpu:
2045 	unregister_hotcpu_notifier(&iucv_cpu_notifier);
2046 out_free:
2047 	for_each_possible_cpu(cpu) {
2048 		kfree(iucv_param_irq[cpu]);
2049 		iucv_param_irq[cpu] = NULL;
2050 		kfree(iucv_param[cpu]);
2051 		iucv_param[cpu] = NULL;
2052 		kfree(iucv_irq_data[cpu]);
2053 		iucv_irq_data[cpu] = NULL;
2054 	}
2055 	root_device_unregister(iucv_root);
2056 out_int:
2057 	unregister_external_interrupt(0x4000, iucv_external_interrupt);
2058 out:
2059 	return rc;
2060 }
2061 
2062 /**
2063  * iucv_exit
2064  *
2065  * Frees everything allocated from iucv_init.
2066  */
2067 static void __exit iucv_exit(void)
2068 {
2069 	struct iucv_irq_list *p, *n;
2070 	int cpu;
2071 
2072 	spin_lock_irq(&iucv_queue_lock);
2073 	list_for_each_entry_safe(p, n, &iucv_task_queue, list)
2074 		kfree(p);
2075 	list_for_each_entry_safe(p, n, &iucv_work_queue, list)
2076 		kfree(p);
2077 	spin_unlock_irq(&iucv_queue_lock);
2078 	unregister_reboot_notifier(&iucv_reboot_notifier);
2079 	unregister_hotcpu_notifier(&iucv_cpu_notifier);
2080 	for_each_possible_cpu(cpu) {
2081 		kfree(iucv_param_irq[cpu]);
2082 		iucv_param_irq[cpu] = NULL;
2083 		kfree(iucv_param[cpu]);
2084 		iucv_param[cpu] = NULL;
2085 		kfree(iucv_irq_data[cpu]);
2086 		iucv_irq_data[cpu] = NULL;
2087 	}
2088 	root_device_unregister(iucv_root);
2089 	bus_unregister(&iucv_bus);
2090 	unregister_external_interrupt(0x4000, iucv_external_interrupt);
2091 }
2092 
2093 subsys_initcall(iucv_init);
2094 module_exit(iucv_exit);
2095 
2096 MODULE_AUTHOR("(C) 2001 IBM Corp. by Fritz Elfert (felfert@millenux.com)");
2097 MODULE_DESCRIPTION("Linux for S/390 IUCV lowlevel driver");
2098 MODULE_LICENSE("GPL");
2099