Lines Matching refs:sna
47 #include "sna.h"
202 static void sna_set_desired_mode(struct sna *sna)
204 ScrnInfoPtr scrn = sna->scrn;
214 sna_mode_check(sna);
225 struct sna *sna = to_sna_from_screen(screen);
232 assert(sna->scrn == xf86ScreenToScrn(screen));
233 assert(to_screen_from_sna(sna) == screen);
239 sna_accel_create(sna);
242 if (sna->flags & SNA_IS_HOSTED)
268 assert(sna->front == new_front);
271 sna_mode_set_primary(sna);
279 if (intel_get_master(sna->dev) == 0) {
281 if (serverGeneration == 1 && (sna->flags & SNA_IS_HOSTED) == 0)
282 sna_copy_fbcon(sna);
284 sna_set_desired_mode(sna);
293 struct sna *sna = to_sna(scrn);
311 if (sna->mode.hidden == 0 && !(sna->flags & SNA_NO_DPMS)) {
319 sna->mode.hidden = sna->mode.front_active + 1;
320 sna->mode.front_active = 0;
325 if (sna->mode.hidden != 0) {
328 sna->mode.front_active = sna->mode.hidden - 1;
329 sna->mode.hidden = 0;
346 __FUNCTION__, sna->mode.hidden, sna->mode.front_active, changed));
374 static bool has_vsync(struct sna *sna)
376 if (sna->flags & SNA_IS_HOSTED)
431 static void setup_dri(struct sna *sna)
435 sna->dri2.available = false;
436 sna->dri2.enable = false;
437 sna->dri3.available = false;
438 sna->dri3.enable = false;
439 sna->dri3.override = false;
441 level = intel_option_cast_to_unsigned(sna->Options, OPTION_DRI, DEFAULT_DRI_LEVEL);
443 sna->dri3.available = !!xf86LoadSubModule(sna->scrn, "dri3");
444 sna->dri3.override =
445 !sna->dri3.available ||
446 xf86IsOptionSet(sna->Options, OPTION_DRI);
447 if (level >= 3 && sna->kgem.gen >= 040)
448 sna->dri3.enable = sna->dri3.available;
451 sna->dri2.available = !!xf86LoadSubModule(sna->scrn, "dri2");
453 sna->dri2.enable = sna->dri2.available;
457 static bool enable_tear_free(struct sna *sna)
459 if (sna->flags & SNA_LINEAR_FB)
466 if (sna_mode_wants_tear_free(sna))
472 static bool setup_tear_free(struct sna *sna)
477 if (sna->flags & SNA_LINEAR_FB)
480 if ((sna->flags & SNA_HAS_FLIP) == 0) {
485 if (!xf86GetOptValBool(sna->Options, OPTION_TEAR_FREE, &enable)) {
486 enable = enable_tear_free(sna);
492 sna->flags |= SNA_WANT_TEAR_FREE | SNA_TEAR_FREE;
495 xf86DrvMsg(sna->scrn->scrnIndex, from, "TearFree %sabled\n",
496 sna->flags & SNA_TEAR_FREE ? "en" : "dis");
497 return sna->flags & SNA_TEAR_FREE;
515 struct sna *sna;
550 if (posix_memalign((void **)&sna, 4096, sizeof(*sna)))
553 memset(sna, 0, sizeof(*sna)); /* should be unnecessary */
555 sna->info = (void *)((uintptr_t)scrn->driverPrivate & ~3);
556 scrn->driverPrivate = sna;
557 sna->scrn = scrn;
559 sna->cpu_features = sna_cpu_detect();
560 sna->acpi.fd = sna_acpi_open();
562 sna = to_sna(scrn);
563 sna->pEnt = pEnt;
564 sna->flags = probe;
572 sna->dev = intel_get_device(scrn, &fd);
573 if (sna->dev == NULL) {
580 if (hosted() && (sna->flags & SNA_IS_HOSTED) == 0) {
586 intel_detect_chipset(scrn, sna->dev);
589 sna_cpu_features_to_string(sna->cpu_features, buf),
603 if ((sna->flags & SNA_IS_HOSTED) ||
619 sna->Options = intel_options_get(scrn);
620 if (sna->Options == NULL)
625 kgem_init(&sna->kgem, fd,
627 sna->info->gen);
629 if (xf86ReturnOptValBool(sna->Options, OPTION_TILING_FB, FALSE))
630 sna
631 if (!sna->kgem.can_fence)
632 sna->flags |= SNA_LINEAR_FB;
634 if (!xf86ReturnOptValBool(sna->Options, OPTION_SWAPBUFFERS_WAIT, TRUE))
635 sna->flags |= SNA_NO_WAIT;
636 DBG(("%s: swapbuffer wait? %s\n", __FUNCTION__, sna->flags & SNA_NO_WAIT ? "disabled" : "enabled"));
638 if (!has_vsync(sna) ||
639 !xf86ReturnOptValBool(sna->Options, OPTION_VSYNC, TRUE))
640 sna->flags |= SNA_NO_VSYNC;
641 DBG(("%s: vsync? %s\n", __FUNCTION__, sna->flags & SNA_NO_VSYNC ? "disabled" : "enabled"));
643 if (sna->flags & SNA_IS_HOSTED ||
644 !xf86ReturnOptValBool(sna->Options, OPTION_PAGEFLIP, TRUE))
645 sna->flags |= SNA_NO_FLIP;
646 DBG(("%s: page flips? %s\n", __FUNCTION__, sna->flags & SNA_NO_FLIP ? "disabled" : "enabled"));
648 if ((sna->flags & (SNA_NO_VSYNC | SNA_NO_FLIP | SNA_NO_WAIT)) == 0 &&
649 xf86ReturnOptValBool(sna->Options, OPTION_TRIPLE_BUFFER, TRUE))
650 sna->flags |= SNA_TRIPLE_BUFFER;
651 DBG(("%s: triple buffer? %s\n", __FUNCTION__, sna->flags & SNA_TRIPLE_BUFFER ? "enabled" : "disabled"));
653 if (xf86ReturnOptValBool(sna->Options, OPTION_CRTC_PIXMAPS, FALSE)) {
655 sna->flags |= SNA_FORCE_SHADOW;
658 if (!sna_mode_pre_init(scrn, sna)) {
665 if (!setup_tear_free(sna) && sna_mode_wants_tear_free(sna))
666 sna->kgem.needs_dirtyfb = sna->kgem.has_dirtyfb;
671 setup_dri(sna);
673 sna->present.available = false;
674 if (xf86ReturnOptValBool(sna->Options, OPTION_PRESENT, TRUE)) {
676 sna->present.available = !!xf86LoadSubModule(scrn, "present");
680 sna_acpi_init(sna);
685 scrn->driverPrivate = (void *)((uintptr_t)sna->info | (sna->flags & SNA_IS_SLAVED) | 2);
686 if (sna->dev)
687 intel_put_device(sna->dev);
688 free(sna);
692 static bool has_shadow(struct sna *sna)
694 if (!sna->mode.shadow_enabled)
697 assert(sna->mode.shadow_damage);
698 if (RegionNil(DamageRegion(sna->mode.shadow_damage)))
701 return sna->mode.flip_active == 0;
709 struct sna *sna = to_sna(xf86Screens[arg]);
711 struct sna *sna = to_sna_from_screen(arg);
717 has_shadow(sna)));
719 sna->BlockHandler(BLOCKHANDLER_ARGS);
721 if (*tv == NULL || ((*tv)->tv_usec | (*tv)->tv_sec) || has_shadow(sna))
722 sna_accel_block(sna, tv);
729 struct sna *sna = to_sna(xf86Screens[arg]);
731 struct sna *sna = to_sna_from_screen(arg);
740 sna_acpi_wakeup(sna, read_mask);
742 sna->WakeupHandler(WAKEUPHANDLER_ARGS);
744 if (FD_ISSET(sna->kgem.fd, (fd_set*)read_mask)) {
745 sna_mode_wakeup(sna);
747 FD_CLR(sna->kgem.fd, (fd_set*)read_mask);
754 struct sna *sna = data;
759 *timeout, has_shadow(sna)));
764 if (!has_shadow(sna))
776 sna_accel_block(sna, &tvp);
788 struct sna *sna = closure;
795 pfd.fd = udev_monitor_get_fd(sna->uevent_monitor);
798 if (fstat(sna->kgem.fd, &s))
806 dev = udev_monitor_receive_device(sna->uevent_monitor);
822 hotplug |= sna_mode_find_hotplug_connector(sna, atoi(str));
824 sna->flags |= SNA_REPROBE;
835 __FUNCTION__, sna->scrn->vtSema));
837 if (sna->scrn->vtSema)
838 sna_mode_discover(sna, true);
840 sna->flags |= SNA_REPROBE;
854 sna_uevent_init(struct sna *sna)
860 if (sna->flags & SNA_IS_HOSTED)
872 if (xf86ReturnOptValBool(sna->Options, OPTION_HOTPLUG, TRUE))
889 sna->uevent_handler = xf86AddGeneralHandler(udev_monitor_get_fd(mon),
890 sna_handle_uevents, sna);
891 if (!sna->uevent_handler)
894 sna->uevent_monitor = mon;
896 xf86DrvMsg(sna->scrn->scrnIndex, from,
898 sna->uevent_monitor ? "enabled" : "disabled");
908 static bool sna_uevent_poll(struct sna *sna)
910 if (sna->uevent_monitor == NULL)
913 sna_handle_uevents(udev_monitor_get_fd(sna->uevent_monitor), sna);
918 sna_uevent_fini(struct sna *sna)
922 if (sna->uevent_handler == NULL)
925 xf86RemoveGeneralHandler(sna->uevent_handler);
927 u = udev_monitor_get_udev(sna->uevent_monitor);
928 udev_monitor_unref(sna->uevent_monitor);
931 sna->uevent_handler = NULL;
932 sna->uevent_monitor = NULL;
937 static void sna_uevent_init(struct sna *sna) { }
938 static bool sna_uevent_poll(struct sna *sna) { return false; }
939 static void sna_uevent_fini(struct sna *sna) { }
945 struct sna *sna = to_sna_from_screen(screen);
949 if (!sna_uevent_poll(sna))
950 sna_mode_discover(sna, false);
952 return sna->mode.rrGetInfo(screen, rotations);
958 struct sna *sna = to_sna(scrn);
962 sna_mode_reset(sna);
963 sna_accel_leave(sna);
965 if (scrn->vtSema && intel_put_master(sna->dev))
975 struct sna *sna = to_sna(scrn);
984 sna);
987 sna_uevent_fini(sna);
988 sna_mode_close(sna);
990 if (sna->present.open) {
991 sna_present_close(sna, screen);
992 sna->present.open = false;
995 if (sna->dri3.open) {
996 sna_dri3_close(sna, screen);
997 sna->dri3.open = false;
1000 if (sna->dri2.open) {
1001 sna_dri2_close(sna, screen);
1002 sna->dri2.open = false;
1005 if (sna->front) {
1006 screen->DestroyPixmap(sna->front);
1007 sna->front = NULL;
1011 intel_put_master(sna->dev);
1015 return sna->CloseScreen(CLOSE_SCREEN_ARGS);
1020 struct sna *sna = to_sna_from_screen(screen);
1026 sna_accel_close(sna);
1027 sna_video_close(sna);
1082 static void sna_dri_init(struct sna *sna, ScreenPtr screen)
1086 if (sna->dri2.enable)
1087 sna->dri2.open = sna_dri2_open(sna, screen);
1088 if (sna->dri2.open)
1092 if (sna->dri3.enable || (!sna->dri2.open && !sna->dri3.override))
1093 sna->dri3.open = sna_dri3_open(sna, screen);
1094 if (sna->dri3.open)
1098 xf86DrvMsg(sna->scrn->scrnIndex, X_INFO,
1103 sna_mode_init(struct sna *sna, ScreenPtr screen)
1116 sna->mode.rrGetInfo = rp->rrGetInfo;
1120 TimerSet(NULL, 0, COLDPLUG_DELAY_MS, sna_mode_coldplug, sna);
1130 struct sna *sna = to_sna(scrn);
1140 assert(sna->scrn == scrn);
1141 assert(to_screen_from_sna(sna) == NULL || /* set afterwards */
1142 to_screen_from_sna(sna) == screen);
1144 assert(sna->freed_pixmap == NULL);
1149 scrn->videoRam = sna->kgem.aperture_mappable * 4; /* Page to KiB */
1190 if (!sna_accel_init(screen, sna)) {
1203 if (sna_cursors_init(screen, sna))
1211 sna->BlockHandler = screen->BlockHandler;
1214 sna->WakeupHandler = screen->WakeupHandler;
1219 sna);
1225 sna->CloseScreen = screen->CloseScreen;
1228 if (!sna_mode_init(sna, screen))
1235 if (sna->mode.num_real_crtc && (scrn->rgbBits <= 8 ||
1244 sna->flags |= SNA_NO_DPMS;
1247 sna_uevent_init(sna);
1248 sna_video_init(sna, screen);
1249 sna_dri_init(sna, screen);
1251 if (sna->present.available)
1252 sna->present.open = sna_present_open(sna, screen);
1253 if (sna->present.open)
1254 xf86DrvMsg(sna->scrn->scrnIndex, X_INFO,
1260 sna->suspended = FALSE;
1275 struct sna *sna = to_sna(scrn);
1277 DBG(("%s [scrn=%p, sna=%p]\n", __FUNCTION__, scrn, sna));
1278 if (sna == NULL || (uintptr_t)sna & 3) /* beware thieves */
1281 scrn->driverPrivate = (void *)((uintptr_t)sna->info | (sna->flags & SNA_IS_SLAVED) | 2);
1283 sna_mode_fini(sna);
1284 sna_acpi_fini(sna);
1286 intel_put_device(sna->dev);
1287 free(sna);
1293 struct sna *sna = to_sna(scrn);
1296 if (intel_get_master(sna->dev))
1300 sna_accel_enter(sna);
1302 if (sna->flags & SNA_REPROBE) {
1304 sna_mode_discover(sna, true);
1307 sna_set_desired_mode(sna);
1340 struct sna *sna = to_sna(scrn);
1350 if (!undo && !sna->suspended) {
1352 sna->suspended = TRUE;
1354 } else if (undo && sna->suspended) {
1357 sna->suspended = FALSE;
1363 if (sna->suspended) {
1366 sna->suspended = FALSE;
1425 "SNA compiled from %s\n", git_version);
1428 "SNA compiled: %s\n", BUILDER_DESCRIPTION);
1431 ErrorF("SNA compiled with full debug logging; expect to run slowly\n");
1435 "SNA compiled with assertions enabled\n");
1439 "SNA compiled with synchronous rendering\n");
1443 "SNA compiled with memory allocation reporting enabled\n");
1447 "SNA compiled with extra pixmap/damage validation\n");
1451 "SNA compiled for use with valgrind\n");
1452 VALGRIND_PRINTF("SNA compiled for use with valgrind\n");