1 // SPDX-License-Identifier: GPL-2.0
3 * ccw based virtio transport
5 * Copyright IBM Corp. 2012, 2014
7 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
10 #include <linux/kernel_stat.h>
11 #include <linux/init.h>
12 #include <linux/memblock.h>
13 #include <linux/err.h>
14 #include <linux/virtio.h>
15 #include <linux/virtio_config.h>
16 #include <linux/slab.h>
17 #include <linux/interrupt.h>
18 #include <linux/virtio_ring.h>
19 #include <linux/pfn.h>
20 #include <linux/async.h>
21 #include <linux/wait.h>
22 #include <linux/list.h>
23 #include <linux/bitops.h>
24 #include <linux/moduleparam.h>
26 #include <linux/kvm_para.h>
27 #include <linux/notifier.h>
29 #include <asm/setup.h>
32 #include <asm/ccwdev.h>
33 #include <asm/virtio-ccw.h>
38 * virtio related functions
41 struct vq_config_block
{
46 #define VIRTIO_CCW_CONFIG_SIZE 0x100
47 /* same as PCI config space size, should be enough for all drivers */
49 struct virtio_ccw_device
{
50 struct virtio_device vdev
;
52 __u8 config
[VIRTIO_CCW_CONFIG_SIZE
];
53 struct ccw_device
*cdev
;
56 unsigned int revision
; /* Transport revision */
57 wait_queue_head_t wait_q
;
59 struct mutex io_lock
; /* Serializes I/O requests */
60 struct list_head virtqueues
;
61 unsigned long indicators
;
62 unsigned long indicators2
;
63 struct vq_config_block
*config_block
;
67 unsigned int config_ready
;
71 struct vq_info_block_legacy
{
78 struct vq_info_block
{
87 struct virtio_feature_desc
{
92 struct virtio_thinint_area
{
93 unsigned long summary_indicator
;
94 unsigned long indicator
;
99 struct virtio_rev_info
{
105 /* the highest virtio-ccw revision we support */
106 #define VIRTIO_CCW_REV_MAX 1
108 struct virtio_ccw_vq_info
{
109 struct virtqueue
*vq
;
113 struct vq_info_block s
;
114 struct vq_info_block_legacy l
;
117 struct list_head node
;
121 #define VIRTIO_AIRQ_ISC IO_SCH_ISC /* inherit from subchannel */
123 #define VIRTIO_IV_BITS (L1_CACHE_BYTES * 8)
124 #define MAX_AIRQ_AREAS 20
126 static int virtio_ccw_use_airq
= 1;
130 u8 summary_indicator
;
131 struct airq_struct airq
;
134 static struct airq_info
*airq_areas
[MAX_AIRQ_AREAS
];
136 #define CCW_CMD_SET_VQ 0x13
137 #define CCW_CMD_VDEV_RESET 0x33
138 #define CCW_CMD_SET_IND 0x43
139 #define CCW_CMD_SET_CONF_IND 0x53
140 #define CCW_CMD_READ_FEAT 0x12
141 #define CCW_CMD_WRITE_FEAT 0x11
142 #define CCW_CMD_READ_CONF 0x22
143 #define CCW_CMD_WRITE_CONF 0x21
144 #define CCW_CMD_WRITE_STATUS 0x31
145 #define CCW_CMD_READ_VQ_CONF 0x32
146 #define CCW_CMD_READ_STATUS 0x72
147 #define CCW_CMD_SET_IND_ADAPTER 0x73
148 #define CCW_CMD_SET_VIRTIO_REV 0x83
150 #define VIRTIO_CCW_DOING_SET_VQ 0x00010000
151 #define VIRTIO_CCW_DOING_RESET 0x00040000
152 #define VIRTIO_CCW_DOING_READ_FEAT 0x00080000
153 #define VIRTIO_CCW_DOING_WRITE_FEAT 0x00100000
154 #define VIRTIO_CCW_DOING_READ_CONFIG 0x00200000
155 #define VIRTIO_CCW_DOING_WRITE_CONFIG 0x00400000
156 #define VIRTIO_CCW_DOING_WRITE_STATUS 0x00800000
157 #define VIRTIO_CCW_DOING_SET_IND 0x01000000
158 #define VIRTIO_CCW_DOING_READ_VQ_CONF 0x02000000
159 #define VIRTIO_CCW_DOING_SET_CONF_IND 0x04000000
160 #define VIRTIO_CCW_DOING_SET_IND_ADAPTER 0x08000000
161 #define VIRTIO_CCW_DOING_SET_VIRTIO_REV 0x10000000
162 #define VIRTIO_CCW_DOING_READ_STATUS 0x20000000
163 #define VIRTIO_CCW_INTPARM_MASK 0xffff0000
165 static struct virtio_ccw_device
*to_vc_device(struct virtio_device
*vdev
)
167 return container_of(vdev
, struct virtio_ccw_device
, vdev
);
170 static void drop_airq_indicator(struct virtqueue
*vq
, struct airq_info
*info
)
172 unsigned long i
, flags
;
174 write_lock_irqsave(&info
->lock
, flags
);
175 for (i
= 0; i
< airq_iv_end(info
->aiv
); i
++) {
176 if (vq
== (void *)airq_iv_get_ptr(info
->aiv
, i
)) {
177 airq_iv_free_bit(info
->aiv
, i
);
178 airq_iv_set_ptr(info
->aiv
, i
, 0);
182 write_unlock_irqrestore(&info
->lock
, flags
);
185 static void virtio_airq_handler(struct airq_struct
*airq
)
187 struct airq_info
*info
= container_of(airq
, struct airq_info
, airq
);
190 inc_irq_stat(IRQIO_VAI
);
191 read_lock(&info
->lock
);
192 /* Walk through indicators field, summary indicator active. */
194 ai
= airq_iv_scan(info
->aiv
, ai
, airq_iv_end(info
->aiv
));
197 vring_interrupt(0, (void *)airq_iv_get_ptr(info
->aiv
, ai
));
199 info
->summary_indicator
= 0;
201 /* Walk through indicators field, summary indicator not active. */
203 ai
= airq_iv_scan(info
->aiv
, ai
, airq_iv_end(info
->aiv
));
206 vring_interrupt(0, (void *)airq_iv_get_ptr(info
->aiv
, ai
));
208 read_unlock(&info
->lock
);
211 static struct airq_info
*new_airq_info(void)
213 struct airq_info
*info
;
216 info
= kzalloc(sizeof(*info
), GFP_KERNEL
);
219 rwlock_init(&info
->lock
);
220 info
->aiv
= airq_iv_create(VIRTIO_IV_BITS
, AIRQ_IV_ALLOC
| AIRQ_IV_PTR
);
225 info
->airq
.handler
= virtio_airq_handler
;
226 info
->airq
.lsi_ptr
= &info
->summary_indicator
;
227 info
->airq
.lsi_mask
= 0xff;
228 info
->airq
.isc
= VIRTIO_AIRQ_ISC
;
229 rc
= register_adapter_interrupt(&info
->airq
);
231 airq_iv_release(info
->aiv
);
238 static unsigned long get_airq_indicator(struct virtqueue
*vqs
[], int nvqs
,
239 u64
*first
, void **airq_info
)
242 struct airq_info
*info
;
243 unsigned long indicator_addr
= 0;
244 unsigned long bit
, flags
;
246 for (i
= 0; i
< MAX_AIRQ_AREAS
&& !indicator_addr
; i
++) {
248 airq_areas
[i
] = new_airq_info();
249 info
= airq_areas
[i
];
252 write_lock_irqsave(&info
->lock
, flags
);
253 bit
= airq_iv_alloc(info
->aiv
, nvqs
);
255 /* Not enough vacancies. */
256 write_unlock_irqrestore(&info
->lock
, flags
);
261 indicator_addr
= (unsigned long)info
->aiv
->vector
;
262 for (j
= 0; j
< nvqs
; j
++) {
263 airq_iv_set_ptr(info
->aiv
, bit
+ j
,
264 (unsigned long)vqs
[j
]);
266 write_unlock_irqrestore(&info
->lock
, flags
);
268 return indicator_addr
;
271 static void virtio_ccw_drop_indicators(struct virtio_ccw_device
*vcdev
)
273 struct virtio_ccw_vq_info
*info
;
275 if (!vcdev
->airq_info
)
277 list_for_each_entry(info
, &vcdev
->virtqueues
, node
)
278 drop_airq_indicator(info
->vq
, vcdev
->airq_info
);
281 static int doing_io(struct virtio_ccw_device
*vcdev
, __u32 flag
)
286 spin_lock_irqsave(get_ccwdev_lock(vcdev
->cdev
), flags
);
290 ret
= vcdev
->curr_io
& flag
;
291 spin_unlock_irqrestore(get_ccwdev_lock(vcdev
->cdev
), flags
);
295 static int ccw_io_helper(struct virtio_ccw_device
*vcdev
,
296 struct ccw1
*ccw
, __u32 intparm
)
300 int flag
= intparm
& VIRTIO_CCW_INTPARM_MASK
;
302 mutex_lock(&vcdev
->io_lock
);
304 spin_lock_irqsave(get_ccwdev_lock(vcdev
->cdev
), flags
);
305 ret
= ccw_device_start(vcdev
->cdev
, ccw
, intparm
, 0, 0);
309 vcdev
->curr_io
|= flag
;
311 spin_unlock_irqrestore(get_ccwdev_lock(vcdev
->cdev
), flags
);
313 } while (ret
== -EBUSY
);
314 wait_event(vcdev
->wait_q
, doing_io(vcdev
, flag
) == 0);
315 ret
= ret
? ret
: vcdev
->err
;
316 mutex_unlock(&vcdev
->io_lock
);
320 static void virtio_ccw_drop_indicator(struct virtio_ccw_device
*vcdev
,
324 unsigned long *indicatorp
= NULL
;
325 struct virtio_thinint_area
*thinint_area
= NULL
;
326 struct airq_info
*airq_info
= vcdev
->airq_info
;
328 if (vcdev
->is_thinint
) {
329 thinint_area
= kzalloc(sizeof(*thinint_area
),
330 GFP_DMA
| GFP_KERNEL
);
333 thinint_area
->summary_indicator
=
334 (unsigned long) &airq_info
->summary_indicator
;
335 thinint_area
->isc
= VIRTIO_AIRQ_ISC
;
336 ccw
->cmd_code
= CCW_CMD_SET_IND_ADAPTER
;
337 ccw
->count
= sizeof(*thinint_area
);
338 ccw
->cda
= (__u32
)(unsigned long) thinint_area
;
340 /* payload is the address of the indicators */
341 indicatorp
= kmalloc(sizeof(&vcdev
->indicators
),
342 GFP_DMA
| GFP_KERNEL
);
346 ccw
->cmd_code
= CCW_CMD_SET_IND
;
347 ccw
->count
= sizeof(&vcdev
->indicators
);
348 ccw
->cda
= (__u32
)(unsigned long) indicatorp
;
350 /* Deregister indicators from host. */
351 vcdev
->indicators
= 0;
353 ret
= ccw_io_helper(vcdev
, ccw
,
355 VIRTIO_CCW_DOING_SET_IND_ADAPTER
:
356 VIRTIO_CCW_DOING_SET_IND
);
357 if (ret
&& (ret
!= -ENODEV
))
358 dev_info(&vcdev
->cdev
->dev
,
359 "Failed to deregister indicators (%d)\n", ret
);
360 else if (vcdev
->is_thinint
)
361 virtio_ccw_drop_indicators(vcdev
);
366 static inline long __do_kvm_notify(struct subchannel_id schid
,
367 unsigned long queue_index
,
370 register unsigned long __nr
asm("1") = KVM_S390_VIRTIO_CCW_NOTIFY
;
371 register struct subchannel_id __schid
asm("2") = schid
;
372 register unsigned long __index
asm("3") = queue_index
;
373 register long __rc
asm("2");
374 register long __cookie
asm("4") = cookie
;
376 asm volatile ("diag 2,4,0x500\n"
377 : "=d" (__rc
) : "d" (__nr
), "d" (__schid
), "d" (__index
),
383 static inline long do_kvm_notify(struct subchannel_id schid
,
384 unsigned long queue_index
,
387 diag_stat_inc(DIAG_STAT_X500
);
388 return __do_kvm_notify(schid
, queue_index
, cookie
);
391 static bool virtio_ccw_kvm_notify(struct virtqueue
*vq
)
393 struct virtio_ccw_vq_info
*info
= vq
->priv
;
394 struct virtio_ccw_device
*vcdev
;
395 struct subchannel_id schid
;
397 vcdev
= to_vc_device(info
->vq
->vdev
);
398 ccw_device_get_schid(vcdev
->cdev
, &schid
);
399 info
->cookie
= do_kvm_notify(schid
, vq
->index
, info
->cookie
);
400 if (info
->cookie
< 0)
405 static int virtio_ccw_read_vq_conf(struct virtio_ccw_device
*vcdev
,
406 struct ccw1
*ccw
, int index
)
410 vcdev
->config_block
->index
= index
;
411 ccw
->cmd_code
= CCW_CMD_READ_VQ_CONF
;
413 ccw
->count
= sizeof(struct vq_config_block
);
414 ccw
->cda
= (__u32
)(unsigned long)(vcdev
->config_block
);
415 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_READ_VQ_CONF
);
418 return vcdev
->config_block
->num
?: -ENOENT
;
421 static void virtio_ccw_del_vq(struct virtqueue
*vq
, struct ccw1
*ccw
)
423 struct virtio_ccw_device
*vcdev
= to_vc_device(vq
->vdev
);
424 struct virtio_ccw_vq_info
*info
= vq
->priv
;
428 unsigned int index
= vq
->index
;
430 /* Remove from our list. */
431 spin_lock_irqsave(&vcdev
->lock
, flags
);
432 list_del(&info
->node
);
433 spin_unlock_irqrestore(&vcdev
->lock
, flags
);
435 /* Release from host. */
436 if (vcdev
->revision
== 0) {
437 info
->info_block
->l
.queue
= 0;
438 info
->info_block
->l
.align
= 0;
439 info
->info_block
->l
.index
= index
;
440 info
->info_block
->l
.num
= 0;
441 ccw
->count
= sizeof(info
->info_block
->l
);
443 info
->info_block
->s
.desc
= 0;
444 info
->info_block
->s
.index
= index
;
445 info
->info_block
->s
.num
= 0;
446 info
->info_block
->s
.avail
= 0;
447 info
->info_block
->s
.used
= 0;
448 ccw
->count
= sizeof(info
->info_block
->s
);
450 ccw
->cmd_code
= CCW_CMD_SET_VQ
;
452 ccw
->cda
= (__u32
)(unsigned long)(info
->info_block
);
453 ret
= ccw_io_helper(vcdev
, ccw
,
454 VIRTIO_CCW_DOING_SET_VQ
| index
);
456 * -ENODEV isn't considered an error: The device is gone anyway.
457 * This may happen on device detach.
459 if (ret
&& (ret
!= -ENODEV
))
460 dev_warn(&vq
->vdev
->dev
, "Error %d while deleting queue %d\n",
463 vring_del_virtqueue(vq
);
464 size
= PAGE_ALIGN(vring_size(info
->num
, KVM_VIRTIO_CCW_RING_ALIGN
));
465 free_pages_exact(info
->queue
, size
);
466 kfree(info
->info_block
);
470 static void virtio_ccw_del_vqs(struct virtio_device
*vdev
)
472 struct virtqueue
*vq
, *n
;
474 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
476 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
480 virtio_ccw_drop_indicator(vcdev
, ccw
);
482 list_for_each_entry_safe(vq
, n
, &vdev
->vqs
, list
)
483 virtio_ccw_del_vq(vq
, ccw
);
488 static struct virtqueue
*virtio_ccw_setup_vq(struct virtio_device
*vdev
,
489 int i
, vq_callback_t
*callback
,
490 const char *name
, bool ctx
,
493 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
495 struct virtqueue
*vq
= NULL
;
496 struct virtio_ccw_vq_info
*info
;
497 unsigned long size
= 0; /* silence the compiler */
500 /* Allocate queue. */
501 info
= kzalloc(sizeof(struct virtio_ccw_vq_info
), GFP_KERNEL
);
503 dev_warn(&vcdev
->cdev
->dev
, "no info\n");
507 info
->info_block
= kzalloc(sizeof(*info
->info_block
),
508 GFP_DMA
| GFP_KERNEL
);
509 if (!info
->info_block
) {
510 dev_warn(&vcdev
->cdev
->dev
, "no info block\n");
514 info
->num
= virtio_ccw_read_vq_conf(vcdev
, ccw
, i
);
519 size
= PAGE_ALIGN(vring_size(info
->num
, KVM_VIRTIO_CCW_RING_ALIGN
));
520 info
->queue
= alloc_pages_exact(size
, GFP_KERNEL
| __GFP_ZERO
);
521 if (info
->queue
== NULL
) {
522 dev_warn(&vcdev
->cdev
->dev
, "no queue\n");
527 vq
= vring_new_virtqueue(i
, info
->num
, KVM_VIRTIO_CCW_RING_ALIGN
, vdev
,
528 true, ctx
, info
->queue
, virtio_ccw_kvm_notify
,
531 /* For now, we fail if we can't get the requested size. */
532 dev_warn(&vcdev
->cdev
->dev
, "no vq\n");
537 /* Register it with the host. */
538 if (vcdev
->revision
== 0) {
539 info
->info_block
->l
.queue
= (__u64
)info
->queue
;
540 info
->info_block
->l
.align
= KVM_VIRTIO_CCW_RING_ALIGN
;
541 info
->info_block
->l
.index
= i
;
542 info
->info_block
->l
.num
= info
->num
;
543 ccw
->count
= sizeof(info
->info_block
->l
);
545 info
->info_block
->s
.desc
= (__u64
)info
->queue
;
546 info
->info_block
->s
.index
= i
;
547 info
->info_block
->s
.num
= info
->num
;
548 info
->info_block
->s
.avail
= (__u64
)virtqueue_get_avail(vq
);
549 info
->info_block
->s
.used
= (__u64
)virtqueue_get_used(vq
);
550 ccw
->count
= sizeof(info
->info_block
->s
);
552 ccw
->cmd_code
= CCW_CMD_SET_VQ
;
554 ccw
->cda
= (__u32
)(unsigned long)(info
->info_block
);
555 err
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_SET_VQ
| i
);
557 dev_warn(&vcdev
->cdev
->dev
, "SET_VQ failed\n");
564 /* Save it to our list. */
565 spin_lock_irqsave(&vcdev
->lock
, flags
);
566 list_add(&info
->node
, &vcdev
->virtqueues
);
567 spin_unlock_irqrestore(&vcdev
->lock
, flags
);
573 vring_del_virtqueue(vq
);
576 free_pages_exact(info
->queue
, size
);
577 kfree(info
->info_block
);
583 static int virtio_ccw_register_adapter_ind(struct virtio_ccw_device
*vcdev
,
584 struct virtqueue
*vqs
[], int nvqs
,
588 struct virtio_thinint_area
*thinint_area
= NULL
;
589 struct airq_info
*info
;
591 thinint_area
= kzalloc(sizeof(*thinint_area
), GFP_DMA
| GFP_KERNEL
);
596 /* Try to get an indicator. */
597 thinint_area
->indicator
= get_airq_indicator(vqs
, nvqs
,
598 &thinint_area
->bit_nr
,
600 if (!thinint_area
->indicator
) {
604 info
= vcdev
->airq_info
;
605 thinint_area
->summary_indicator
=
606 (unsigned long) &info
->summary_indicator
;
607 thinint_area
->isc
= VIRTIO_AIRQ_ISC
;
608 ccw
->cmd_code
= CCW_CMD_SET_IND_ADAPTER
;
609 ccw
->flags
= CCW_FLAG_SLI
;
610 ccw
->count
= sizeof(*thinint_area
);
611 ccw
->cda
= (__u32
)(unsigned long)thinint_area
;
612 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_SET_IND_ADAPTER
);
614 if (ret
== -EOPNOTSUPP
) {
616 * The host does not support adapter interrupts
617 * for virtio-ccw, stop trying.
619 virtio_ccw_use_airq
= 0;
620 pr_info("Adapter interrupts unsupported on host\n");
622 dev_warn(&vcdev
->cdev
->dev
,
623 "enabling adapter interrupts = %d\n", ret
);
624 virtio_ccw_drop_indicators(vcdev
);
631 static int virtio_ccw_find_vqs(struct virtio_device
*vdev
, unsigned nvqs
,
632 struct virtqueue
*vqs
[],
633 vq_callback_t
*callbacks
[],
634 const char * const names
[],
636 struct irq_affinity
*desc
)
638 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
639 unsigned long *indicatorp
= NULL
;
640 int ret
, i
, queue_idx
= 0;
643 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
647 for (i
= 0; i
< nvqs
; ++i
) {
653 vqs
[i
] = virtio_ccw_setup_vq(vdev
, queue_idx
++, callbacks
[i
],
654 names
[i
], ctx
? ctx
[i
] : false,
656 if (IS_ERR(vqs
[i
])) {
657 ret
= PTR_ERR(vqs
[i
]);
664 * We need a data area under 2G to communicate. Our payload is
665 * the address of the indicators.
667 indicatorp
= kmalloc(sizeof(&vcdev
->indicators
), GFP_DMA
| GFP_KERNEL
);
670 *indicatorp
= (unsigned long) &vcdev
->indicators
;
671 if (vcdev
->is_thinint
) {
672 ret
= virtio_ccw_register_adapter_ind(vcdev
, vqs
, nvqs
, ccw
);
674 /* no error, just fall back to legacy interrupts */
675 vcdev
->is_thinint
= false;
677 if (!vcdev
->is_thinint
) {
678 /* Register queue indicators with host. */
679 vcdev
->indicators
= 0;
680 ccw
->cmd_code
= CCW_CMD_SET_IND
;
682 ccw
->count
= sizeof(&vcdev
->indicators
);
683 ccw
->cda
= (__u32
)(unsigned long) indicatorp
;
684 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_SET_IND
);
688 /* Register indicators2 with host for config changes */
689 *indicatorp
= (unsigned long) &vcdev
->indicators2
;
690 vcdev
->indicators2
= 0;
691 ccw
->cmd_code
= CCW_CMD_SET_CONF_IND
;
693 ccw
->count
= sizeof(&vcdev
->indicators2
);
694 ccw
->cda
= (__u32
)(unsigned long) indicatorp
;
695 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_SET_CONF_IND
);
705 virtio_ccw_del_vqs(vdev
);
709 static void virtio_ccw_reset(struct virtio_device
*vdev
)
711 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
714 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
718 /* Zero status bits. */
721 /* Send a reset ccw on device. */
722 ccw
->cmd_code
= CCW_CMD_VDEV_RESET
;
726 ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_RESET
);
730 static u64
virtio_ccw_get_features(struct virtio_device
*vdev
)
732 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
733 struct virtio_feature_desc
*features
;
738 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
742 features
= kzalloc(sizeof(*features
), GFP_DMA
| GFP_KERNEL
);
747 /* Read the feature bits from the host. */
749 ccw
->cmd_code
= CCW_CMD_READ_FEAT
;
751 ccw
->count
= sizeof(*features
);
752 ccw
->cda
= (__u32
)(unsigned long)features
;
753 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_READ_FEAT
);
759 rc
= le32_to_cpu(features
->features
);
761 if (vcdev
->revision
== 0)
764 /* Read second half of the feature bits from the host. */
766 ccw
->cmd_code
= CCW_CMD_READ_FEAT
;
768 ccw
->count
= sizeof(*features
);
769 ccw
->cda
= (__u32
)(unsigned long)features
;
770 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_READ_FEAT
);
772 rc
|= (u64
)le32_to_cpu(features
->features
) << 32;
780 static void ccw_transport_features(struct virtio_device
*vdev
)
783 * Packed ring isn't enabled on virtio_ccw for now,
784 * because virtio_ccw uses some legacy accessors,
785 * e.g. virtqueue_get_avail() and virtqueue_get_used()
786 * which aren't available in packed ring currently.
788 __virtio_clear_bit(vdev
, VIRTIO_F_RING_PACKED
);
791 static int virtio_ccw_finalize_features(struct virtio_device
*vdev
)
793 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
794 struct virtio_feature_desc
*features
;
798 if (vcdev
->revision
>= 1 &&
799 !__virtio_test_bit(vdev
, VIRTIO_F_VERSION_1
)) {
800 dev_err(&vdev
->dev
, "virtio: device uses revision 1 "
801 "but does not have VIRTIO_F_VERSION_1\n");
805 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
809 features
= kzalloc(sizeof(*features
), GFP_DMA
| GFP_KERNEL
);
814 /* Give virtio_ring a chance to accept features. */
815 vring_transport_features(vdev
);
817 /* Give virtio_ccw a chance to accept features. */
818 ccw_transport_features(vdev
);
821 features
->features
= cpu_to_le32((u32
)vdev
->features
);
822 /* Write the first half of the feature bits to the host. */
823 ccw
->cmd_code
= CCW_CMD_WRITE_FEAT
;
825 ccw
->count
= sizeof(*features
);
826 ccw
->cda
= (__u32
)(unsigned long)features
;
827 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_WRITE_FEAT
);
831 if (vcdev
->revision
== 0)
835 features
->features
= cpu_to_le32(vdev
->features
>> 32);
836 /* Write the second half of the feature bits to the host. */
837 ccw
->cmd_code
= CCW_CMD_WRITE_FEAT
;
839 ccw
->count
= sizeof(*features
);
840 ccw
->cda
= (__u32
)(unsigned long)features
;
841 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_WRITE_FEAT
);
850 static void virtio_ccw_get_config(struct virtio_device
*vdev
,
851 unsigned int offset
, void *buf
, unsigned len
)
853 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
859 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
863 config_area
= kzalloc(VIRTIO_CCW_CONFIG_SIZE
, GFP_DMA
| GFP_KERNEL
);
867 /* Read the config area from the host. */
868 ccw
->cmd_code
= CCW_CMD_READ_CONF
;
870 ccw
->count
= offset
+ len
;
871 ccw
->cda
= (__u32
)(unsigned long)config_area
;
872 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_READ_CONFIG
);
876 spin_lock_irqsave(&vcdev
->lock
, flags
);
877 memcpy(vcdev
->config
, config_area
, offset
+ len
);
878 if (vcdev
->config_ready
< offset
+ len
)
879 vcdev
->config_ready
= offset
+ len
;
880 spin_unlock_irqrestore(&vcdev
->lock
, flags
);
882 memcpy(buf
, config_area
+ offset
, len
);
889 static void virtio_ccw_set_config(struct virtio_device
*vdev
,
890 unsigned int offset
, const void *buf
,
893 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
898 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
902 config_area
= kzalloc(VIRTIO_CCW_CONFIG_SIZE
, GFP_DMA
| GFP_KERNEL
);
906 /* Make sure we don't overwrite fields. */
907 if (vcdev
->config_ready
< offset
)
908 virtio_ccw_get_config(vdev
, 0, NULL
, offset
);
909 spin_lock_irqsave(&vcdev
->lock
, flags
);
910 memcpy(&vcdev
->config
[offset
], buf
, len
);
911 /* Write the config area to the host. */
912 memcpy(config_area
, vcdev
->config
, sizeof(vcdev
->config
));
913 spin_unlock_irqrestore(&vcdev
->lock
, flags
);
914 ccw
->cmd_code
= CCW_CMD_WRITE_CONF
;
916 ccw
->count
= offset
+ len
;
917 ccw
->cda
= (__u32
)(unsigned long)config_area
;
918 ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_WRITE_CONFIG
);
925 static u8
virtio_ccw_get_status(struct virtio_device
*vdev
)
927 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
928 u8 old_status
= *vcdev
->status
;
931 if (vcdev
->revision
< 1)
932 return *vcdev
->status
;
934 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
938 ccw
->cmd_code
= CCW_CMD_READ_STATUS
;
940 ccw
->count
= sizeof(*vcdev
->status
);
941 ccw
->cda
= (__u32
)(unsigned long)vcdev
->status
;
942 ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_READ_STATUS
);
944 * If the channel program failed (should only happen if the device
945 * was hotunplugged, and then we clean up via the machine check
946 * handler anyway), vcdev->status was not overwritten and we just
947 * return the old status, which is fine.
951 return *vcdev
->status
;
954 static void virtio_ccw_set_status(struct virtio_device
*vdev
, u8 status
)
956 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
957 u8 old_status
= *vcdev
->status
;
961 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
965 /* Write the status to the host. */
966 *vcdev
->status
= status
;
967 ccw
->cmd_code
= CCW_CMD_WRITE_STATUS
;
969 ccw
->count
= sizeof(status
);
970 ccw
->cda
= (__u32
)(unsigned long)vcdev
->status
;
971 ret
= ccw_io_helper(vcdev
, ccw
, VIRTIO_CCW_DOING_WRITE_STATUS
);
972 /* Write failed? We assume status is unchanged. */
974 *vcdev
->status
= old_status
;
978 static const char *virtio_ccw_bus_name(struct virtio_device
*vdev
)
980 struct virtio_ccw_device
*vcdev
= to_vc_device(vdev
);
982 return dev_name(&vcdev
->cdev
->dev
);
985 static const struct virtio_config_ops virtio_ccw_config_ops
= {
986 .get_features
= virtio_ccw_get_features
,
987 .finalize_features
= virtio_ccw_finalize_features
,
988 .get
= virtio_ccw_get_config
,
989 .set
= virtio_ccw_set_config
,
990 .get_status
= virtio_ccw_get_status
,
991 .set_status
= virtio_ccw_set_status
,
992 .reset
= virtio_ccw_reset
,
993 .find_vqs
= virtio_ccw_find_vqs
,
994 .del_vqs
= virtio_ccw_del_vqs
,
995 .bus_name
= virtio_ccw_bus_name
,
1000 * ccw bus driver related functions
1003 static void virtio_ccw_release_dev(struct device
*_d
)
1005 struct virtio_device
*dev
= dev_to_virtio(_d
);
1006 struct virtio_ccw_device
*vcdev
= to_vc_device(dev
);
1008 kfree(vcdev
->status
);
1009 kfree(vcdev
->config_block
);
1013 static int irb_is_error(struct irb
*irb
)
1015 if (scsw_cstat(&irb
->scsw
) != 0)
1017 if (scsw_dstat(&irb
->scsw
) & ~(DEV_STAT_CHN_END
| DEV_STAT_DEV_END
))
1019 if (scsw_cc(&irb
->scsw
) != 0)
1024 static struct virtqueue
*virtio_ccw_vq_by_ind(struct virtio_ccw_device
*vcdev
,
1027 struct virtio_ccw_vq_info
*info
;
1028 unsigned long flags
;
1029 struct virtqueue
*vq
;
1032 spin_lock_irqsave(&vcdev
->lock
, flags
);
1033 list_for_each_entry(info
, &vcdev
->virtqueues
, node
) {
1034 if (info
->vq
->index
== index
) {
1039 spin_unlock_irqrestore(&vcdev
->lock
, flags
);
1043 static void virtio_ccw_check_activity(struct virtio_ccw_device
*vcdev
,
1046 if (vcdev
->curr_io
& activity
) {
1048 case VIRTIO_CCW_DOING_READ_FEAT
:
1049 case VIRTIO_CCW_DOING_WRITE_FEAT
:
1050 case VIRTIO_CCW_DOING_READ_CONFIG
:
1051 case VIRTIO_CCW_DOING_WRITE_CONFIG
:
1052 case VIRTIO_CCW_DOING_WRITE_STATUS
:
1053 case VIRTIO_CCW_DOING_READ_STATUS
:
1054 case VIRTIO_CCW_DOING_SET_VQ
:
1055 case VIRTIO_CCW_DOING_SET_IND
:
1056 case VIRTIO_CCW_DOING_SET_CONF_IND
:
1057 case VIRTIO_CCW_DOING_RESET
:
1058 case VIRTIO_CCW_DOING_READ_VQ_CONF
:
1059 case VIRTIO_CCW_DOING_SET_IND_ADAPTER
:
1060 case VIRTIO_CCW_DOING_SET_VIRTIO_REV
:
1061 vcdev
->curr_io
&= ~activity
;
1062 wake_up(&vcdev
->wait_q
);
1065 /* don't know what to do... */
1066 dev_warn(&vcdev
->cdev
->dev
,
1067 "Suspicious activity '%08x'\n", activity
);
1074 static void virtio_ccw_int_handler(struct ccw_device
*cdev
,
1075 unsigned long intparm
,
1078 __u32 activity
= intparm
& VIRTIO_CCW_INTPARM_MASK
;
1079 struct virtio_ccw_device
*vcdev
= dev_get_drvdata(&cdev
->dev
);
1081 struct virtqueue
*vq
;
1086 vcdev
->err
= PTR_ERR(irb
);
1087 virtio_ccw_check_activity(vcdev
, activity
);
1088 /* Don't poke around indicators, something's wrong. */
1091 /* Check if it's a notification from the host. */
1092 if ((intparm
== 0) &&
1093 (scsw_stctl(&irb
->scsw
) ==
1094 (SCSW_STCTL_ALERT_STATUS
| SCSW_STCTL_STATUS_PEND
))) {
1097 if (irb_is_error(irb
)) {
1098 /* Command reject? */
1099 if ((scsw_dstat(&irb
->scsw
) & DEV_STAT_UNIT_CHECK
) &&
1100 (irb
->ecw
[0] & SNS0_CMD_REJECT
))
1101 vcdev
->err
= -EOPNOTSUPP
;
1103 /* Map everything else to -EIO. */
1106 virtio_ccw_check_activity(vcdev
, activity
);
1107 for_each_set_bit(i
, &vcdev
->indicators
,
1108 sizeof(vcdev
->indicators
) * BITS_PER_BYTE
) {
1109 /* The bit clear must happen before the vring kick. */
1110 clear_bit(i
, &vcdev
->indicators
);
1112 vq
= virtio_ccw_vq_by_ind(vcdev
, i
);
1113 vring_interrupt(0, vq
);
1115 if (test_bit(0, &vcdev
->indicators2
)) {
1116 virtio_config_changed(&vcdev
->vdev
);
1117 clear_bit(0, &vcdev
->indicators2
);
1122 * We usually want to autoonline all devices, but give the admin
1123 * a way to exempt devices from this.
1125 #define __DEV_WORDS ((__MAX_SUBCHANNEL + (8*sizeof(long) - 1)) / \
1127 static unsigned long devs_no_auto
[__MAX_SSID
+ 1][__DEV_WORDS
];
1129 static char *no_auto
= "";
1131 module_param(no_auto
, charp
, 0444);
1132 MODULE_PARM_DESC(no_auto
, "list of ccw bus id ranges not to be auto-onlined");
1134 static int virtio_ccw_check_autoonline(struct ccw_device
*cdev
)
1136 struct ccw_dev_id id
;
1138 ccw_device_get_id(cdev
, &id
);
1139 if (test_bit(id
.devno
, devs_no_auto
[id
.ssid
]))
1144 static void virtio_ccw_auto_online(void *data
, async_cookie_t cookie
)
1146 struct ccw_device
*cdev
= data
;
1149 ret
= ccw_device_set_online(cdev
);
1151 dev_warn(&cdev
->dev
, "Failed to set online: %d\n", ret
);
1154 static int virtio_ccw_probe(struct ccw_device
*cdev
)
1156 cdev
->handler
= virtio_ccw_int_handler
;
1158 if (virtio_ccw_check_autoonline(cdev
))
1159 async_schedule(virtio_ccw_auto_online
, cdev
);
1163 static struct virtio_ccw_device
*virtio_grab_drvdata(struct ccw_device
*cdev
)
1165 unsigned long flags
;
1166 struct virtio_ccw_device
*vcdev
;
1168 spin_lock_irqsave(get_ccwdev_lock(cdev
), flags
);
1169 vcdev
= dev_get_drvdata(&cdev
->dev
);
1170 if (!vcdev
|| vcdev
->going_away
) {
1171 spin_unlock_irqrestore(get_ccwdev_lock(cdev
), flags
);
1174 vcdev
->going_away
= true;
1175 spin_unlock_irqrestore(get_ccwdev_lock(cdev
), flags
);
1179 static void virtio_ccw_remove(struct ccw_device
*cdev
)
1181 unsigned long flags
;
1182 struct virtio_ccw_device
*vcdev
= virtio_grab_drvdata(cdev
);
1184 if (vcdev
&& cdev
->online
) {
1185 if (vcdev
->device_lost
)
1186 virtio_break_device(&vcdev
->vdev
);
1187 unregister_virtio_device(&vcdev
->vdev
);
1188 spin_lock_irqsave(get_ccwdev_lock(cdev
), flags
);
1189 dev_set_drvdata(&cdev
->dev
, NULL
);
1190 spin_unlock_irqrestore(get_ccwdev_lock(cdev
), flags
);
1192 cdev
->handler
= NULL
;
1195 static int virtio_ccw_offline(struct ccw_device
*cdev
)
1197 unsigned long flags
;
1198 struct virtio_ccw_device
*vcdev
= virtio_grab_drvdata(cdev
);
1202 if (vcdev
->device_lost
)
1203 virtio_break_device(&vcdev
->vdev
);
1204 unregister_virtio_device(&vcdev
->vdev
);
1205 spin_lock_irqsave(get_ccwdev_lock(cdev
), flags
);
1206 dev_set_drvdata(&cdev
->dev
, NULL
);
1207 spin_unlock_irqrestore(get_ccwdev_lock(cdev
), flags
);
1211 static int virtio_ccw_set_transport_rev(struct virtio_ccw_device
*vcdev
)
1213 struct virtio_rev_info
*rev
;
1217 ccw
= kzalloc(sizeof(*ccw
), GFP_DMA
| GFP_KERNEL
);
1220 rev
= kzalloc(sizeof(*rev
), GFP_DMA
| GFP_KERNEL
);
1226 /* Set transport revision */
1227 ccw
->cmd_code
= CCW_CMD_SET_VIRTIO_REV
;
1229 ccw
->count
= sizeof(*rev
);
1230 ccw
->cda
= (__u32
)(unsigned long)rev
;
1232 vcdev
->revision
= VIRTIO_CCW_REV_MAX
;
1234 rev
->revision
= vcdev
->revision
;
1235 /* none of our supported revisions carry payload */
1237 ret
= ccw_io_helper(vcdev
, ccw
,
1238 VIRTIO_CCW_DOING_SET_VIRTIO_REV
);
1239 if (ret
== -EOPNOTSUPP
) {
1240 if (vcdev
->revision
== 0)
1242 * The host device does not support setting
1243 * the revision: let's operate it in legacy
1250 } while (ret
== -EOPNOTSUPP
);
1257 static int virtio_ccw_online(struct ccw_device
*cdev
)
1260 struct virtio_ccw_device
*vcdev
;
1261 unsigned long flags
;
1263 vcdev
= kzalloc(sizeof(*vcdev
), GFP_KERNEL
);
1265 dev_warn(&cdev
->dev
, "Could not get memory for virtio\n");
1269 vcdev
->config_block
= kzalloc(sizeof(*vcdev
->config_block
),
1270 GFP_DMA
| GFP_KERNEL
);
1271 if (!vcdev
->config_block
) {
1275 vcdev
->status
= kzalloc(sizeof(*vcdev
->status
), GFP_DMA
| GFP_KERNEL
);
1276 if (!vcdev
->status
) {
1281 vcdev
->is_thinint
= virtio_ccw_use_airq
; /* at least try */
1283 vcdev
->vdev
.dev
.parent
= &cdev
->dev
;
1284 vcdev
->vdev
.dev
.release
= virtio_ccw_release_dev
;
1285 vcdev
->vdev
.config
= &virtio_ccw_config_ops
;
1287 init_waitqueue_head(&vcdev
->wait_q
);
1288 INIT_LIST_HEAD(&vcdev
->virtqueues
);
1289 spin_lock_init(&vcdev
->lock
);
1290 mutex_init(&vcdev
->io_lock
);
1292 spin_lock_irqsave(get_ccwdev_lock(cdev
), flags
);
1293 dev_set_drvdata(&cdev
->dev
, vcdev
);
1294 spin_unlock_irqrestore(get_ccwdev_lock(cdev
), flags
);
1295 vcdev
->vdev
.id
.vendor
= cdev
->id
.cu_type
;
1296 vcdev
->vdev
.id
.device
= cdev
->id
.cu_model
;
1298 ret
= virtio_ccw_set_transport_rev(vcdev
);
1302 ret
= register_virtio_device(&vcdev
->vdev
);
1304 dev_warn(&cdev
->dev
, "Failed to register virtio device: %d\n",
1310 spin_lock_irqsave(get_ccwdev_lock(cdev
), flags
);
1311 dev_set_drvdata(&cdev
->dev
, NULL
);
1312 spin_unlock_irqrestore(get_ccwdev_lock(cdev
), flags
);
1313 put_device(&vcdev
->vdev
.dev
);
1317 kfree(vcdev
->status
);
1318 kfree(vcdev
->config_block
);
1324 static int virtio_ccw_cio_notify(struct ccw_device
*cdev
, int event
)
1327 struct virtio_ccw_device
*vcdev
= dev_get_drvdata(&cdev
->dev
);
1330 * Make sure vcdev is set
1331 * i.e. set_offline/remove callback not already running
1338 vcdev
->device_lost
= true;
1351 static struct ccw_device_id virtio_ids
[] = {
1352 { CCW_DEVICE(0x3832, 0) },
1356 #ifdef CONFIG_PM_SLEEP
1357 static int virtio_ccw_freeze(struct ccw_device
*cdev
)
1359 struct virtio_ccw_device
*vcdev
= dev_get_drvdata(&cdev
->dev
);
1361 return virtio_device_freeze(&vcdev
->vdev
);
1364 static int virtio_ccw_restore(struct ccw_device
*cdev
)
1366 struct virtio_ccw_device
*vcdev
= dev_get_drvdata(&cdev
->dev
);
1369 ret
= virtio_ccw_set_transport_rev(vcdev
);
1373 return virtio_device_restore(&vcdev
->vdev
);
1377 static struct ccw_driver virtio_ccw_driver
= {
1379 .owner
= THIS_MODULE
,
1380 .name
= "virtio_ccw",
1383 .probe
= virtio_ccw_probe
,
1384 .remove
= virtio_ccw_remove
,
1385 .set_offline
= virtio_ccw_offline
,
1386 .set_online
= virtio_ccw_online
,
1387 .notify
= virtio_ccw_cio_notify
,
1388 .int_class
= IRQIO_VIR
,
1389 #ifdef CONFIG_PM_SLEEP
1390 .freeze
= virtio_ccw_freeze
,
1391 .thaw
= virtio_ccw_restore
,
1392 .restore
= virtio_ccw_restore
,
1396 static int __init
pure_hex(char **cp
, unsigned int *val
, int min_digit
,
1397 int max_digit
, int max_val
)
1404 while (diff
<= max_digit
) {
1405 int value
= hex_to_bin(**cp
);
1409 *val
= *val
* 16 + value
;
1414 if ((diff
< min_digit
) || (diff
> max_digit
) || (*val
> max_val
))
1420 static int __init
parse_busid(char *str
, unsigned int *cssid
,
1421 unsigned int *ssid
, unsigned int *devno
)
1432 ret
= pure_hex(&str_work
, cssid
, 1, 2, __MAX_CSSID
);
1433 if (ret
|| (str_work
[0] != '.'))
1436 ret
= pure_hex(&str_work
, ssid
, 1, 1, __MAX_SSID
);
1437 if (ret
|| (str_work
[0] != '.'))
1440 ret
= pure_hex(&str_work
, devno
, 4, 4, __MAX_SUBCHANNEL
);
1441 if (ret
|| (str_work
[0] != '\0'))
1449 static void __init
no_auto_parse(void)
1451 unsigned int from_cssid
, to_cssid
, from_ssid
, to_ssid
, from
, to
;
1456 while ((parm
= strsep(&str
, ","))) {
1457 rc
= parse_busid(strsep(&parm
, "-"), &from_cssid
,
1462 rc
= parse_busid(parm
, &to_cssid
,
1464 if ((from_ssid
> to_ssid
) ||
1465 ((from_ssid
== to_ssid
) && (from
> to
)))
1468 to_cssid
= from_cssid
;
1469 to_ssid
= from_ssid
;
1474 while ((from_ssid
< to_ssid
) ||
1475 ((from_ssid
== to_ssid
) && (from
<= to
))) {
1476 set_bit(from
, devs_no_auto
[from_ssid
]);
1478 if (from
> __MAX_SUBCHANNEL
) {
1486 static int __init
virtio_ccw_init(void)
1488 /* parse no_auto string before we do anything further */
1490 return ccw_driver_register(&virtio_ccw_driver
);
1492 device_initcall(virtio_ccw_init
);