| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | set -e |
| 4 | |
| Nico Huber | 88f3c98 | 2017-08-28 13:31:38 +0200 | [diff] [blame] | 5 | usage="Usage: $0 [<delay seconds> [(0|90|128|270)]]\n" |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 6 | |
| 7 | err_msgs= |
| 8 | command -v chvt >/dev/null || err_msgs="${err_msgs}"'Need `chvt`\n' |
| 9 | command -v openvt >/dev/null || err_msgs="${err_msgs}"'Need `openvt`\n' |
| 10 | command -v fgconsole >/dev/null || err_msgs="${err_msgs}"'Need `fgconsole`\n' |
| 11 | [ -n "$err_msgs" ] && err_msgs="${err_msgs}"'e.g. install the `kbd` package\n' |
| 12 | |
| 13 | [ -x build/gfx_test ] || \ |
| 14 | err_msgs="${err_msgs}"'Please run from *libgfxinit* source dir and build `gfx_test` first.\n' |
| 15 | |
| Nico Huber | 88f3c98 | 2017-08-28 13:31:38 +0200 | [diff] [blame] | 16 | [ "$#" -gt 2 ] && err_msgs="${err_msgs}${usage}" |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 17 | |
| 18 | if [ -n "$err_msgs" ]; then |
| 19 | printf "$err_msgs" |
| 20 | exit 1 |
| 21 | fi |
| 22 | |
| 23 | if [ "$#" -lt 1 ]; then |
| 24 | # default duration of 5s |
| 25 | set 5 |
| 26 | fi |
| 27 | |
| 28 | reload_i915=0 |
| 29 | prepare_vt() { |
| 30 | # switch VT, we might be in X |
| 31 | orig_vt=`fgconsole` |
| 32 | openvt -s -- true |
| 33 | |
| 34 | # poll until the VT switch is done |
| 35 | while [ `fgconsole` -eq $orig_vt ]; do :; done |
| 36 | |
| 37 | # take i915 out of charge |
| Nico Huber | 7628493 | 2017-11-28 13:22:04 +0100 | [diff] [blame^] | 38 | for vtcon in /sys/devices/virtual/vtconsole/vtcon*; do |
| 39 | if grep -q frame\ buffer $vtcon/name >/dev/null 2>&1; then |
| 40 | echo 0 >$vtcon/bind |
| 41 | break |
| 42 | fi |
| 43 | done |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 44 | |
| 45 | # try unloading it |
| Nico Huber | 7628493 | 2017-11-28 13:22:04 +0100 | [diff] [blame^] | 46 | if modprobe -r i915 >/dev/null 2>&1; then |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 47 | reload_i915=1 |
| 48 | fi |
| 49 | } |
| 50 | |
| 51 | restore_vt() { |
| 52 | # reload i915 |
| 53 | if [ $reload_i915 -eq 1 ]; then |
| Nico Huber | 7628493 | 2017-11-28 13:22:04 +0100 | [diff] [blame^] | 54 | modprobe i915 modeset=1 |
| 55 | else |
| 56 | # put i915 back in charge |
| 57 | for vtcon in /sys/devices/virtual/vtconsole/vtcon*; do |
| 58 | if grep -q dummy $vtcon/name >/dev/null 2>&1; then |
| 59 | echo 0 >$vtcon/bind |
| 60 | break |
| 61 | fi |
| 62 | done |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 63 | fi |
| 64 | |
| Nico Huber | 3b654a0 | 2017-07-15 22:27:14 +0200 | [diff] [blame] | 65 | # return to original VT |
| 66 | chvt $orig_vt |
| 67 | } |
| 68 | |
| 69 | prepare_vt |
| 70 | |
| 71 | build/gfx_test "$@" || true |
| 72 | |
| 73 | restore_vt |