Lines Matching refs:info
204 struct xencons_info *info; in xen_hvm_console_init() local
209 info = vtermno_to_xencons(HVC_COOKIE); in xen_hvm_console_init()
210 if (!info) { in xen_hvm_console_init()
211 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); in xen_hvm_console_init()
212 if (!info) in xen_hvm_console_init()
214 } else if (info->intf != NULL) { in xen_hvm_console_init()
227 info->evtchn = v; in xen_hvm_console_init()
233 info->intf = xen_remap(gfn << XEN_PAGE_SHIFT, XEN_PAGE_SIZE); in xen_hvm_console_init()
234 if (info->intf == NULL) in xen_hvm_console_init()
236 info->vtermno = HVC_COOKIE; in xen_hvm_console_init()
239 list_add_tail(&info->list, &xenconsoles); in xen_hvm_console_init()
244 kfree(info); in xen_hvm_console_init()
250 struct xencons_info *info; in xen_pv_console_init() local
258 info = vtermno_to_xencons(HVC_COOKIE); in xen_pv_console_init()
259 if (!info) { in xen_pv_console_init()
260 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); in xen_pv_console_init()
261 if (!info) in xen_pv_console_init()
263 } else if (info->intf != NULL) { in xen_pv_console_init()
267 info->evtchn = xen_start_info->console.domU.evtchn; in xen_pv_console_init()
269 info->intf = gfn_to_virt(xen_start_info->console.domU.mfn); in xen_pv_console_init()
270 info->vtermno = HVC_COOKIE; in xen_pv_console_init()
273 list_add_tail(&info->list, &xenconsoles); in xen_pv_console_init()
281 struct xencons_info *info; in xen_initial_domain_console_init() local
286 info = vtermno_to_xencons(HVC_COOKIE); in xen_initial_domain_console_init()
287 if (!info) { in xen_initial_domain_console_init()
288 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); in xen_initial_domain_console_init()
289 if (!info) in xen_initial_domain_console_init()
293 info->irq = bind_virq_to_irq(VIRQ_CONSOLE, 0, false); in xen_initial_domain_console_init()
294 info->vtermno = HVC_COOKIE; in xen_initial_domain_console_init()
297 list_add_tail(&info->list, &xenconsoles); in xen_initial_domain_console_init()
303 static void xen_console_update_evtchn(struct xencons_info *info) in xen_console_update_evtchn() argument
311 info->evtchn = v; in xen_console_update_evtchn()
313 info->evtchn = xen_start_info->console.domU.evtchn; in xen_console_update_evtchn()
318 struct xencons_info *info = vtermno_to_xencons(HVC_COOKIE); in xen_console_resume() local
319 if (info != NULL && info->irq) { in xen_console_resume()
321 xen_console_update_evtchn(info); in xen_console_resume()
322 rebind_evtchn_irq(info->evtchn, info->irq); in xen_console_resume()
326 static void xencons_disconnect_backend(struct xencons_info *info) in xencons_disconnect_backend() argument
328 if (info->irq > 0) in xencons_disconnect_backend()
329 unbind_from_irqhandler(info->irq, NULL); in xencons_disconnect_backend()
330 info->irq = 0; in xencons_disconnect_backend()
331 if (info->evtchn > 0) in xencons_disconnect_backend()
332 xenbus_free_evtchn(info->xbdev, info->evtchn); in xencons_disconnect_backend()
333 info->evtchn = 0; in xencons_disconnect_backend()
334 if (info->gntref > 0) in xencons_disconnect_backend()
335 gnttab_free_grant_references(info->gntref); in xencons_disconnect_backend()
336 info->gntref = 0; in xencons_disconnect_backend()
337 if (info->hvc != NULL) in xencons_disconnect_backend()
338 hvc_remove(info->hvc); in xencons_disconnect_backend()
339 info->hvc = NULL; in xencons_disconnect_backend()
342 static void xencons_free(struct xencons_info *info) in xencons_free() argument
344 free_page((unsigned long)info->intf); in xencons_free()
345 info->intf = NULL; in xencons_free()
346 info->vtermno = 0; in xencons_free()
347 kfree(info); in xencons_free()
350 static int xen_console_remove(struct xencons_info *info) in xen_console_remove() argument
352 xencons_disconnect_backend(info); in xen_console_remove()
354 list_del(&info->list); in xen_console_remove()
356 if (info->xbdev != NULL) in xen_console_remove()
357 xencons_free(info); in xen_console_remove()
360 iounmap(info->intf); in xen_console_remove()
361 kfree(info); in xen_console_remove()
373 struct xencons_info *info) in xencons_connect_backend() argument
382 info->evtchn = evtchn; in xencons_connect_backend()
386 info->irq = irq; in xencons_connect_backend()
388 info->hvc = hvc_alloc(xenbus_devid_to_vtermno(devid), in xencons_connect_backend()
390 if (IS_ERR(info->hvc)) in xencons_connect_backend()
391 return PTR_ERR(info->hvc); in xencons_connect_backend()
395 info->gntref = gref_head; in xencons_connect_backend()
399 gnttab_grant_foreign_access_ref(ref, info->xbdev->otherend_id, in xencons_connect_backend()
400 virt_to_gfn(info->intf), 0); in xencons_connect_backend()
436 struct xencons_info *info; in xencons_probe() local
442 info = kzalloc(sizeof(struct xencons_info), GFP_KERNEL); in xencons_probe()
443 if (!info) in xencons_probe()
445 dev_set_drvdata(&dev->dev, info); in xencons_probe()
446 info->xbdev = dev; in xencons_probe()
447 info->vtermno = xenbus_devid_to_vtermno(devid); in xencons_probe()
448 info->intf = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO); in xencons_probe()
449 if (!info->intf) in xencons_probe()
452 ret = xencons_connect_backend(dev, info); in xencons_probe()
456 list_add_tail(&info->list, &xenconsoles); in xencons_probe()
465 xencons_disconnect_backend(info); in xencons_probe()
466 xencons_free(info); in xencons_probe()
472 struct xencons_info *info = dev_get_drvdata(&dev->dev); in xencons_resume() local
474 xencons_disconnect_backend(info); in xencons_resume()
475 memset(info->intf, 0, XEN_PAGE_SIZE); in xencons_resume()
476 return xencons_connect_backend(dev, info); in xencons_resume()
525 struct xencons_info *info; in xen_hvc_init() local
536 info = vtermno_to_xencons(HVC_COOKIE); in xen_hvc_init()
546 info = vtermno_to_xencons(HVC_COOKIE); in xen_hvc_init()
547 info->irq = bind_evtchn_to_irq(info->evtchn); in xen_hvc_init()
549 if (info->irq < 0) in xen_hvc_init()
550 info->irq = 0; /* NO_IRQ */ in xen_hvc_init()
552 irq_set_noprobe(info->irq); in xen_hvc_init()
554 info->hvc = hvc_alloc(HVC_COOKIE, info->irq, ops, 256); in xen_hvc_init()
555 if (IS_ERR(info->hvc)) { in xen_hvc_init()
556 r = PTR_ERR(info->hvc); in xen_hvc_init()
558 list_del(&info->list); in xen_hvc_init()
560 if (info->irq) in xen_hvc_init()
561 unbind_from_irqhandler(info->irq, NULL); in xen_hvc_init()
562 kfree(info); in xen_hvc_init()