xref: /openbmc/linux/drivers/s390/cio/cmf.c (revision 87c2ce3b)
1 /*
2  * linux/drivers/s390/cio/cmf.c ($Revision: 1.19 $)
3  *
4  * Linux on zSeries Channel Measurement Facility support
5  *
6  * Copyright 2000,2003 IBM Corporation
7  *
8  * Author: Arnd Bergmann <arndb@de.ibm.com>
9  *
10  * original idea from Natarajan Krishnaswami <nkrishna@us.ibm.com>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2, or (at your option)
15  * any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25  */
26 
27 #include <linux/bootmem.h>
28 #include <linux/device.h>
29 #include <linux/init.h>
30 #include <linux/list.h>
31 #include <linux/module.h>
32 #include <linux/moduleparam.h>
33 #include <linux/slab.h>
34 #include <linux/timex.h>	/* get_clock() */
35 
36 #include <asm/ccwdev.h>
37 #include <asm/cio.h>
38 #include <asm/cmb.h>
39 #include <asm/div64.h>
40 
41 #include "cio.h"
42 #include "css.h"
43 #include "device.h"
44 #include "ioasm.h"
45 #include "chsc.h"
46 
47 /* parameter to enable cmf during boot, possible uses are:
48  *  "s390cmf" -- enable cmf and allocate 2 MB of ram so measuring can be
49  *               used on any subchannel
50  *  "s390cmf=<num>" -- enable cmf and allocate enough memory to measure
51  *                     <num> subchannel, where <num> is an integer
52  *                     between 1 and 65535, default is 1024
53  */
54 #define ARGSTRING "s390cmf"
55 
56 /* indices for READCMB */
57 enum cmb_index {
58  /* basic and exended format: */
59 	cmb_ssch_rsch_count,
60 	cmb_sample_count,
61 	cmb_device_connect_time,
62 	cmb_function_pending_time,
63 	cmb_device_disconnect_time,
64 	cmb_control_unit_queuing_time,
65 	cmb_device_active_only_time,
66  /* extended format only: */
67 	cmb_device_busy_time,
68 	cmb_initial_command_response_time,
69 };
70 
71 /**
72  * enum cmb_format - types of supported measurement block formats
73  *
74  * @CMF_BASIC:      traditional channel measurement blocks supported
75  * 		    by all machines that we run on
76  * @CMF_EXTENDED:   improved format that was introduced with the z990
77  * 		    machine
78  * @CMF_AUTODETECT: default: use extended format when running on a z990
79  *                  or later machine, otherwise fall back to basic format
80  **/
81 enum cmb_format {
82 	CMF_BASIC,
83 	CMF_EXTENDED,
84 	CMF_AUTODETECT = -1,
85 };
86 /**
87  * format - actual format for all measurement blocks
88  *
89  * The format module parameter can be set to a value of 0 (zero)
90  * or 1, indicating basic or extended format as described for
91  * enum cmb_format.
92  */
93 static int format = CMF_AUTODETECT;
94 module_param(format, bool, 0444);
95 
96 /**
97  * struct cmb_operations - functions to use depending on cmb_format
98  *
99  * all these functions operate on a struct cmf_device. There is only
100  * one instance of struct cmb_operations because all cmf_device
101  * objects are guaranteed to be of the same type.
102  *
103  * @alloc:	allocate memory for a channel measurement block,
104  *		either with the help of a special pool or with kmalloc
105  * @free:	free memory allocated with @alloc
106  * @set:	enable or disable measurement
107  * @readall:	read a measurement block in a common format
108  * @reset:	clear the data in the associated measurement block and
109  *		reset its time stamp
110  */
111 struct cmb_operations {
112 	int (*alloc)  (struct ccw_device*);
113 	void(*free)   (struct ccw_device*);
114 	int (*set)    (struct ccw_device*, u32);
115 	u64 (*read)   (struct ccw_device*, int);
116 	int (*readall)(struct ccw_device*, struct cmbdata *);
117 	void (*reset) (struct ccw_device*);
118 
119 	struct attribute_group *attr_group;
120 };
121 static struct cmb_operations *cmbops;
122 
123 /* our user interface is designed in terms of nanoseconds,
124  * while the hardware measures total times in its own
125  * unit.*/
126 static inline u64 time_to_nsec(u32 value)
127 {
128 	return ((u64)value) * 128000ull;
129 }
130 
131 /*
132  * Users are usually interested in average times,
133  * not accumulated time.
134  * This also helps us with atomicity problems
135  * when reading sinlge values.
136  */
137 static inline u64 time_to_avg_nsec(u32 value, u32 count)
138 {
139 	u64 ret;
140 
141 	/* no samples yet, avoid division by 0 */
142 	if (count == 0)
143 		return 0;
144 
145 	/* value comes in units of 128 �sec */
146 	ret = time_to_nsec(value);
147 	do_div(ret, count);
148 
149 	return ret;
150 }
151 
152 /* activate or deactivate the channel monitor. When area is NULL,
153  * the monitor is deactivated. The channel monitor needs to
154  * be active in order to measure subchannels, which also need
155  * to be enabled. */
156 static inline void
157 cmf_activate(void *area, unsigned int onoff)
158 {
159 	register void * __gpr2 asm("2");
160 	register long __gpr1 asm("1");
161 
162 	__gpr2 = area;
163 	__gpr1 = onoff ? 2 : 0;
164 	/* activate channel measurement */
165 	asm("schm" : : "d" (__gpr2), "d" (__gpr1) );
166 }
167 
168 static int
169 set_schib(struct ccw_device *cdev, u32 mme, int mbfc, unsigned long address)
170 {
171 	int ret;
172 	int retry;
173 	struct subchannel *sch;
174 	struct schib *schib;
175 
176 	sch = to_subchannel(cdev->dev.parent);
177 	schib = &sch->schib;
178 	/* msch can silently fail, so do it again if necessary */
179 	for (retry = 0; retry < 3; retry++) {
180 		/* prepare schib */
181 		stsch(sch->schid, schib);
182 		schib->pmcw.mme  = mme;
183 		schib->pmcw.mbfc = mbfc;
184 		/* address can be either a block address or a block index */
185 		if (mbfc)
186 			schib->mba = address;
187 		else
188 			schib->pmcw.mbi = address;
189 
190 		/* try to submit it */
191 		switch(ret = msch_err(sch->schid, schib)) {
192 			case 0:
193 				break;
194 			case 1:
195 			case 2: /* in I/O or status pending */
196 				ret = -EBUSY;
197 				break;
198 			case 3: /* subchannel is no longer valid */
199 				ret = -ENODEV;
200 				break;
201 			default: /* msch caught an exception */
202 				ret = -EINVAL;
203 				break;
204 		}
205 		stsch(sch->schid, schib); /* restore the schib */
206 
207 		if (ret)
208 			break;
209 
210 		/* check if it worked */
211 		if (schib->pmcw.mme  == mme &&
212 		    schib->pmcw.mbfc == mbfc &&
213 		    (mbfc ? (schib->mba == address)
214 			  : (schib->pmcw.mbi == address)))
215 			return 0;
216 
217 		ret = -EINVAL;
218 	}
219 
220 	return ret;
221 }
222 
223 struct set_schib_struct {
224 	u32 mme;
225 	int mbfc;
226 	unsigned long address;
227 	wait_queue_head_t wait;
228 	int ret;
229 };
230 
231 static int set_schib_wait(struct ccw_device *cdev, u32 mme,
232 				int mbfc, unsigned long address)
233 {
234 	struct set_schib_struct s = {
235 		.mme = mme,
236 		.mbfc = mbfc,
237 		.address = address,
238 		.wait = __WAIT_QUEUE_HEAD_INITIALIZER(s.wait),
239 	};
240 
241 	spin_lock_irq(cdev->ccwlock);
242 	s.ret = set_schib(cdev, mme, mbfc, address);
243 	if (s.ret != -EBUSY) {
244 		goto out_nowait;
245 	}
246 
247 	if (cdev->private->state != DEV_STATE_ONLINE) {
248 		s.ret = -EBUSY;
249 		/* if the device is not online, don't even try again */
250 		goto out_nowait;
251 	}
252 	cdev->private->state = DEV_STATE_CMFCHANGE;
253 	cdev->private->cmb_wait = &s;
254 	s.ret = 1;
255 
256 	spin_unlock_irq(cdev->ccwlock);
257 	if (wait_event_interruptible(s.wait, s.ret != 1)) {
258 		spin_lock_irq(cdev->ccwlock);
259 		if (s.ret == 1) {
260 			s.ret = -ERESTARTSYS;
261 			cdev->private->cmb_wait = 0;
262 			if (cdev->private->state == DEV_STATE_CMFCHANGE)
263 				cdev->private->state = DEV_STATE_ONLINE;
264 		}
265 		spin_unlock_irq(cdev->ccwlock);
266 	}
267 	return s.ret;
268 
269 out_nowait:
270 	spin_unlock_irq(cdev->ccwlock);
271 	return s.ret;
272 }
273 
274 void retry_set_schib(struct ccw_device *cdev)
275 {
276 	struct set_schib_struct *s;
277 
278 	s = cdev->private->cmb_wait;
279 	cdev->private->cmb_wait = 0;
280 	if (!s) {
281 		WARN_ON(1);
282 		return;
283 	}
284 	s->ret = set_schib(cdev, s->mme, s->mbfc, s->address);
285 	wake_up(&s->wait);
286 }
287 
288 /**
289  * struct cmb_area - container for global cmb data
290  *
291  * @mem:	pointer to CMBs (only in basic measurement mode)
292  * @list:	contains a linked list of all subchannels
293  * @lock:	protect concurrent access to @mem and @list
294  */
295 struct cmb_area {
296 	struct cmb *mem;
297 	struct list_head list;
298 	int num_channels;
299 	spinlock_t lock;
300 };
301 
302 static struct cmb_area cmb_area = {
303 	.lock = SPIN_LOCK_UNLOCKED,
304 	.list = LIST_HEAD_INIT(cmb_area.list),
305 	.num_channels  = 1024,
306 };
307 
308 
309 /* ****** old style CMB handling ********/
310 
311 /** int maxchannels
312  *
313  * Basic channel measurement blocks are allocated in one contiguous
314  * block of memory, which can not be moved as long as any channel
315  * is active. Therefore, a maximum number of subchannels needs to
316  * be defined somewhere. This is a module parameter, defaulting to
317  * a resonable value of 1024, or 32 kb of memory.
318  * Current kernels don't allow kmalloc with more than 128kb, so the
319  * maximum is 4096
320  */
321 
322 module_param_named(maxchannels, cmb_area.num_channels, uint, 0444);
323 
324 /**
325  * struct cmb - basic channel measurement block
326  *
327  * cmb as used by the hardware the fields are described in z/Architecture
328  * Principles of Operation, chapter 17.
329  * The area to be a contiguous array and may not be reallocated or freed.
330  * Only one cmb area can be present in the system.
331  */
332 struct cmb {
333 	u16 ssch_rsch_count;
334 	u16 sample_count;
335 	u32 device_connect_time;
336 	u32 function_pending_time;
337 	u32 device_disconnect_time;
338 	u32 control_unit_queuing_time;
339 	u32 device_active_only_time;
340 	u32 reserved[2];
341 };
342 
343 /* insert a single device into the cmb_area list
344  * called with cmb_area.lock held from alloc_cmb
345  */
346 static inline int
347 alloc_cmb_single (struct ccw_device *cdev)
348 {
349 	struct cmb *cmb;
350 	struct ccw_device_private *node;
351 	int ret;
352 
353 	spin_lock_irq(cdev->ccwlock);
354 	if (!list_empty(&cdev->private->cmb_list)) {
355 		ret = -EBUSY;
356 		goto out;
357 	}
358 
359 	/* find first unused cmb in cmb_area.mem.
360 	 * this is a little tricky: cmb_area.list
361 	 * remains sorted by ->cmb pointers */
362 	cmb = cmb_area.mem;
363 	list_for_each_entry(node, &cmb_area.list, cmb_list) {
364 		if ((struct cmb*)node->cmb > cmb)
365 			break;
366 		cmb++;
367 	}
368 	if (cmb - cmb_area.mem >= cmb_area.num_channels) {
369 		ret = -ENOMEM;
370 		goto out;
371 	}
372 
373 	/* insert new cmb */
374 	list_add_tail(&cdev->private->cmb_list, &node->cmb_list);
375 	cdev->private->cmb = cmb;
376 	ret = 0;
377 out:
378 	spin_unlock_irq(cdev->ccwlock);
379 	return ret;
380 }
381 
382 static int
383 alloc_cmb (struct ccw_device *cdev)
384 {
385 	int ret;
386 	struct cmb *mem;
387 	ssize_t size;
388 
389 	spin_lock(&cmb_area.lock);
390 
391 	if (!cmb_area.mem) {
392 		/* there is no user yet, so we need a new area */
393 		size = sizeof(struct cmb) * cmb_area.num_channels;
394 		WARN_ON(!list_empty(&cmb_area.list));
395 
396 		spin_unlock(&cmb_area.lock);
397 		mem = (void*)__get_free_pages(GFP_KERNEL | GFP_DMA,
398 				 get_order(size));
399 		spin_lock(&cmb_area.lock);
400 
401 		if (cmb_area.mem) {
402 			/* ok, another thread was faster */
403 			free_pages((unsigned long)mem, get_order(size));
404 		} else if (!mem) {
405 			/* no luck */
406 			ret = -ENOMEM;
407 			goto out;
408 		} else {
409 			/* everything ok */
410 			memset(mem, 0, size);
411 			cmb_area.mem = mem;
412 			cmf_activate(cmb_area.mem, 1);
413 		}
414 	}
415 
416 	/* do the actual allocation */
417 	ret = alloc_cmb_single(cdev);
418 out:
419 	spin_unlock(&cmb_area.lock);
420 
421 	return ret;
422 }
423 
424 static void
425 free_cmb(struct ccw_device *cdev)
426 {
427 	struct ccw_device_private *priv;
428 
429 	priv = cdev->private;
430 
431 	spin_lock(&cmb_area.lock);
432 	spin_lock_irq(cdev->ccwlock);
433 
434 	if (list_empty(&priv->cmb_list)) {
435 		/* already freed */
436 		goto out;
437 	}
438 
439 	priv->cmb = NULL;
440 	list_del_init(&priv->cmb_list);
441 
442 	if (list_empty(&cmb_area.list)) {
443 		ssize_t size;
444 		size = sizeof(struct cmb) * cmb_area.num_channels;
445 		cmf_activate(NULL, 0);
446 		free_pages((unsigned long)cmb_area.mem, get_order(size));
447 		cmb_area.mem = NULL;
448 	}
449 out:
450 	spin_unlock_irq(cdev->ccwlock);
451 	spin_unlock(&cmb_area.lock);
452 }
453 
454 static int
455 set_cmb(struct ccw_device *cdev, u32 mme)
456 {
457 	u16 offset;
458 
459 	if (!cdev->private->cmb)
460 		return -EINVAL;
461 
462 	offset = mme ? (struct cmb *)cdev->private->cmb - cmb_area.mem : 0;
463 
464 	return set_schib_wait(cdev, mme, 0, offset);
465 }
466 
467 static u64
468 read_cmb (struct ccw_device *cdev, int index)
469 {
470 	/* yes, we have to put it on the stack
471 	 * because the cmb must only be accessed
472 	 * atomically, e.g. with mvc */
473 	struct cmb cmb;
474 	unsigned long flags;
475 	u32 val;
476 
477 	spin_lock_irqsave(cdev->ccwlock, flags);
478 	if (!cdev->private->cmb) {
479 		spin_unlock_irqrestore(cdev->ccwlock, flags);
480 		return 0;
481 	}
482 
483 	cmb = *(struct cmb*)cdev->private->cmb;
484 	spin_unlock_irqrestore(cdev->ccwlock, flags);
485 
486 	switch (index) {
487 	case cmb_ssch_rsch_count:
488 		return cmb.ssch_rsch_count;
489 	case cmb_sample_count:
490 		return cmb.sample_count;
491 	case cmb_device_connect_time:
492 		val = cmb.device_connect_time;
493 		break;
494 	case cmb_function_pending_time:
495 		val = cmb.function_pending_time;
496 		break;
497 	case cmb_device_disconnect_time:
498 		val = cmb.device_disconnect_time;
499 		break;
500 	case cmb_control_unit_queuing_time:
501 		val = cmb.control_unit_queuing_time;
502 		break;
503 	case cmb_device_active_only_time:
504 		val = cmb.device_active_only_time;
505 		break;
506 	default:
507 		return 0;
508 	}
509 	return time_to_avg_nsec(val, cmb.sample_count);
510 }
511 
512 static int
513 readall_cmb (struct ccw_device *cdev, struct cmbdata *data)
514 {
515 	/* yes, we have to put it on the stack
516 	 * because the cmb must only be accessed
517 	 * atomically, e.g. with mvc */
518 	struct cmb cmb;
519 	unsigned long flags;
520 	u64 time;
521 
522 	spin_lock_irqsave(cdev->ccwlock, flags);
523 	if (!cdev->private->cmb) {
524 		spin_unlock_irqrestore(cdev->ccwlock, flags);
525 		return -ENODEV;
526 	}
527 
528 	cmb = *(struct cmb*)cdev->private->cmb;
529 	time = get_clock() - cdev->private->cmb_start_time;
530 	spin_unlock_irqrestore(cdev->ccwlock, flags);
531 
532 	memset(data, 0, sizeof(struct cmbdata));
533 
534 	/* we only know values before device_busy_time */
535 	data->size = offsetof(struct cmbdata, device_busy_time);
536 
537 	/* convert to nanoseconds */
538 	data->elapsed_time = (time * 1000) >> 12;
539 
540 	/* copy data to new structure */
541 	data->ssch_rsch_count = cmb.ssch_rsch_count;
542 	data->sample_count = cmb.sample_count;
543 
544 	/* time fields are converted to nanoseconds while copying */
545 	data->device_connect_time = time_to_nsec(cmb.device_connect_time);
546 	data->function_pending_time = time_to_nsec(cmb.function_pending_time);
547 	data->device_disconnect_time = time_to_nsec(cmb.device_disconnect_time);
548 	data->control_unit_queuing_time
549 		= time_to_nsec(cmb.control_unit_queuing_time);
550 	data->device_active_only_time
551 		= time_to_nsec(cmb.device_active_only_time);
552 
553 	return 0;
554 }
555 
556 static void
557 reset_cmb(struct ccw_device *cdev)
558 {
559 	struct cmb *cmb;
560 	spin_lock_irq(cdev->ccwlock);
561 	cmb = cdev->private->cmb;
562 	if (cmb)
563 		memset (cmb, 0, sizeof (*cmb));
564 	cdev->private->cmb_start_time = get_clock();
565 	spin_unlock_irq(cdev->ccwlock);
566 }
567 
568 static struct attribute_group cmf_attr_group;
569 
570 static struct cmb_operations cmbops_basic = {
571 	.alloc	= alloc_cmb,
572 	.free	= free_cmb,
573 	.set	= set_cmb,
574 	.read	= read_cmb,
575 	.readall    = readall_cmb,
576 	.reset	    = reset_cmb,
577 	.attr_group = &cmf_attr_group,
578 };
579 
580 /* ******** extended cmb handling ********/
581 
582 /**
583  * struct cmbe - extended channel measurement block
584  *
585  * cmb as used by the hardware, may be in any 64 bit physical location,
586  * the fields are described in z/Architecture Principles of Operation,
587  * third edition, chapter 17.
588  */
589 struct cmbe {
590 	u32 ssch_rsch_count;
591 	u32 sample_count;
592 	u32 device_connect_time;
593 	u32 function_pending_time;
594 	u32 device_disconnect_time;
595 	u32 control_unit_queuing_time;
596 	u32 device_active_only_time;
597 	u32 device_busy_time;
598 	u32 initial_command_response_time;
599 	u32 reserved[7];
600 };
601 
602 /* kmalloc only guarantees 8 byte alignment, but we need cmbe
603  * pointers to be naturally aligned. Make sure to allocate
604  * enough space for two cmbes */
605 static inline struct cmbe* cmbe_align(struct cmbe *c)
606 {
607 	unsigned long addr;
608 	addr = ((unsigned long)c + sizeof (struct cmbe) - sizeof(long)) &
609 				 ~(sizeof (struct cmbe) - sizeof(long));
610 	return (struct cmbe*)addr;
611 }
612 
613 static int
614 alloc_cmbe (struct ccw_device *cdev)
615 {
616 	struct cmbe *cmbe;
617 	cmbe = kmalloc (sizeof (*cmbe) * 2, GFP_KERNEL);
618 	if (!cmbe)
619 		return -ENOMEM;
620 
621 	spin_lock_irq(cdev->ccwlock);
622 	if (cdev->private->cmb) {
623 		kfree(cmbe);
624 		spin_unlock_irq(cdev->ccwlock);
625 		return -EBUSY;
626 	}
627 
628 	cdev->private->cmb = cmbe;
629 	spin_unlock_irq(cdev->ccwlock);
630 
631 	/* activate global measurement if this is the first channel */
632 	spin_lock(&cmb_area.lock);
633 	if (list_empty(&cmb_area.list))
634 		cmf_activate(NULL, 1);
635 	list_add_tail(&cdev->private->cmb_list, &cmb_area.list);
636 	spin_unlock(&cmb_area.lock);
637 
638 	return 0;
639 }
640 
641 static void
642 free_cmbe (struct ccw_device *cdev)
643 {
644 	spin_lock_irq(cdev->ccwlock);
645 	kfree(cdev->private->cmb);
646 	cdev->private->cmb = NULL;
647 	spin_unlock_irq(cdev->ccwlock);
648 
649 	/* deactivate global measurement if this is the last channel */
650 	spin_lock(&cmb_area.lock);
651 	list_del_init(&cdev->private->cmb_list);
652 	if (list_empty(&cmb_area.list))
653 		cmf_activate(NULL, 0);
654 	spin_unlock(&cmb_area.lock);
655 }
656 
657 static int
658 set_cmbe(struct ccw_device *cdev, u32 mme)
659 {
660 	unsigned long mba;
661 
662 	if (!cdev->private->cmb)
663 		return -EINVAL;
664 	mba = mme ? (unsigned long) cmbe_align(cdev->private->cmb) : 0;
665 
666 	return set_schib_wait(cdev, mme, 1, mba);
667 }
668 
669 
670 u64
671 read_cmbe (struct ccw_device *cdev, int index)
672 {
673 	/* yes, we have to put it on the stack
674 	 * because the cmb must only be accessed
675 	 * atomically, e.g. with mvc */
676 	struct cmbe cmb;
677 	unsigned long flags;
678 	u32 val;
679 
680 	spin_lock_irqsave(cdev->ccwlock, flags);
681 	if (!cdev->private->cmb) {
682 		spin_unlock_irqrestore(cdev->ccwlock, flags);
683 		return 0;
684 	}
685 
686 	cmb = *cmbe_align(cdev->private->cmb);
687 	spin_unlock_irqrestore(cdev->ccwlock, flags);
688 
689 	switch (index) {
690 	case cmb_ssch_rsch_count:
691 		return cmb.ssch_rsch_count;
692 	case cmb_sample_count:
693 		return cmb.sample_count;
694 	case cmb_device_connect_time:
695 		val = cmb.device_connect_time;
696 		break;
697 	case cmb_function_pending_time:
698 		val = cmb.function_pending_time;
699 		break;
700 	case cmb_device_disconnect_time:
701 		val = cmb.device_disconnect_time;
702 		break;
703 	case cmb_control_unit_queuing_time:
704 		val = cmb.control_unit_queuing_time;
705 		break;
706 	case cmb_device_active_only_time:
707 		val = cmb.device_active_only_time;
708 		break;
709 	case cmb_device_busy_time:
710 		val = cmb.device_busy_time;
711 		break;
712 	case cmb_initial_command_response_time:
713 		val = cmb.initial_command_response_time;
714 		break;
715 	default:
716 		return 0;
717 	}
718 	return time_to_avg_nsec(val, cmb.sample_count);
719 }
720 
721 static int
722 readall_cmbe (struct ccw_device *cdev, struct cmbdata *data)
723 {
724 	/* yes, we have to put it on the stack
725 	 * because the cmb must only be accessed
726 	 * atomically, e.g. with mvc */
727 	struct cmbe cmb;
728 	unsigned long flags;
729 	u64 time;
730 
731 	spin_lock_irqsave(cdev->ccwlock, flags);
732 	if (!cdev->private->cmb) {
733 		spin_unlock_irqrestore(cdev->ccwlock, flags);
734 		return -ENODEV;
735 	}
736 
737 	cmb = *cmbe_align(cdev->private->cmb);
738 	time = get_clock() - cdev->private->cmb_start_time;
739 	spin_unlock_irqrestore(cdev->ccwlock, flags);
740 
741 	memset (data, 0, sizeof(struct cmbdata));
742 
743 	/* we only know values before device_busy_time */
744 	data->size = offsetof(struct cmbdata, device_busy_time);
745 
746 	/* conver to nanoseconds */
747 	data->elapsed_time = (time * 1000) >> 12;
748 
749 	/* copy data to new structure */
750 	data->ssch_rsch_count = cmb.ssch_rsch_count;
751 	data->sample_count = cmb.sample_count;
752 
753 	/* time fields are converted to nanoseconds while copying */
754 	data->device_connect_time = time_to_nsec(cmb.device_connect_time);
755 	data->function_pending_time = time_to_nsec(cmb.function_pending_time);
756 	data->device_disconnect_time = time_to_nsec(cmb.device_disconnect_time);
757 	data->control_unit_queuing_time
758 		= time_to_nsec(cmb.control_unit_queuing_time);
759 	data->device_active_only_time
760 		= time_to_nsec(cmb.device_active_only_time);
761 	data->device_busy_time = time_to_nsec(cmb.device_busy_time);
762 	data->initial_command_response_time
763 		= time_to_nsec(cmb.initial_command_response_time);
764 
765 	return 0;
766 }
767 
768 static void
769 reset_cmbe(struct ccw_device *cdev)
770 {
771 	struct cmbe *cmb;
772 	spin_lock_irq(cdev->ccwlock);
773 	cmb = cmbe_align(cdev->private->cmb);
774 	if (cmb)
775 		memset (cmb, 0, sizeof (*cmb));
776 	cdev->private->cmb_start_time = get_clock();
777 	spin_unlock_irq(cdev->ccwlock);
778 }
779 
780 static struct attribute_group cmf_attr_group_ext;
781 
782 static struct cmb_operations cmbops_extended = {
783 	.alloc	    = alloc_cmbe,
784 	.free	    = free_cmbe,
785 	.set	    = set_cmbe,
786 	.read	    = read_cmbe,
787 	.readall    = readall_cmbe,
788 	.reset	    = reset_cmbe,
789 	.attr_group = &cmf_attr_group_ext,
790 };
791 
792 
793 static ssize_t
794 cmb_show_attr(struct device *dev, char *buf, enum cmb_index idx)
795 {
796 	return sprintf(buf, "%lld\n",
797 		(unsigned long long) cmf_read(to_ccwdev(dev), idx));
798 }
799 
800 static ssize_t
801 cmb_show_avg_sample_interval(struct device *dev, struct device_attribute *attr, char *buf)
802 {
803 	struct ccw_device *cdev;
804 	long interval;
805 	unsigned long count;
806 
807 	cdev = to_ccwdev(dev);
808 	interval  = get_clock() - cdev->private->cmb_start_time;
809 	count = cmf_read(cdev, cmb_sample_count);
810 	if (count)
811 		interval /= count;
812 	else
813 		interval = -1;
814 	return sprintf(buf, "%ld\n", interval);
815 }
816 
817 static ssize_t
818 cmb_show_avg_utilization(struct device *dev, struct device_attribute *attr, char *buf)
819 {
820 	struct cmbdata data;
821 	u64 utilization;
822 	unsigned long t, u;
823 	int ret;
824 
825 	ret = cmf_readall(to_ccwdev(dev), &data);
826 	if (ret)
827 		return ret;
828 
829 	utilization = data.device_connect_time +
830 		      data.function_pending_time +
831 		      data.device_disconnect_time;
832 
833 	/* shift to avoid long long division */
834 	while (-1ul < (data.elapsed_time | utilization)) {
835 		utilization >>= 8;
836 		data.elapsed_time >>= 8;
837 	}
838 
839 	/* calculate value in 0.1 percent units */
840 	t = (unsigned long) data.elapsed_time / 1000;
841 	u = (unsigned long) utilization / t;
842 
843 	return sprintf(buf, "%02ld.%01ld%%\n", u/ 10, u - (u/ 10) * 10);
844 }
845 
846 #define cmf_attr(name) \
847 static ssize_t show_ ## name (struct device * dev, struct device_attribute *attr, char * buf) \
848 { return cmb_show_attr((dev), buf, cmb_ ## name); } \
849 static DEVICE_ATTR(name, 0444, show_ ## name, NULL);
850 
851 #define cmf_attr_avg(name) \
852 static ssize_t show_avg_ ## name (struct device * dev, struct device_attribute *attr, char * buf) \
853 { return cmb_show_attr((dev), buf, cmb_ ## name); } \
854 static DEVICE_ATTR(avg_ ## name, 0444, show_avg_ ## name, NULL);
855 
856 cmf_attr(ssch_rsch_count);
857 cmf_attr(sample_count);
858 cmf_attr_avg(device_connect_time);
859 cmf_attr_avg(function_pending_time);
860 cmf_attr_avg(device_disconnect_time);
861 cmf_attr_avg(control_unit_queuing_time);
862 cmf_attr_avg(device_active_only_time);
863 cmf_attr_avg(device_busy_time);
864 cmf_attr_avg(initial_command_response_time);
865 
866 static DEVICE_ATTR(avg_sample_interval, 0444, cmb_show_avg_sample_interval, NULL);
867 static DEVICE_ATTR(avg_utilization, 0444, cmb_show_avg_utilization, NULL);
868 
869 static struct attribute *cmf_attributes[] = {
870 	&dev_attr_avg_sample_interval.attr,
871 	&dev_attr_avg_utilization.attr,
872 	&dev_attr_ssch_rsch_count.attr,
873 	&dev_attr_sample_count.attr,
874 	&dev_attr_avg_device_connect_time.attr,
875 	&dev_attr_avg_function_pending_time.attr,
876 	&dev_attr_avg_device_disconnect_time.attr,
877 	&dev_attr_avg_control_unit_queuing_time.attr,
878 	&dev_attr_avg_device_active_only_time.attr,
879 	0,
880 };
881 
882 static struct attribute_group cmf_attr_group = {
883 	.name  = "cmf",
884 	.attrs = cmf_attributes,
885 };
886 
887 static struct attribute *cmf_attributes_ext[] = {
888 	&dev_attr_avg_sample_interval.attr,
889 	&dev_attr_avg_utilization.attr,
890 	&dev_attr_ssch_rsch_count.attr,
891 	&dev_attr_sample_count.attr,
892 	&dev_attr_avg_device_connect_time.attr,
893 	&dev_attr_avg_function_pending_time.attr,
894 	&dev_attr_avg_device_disconnect_time.attr,
895 	&dev_attr_avg_control_unit_queuing_time.attr,
896 	&dev_attr_avg_device_active_only_time.attr,
897 	&dev_attr_avg_device_busy_time.attr,
898 	&dev_attr_avg_initial_command_response_time.attr,
899 	0,
900 };
901 
902 static struct attribute_group cmf_attr_group_ext = {
903 	.name  = "cmf",
904 	.attrs = cmf_attributes_ext,
905 };
906 
907 static ssize_t cmb_enable_show(struct device *dev, struct device_attribute *attr, char *buf)
908 {
909 	return sprintf(buf, "%d\n", to_ccwdev(dev)->private->cmb ? 1 : 0);
910 }
911 
912 static ssize_t cmb_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t c)
913 {
914 	struct ccw_device *cdev;
915 	int ret;
916 
917 	cdev = to_ccwdev(dev);
918 
919 	switch (buf[0]) {
920 	case '0':
921 		ret = disable_cmf(cdev);
922 		if (ret)
923 			printk(KERN_INFO "disable_cmf failed (%d)\n", ret);
924 		break;
925 	case '1':
926 		ret = enable_cmf(cdev);
927 		if (ret && ret != -EBUSY)
928 			printk(KERN_INFO "enable_cmf failed (%d)\n", ret);
929 		break;
930 	}
931 
932 	return c;
933 }
934 
935 DEVICE_ATTR(cmb_enable, 0644, cmb_enable_show, cmb_enable_store);
936 
937 /* enable_cmf/disable_cmf: module interface for cmf (de)activation */
938 int
939 enable_cmf(struct ccw_device *cdev)
940 {
941 	int ret;
942 
943 	ret = cmbops->alloc(cdev);
944 	cmbops->reset(cdev);
945 	if (ret)
946 		return ret;
947 	ret = cmbops->set(cdev, 2);
948 	if (ret) {
949 		cmbops->free(cdev);
950 		return ret;
951 	}
952 	ret = sysfs_create_group(&cdev->dev.kobj, cmbops->attr_group);
953 	if (!ret)
954 		return 0;
955 	cmbops->set(cdev, 0);  //FIXME: this can fail
956 	cmbops->free(cdev);
957 	return ret;
958 }
959 
960 int
961 disable_cmf(struct ccw_device *cdev)
962 {
963 	int ret;
964 
965 	ret = cmbops->set(cdev, 0);
966 	if (ret)
967 		return ret;
968 	cmbops->free(cdev);
969 	sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group);
970 	return ret;
971 }
972 
973 u64
974 cmf_read(struct ccw_device *cdev, int index)
975 {
976 	return cmbops->read(cdev, index);
977 }
978 
979 int
980 cmf_readall(struct ccw_device *cdev, struct cmbdata *data)
981 {
982 	return cmbops->readall(cdev, data);
983 }
984 
985 static int __init
986 init_cmf(void)
987 {
988 	char *format_string;
989 	char *detect_string = "parameter";
990 
991 	/* We cannot really autoprobe this. If the user did not give a parameter,
992 	   see if we are running on z990 or up, otherwise fall back to basic mode. */
993 
994 	if (format == CMF_AUTODETECT) {
995 		if (!css_characteristics_avail ||
996 		    !css_general_characteristics.ext_mb) {
997 			format = CMF_BASIC;
998 		} else {
999 			format = CMF_EXTENDED;
1000 		}
1001 		detect_string = "autodetected";
1002 	} else {
1003 		detect_string = "parameter";
1004 	}
1005 
1006 	switch (format) {
1007 	case CMF_BASIC:
1008 		format_string = "basic";
1009 		cmbops = &cmbops_basic;
1010 		if (cmb_area.num_channels > 4096 || cmb_area.num_channels < 1) {
1011 			printk(KERN_ERR "Basic channel measurement facility"
1012 					" can only use 1 to 4096 devices\n"
1013 			       KERN_ERR "when the cmf driver is built"
1014 					" as a loadable module\n");
1015 			return 1;
1016 		}
1017 		break;
1018 	case CMF_EXTENDED:
1019  		format_string = "extended";
1020 		cmbops = &cmbops_extended;
1021 		break;
1022 	default:
1023 		printk(KERN_ERR "Invalid format %d for channel "
1024 			"measurement facility\n", format);
1025 		return 1;
1026 	}
1027 
1028 	printk(KERN_INFO "Channel measurement facility using %s format (%s)\n",
1029 		format_string, detect_string);
1030 	return 0;
1031 }
1032 
1033 module_init(init_cmf);
1034 
1035 
1036 MODULE_AUTHOR("Arnd Bergmann <arndb@de.ibm.com>");
1037 MODULE_LICENSE("GPL");
1038 MODULE_DESCRIPTION("channel measurement facility base driver\n"
1039 		   "Copyright 2003 IBM Corporation\n");
1040 
1041 EXPORT_SYMBOL_GPL(enable_cmf);
1042 EXPORT_SYMBOL_GPL(disable_cmf);
1043 EXPORT_SYMBOL_GPL(cmf_read);
1044 EXPORT_SYMBOL_GPL(cmf_readall);
1045