1# This file describes the properties of a given virtual device configuration file. 2# 3# Note: Most top-level properties are boolean that control whether a feature is 4# present or not. Sub-features that depend on it are ignored if their 5# parent is set to 'false' or 'no' 6# 7# This file is parsed by 'android/scripts/gen-hw-config.py' to generate 8# 'android/avd/hw-config-defs.h'. The latter is a special header containing 9# macro statements that is used several times: 10# 11# - once to define the fields of the AndroidHwConfig structure 12# (see android/avd/hw-config.h) 13# 14# - once to implement the hardware configuration loader 15# (see android/avd/hw-config.h) 16# 17# It is also packaged by the SDK and parsed by tools to let the developers 18# create AVDs. 19# 20# NOTE: if you remove items from this file, be sure that you do not break 21# the emulator build. 22# 23 24# CPU Architecture 25name = hw.cpu.arch 26type = string 27default = arm 28abstract = CPU Architecture 29description = The CPU Architecture to emulator 30 31# CPU Model 32# Leave it empty, and the default value will be computed from 33# hw.cpu.arch. This is only useful for experimentation for now. 34name = hw.cpu.model 35type = string 36default = 37abstract = CPU model 38description = The CPU model (QEMU-specific string) 39 40# SMP count: Number of processors to emulate when SMP is supported. 41# Must be > 0. 42name = hw.cpu.ncore 43type = integer 44default = 2 45abstract = SMP CPU core count 46description = Number of cores in a simulated SMP CPU. 47 48# Ram size 49# Default value will be computed based on screen pixels 50# or skin version 51name = hw.ramSize 52type = integer 53default = 0 54abstract = Device ram size 55description = The amount of physical RAM on the device, in megabytes. 56 57# Touch screen type 58name = hw.screen 59type = string 60enum = touch, multi-touch, no-touch 61default = multi-touch 62abstract = Touch screen type 63description = Defines type of the screen. 64 65# Hardware main keys (back/home) 66name = hw.mainKeys 67type = boolean 68default = yes 69abstract = Hardware Back/Home keys 70description = Whether there are hardware back/home keys on the device. 71 72# Trackball support 73name = hw.trackBall 74type = boolean 75default = yes 76abstract = Track-ball support 77description = Whether there is a trackball on the device. 78 79# Keyboard support (qwerty/azerty) 80name = hw.keyboard 81type = boolean 82default = no 83abstract = Keyboard support 84description = Whether the device has a QWERTY keyboard. 85 86# Keyboard lid support 87# (I.e. can the qwerty keyboard be closed/hidden or opened/visible) 88# this will be ignored if hw.keyboard is false 89# 90# NOTE: As a special case, the default value will be 'false' if the 91# AVD targets API level 12 or higher. See hwConfig_init() 92# in external/qemu/android/avd/hw-config.c for more details. 93# 94name = hw.keyboard.lid 95type = boolean 96default = yes 97abstract = Keyboard lid support 98description = Whether the QWERTY keyboard can be opened/closed. 99 100# The name of the hardware charmap for this device. 101# 102# NOTE: This should always be the default 'qwerty2' unless you have 103# modified the system image accordingly. This name is sent to 104# the kernel at boot time. Using an incorrect name will result 105# in an unusable machine. 106name = hw.keyboard.charmap 107type = string 108default = qwerty2 109abstract = Keyboard charmap name 110description = Name of the system keyboard charmap file. 111 112# DPad keys 113name = hw.dPad 114type = boolean 115default = yes 116abstract = DPad support 117description = Whether the device has DPad keys 118 119# Rotary input 120name = hw.rotaryInput 121type = boolean 122default = no 123abstract = Rotary input support 124description = Whether the device has rotary input 125 126# GSM Modem support 127name = hw.gsmModem 128type = boolean 129default = yes 130abstract = GSM modem support 131description = Whether there is a GSM modem in the device. 132 133# GPS support 134name = hw.gps 135type = boolean 136default = yes 137abstract = GPS support 138description = Whether there is a GPS in the device. 139 140# Battery 141name = hw.battery 142type = boolean 143default = yes 144abstract = Battery support 145description = Whether the device can run on a battery. 146 147# Accelerometer (used for auto-rotation) 148name = hw.accelerometer 149type = boolean 150default = yes 151abstract = Accelerometer 152description = Whether there is an accelerometer in the device. 153 154# Gyroscope (used for VR) 155name = hw.gyroscope 156type = boolean 157default = yes 158abstract = Gyroscope 159description = Whether there is a gyroscope in the device. 160 161# Audio input 162name = hw.audioInput 163type = boolean 164default = yes 165abstract = Audio recording support 166description = Whether the device can record audio 167 168# Audio output 169name = hw.audioOutput 170type = boolean 171default = yes 172abstract = Audio playback support 173description = Whether the device can play audio 174 175# SDCard support 176name = hw.sdCard 177type = boolean 178default = yes 179abstract = SD Card support 180description = Whether the device supports insertion/removal of virtual SD Cards. 181 182name = hw.sdCard.path 183type = string 184default = 185abstract = SD Card image path 186 187name = hw.logcatOutput.path 188type = string 189default = 190abstract = Logcat Output File Path 191 192# Cache partition 193name = disk.cachePartition 194type = boolean 195default = yes 196abstract = Cache partition support 197description = Whether we use a /cache partition on the device. 198 199name = disk.cachePartition.path 200type = string 201default = 202abstract = Cache partition 203description = Cache partition to use on the device. Ignored if disk.cachePartition is not 'yes'. 204 205name = disk.cachePartition.size 206type = diskSize 207abstract = Cache partition size 208default = 66MB 209 210name = test.quitAfterBootTimeOut 211type = integer 212default = -1 213abstract = Quit emulator after guest boots completely, or after time out. Default: end of universe. 214 215name = test.delayAdbTillBootComplete 216type = integer 217default = 0 218abstract = Delay sending data to guest adb until guest completed booting 219 220name = test.monitorAdb 221type = integer 222default = 0 223abstract = Monitor Adb messages between guest and host. Default: Disabled. 224 225# LCD width 226name = hw.lcd.width 227type = integer 228default = 320 229abstract = LCD pixel width 230 231name = hw.lcd.height 232type = integer 233default = 640 234abstract = LCD pixel height 235 236name = hw.lcd.depth 237type = integer 238enum = 16, 32 239default = 16 240abstract = LCD color depth 241description = Color bit depth of emulated framebuffer. 242 243name = hw.lcd.circular 244type = boolean 245default = false 246abstract = Display is circular 247description = Specifies if the main display is circular (round). Default: false. 248 249# LCD density 250name = hw.lcd.density 251type = integer 252enum = 120, 160, 240, 213, 320 253default = 160 254abstract = Abstracted LCD density 255description = A value used to roughly describe the density of the LCD screen for automatic resource/asset selection. 256 257# LCD backlight - Enable/Disable LCD backlight simulation 258# default = no : Disabled 259# default = yes : Enabled 260name = hw.lcd.backlight 261type = boolean 262default = yes 263abstract = LCD backlight 264description = Enable/Disable LCD backlight simulation,yes-enabled,no-disabled. 265 266# VSYNC rate 267name = hw.lcd.vsync 268type = integer 269default = 60 270abstract = LCD VSYNC rate 271 272# GL transport 273name = hw.gltransport 274type = string 275default = pipe 276enum = tcp, pipe, virtio-gpu, asg 277abstract = Transport used to run graphics 278 279name = hw.gltransport.asg.writeBufferSize 280type = integer 281default = 1048576 282abstract = For address space graphics, the total size of the write buffer the guest can write into 283 284name = hw.gltransport.asg.writeStepSize 285type = integer 286default = 4096 287abstract = For address space graphics, the max size of each guest-to-host transaction. 288 289name = hw.gltransport.asg.dataRingSize 290type = integer 291default = 32768 292abstract = For address space graphics, the size of the ring used to transfer larger buffers. 293 294name = hw.gltransport.drawFlushInterval 295type = integer 296default = 800 297abstract = Interval over which to flush draw calls (balance host gpu starve vs pipe notif overhead) 298 299# Display sub-region 300# Indicates a reduced area of hw.lcd that is used when a foldable device 301# is in its folded configuration. 302name = hw.displayRegion.0.1.xOffset 303type = integer 304default = -1 305abstract = Horizontal offset of the sub-region 306 307name = hw.displayRegion.0.1.yOffset 308type = integer 309default = -1 310abstract = Vertical offset of the sub-region 311 312name = hw.displayRegion.0.1.width 313type = integer 314default = 0 315abstract = Horizontal size of the sub-region 316 317name = hw.displayRegion.0.1.height 318type = integer 319default = 0 320abstract = Vertical size of the sub-region 321 322name = hw.displayRegion.0.2.xOffset 323type = integer 324default = -1 325abstract = Horizontal offset of the sub-region 326 327name = hw.displayRegion.0.2.yOffset 328type = integer 329default = -1 330abstract = Vertical offset of the sub-region 331 332name = hw.displayRegion.0.2.width 333type = integer 334default = 0 335abstract = Horizontal size of the sub-region 336 337name = hw.displayRegion.0.2.height 338type = integer 339default = 0 340abstract = Vertical size of the sub-region 341 342name = hw.displayRegion.0.3.xOffset 343type = integer 344default = -1 345abstract = Horizontal offset of the sub-region 346 347name = hw.displayRegion.0.3.yOffset 348type = integer 349default = -1 350abstract = Vertical offset of the sub-region 351 352name = hw.displayRegion.0.3.width 353type = integer 354default = 0 355abstract = Horizontal size of the sub-region 356 357name = hw.displayRegion.0.3.height 358type = integer 359default = 0 360abstract = Vertical size of the sub-region 361 362# The Secondary Displays (MAX 3) (Primary display is represented by hw.lcd.*) 363name = hw.display1.width 364type = integer 365default = 0 366abstract = Pixel width of the second display 367 368name = hw.display1.height 369type = integer 370default = 0 371abstract = Pixel height of the second display 372 373name = hw.display1.density 374type = integer 375default = 0 376abstract = Screen density of the second display 377 378name = hw.display1.xOffset 379type = integer 380default = -1 381abstract = the horizontal offset of the second display with respect to the host QT window. 382 383name = hw.display1.yOffset 384type = integer 385default = -1 386abstract = the veritcal offset of the second display with respect to the host QT window. 387 388name = hw.display1.flag 389type = integer 390default = 0 391abstract = the flag to use when the second display is initialized in the Android system. 392 393name = hw.display2.width 394type = integer 395default = 0 396abstract = Pixel width of the third display 397 398name = hw.display2.height 399type = integer 400default = 0 401abstract = Pixel height of the third display 402 403name = hw.display2.density 404type = integer 405default = 0 406abstract = Screen density of the third display 407 408name = hw.display2.xOffset 409type = integer 410default = -1 411abstract = the horizontal offset of the third display with respect to the host QT window. 412 413name = hw.display2.yOffset 414type = integer 415default = -1 416abstract = the veritcal offset of the third display with respect to the host QT window. 417 418name = hw.display2.flag 419type = integer 420default = 0 421abstract = the flag to use when the third display is initialized in the Android system. 422 423name = hw.display3.width 424type = integer 425default = 0 426abstract = Pixel width of the fourth display 427 428name = hw.display3.height 429type = integer 430default = 0 431abstract = Pixel height of the fourth display 432 433name = hw.display3.density 434type = integer 435default = 0 436abstract = Screen density of the fourth display 437 438name = hw.display3.xOffset 439type = integer 440default = -1 441abstract = the horizontal offset of the fourth display with respect to the host QT window. 442 443name = hw.display3.yOffset 444type = integer 445default = -1 446abstract = the veritcal offset of the fourth display with respect to the host QT window. 447 448name = hw.display3.flag 449type = integer 450default = 0 451abstract = the flag touse when the fourth display is initialized in the Android system. 452 453name = hw.multi_display_window 454type = boolean 455default = no 456abstract = Create a window for each display 457description = When multidisplay enabled, enabling this flag will create a window for each display. 458 459name = display.settings.xml 460type = string 461enum = freeform, ... 462default = 463abstract = Configure setting xml file for Android Window Manager 464 465# Hardware OpenGLES emulation support 466# 467name = hw.gpu.enabled 468type = boolean 469default = no 470abstract = GPU emulation 471description = Enable/Disable emulated OpenGLES GPU 472 473name = hw.gpu.mode 474type = string 475default = auto 476enum = auto, host, mesa 477abstract = GPU emulation mode 478description = This value determines how GPU emulation is implemented. 479 480# Deactivated due to issues with blacklist=no leaked to production 481# name = hw.gpu.blacklisted 482# type = string 483# default = no 484# enum = no, yes 485# abstract = GPU on-blacklist mode 486# description = This value determines if the GPU is considered blacklisted. Testing purposes only. 487 488# Configures the initial orientation: portrait or landscape 489# 490name = hw.initialOrientation 491type = string 492enum = portrait, landscape 493default = portrait 494abstract = Initial screen orientation 495description = Setup initial screen orientation, can be rotated later on. 496 497# Configures camera facing back 498# 499name = hw.camera.back 500type = string 501enum = emulated, none, webcam0, ... 502default = emulated 503abstract = Configures camera facing back 504description = Must be 'emulated' for a fake camera, 'webcam<N>' for a web camera, or 'none' if back camera is disabled. 505 506# Configures camera facing front 507# 508name = hw.camera.front 509type = string 510enum = emulated, none, webcam0, ... 511default = none 512abstract = Configures camera facing front 513description = Must be 'emulated' for a fake camera, 'webcam<N>' for a web camera, or 'none' if front camera is disabled. 514 515# Maximum VM heap size 516# Higher values are required for high-dpi devices 517# Default will depend on RAM size. 518name = vm.heapSize 519type = integer 520default = 0 521abstract = Max VM application heap size 522description = The maximum heap size a Dalvik application might allocate before being killed by the system. Value is in megabytes. 523 524# Light sensor 525name = hw.sensors.light 526type = boolean 527default = yes 528abstract = Light support 529description = Whether there is a light sensor in the device 530 531# Pressure sensor 532name = hw.sensors.pressure 533type = boolean 534default = yes 535abstract = Pressure support 536description = Whether there is a pressure sensor in the device 537 538# Humidity sensor 539name = hw.sensors.humidity 540type = boolean 541default = yes 542abstract = Humidity support 543description = Whether there is a relative humidity sensor in the device 544 545# Proximity sensor 546name = hw.sensors.proximity 547type = boolean 548default = yes 549abstract = Proximity support 550description = Whether there is an proximity in the device. 551 552# Magnetic field sensor 553name = hw.sensors.magnetic_field 554type = boolean 555default = yes 556abstract = Magnetic field support 557description = Provides magnetic field sensor values. 558 559# Uncalibrated magnetometer (used for VR) 560name = hw.sensors.magnetic_field_uncalibrated 561type = boolean 562default = yes 563abstract = Uncalibrated magnetic field suport 564description = Provides uncalibrated magnetic field sensor values. 565 566# Uncalibrated gyroscope 567name = hw.sensors.gyroscope_uncalibrated 568type = boolean 569default = yes 570abstract = Uncalibrated gyroscope support 571description = Provides uncalibrated gyroscope sensor values. 572 573# Orientation sensor 574name = hw.sensors.orientation 575type = boolean 576default = yes 577abstract = Orientation support 578description = Provides orientation sensor values. 579 580# Temperature sensor 581name = hw.sensors.temperature 582type = boolean 583default = yes 584abstract = Temperature support 585description = Provides temperature sensor values. 586 587# RGBC light sensor 588name = hw.sensors.rgbclight 589type = boolean 590default = no 591abstract = RGBC light sensor support 592description = Provides RGBC light sensor values. 593 594# Hinge angle sensor 595name = hw.sensor.hinge 596type = boolean 597default = no 598abstract = Enalbe hinge angle sensor. 599 600name = hw.sensor.hinge.count 601type = integer 602default = 0 603abstract = Provides hinge angle sensor count. 604 605name = hw.sensor.hinge.type 606type = integer 607default = 0 608abstract = Provides hinge angle sensor type. 0 (horizontal) and 1 (vertical) 609 610name = hw.sensor.hinge.sub_type 611type = integer 612default = 0 613abstract = Provides hinge angle sensor sub type. 0 (invisible hinge, fold on screen) and 1 (hinge) 614 615name = hw.sensor.hinge.ranges 616type = string 617default = 618abstract = angel ranges for each hinge sensor, e.g., 0-360, 0-180 for two sensors. 619 620name = hw.sensor.hinge.defaults 621type = string 622default = 623abstract = default angel for each hinge sensor, e.g., 180, 90 for two sensors. 624 625name = hw.sensor.hinge.areas 626type = string 627default = 628abstract = hinge areas on the display, format is percentage_of_screen-width, e.g., 33.3-0, 66.6-10 for two sensors. Or x-y-width-height, e.g., 600-0-0-1200, 1200-0-10-1200 for two sensors. 629 630name = hw.sensor.posture_list 631type = string 632default = 633abstract = list of supported postures by index. 0: unknown, 1: closed, 2: half-open, 3: open, 4: flipped, 5: tent 634 635name = hw.sensor.hinge_angles_posture_definitions 636type = string 637default = 638abstract = angles ranges for each posture in posture_list. 639description = start-end angle pairs which define each posture. optionally, default angle may be specified for each posture, by providing a third value. default posture angle is used e.g. in quick-jump-to-posture buttons in UI. 640 641name = hw.sensor.hinge.fold_to_displayRegion.0.1_at_posture 642type = integer 643default = 1 644abstract = set folded status at a certain posture, e.g, fold-out device, posture flipped 645 646name = hw.sensor.roll 647type = boolean 648default = no 649abstract = Enalbe rollable sensor. 650 651name = hw.sensor.roll.count 652type = integer 653default = 0 654abstract = rollable sensor count. 655 656name = hw.sensor.roll.radius 657type = string 658default = 659abstract = roll radious of display width or height. 660 661name = hw.sensor.roll.ranges 662type = string 663default = 664abstract = the pecentage of display width or height which is rollable. 665 666name = hw.sensor.roll.direction 667type = string 668default = 669abstract = rolling direction starting from open posture. 0: left-to-right or top-to-buttom, 1: right-to-left or bottom-to-top 670 671name = hw.sensor.roll.defaults 672type = string 673default = 674abstract = defaults percentage of display width or height which is rolled. 675 676name = hw.sensor.roll_percentages_posture_definitions 677type = string 678default = 679abstract = angles ranges for each posture in posture_list. 680 681name = hw.sensor.roll.resize_to_displayRegion.0.1_at_posture 682type = integer 683default = 6 684abstract = resize default display to display region 0.1 when rolling to a posture state 685 686name = hw.sensor.roll.resize_to_displayRegion.0.2_at_posture 687type = integer 688default = 6 689abstract = resize default display to display region 0.2 when rolling to a posture state 690 691name = hw.sensor.roll.resize_to_displayRegion.0.3_at_posture 692type = integer 693default = 6 694abstract = resize default display to display region 0.3 when rolling to a posture state 695 696# Heart rate sensor 697name = hw.sensors.heart_rate 698type = boolean 699default = no 700abstract = Heart rate support 701description = Whether there is a heart rate sensor in the device 702 703# Wrist title gesture sensor 704name = hw.sensors.wrist_tilt 705type = boolean 706default = no 707abstract = Wrist tilt gesture 708description = Whether there is a wrist tilt gesture sensor in the device 709 710# File system 711name = hw.useext4 712type = boolean 713default = yes 714abstract = Deprecated option. Ignored. 715description = Used to specify the Ext4 partition image type. This is now autodetected. 716 717# Chrome OS devices 718name = hw.arc 719type = boolean 720default = no 721abstract = Chrome OS device (App Runtime for Chrome) 722description = The emulated device is a Chrome OS machine. 723 724# Autologin for Chrome OS devices 725name = hw.arc.autologin 726type = boolean 727default = no 728abstract = Auto login for Chrome OS devices 729description = Used to enable auto login into Chrome OS devices 730 731# Feature flags 732name = hw.featureflags 733type = string 734default = 735abstract = Feature flags 736description = A comma-separated list of feature flags to enable or disable, such as 'Enabled,-Disabled'. 737 738name = hw.device.name 739type = string 740default = 741abstract = Name of the device, e.g., pixel, resizable...# Kernel image. 742 743name = hw.resizable.configs 744type = string 745default = 746description = A comma-separated list of resizable resolutions. Each entry is organized as name-id-width-height-dpi, where the id number matches enum in android/android-emu/android/resizable_display_config.h 747 748# Kernal image 749# 750# kernel.path specified the path to the kernel image 751# kernel.parameters specifies the string of kernel boot parameters. 752# 753name = kernel.path 754type = string 755default = 756abstract = Path to the kernel image 757description = Path to the kernel image. 758 759name = kernel.parameters 760type = string 761default = 762abstract = kernel boot parameters string. 763 764name = kernel.newDeviceNaming 765type = string 766enum = autodetect, yes, no 767default = autodetect 768abstract = Does the kernel require a new device naming scheme? 769description = Used to specify whether the kernel requires a new device naming scheme. Typically for Linux 3.10 and above. 770 771name = kernel.supportsYaffs2 772type = string 773enum = autodetect, yes, no 774default = autodetect 775abstract = Does the kernel supports YAFFS2 partitions? 776description = Used to specify whether the kernel supports YAFFS2 partition images. Typically before 3.10 only. 777 778# Path to the ramdisk image. 779name = disk.ramdisk.path 780type = string 781default = 782abstract = Path to the ramdisk image 783description = Path to the ramdisk image. 784 785# System partition image(s). 786# 787# disk.systemPartition.path points to the read/write system partition image. 788# if empty, a temporary file will be created, initialized with the content 789# of .initPath 790# 791# disk.systemPartition.initPath is only used when .path is empty. It must 792# then point to a read-only initialization system image file. 793# 794# disk.systemPartition.size is the ideal size of the system partition. The 795# size is ignored if the actual system partition image is larger. Otherwise, 796# it indicates the maximum size the disk image file can grow to. 797# 798name = disk.systemPartition.path 799type = string 800default = 801abstract = Path to runtime system partition image 802 803name = disk.systemPartition.initPath 804type = string 805default = 806abstract = Initial system partition image 807 808name = disk.systemPartition.size 809type = diskSize 810default = 0 811abstract = Ideal size of system partition 812 813# Vendor partition image(s). 814 815name = disk.vendorPartition.path 816type = string 817default = 818abstract = Path to runtime vendor partition image 819 820name = disk.vendorPartition.initPath 821type = string 822default = 823abstract = Initial vendor partition image 824 825name = disk.vendorPartition.size 826type = diskSize 827default = 0 828abstract = Ideal size of vendor partition 829 830# Path to the data partition. 831name = disk.dataPartition.path 832type = string 833default = <temp> 834abstract = Path to data partition file 835description = Path to data partition file. Cannot be empty. Special value <temp> means using a temporary file. If disk.dataPartition.initPath is not empty, its content will be copied to the disk.dataPartition.path file at boot-time. 836 837# Initial path to the data partition. 838name = disk.dataPartition.initPath 839type = string 840default = 841abstract = Initial data partition 842description = If not empty, its content will be copied to the disk.dataPartition.path file at boot-time. 843 844# Data partition size. 845name = disk.dataPartition.size 846type = diskSize 847default = 0 848abstract = Ideal size of data partition 849 850# Path to the data partition. 851name = disk.encryptionKeyPartition.path 852type = string 853default = 854abstract = Path to encryption key partition file 855description = Path to encryption key partition file. Should be at least 16K bytes empty disk without any filesystem on it. 856 857# Path to the snapshots storage file. 858name = disk.snapStorage.path 859type = string 860default = 861abstract = Path to snapshot storage 862description = Path to a 'snapshot storage' file, where all snapshots are stored. 863 864# Is the AVD compatible with Google Play? 865name = PlayStore.enabled 866type = boolean 867default = no 868abstract = PlayStore 869description = Does the device supports Google Play? 870 871# Android AVD name 872# This is set automatically before launching a core. 873# 874name = avd.name 875type = string 876default = <build> 877abstract = Name of the AVD being run 878 879# Android AVD id 880# This is set automatically before launching a core. 881# 882name = avd.id 883type = string 884default = <build> 885abstract = ID of the AVD being run 886 887# Force cold boot 888# Don't use snapshots for quick booting but boot from scratch instead 889# 890name = fastboot.forceColdBoot 891type = boolean 892default = no 893abstract = Always use cold boot 894description = If set, AVD will always use the full cold boot instead of snapshot-based quick boot process 895 896 897# SDK Path used during generation of this hardware configuration 898name = android.sdk.root 899type = string 900default = 901abstract = sdk root that was used during the construction of this hardware.ini 902description = This can be used by post processing tools to migrate snapshots 903 904# AVD home used during generation of this hardware configuration 905name = android.avd.home 906type = string 907default = 908abstract = avd home that was used during the construction of this hardware.ini 909description = This can be used by post processing tools to migrate snapshots 910 911 912