Lines Matching defs:info

75 static void xenfb_send_event(struct xenfb_info *info,
80 prod = info->page->out_prod;
83 XENFB_OUT_RING_REF(info->page, prod) = *event;
85 info->page->out_prod = prod + 1;
87 notify_remote_via_irq(info->irq);
90 static void xenfb_do_update(struct xenfb_info *info,
103 xenfb_send_event(info, &event);
106 static void xenfb_do_resize(struct xenfb_info *info)
111 event.resize = info->resize;
114 xenfb_send_event(info, &event);
117 static int xenfb_queue_full(struct xenfb_info *info)
121 prod = info->page->out_prod;
122 cons = info->page->out_cons;
126 static void xenfb_handle_resize_dpy(struct xenfb_info *info)
130 spin_lock_irqsave(&info->resize_lock, flags);
131 if (info->resize_dpy) {
132 if (!xenfb_queue_full(info)) {
133 info->resize_dpy = 0;
134 xenfb_do_resize(info);
137 spin_unlock_irqrestore(&info->resize_lock, flags);
140 static void xenfb_refresh(struct xenfb_info *info,
147 xenfb_handle_resize_dpy(info);
149 if (!info->update_wanted)
152 spin_lock_irqsave(&info->dirty_lock, flags);
155 if (info->y1 < y1)
156 y1 = info->y1;
157 if (info->y2 > y2)
158 y2 = info->y2;
159 if (info->x1 < x1)
160 x1 = info->x1;
161 if (info->x2 > x2)
162 x2 = info->x2;
164 if (xenfb_queue_full(info)) {
166 info->x1 = x1;
167 info->x2 = x2;
168 info->y1 = y1;
169 info->y2 = y2;
170 spin_unlock_irqrestore(&info->dirty_lock, flags);
175 info->x1 = info->y1 = INT_MAX;
176 info->x2 = info->y2 = 0;
178 spin_unlock_irqrestore(&info->dirty_lock, flags);
181 xenfb_do_update(info, x1, y1, x2 - x1 + 1, y2 - y1 + 1);
186 struct xenfb_info *info = fb_info->par;
205 xenfb_refresh(info, 0, miny, fb_info->var.xres, maxy - miny + 1);
215 struct fb_info *info)
219 if (regno > info->cmap.len)
223 red = CNVT_TOHW(red, info->var.red.length);
224 green = CNVT_TOHW(green, info->var.green.length);
225 blue = CNVT_TOHW(blue, info->var.blue.length);
228 v = (red << info->var.red.offset) |
229 (green << info->var.green.offset) |
230 (blue << info->var.blue.offset);
232 switch (info->var.bits_per_pixel) {
236 ((u32 *)info->pseudo_palette)[regno] = v;
244 xenfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
249 xenfb_info = info->par;
266 var->xres <= info->fix.line_length / (XENFB_DEPTH / 8) &&
267 required_mem_len <= info->fix.smem_len) {
275 static int xenfb_set_par(struct fb_info *info)
280 xenfb_info = info->par;
284 xenfb_info->resize.width = info->var.xres;
285 xenfb_info->resize.height = info->var.yres;
286 xenfb_info->resize.stride = info->fix.line_length;
287 xenfb_info->resize.depth = info->var.bits_per_pixel;
294 static void xenfb_defio_damage_range(struct fb_info *info, off_t off, size_t len)
296 struct xenfb_info *xenfb_info = info->par;
301 static void xenfb_defio_damage_area(struct fb_info *info, u32 x, u32 y,
304 struct xenfb_info *xenfb_info = info->par;
328 struct xenfb_info *info = dev_id;
329 struct xenfb_page *page = info->page;
332 info->page->in_cons = info->page->in_prod;
333 notify_remote_via_irq(info->irq);
337 xenfb_refresh(info, INT_MAX, INT_MAX, -INT_MAX, -INT_MAX);
345 struct xenfb_info *info;
351 info = kzalloc(sizeof(*info), GFP_KERNEL);
352 if (info == NULL) {
353 xenbus_dev_fatal(dev, -ENOMEM, "allocating info structure");
380 dev_set_drvdata(&dev->dev, info);
381 info->xbdev = dev;
382 info->irq = -1;
383 info->x1 = info->y1 = INT_MAX;
384 spin_lock_init(&info->dirty_lock);
385 spin_lock_init(&info->resize_lock);
387 info->fb = vzalloc(fb_size);
388 if (info->fb == NULL)
391 info->nr_pages = (fb_size + PAGE_SIZE - 1) >> PAGE_SHIFT;
393 info->gfns = vmalloc(array_size(sizeof(unsigned long), info->nr_pages));
394 if (!info->gfns)
398 info->page = (void *)__get_free_page(GFP_KERNEL | __GFP_ZERO);
399 if (!info->page)
409 fb_info->par = info;
412 fb_info->screen_buffer = info->fb;
448 xenfb_init_shared_page(info, fb_info);
450 ret = xenfb_connect_backend(dev, info);
461 info->fb_info = fb_info;
499 struct xenfb_info *info = dev_get_drvdata(&dev->dev);
501 xenfb_disconnect_backend(info);
502 xenfb_init_shared_page(info, info->fb_info);
503 return xenfb_connect_backend(dev, info);
508 struct xenfb_info *info = dev_get_drvdata(&dev->dev);
510 xenfb_disconnect_backend(info);
511 if (info->fb_info) {
512 fb_deferred_io_cleanup(info->fb_info);
513 unregister_framebuffer(info->fb_info);
514 fb_dealloc_cmap(&info->fb_info->cmap);
515 framebuffer_release(info->fb_info);
517 free_page((unsigned long)info->page);
518 vfree(info->gfns);
519 vfree(info->fb);
520 kfree(info);
528 static void xenfb_init_shared_page(struct xenfb_info *info,
532 int epd = PAGE_SIZE / sizeof(info->gfns[0]);
534 for (i = 0; i < info->nr_pages; i++)
535 info->gfns[i] = vmalloc_to_gfn(info->fb + i * PAGE_SIZE);
537 for (i = 0; i * epd < info->nr_pages; i++)
538 info->page->pd[i] = vmalloc_to_gfn(&info->gfns[i * epd]);
540 info->page->width = fb_info->var.xres;
541 info->page->height = fb_info->var.yres;
542 info->page->depth = fb_info->var.bits_per_pixel;
543 info->page->line_length = fb_info->fix.line_length;
544 info->page->mem_length = fb_info->fix.smem_len;
545 info->page->in_cons = info->page->in_prod = 0;
546 info->page->out_cons = info->page->out_prod = 0;
550 struct xenfb_info *info)
559 0, dev->devicetype, info);
572 virt_to_gfn(info->page));
595 info->irq = irq;
602 unbind_from_irqhandler(irq, info);
606 static void xenfb_disconnect_backend(struct xenfb_info *info)
609 info->update_wanted = 0;
610 if (info->irq >= 0)
611 unbind_from_irqhandler(info->irq, info);
612 info->irq = -1;
618 struct xenfb_info *info = dev_get_drvdata(&dev->dev);
642 if (xenbus_read_unsigned(info->xbdev->otherend,
644 info->update_wanted = 1;
646 info->feature_resize = xenbus_read_unsigned(dev->otherend,