debuggers.hg
changeset 26:dec845b4d9c3
Refresh to unstable C/S 19569
line diff
1.1 --- a/Config.mk Mon Mar 30 19:56:30 2009 -0700 1.2 +++ b/Config.mk Thu Apr 23 18:49:41 2009 -0700 1.3 @@ -19,8 +19,6 @@ HOSTCFLAGS += -fno-strict-aliasing 1.4 1.5 DISTDIR ?= $(XEN_ROOT)/dist 1.6 DESTDIR ?= / 1.7 -DOCDIR ?= /usr/share/doc/xen 1.8 -MANDIR ?= /usr/share/man 1.9 1.10 # Allow phony attribute to be listed as dependency rather than fake target 1.11 .PHONY: .phony 1.12 @@ -28,6 +26,10 @@ MANDIR ?= /usr/share/man 1.13 include $(XEN_ROOT)/config/$(XEN_OS).mk 1.14 include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk 1.15 1.16 +SHAREDIR ?= $(PREFIX)/share 1.17 +DOCDIR ?= $(SHAREDIR)/doc/xen 1.18 +MANDIR ?= $(SHAREDIR)/man 1.19 + 1.20 ifneq ($(EXTRA_PREFIX),) 1.21 EXTRA_INCLUDES += $(EXTRA_PREFIX)/include 1.22 EXTRA_LIB += $(EXTRA_PREFIX)/$(LIBLEAFDIR)
2.1 --- a/Makefile Mon Mar 30 19:56:30 2009 -0700 2.2 +++ b/Makefile Thu Apr 23 18:49:41 2009 -0700 2.3 @@ -188,11 +188,7 @@ help: 2.4 @echo ' clean-tboot - clean the tboot module if it exists' 2.5 @echo 2.6 @echo 'Environment:' 2.7 - @echo ' XEN_PYTHON_NATIVE_INSTALL=y' 2.8 - @echo ' - native python install or dist' 2.9 - @echo ' install into prefix/lib/python<VERSION>' 2.10 - @echo ' instead of <PREFIX>/lib/python' 2.11 - @echo ' true if set to non-empty value, false otherwise' 2.12 + @echo ' [ this documentation is sadly not complete ]' 2.13 2.14 # Use this target with extreme care! 2.15 .PHONY: uninstall 2.16 @@ -203,6 +199,8 @@ uninstall: 2.17 rm -rf $(D)/etc/hotplug/xen-backend.agent 2.18 rm -f $(D)/etc/udev/rules.d/xen-backend.rules 2.19 rm -f $(D)/etc/udev/xen-backend.rules 2.20 + rm -f $(D)/etc/udev/rules.d/xend.rules 2.21 + rm -f $(D)/etc/udev/xend.rules 2.22 rm -f $(D)/etc/sysconfig/xendomains 2.23 rm -rf $(D)/var/run/xen* $(D)/var/lib/xen* 2.24 rm -rf $(D)/boot/*xen* 2.25 @@ -239,7 +237,7 @@ linux26: 2.26 # tboot targets 2.27 # 2.28 2.29 -TBOOT_TARFILE = tboot-20080613.tar.gz 2.30 +TBOOT_TARFILE = tboot-20090330.tar.gz 2.31 #TBOOT_BASE_URL = http://downloads.sourceforge.net/tboot 2.32 TBOOT_BASE_URL = $(XEN_EXTFILES_URL) 2.33
3.1 --- a/config/NetBSD.mk Mon Mar 30 19:56:30 2009 -0700 3.2 +++ b/config/NetBSD.mk Thu Apr 23 18:49:41 2009 -0700 3.3 @@ -2,3 +2,7 @@ include $(XEN_ROOT)/config/StdGNU.mk 3.4 3.5 # Override settings for this OS 3.6 CURSES_LIBS = -lcurses 3.7 + 3.8 +LIBLEAFDIR_x86_64 = lib 3.9 +LIBEXEC = $(PREFIX)/libexec 3.10 +PRIVATE_BINDIR = $(BINDIR)
4.1 --- a/config/StdGNU.mk Mon Mar 30 19:56:30 2009 -0700 4.2 +++ b/config/StdGNU.mk Thu Apr 23 18:49:41 2009 -0700 4.3 @@ -25,10 +25,14 @@ PREFIX ?= /usr 4.4 BINDIR = $(PREFIX)/bin 4.5 INCLUDEDIR = $(PREFIX)/include 4.6 LIBLEAFDIR = lib 4.7 +LIBLEAFDIR_x86_32 = lib 4.8 LIBLEAFDIR_x86_64 = lib64 4.9 LIBDIR = $(PREFIX)/$(LIBLEAFDIR) 4.10 +LIBDIR_x86_32 = $(PREFIX)/$(LIBLEAFDIR_x86_32) 4.11 LIBDIR_x86_64 = $(PREFIX)/$(LIBLEAFDIR_x86_64) 4.12 -MANDIR = $(PREFIX)/share/man 4.13 +LIBEXEC = $(LIBDIR_x86_32)/xen/bin 4.14 +SHAREDIR = $(PREFIX)/share 4.15 +MANDIR = $(SHAREDIR)/man 4.16 MAN1DIR = $(MANDIR)/man1 4.17 MAN8DIR = $(MANDIR)/man8 4.18 SBINDIR = $(PREFIX)/sbin
5.1 --- a/docs/misc/vtd.txt Mon Mar 30 19:56:30 2009 -0700 5.2 +++ b/docs/misc/vtd.txt Thu Apr 23 18:49:41 2009 -0700 5.3 @@ -26,7 +26,18 @@ title Xen-Fedora Core (2.6.18-xen) 5.4 module /boot/vmlinuz-2.6.18.8-xen root=LABEL=/ ro xencons=ttyS console=tty0 console=ttyS0, pciback.hide=(01:00.0)(03:00.0) 5.5 module /boot/initrd-2.6.18-xen.img 5.6 5.7 -12) reboot system 5.8 + or use dynamic hiding via PCI backend sysfs interface: 5.9 + a) check if the driver has binded to the device 5.10 + ls -l /sys/bus/pci/devices/0000:01:00.0/driver 5.11 + ... /sys/bus/pci/devices/0000:01:00.0/driver -> ../../../../bus/pci/drivers/igb 5.12 + b) if yes, then unload the driver first 5.13 + echo -n 0000:01:00.0 >/sys/bus/pci/drivers/igb/unbind 5.14 + c) add the device to the PCI backend 5.15 + echo -n 0000:01:00.0 >/sys/bus/pci/drivers/pciback/new_slot 5.16 + d) let the PCI backend bind to the device 5.17 + echo -n 0000:01:00.0 >/sys/bus/pci/drivers/pciback/bind 5.18 + 5.19 +12) reboot system (not requires if you use the dynamic hiding method) 5.20 13) add "pci" line in /etc/xen/hvm.conf for to assigned devices 5.21 pci = [ '01:00.0', '03:00.0' ] 5.22 15) start hvm guest and use "lspci" to see the passthru device and 5.23 @@ -160,3 +171,82 @@ driver's view are different. As a result 5.24 buffer specified by driver. 5.25 5.26 Such devices assigned to HVM domain currently do not work. 5.27 + 5.28 + 5.29 +Using SR-IOV with VT-d 5.30 +-------------------------------- 5.31 + 5.32 +The Single Root I/O Virtualization is a PCI Express feature supported by 5.33 +some devices such as Intel 82576 which allows you to create virtual PCI 5.34 +devices (Virtual Function) and assign them to the HVM guest. 5.35 + 5.36 +You can use latest lspci (v3.1 and above) to check if your PCIe device 5.37 +supports the SR-IOV capability or not. 5.38 + 5.39 + $ lspci -s 01:00.0 -vvv 5.40 + 5.41 + 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 5.42 + Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter 5.43 + 5.44 + ... 5.45 + 5.46 + Capabilities: [160] Single Root I/O Virtualization (SR-IOV) 5.47 + IOVCap: Migration-, Interrupt Message Number: 000 5.48 + IOVCtl: Enable+ Migration- Interrupt- MSE+ ARIHierarchy+ 5.49 + IOVSta: Migration- 5.50 + Initial VFs: 8, Total VFs: 8, Number of VFs: 7, Function Dependency Link: 00 5.51 + VF offset: 128, stride: 2, Device ID: 10ca 5.52 + Supported Page Size: 00000553, System Page Size: 00000001 5.53 + VF Migration: offset: 00000000, BIR: 0 5.54 + Kernel driver in use: igb 5.55 + 5.56 + 5.57 +The function that has the SR-IOV capability is also known as Physical 5.58 +Function. You need the Physical Function driver (runs in the Dom0 and 5.59 +controls the physical resources allocation) to enable the Virtual Function. 5.60 +Following is the Virtual Functions associated with above Physical Function. 5.61 + 5.62 + $ lspci | grep -e 01:1[01].[0246] 5.63 + 5.64 + 01:10.0 Ethernet controller: Intel Corporation Device 10ca (rev 01) 5.65 + 01:10.2 Ethernet controller: Intel Corporation Device 10ca (rev 01) 5.66 + 01:10.4 Ethernet controller: Intel Corporation Device 10ca (rev 01) 5.67 + 01:10.6 Ethernet controller: Intel Corporation Device 10ca (rev 01) 5.68 + 01:11.0 Ethernet controller: Intel Corporation Device 10ca (rev 01) 5.69 + 01:11.2 Ethernet controller: Intel Corporation Device 10ca (rev 01) 5.70 + 01:11.4 Ethernet controller: Intel Corporation Device 10ca (rev 01) 5.71 + 5.72 +We can tell that Physical Function 01:00.0 has 7 Virtual Functions (01:10.0, 5.73 +01:10.2, 01:10.4, 01:10.6, 01:11.0, 01:11.2, 01:11.4). And the Virtual 5.74 +Function PCI Configuration Space looks just like normal PCI device. 5.75 + 5.76 + $ lspci -s 01:10.0 -vvv 5.77 + 5.78 + 01:10.0 Ethernet controller: Intel Corporation 82576 Gigabit Virtual Function 5.79 + Subsystem: Intel Corporation Gigabit Virtual Function 5.80 + Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- 5.81 + Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- 5.82 + Region 0: [virtual] Memory at d2840000 (64-bit, non-prefetchable) [size=16K] 5.83 + Region 3: [virtual] Memory at d2860000 (64-bit, non-prefetchable) [size=16K] 5.84 + Capabilities: [70] MSI-X: Enable+ Mask- TabSize=3 5.85 + Vector table: BAR=3 offset=00000000 5.86 + PBA: BAR=3 offset=00002000 5.87 + Capabilities: [a0] Express (v2) Endpoint, MSI 00 5.88 + 5.89 + ... 5.90 + 5.91 + 5.92 +The Virtual Function only appears after the Physical Function driver 5.93 +is loaded. Once the Physical Function driver is unloaded. All Virtual 5.94 +Functions associated with this Physical Function disappear. 5.95 + 5.96 +The Virtual Function is essentially same as the normal PCI device when 5.97 +using it in VT-d environment. You need to hide the Virtual Function, 5.98 +use the Virtual Function bus, device and function number in the HVM 5.99 +guest configuration file and then boot the HVM guest. You also need the 5.100 +Virtual Function driver which is the normal PCI device driver in the 5.101 +HMV guest to drive the Virtual Function. The PCIe SR-IOV specification 5.102 +requires that the Virtual Function can only support MSI/MSI-x if it 5.103 +uses interrupt. This means you also need to enable Xen/MSI support. 5.104 +Since the Virtual Function is dynamically allocated by Physical Function 5.105 +driver, you might want to use the dynamic hiding method mentioned above.
6.1 --- a/docs/src/user.tex Mon Mar 30 19:56:30 2009 -0700 6.2 +++ b/docs/src/user.tex Thu Apr 23 18:49:41 2009 -0700 6.3 @@ -4194,6 +4194,9 @@ writing to the VGA console after domain 6.4 \item [ dma\_bits=xxx ] Specify width of DMA addresses in bits. This 6.5 is used in NUMA systems to prevent this special DMA memory from 6.6 being exhausted in one node when remote nodes have available memory. 6.7 +\item [ vcpu\_migration\_delay=$<$minimum\_time$>$] Set minimum time of 6.8 + vcpu migration in microseconds (default 0). This parameter avoids agressive 6.9 + vcpu migration. For example, the linux kernel uses 0.5ms by default. 6.10 \end{description} 6.11 6.12 In addition, the following options may be specified on the Xen command
7.1 --- a/extras/mini-os/arch/ia64/mm.c Mon Mar 30 19:56:30 2009 -0700 7.2 +++ b/extras/mini-os/arch/ia64/mm.c Thu Apr 23 18:49:41 2009 -0700 7.3 @@ -156,6 +156,18 @@ map_frames_ex(unsigned long* frames, uns 7.4 return (void*) __va(frames[0] << PAGE_SHIFT); 7.5 } 7.6 7.7 +int unmap_frames(unsigned long virt_addr, unsigned long num_frames) 7.8 +{ 7.9 + /* TODO */ 7.10 + ASSERT(0); 7.11 +} 7.12 + 7.13 +unsigned long alloc_contig_pages(int order, unsigned int addr_bits) 7.14 +{ 7.15 + /* TODO */ 7.16 + ASSERT(0); 7.17 +} 7.18 + 7.19 void arch_init_p2m(unsigned long max_pfn) 7.20 { 7.21 printk("Warn: p2m map not implemented.\n");
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/extras/mini-os/arch/x86/ioremap.c Thu Apr 23 18:49:41 2009 -0700 8.3 @@ -0,0 +1,88 @@ 8.4 +/* 8.5 + * Copyright (C) 2009, Netronome Systems, Inc. 8.6 + * 8.7 + * Permission is hereby granted, free of charge, to any person obtaining a copy 8.8 + * of this software and associated documentation files (the "Software"), to 8.9 + * deal in the Software without restriction, including without limitation the 8.10 + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 8.11 + * sell copies of the Software, and to permit persons to whom the Software is 8.12 + * furnished to do so, subject to the following conditions: 8.13 + * 8.14 + * The above copyright notice and this permission notice shall be included in 8.15 + * all copies or substantial portions of the Software. 8.16 + * 8.17 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 8.18 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 8.19 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 8.20 + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 8.21 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 8.22 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 8.23 + * DEALINGS IN THE SOFTWARE. 8.24 + */ 8.25 + 8.26 + 8.27 +#include <types.h> 8.28 +#include <lib.h> 8.29 +#include <xmalloc.h> 8.30 +#include <mm.h> 8.31 +#include <ioremap.h> 8.32 + 8.33 +/* Map a physical address range into virtual address space with provided 8.34 + * flags. Return a virtual address range it is mapped to. */ 8.35 +static void *__do_ioremap(unsigned long phys_addr, unsigned long size, 8.36 + unsigned long prot) 8.37 +{ 8.38 + unsigned long va; 8.39 + unsigned long mfns, mfn; 8.40 + unsigned long num_pages, offset; 8.41 + int i; 8.42 + 8.43 + /* allow non page aligned addresses but for mapping we need to align them */ 8.44 + offset = (phys_addr & ~PAGE_MASK); 8.45 + num_pages = (offset + size + PAGE_SIZE - 1) / PAGE_SIZE; 8.46 + phys_addr &= PAGE_MASK; 8.47 + mfns = mfn = phys_addr >> PAGE_SHIFT; 8.48 + 8.49 + /* sanity checks on list of MFNs */ 8.50 + for ( i = 0; i < num_pages; i++, mfn++ ) 8.51 + { 8.52 + if ( mfn_is_ram(mfn) ) 8.53 + { 8.54 + printk("ioremap: mfn 0x%ulx is RAM\n", mfn); 8.55 + goto mfn_invalid; 8.56 + } 8.57 + } 8.58 + va = (unsigned long)map_frames_ex(&mfns, num_pages, 0, 1, 1, 8.59 + DOMID_IO, 0, prot); 8.60 + return (void *)(va + offset); 8.61 + 8.62 +mfn_invalid: 8.63 + return NULL; 8.64 +} 8.65 + 8.66 +void *ioremap(unsigned long phys_addr, unsigned long size) 8.67 +{ 8.68 + return __do_ioremap(phys_addr, size, IO_PROT); 8.69 +} 8.70 + 8.71 +void *ioremap_nocache(unsigned long phys_addr, unsigned long size) 8.72 +{ 8.73 + return __do_ioremap(phys_addr, size, IO_PROT_NOCACHE); 8.74 +} 8.75 + 8.76 +/* Un-map the io-remapped region. Currently no list of existing mappings is 8.77 + * maintained, so the caller has to supply the size */ 8.78 +void iounmap(void *virt_addr, unsigned long size) 8.79 +{ 8.80 + unsigned long num_pages; 8.81 + unsigned long va = (unsigned long)virt_addr; 8.82 + 8.83 + /* work out number of frames to unmap */ 8.84 + num_pages = ((va & ~PAGE_MASK) + size + PAGE_SIZE - 1) / PAGE_SIZE; 8.85 + 8.86 + unmap_frames(va & PAGE_MASK, num_pages); 8.87 +} 8.88 + 8.89 + 8.90 + 8.91 +/* -*- Mode:C; c-basic-offset:4; tab-width:4 indent-tabs-mode:nil -*- */
9.1 --- a/extras/mini-os/arch/x86/mm.c Mon Mar 30 19:56:30 2009 -0700 9.2 +++ b/extras/mini-os/arch/x86/mm.c Thu Apr 23 18:49:41 2009 -0700 9.3 @@ -52,20 +52,26 @@ 9.4 unsigned long *phys_to_machine_mapping; 9.5 unsigned long mfn_zero; 9.6 extern char stack[]; 9.7 -extern void page_walk(unsigned long virt_addr); 9.8 +extern void page_walk(unsigned long va); 9.9 9.10 -void new_pt_frame(unsigned long *pt_pfn, unsigned long prev_l_mfn, 9.11 - unsigned long offset, unsigned long level) 9.12 +/* 9.13 + * Make pt_pfn a new 'level' page table frame and hook it into the page 9.14 + * table at offset in previous level MFN (pref_l_mfn). pt_pfn is a guest 9.15 + * PFN. 9.16 + */ 9.17 +static void new_pt_frame(unsigned long *pt_pfn, unsigned long prev_l_mfn, 9.18 + unsigned long offset, unsigned long level) 9.19 { 9.20 pgentry_t *tab = (pgentry_t *)start_info.pt_base; 9.21 unsigned long pt_page = (unsigned long)pfn_to_virt(*pt_pfn); 9.22 pgentry_t prot_e, prot_t; 9.23 mmu_update_t mmu_updates[1]; 9.24 + int rc; 9.25 9.26 prot_e = prot_t = 0; 9.27 - DEBUG("Allocating new L%d pt frame for pt_pfn=%lx, " 9.28 - "prev_l_mfn=%lx, offset=%lx", 9.29 - level, *pt_pfn, prev_l_mfn, offset); 9.30 + DEBUG("Allocating new L%d pt frame for pfn=%lx, " 9.31 + "prev_l_mfn=%lx, offset=%lx", 9.32 + level, *pt_pfn, prev_l_mfn, offset); 9.33 9.34 /* We need to clear the page, otherwise we might fail to map it 9.35 as a page table page */ 9.36 @@ -74,56 +80,63 @@ void new_pt_frame(unsigned long *pt_pfn, 9.37 switch ( level ) 9.38 { 9.39 case L1_FRAME: 9.40 - prot_e = L1_PROT; 9.41 - prot_t = L2_PROT; 9.42 - break; 9.43 + prot_e = L1_PROT; 9.44 + prot_t = L2_PROT; 9.45 + break; 9.46 case L2_FRAME: 9.47 - prot_e = L2_PROT; 9.48 - prot_t = L3_PROT; 9.49 - break; 9.50 + prot_e = L2_PROT; 9.51 + prot_t = L3_PROT; 9.52 + break; 9.53 #if defined(__x86_64__) 9.54 case L3_FRAME: 9.55 - prot_e = L3_PROT; 9.56 - prot_t = L4_PROT; 9.57 - break; 9.58 + prot_e = L3_PROT; 9.59 + prot_t = L4_PROT; 9.60 + break; 9.61 #endif 9.62 default: 9.63 - printk("new_pt_frame() called with invalid level number %d\n", level); 9.64 - do_exit(); 9.65 - break; 9.66 + printk("new_pt_frame() called with invalid level number %d\n", level); 9.67 + do_exit(); 9.68 + break; 9.69 } 9.70 9.71 - /* Update the entry */ 9.72 + /* Make PFN a page table page */ 9.73 #if defined(__x86_64__) 9.74 tab = pte_to_virt(tab[l4_table_offset(pt_page)]); 9.75 #endif 9.76 tab = pte_to_virt(tab[l3_table_offset(pt_page)]); 9.77 9.78 mmu_updates[0].ptr = (tab[l2_table_offset(pt_page)] & PAGE_MASK) + 9.79 - sizeof(pgentry_t) * l1_table_offset(pt_page); 9.80 + sizeof(pgentry_t) * l1_table_offset(pt_page); 9.81 mmu_updates[0].val = (pgentry_t)pfn_to_mfn(*pt_pfn) << PAGE_SHIFT | 9.82 - (prot_e & ~_PAGE_RW); 9.83 - if(HYPERVISOR_mmu_update(mmu_updates, 1, NULL, DOMID_SELF) < 0) 9.84 + (prot_e & ~_PAGE_RW); 9.85 + 9.86 + if ( (rc = HYPERVISOR_mmu_update(mmu_updates, 1, NULL, DOMID_SELF)) < 0 ) 9.87 { 9.88 - printk("PTE for new page table page could not be updated\n"); 9.89 - do_exit(); 9.90 + printk("ERROR: PTE for new page table page could not be updated\n"); 9.91 + printk(" mmu_update failed with rc=%d\n", rc); 9.92 + do_exit(); 9.93 } 9.94 - 9.95 - /* Now fill the new page table page with entries. 9.96 - Update the page directory as well. */ 9.97 - mmu_updates[0].ptr = ((pgentry_t)prev_l_mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset; 9.98 + 9.99 + /* Hook the new page table page into the hierarchy */ 9.100 + mmu_updates[0].ptr = 9.101 + ((pgentry_t)prev_l_mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset; 9.102 mmu_updates[0].val = (pgentry_t)pfn_to_mfn(*pt_pfn) << PAGE_SHIFT | prot_t; 9.103 - if(HYPERVISOR_mmu_update(mmu_updates, 1, NULL, DOMID_SELF) < 0) 9.104 + 9.105 + if ( (rc = HYPERVISOR_mmu_update(mmu_updates, 1, NULL, DOMID_SELF)) < 0 ) 9.106 { 9.107 - printk("ERROR: mmu_update failed\n"); 9.108 - do_exit(); 9.109 + printk("ERROR: mmu_update failed with rc=%d\n", rc); 9.110 + do_exit(); 9.111 } 9.112 9.113 *pt_pfn += 1; 9.114 } 9.115 9.116 -/* Checks if a pagetable frame is needed (if weren't allocated by Xen) */ 9.117 -static int need_pt_frame(unsigned long virt_address, int level) 9.118 +/* 9.119 + * Checks if a pagetable frame is needed at 'level' to map a given 9.120 + * address. Note, this function is specific to the initial page table 9.121 + * building. 9.122 + */ 9.123 +static int need_pt_frame(unsigned long va, int level) 9.124 { 9.125 unsigned long hyp_virt_start = HYPERVISOR_VIRT_START; 9.126 #if defined(__x86_64__) 9.127 @@ -135,63 +148,71 @@ static int need_pt_frame(unsigned long v 9.128 /* In general frames will _not_ be needed if they were already 9.129 allocated to map the hypervisor into our VA space */ 9.130 #if defined(__x86_64__) 9.131 - if(level == L3_FRAME) 9.132 + if ( level == L3_FRAME ) 9.133 { 9.134 - if(l4_table_offset(virt_address) >= 9.135 - l4_table_offset(hyp_virt_start) && 9.136 - l4_table_offset(virt_address) <= 9.137 - l4_table_offset(hyp_virt_end)) 9.138 + if ( l4_table_offset(va) >= 9.139 + l4_table_offset(hyp_virt_start) && 9.140 + l4_table_offset(va) <= 9.141 + l4_table_offset(hyp_virt_end)) 9.142 return 0; 9.143 return 1; 9.144 - } else 9.145 + } 9.146 + else 9.147 #endif 9.148 9.149 - if(level == L2_FRAME) 9.150 + if ( level == L2_FRAME ) 9.151 { 9.152 #if defined(__x86_64__) 9.153 - if(l4_table_offset(virt_address) >= 9.154 - l4_table_offset(hyp_virt_start) && 9.155 - l4_table_offset(virt_address) <= 9.156 - l4_table_offset(hyp_virt_end)) 9.157 + if ( l4_table_offset(va) >= 9.158 + l4_table_offset(hyp_virt_start) && 9.159 + l4_table_offset(va) <= 9.160 + l4_table_offset(hyp_virt_end)) 9.161 #endif 9.162 - if(l3_table_offset(virt_address) >= 9.163 - l3_table_offset(hyp_virt_start) && 9.164 - l3_table_offset(virt_address) <= 9.165 - l3_table_offset(hyp_virt_end)) 9.166 + if ( l3_table_offset(va) >= 9.167 + l3_table_offset(hyp_virt_start) && 9.168 + l3_table_offset(va) <= 9.169 + l3_table_offset(hyp_virt_end)) 9.170 return 0; 9.171 9.172 return 1; 9.173 - } else 9.174 - 9.175 - /* Always need l1 frames */ 9.176 - if(level == L1_FRAME) 9.177 - return 1; 9.178 + } 9.179 + else 9.180 + /* Always need l1 frames */ 9.181 + if ( level == L1_FRAME ) 9.182 + return 1; 9.183 9.184 printk("ERROR: Unknown frame level %d, hypervisor %llx,%llx\n", 9.185 - level, hyp_virt_start, hyp_virt_end); 9.186 + level, hyp_virt_start, hyp_virt_end); 9.187 return -1; 9.188 } 9.189 9.190 -void build_pagetable(unsigned long *start_pfn, unsigned long *max_pfn) 9.191 +/* 9.192 + * Build the initial pagetable. 9.193 + */ 9.194 +static void build_pagetable(unsigned long *start_pfn, unsigned long *max_pfn) 9.195 { 9.196 unsigned long start_address, end_address; 9.197 unsigned long pfn_to_map, pt_pfn = *start_pfn; 9.198 static mmu_update_t mmu_updates[L1_PAGETABLE_ENTRIES + 1]; 9.199 pgentry_t *tab = (pgentry_t *)start_info.pt_base, page; 9.200 - unsigned long mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base)); 9.201 + unsigned long pt_mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base)); 9.202 unsigned long offset; 9.203 int count = 0; 9.204 + int rc; 9.205 9.206 - pfn_to_map = (start_info.nr_pt_frames - NOT_L1_FRAMES) * L1_PAGETABLE_ENTRIES; 9.207 + pfn_to_map = 9.208 + (start_info.nr_pt_frames - NOT_L1_FRAMES) * L1_PAGETABLE_ENTRIES; 9.209 9.210 - if (*max_pfn >= virt_to_pfn(HYPERVISOR_VIRT_START)) 9.211 + if ( *max_pfn >= virt_to_pfn(HYPERVISOR_VIRT_START) ) 9.212 { 9.213 printk("WARNING: Mini-OS trying to use Xen virtual space. " 9.214 "Truncating memory from %dMB to ", 9.215 - ((unsigned long)pfn_to_virt(*max_pfn) - (unsigned long)&_text)>>20); 9.216 + ((unsigned long)pfn_to_virt(*max_pfn) - 9.217 + (unsigned long)&_text)>>20); 9.218 *max_pfn = virt_to_pfn(HYPERVISOR_VIRT_START - PAGE_SIZE); 9.219 printk("%dMB\n", 9.220 - ((unsigned long)pfn_to_virt(*max_pfn) - (unsigned long)&_text)>>20); 9.221 + ((unsigned long)pfn_to_virt(*max_pfn) - 9.222 + (unsigned long)&_text)>>20); 9.223 } 9.224 9.225 start_address = (unsigned long)pfn_to_virt(pfn_to_map); 9.226 @@ -200,49 +221,53 @@ void build_pagetable(unsigned long *star 9.227 /* We worked out the virtual memory range to map, now mapping loop */ 9.228 printk("Mapping memory range 0x%lx - 0x%lx\n", start_address, end_address); 9.229 9.230 - while(start_address < end_address) 9.231 + while ( start_address < end_address ) 9.232 { 9.233 tab = (pgentry_t *)start_info.pt_base; 9.234 - mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base)); 9.235 + pt_mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base)); 9.236 9.237 #if defined(__x86_64__) 9.238 offset = l4_table_offset(start_address); 9.239 /* Need new L3 pt frame */ 9.240 - if(!(start_address & L3_MASK)) 9.241 - if(need_pt_frame(start_address, L3_FRAME)) 9.242 - new_pt_frame(&pt_pfn, mfn, offset, L3_FRAME); 9.243 + if ( !(start_address & L3_MASK) ) 9.244 + if ( need_pt_frame(start_address, L3_FRAME) ) 9.245 + new_pt_frame(&pt_pfn, pt_mfn, offset, L3_FRAME); 9.246 9.247 page = tab[offset]; 9.248 - mfn = pte_to_mfn(page); 9.249 - tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT); 9.250 + pt_mfn = pte_to_mfn(page); 9.251 + tab = to_virt(mfn_to_pfn(pt_mfn) << PAGE_SHIFT); 9.252 #endif 9.253 offset = l3_table_offset(start_address); 9.254 /* Need new L2 pt frame */ 9.255 - if(!(start_address & L2_MASK)) 9.256 - if(need_pt_frame(start_address, L2_FRAME)) 9.257 - new_pt_frame(&pt_pfn, mfn, offset, L2_FRAME); 9.258 + if ( !(start_address & L2_MASK) ) 9.259 + if ( need_pt_frame(start_address, L2_FRAME) ) 9.260 + new_pt_frame(&pt_pfn, pt_mfn, offset, L2_FRAME); 9.261 9.262 page = tab[offset]; 9.263 - mfn = pte_to_mfn(page); 9.264 - tab = to_virt(mfn_to_pfn(mfn) << PAGE_SHIFT); 9.265 + pt_mfn = pte_to_mfn(page); 9.266 + tab = to_virt(mfn_to_pfn(pt_mfn) << PAGE_SHIFT); 9.267 offset = l2_table_offset(start_address); 9.268 /* Need new L1 pt frame */ 9.269 - if(!(start_address & L1_MASK)) 9.270 - if(need_pt_frame(start_address, L1_FRAME)) 9.271 - new_pt_frame(&pt_pfn, mfn, offset, L1_FRAME); 9.272 + if ( !(start_address & L1_MASK) ) 9.273 + if ( need_pt_frame(start_address, L1_FRAME) ) 9.274 + new_pt_frame(&pt_pfn, pt_mfn, offset, L1_FRAME); 9.275 9.276 page = tab[offset]; 9.277 - mfn = pte_to_mfn(page); 9.278 + pt_mfn = pte_to_mfn(page); 9.279 offset = l1_table_offset(start_address); 9.280 9.281 - mmu_updates[count].ptr = ((pgentry_t)mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset; 9.282 - mmu_updates[count].val = (pgentry_t)pfn_to_mfn(pfn_to_map++) << PAGE_SHIFT | L1_PROT; 9.283 + mmu_updates[count].ptr = 9.284 + ((pgentry_t)pt_mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset; 9.285 + mmu_updates[count].val = 9.286 + (pgentry_t)pfn_to_mfn(pfn_to_map++) << PAGE_SHIFT | L1_PROT; 9.287 count++; 9.288 - if (count == L1_PAGETABLE_ENTRIES || pfn_to_map == *max_pfn) 9.289 + if ( count == L1_PAGETABLE_ENTRIES || pfn_to_map == *max_pfn ) 9.290 { 9.291 - if(HYPERVISOR_mmu_update(mmu_updates, count, NULL, DOMID_SELF) < 0) 9.292 + rc = HYPERVISOR_mmu_update(mmu_updates, count, NULL, DOMID_SELF); 9.293 + if ( rc < 0 ) 9.294 { 9.295 - printk("PTE could not be updated\n"); 9.296 + printk("ERROR: build_pagetable(): PTE could not be updated\n"); 9.297 + printk(" mmu_update failed with rc=%d\n", rc); 9.298 do_exit(); 9.299 } 9.300 count = 0; 9.301 @@ -253,20 +278,26 @@ void build_pagetable(unsigned long *star 9.302 *start_pfn = pt_pfn; 9.303 } 9.304 9.305 +/* 9.306 + * Mark portion of the address space read only. 9.307 + */ 9.308 extern void shared_info; 9.309 static void set_readonly(void *text, void *etext) 9.310 { 9.311 - unsigned long start_address = ((unsigned long) text + PAGE_SIZE - 1) & PAGE_MASK; 9.312 + unsigned long start_address = 9.313 + ((unsigned long) text + PAGE_SIZE - 1) & PAGE_MASK; 9.314 unsigned long end_address = (unsigned long) etext; 9.315 static mmu_update_t mmu_updates[L1_PAGETABLE_ENTRIES + 1]; 9.316 pgentry_t *tab = (pgentry_t *)start_info.pt_base, page; 9.317 unsigned long mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base)); 9.318 unsigned long offset; 9.319 int count = 0; 9.320 + int rc; 9.321 9.322 printk("setting %p-%p readonly\n", text, etext); 9.323 9.324 - while (start_address + PAGE_SIZE <= end_address) { 9.325 + while ( start_address + PAGE_SIZE <= end_address ) 9.326 + { 9.327 tab = (pgentry_t *)start_info.pt_base; 9.328 mfn = pfn_to_mfn(virt_to_pfn(start_info.pt_base)); 9.329 9.330 @@ -287,20 +318,25 @@ static void set_readonly(void *text, voi 9.331 9.332 offset = l1_table_offset(start_address); 9.333 9.334 - if (start_address != (unsigned long)&shared_info) { 9.335 - mmu_updates[count].ptr = ((pgentry_t)mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset; 9.336 - mmu_updates[count].val = tab[offset] & ~_PAGE_RW; 9.337 - count++; 9.338 - } else 9.339 - printk("skipped %p\n", start_address); 9.340 + if ( start_address != (unsigned long)&shared_info ) 9.341 + { 9.342 + mmu_updates[count].ptr = 9.343 + ((pgentry_t)mfn << PAGE_SHIFT) + sizeof(pgentry_t) * offset; 9.344 + mmu_updates[count].val = tab[offset] & ~_PAGE_RW; 9.345 + count++; 9.346 + } 9.347 + else 9.348 + printk("skipped %p\n", start_address); 9.349 9.350 start_address += PAGE_SIZE; 9.351 9.352 - if (count == L1_PAGETABLE_ENTRIES || start_address + PAGE_SIZE > end_address) 9.353 + if ( count == L1_PAGETABLE_ENTRIES || 9.354 + start_address + PAGE_SIZE > end_address ) 9.355 { 9.356 - if(HYPERVISOR_mmu_update(mmu_updates, count, NULL, DOMID_SELF) < 0) 9.357 + rc = HYPERVISOR_mmu_update(mmu_updates, count, NULL, DOMID_SELF); 9.358 + if ( rc < 0 ) 9.359 { 9.360 - printk("PTE could not be updated\n"); 9.361 + printk("ERROR: set_readonly(): PTE could not be updated\n"); 9.362 do_exit(); 9.363 } 9.364 count = 0; 9.365 @@ -308,41 +344,73 @@ static void set_readonly(void *text, voi 9.366 } 9.367 9.368 { 9.369 - mmuext_op_t op = { 9.370 - .cmd = MMUEXT_TLB_FLUSH_ALL, 9.371 - }; 9.372 - int count; 9.373 - HYPERVISOR_mmuext_op(&op, 1, &count, DOMID_SELF); 9.374 + mmuext_op_t op = { 9.375 + .cmd = MMUEXT_TLB_FLUSH_ALL, 9.376 + }; 9.377 + int count; 9.378 + HYPERVISOR_mmuext_op(&op, 1, &count, DOMID_SELF); 9.379 } 9.380 } 9.381 9.382 -void mem_test(unsigned long *start_add, unsigned long *end_add) 9.383 +/* 9.384 + * A useful mem testing function. Write the address to every address in the 9.385 + * range provided and read back the value. If verbose, print page walk to 9.386 + * some VA 9.387 + * 9.388 + * If we get MEM_TEST_MAX_ERRORS we might as well stop 9.389 + */ 9.390 +#define MEM_TEST_MAX_ERRORS 10 9.391 +int mem_test(unsigned long *start_va, unsigned long *end_va, int verbose) 9.392 { 9.393 unsigned long mask = 0x10000; 9.394 unsigned long *pointer; 9.395 - 9.396 - for(pointer = start_add; pointer < end_add; pointer++) 9.397 + int error_count = 0; 9.398 + 9.399 + /* write values and print page walks */ 9.400 + if ( verbose && (((unsigned long)start_va) & 0xfffff) ) 9.401 { 9.402 - if(!(((unsigned long)pointer) & 0xfffff)) 9.403 + printk("MemTest Start: 0x%lx\n", start_va); 9.404 + page_walk((unsigned long)start_va); 9.405 + } 9.406 + for ( pointer = start_va; pointer < end_va; pointer++ ) 9.407 + { 9.408 + if ( verbose && !(((unsigned long)pointer) & 0xfffff) ) 9.409 { 9.410 printk("Writing to %lx\n", pointer); 9.411 page_walk((unsigned long)pointer); 9.412 } 9.413 *pointer = (unsigned long)pointer & ~mask; 9.414 } 9.415 - 9.416 - for(pointer = start_add; pointer < end_add; pointer++) 9.417 + if ( verbose && (((unsigned long)end_va) & 0xfffff) ) 9.418 { 9.419 - if(((unsigned long)pointer & ~mask) != *pointer) 9.420 + printk("MemTest End: %lx\n", end_va-1); 9.421 + page_walk((unsigned long)end_va-1); 9.422 + } 9.423 + 9.424 + /* verify values */ 9.425 + for ( pointer = start_va; pointer < end_va; pointer++ ) 9.426 + { 9.427 + if ( ((unsigned long)pointer & ~mask) != *pointer ) 9.428 + { 9.429 printk("Read error at 0x%lx. Read: 0x%lx, should read 0x%lx\n", 9.430 - (unsigned long)pointer, 9.431 - *pointer, 9.432 - ((unsigned long)pointer & ~mask)); 9.433 + (unsigned long)pointer, *pointer, 9.434 + ((unsigned long)pointer & ~mask)); 9.435 + error_count++; 9.436 + if ( error_count >= MEM_TEST_MAX_ERRORS ) 9.437 + { 9.438 + printk("mem_test: too many errors\n"); 9.439 + return -1; 9.440 + } 9.441 + } 9.442 } 9.443 - 9.444 + return 0; 9.445 } 9.446 9.447 -static pgentry_t *get_pgt(unsigned long addr) 9.448 + 9.449 +/* 9.450 + * get the PTE for virtual address va if it exists. Otherwise NULL. 9.451 + */ 9.452 +static pgentry_t *get_pgt(unsigned long va) 9.453 { 9.454 unsigned long mfn; 9.455 pgentry_t *tab; 9.456 @@ -352,67 +420,78 @@ static pgentry_t *get_pgt(unsigned long 9.457 mfn = virt_to_mfn(start_info.pt_base); 9.458 9.459 #if defined(__x86_64__) 9.460 - offset = l4_table_offset(addr); 9.461 - if (!(tab[offset] & _PAGE_PRESENT)) 9.462 + offset = l4_table_offset(va); 9.463 + if ( !(tab[offset] & _PAGE_PRESENT) ) 9.464 return NULL; 9.465 mfn = pte_to_mfn(tab[offset]); 9.466 tab = mfn_to_virt(mfn); 9.467 #endif 9.468 - offset = l3_table_offset(addr); 9.469 - if (!(tab[offset] & _PAGE_PRESENT)) 9.470 + offset = l3_table_offset(va); 9.471 + if ( !(tab[offset] & _PAGE_PRESENT) ) 9.472 + return NULL; 9.473 + mfn = pte_to_mfn(tab[offset]); 9.474 + tab = mfn_to_virt(mfn); 9.475 + offset = l2_table_offset(va); 9.476 + if ( !(tab[offset] & _PAGE_PRESENT) ) 9.477 return NULL; 9.478 mfn = pte_to_mfn(tab[offset]); 9.479 tab = mfn_to_virt(mfn); 9.480 - offset = l2_table_offset(addr); 9.481 - if (!(tab[offset] & _PAGE_PRESENT)) 9.482 - return NULL; 9.483 - mfn = pte_to_mfn(tab[offset]); 9.484 - tab = mfn_to_virt(mfn); 9.485 - offset = l1_table_offset(addr); 9.486 + offset = l1_table_offset(va); 9.487 return &tab[offset]; 9.488 } 9.489 9.490 -pgentry_t *need_pgt(unsigned long addr) 9.491 + 9.492 +/* 9.493 + * return a valid PTE for a given virtual address. If PTE does not exist, 9.494 + * allocate page-table pages. 9.495 + */ 9.496 +pgentry_t *need_pgt(unsigned long va) 9.497 { 9.498 - unsigned long mfn; 9.499 + unsigned long pt_mfn; 9.500 pgentry_t *tab; 9.501 unsigned long pt_pfn; 9.502 unsigned offset; 9.503 9.504 tab = (pgentry_t *)start_info.pt_base; 9.505 - mfn = virt_to_mfn(start_info.pt_base); 9.506 + pt_mfn = virt_to_mfn(start_info.pt_base); 9.507 9.508 #if defined(__x86_64__) 9.509 - offset = l4_table_offset(addr); 9.510 - if (!(tab[offset] & _PAGE_PRESENT)) { 9.511 + offset = l4_table_offset(va); 9.512 + if ( !(tab[offset] & _PAGE_PRESENT) ) 9.513 + { 9.514 pt_pfn = virt_to_pfn(alloc_page()); 9.515 - new_pt_frame(&pt_pfn, mfn, offset, L3_FRAME); 9.516 + new_pt_frame(&pt_pfn, pt_mfn, offset, L3_FRAME); 9.517 } 9.518 ASSERT(tab[offset] & _PAGE_PRESENT); 9.519 - mfn = pte_to_mfn(tab[offset]); 9.520 - tab = mfn_to_virt(mfn); 9.521 + pt_mfn = pte_to_mfn(tab[offset]); 9.522 + tab = mfn_to_virt(pt_mfn); 9.523 #endif 9.524 - offset = l3_table_offset(addr); 9.525 - if (!(tab[offset] & _PAGE_PRESENT)) { 9.526 + offset = l3_table_offset(va); 9.527 + if ( !(tab[offset] & _PAGE_PRESENT) ) 9.528 + { 9.529 pt_pfn = virt_to_pfn(alloc_page()); 9.530 - new_pt_frame(&pt_pfn, mfn, offset, L2_FRAME); 9.531 + new_pt_frame(&pt_pfn, pt_mfn, offset, L2_FRAME); 9.532 } 9.533 ASSERT(tab[offset] & _PAGE_PRESENT); 9.534 - mfn = pte_to_mfn(tab[offset]); 9.535 - tab = mfn_to_virt(mfn); 9.536 - offset = l2_table_offset(addr); 9.537 - if (!(tab[offset] & _PAGE_PRESENT)) { 9.538 + pt_mfn = pte_to_mfn(tab[offset]); 9.539 + tab = mfn_to_virt(pt_mfn); 9.540 + offset = l2_table_offset(va); 9.541 + if ( !(tab[offset] & _PAGE_PRESENT) ) 9.542 + { 9.543 pt_pfn = virt_to_pfn(alloc_page()); 9.544 - new_pt_frame(&pt_pfn, mfn, offset, L1_FRAME); 9.545 + new_pt_frame(&pt_pfn, pt_mfn, offset, L1_FRAME); 9.546 } 9.547 ASSERT(tab[offset] & _PAGE_PRESENT); 9.548 - mfn = pte_to_mfn(tab[offset]); 9.549 - tab = mfn_to_virt(mfn); 9.550 + pt_mfn = pte_to_mfn(tab[offset]); 9.551 + tab = mfn_to_virt(pt_mfn); 9.552 9.553 - offset = l1_table_offset(addr); 9.554 + offset = l1_table_offset(va); 9.555 return &tab[offset]; 9.556 } 9.557 9.558 +/* 9.559 + * Reserve an area of virtual address space for mappings and Heap 9.560 + */ 9.561 static unsigned long demand_map_area_start; 9.562 #ifdef __x86_64__ 9.563 #define DEMAND_MAP_PAGES ((128ULL << 30) / PAGE_SIZE) 9.564 @@ -437,7 +516,8 @@ void arch_init_demand_mapping_area(unsig 9.565 9.566 demand_map_area_start = (unsigned long) pfn_to_virt(cur_pfn); 9.567 cur_pfn += DEMAND_MAP_PAGES; 9.568 - printk("Demand map pfns at %lx-%lx.\n", demand_map_area_start, pfn_to_virt(cur_pfn)); 9.569 + printk("Demand map pfns at %lx-%lx.\n", 9.570 + demand_map_area_start, pfn_to_virt(cur_pfn)); 9.571 9.572 #ifdef HAVE_LIBC 9.573 cur_pfn++; 9.574 @@ -448,104 +528,346 @@ void arch_init_demand_mapping_area(unsig 9.575 #endif 9.576 } 9.577 9.578 +unsigned long allocate_ondemand(unsigned long n, unsigned long alignment) 9.579 +{ 9.580 + unsigned long x; 9.581 + unsigned long y = 0; 9.582 + 9.583 + /* Find a properly aligned run of n contiguous frames */ 9.584 + for ( x = 0; 9.585 + x <= DEMAND_MAP_PAGES - n; 9.586 + x = (x + y + 1 + alignment - 1) & ~(alignment - 1) ) 9.587 + { 9.588 + unsigned long addr = demand_map_area_start + x * PAGE_SIZE; 9.589 + pgentry_t *pgt = get_pgt(addr); 9.590 + for ( y = 0; y < n; y++, addr += PAGE_SIZE ) 9.591 + { 9.592 + if ( !(addr & L1_MASK) ) 9.593 + pgt = get_pgt(addr); 9.594 + if ( pgt ) 9.595 + { 9.596 + if ( *pgt & _PAGE_PRESENT ) 9.597 + break; 9.598 + pgt++; 9.599 + } 9.600 + } 9.601 + if ( y == n ) 9.602 + break; 9.603 + } 9.604 + if ( y != n ) 9.605 + { 9.606 + printk("Failed to find %ld frames!\n", n); 9.607 + return 0; 9.608 + } 9.609 + return demand_map_area_start + x * PAGE_SIZE; 9.610 +} 9.611 + 9.612 +/* 9.613 + * Map an array of MFNs contiguously into virtual address space starting at 9.614 + * va. map f[i*stride]+i*increment for i in 0..n-1. 9.615 + */ 9.616 #define MAP_BATCH ((STACK_SIZE / 2) / sizeof(mmu_update_t)) 9.617 -void do_map_frames(unsigned long addr, 9.618 - unsigned long *f, unsigned long n, unsigned long stride, 9.619 - unsigned long increment, domid_t id, int may_fail, unsigned long prot) 9.620 +void do_map_frames(unsigned long va, 9.621 + unsigned long *mfns, unsigned long n, 9.622 + unsigned long stride, unsigned long incr, 9.623 + domid_t id, int may_fail, 9.624 + unsigned long prot) 9.625 { 9.626 pgentry_t *pgt = NULL; 9.627 unsigned long done = 0; 9.628 unsigned long i; 9.629 int rc; 9.630 9.631 - while (done < n) { 9.632 - unsigned long todo; 9.633 + if ( !mfns ) 9.634 + { 9.635 + printk("do_map_frames: no mfns supplied\n"); 9.636 + return; 9.637 + } 9.638 + DEBUG("va=%p n=0x%lx, mfns[0]=0x%lx stride=0x%lx incr=0x%lx prot=0x%lx\n", 9.639 + va, n, mfns[0], stride, incr, prot); 9.640 + 9.641 + while ( done < n ) 9.642 + { 9.643 + unsigned long todo; 9.644 9.645 - if (may_fail) 9.646 - todo = 1; 9.647 - else 9.648 - todo = n - done; 9.649 + if ( may_fail ) 9.650 + todo = 1; 9.651 + else 9.652 + todo = n - done; 9.653 9.654 - if (todo > MAP_BATCH) 9.655 - todo = MAP_BATCH; 9.656 + if ( todo > MAP_BATCH ) 9.657 + todo = MAP_BATCH; 9.658 9.659 - { 9.660 - mmu_update_t mmu_updates[todo]; 9.661 + { 9.662 + mmu_update_t mmu_updates[todo]; 9.663 9.664 - for (i = 0; i < todo; i++, addr += PAGE_SIZE, pgt++) { 9.665 - if (!pgt || !(addr & L1_MASK)) 9.666 - pgt = need_pgt(addr); 9.667 - mmu_updates[i].ptr = virt_to_mach(pgt); 9.668 - mmu_updates[i].val = ((pgentry_t)(f[(done + i) * stride] + (done + i) * increment) << PAGE_SHIFT) | prot; 9.669 - } 9.670 + for ( i = 0; i < todo; i++, va += PAGE_SIZE, pgt++) 9.671 + { 9.672 + if ( !pgt || !(va & L1_MASK) ) 9.673 + pgt = need_pgt(va); 9.674 + 9.675 + mmu_updates[i].ptr = virt_to_mach(pgt) | MMU_NORMAL_PT_UPDATE; 9.676 + mmu_updates[i].val = ((pgentry_t)(mfns[(done + i) * stride] + 9.677 + (done + i) * incr) 9.678 + << PAGE_SHIFT) | prot; 9.679 + } 9.680 9.681 - rc = HYPERVISOR_mmu_update(mmu_updates, todo, NULL, id); 9.682 - if (rc < 0) { 9.683 - if (may_fail) 9.684 - f[done * stride] |= 0xF0000000; 9.685 - else { 9.686 - printk("Map %ld (%lx, ...) at %p failed: %d.\n", todo, f[done * stride] + done * increment, addr, rc); 9.687 + rc = HYPERVISOR_mmu_update(mmu_updates, todo, NULL, id); 9.688 + if ( rc < 0 ) 9.689 + { 9.690 + if (may_fail) 9.691 + mfns[done * stride] |= 0xF0000000; 9.692 + else { 9.693 + printk("Map %ld (%lx, ...) at %p failed: %d.\n", 9.694 + todo, mfns[done * stride] + done * incr, va, rc); 9.695 do_exit(); 9.696 - } 9.697 - } 9.698 - } 9.699 - 9.700 - done += todo; 9.701 + } 9.702 + } 9.703 + } 9.704 + done += todo; 9.705 } 9.706 } 9.707 9.708 -unsigned long allocate_ondemand(unsigned long n, unsigned long alignment) 9.709 +/* 9.710 + * Map an array of MFNs contiguous into virtual address space. Virtual 9.711 + * addresses are allocated from the on demand area. 9.712 + */ 9.713 +void *map_frames_ex(unsigned long *mfns, unsigned long n, 9.714 + unsigned long stride, unsigned long incr, 9.715 + unsigned long alignment, 9.716 + domid_t id, int may_fail, unsigned long prot) 9.717 { 9.718 - unsigned long x; 9.719 - unsigned long y = 0; 9.720 + unsigned long va = allocate_ondemand(n, alignment); 9.721 + 9.722 + if ( !va ) 9.723 + return NULL; 9.724 + 9.725 + do_map_frames(va, mfns, n, stride, incr, id, may_fail, prot); 9.726 + 9.727 + return (void *)va; 9.728 +} 9.729 + 9.730 +/* 9.731 + * Unmap nun_frames frames mapped at virtual address va. 9.732 + */ 9.733 +#define UNMAP_BATCH ((STACK_SIZE / 2) / sizeof(multicall_entry_t)) 9.734 +int unmap_frames(unsigned long va, unsigned long num_frames) 9.735 +{ 9.736 + int n = UNMAP_BATCH; 9.737 + multicall_entry_t call[n]; 9.738 + int ret; 9.739 + int i; 9.740 + 9.741 + ASSERT(!((unsigned long)va & ~PAGE_MASK)); 9.742 9.743 - /* Find a properly aligned run of n contiguous frames */ 9.744 - for (x = 0; x <= DEMAND_MAP_PAGES - n; x = (x + y + 1 + alignment - 1) & ~(alignment - 1)) { 9.745 - unsigned long addr = demand_map_area_start + x * PAGE_SIZE; 9.746 - pgentry_t *pgt = get_pgt(addr); 9.747 - for (y = 0; y < n; y++, addr += PAGE_SIZE) { 9.748 - if (!(addr & L1_MASK)) 9.749 - pgt = get_pgt(addr); 9.750 - if (pgt) { 9.751 - if (*pgt & _PAGE_PRESENT) 9.752 - break; 9.753 - pgt++; 9.754 + DEBUG("va=%p, num=0x%lx\n", va, num_frames); 9.755 + 9.756 + while ( num_frames ) { 9.757 + if ( n > num_frames ) 9.758 + n = num_frames; 9.759 + 9.760 + for ( i = 0; i < n; i++ ) 9.761 + { 9.762 + int arg = 0; 9.763 + /* simply update the PTE for the VA and invalidate TLB */ 9.764 + call[i].op = __HYPERVISOR_update_va_mapping; 9.765 + call[i].args[arg++] = va; 9.766 + call[i].args[arg++] = 0; 9.767 +#ifdef __i386__ 9.768 + call[i].args[arg++] = 0; 9.769 +#endif 9.770 + call[i].args[arg++] = UVMF_INVLPG; 9.771 + 9.772 + va += PAGE_SIZE; 9.773 + } 9.774 + 9.775 + ret = HYPERVISOR_multicall(call, n); 9.776 + if ( ret ) 9.777 + { 9.778 + printk("update_va_mapping hypercall failed with rc=%d.\n", ret); 9.779 + return -ret; 9.780 + } 9.781 + 9.782 + for ( i = 0; i < n; i++ ) 9.783 + { 9.784 + if ( call[i].result ) 9.785 + { 9.786 + printk("update_va_mapping failed for with rc=%d.\n", ret); 9.787 + return -(call[i].result); 9.788 } 9.789 } 9.790 - if (y == n) 9.791 - break; 9.792 + num_frames -= n; 9.793 } 9.794 - if (y != n) { 9.795 - printk("Failed to find %ld frames!\n", n); 9.796 - return 0; 9.797 - } 9.798 - return demand_map_area_start + x * PAGE_SIZE; 9.799 + return 0; 9.800 } 9.801 9.802 -void *map_frames_ex(unsigned long *f, unsigned long n, unsigned long stride, 9.803 - unsigned long increment, unsigned long alignment, domid_t id, 9.804 - int may_fail, unsigned long prot) 9.805 +/* 9.806 + * Allocate pages which are contiguous in machine memory. 9.807 + * Returns a VA to where they are mapped or 0 on failure. 9.808 + * 9.809 + * addr_bits indicates if the region has restrictions on where it is 9.810 + * located. Typical values are 32 (if for example PCI devices can't access 9.811 + * 64bit memory) or 0 for no restrictions. 9.812 + * 9.813 + * Allocated pages can be freed using the page allocators free_pages() 9.814 + * function. 9.815 + * 9.816 + * based on Linux function xen_create_contiguous_region() 9.817 + */ 9.818 +#define MAX_CONTIG_ORDER 9 /* 2MB */ 9.819 +unsigned long alloc_contig_pages(int order, unsigned int addr_bits) 9.820 { 9.821 - unsigned long addr = allocate_ondemand(n, alignment); 9.822 + unsigned long in_va, va; 9.823 + unsigned long in_frames[1UL << order], out_frames, mfn; 9.824 + multicall_entry_t call[1UL << order]; 9.825 + unsigned int i, num_pages = 1UL << order; 9.826 + int ret, exch_success; 9.827 + 9.828 + /* pass in num_pages 'extends' of size 1 and 9.829 + * request 1 extend of size 'order */ 9.830 + struct xen_memory_exchange exchange = { 9.831 + .in = { 9.832 + .nr_extents = num_pages, 9.833 + .extent_order = 0, 9.834 + .domid = DOMID_SELF 9.835 + }, 9.836 + .out = { 9.837 + .nr_extents = 1, 9.838 + .extent_order = order, 9.839 + .address_bits = addr_bits, 9.840 + .domid = DOMID_SELF 9.841 + }, 9.842 + .nr_exchanged = 0 9.843 + }; 9.844 + 9.845 + if ( order > MAX_CONTIG_ORDER ) 9.846 + { 9.847 + printk("alloc_contig_pages: order too large 0x%x > 0x%x\n", 9.848 + order, MAX_CONTIG_ORDER); 9.849 + return 0; 9.850 + } 9.851 + 9.852 + /* Allocate some potentially discontiguous pages */ 9.853 + in_va = alloc_pages(order); 9.854 + if ( !in_va ) 9.855 + { 9.856 + printk("alloc_contig_pages: could not get enough pages (order=0x%x\n", 9.857 + order); 9.858 + return 0; 9.859 + } 9.860 + 9.861 + /* set up arguments for exchange hyper call */ 9.862 + set_xen_guest_handle(exchange.in.extent_start, in_frames); 9.863 + set_xen_guest_handle(exchange.out.extent_start, &out_frames); 9.864 + 9.865 + /* unmap current frames, keep a list of MFNs */ 9.866 + for ( i = 0; i < num_pages; i++ ) 9.867 + { 9.868 + int arg = 0; 9.869 + 9.870 + va = in_va + (PAGE_SIZE * i); 9.871 + in_frames[i] = virt_to_mfn(va); 9.872 + 9.873 + /* update P2M mapping */ 9.874 + phys_to_machine_mapping[virt_to_pfn(va)] = INVALID_P2M_ENTRY; 9.875 9.876 - if (!addr) 9.877 - return NULL; 9.878 + /* build multi call */ 9.879 + call[i].op = __HYPERVISOR_update_va_mapping; 9.880 + call[i].args[arg++] = va; 9.881 + call[i].args[arg++] = 0; 9.882 +#ifdef __i386__ 9.883 + call[i].args[arg++] = 0; 9.884 +#endif 9.885 + call[i].args[arg++] = UVMF_INVLPG; 9.886 + } 9.887 + 9.888 + ret = HYPERVISOR_multicall(call, i); 9.889 + if ( ret ) 9.890 + { 9.891 + printk("Odd, update_va_mapping hypercall failed with rc=%d.\n", ret); 9.892 + return 0; 9.893 + } 9.894 + 9.895 + /* try getting a contig range of MFNs */ 9.896 + out_frames = virt_to_pfn(in_va); /* PFNs to populate */ 9.897 + ret = HYPERVISOR_memory_op(XENMEM_exchange, &exchange); 9.898 + if ( ret ) { 9.899 + printk("mem exchanged order=0x%x failed with rc=%d, nr_exchanged=%d\n", 9.900 + order, ret, exchange.nr_exchanged); 9.901 + /* we still need to return the allocated pages above to the pool 9.902 + * ie. map them back into the 1:1 mapping etc. so we continue but 9.903 + * in the end return the pages to the page allocator and return 0. */ 9.904 + exch_success = 0; 9.905 + } 9.906 + else 9.907 + exch_success = 1; 9.908 9.909 - /* Found it at x. Map it in. */ 9.910 - do_map_frames(addr, f, n, stride, increment, id, may_fail, prot); 9.911 + /* map frames into 1:1 and update p2m */ 9.912 + for ( i = 0; i < num_pages; i++ ) 9.913 + { 9.914 + int arg = 0; 9.915 + pte_t pte; 9.916 + 9.917 + va = in_va + (PAGE_SIZE * i); 9.918 + mfn = i < exchange.nr_exchanged ? (out_frames + i) : in_frames[i]; 9.919 + pte = __pte(mfn << PAGE_SHIFT | L1_PROT); 9.920 + 9.921 + /* update P2M mapping */ 9.922 + phys_to_machine_mapping[virt_to_pfn(va)] = mfn; 9.923 9.924 - return (void *)addr; 9.925 + /* build multi call */ 9.926 + call[i].op = __HYPERVISOR_update_va_mapping; 9.927 + call[i].args[arg++] = va; 9.928 +#ifdef __x86_64__ 9.929 + call[i].args[arg++] = (pgentry_t)pte.pte; 9.930 +#else 9.931 + call[i].args[arg++] = pte.pte_low; 9.932 + call[i].args[arg++] = pte.pte_high; 9.933 +#endif 9.934 + call[i].args[arg++] = UVMF_INVLPG; 9.935 + } 9.936 + ret = HYPERVISOR_multicall(call, i); 9.937 + if ( ret ) 9.938 + { 9.939 + printk("update_va_mapping hypercall no. 2 failed with rc=%d.\n", ret); 9.940 + return 0; 9.941 + } 9.942 + 9.943 + if ( !exch_success ) 9.944 + { 9.945 + /* since the exchanged failed we just free the pages as well */ 9.946 + free_pages((void *) in_va, order); 9.947 + return 0; 9.948 + } 9.949 + 9.950 + return in_va; 9.951 } 9.952 9.953 +/* 9.954 + * Check if a given MFN refers to real memory 9.955 + */ 9.956 +static long system_ram_end_mfn; 9.957 +int mfn_is_ram(unsigned long mfn) 9.958 +{ 9.959 + /* very crude check if a given MFN is memory or not. Probably should 9.960 + * make this a little more sophisticated ;) */ 9.961 + return (mfn <= system_ram_end_mfn) ? 1 : 0; 9.962 +} 9.963 + 9.964 + 9.965 +/* 9.966 + * Clear some of the bootstrap memory 9.967 + */ 9.968 static void clear_bootstrap(void) 9.969 { 9.970 pte_t nullpte = { }; 9.971 + int rc; 9.972 9.973 /* Use first page as the CoW zero page */ 9.974 memset(&_text, 0, PAGE_SIZE); 9.975 mfn_zero = virt_to_mfn((unsigned long) &_text); 9.976 - if (HYPERVISOR_update_va_mapping(0, nullpte, UVMF_INVLPG)) 9.977 - printk("Unable to unmap NULL page\n"); 9.978 + if ( (rc = HYPERVISOR_update_va_mapping(0, nullpte, UVMF_INVLPG)) ) 9.979 + printk("Unable to unmap NULL page. rc=%d\n", rc); 9.980 } 9.981 9.982 void arch_init_p2m(unsigned long max_pfn) 9.983 @@ -570,19 +892,19 @@ void arch_init_p2m(unsigned long max_pfn 9.984 unsigned long pfn; 9.985 9.986 l3_list = (unsigned long *)alloc_page(); 9.987 - for(pfn=0; pfn<max_pfn; pfn++) 9.988 + for ( pfn=0; pfn<max_pfn; pfn++ ) 9.989 { 9.990 - if(!(pfn % (L1_P2M_ENTRIES * L2_P2M_ENTRIES))) 9.991 + if ( !(pfn % (L1_P2M_ENTRIES * L2_P2M_ENTRIES)) ) 9.992 { 9.993 l2_list = (unsigned long*)alloc_page(); 9.994 - if((pfn >> L3_P2M_SHIFT) > 0) 9.995 + if ( (pfn >> L3_P2M_SHIFT) > 0 ) 9.996 { 9.997 printk("Error: Too many pfns.\n"); 9.998 do_exit(); 9.999 } 9.1000 l3_list[(pfn >> L2_P2M_SHIFT)] = virt_to_mfn(l2_list); 9.1001 } 9.1002 - if(!(pfn % (L1_P2M_ENTRIES))) 9.1003 + if ( !(pfn % (L1_P2M_ENTRIES)) ) 9.1004 { 9.1005 l1_list = (unsigned long*)alloc_page(); 9.1006 l2_list[(pfn >> L1_P2M_SHIFT) & L2_P2M_MASK] = 9.1007 @@ -598,33 +920,40 @@ void arch_init_p2m(unsigned long max_pfn 9.1008 9.1009 void arch_init_mm(unsigned long* start_pfn_p, unsigned long* max_pfn_p) 9.1010 { 9.1011 - 9.1012 - unsigned long start_pfn, max_pfn, virt_pfns; 9.1013 + unsigned long start_pfn, max_pfn; 9.1014 9.1015 - printk(" _text: %p\n", &_text); 9.1016 - printk(" _etext: %p\n", &_etext); 9.1017 - printk(" _erodata: %p\n", &_erodata); 9.1018 - printk(" _edata: %p\n", &_edata); 9.1019 - printk(" stack start: %p\n", stack); 9.1020 - printk(" _end: %p\n", &_end); 9.1021 + printk(" _text: %p(VA)\n", &_text); 9.1022 + printk(" _etext: %p(VA)\n", &_etext); 9.1023 + printk(" _erodata: %p(VA)\n", &_erodata); 9.1024 + printk(" _edata: %p(VA)\n", &_edata); 9.1025 + printk("stack start: %p(VA)\n", stack); 9.1026 + printk(" _end: %p(VA)\n", &_end); 9.1027 9.1028 /* First page follows page table pages and 3 more pages (store page etc) */ 9.1029 start_pfn = PFN_UP(to_phys(start_info.pt_base)) + 9.1030 - start_info.nr_pt_frames + 3; 9.1031 + start_info.nr_pt_frames + 3; 9.1032 max_pfn = start_info.nr_pages; 9.1033 9.1034 /* We need room for demand mapping and heap, clip available memory */ 9.1035 - virt_pfns = DEMAND_MAP_PAGES + HEAP_PAGES; 9.1036 - if (max_pfn + virt_pfns + 1 < max_pfn) 9.1037 - max_pfn = -(virt_pfns + 1); 9.1038 +#if defined(__i386__) 9.1039 + { 9.1040 + unsigned long virt_pfns = 1 + DEMAND_MAP_PAGES + 1 + HEAP_PAGES; 9.1041 + if (max_pfn + virt_pfns >= 0x100000) 9.1042 + max_pfn = 0x100000 - virt_pfns - 1; 9.1043 + } 9.1044 +#endif 9.1045 9.1046 - printk(" start_pfn: %lx\n", start_pfn); 9.1047 - printk(" max_pfn: %lx\n", max_pfn); 9.1048 + printk(" start_pfn: %lx\n", start_pfn); 9.1049 + printk(" max_pfn: %lx\n", max_pfn); 9.1050 9.1051 build_pagetable(&start_pfn, &max_pfn); 9.1052 clear_bootstrap(); 9.1053 set_readonly(&_text, &_erodata); 9.1054 9.1055 + /* get the number of physical pages the system has. Used to check for 9.1056 + * system memory. */ 9.1057 + system_ram_end_mfn = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL); 9.1058 + 9.1059 *start_pfn_p = start_pfn; 9.1060 *max_pfn_p = max_pfn; 9.1061 }
10.1 --- a/extras/mini-os/arch/x86/setup.c Mon Mar 30 19:56:30 2009 -0700 10.2 +++ b/extras/mini-os/arch/x86/setup.c Thu Apr 23 18:49:41 2009 -0700 10.3 @@ -63,10 +63,12 @@ void failsafe_callback(void); 10.4 static 10.5 shared_info_t *map_shared_info(unsigned long pa) 10.6 { 10.7 - if ( HYPERVISOR_update_va_mapping( 10.8 - (unsigned long)shared_info, __pte(pa | 7), UVMF_INVLPG) ) 10.9 + int rc; 10.10 + 10.11 + if ( (rc = HYPERVISOR_update_va_mapping( 10.12 + (unsigned long)shared_info, __pte(pa | 7), UVMF_INVLPG)) ) 10.13 { 10.14 - printk("Failed to map shared_info!!\n"); 10.15 + printk("Failed to map shared_info!! rc=%d\n", rc); 10.16 do_exit(); 10.17 } 10.18 return (shared_info_t *)shared_info;
11.1 --- a/extras/mini-os/blkfront.c Mon Mar 30 19:56:30 2009 -0700 11.2 +++ b/extras/mini-os/blkfront.c Thu Apr 23 18:49:41 2009 -0700 11.3 @@ -244,10 +244,6 @@ void shutdown_blkfront(struct blkfront_d 11.4 xenbus_wait_for_value(path, "5", &dev->events); 11.5 11.6 err = xenbus_printf(XBT_NIL, nodename, "state", "%u", 6); 11.7 - xenbus_wait_for_value(path, "6", &dev->events); 11.8 - 11.9 - err = xenbus_printf(XBT_NIL, nodename, "state", "%u", 1); 11.10 - xenbus_wait_for_value(path, "2", &dev->events); 11.11 11.12 xenbus_unwatch_path(XBT_NIL, path); 11.13 11.14 @@ -317,19 +313,21 @@ void blkfront_aio(struct blkfront_aiocb 11.15 req->sector_number = aiocbp->aio_offset / dev->info.sector_size; 11.16 11.17 for (j = 0; j < n; j++) { 11.18 + req->seg[j].first_sect = 0; 11.19 + req->seg[j].last_sect = PAGE_SIZE / dev->info.sector_size - 1; 11.20 + } 11.21 + req->seg[0].first_sect = ((uintptr_t)aiocbp->aio_buf & ~PAGE_MASK) / dev->info.sector_size; 11.22 + req->seg[n-1].last_sect = (((uintptr_t)aiocbp->aio_buf + aiocbp->aio_nbytes - 1) & ~PAGE_MASK) / dev->info.sector_size; 11.23 + for (j = 0; j < n; j++) { 11.24 uintptr_t data = start + j * PAGE_SIZE; 11.25 if (!write) { 11.26 /* Trigger CoW if needed */ 11.27 - *(char*)data = 0; 11.28 + *(char*)(data + (req->seg[j].first_sect << 9)) = 0; 11.29 barrier(); 11.30 } 11.31 aiocbp->gref[j] = req->seg[j].gref = 11.32 gnttab_grant_access(dev->dom, virtual_to_mfn(data), write); 11.33 - req->seg[j].first_sect = 0; 11.34 - req->seg[j].last_sect = PAGE_SIZE / dev->info.sector_size - 1; 11.35 } 11.36 - req->seg[0].first_sect = ((uintptr_t)aiocbp->aio_buf & ~PAGE_MASK) / dev->info.sector_size; 11.37 - req->seg[n-1].last_sect = (((uintptr_t)aiocbp->aio_buf + aiocbp->aio_nbytes - 1) & ~PAGE_MASK) / dev->info.sector_size; 11.38 11.39 dev->ring.req_prod_pvt = i + 1; 11.40
12.1 --- a/extras/mini-os/events.c Mon Mar 30 19:56:30 2009 -0700 12.2 +++ b/extras/mini-os/events.c Thu Apr 23 18:49:41 2009 -0700 12.3 @@ -42,19 +42,23 @@ void unbind_all_ports(void) 12.4 int cpu = 0; 12.5 shared_info_t *s = HYPERVISOR_shared_info; 12.6 vcpu_info_t *vcpu_info = &s->vcpu_info[cpu]; 12.7 + int rc; 12.8 12.9 - for (i = 0; i < NR_EVS; i++) 12.10 + for ( i = 0; i < NR_EVS; i++ ) 12.11 { 12.12 - if (i == start_info.console.domU.evtchn || 12.13 - i == start_info.store_evtchn) 12.14 + if ( i == start_info.console.domU.evtchn || 12.15 + i == start_info.store_evtchn) 12.16 continue; 12.17 - if (test_and_clear_bit(i, bound_ports)) 12.18 + 12.19 + if ( test_and_clear_bit(i, bound_ports) ) 12.20 { 12.21 struct evtchn_close close; 12.22 printk("port %d still bound!\n", i); 12.23 mask_evtchn(i); 12.24 close.port = i; 12.25 - HYPERVISOR_event_channel_op(EVTCHNOP_close, &close); 12.26 + rc = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close); 12.27 + if ( rc ) 12.28 + printk("WARN: close_port %s failed rc=%d. ignored\n", i, rc); 12.29 clear_evtchn(i); 12.30 } 12.31 } 12.32 @@ -71,8 +75,9 @@ int do_event(evtchn_port_t port, struct 12.33 12.34 clear_evtchn(port); 12.35 12.36 - if (port >= NR_EVS) { 12.37 - printk("Port number too large: %d\n", port); 12.38 + if ( port >= NR_EVS ) 12.39 + { 12.40 + printk("WARN: do_event(): Port number too large: %d\n", port); 12.41 return 1; 12.42 } 12.43 12.44 @@ -89,9 +94,9 @@ int do_event(evtchn_port_t port, struct 12.45 evtchn_port_t bind_evtchn(evtchn_port_t port, evtchn_handler_t handler, 12.46 void *data) 12.47 { 12.48 - if(ev_actions[port].handler != default_handler) 12.49 + if ( ev_actions[port].handler != default_handler ) 12.50 printk("WARN: Handler for port %d already registered, replacing\n", 12.51 - port); 12.52 + port); 12.53 12.54 ev_actions[port].data = data; 12.55 wmb(); 12.56 @@ -104,8 +109,9 @@ evtchn_port_t bind_evtchn(evtchn_port_t 12.57 void unbind_evtchn(evtchn_port_t port ) 12.58 { 12.59 struct evtchn_close close; 12.60 + int rc; 12.61 12.62 - if (ev_actions[port].handler == default_handler) 12.63 + if ( ev_actions[port].handler == default_handler ) 12.64 printk("WARN: No handler for port %d when unbinding\n", port); 12.65 mask_evtchn(port); 12.66 clear_evtchn(port); 12.67 @@ -116,37 +122,43 @@ void unbind_evtchn(evtchn_port_t port ) 12.68 clear_bit(port, bound_ports); 12.69 12.70 close.port = port; 12.71 - HYPERVISOR_event_channel_op(EVTCHNOP_close, &close); 12.72 + rc = HYPERVISOR_event_channel_op(EVTCHNOP_close, &close); 12.73 + if ( rc ) 12.74 + printk("WARN: close_port %s failed rc=%d. ignored\n", port, rc); 12.75 + 12.76 } 12.77 12.78 evtchn_port_t bind_virq(uint32_t virq, evtchn_handler_t handler, void *data) 12.79 { 12.80 evtchn_bind_virq_t op; 12.81 + int rc; 12.82 12.83 /* Try to bind the virq to a port */ 12.84 op.virq = virq; 12.85 op.vcpu = smp_processor_id(); 12.86 12.87 - if ( HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, &op) != 0 ) 12.88 + if ( (rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, &op)) != 0 ) 12.89 { 12.90 - printk("Failed to bind virtual IRQ %d\n", virq); 12.91 + printk("Failed to bind virtual IRQ %d with rc=%d\n", virq, rc); 12.92 return -1; 12.93 } 12.94 bind_evtchn(op.port, handler, data); 12.95 return op.port; 12.96 } 12.97 12.98 -evtchn_port_t bind_pirq(uint32_t pirq, int will_share, evtchn_handler_t handler, void *data) 12.99 +evtchn_port_t bind_pirq(uint32_t pirq, int will_share, 12.100 + evtchn_handler_t handler, void *data) 12.101 { 12.102 evtchn_bind_pirq_t op; 12.103 + int rc; 12.104 12.105 /* Try to bind the pirq to a port */ 12.106 op.pirq = pirq; 12.107 op.flags = will_share ? BIND_PIRQ__WILL_SHARE : 0; 12.108 12.109 - if ( HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &op) != 0 ) 12.110 + if ( (rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_pirq, &op)) != 0 ) 12.111 { 12.112 - printk("Failed to bind physical IRQ %d\n", pirq); 12.113 + printk("Failed to bind physical IRQ %d with rc=%d\n", pirq, rc); 12.114 return -1; 12.115 } 12.116 bind_evtchn(op.port, handler, data); 12.117 @@ -173,7 +185,8 @@ void init_events(void) 12.118 asm volatile("movl %0,%%fs ; movl %0,%%gs" :: "r" (0)); 12.119 wrmsrl(0xc0000101, &cpu0_pda); /* 0xc0000101 is MSR_GS_BASE */ 12.120 cpu0_pda.irqcount = -1; 12.121 - cpu0_pda.irqstackptr = (void*) (((unsigned long)irqstack + 2 * STACK_SIZE) & ~(STACK_SIZE - 1)); 12.122 + cpu0_pda.irqstackptr = (void*) (((unsigned long)irqstack + 2 * STACK_SIZE) 12.123 + & ~(STACK_SIZE - 1)); 12.124 #endif 12.125 /* initialize event handler */ 12.126 for ( i = 0; i < NR_EVS; i++ ) 12.127 @@ -207,15 +220,19 @@ void default_handler(evtchn_port_t port, 12.128 int evtchn_alloc_unbound(domid_t pal, evtchn_handler_t handler, 12.129 void *data, evtchn_port_t *port) 12.130 { 12.131 - int err; 12.132 + int rc; 12.133 + 12.134 evtchn_alloc_unbound_t op; 12.135 op.dom = DOMID_SELF; 12.136 op.remote_dom = pal; 12.137 - err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op); 12.138 - if (err) 12.139 - return err; 12.140 + rc = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op); 12.141 + if ( rc ) 12.142 + { 12.143 + printk("ERROR: alloc_unbound failed with rc=%d", rc); 12.144 + return rc; 12.145 + } 12.146 *port = bind_evtchn(op.port, handler, data); 12.147 - return err; 12.148 + return rc; 12.149 } 12.150 12.151 /* Connect to a port so as to allow the exchange of notifications with 12.152 @@ -225,15 +242,28 @@ int evtchn_bind_interdomain(domid_t pal, 12.153 evtchn_handler_t handler, void *data, 12.154 evtchn_port_t *local_port) 12.155 { 12.156 - int err; 12.157 + int rc; 12.158 evtchn_port_t port; 12.159 evtchn_bind_interdomain_t op; 12.160 op.remote_dom = pal; 12.161 op.remote_port = remote_port; 12.162 - err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op); 12.163 - if (err) 12.164 - return err; 12.165 + rc = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op); 12.166 + if ( rc ) 12.167 + { 12.168 + printk("ERROR: bind_interdomain failed with rc=%d", rc); 12.169 + return rc; 12.170 + } 12.171 port = op.local_port; 12.172 *local_port = bind_evtchn(port, handler, data); 12.173 - return err; 12.174 + return rc; 12.175 } 12.176 + 12.177 +/* 12.178 + * Local variables: 12.179 + * mode: C 12.180 + * c-set-style: "BSD" 12.181 + * c-basic-offset: 4 12.182 + * tab-width: 4 12.183 + * indent-tabs-mode: nil 12.184 + * End: 12.185 + */
13.1 --- a/extras/mini-os/include/blkfront.h Mon Mar 30 19:56:30 2009 -0700 13.2 +++ b/extras/mini-os/include/blkfront.h Thu Apr 23 18:49:41 2009 -0700 13.3 @@ -8,6 +8,8 @@ struct blkfront_aiocb 13.4 uint8_t *aio_buf; 13.5 size_t aio_nbytes; 13.6 off_t aio_offset; 13.7 + size_t total_bytes; 13.8 + uint8_t is_write; 13.9 void *data; 13.10 13.11 grant_ref_t gref[BLKIF_MAX_SEGMENTS_PER_REQUEST];
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 14.2 +++ b/extras/mini-os/include/ioremap.h Thu Apr 23 18:49:41 2009 -0700 14.3 @@ -0,0 +1,33 @@ 14.4 +/** 14.5 + * Copyright (C) 2009 Netronome Systems, Inc. All rights reserved. 14.6 + * 14.7 + * Permission is hereby granted, free of charge, to any person obtaining a copy 14.8 + * of this software and associated documentation files (the "Software"), to 14.9 + * deal in the Software without restriction, including without limitation the 14.10 + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 14.11 + * sell copies of the Software, and to permit persons to whom the Software is 14.12 + * furnished to do so, subject to the following conditions: 14.13 + * 14.14 + * The above copyright notice and this permission notice shall be included in 14.15 + * all copies or substantial portions of the Software. 14.16 + * 14.17 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14.18 + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14.19 + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14.20 + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 14.21 + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 14.22 + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 14.23 + * DEALINGS IN THE SOFTWARE. 14.24 + */ 14.25 + 14.26 + 14.27 +#ifndef _IOREMAP_H_ 14.28 +#define _IOREMAP_H_ 14.29 + 14.30 +void *ioremap(unsigned long phys_addr, unsigned long size); 14.31 +void *ioremap_nocache(unsigned long phys_addr, unsigned long size); 14.32 +void iounmap(void *virt_addr, unsigned long size); 14.33 + 14.34 +#endif /* _IOREMAP_H_ */ 14.35 + 14.36 +/* -*- Mode:C; c-basic-offset:4; tab-width:4 indent-tabs-mode:nil -*- */
15.1 --- a/extras/mini-os/include/mm.h Mon Mar 30 19:56:30 2009 -0700 15.2 +++ b/extras/mini-os/include/mm.h Thu Apr 23 18:49:41 2009 -0700 15.3 @@ -71,6 +71,8 @@ void *map_frames_ex(unsigned long *f, un 15.4 void do_map_frames(unsigned long addr, 15.5 unsigned long *f, unsigned long n, unsigned long stride, 15.6 unsigned long increment, domid_t id, int may_fail, unsigned long prot); 15.7 +int unmap_frames(unsigned long va, unsigned long num_frames); 15.8 +unsigned long alloc_contig_pages(int order, unsigned int addr_bits); 15.9 #ifdef HAVE_LIBC 15.10 extern unsigned long heap, brk, heap_mapped, heap_end; 15.11 #endif
16.1 --- a/extras/mini-os/include/x86/arch_mm.h Mon Mar 30 19:56:30 2009 -0700 16.2 +++ b/extras/mini-os/include/x86/arch_mm.h Thu Apr 23 18:49:41 2009 -0700 16.3 @@ -133,6 +133,13 @@ typedef unsigned long pgentry_t; 16.4 #define L4_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER) 16.5 #endif /* __i386__ || __x86_64__ */ 16.6 16.7 +/* flags for ioremap */ 16.8 +#define IO_PROT (L1_PROT) 16.9 +#define IO_PROT_NOCACHE (L1_PROT | _PAGE_PCD) 16.10 + 16.11 +/* for P2M */ 16.12 +#define INVALID_P2M_ENTRY (~0UL) 16.13 + 16.14 #include "arch_limits.h" 16.15 #define PAGE_SIZE __PAGE_SIZE 16.16 #define PAGE_SHIFT __PAGE_SHIFT 16.17 @@ -222,5 +229,6 @@ static __inline__ paddr_t machine_to_phy 16.18 #define do_map_zero(start, n) do_map_frames(start, &mfn_zero, n, 0, 0, DOMID_SELF, 0, L1_PROT_RO) 16.19 16.20 pgentry_t *need_pgt(unsigned long addr); 16.21 +int mfn_is_ram(unsigned long mfn); 16.22 16.23 #endif /* _ARCH_MM_H_ */
17.1 --- a/extras/mini-os/kernel.c Mon Mar 30 19:56:30 2009 -0700 17.2 +++ b/extras/mini-os/kernel.c Thu Apr 23 18:49:41 2009 -0700 17.3 @@ -490,14 +490,16 @@ void start_kernel(start_info_t *si) 17.4 17.5 /* print out some useful information */ 17.6 printk("Xen Minimal OS!\n"); 17.7 - printk("start_info: %p\n", si); 17.8 - printk(" nr_pages: %lu", si->nr_pages); 17.9 - printk(" shared_inf: %08lx\n", si->shared_info); 17.10 - printk(" pt_base: %p", (void *)si->pt_base); 17.11 - printk(" mod_start: 0x%lx\n", si->mod_start); 17.12 - printk(" mod_len: %lu\n", si->mod_len); 17.13 - printk(" flags: 0x%x\n", (unsigned int)si->flags); 17.14 - printk(" cmd_line: %s\n", 17.15 + printk(" start_info: %p(VA)\n", si); 17.16 + printk(" nr_pages: 0x%lx\n", si->nr_pages); 17.17 + printk(" shared_inf: 0x%08lx(MA)\n", si->shared_info); 17.18 + printk(" pt_base: %p(VA)\n", (void *)si->pt_base); 17.19 + printk("nr_pt_frames: 0x%lx\n", si->nr_pt_frames); 17.20 + printk(" mfn_list: %p(VA)\n", (void *)si->mfn_list); 17.21 + printk(" mod_start: 0x%lx(VA)\n", si->mod_start); 17.22 + printk(" mod_len: %lu\n", si->mod_len); 17.23 + printk(" flags: 0x%x\n", (unsigned int)si->flags); 17.24 + printk(" cmd_line: %s\n", 17.25 si->cmd_line ? (const char *)si->cmd_line : "NULL"); 17.26 17.27 /* Set up events. */
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 18.2 +++ b/extras/mini-os/lib/stack_chk_fail.c Thu Apr 23 18:49:41 2009 -0700 18.3 @@ -0,0 +1,8 @@ 18.4 +#include <kernel.h> 18.5 +#include <console.h> 18.6 + 18.7 +void __stack_chk_fail(void) 18.8 +{ 18.9 + printk("stack smashing detected\n"); 18.10 + do_exit(); 18.11 +}
19.1 --- a/extras/mini-os/lib/sys.c Mon Mar 30 19:56:30 2009 -0700 19.2 +++ b/extras/mini-os/lib/sys.c Thu Apr 23 18:49:41 2009 -0700 19.3 @@ -1206,47 +1206,15 @@ void *mmap(void *start, size_t length, i 19.4 } else ASSERT(0); 19.5 } 19.6 19.7 -#define UNMAP_BATCH ((STACK_SIZE / 2) / sizeof(multicall_entry_t)) 19.8 int munmap(void *start, size_t length) 19.9 { 19.10 int total = length / PAGE_SIZE; 19.11 - ASSERT(!((unsigned long)start & ~PAGE_MASK)); 19.12 - while (total) { 19.13 - int n = UNMAP_BATCH; 19.14 - if (n > total) 19.15 - n = total; 19.16 - { 19.17 - int i; 19.18 - multicall_entry_t call[n]; 19.19 - unsigned char (*data)[PAGE_SIZE] = start; 19.20 - int ret; 19.21 + int ret; 19.22 19.23 - for (i = 0; i < n; i++) { 19.24 - int arg = 0; 19.25 - call[i].op = __HYPERVISOR_update_va_mapping; 19.26 - call[i].args[arg++] = (unsigned long) &data[i]; 19.27 - call[i].args[arg++] = 0; 19.28 -#ifdef __i386__ 19.29 - call[i].args[arg++] = 0; 19.30 -#endif 19.31 - call[i].args[arg++] = UVMF_INVLPG; 19.32 - } 19.33 - 19.34 - ret = HYPERVISOR_multicall(call, n); 19.35 - if (ret) { 19.36 - errno = -ret; 19.37 - return -1; 19.38 - } 19.39 - 19.40 - for (i = 0; i < n; i++) { 19.41 - if (call[i].result) { 19.42 - errno = call[i].result; 19.43 - return -1; 19.44 - } 19.45 - } 19.46 - } 19.47 - start = (char *)start + n * PAGE_SIZE; 19.48 - total -= n; 19.49 + ret = unmap_frames((unsigned long)start, (unsigned long)total); 19.50 + if (ret) { 19.51 + errno = ret; 19.52 + return -1; 19.53 } 19.54 return 0; 19.55 }
20.1 --- a/stubdom/Makefile Mon Mar 30 19:56:30 2009 -0700 20.2 +++ b/stubdom/Makefile Thu Apr 23 18:49:41 2009 -0700 20.3 @@ -7,8 +7,6 @@ export stubdom=y 20.4 export debug=y 20.5 include $(XEN_ROOT)/Config.mk 20.6 20.7 -IOEMU_OPTIONS=--disable-sdl --disable-opengl --disable-vnc-tls --disable-brlapi --disable-kqemu 20.8 - 20.9 #ZLIB_URL?=http://www.zlib.net 20.10 ZLIB_URL=$(XEN_EXTFILES_URL) 20.11 ZLIB_VERSION=1.2.3 20.12 @@ -93,6 +91,7 @@ newlib-$(NEWLIB_VERSION).tar.gz: 20.13 newlib-$(NEWLIB_VERSION): newlib-$(NEWLIB_VERSION).tar.gz 20.14 tar xzf $< 20.15 patch -d $@ -p0 < newlib.patch 20.16 + patch -d $@ -p0 < newlib-chk.patch 20.17 touch $@ 20.18 20.19 NEWLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libc.a 20.20 @@ -237,8 +236,12 @@ ioemu: cross-zlib cross-libpci libxc 20.21 [ -f ioemu/config-host.mak ] || \ 20.22 ( $(absolutify_xen_root); \ 20.23 cd ioemu ; \ 20.24 - CONFIG_STUBDOM=yes XEN_TARGET_ARCH=$(XEN_TARGET_ARCH) CFLAGS="$(TARGET_CFLAGS)" sh ./xen-setup --cc=$(CC) --disable-gcc-check $(IOEMU_OPTIONS)) 20.25 - CPPFLAGS= TARGET_CPPFLAGS="$(TARGET_CPPFLAGS)" $(MAKE) -C ioemu LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) TOOLS= CONFIG_STUBDOM=yes 20.26 + LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) \ 20.27 + TARGET_CPPFLAGS="$(TARGET_CPPFLAGS)" \ 20.28 + TARGET_CFLAGS="$(TARGET_CFLAGS)" \ 20.29 + TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \ 20.30 + ./xen-setup-stubdom ) 20.31 + $(MAKE) -C ioemu 20.32 20.33 ###### 20.34 # caml 20.35 @@ -312,14 +315,14 @@ install-readme: 20.36 $(INSTALL_DATA) README $(DESTDIR)$(DOCDIR)/README.stubdom 20.37 20.38 install-ioemu: ioemu-stubdom 20.39 - $(INSTALL_DIR) "$(DESTDIR)/usr/lib/xen/bin" 20.40 - $(INSTALL_PROG) stubdom-dm "$(DESTDIR)/usr/lib/xen/bin" 20.41 - $(INSTALL_DIR) "$(DESTDIR)/usr/lib/xen/boot" 20.42 - $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-ioemu/mini-os.gz "$(DESTDIR)/usr/lib/xen/boot/ioemu-stubdom.gz" 20.43 + $(INSTALL_DIR) "$(DESTDIR)$(LIBEXEC)" 20.44 + $(INSTALL_PROG) stubdom-dm "$(DESTDIR)$(LIBEXEC)" 20.45 + $(INSTALL_DIR) "$(DESTDIR)$(LIBDIR_x86_32)/xen/boot" 20.46 + $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-ioemu/mini-os.gz "$(DESTDIR)$(LIBDIR_x86_32)/xen/boot/ioemu-stubdom.gz" 20.47 20.48 install-grub: pv-grub 20.49 - $(INSTALL_DIR) "$(DESTDIR)/usr/lib/xen/boot" 20.50 - $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-grub/mini-os.gz "$(DESTDIR)/usr/lib/xen/boot/pv-grub-$(XEN_TARGET_ARCH).gz" 20.51 + $(INSTALL_DIR) "$(DESTDIR)$(LIBDIR_x86_32)/xen/boot" 20.52 + $(INSTALL_DATA) mini-os-$(XEN_TARGET_ARCH)-grub/mini-os.gz "$(DESTDIR)$(LIBDIR_x86_32)/xen/boot/pv-grub-$(XEN_TARGET_ARCH).gz" 20.53 20.54 ####### 20.55 # clean
21.1 --- a/stubdom/stubdom-dm Mon Mar 30 19:56:30 2009 -0700 21.2 +++ b/stubdom/stubdom-dm Thu Apr 23 18:49:41 2009 -0700 21.3 @@ -15,7 +15,10 @@ domname= 21.4 vncviewer=0 21.5 vncpid= 21.6 extra= 21.7 -videoram=4 21.8 +sdl=0 21.9 +opengl=1 21.10 +vnc=0 21.11 +vncunused=0 21.12 while [ "$#" -gt 0 ]; 21.13 do 21.14 if [ "$#" -ge 2 ]; 21.15 @@ -31,22 +34,30 @@ do 21.16 shift 21.17 ;; 21.18 -vnc) 21.19 - ip=${2%:*}; 21.20 - vnc_port=${2#*:}; 21.21 + vnc=1 21.22 + op=${2%,*} 21.23 + ip=${op%:*}; 21.24 + vnc_port=${op#*:}; 21.25 shift 21.26 ;; 21.27 + -vncunused) 21.28 + vncunused=1 21.29 + shift 21.30 + ;; 21.31 -loadvm) 21.32 extra="$extra -loadvm $2"; 21.33 shift 21.34 ;; 21.35 - -videoram) 21.36 - videoram="$2" 21.37 - shift 21.38 - ;; 21.39 + -k) 21.40 + keymap=$2 21.41 + shift 21.42 + ;; 21.43 esac 21.44 fi 21.45 case "$1" in 21.46 -vncviewer) vncviewer=1 ;; 21.47 + -sdl) sdl=1 ;; 21.48 + -disable-opengl) opengl=0 ;; 21.49 esac 21.50 shift 21.51 done 21.52 @@ -61,7 +72,7 @@ term() { 21.53 ( 21.54 [ -n "$vncpid" ] && kill -9 $vncpid 21.55 xm destroy $domname-dm 21.56 - #xm destroy $domname 21.57 + rm /etc/xen/stubdoms/$domname-dm 21.58 ) & 21.59 # We need to exit immediately so as to let xend do the commands above 21.60 exit 0 21.61 @@ -77,7 +88,58 @@ do 21.62 sleep 1 21.63 done 21.64 21.65 -creation="xm create -c $domname-dm target=$domid memory=32 videoram=$videoram extra=\"$extra\"" 21.66 +# Generate stubdom config file 21.67 +mkdir -p /etc/xen/stubdoms &>/dev/null 21.68 +echo "#This file is autogenerated, edit $domname instead!" > /etc/xen/stubdoms/$domname-dm 21.69 +echo "kernel = '/usr/lib/xen/boot/ioemu-stubdom.gz'" >> /etc/xen/stubdoms/$domname-dm 21.70 + 21.71 +vfb="sdl=$sdl, opengl=$opengl" 21.72 +test "$DISPLAY" && vfb="$vfb, display=$DISPLAY" 21.73 +test "$XAUTHORITY" && vfb="$vfb, xauthority=$XAUTHORITY" 21.74 +test $vnc != 0 && vfb="$vfb, vnc=$vnc, vncdisplay=$vnc_port, vnclisten=$ip, vncunused=$vncunused" 21.75 +vncpasswd=`xenstore-read /local/domain/0/backend/vfb/$domid/0/vncpasswd 2>/dev/null` 21.76 +test "$vncpasswd" && vfb="$vfb, vncpasswd=$vncpasswd" 21.77 +test "$keymap" && vfb="$vfb, keymap=$keymap" 21.78 +echo "vfb = ['$vfb']" >> /etc/xen/stubdoms/$domname-dm 21.79 + 21.80 +echo -n "disk = [ " >> /etc/xen/stubdoms/$domname-dm 21.81 +j=0 21.82 +for i in `xenstore-ls /local/domain/$domid/device/vbd | grep 'backend =' | awk '{print $3}'` 21.83 +do 21.84 + i=${i%\"} 21.85 + i=${i#\"} 21.86 + vbd_mode=`xenstore-read $i/mode` 21.87 + vbd_disk=`xenstore-read $i/params` 21.88 + vbd_type=`xenstore-read $i/type` 21.89 + vbd_dev=`xenstore-read $i/dev` 21.90 + if [ $vbd_type = "file" ] 21.91 + then 21.92 + vbd_type="tap:aio" 21.93 + fi 21.94 + if [ $j -ne 0 ] 21.95 + then 21.96 + echo -n "," >> /etc/xen/stubdoms/$domname-dm 21.97 + fi 21.98 + echo -n "'$vbd_type:$vbd_disk,$vbd_dev,$vbd_mode'" >> /etc/xen/stubdoms/$domname-dm 21.99 + j=$(( $j + 1 )) 21.100 +done 21.101 +echo " ] " >> /etc/xen/stubdoms/$domname-dm 21.102 +echo -n "vif = [ " >> /etc/xen/stubdoms/$domname-dm 21.103 +j=0 21.104 +for i in `xenstore-ls /local/domain/$domid/device/vif | grep 'backend =' | awk '{print $3}'` 21.105 +do 21.106 + i=${i%\"} 21.107 + i=${i#\"} 21.108 + vif_mac=`xenstore-read $i/mac` 21.109 + if [ $j -ne 0 ] 21.110 + then 21.111 + echo -n "," >> /etc/xen/stubdoms/$domname-dm 21.112 + fi 21.113 + echo -n "'mac=$vif_mac'" >> /etc/xen/stubdoms/$domname-dm 21.114 + j=$(( $j + 1 )) 21.115 +done 21.116 +echo " ] " >> /etc/xen/stubdoms/$domname-dm 21.117 +creation="xm create -c /etc/xen/stubdoms/$domname-dm target=$domid memory=32 extra=\"$extra\"" 21.118 21.119 (while true ; do sleep 60 ; done) | /bin/sh -c "$creation" & 21.120 #xterm -geometry +0+0 -e /bin/sh -c "$creation ; echo ; echo press ENTER to shut down ; read" &
22.1 --- a/tools/Makefile Mon Mar 30 19:56:30 2009 -0700 22.2 +++ b/tools/Makefile Thu Apr 23 18:49:41 2009 -0700 22.3 @@ -19,11 +19,11 @@ SUBDIRS-y += xenmon 22.4 SUBDIRS-$(VTPM_TOOLS) += vtpm_manager 22.5 SUBDIRS-$(VTPM_TOOLS) += vtpm 22.6 SUBDIRS-y += xenstat 22.7 -SUBDIRS-y += libaio 22.8 -SUBDIRS-y += blktap 22.9 +SUBDIRS-$(CONFIG_Linux) += libaio 22.10 +SUBDIRS-$(CONFIG_Linux) += blktap 22.11 SUBDIRS-y += libfsimage 22.12 SUBDIRS-$(LIBXENAPI_BINDINGS) += libxen 22.13 -SUBDIRS-y += fs-back 22.14 +SUBDIRS-$(CONFIG_Linux) += fs-back 22.15 SUBDIRS-$(CONFIG_IOEMU) += ioemu-dir 22.16 SUBDIRS-y += xenpmd 22.17
23.1 --- a/tools/Rules.mk Mon Mar 30 19:56:30 2009 -0700 23.2 +++ b/tools/Rules.mk Thu Apr 23 18:49:41 2009 -0700 23.3 @@ -33,10 +33,12 @@ CFLAGS += -D__XEN_TOOLS__ 23.4 CFLAGS += -MMD -MF .$(@F).d 23.5 DEPS = .*.d 23.6 23.7 +ifneq ($(XEN_OS),NetBSD) 23.8 # Enable implicit LFS support *and* explicit LFS names. 23.9 CFLAGS += $(shell getconf LFS_CFLAGS) 23.10 CFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE 23.11 LDFLAGS += $(shell getconf LFS_LDFLAGS) 23.12 +endif 23.13 23.14 # 32-bit x86 does not perform well with -ve segment accesses on Xen. 23.15 CFLAGS-$(CONFIG_X86_32) += $(call cc-option,$(CC),-mno-tls-direct-seg-refs)
24.1 --- a/tools/blktap/drivers/blktapctrl.c Mon Mar 30 19:56:30 2009 -0700 24.2 +++ b/tools/blktap/drivers/blktapctrl.c Thu Apr 23 18:49:41 2009 -0700 24.3 @@ -148,7 +148,8 @@ static int get_tapdisk_pid(blkif_t *blki 24.4 * return 0 on success, -1 on error. 24.5 */ 24.6 24.7 -static int test_path(char *path, char **dev, int *type, blkif_t **blkif) 24.8 +static int test_path(char *path, char **dev, int *type, blkif_t **blkif, 24.9 + int* use_ioemu) 24.10 { 24.11 char *ptr, handle[10]; 24.12 int i, size, found = 0; 24.13 @@ -158,6 +159,17 @@ static int test_path(char *path, char ** 24.14 *type = MAX_DISK_TYPES + 1; 24.15 *blkif = NULL; 24.16 24.17 + if (!strncmp(path, "tapdisk:", strlen("tapdisk:"))) { 24.18 + *use_ioemu = 0; 24.19 + path += strlen("tapdisk:"); 24.20 + } else if (!strncmp(path, "ioemu:", strlen("ioemu:"))) { 24.21 + *use_ioemu = 1; 24.22 + path += strlen("ioemu:"); 24.23 + } else { 24.24 + // Use the default for the image type 24.25 + *use_ioemu = -1; 24.26 + } 24.27 + 24.28 if ( (ptr = strstr(path, ":"))!=NULL) { 24.29 handle_len = (ptr - path); 24.30 memcpy(handle, path, handle_len); 24.31 @@ -174,6 +186,8 @@ static int test_path(char *path, char ** 24.32 } 24.33 24.34 if (found) { 24.35 + if (*use_ioemu == -1) 24.36 + *use_ioemu = dtypes[i]->use_ioemu; 24.37 *type = dtypes[i]->idnum; 24.38 24.39 if (dtypes[i]->single_handler == 1) { 24.40 @@ -185,6 +199,7 @@ static int test_path(char *path, char ** 24.41 *blkif = active_disks[dtypes[i] 24.42 ->idnum]->blkif; 24.43 } 24.44 + 24.45 return 0; 24.46 } 24.47 } 24.48 @@ -216,6 +231,24 @@ static void add_disktype(blkif_t *blkif, 24.49 entry->pprev = pprev; 24.50 } 24.51 24.52 +static int qemu_instance_has_disks(pid_t pid) 24.53 +{ 24.54 + int i; 24.55 + int count = 0; 24.56 + driver_list_entry_t *entry; 24.57 + 24.58 + for (i = 0; i < MAX_DISK_TYPES; i++) { 24.59 + entry = active_disks[i]; 24.60 + while (entry) { 24.61 + if ((entry->blkif->tappid == pid) && dtypes[i]->use_ioemu) 24.62 + count++; 24.63 + entry = entry->next; 24.64 + } 24.65 + } 24.66 + 24.67 + return (count != 0); 24.68 +} 24.69 + 24.70 static int del_disktype(blkif_t *blkif) 24.71 { 24.72 driver_list_entry_t *entry, **pprev; 24.73 @@ -240,6 +273,14 @@ static int del_disktype(blkif_t *blkif) 24.74 DPRINTF("DEL_DISKTYPE: Freeing entry\n"); 24.75 free(entry); 24.76 24.77 + /* 24.78 + * When using ioemu, all disks of one VM are connected to the same 24.79 + * qemu-dm instance. We may close the file handle only if there is 24.80 + * no other disk left for this domain. 24.81 + */ 24.82 + if (dtypes[type]->use_ioemu) 24.83 + return !qemu_instance_has_disks(blkif->tappid); 24.84 + 24.85 /* Caller should close() if no single controller, or list is empty. */ 24.86 return (!dtypes[type]->single_handler || (active_disks[type] == NULL)); 24.87 } 24.88 @@ -504,7 +545,8 @@ static int connect_qemu(blkif_t *blkif, 24.89 static int tapdisk_ioemu_pid = 0; 24.90 static int dom0_readfd = 0; 24.91 static int dom0_writefd = 0; 24.92 - 24.93 + int refresh_pid = 0; 24.94 + 24.95 if (asprintf(&rdctldev, BLKTAP_CTRL_DIR "/qemu-read-%d", domid) < 0) 24.96 return -1; 24.97 24.98 @@ -523,15 +565,23 @@ static int connect_qemu(blkif_t *blkif, 24.99 if (tapdisk_ioemu_pid == 0 || kill(tapdisk_ioemu_pid, 0)) { 24.100 /* No device model and tapdisk-ioemu doesn't run yet */ 24.101 DPRINTF("Launching tapdisk-ioemu\n"); 24.102 - tapdisk_ioemu_pid = launch_tapdisk_ioemu(); 24.103 + launch_tapdisk_ioemu(); 24.104 24.105 dom0_readfd = open_ctrl_socket(wrctldev); 24.106 dom0_writefd = open_ctrl_socket(rdctldev); 24.107 + 24.108 + refresh_pid = 1; 24.109 } 24.110 24.111 DPRINTF("Using tapdisk-ioemu connection\n"); 24.112 blkif->fds[READ] = dom0_readfd; 24.113 blkif->fds[WRITE] = dom0_writefd; 24.114 + 24.115 + if (refresh_pid) { 24.116 + get_tapdisk_pid(blkif); 24.117 + tapdisk_ioemu_pid = blkif->tappid; 24.118 + } 24.119 + 24.120 } else if (access(rdctldev, R_OK | W_OK) == 0) { 24.121 /* Use existing pipe to the device model */ 24.122 DPRINTF("Using qemu-dm connection\n"); 24.123 @@ -605,13 +655,11 @@ static int blktapctrl_new_blkif(blkif_t 24.124 image_t *image; 24.125 blkif_t *exist = NULL; 24.126 static uint16_t next_cookie = 0; 24.127 + int use_ioemu; 24.128 24.129 DPRINTF("Received a poll for a new vbd\n"); 24.130 if ( ((blk=blkif->info) != NULL) && (blk->params != NULL) ) { 24.131 - if (blktap_interface_create(ctlfd, &major, &minor, blkif) < 0) 24.132 - return -1; 24.133 - 24.134 - if (test_path(blk->params, &ptr, &type, &exist) != 0) { 24.135 + if (test_path(blk->params, &ptr, &type, &exist, &use_ioemu) != 0) { 24.136 DPRINTF("Error in blktap device string(%s).\n", 24.137 blk->params); 24.138 goto fail; 24.139 @@ -620,7 +668,7 @@ static int blktapctrl_new_blkif(blkif_t 24.140 blkif->cookie = next_cookie++; 24.141 24.142 if (!exist) { 24.143 - if (type == DISK_TYPE_IOEMU) { 24.144 + if (use_ioemu) { 24.145 if (connect_qemu(blkif, blkif->domid)) 24.146 goto fail; 24.147 } else { 24.148 @@ -634,10 +682,6 @@ static int blktapctrl_new_blkif(blkif_t 24.149 blkif->fds[WRITE] = exist->fds[WRITE]; 24.150 } 24.151 24.152 - add_disktype(blkif, type); 24.153 - blkif->major = major; 24.154 - blkif->minor = minor; 24.155 - 24.156 image = (image_t *)malloc(sizeof(image_t)); 24.157 blkif->prv = (void *)image; 24.158 blkif->ops = &tapdisk_ops; 24.159 @@ -661,11 +705,18 @@ static int blktapctrl_new_blkif(blkif_t 24.160 goto fail; 24.161 } 24.162 24.163 + if (blktap_interface_create(ctlfd, &major, &minor, blkif) < 0) 24.164 + return -1; 24.165 + 24.166 + blkif->major = major; 24.167 + blkif->minor = minor; 24.168 + 24.169 + add_disktype(blkif, type); 24.170 + 24.171 } else return -1; 24.172 24.173 return 0; 24.174 fail: 24.175 - ioctl(ctlfd, BLKTAP_IOCTL_FREEINTF, minor); 24.176 return -EINVAL; 24.177 } 24.178 24.179 @@ -696,6 +747,7 @@ static int unmap_blktapctrl(blkif_t *blk 24.180 } 24.181 24.182 if (del_disktype(blkif)) { 24.183 + DPRINTF("Closing communication pipe to pid %d\n", blkif->tappid); 24.184 close(blkif->fds[WRITE]); 24.185 close(blkif->fds[READ]); 24.186 }
25.1 --- a/tools/blktap/drivers/block-qcow2.c Mon Mar 30 19:56:30 2009 -0700 25.2 +++ b/tools/blktap/drivers/block-qcow2.c Thu Apr 23 18:49:41 2009 -0700 25.3 @@ -1980,6 +1980,104 @@ static int qcow_validate_parent(struct d 25.4 return 0; 25.5 } 25.6 25.7 +int qcow2_create(const char *filename, uint64_t total_size, 25.8 + const char *backing_file, int flags) 25.9 +{ 25.10 + int fd, header_size, backing_filename_len, l1_size, i, shift, l2_bits; 25.11 + int ret = 0; 25.12 + QCowHeader header; 25.13 + uint64_t tmp, offset; 25.14 + QCowCreateState s1, *s = &s1; 25.15 + 25.16 + memset(s, 0, sizeof(*s)); 25.17 + 25.18 + fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); 25.19 + if (fd < 0) 25.20 + return -1; 25.21 + memset(&header, 0, sizeof(header)); 25.22 + header.magic = cpu_to_be32(QCOW_MAGIC); 25.23 + header.version = cpu_to_be32(QCOW_VERSION); 25.24 + header.size = cpu_to_be64(total_size * 512); 25.25 + header_size = sizeof(header); 25.26 + backing_filename_len = 0; 25.27 + if (backing_file) { 25.28 + header.backing_file_offset = cpu_to_be64(header_size); 25.29 + backing_filename_len = strlen(backing_file); 25.30 + header.backing_file_size = cpu_to_be32(backing_filename_len); 25.31 + header_size += backing_filename_len; 25.32 + } 25.33 + s->cluster_bits = 12; /* 4 KB clusters */ 25.34 + s->cluster_size = 1 << s->cluster_bits; 25.35 + header.cluster_bits = cpu_to_be32(s->cluster_bits); 25.36 + header_size = (header_size + 7) & ~7; 25.37 + if (flags & BLOCK_FLAG_ENCRYPT) { 25.38 + header.crypt_method = cpu_to_be32(QCOW_CRYPT_AES); 25.39 + } else { 25.40 + header.crypt_method = cpu_to_be32(QCOW_CRYPT_NONE); 25.41 + } 25.42 + l2_bits = s->cluster_bits - 3; 25.43 + shift = s->cluster_bits + l2_bits; 25.44 + l1_size = (((total_size * 512) + (1LL << shift) - 1) >> shift); 25.45 + offset = align_offset(header_size, s->cluster_size); 25.46 + s->l1_table_offset = offset; 25.47 + header.l1_table_offset = cpu_to_be64(s->l1_table_offset); 25.48 + header.l1_size = cpu_to_be32(l1_size); 25.49 + offset += align_offset(l1_size * sizeof(uint64_t), s->cluster_size); 25.50 + 25.51 + s->refcount_table = qemu_mallocz(s->cluster_size); 25.52 + s->refcount_block = qemu_mallocz(s->cluster_size); 25.53 + 25.54 + s->refcount_table_offset = offset; 25.55 + header.refcount_table_offset = cpu_to_be64(offset); 25.56 + header.refcount_table_clusters = cpu_to_be32(1); 25.57 + offset += s->cluster_size; 25.58 + 25.59 + s->refcount_table[0] = cpu_to_be64(offset); 25.60 + s->refcount_block_offset = offset; 25.61 + offset += s->cluster_size; 25.62 + 25.63 + /* update refcounts */ 25.64 + create_refcount_update(s, 0, header_size); 25.65 + create_refcount_update(s, s->l1_table_offset, l1_size * sizeof(uint64_t)); 25.66 + create_refcount_update(s, s->refcount_table_offset, s->cluster_size); 25.67 + create_refcount_update(s, s->refcount_block_offset, s->cluster_size); 25.68 + 25.69 + /* write all the data */ 25.70 + ret = write(fd, &header, sizeof(header)); 25.71 + if (ret < 0) 25.72 + goto out; 25.73 + if (backing_file) { 25.74 + ret = write(fd, backing_file, backing_filename_len); 25.75 + if (ret < 0) 25.76 + goto out; 25.77 + } 25.78 + lseek(fd, s->l1_table_offset, SEEK_SET); 25.79 + tmp = 0; 25.80 + for(i = 0;i < l1_size; i++) { 25.81 + ret = write(fd, &tmp, sizeof(tmp)); 25.82 + if (ret < 0) 25.83 + goto out; 25.84 + } 25.85 + lseek(fd, s->refcount_table_offset, SEEK_SET); 25.86 + ret = write(fd, s->refcount_table, s->cluster_size); 25.87 + if (ret < 0) 25.88 + goto out; 25.89 + 25.90 + lseek(fd, s->refcount_block_offset, SEEK_SET); 25.91 + ret = write(fd, s->refcount_block, s->cluster_size); 25.92 + if (ret < 0) 25.93 + goto out; 25.94 + ret = 0; 25.95 + 25.96 + out: 25.97 + qemu_free(s->refcount_table); 25.98 + qemu_free(s->refcount_block); 25.99 + close(fd); 25.100 + return ret; 25.101 +} 25.102 + 25.103 + 25.104 + 25.105 struct tap_disk tapdisk_qcow2 = { 25.106 "qcow2", 25.107 sizeof(BDRVQcowState),
26.1 --- a/tools/blktap/drivers/qcow-create.c Mon Mar 30 19:56:30 2009 -0700 26.2 +++ b/tools/blktap/drivers/qcow-create.c Thu Apr 23 18:49:41 2009 -0700 26.3 @@ -52,7 +52,7 @@ static void help(void) 26.4 { 26.5 fprintf(stderr, "Qcow-utils: v1.0.0\n"); 26.6 fprintf(stderr, 26.7 - "usage: qcow-create [-h help] [-r reserve] <SIZE(MB)> <FILENAME> " 26.8 + "usage: qcow-create [-h help] [-r reserve] [-f format] <SIZE(MB)> <FILENAME> " 26.9 "[<BACKING_FILENAME>]\n"); 26.10 exit(-1); 26.11 } 26.12 @@ -61,11 +61,13 @@ int main(int argc, char *argv[]) 26.13 { 26.14 int ret = -1, c, backed = 0; 26.15 int sparse = 1; 26.16 + char *fmt = "qcow"; 26.17 uint64_t size; 26.18 char filename[MAX_NAME_LEN], bfilename[MAX_NAME_LEN]; 26.19 + char *tmpfile; 26.20 26.21 for(;;) { 26.22 - c = getopt(argc, argv, "hr"); 26.23 + c = getopt(argc, argv, "hrf"); 26.24 if (c == -1) 26.25 break; 26.26 switch(c) { 26.27 @@ -73,6 +75,9 @@ int main(int argc, char *argv[]) 26.28 help(); 26.29 exit(0); 26.30 break; 26.31 + case 'f': 26.32 + fmt = argv[optind++]; 26.33 + break; 26.34 case 'r': 26.35 sparse = 0; 26.36 break; 26.37 @@ -105,11 +110,16 @@ int main(int argc, char *argv[]) 26.38 } 26.39 } 26.40 26.41 - DFPRINTF("Creating file size %llu, name %s\n",(long long unsigned)size, filename); 26.42 - if (!backed) 26.43 - ret = qcow_create(filename,size,NULL,sparse); 26.44 - else 26.45 - ret = qcow_create(filename,size,bfilename,sparse); 26.46 + tmpfile = backed ? bfilename: NULL; 26.47 + if (!strcmp(fmt, "qcow")) { 26.48 + ret = qcow_create(filename, size, tmpfile, sparse); 26.49 + } else if(!strcmp(fmt, "qcow2")) { 26.50 + ret = qcow2_create(filename, size, tmpfile, sparse); 26.51 + } else { 26.52 + fprintf(stderr,"Unsupport format:%s\n", fmt); 26.53 + exit(-1); 26.54 + } 26.55 + DFPRINTF("Creating file size %llu, name %s\n",(long long unsigned)size, filename); 26.56 26.57 if (ret < 0) 26.58 DPRINTF("Unable to create QCOW file\n");
27.1 --- a/tools/blktap/drivers/tapdisk.h Mon Mar 30 19:56:30 2009 -0700 27.2 +++ b/tools/blktap/drivers/tapdisk.h Thu Apr 23 18:49:41 2009 -0700 27.3 @@ -145,6 +145,8 @@ typedef struct disk_info { 27.4 char handle[10]; /* xend handle, e.g. 'ram' */ 27.5 int single_handler; /* is there a single controller for all */ 27.6 /* instances of disk type? */ 27.7 + int use_ioemu; /* backend provider: 0 = tapdisk; 1 = ioemu */ 27.8 + 27.9 #ifdef TAPDISK 27.10 struct tap_disk *drv; 27.11 #endif 27.12 @@ -159,16 +161,6 @@ extern struct tap_disk tapdisk_ram; 27.13 extern struct tap_disk tapdisk_qcow; 27.14 extern struct tap_disk tapdisk_qcow2; 27.15 27.16 -#define MAX_DISK_TYPES 20 27.17 - 27.18 -#define DISK_TYPE_AIO 0 27.19 -#define DISK_TYPE_SYNC 1 27.20 -#define DISK_TYPE_VMDK 2 27.21 -#define DISK_TYPE_RAM 3 27.22 -#define DISK_TYPE_QCOW 4 27.23 -#define DISK_TYPE_QCOW2 5 27.24 -#define DISK_TYPE_IOEMU 6 27.25 - 27.26 27.27 /*Define Individual Disk Parameters here */ 27.28 static disk_info_t aio_disk = { 27.29 @@ -176,6 +168,7 @@ static disk_info_t aio_disk = { 27.30 "raw image (aio)", 27.31 "aio", 27.32 0, 27.33 + 0, 27.34 #ifdef TAPDISK 27.35 &tapdisk_aio, 27.36 #endif 27.37 @@ -186,6 +179,7 @@ static disk_info_t sync_disk = { 27.38 "raw image (sync)", 27.39 "sync", 27.40 0, 27.41 + 0, 27.42 #ifdef TAPDISK 27.43 &tapdisk_sync, 27.44 #endif 27.45 @@ -196,6 +190,7 @@ static disk_info_t vmdk_disk = { 27.46 "vmware image (vmdk)", 27.47 "vmdk", 27.48 1, 27.49 + 0, 27.50 #ifdef TAPDISK 27.51 &tapdisk_vmdk, 27.52 #endif 27.53 @@ -206,6 +201,7 @@ static disk_info_t ram_disk = { 27.54 "ramdisk image (ram)", 27.55 "ram", 27.56 1, 27.57 + 0, 27.58 #ifdef TAPDISK 27.59 &tapdisk_ram, 27.60 #endif 27.61 @@ -216,6 +212,7 @@ static disk_info_t qcow_disk = { 27.62 "qcow disk (qcow)", 27.63 "qcow", 27.64 0, 27.65 + 0, 27.66 #ifdef TAPDISK 27.67 &tapdisk_qcow, 27.68 #endif 27.69 @@ -226,21 +223,12 @@ static disk_info_t qcow2_disk = { 27.70 "qcow2 disk (qcow2)", 27.71 "qcow2", 27.72 0, 27.73 + 0, 27.74 #ifdef TAPDISK 27.75 &tapdisk_qcow2, 27.76 #endif 27.77 }; 27.78 27.79 -static disk_info_t ioemu_disk = { 27.80 - DISK_TYPE_IOEMU, 27.81 - "ioemu disk", 27.82 - "ioemu", 27.83 - 1, 27.84 -#ifdef TAPDISK 27.85 - NULL 27.86 -#endif 27.87 -}; 27.88 - 27.89 /*Main disk info array */ 27.90 static disk_info_t *dtypes[] = { 27.91 &aio_disk, 27.92 @@ -249,7 +237,6 @@ static disk_info_t *dtypes[] = { 27.93 &ram_disk, 27.94 &qcow_disk, 27.95 &qcow2_disk, 27.96 - &ioemu_disk, 27.97 }; 27.98 27.99 typedef struct driver_list_entry { 27.100 @@ -266,4 +253,7 @@ typedef struct fd_list_entry { 27.101 27.102 int qcow_create(const char *filename, uint64_t total_size, 27.103 const char *backing_file, int flags); 27.104 + 27.105 +int qcow2_create(const char *filename, uint64_t total_size, 27.106 + const char *backing_file, int flags); 27.107 #endif /*TAPDISK_H_*/
28.1 --- a/tools/blktap/lib/blktaplib.h Mon Mar 30 19:56:30 2009 -0700 28.2 +++ b/tools/blktap/lib/blktaplib.h Thu Apr 23 18:49:41 2009 -0700 28.3 @@ -210,6 +210,16 @@ typedef struct msg_pid { 28.4 #define CTLMSG_PID 9 28.5 #define CTLMSG_PID_RSP 10 28.6 28.7 +/* disk driver types */ 28.8 +#define MAX_DISK_TYPES 20 28.9 + 28.10 +#define DISK_TYPE_AIO 0 28.11 +#define DISK_TYPE_SYNC 1 28.12 +#define DISK_TYPE_VMDK 2 28.13 +#define DISK_TYPE_RAM 3 28.14 +#define DISK_TYPE_QCOW 4 28.15 +#define DISK_TYPE_QCOW2 5 28.16 + 28.17 /* xenstore/xenbus: */ 28.18 #define DOMNAME "Domain-0" 28.19 int setup_probe_watch(struct xs_handle *h);
29.1 --- a/tools/blktap/lib/xenbus.c Mon Mar 30 19:56:30 2009 -0700 29.2 +++ b/tools/blktap/lib/xenbus.c Thu Apr 23 18:49:41 2009 -0700 29.3 @@ -48,6 +48,7 @@ 29.4 #include <poll.h> 29.5 #include <time.h> 29.6 #include <sys/time.h> 29.7 +#include <unistd.h> 29.8 #include "blktaplib.h" 29.9 #include "list.h" 29.10 #include "xs_api.h" 29.11 @@ -149,6 +150,137 @@ static int backend_remove(struct xs_hand 29.12 return 0; 29.13 } 29.14 29.15 +static int check_sharing(struct xs_handle *h, struct backend_info *be) 29.16 +{ 29.17 + char *dom_uuid; 29.18 + char *cur_dom_uuid; 29.19 + char *path; 29.20 + char *mode; 29.21 + char *params; 29.22 + char **domains; 29.23 + char **devices; 29.24 + int i, j; 29.25 + unsigned int num_dom, num_dev; 29.26 + blkif_info_t *info; 29.27 + int ret = 0; 29.28 + 29.29 + /* If the mode contains '!' or doesn't contain 'w' don't check anything */ 29.30 + xs_gather(h, be->backpath, "mode", NULL, &mode, NULL); 29.31 + if (strchr(mode, '!')) 29.32 + goto out; 29.33 + if (strchr(mode, 'w') == NULL) 29.34 + goto out; 29.35 + 29.36 + /* Get the UUID of the domain we want to attach to */ 29.37 + if (asprintf(&path, "/local/domain/%ld", be->frontend_id) == -1) 29.38 + goto fail; 29.39 + xs_gather(h, path, "vm", NULL, &dom_uuid, NULL); 29.40 + free(path); 29.41 + 29.42 + /* Iterate through the devices of all VMs */ 29.43 + domains = xs_directory(h, XBT_NULL, "backend/tap", &num_dom); 29.44 + if (domains == NULL) 29.45 + num_dom = 0; 29.46 + 29.47 + for (i = 0; !ret && (i < num_dom); i++) { 29.48 + 29.49 + /* If it's the same VM, no action needed */ 29.50 + if (asprintf(&path, "/local/domain/%s", domains[i]) == -1) { 29.51 + ret = -1; 29.52 + break; 29.53 + } 29.54 + xs_gather(h, path, "vm", NULL, &cur_dom_uuid, NULL); 29.55 + free(path); 29.56 + 29.57 + if (!strcmp(cur_dom_uuid, dom_uuid)) { 29.58 + free(cur_dom_uuid); 29.59 + continue; 29.60 + } 29.61 + 29.62 + /* Check the devices */ 29.63 + if (asprintf(&path, "backend/tap/%s", domains[i]) == -1) { 29.64 + ret = -1; 29.65 + free(cur_dom_uuid); 29.66 + break; 29.67 + } 29.68 + devices = xs_directory(h, XBT_NULL, path, &num_dev); 29.69 + if (devices == NULL) 29.70 + num_dev = 0; 29.71 + free(path); 29.72 + 29.73 + for (j = 0; !ret && (j < num_dev); j++) { 29.74 + if (asprintf(&path, "backend/tap/%s/%s", domains[i], devices[j]) == -1) { 29.75 + ret = -1; 29.76 + break; 29.77 + } 29.78 + xs_gather(h, path, "params", NULL, ¶ms, NULL); 29.79 + free(path); 29.80 + 29.81 + info = be->blkif->info; 29.82 + if (strcmp(params, info->params)) { 29.83 + ret = -1; 29.84 + } 29.85 + 29.86 + free(params); 29.87 + } 29.88 + 29.89 + free(cur_dom_uuid); 29.90 + free(devices); 29.91 + } 29.92 + free(domains); 29.93 + free(dom_uuid); 29.94 + goto out; 29.95 + 29.96 +fail: 29.97 + ret = -1; 29.98 +out: 29.99 + free(mode); 29.100 + return ret; 29.101 +} 29.102 + 29.103 +static int check_image(struct xs_handle *h, struct backend_info *be, 29.104 + const char** errmsg) 29.105 +{ 29.106 + const char *tmp; 29.107 + const char *path; 29.108 + int mode; 29.109 + blkif_t *blkif = be->blkif; 29.110 + blkif_info_t *info = blkif->info; 29.111 + 29.112 + /* Strip off the image type */ 29.113 + path = info->params; 29.114 + 29.115 + if (!strncmp(path, "tapdisk:", strlen("tapdisk:"))) { 29.116 + path += strlen("tapdisk:"); 29.117 + } else if (!strncmp(path, "ioemu:", strlen("ioemu:"))) { 29.118 + path += strlen("ioemu:"); 29.119 + } 29.120 + 29.121 + tmp = strchr(path, ':'); 29.122 + if (tmp != NULL) 29.123 + path = tmp + 1; 29.124 + 29.125 + /* Check if the image exists and access is permitted */ 29.126 + mode = R_OK; 29.127 + if (!be->readonly) 29.128 + mode |= W_OK; 29.129 + if (access(path, mode)) { 29.130 + if (errno == ENOENT) 29.131 + *errmsg = "File not found."; 29.132 + else 29.133 + *errmsg = "Insufficient file permissions."; 29.134 + return -1; 29.135 + } 29.136 + 29.137 + /* Check that the image is not attached to a different VM */ 29.138 + if (check_sharing(h, be)) { 29.139 + *errmsg = "File already in use by other domain"; 29.140 + return -1; 29.141 + } 29.142 + 29.143 + return 0; 29.144 +} 29.145 + 29.146 static void ueblktap_setup(struct xs_handle *h, char *bepath) 29.147 { 29.148 struct backend_info *be; 29.149 @@ -156,6 +288,7 @@ static void ueblktap_setup(struct xs_han 29.150 int len, er, deverr; 29.151 long int pdev = 0, handle; 29.152 blkif_info_t *blk; 29.153 + const char* errmsg = NULL; 29.154 29.155 be = be_lookup_be(bepath); 29.156 if (be == NULL) 29.157 @@ -211,6 +344,9 @@ static void ueblktap_setup(struct xs_han 29.158 be->pdev = pdev; 29.159 } 29.160 29.161 + if (check_image(h, be, &errmsg)) 29.162 + goto fail; 29.163 + 29.164 er = blkif_init(be->blkif, handle, be->pdev, be->readonly); 29.165 if (er != 0) { 29.166 DPRINTF("Unable to open device %s\n",blk->params); 29.167 @@ -246,12 +382,21 @@ static void ueblktap_setup(struct xs_han 29.168 } 29.169 29.170 be->blkif->state = CONNECTED; 29.171 + xs_printf(h, be->backpath, "hotplug-status", "connected"); 29.172 + 29.173 DPRINTF("[SETUP] Complete\n\n"); 29.174 goto close; 29.175 29.176 fail: 29.177 - if ( (be != NULL) && (be->blkif != NULL) ) 29.178 + if (be) { 29.179 + if (errmsg == NULL) 29.180 + errmsg = "Setting up the backend failed. See the log " 29.181 + "files in /var/log/xen/ for details."; 29.182 + xs_printf(h, be->backpath, "hotplug-error", errmsg); 29.183 + xs_printf(h, be->backpath, "hotplug-status", "error"); 29.184 + 29.185 backend_remove(h, be); 29.186 + } 29.187 close: 29.188 if (path) 29.189 free(path); 29.190 @@ -286,7 +431,8 @@ static void ueblktap_probe(struct xs_han 29.191 len = strsep_len(bepath, '/', 7); 29.192 if (len < 0) 29.193 goto free_be; 29.194 - bepath[len] = '\0'; 29.195 + if (bepath[len] != '\0') 29.196 + goto free_be; 29.197 29.198 be = malloc(sizeof(*be)); 29.199 if (!be) {
30.1 --- a/tools/console/client/main.c Mon Mar 30 19:56:30 2009 -0700 30.2 +++ b/tools/console/client/main.c Thu Apr 23 18:49:41 2009 -0700 30.3 @@ -35,6 +35,9 @@ 30.4 #include <err.h> 30.5 #include <errno.h> 30.6 #include <string.h> 30.7 +#ifdef __sun__ 30.8 +#include <sys/stropts.h> 30.9 +#endif 30.10 30.11 #include "xs.h" 30.12 30.13 @@ -71,6 +74,21 @@ static void usage(const char *program) { 30.14 , program); 30.15 } 30.16 30.17 +#ifdef __sun__ 30.18 +void cfmakeraw(struct termios *termios_p) 30.19 +{ 30.20 + termios_p->c_iflag &= 30.21 + ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); 30.22 + termios_p->c_oflag &= ~OPOST; 30.23 + termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); 30.24 + termios_p->c_cflag &= ~(CSIZE|PARENB); 30.25 + termios_p->c_cflag |= CS8; 30.26 + 30.27 + termios_p->c_cc[VMIN] = 0; 30.28 + termios_p->c_cc[VTIME] = 0; 30.29 +} 30.30 +#endif 30.31 + 30.32 static int get_pty_fd(struct xs_handle *xs, char *path, int seconds) 30.33 /* Check for a pty in xenstore, open it and return its fd. 30.34 * Assumes there is already a watch set in the store for this path. */ 30.35 @@ -80,7 +98,7 @@ static int get_pty_fd(struct xs_handle * 30.36 int xs_fd = xs_fileno(xs), pty_fd = -1; 30.37 int start, now; 30.38 unsigned int len = 0; 30.39 - char *pty_path, **watch_paths;; 30.40 + char *pty_path, **watch_paths; 30.41 30.42 start = now = time(NULL); 30.43 do { 30.44 @@ -104,6 +122,29 @@ static int get_pty_fd(struct xs_handle * 30.45 } 30.46 } 30.47 } while (pty_fd == -1 && (now = time(NULL)) < start + seconds); 30.48 + 30.49 +#ifdef __sun__ 30.50 + if (pty_fd != -1) { 30.51 + struct termios term; 30.52 + 30.53 + /* 30.54 + * The pty may come from either xend (with pygrub) or 30.55 + * xenconsoled. It may have tty semantics set up, or not. 30.56 + * While it isn't strictly necessary to have those 30.57 + * semantics here, it is good to have a consistent 30.58 + * state that is the same as under Linux. 30.59 + * 30.60 + * If tcgetattr fails, they have not been set up, 30.61 + * so go ahead and set them up now, by pushing the 30.62 + * ptem and ldterm streams modules. 30.63 + */ 30.64 + if (tcgetattr(pty_fd, &term) < 0) { 30.65 + ioctl(pty_fd, I_PUSH, "ptem"); 30.66 + ioctl(pty_fd, I_PUSH, "ldterm"); 30.67 + } 30.68 + } 30.69 +#endif 30.70 + 30.71 return pty_fd; 30.72 } 30.73 30.74 @@ -119,12 +160,12 @@ static void init_term(int fd, struct ter 30.75 new_term = *old; 30.76 cfmakeraw(&new_term); 30.77 30.78 - tcsetattr(fd, TCSAFLUSH, &new_term); 30.79 + tcsetattr(fd, TCSANOW, &new_term); 30.80 } 30.81 30.82 static void restore_term(int fd, struct termios *old) 30.83 { 30.84 - tcsetattr(fd, TCSAFLUSH, old); 30.85 + tcsetattr(fd, TCSANOW, old); 30.86 } 30.87 30.88 static int console_loop(int fd, struct xs_handle *xs, char *pty_path) 30.89 @@ -152,7 +193,8 @@ static int console_loop(int fd, struct x 30.90 30.91 if (FD_ISSET(xs_fileno(xs), &fds)) { 30.92 int newfd = get_pty_fd(xs, pty_path, 0); 30.93 - close(fd); 30.94 + if (fd != -1) 30.95 + close(fd); 30.96 if (newfd == -1) 30.97 /* Console PTY has become invalid */ 30.98 return 0;
31.1 --- a/tools/console/daemon/io.c Mon Mar 30 19:56:30 2009 -0700 31.2 +++ b/tools/console/daemon/io.c Thu Apr 23 18:49:41 2009 -0700 31.3 @@ -288,6 +288,7 @@ static int create_domain_log(struct doma 31.4 namepath = s; 31.5 strcat(namepath, "/name"); 31.6 data = xs_read(xs, XBT_NULL, namepath, &len); 31.7 + free(namepath); 31.8 if (!data) 31.9 return -1; 31.10 if (!len) { 31.11 @@ -402,9 +403,7 @@ static int domain_create_tty(struct doma 31.12 assert(dom->slave_fd == -1); 31.13 assert(dom->master_fd == -1); 31.14 31.15 - cfmakeraw(&term); 31.16 - 31.17 - if (openpty(&dom->master_fd, &dom->slave_fd, NULL, &term, NULL) < 0) { 31.18 + if (openpty(&dom->master_fd, &dom->slave_fd, NULL, NULL, NULL) < 0) { 31.19 err = errno; 31.20 dolog(LOG_ERR, "Failed to create tty for domain-%d " 31.21 "(errno = %i, %s)", 31.22 @@ -412,6 +411,22 @@ static int domain_create_tty(struct doma 31.23 return 0; 31.24 } 31.25 31.26 + if (tcgetattr(dom->slave_fd, &term) < 0) { 31.27 + err = errno; 31.28 + dolog(LOG_ERR, "Failed to get tty attributes for domain-%d " 31.29 + "(errno = %i, %s)", 31.30 + dom->domid, err, strerror(err)); 31.31 + goto out; 31.32 + } 31.33 + cfmakeraw(&term); 31.34 + if (tcsetattr(dom->slave_fd, TCSANOW, &term) < 0) { 31.35 + err = errno; 31.36 + dolog(LOG_ERR, "Failed to set tty attributes for domain-%d " 31.37 + "(errno = %i, %s)", 31.38 + dom->domid, err, strerror(err)); 31.39 + goto out; 31.40 + } 31.41 + 31.42 if ((slave = ptsname(dom->master_fd)) == NULL) { 31.43 err = errno; 31.44 dolog(LOG_ERR, "Failed to get slave name for domain-%d " 31.45 @@ -534,9 +549,6 @@ static int domain_create_ring(struct dom 31.46 } 31.47 free(type); 31.48 31.49 - if ((ring_ref == dom->ring_ref) && (remote_port == dom->remote_port)) 31.50 - goto out; 31.51 - 31.52 if (ring_ref != dom->ring_ref) { 31.53 if (dom->interface != NULL) 31.54 munmap(dom->interface, getpagesize()); 31.55 @@ -551,6 +563,16 @@ static int domain_create_ring(struct dom 31.56 dom->ring_ref = ring_ref; 31.57 } 31.58 31.59 + /* Go no further if port has not changed and we are still bound. */ 31.60 + if (remote_port == dom->remote_port) { 31.61 + xc_evtchn_status_t status = { 31.62 + .dom = DOMID_SELF, 31.63 + .port = dom->local_port }; 31.64 + if ((xc_evtchn_status(xc, &status) == 0) && 31.65 + (status.status == EVTCHNSTAT_interdomain)) 31.66 + goto out; 31.67 + } 31.68 + 31.69 dom->local_port = -1; 31.70 dom->remote_port = -1; 31.71 if (dom->xce_handle != -1) 31.72 @@ -587,7 +609,7 @@ static int domain_create_ring(struct dom 31.73 } 31.74 } 31.75 31.76 - if (log_guest) 31.77 + if (log_guest && (dom->log_fd == -1)) 31.78 dom->log_fd = create_domain_log(dom); 31.79 31.80 out:
32.1 --- a/tools/console/daemon/main.c Mon Mar 30 19:56:30 2009 -0700 32.2 +++ b/tools/console/daemon/main.c Thu Apr 23 18:49:41 2009 -0700 32.3 @@ -86,7 +86,9 @@ int main(int argc, char **argv) 32.4 version(argv[0]); 32.5 exit(0); 32.6 case 'v': 32.7 +#ifndef __sun__ 32.8 syslog_option |= LOG_PERROR; 32.9 +#endif 32.10 syslog_mask = LOG_DEBUG; 32.11 break; 32.12 case 'i':
33.1 --- a/tools/examples/xend-config.sxp Mon Mar 30 19:56:30 2009 -0700 33.2 +++ b/tools/examples/xend-config.sxp Thu Apr 23 18:49:41 2009 -0700 33.3 @@ -64,6 +64,7 @@ 33.4 #(xend-relocation-server no) 33.5 (xend-relocation-server yes) 33.6 #(xend-relocation-ssl-server no) 33.7 +#(xend-udev-event-server no) 33.8 33.9 #(xend-unix-path /var/lib/xend/xend-socket) 33.10
34.1 --- a/tools/examples/xmexample.hvm Mon Mar 30 19:56:30 2009 -0700 34.2 +++ b/tools/examples/xmexample.hvm Thu Apr 23 18:49:41 2009 -0700 34.3 @@ -7,11 +7,11 @@ 34.4 #============================================================================ 34.5 34.6 import os, re 34.7 + 34.8 +arch_libdir = 'lib' 34.9 arch = os.uname()[4] 34.10 -if re.search('64', arch): 34.11 +if os.uname()[0] == 'Linux' and re.search('64', arch): 34.12 arch_libdir = 'lib64' 34.13 -else: 34.14 - arch_libdir = 'lib' 34.15 34.16 #---------------------------------------------------------------------------- 34.17 # Kernel image file. 34.18 @@ -225,6 +225,10 @@ serial='pty' 34.19 #keymap='ja' 34.20 34.21 #----------------------------------------------------------------------------- 34.22 +# Enable/disable xen platform PCI device, default=1 (enabled) 34.23 +#xen_platform_pci=1 34.24 + 34.25 +#----------------------------------------------------------------------------- 34.26 # Configure guest CPUID responses: 34.27 # 34.28 #cpuid=[ '1:ecx=xxxxxxxxxxx00xxxxxxxxxxxxxxxxxxx, 34.29 @@ -264,8 +268,8 @@ serial='pty' 34.30 # Look like a generic 686 : 34.31 # cpuid = [ '0:eax=0x3,ebx=0x0,ecx=0x0,edx=0x0', 34.32 # '1:eax=0x06b1, 34.33 -# ecx=xxxxxxxxxx0000xx00xxx0000000xx0, 34.34 -# edx=xx00000xxxxxxx0xxxxxxxxx0xxxxxx', 34.35 +# ecx=xxxxxxxxxxx0000xx00xxx0000000xx0, 34.36 +# edx=xxx00000xxxxxxx0xxxxxxxxx0xxxxxx', 34.37 # '4:eax=0x3,ebx=0x0,ecx=0x0,edx=0x0', 34.38 # '0x80000000:eax=0x3,ebx=0x0,ecx=0x0,edx=0x0'] 34.39 # with the highest leaf 34.40 @@ -308,6 +312,8 @@ serial='pty' 34.41 # available options are: 34.42 # - msitranslate=0|1 34.43 # per-device overriden of pci_msitranslate, see below 34.44 +# - power_mgmt=0|1 34.45 +# per-device overriden of pci_power_mgmt, see below 34.46 # 34.47 #pci=[ '07:00.0', '07:00.1' ] 34.48 34.49 @@ -322,6 +328,13 @@ serial='pty' 34.50 # 34.51 #pci_msitranslate=1 34.52 34.53 +# PCI Power Management: 34.54 +# 34.55 +# If it's set, the guest OS will be able to program D0-D3hot states of the 34.56 +# PCI device for the purpose of low power consumption. 34.57 +# 34.58 +#pci_power_mgmt=0 34.59 + 34.60 #----------------------------------------------------------------------------- 34.61 # Configure PVSCSI devices: 34.62 #
35.1 --- a/tools/examples/xmexample.hvm-dm Mon Mar 30 19:56:30 2009 -0700 35.2 +++ b/tools/examples/xmexample.hvm-dm Thu Apr 23 18:49:41 2009 -0700 35.3 @@ -11,4 +11,4 @@ vif = [ '', 'type=ioemu, bridge=xenbr0' 35.4 disk = [ 'file:/var/images/min-el3-i386.img,hda,w', ',hdc:cdrom,r' ] 35.5 35.6 # Actual output via PVFB 35.7 -vfb = [ 'type=sdl' ] 35.8 +vfb = [ 'sdl=1' ]
36.1 --- a/tools/examples/xmexample.pv-grub Mon Mar 30 19:56:30 2009 -0700 36.2 +++ b/tools/examples/xmexample.pv-grub Thu Apr 23 18:49:41 2009 -0700 36.3 @@ -77,29 +77,29 @@ disk = [ 'phy:hda1,hda1,w' ] 36.4 # 36.5 # To create one using the SDL backend and sensible defaults: 36.6 # 36.7 -# vfb = [ 'type=sdl' ] 36.8 +# vfb = [ 'sdl=1' ] 36.9 # 36.10 # This uses environment variables XAUTHORITY and DISPLAY. You 36.11 # can override that: 36.12 # 36.13 -# vfb = [ 'type=sdl,xauthority=/home/bozo/.Xauthority,display=:1' ] 36.14 +# vfb = [ 'sdl=1,xauthority=/home/bozo/.Xauthority,display=:1' ] 36.15 # 36.16 # To create one using the VNC backend and sensible defaults: 36.17 # 36.18 -# vfb = [ 'type=vnc' ] 36.19 +# vfb = [ 'vnc=1' ] 36.20 # 36.21 # The backend listens on 127.0.0.1 port 5900+N by default, where N is 36.22 # the domain ID. You can override both address and N: 36.23 # 36.24 -# vfb = [ 'type=vnc,vnclisten=127.0.0.1,vncdisplay=1' ] 36.25 +# vfb = [ 'vnc=1,vnclisten=127.0.0.1,vncdisplay=1' ] 36.26 # 36.27 # Or you can bind the first unused port above 5900: 36.28 # 36.29 -# vfb = [ 'type=vnc,vnclisten=0.0.0.0,vncunused=1' ] 36.30 +# vfb = [ 'vnc=1,vnclisten=0.0.0.0,vncunused=1' ] 36.31 # 36.32 # You can override the password: 36.33 # 36.34 -# vfb = [ 'type=vnc,vncpasswd=MYPASSWD' ] 36.35 +# vfb = [ 'vnc=1,vncpasswd=MYPASSWD' ] 36.36 # 36.37 # Empty password disables authentication. Defaults to the vncpasswd 36.38 # configured in xend-config.sxp.
37.1 --- a/tools/examples/xmexample.vti Mon Mar 30 19:56:30 2009 -0700 37.2 +++ b/tools/examples/xmexample.vti Thu Apr 23 18:49:41 2009 -0700 37.3 @@ -7,8 +7,8 @@ 37.4 #============================================================================ 37.5 37.6 import os, re 37.7 +arch_libdir = 'lib' 37.8 arch = os.uname()[4] 37.9 -arch_libdir = 'lib' 37.10 37.11 #---------------------------------------------------------------------------- 37.12 # Kernel image file.
38.1 --- a/tools/examples/xmexample1 Mon Mar 30 19:56:30 2009 -0700 38.2 +++ b/tools/examples/xmexample1 Thu Apr 23 18:49:41 2009 -0700 38.3 @@ -73,29 +73,29 @@ disk = [ 'phy:hda1,hda1,w' ] 38.4 # 38.5 # To create one using the SDL backend and sensible defaults: 38.6 # 38.7 -# vfb = [ 'type=sdl' ] 38.8 +# vfb = [ 'sdl=1' ] 38.9 # 38.10 # This uses environment variables XAUTHORITY and DISPLAY. You 38.11 # can override that: 38.12 # 38.13 -# vfb = [ 'type=sdl,xauthority=/home/bozo/.Xauthority,display=:1' ] 38.14 +# vfb = [ 'sdl=1,xauthority=/home/bozo/.Xauthority,display=:1' ] 38.15 # 38.16 # To create one using the VNC backend and sensible defaults: 38.17 # 38.18 -# vfb = [ 'type=vnc' ] 38.19 +# vfb = [ 'vnc=1' ] 38.20 # 38.21 # The backend listens on 127.0.0.1 port 5900+N by default, where N is 38.22 # the domain ID. You can override both address and N: 38.23 # 38.24 -# vfb = [ 'type=vnc,vnclisten=127.0.0.1,vncdisplay=1' ] 38.25 +# vfb = [ 'vnc=1,vnclisten=127.0.0.1,vncdisplay=1' ] 38.26 # 38.27 # Or you can bind the first unused port above 5900: 38.28 # 38.29 -# vfb = [ 'type=vnc,vnclisten=0.0.0.0,vncunused=1' ] 38.30 +# vfb = [ 'vnc=1,vnclisten=0.0.0.0,vncunused=1' ] 38.31 # 38.32 # You can override the password: 38.33 # 38.34 -# vfb = [ 'type=vnc,vncpasswd=MYPASSWD' ] 38.35 +# vfb = [ 'vnc=1,vncpasswd=MYPASSWD' ] 38.36 # 38.37 # Empty password disables authentication. Defaults to the vncpasswd 38.38 # configured in xend-config.sxp.
39.1 --- a/tools/examples/xmexample2 Mon Mar 30 19:56:30 2009 -0700 39.2 +++ b/tools/examples/xmexample2 Thu Apr 23 18:49:41 2009 -0700 39.3 @@ -109,29 +109,29 @@ disk = [ 'phy:sda%d,sda1,w' % (7+vmid), 39.4 # 39.5 # To create one using the SDL backend and sensible defaults: 39.6 # 39.7 -# vfb = [ 'type=sdl' ] 39.8 +# vfb = [ 'sdl=1' ] 39.9 # 39.10 # This uses environment variables XAUTHORITY and DISPLAY. You 39.11 # can override that: 39.12 # 39.13 -# vfb = [ 'type=sdl,xauthority=/home/bozo/.Xauthority,display=:1' ] 39.14 +# vfb = [ 'sdl=1,xauthority=/home/bozo/.Xauthority,display=:1' ] 39.15 # 39.16 # To create one using the VNC backend and sensible defaults: 39.17 # 39.18 -# vfb = [ 'type=vnc' ] 39.19 +# vfb = [ 'vnc=1' ] 39.20 # 39.21 # The backend listens on 127.0.0.1 port 5900+N by default, where N is 39.22 # the domain ID. You can override both address and N: 39.23 # 39.24 -# vfb = [ 'type=vnc,vnclisten=127.0.0.1,vncdisplay=%d' % vmid ] 39.25 +# vfb = [ 'vnc=1,vnclisten=127.0.0.1,vncdisplay=%d' % vmid ] 39.26 # 39.27 # Or you can bind the first unused port above 5900: 39.28 # 39.29 -# vfb = [ 'type=vnc,vnclisten=0.0.0.0,vncunused=1' ] 39.30 +# vfb = [ 'vnc=1,vnclisten=0.0.0.0,vncunused=1' ] 39.31 # 39.32 # You can override the password: 39.33 # 39.34 -# vfb = [ 'type=vnc,vncpasswd=MYPASSWD' ] 39.35 +# vfb = [ 'vnc=1,vncpasswd=MYPASSWD' ] 39.36 # 39.37 # Empty password disables authentication. Defaults to the vncpasswd 39.38 # configured in xend-config.sxp.
40.1 --- a/tools/examples/xmexample3 Mon Mar 30 19:56:30 2009 -0700 40.2 +++ b/tools/examples/xmexample3 Thu Apr 23 18:49:41 2009 -0700 40.3 @@ -94,29 +94,29 @@ disk = [ 'phy:hda%d,hda1,w' % (vmid)] 40.4 # 40.5 # To create one using the SDL backend and sensible defaults: 40.6 # 40.7 -# vfb = [ 'type=sdl' ] 40.8 +# vfb = [ 'sdl=1' ] 40.9 # 40.10 # This uses environment variables XAUTHORITY and DISPLAY. You 40.11 # can override that: 40.12 # 40.13 -# vfb = [ 'type=sdl,xauthority=/home/bozo/.Xauthority,display=:1' ] 40.14 +# vfb = [ 'sdl=1,xauthority=/home/bozo/.Xauthority,display=:1' ] 40.15 # 40.16 # To create one using the VNC backend and sensible defaults: 40.17 # 40.18 -# vfb = [ 'type=vnc' ] 40.19 +# vfb = [ 'vnc=1' ] 40.20 # 40.21 # The backend listens on 127.0.0.1 port 5900+N by default, where N is 40.22 # the domain ID. You can override both address and N: 40.23 # 40.24 -# vfb = [ 'type=vnc,vnclisten=127.0.0.1,vncdisplay=%d' % vmid ] 40.25 +# vfb = [ 'vnc=1,vnclisten=127.0.0.1,vncdisplay=%d' % vmid ] 40.26 # 40.27 # Or you can bind the first unused port above 5900: 40.28 # 40.29 -# vfb = [ 'type=vnc,vnclisten=0.0.0.0,vncunused=1' ] 40.30 +# vfb = [ 'vnc=1,vnclisten=0.0.0.0,vncunused=1' ] 40.31 # 40.32 # You can override the password: 40.33 # 40.34 -# vfb = [ 'type=vnc,vncpasswd=MYPASSWD' ] 40.35 +# vfb = [ 'vnc=1,vncpasswd=MYPASSWD' ] 40.36 # 40.37 # Empty password disables authentication. Defaults to the vncpasswd 40.38 # configured in xend-config.sxp.
41.1 --- a/tools/firmware/Makefile Mon Mar 30 19:56:30 2009 -0700 41.2 +++ b/tools/firmware/Makefile Thu Apr 23 18:49:41 2009 -0700 41.3 @@ -2,9 +2,8 @@ XEN_ROOT = ../.. 41.4 include $(XEN_ROOT)/tools/Rules.mk 41.5 41.6 # hvmloader is a 32-bit protected mode binary. 41.7 -# It belongs in /usr/lib, not /usr/lib64. 41.8 TARGET := hvmloader/hvmloader 41.9 -INST_DIR := $(DESTDIR)/usr/lib/xen/boot 41.10 +INST_DIR := $(DESTDIR)$(LIBDIR_x86_32)/xen/boot 41.11 41.12 SUBDIRS := 41.13 SUBDIRS += rombios 41.14 @@ -15,13 +14,13 @@ SUBDIRS += hvmloader 41.15 .PHONY: all 41.16 all: 41.17 @set -e; if [ $$((`( bcc -v 2>&1 | grep version || echo 0.0.0 ) | cut -d' ' -f 3 | awk -F. '{ printf "0x%02x%02x%02x", $$1, $$2, $$3}'`)) -lt $$((0x00100e)) ] ; then \ 41.18 - echo "==========================================================="; \ 41.19 - echo "Require dev86 package version >= 0.16.14 to build firmware!"; \ 41.20 - echo "(visit http://www.cix.co.uk/~mayday for more information)"; \ 41.21 - echo "==========================================================="; \ 41.22 - else \ 41.23 + echo "==========================================================================="; \ 41.24 + echo "Require dev86 rpm or bin86 & bcc debs version >= 0.16.14 to build firmware!"; \ 41.25 + echo "(visit http://www.debath.co.uk/dev86/ for more information)"; \ 41.26 + echo "==========================================================================="; \ 41.27 + false ; \ 41.28 + fi 41.29 $(MAKE) subdirs-$@; \ 41.30 - fi 41.31 41.32 41.33 .PHONY: install
42.1 --- a/tools/firmware/hvmloader/acpi/dsdt.asl Mon Mar 30 19:56:30 2009 -0700 42.2 +++ b/tools/firmware/hvmloader/acpi/dsdt.asl Thu Apr 23 18:49:41 2009 -0700 42.3 @@ -123,7 +123,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 42.4 Name (_BBN, 0x00) 42.5 42.6 /* 42.7 - * Reserve the IO port ranges [0x10c0, 0x10c2] and [0xb044, 0xb047]. 42.8 + * Reserve the IO port ranges [0x10c0, 0x10e1] and [0xb044, 0xb047]. 42.9 * Or else, for a hotplugged-in device, the port IO BAR assigned 42.10 * by guest OS may conflict with the ranges here. 42.11 */ 42.12 @@ -131,7 +131,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 42.13 { 42.14 Name(_HID, EISAID("PNP0C02")) 42.15 Name(_CRS, ResourceTemplate() { 42.16 - IO (Decode16, 0x10c0, 0x10c0, 0x00, 0x03) 42.17 + IO (Decode16, 0x10c0, 0x10c0, 0x00, 0x22) 42.18 IO (Decode16, 0xb044, 0xb044, 0x00, 0x04) 42.19 }) 42.20 } 42.21 @@ -470,6 +470,102 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 42.22 Package(){0x000fffff, 1, \_SB.PCI0.LNKA, 0}, 42.23 Package(){0x000fffff, 2, \_SB.PCI0.LNKB, 0}, 42.24 Package(){0x000fffff, 3, \_SB.PCI0.LNKC, 0}, 42.25 + 42.26 + /* Device 16, INTA - INTD */ 42.27 + Package(){0x0010ffff, 0, \_SB.PCI0.LNKA, 0}, 42.28 + Package(){0x0010ffff, 1, \_SB.PCI0.LNKB, 0}, 42.29 + Package(){0x0010ffff, 2, \_SB.PCI0.LNKC, 0}, 42.30 + Package(){0x0010ffff, 3, \_SB.PCI0.LNKD, 0}, 42.31 + 42.32 + /* Device 17, INTA - INTD */ 42.33 + Package(){0x0011ffff, 0, \_SB.PCI0.LNKB, 0}, 42.34 + Package(){0x0011ffff, 1, \_SB.PCI0.LNKC, 0}, 42.35 + Package(){0x0011ffff, 2, \_SB.PCI0.LNKD, 0}, 42.36 + Package(){0x0011ffff, 3, \_SB.PCI0.LNKA, 0}, 42.37 + 42.38 + /* Device 18, INTA - INTD */ 42.39 + Package(){0x0012ffff, 0, \_SB.PCI0.LNKC, 0}, 42.40 + Package(){0x0012ffff, 1, \_SB.PCI0.LNKD, 0}, 42.41 + Package(){0x0012ffff, 2, \_SB.PCI0.LNKA, 0}, 42.42 + Package(){0x0012ffff, 3, \_SB.PCI0.LNKB, 0}, 42.43 + 42.44 + /* Device 19, INTA - INTD */ 42.45 + Package(){0x0013ffff, 0, \_SB.PCI0.LNKD, 0}, 42.46 + Package(){0x0013ffff, 1, \_SB.PCI0.LNKA, 0}, 42.47 + Package(){0x0013ffff, 2, \_SB.PCI0.LNKB, 0}, 42.48 + Package(){0x0013ffff, 3, \_SB.PCI0.LNKC, 0}, 42.49 + 42.50 + /* Device 20, INTA - INTD */ 42.51 + Package(){0x0014ffff, 0, \_SB.PCI0.LNKA, 0}, 42.52 + Package(){0x0014ffff, 1, \_SB.PCI0.LNKB, 0}, 42.53 + Package(){0x0014ffff, 2, \_SB.PCI0.LNKC, 0}, 42.54 + Package(){0x0014ffff, 3, \_SB.PCI0.LNKD, 0}, 42.55 + 42.56 + /* Device 21, INTA - INTD */ 42.57 + Package(){0x0015ffff, 0, \_SB.PCI0.LNKB, 0}, 42.58 + Package(){0x0015ffff, 1, \_SB.PCI0.LNKC, 0}, 42.59 + Package(){0x0015ffff, 2, \_SB.PCI0.LNKD, 0}, 42.60 + Package(){0x0015ffff, 3, \_SB.PCI0.LNKA, 0}, 42.61 + 42.62 + /* Device 22, INTA - INTD */ 42.63 + Package(){0x0016ffff, 0, \_SB.PCI0.LNKC, 0}, 42.64 + Package(){0x0016ffff, 1, \_SB.PCI0.LNKD, 0}, 42.65 + Package(){0x0016ffff, 2, \_SB.PCI0.LNKA, 0}, 42.66 + Package(){0x0016ffff, 3, \_SB.PCI0.LNKB, 0}, 42.67 + 42.68 + /* Device 23, INTA - INTD */ 42.69 + Package(){0x0017ffff, 0, \_SB.PCI0.LNKD, 0}, 42.70 + Package(){0x0017ffff, 1, \_SB.PCI0.LNKA, 0}, 42.71 + Package(){0x0017ffff, 2, \_SB.PCI0.LNKB, 0}, 42.72 + Package(){0x0017ffff, 3, \_SB.PCI0.LNKC, 0}, 42.73 + 42.74 + /* Device 24, INTA - INTD */ 42.75 + Package(){0x0018ffff, 0, \_SB.PCI0.LNKA, 0}, 42.76 + Package(){0x0018ffff, 1, \_SB.PCI0.LNKB, 0}, 42.77 + Package(){0x0018ffff, 2, \_SB.PCI0.LNKC, 0}, 42.78 + Package(){0x0018ffff, 3, \_SB.PCI0.LNKD, 0}, 42.79 + 42.80 + /* Device 25, INTA - INTD */ 42.81 + Package(){0x0019ffff, 0, \_SB.PCI0.LNKB, 0}, 42.82 + Package(){0x0019ffff, 1, \_SB.PCI0.LNKC, 0}, 42.83 + Package(){0x0019ffff, 2, \_SB.PCI0.LNKD, 0}, 42.84 + Package(){0x0019ffff, 3, \_SB.PCI0.LNKA, 0}, 42.85 + 42.86 + /* Device 26, INTA - INTD */ 42.87 + Package(){0x001affff, 0, \_SB.PCI0.LNKC, 0}, 42.88 + Package(){0x001affff, 1, \_SB.PCI0.LNKD, 0}, 42.89 + Package(){0x001affff, 2, \_SB.PCI0.LNKA, 0}, 42.90 + Package(){0x001affff, 3, \_SB.PCI0.LNKB, 0}, 42.91 + 42.92 + /* Device 27, INTA - INTD */ 42.93 + Package(){0x001bffff, 0, \_SB.PCI0.LNKD, 0}, 42.94 + Package(){0x001bffff, 1, \_SB.PCI0.LNKA, 0}, 42.95 + Package(){0x001bffff, 2, \_SB.PCI0.LNKB, 0}, 42.96 + Package(){0x001bffff, 3, \_SB.PCI0.LNKC, 0}, 42.97 + 42.98 + /* Device 28, INTA - INTD */ 42.99 + Package(){0x001cffff, 0, \_SB.PCI0.LNKA, 0}, 42.100 + Package(){0x001cffff, 1, \_SB.PCI0.LNKB, 0}, 42.101 + Package(){0x001cffff, 2, \_SB.PCI0.LNKC, 0}, 42.102 + Package(){0x001cffff, 3, \_SB.PCI0.LNKD, 0}, 42.103 + 42.104 + /* Device 29, INTA - INTD */ 42.105 + Package(){0x001dffff, 0, \_SB.PCI0.LNKB, 0}, 42.106 + Package(){0x001dffff, 1, \_SB.PCI0.LNKC, 0}, 42.107 + Package(){0x001dffff, 2, \_SB.PCI0.LNKD, 0}, 42.108 + Package(){0x001dffff, 3, \_SB.PCI0.LNKA, 0}, 42.109 + 42.110 + /* Device 30, INTA - INTD */ 42.111 + Package(){0x001effff, 0, \_SB.PCI0.LNKC, 0}, 42.112 + Package(){0x001effff, 1, \_SB.PCI0.LNKD, 0}, 42.113 + Package(){0x001effff, 2, \_SB.PCI0.LNKA, 0}, 42.114 + Package(){0x001effff, 3, \_SB.PCI0.LNKB, 0}, 42.115 + 42.116 + /* Device 31, INTA - INTD */ 42.117 + Package(){0x001fffff, 0, \_SB.PCI0.LNKD, 0}, 42.118 + Package(){0x001fffff, 1, \_SB.PCI0.LNKA, 0}, 42.119 + Package(){0x001fffff, 2, \_SB.PCI0.LNKB, 0}, 42.120 + Package(){0x001fffff, 3, \_SB.PCI0.LNKC, 0}, 42.121 }) 42.122 42.123 Name(PRTA, Package() { 42.124 @@ -562,6 +658,102 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 42.125 Package(){0x000fffff, 1, 0, 46}, 42.126 Package(){0x000fffff, 2, 0, 47}, 42.127 Package(){0x000fffff, 3, 0, 16}, 42.128 + 42.129 + /* Device 16, INTA - INTD */ 42.130 + Package(){0x0010ffff, 0, 0, 18}, 42.131 + Package(){0x0010ffff, 1, 0, 19}, 42.132 + Package(){0x0010ffff, 2, 0, 20}, 42.133 + Package(){0x0010ffff, 3, 0, 21}, 42.134 + 42.135 + /* Device 17, INTA - INTD */ 42.136 + Package(){0x0011ffff, 0, 0, 22}, 42.137 + Package(){0x0011ffff, 1, 0, 23}, 42.138 + Package(){0x0011ffff, 2, 0, 24}, 42.139 + Package(){0x0011ffff, 3, 0, 25}, 42.140 + 42.141 + /* Device 18, INTA - INTD */ 42.142 + Package(){0x0012ffff, 0, 0, 26}, 42.143 + Package(){0x0012ffff, 1, 0, 27}, 42.144 + Package(){0x0012ffff, 2, 0, 28}, 42.145 + Package(){0x0012ffff, 3, 0, 29}, 42.146 + 42.147 + /* Device 19, INTA - INTD */ 42.148 + Package(){0x0013ffff, 0, 0, 30}, 42.149 + Package(){0x0013ffff, 1, 0, 31}, 42.150 + Package(){0x0013ffff, 2, 0, 32}, 42.151 + Package(){0x0013ffff, 3, 0, 33}, 42.152 + 42.153 + /* Device 20, INTA - INTD */ 42.154 + Package(){0x0014ffff, 0, 0, 34}, 42.155 + Package(){0x0014ffff, 1, 0, 35}, 42.156 + Package(){0x0014ffff, 2, 0, 36}, 42.157 + Package(){0x0014ffff, 3, 0, 37}, 42.158 + 42.159 + /* Device 21, INTA - INTD */ 42.160 + Package(){0x0015ffff, 0, 0, 38}, 42.161 + Package(){0x0015ffff, 1, 0, 39}, 42.162 + Package(){0x0015ffff, 2, 0, 40}, 42.163 + Package(){0x0015ffff, 3, 0, 41}, 42.164 + 42.165 + /* Device 22, INTA - INTD */ 42.166 + Package(){0x0016ffff, 0, 0, 42}, 42.167 + Package(){0x0016ffff, 1, 0, 43}, 42.168 + Package(){0x0016ffff, 2, 0, 44}, 42.169 + Package(){0x0016ffff, 3, 0, 45}, 42.170 + 42.171 + /* Device 23, INTA - INTD */ 42.172 + Package(){0x0017ffff, 0, 0, 46}, 42.173 + Package(){0x0017ffff, 1, 0, 47}, 42.174 + Package(){0x0017ffff, 2, 0, 16}, 42.175 + Package(){0x0017ffff, 3, 0, 17}, 42.176 + 42.177 + /* Device 24, INTA - INTD */ 42.178 + Package(){0x0018ffff, 0, 0, 19}, 42.179 + Package(){0x0018ffff, 1, 0, 20}, 42.180 + Package(){0x0018ffff, 2, 0, 21}, 42.181 + Package(){0x0018ffff, 3, 0, 22}, 42.182 + 42.183 + /* Device 25, INTA - INTD */ 42.184 + Package(){0x0019ffff, 0, 0, 23}, 42.185 + Package(){0x0019ffff, 1, 0, 24}, 42.186 + Package(){0x0019ffff, 2, 0, 25}, 42.187 + Package(){0x0019ffff, 3, 0, 26}, 42.188 + 42.189 + /* Device 26, INTA - INTD */ 42.190 + Package(){0x001affff, 0, 0, 27}, 42.191 + Package(){0x001affff, 1, 0, 28}, 42.192 + Package(){0x001affff, 2, 0, 29}, 42.193 + Package(){0x001affff, 3, 0, 30}, 42.194 + 42.195 + /* Device 27, INTA - INTD */ 42.196 + Package(){0x001bffff, 0, 0, 31}, 42.197 + Package(){0x001bffff, 1, 0, 32}, 42.198 + Package(){0x001bffff, 2, 0, 33}, 42.199 + Package(){0x001bffff, 3, 0, 34}, 42.200 + 42.201 + /* Device 28, INTA - INTD */ 42.202 + Package(){0x001cffff, 0, 0, 35}, 42.203 + Package(){0x001cffff, 1, 0, 36}, 42.204 + Package(){0x001cffff, 2, 0, 37}, 42.205 + Package(){0x001cffff, 3, 0, 38}, 42.206 + 42.207 + /* Device 29, INTA - INTD */ 42.208 + Package(){0x001dffff, 0, 0, 39}, 42.209 + Package(){0x001dffff, 1, 0, 40}, 42.210 + Package(){0x001dffff, 2, 0, 41}, 42.211 + Package(){0x001dffff, 3, 0, 42}, 42.212 + 42.213 + /* Device 30, INTA - INTD */ 42.214 + Package(){0x001effff, 0, 0, 43}, 42.215 + Package(){0x001effff, 1, 0, 44}, 42.216 + Package(){0x001effff, 2, 0, 45}, 42.217 + Package(){0x001effff, 3, 0, 46}, 42.218 + 42.219 + /* Device 31, INTA - INTD */ 42.220 + Package(){0x001fffff, 0, 0, 47}, 42.221 + Package(){0x001fffff, 1, 0, 16}, 42.222 + Package(){0x001fffff, 2, 0, 17}, 42.223 + Package(){0x001fffff, 3, 0, 18}, 42.224 }) 42.225 42.226 Device (ISA) 42.227 @@ -789,60 +981,1027 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 42.228 * handle the hotplug action and status, which is beyond the ACPI 42.229 * scope. 42.230 */ 42.231 + Device(S00) 42.232 + { 42.233 + Name (_ADR, 0x00000000) /* Dev 0, Func 0 */ 42.234 + Name (_SUN, 0x00000000) 42.235 42.236 - Device (S1F0) 42.237 + Method (_PS0, 0) 42.238 + { 42.239 + Store (0x00, \_GPE.DPT1) 42.240 + Store (0x80, \_GPE.DPT2) 42.241 + } 42.242 + 42.243 + Method (_PS3, 0) 42.244 + { 42.245 + Store (0x00, \_GPE.DPT1) 42.246 + Store (0x83, \_GPE.DPT2) 42.247 + } 42.248 + 42.249 + Method (_EJ0, 1) 42.250 + { 42.251 + Store (0x00, \_GPE.DPT1) 42.252 + Store (0x88, \_GPE.DPT2) 42.253 + Store (0x1, \_GPE.PH00) /* eject php slot 0x00 */ 42.254 + } 42.255 + 42.256 + Method (_STA, 0) 42.257 + { 42.258 + Store (0x00, \_GPE.DPT1) 42.259 + Store (0x89, \_GPE.DPT2) 42.260 + Return (\_GPE.PH00) /* IN status as the _STA */ 42.261 + } 42.262 + } 42.263 + 42.264 + Device(S01) 42.265 { 42.266 - Name (_ADR, 0x00060000) /* Dev 6, Func 0 */ 42.267 + Name (_ADR, 0x00010000) /* Dev 1, Func 0 */ 42.268 Name (_SUN, 0x00000001) 42.269 42.270 Method (_PS0, 0) 42.271 { 42.272 + Store (0x01, \_GPE.DPT1) 42.273 + Store (0x80, \_GPE.DPT2) 42.274 + } 42.275 + 42.276 + Method (_PS3, 0) 42.277 + { 42.278 + Store (0x01, \_GPE.DPT1) 42.279 + Store (0x83, \_GPE.DPT2) 42.280 + } 42.281 + 42.282 + Method (_EJ0, 1) 42.283 + { 42.284 + Store (0x01, \_GPE.DPT1) 42.285 + Store (0x88, \_GPE.DPT2) 42.286 + Store (0x1, \_GPE.PH01) /* eject php slot 0x01 */ 42.287 + } 42.288 + 42.289 + Method (_STA, 0) 42.290 + { 42.291 + Store (0x01, \_GPE.DPT1) 42.292 + Store (0x89, \_GPE.DPT2) 42.293 + Return (\_GPE.PH01) /* IN status as the _STA */ 42.294 + } 42.295 + } 42.296 + 42.297 + Device(S02) 42.298 + { 42.299 + Name (_ADR, 0x00020000) /* Dev 2, Func 0 */ 42.300 + Name (_SUN, 0x00000002) 42.301 + 42.302 + Method (_PS0, 0) 42.303 + { 42.304 + Store (0x02, \_GPE.DPT1) 42.305 + Store (0x80, \_GPE.DPT2) 42.306 + } 42.307 + 42.308 + Method (_PS3, 0) 42.309 + { 42.310 + Store (0x02, \_GPE.DPT1) 42.311 + Store (0x83, \_GPE.DPT2) 42.312 + } 42.313 + 42.314 + Method (_EJ0, 1) 42.315 + { 42.316 + Store (0x02, \_GPE.DPT1) 42.317 + Store (0x88, \_GPE.DPT2) 42.318 + Store (0x1, \_GPE.PH02) /* eject php slot 0x02 */ 42.319 + } 42.320 + 42.321 + Method (_STA, 0) 42.322 + { 42.323 + Store (0x02, \_GPE.DPT1) 42.324 + Store (0x89, \_GPE.DPT2) 42.325 + Return (\_GPE.PH02) /* IN status as the _STA */ 42.326 + } 42.327 + } 42.328 + 42.329 + Device(S03) 42.330 + { 42.331 + Name (_ADR, 0x00030000) /* Dev 3, Func 0 */ 42.332 + Name (_SUN, 0x00000003) 42.333 + 42.334 + Method (_PS0, 0) 42.335 + { 42.336 + Store (0x03, \_GPE.DPT1) 42.337 + Store (0x80, \_GPE.DPT2) 42.338 + } 42.339 + 42.340 + Method (_PS3, 0) 42.341 + { 42.342 + Store (0x03, \_GPE.DPT1) 42.343 + Store (0x83, \_GPE.DPT2) 42.344 + } 42.345 + 42.346 + Method (_EJ0, 1) 42.347 + { 42.348 + Store (0x03, \_GPE.DPT1) 42.349 + Store (0x88, \_GPE.DPT2) 42.350 + Store (0x1, \_GPE.PH03) /* eject php slot 0x03 */ 42.351 + } 42.352 + 42.353 + Method (_STA, 0) 42.354 + { 42.355 + Store (0x03, \_GPE.DPT1) 42.356 + Store (0x89, \_GPE.DPT2) 42.357 + Return (\_GPE.PH03) /* IN status as the _STA */ 42.358 + } 42.359 + } 42.360 + 42.361 + Device(S04) 42.362 + { 42.363 + Name (_ADR, 0x00040000) /* Dev 4, Func 0 */ 42.364 + Name (_SUN, 0x00000004) 42.365 + 42.366 + Method (_PS0, 0) 42.367 + { 42.368 + Store (0x04, \_GPE.DPT1) 42.369 + Store (0x80, \_GPE.DPT2) 42.370 + } 42.371 + 42.372 + Method (_PS3, 0) 42.373 + { 42.374 + Store (0x04, \_GPE.DPT1) 42.375 + Store (0x83, \_GPE.DPT2) 42.376 + } 42.377 + 42.378 + Method (_EJ0, 1) 42.379 + { 42.380 + Store (0x04, \_GPE.DPT1) 42.381 + Store (0x88, \_GPE.DPT2) 42.382 + Store (0x1, \_GPE.PH04) /* eject php slot 0x04 */ 42.383 + } 42.384 + 42.385 + Method (_STA, 0) 42.386 + { 42.387 + Store (0x04, \_GPE.DPT1) 42.388 + Store (0x89, \_GPE.DPT2) 42.389 + Return (\_GPE.PH04) /* IN status as the _STA */ 42.390 + } 42.391 + } 42.392 + 42.393 + Device(S05) 42.394 + { 42.395 + Name (_ADR, 0x00050000) /* Dev 5, Func 0 */ 42.396 + Name (_SUN, 0x00000005) 42.397 + 42.398 + Method (_PS0, 0) 42.399 + { 42.400 + Store (0x05, \_GPE.DPT1) 42.401 + Store (0x80, \_GPE.DPT2) 42.402 + } 42.403 + 42.404 + Method (_PS3, 0) 42.405 + { 42.406 + Store (0x05, \_GPE.DPT1) 42.407 + Store (0x83, \_GPE.DPT2) 42.408 + } 42.409 + 42.410 + Method (_EJ0, 1) 42.411 + { 42.412 + Store (0x05, \_GPE.DPT1) 42.413 + Store (0x88, \_GPE.DPT2) 42.414 + Store (0x1, \_GPE.PH05) /* eject php slot 0x05 */ 42.415 + } 42.416 + 42.417 + Method (_STA, 0) 42.418 + { 42.419 + Store (0x05, \_GPE.DPT1) 42.420 + Store (0x89, \_GPE.DPT2) 42.421 + Return (\_GPE.PH05) /* IN status as the _STA */ 42.422 + } 42.423 + } 42.424 + 42.425 + Device(S06) 42.426 + { 42.427 + Name (_ADR, 0x00060000) /* Dev 6, Func 0 */ 42.428 + Name (_SUN, 0x00000006) 42.429 + 42.430 + Method (_PS0, 0) 42.431 + { 42.432 + Store (0x06, \_GPE.DPT1) 42.433 + Store (0x80, \_GPE.DPT2) 42.434 + } 42.435 + 42.436 + Method (_PS3, 0) 42.437 + { 42.438 + Store (0x06, \_GPE.DPT1) 42.439 + Store (0x83, \_GPE.DPT2) 42.440 + } 42.441 + 42.442 + Method (_EJ0, 1) 42.443 + { 42.444 + Store (0x06, \_GPE.DPT1) 42.445 + Store (0x88, \_GPE.DPT2) 42.446 + Store (0x1, \_GPE.PH06) /* eject php slot 0x06 */ 42.447 + } 42.448 + 42.449 + Method (_STA, 0) 42.450 + { 42.451 + Store (0x06, \_GPE.DPT1) 42.452 + Store (0x89, \_GPE.DPT2) 42.453 + Return (\_GPE.PH06) /* IN status as the _STA */ 42.454 + } 42.455 + } 42.456 + 42.457 + Device(S07) 42.458 + { 42.459 + Name (_ADR, 0x00070000) /* Dev 7, Func 0 */ 42.460 + Name (_SUN, 0x00000007) 42.461 + 42.462 + Method (_PS0, 0) 42.463 + { 42.464 + Store (0x07, \_GPE.DPT1) 42.465 Store (0x80, \_GPE.DPT2) 42.466 } 42.467 42.468 Method (_PS3, 0) 42.469 { 42.470 + Store (0x07, \_GPE.DPT1) 42.471 + Store (0x83, \_GPE.DPT2) 42.472 + } 42.473 + 42.474 + Method (_EJ0, 1) 42.475 + { 42.476 + Store (0x07, \_GPE.DPT1) 42.477 + Store (0x88, \_GPE.DPT2) 42.478 + Store (0x1, \_GPE.PH07) /* eject php slot 0x07 */ 42.479 + } 42.480 + 42.481 + Method (_STA, 0) 42.482 + { 42.483 + Store (0x07, \_GPE.DPT1) 42.484 + Store (0x89, \_GPE.DPT2) 42.485 + Return (\_GPE.PH07) /* IN status as the _STA */ 42.486 + } 42.487 + } 42.488 + 42.489 + Device(S08) 42.490 + { 42.491 + Name (_ADR, 0x00080000) /* Dev 8, Func 0 */ 42.492 + Name (_SUN, 0x00000008) 42.493 + 42.494 + Method (_PS0, 0) 42.495 + { 42.496 + Store (0x08, \_GPE.DPT1) 42.497 + Store (0x80, \_GPE.DPT2) 42.498 + } 42.499 + 42.500 + Method (_PS3, 0) 42.501 + { 42.502 + Store (0x08, \_GPE.DPT1) 42.503 + Store (0x83, \_GPE.DPT2) 42.504 + } 42.505 + 42.506 + Method (_EJ0, 1) 42.507 + { 42.508 + Store (0x08, \_GPE.DPT1) 42.509 + Store (0x88, \_GPE.DPT2) 42.510 + Store (0x1, \_GPE.PH08) /* eject php slot 0x08 */ 42.511 + } 42.512 + 42.513 + Method (_STA, 0) 42.514 + { 42.515 + Store (0x08, \_GPE.DPT1) 42.516 + Store (0x89, \_GPE.DPT2) 42.517 + Return (\_GPE.PH08) /* IN status as the _STA */ 42.518 + } 42.519 + } 42.520 + 42.521 + Device(S09) 42.522 + { 42.523 + Name (_ADR, 0x00090000) /* Dev 9, Func 0 */ 42.524 + Name (_SUN, 0x00000009) 42.525 + 42.526 + Method (_PS0, 0) 42.527 + { 42.528 + Store (0x09, \_GPE.DPT1) 42.529 + Store (0x80, \_GPE.DPT2) 42.530 + } 42.531 + 42.532 + Method (_PS3, 0) 42.533 + { 42.534 + Store (0x09, \_GPE.DPT1) 42.535 + Store (0x83, \_GPE.DPT2) 42.536 + } 42.537 + 42.538 + Method (_EJ0, 1) 42.539 + { 42.540 + Store (0x09, \_GPE.DPT1) 42.541 + Store (0x88, \_GPE.DPT2) 42.542 + Store (0x1, \_GPE.PH09) /* eject php slot 0x09 */ 42.543 + } 42.544 + 42.545 + Method (_STA, 0) 42.546 + { 42.547 + Store (0x09, \_GPE.DPT1) 42.548 + Store (0x89, \_GPE.DPT2) 42.549 + Return (\_GPE.PH09) /* IN status as the _STA */ 42.550 + } 42.551 + } 42.552 + 42.553 + Device(S0A) 42.554 + { 42.555 + Name (_ADR, 0x000a0000) /* Dev 10, Func 0 */ 42.556 + Name (_SUN, 0x0000000a) 42.557 + 42.558 + Method (_PS0, 0) 42.559 + { 42.560 + Store (0x0a, \_GPE.DPT1) 42.561 + Store (0x80, \_GPE.DPT2) 42.562 + } 42.563 + 42.564 + Method (_PS3, 0) 42.565 + { 42.566 + Store (0x0a, \_GPE.DPT1) 42.567 + Store (0x83, \_GPE.DPT2) 42.568 + } 42.569 + 42.570 + Method (_EJ0, 1) 42.571 + { 42.572 + Store (0x0a, \_GPE.DPT1) 42.573 + Store (0x88, \_GPE.DPT2) 42.574 + Store (0x1, \_GPE.PH0A) /* eject php slot 0x0a */ 42.575 + } 42.576 + 42.577 + Method (_STA, 0) 42.578 + { 42.579 + Store (0x0a, \_GPE.DPT1) 42.580 + Store (0x89, \_GPE.DPT2) 42.581 + Return (\_GPE.PH0A) /* IN status as the _STA */ 42.582 + } 42.583 + } 42.584 + 42.585 + Device(S0B) 42.586 + { 42.587 + Name (_ADR, 0x000b0000) /* Dev 11, Func 0 */ 42.588 + Name (_SUN, 0x0000000b) 42.589 + 42.590 + Method (_PS0, 0) 42.591 + { 42.592 + Store (0x0b, \_GPE.DPT1) 42.593 + Store (0x80, \_GPE.DPT2) 42.594 + } 42.595 + 42.596 + Method (_PS3, 0) 42.597 + { 42.598 + Store (0x0b, \_GPE.DPT1) 42.599 + Store (0x83, \_GPE.DPT2) 42.600 + } 42.601 + 42.602 + Method (_EJ0, 1) 42.603 + { 42.604 + Store (0x0b, \_GPE.DPT1) 42.605 + Store (0x88, \_GPE.DPT2) 42.606 + Store (0x1, \_GPE.PH0B) /* eject php slot 0x0b */ 42.607 + } 42.608 + 42.609 + Method (_STA, 0) 42.610 + { 42.611 + Store (0x0b, \_GPE.DPT1) 42.612 + Store (0x89, \_GPE.DPT2) 42.613 + Return (\_GPE.PH0B) /* IN status as the _STA */ 42.614 + } 42.615 + } 42.616 + 42.617 + Device(S0C) 42.618 + { 42.619 + Name (_ADR, 0x000c0000) /* Dev 12, Func 0 */ 42.620 + Name (_SUN, 0x0000000c) 42.621 + 42.622 + Method (_PS0, 0) 42.623 + { 42.624 + Store (0x0c, \_GPE.DPT1) 42.625 + Store (0x80, \_GPE.DPT2) 42.626 + } 42.627 + 42.628 + Method (_PS3, 0) 42.629 + { 42.630 + Store (0x0c, \_GPE.DPT1) 42.631 + Store (0x83, \_GPE.DPT2) 42.632 + } 42.633 + 42.634 + Method (_EJ0, 1) 42.635 + { 42.636 + Store (0x0c, \_GPE.DPT1) 42.637 + Store (0x88, \_GPE.DPT2) 42.638 + Store (0x1, \_GPE.PH0C) /* eject php slot 0x0c */ 42.639 + } 42.640 + 42.641 + Method (_STA, 0) 42.642 + { 42.643 + Store (0x0c, \_GPE.DPT1) 42.644 + Store (0x89, \_GPE.DPT2) 42.645 + Return (\_GPE.PH0C) /* IN status as the _STA */ 42.646 + } 42.647 + } 42.648 + 42.649 + Device(S0D) 42.650 + { 42.651 + Name (_ADR, 0x000d0000) /* Dev 13, Func 0 */ 42.652 + Name (_SUN, 0x0000000d) 42.653 + 42.654 + Method (_PS0, 0) 42.655 + { 42.656 + Store (0x0d, \_GPE.DPT1) 42.657 + Store (0x80, \_GPE.DPT2) 42.658 + } 42.659 + 42.660 + Method (_PS3, 0) 42.661 + { 42.662 + Store (0x0d, \_GPE.DPT1) 42.663 + Store (0x83, \_GPE.DPT2) 42.664 + } 42.665 + 42.666 + Method (_EJ0, 1) 42.667 + { 42.668 + Store (0x0d, \_GPE.DPT1) 42.669 + Store (0x88, \_GPE.DPT2) 42.670 + Store (0x1, \_GPE.PH0D) /* eject php slot 0x0d */ 42.671 + } 42.672 + 42.673 + Method (_STA, 0) 42.674 + { 42.675 + Store (0x0d, \_GPE.DPT1) 42.676 + Store (0x89, \_GPE.DPT2) 42.677 + Return (\_GPE.PH0D) /* IN status as the _STA */ 42.678 + } 42.679 + } 42.680 + 42.681 + Device(S0E) 42.682 + { 42.683 + Name (_ADR, 0x000e0000) /* Dev 14, Func 0 */ 42.684 + Name (_SUN, 0x0000000e) 42.685 + 42.686 + Method (_PS0, 0) 42.687 + { 42.688 + Store (0x0e, \_GPE.DPT1) 42.689 + Store (0x80, \_GPE.DPT2) 42.690 + } 42.691 + 42.692 + Method (_PS3, 0) 42.693 + { 42.694 + Store (0x0e, \_GPE.DPT1) 42.695 + Store (0x83, \_GPE.DPT2) 42.696 + } 42.697 + 42.698 + Method (_EJ0, 1) 42.699 + { 42.700 + Store (0x0e, \_GPE.DPT1) 42.701 + Store (0x88, \_GPE.DPT2) 42.702 + Store (0x1, \_GPE.PH0E) /* eject php slot 0x0e */ 42.703 + } 42.704 + 42.705 + Method (_STA, 0) 42.706 + { 42.707 + Store (0x0e, \_GPE.DPT1) 42.708 + Store (0x89, \_GPE.DPT2) 42.709 + Return (\_GPE.PH0E) /* IN status as the _STA */ 42.710 + } 42.711 + } 42.712 + 42.713 + Device(S0F) 42.714 + { 42.715 + Name (_ADR, 0x000f0000) /* Dev 15, Func 0 */ 42.716 + Name (_SUN, 0x0000000f) 42.717 + 42.718 + Method (_PS0, 0) 42.719 + { 42.720 + Store (0x0f, \_GPE.DPT1) 42.721 + Store (0x80, \_GPE.DPT2) 42.722 + } 42.723 + 42.724 + Method (_PS3, 0) 42.725 + { 42.726 + Store (0x0f, \_GPE.DPT1) 42.727 Store (0x83, \_GPE.DPT2) 42.728 } 42.729 42.730 Method (_EJ0, 1) 42.731 { 42.732 + Store (0x0f, \_GPE.DPT1) 42.733 Store (0x88, \_GPE.DPT2) 42.734 - Store (0x1, \_GPE.PHP1) /* eject php slot 1*/ 42.735 + Store (0x1, \_GPE.PH0F) /* eject php slot 0x0f */ 42.736 + } 42.737 + 42.738 + Method (_STA, 0) 42.739 + { 42.740 + Store (0x0f, \_GPE.DPT1) 42.741 + Store (0x89, \_GPE.DPT2) 42.742 + Return (\_GPE.PH0F) /* IN status as the _STA */ 42.743 + } 42.744 + } 42.745 + 42.746 + Device(S10) 42.747 + { 42.748 + Name (_ADR, 0x00100000) /* Dev 16, Func 0 */ 42.749 + Name (_SUN, 0x00000010) 42.750 + 42.751 + Method (_PS0, 0) 42.752 + { 42.753 + Store (0x10, \_GPE.DPT1) 42.754 + Store (0x80, \_GPE.DPT2) 42.755 + } 42.756 + 42.757 + Method (_PS3, 0) 42.758 + { 42.759 + Store (0x10, \_GPE.DPT1) 42.760 + Store (0x83, \_GPE.DPT2) 42.761 + } 42.762 + 42.763 + Method (_EJ0, 1) 42.764 + { 42.765 + Store (0x10, \_GPE.DPT1) 42.766 + Store (0x88, \_GPE.DPT2) 42.767 + Store (0x1, \_GPE.PH10) /* eject php slot 0x10 */ 42.768 + } 42.769 + 42.770 + Method (_STA, 0) 42.771 + { 42.772 + Store (0x10, \_GPE.DPT1) 42.773 + Store (0x89, \_GPE.DPT2) 42.774 + Return (\_GPE.PH10) /* IN status as the _STA */ 42.775 + } 42.776 + } 42.777 + 42.778 + Device(S11) 42.779 + { 42.780 + Name (_ADR, 0x00110000) /* Dev 17, Func 0 */ 42.781 + Name (_SUN, 0x00000011) 42.782 + 42.783 + Method (_PS0, 0) 42.784 + { 42.785 + Store (0x11, \_GPE.DPT1) 42.786 + Store (0x80, \_GPE.DPT2) 42.787 + } 42.788 + 42.789 + Method (_PS3, 0) 42.790 + { 42.791 + Store (0x11, \_GPE.DPT1) 42.792 + Store (0x83, \_GPE.DPT2) 42.793 + } 42.794 + 42.795 + Method (_EJ0, 1) 42.796 + { 42.797 + Store (0x11, \_GPE.DPT1) 42.798 + Store (0x88, \_GPE.DPT2) 42.799 + Store (0x1, \_GPE.PH11) /* eject php slot 0x11 */ 42.800 + } 42.801 + 42.802 + Method (_STA, 0) 42.803 + { 42.804 + Store (0x11, \_GPE.DPT1) 42.805 + Store (0x89, \_GPE.DPT2) 42.806 + Return (\_GPE.PH11) /* IN status as the _STA */ 42.807 + } 42.808 + } 42.809 + 42.810 + Device(S12) 42.811 + { 42.812 + Name (_ADR, 0x00120000) /* Dev 18, Func 0 */ 42.813 + Name (_SUN, 0x00000012) 42.814 + 42.815 + Method (_PS0, 0) 42.816 + { 42.817 + Store (0x12, \_GPE.DPT1) 42.818 + Store (0x80, \_GPE.DPT2) 42.819 + } 42.820 + 42.821 + Method (_PS3, 0) 42.822 + { 42.823 + Store (0x12, \_GPE.DPT1) 42.824 + Store (0x83, \_GPE.DPT2) 42.825 + } 42.826 + 42.827 + Method (_EJ0, 1) 42.828 + { 42.829 + Store (0x12, \_GPE.DPT1) 42.830 + Store (0x88, \_GPE.DPT2) 42.831 + Store (0x1, \_GPE.PH12) /* eject php slot 0x12 */ 42.832 + } 42.833 + 42.834 + Method (_STA, 0) 42.835 + { 42.836 + Store (0x12, \_GPE.DPT1) 42.837 + Store (0x89, \_GPE.DPT2) 42.838 + Return (\_GPE.PH12) /* IN status as the _STA */ 42.839 + } 42.840 + } 42.841 + 42.842 + Device(S13) 42.843 + { 42.844 + Name (_ADR, 0x00130000) /* Dev 19, Func 0 */ 42.845 + Name (_SUN, 0x00000013) 42.846 + 42.847 + Method (_PS0, 0) 42.848 + { 42.849 + Store (0x13, \_GPE.DPT1) 42.850 + Store (0x80, \_GPE.DPT2) 42.851 + } 42.852 + 42.853 + Method (_PS3, 0) 42.854 + { 42.855 + Store (0x13, \_GPE.DPT1) 42.856 + Store (0x83, \_GPE.DPT2) 42.857 + } 42.858 + 42.859 + Method (_EJ0, 1) 42.860 + { 42.861 + Store (0x13, \_GPE.DPT1) 42.862 + Store (0x88, \_GPE.DPT2) 42.863 + Store (0x1, \_GPE.PH13) /* eject php slot 0x13 */ 42.864 + } 42.865 + 42.866 + Method (_STA, 0) 42.867 + { 42.868 + Store (0x13, \_GPE.DPT1) 42.869 + Store (0x89, \_GPE.DPT2) 42.870 + Return (\_GPE.PH13) /* IN status as the _STA */ 42.871 + } 42.872 + } 42.873 + 42.874 + Device(S14) 42.875 + { 42.876 + Name (_ADR, 0x00140000) /* Dev 20, Func 0 */ 42.877 + Name (_SUN, 0x00000014) 42.878 + 42.879 + Method (_PS0, 0) 42.880 + { 42.881 + Store (0x14, \_GPE.DPT1) 42.882 + Store (0x80, \_GPE.DPT2) 42.883 + } 42.884 + 42.885 + Method (_PS3, 0) 42.886 + { 42.887 + Store (0x14, \_GPE.DPT1) 42.888 + Store (0x83, \_GPE.DPT2) 42.889 + } 42.890 + 42.891 + Method (_EJ0, 1) 42.892 + { 42.893 + Store (0x14, \_GPE.DPT1) 42.894 + Store (0x88, \_GPE.DPT2) 42.895 + Store (0x1, \_GPE.PH14) /* eject php slot 0x14 */ 42.896 + } 42.897 + 42.898 + Method (_STA, 0) 42.899 + { 42.900 + Store (0x14, \_GPE.DPT1) 42.901 + Store (0x89, \_GPE.DPT2) 42.902 + Return (\_GPE.PH14) /* IN status as the _STA */ 42.903 + } 42.904 + } 42.905 + 42.906 + Device(S15) 42.907 + { 42.908 + Name (_ADR, 0x00150000) /* Dev 21, Func 0 */ 42.909 + Name (_SUN, 0x00000015) 42.910 + 42.911 + Method (_PS0, 0) 42.912 + { 42.913 + Store (0x15, \_GPE.DPT1) 42.914 + Store (0x80, \_GPE.DPT2) 42.915 + } 42.916 + 42.917 + Method (_PS3, 0) 42.918 + { 42.919 + Store (0x15, \_GPE.DPT1) 42.920 + Store (0x83, \_GPE.DPT2) 42.921 + } 42.922 + 42.923 + Method (_EJ0, 1) 42.924 + { 42.925 + Store (0x15, \_GPE.DPT1) 42.926 + Store (0x88, \_GPE.DPT2) 42.927 + Store (0x1, \_GPE.PH15) /* eject php slot 0x15 */ 42.928 + } 42.929 + 42.930 + Method (_STA, 0) 42.931 + { 42.932 + Store (0x15, \_GPE.DPT1) 42.933 + Store (0x89, \_GPE.DPT2) 42.934 + Return (\_GPE.PH15) /* IN status as the _STA */ 42.935 + } 42.936 + } 42.937 + 42.938 + Device(S16) 42.939 + { 42.940 + Name (_ADR, 0x00160000) /* Dev 22, Func 0 */ 42.941 + Name (_SUN, 0x00000016) 42.942 + 42.943 + Method (_PS0, 0) 42.944 + { 42.945 + Store (0x16, \_GPE.DPT1) 42.946 + Store (0x80, \_GPE.DPT2) 42.947 + } 42.948 + 42.949 + Method (_PS3, 0) 42.950 + { 42.951 + Store (0x16, \_GPE.DPT1) 42.952 + Store (0x83, \_GPE.DPT2) 42.953 + } 42.954 + 42.955 + Method (_EJ0, 1) 42.956 + { 42.957 + Store (0x16, \_GPE.DPT1) 42.958 + Store (0x88, \_GPE.DPT2) 42.959 + Store (0x1, \_GPE.PH16) /* eject php slot 0x16 */ 42.960 } 42.961 42.962 Method (_STA, 0) 42.963 { 42.964 + Store (0x16, \_GPE.DPT1) 42.965 Store (0x89, \_GPE.DPT2) 42.966 - Return ( \_GPE.PHP1 ) /* IN status as the _STA */ 42.967 + Return (\_GPE.PH16) /* IN status as the _STA */ 42.968 + } 42.969 + } 42.970 + 42.971 + Device(S17) 42.972 + { 42.973 + Name (_ADR, 0x00170000) /* Dev 23, Func 0 */ 42.974 + Name (_SUN, 0x00000017) 42.975 + 42.976 + Method (_PS0, 0) 42.977 + { 42.978 + Store (0x17, \_GPE.DPT1) 42.979 + Store (0x80, \_GPE.DPT2) 42.980 + } 42.981 + 42.982 + Method (_PS3, 0) 42.983 + { 42.984 + Store (0x17, \_GPE.DPT1) 42.985 + Store (0x83, \_GPE.DPT2) 42.986 + } 42.987 + 42.988 + Method (_EJ0, 1) 42.989 + { 42.990 + Store (0x17, \_GPE.DPT1) 42.991 + Store (0x88, \_GPE.DPT2) 42.992 + Store (0x1, \_GPE.PH17) /* eject php slot 0x17 */ 42.993 + } 42.994 + 42.995 + Method (_STA, 0) 42.996 + { 42.997 + Store (0x17, \_GPE.DPT1) 42.998 + Store (0x89, \_GPE.DPT2) 42.999 + Return (\_GPE.PH17) /* IN status as the _STA */ 42.1000 } 42.1001 } 42.1002 42.1003 - Device (S2F0) 42.1004 + Device(S18) 42.1005 { 42.1006 - Name (_ADR, 0x00070000) /* Dev 7, Func 0 */ 42.1007 - Name (_SUN, 0x00000002) 42.1008 + Name (_ADR, 0x00180000) /* Dev 24, Func 0 */ 42.1009 + Name (_SUN, 0x00000018) 42.1010 42.1011 Method (_PS0, 0) 42.1012 { 42.1013 - Store (0x90, \_GPE.DPT2) 42.1014 + Store (0x18, \_GPE.DPT1) 42.1015 + Store (0x80, \_GPE.DPT2) 42.1016 + } 42.1017 + 42.1018 + Method (_PS3, 0) 42.1019 + { 42.1020 + Store (0x18, \_GPE.DPT1) 42.1021 + Store (0x83, \_GPE.DPT2) 42.1022 + } 42.1023 + 42.1024 + Method (_EJ0, 1) 42.1025 + { 42.1026 + Store (0x18, \_GPE.DPT1) 42.1027 + Store (0x88, \_GPE.DPT2) 42.1028 + Store (0x1, \_GPE.PH18) /* eject php slot 0x18 */ 42.1029 + } 42.1030 + 42.1031 + Method (_STA, 0) 42.1032 + { 42.1033 + Store (0x18, \_GPE.DPT1) 42.1034 + Store (0x89, \_GPE.DPT2) 42.1035 + Return (\_GPE.PH18) /* IN status as the _STA */ 42.1036 + } 42.1037 + } 42.1038 + 42.1039 + Device(S19) 42.1040 + { 42.1041 + Name (_ADR, 0x00190000) /* Dev 25, Func 0 */ 42.1042 + Name (_SUN, 0x00000019) 42.1043 + 42.1044 + Method (_PS0, 0) 42.1045 + { 42.1046 + Store (0x19, \_GPE.DPT1) 42.1047 + Store (0x80, \_GPE.DPT2) 42.1048 + } 42.1049 + 42.1050 + Method (_PS3, 0) 42.1051 + { 42.1052 + Store (0x19, \_GPE.DPT1) 42.1053 + Store (0x83, \_GPE.DPT2) 42.1054 + } 42.1055 + 42.1056 + Method (_EJ0, 1) 42.1057 + { 42.1058 + Store (0x19, \_GPE.DPT1) 42.1059 + Store (0x88, \_GPE.DPT2) 42.1060 + Store (0x1, \_GPE.PH19) /* eject php slot 0x19 */ 42.1061 + } 42.1062 + 42.1063 + Method (_STA, 0) 42.1064 + { 42.1065 + Store (0x19, \_GPE.DPT1) 42.1066 + Store (0x89, \_GPE.DPT2) 42.1067 + Return (\_GPE.PH19) /* IN status as the _STA */ 42.1068 + } 42.1069 + } 42.1070 + 42.1071 + Device(S1A) 42.1072 + { 42.1073 + Name (_ADR, 0x001a0000) /* Dev 26, Func 0 */ 42.1074 + Name (_SUN, 0x0000001a) 42.1075 + 42.1076 + Method (_PS0, 0) 42.1077 + { 42.1078 + Store (0x1a, \_GPE.DPT1) 42.1079 + Store (0x80, \_GPE.DPT2) 42.1080 } 42.1081 42.1082 Method (_PS3, 0) 42.1083 { 42.1084 - Store (0x93, \_GPE.DPT2) 42.1085 + Store (0x1a, \_GPE.DPT1) 42.1086 + Store (0x83, \_GPE.DPT2) 42.1087 + } 42.1088 + 42.1089 + Method (_EJ0, 1) 42.1090 + { 42.1091 + Store (0x1a, \_GPE.DPT1) 42.1092 + Store (0x88, \_GPE.DPT2) 42.1093 + Store (0x1, \_GPE.PH1A) /* eject php slot 0x1a */ 42.1094 + } 42.1095 + 42.1096 + Method (_STA, 0) 42.1097 + { 42.1098 + Store (0x1a, \_GPE.DPT1) 42.1099 + Store (0x89, \_GPE.DPT2) 42.1100 + Return (\_GPE.PH1A) /* IN status as the _STA */ 42.1101 + } 42.1102 + } 42.1103 + 42.1104 + Device(S1B) 42.1105 + { 42.1106 + Name (_ADR, 0x001b0000) /* Dev 27, Func 0 */ 42.1107 + Name (_SUN, 0x0000001b) 42.1108 + 42.1109 + Method (_PS0, 0) 42.1110 + { 42.1111 + Store (0x1b, \_GPE.DPT1) 42.1112 + Store (0x80, \_GPE.DPT2) 42.1113 + } 42.1114 + 42.1115 + Method (_PS3, 0) 42.1116 + { 42.1117 + Store (0x1b, \_GPE.DPT1) 42.1118 + Store (0x83, \_GPE.DPT2) 42.1119 + } 42.1120 + 42.1121 + Method (_EJ0, 1) 42.1122 + { 42.1123 + Store (0x1b, \_GPE.DPT1) 42.1124 + Store (0x88, \_GPE.DPT2) 42.1125 + Store (0x1, \_GPE.PH1B) /* eject php slot 0x1b */ 42.1126 + } 42.1127 + 42.1128 + Method (_STA, 0) 42.1129 + { 42.1130 + Store (0x1b, \_GPE.DPT1) 42.1131 + Store (0x89, \_GPE.DPT2) 42.1132 + Return (\_GPE.PH1B) /* IN status as the _STA */ 42.1133 + } 42.1134 + } 42.1135 + 42.1136 + Device(S1C) 42.1137 + { 42.1138 + Name (_ADR, 0x001c0000) /* Dev 28, Func 0 */ 42.1139 + Name (_SUN, 0x0000001c) 42.1140 + 42.1141 + Method (_PS0, 0) 42.1142 + { 42.1143 + Store (0x1c, \_GPE.DPT1) 42.1144 + Store (0x80, \_GPE.DPT2) 42.1145 + } 42.1146 + 42.1147 + Method (_PS3, 0) 42.1148 + { 42.1149 + Store (0x1c, \_GPE.DPT1) 42.1150 + Store (0x83, \_GPE.DPT2) 42.1151 } 42.1152 42.1153 Method (_EJ0, 1) 42.1154 { 42.1155 - Store (0x98, \_GPE.DPT2) 42.1156 - Store (0x1, \_GPE.PHP2) /* eject php slot 1*/ 42.1157 + Store (0x1c, \_GPE.DPT1) 42.1158 + Store (0x88, \_GPE.DPT2) 42.1159 + Store (0x1, \_GPE.PH1C) /* eject php slot 0x1c */ 42.1160 + } 42.1161 + 42.1162 + Method (_STA, 0) 42.1163 + { 42.1164 + Store (0x1c, \_GPE.DPT1) 42.1165 + Store (0x89, \_GPE.DPT2) 42.1166 + Return (\_GPE.PH1C) /* IN status as the _STA */ 42.1167 + } 42.1168 + } 42.1169 + 42.1170 + Device(S1D) 42.1171 + { 42.1172 + Name (_ADR, 0x001d0000) /* Dev 29, Func 0 */ 42.1173 + Name (_SUN, 0x0000001d) 42.1174 + 42.1175 + Method (_PS0, 0) 42.1176 + { 42.1177 + Store (0x1d, \_GPE.DPT1) 42.1178 + Store (0x80, \_GPE.DPT2) 42.1179 + } 42.1180 + 42.1181 + Method (_PS3, 0) 42.1182 + { 42.1183 + Store (0x1d, \_GPE.DPT1) 42.1184 + Store (0x83, \_GPE.DPT2) 42.1185 + } 42.1186 + 42.1187 + Method (_EJ0, 1) 42.1188 + { 42.1189 + Store (0x1d, \_GPE.DPT1) 42.1190 + Store (0x88, \_GPE.DPT2) 42.1191 + Store (0x1, \_GPE.PH1D) /* eject php slot 0x1d */ 42.1192 } 42.1193 42.1194 Method (_STA, 0) 42.1195 { 42.1196 - Store (0x99, \_GPE.DPT2) 42.1197 - Return ( \_GPE.PHP2 ) /* IN status as the _STA */ 42.1198 + Store (0x1d, \_GPE.DPT1) 42.1199 + Store (0x89, \_GPE.DPT2) 42.1200 + Return (\_GPE.PH1D) /* IN status as the _STA */ 42.1201 + } 42.1202 + } 42.1203 + 42.1204 + Device(S1E) 42.1205 + { 42.1206 + Name (_ADR, 0x001e0000) /* Dev 30, Func 0 */ 42.1207 + Name (_SUN, 0x0000001e) 42.1208 + 42.1209 + Method (_PS0, 0) 42.1210 + { 42.1211 + Store (0x1e, \_GPE.DPT1) 42.1212 + Store (0x80, \_GPE.DPT2) 42.1213 + } 42.1214 + 42.1215 + Method (_PS3, 0) 42.1216 + { 42.1217 + Store (0x1e, \_GPE.DPT1) 42.1218 + Store (0x83, \_GPE.DPT2) 42.1219 + } 42.1220 + 42.1221 + Method (_EJ0, 1) 42.1222 + { 42.1223 + Store (0x1e, \_GPE.DPT1) 42.1224 + Store (0x88, \_GPE.DPT2) 42.1225 + Store (0x1, \_GPE.PH1E) /* eject php slot 0x1e */ 42.1226 + } 42.1227 + 42.1228 + Method (_STA, 0) 42.1229 + { 42.1230 + Store (0x1e, \_GPE.DPT1) 42.1231 + Store (0x89, \_GPE.DPT2) 42.1232 + Return (\_GPE.PH1E) /* IN status as the _STA */ 42.1233 + } 42.1234 + } 42.1235 + 42.1236 + Device(S1F) 42.1237 + { 42.1238 + Name (_ADR, 0x001f0000) /* Dev 31, Func 0 */ 42.1239 + Name (_SUN, 0x0000001f) 42.1240 + 42.1241 + Method (_PS0, 0) 42.1242 + { 42.1243 + Store (0x1f, \_GPE.DPT1) 42.1244 + Store (0x80, \_GPE.DPT2) 42.1245 + } 42.1246 + 42.1247 + Method (_PS3, 0) 42.1248 + { 42.1249 + Store (0x1f, \_GPE.DPT1) 42.1250 + Store (0x83, \_GPE.DPT2) 42.1251 + } 42.1252 + 42.1253 + Method (_EJ0, 1) 42.1254 + { 42.1255 + Store (0x1f, \_GPE.DPT1) 42.1256 + Store (0x88, \_GPE.DPT2) 42.1257 + Store (0x1, \_GPE.PH1F) /* eject php slot 0x1f */ 42.1258 + } 42.1259 + 42.1260 + Method (_STA, 0) 42.1261 + { 42.1262 + Store (0x1f, \_GPE.DPT1) 42.1263 + Store (0x89, \_GPE.DPT2) 42.1264 + Return (\_GPE.PH1F) /* IN status as the _STA */ 42.1265 } 42.1266 } 42.1267 } 42.1268 @@ -850,39 +2009,191 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, 42.1269 42.1270 Scope (\_GPE) 42.1271 { 42.1272 - OperationRegion (PHP, SystemIO, 0x10c0, 0x03) 42.1273 + OperationRegion (PHP, SystemIO, 0x10c0, 0x22) 42.1274 Field (PHP, ByteAcc, NoLock, Preserve) 42.1275 { 42.1276 - PSTA, 8, /* hotplug controller status reg */ 42.1277 - PHP1, 8, /* hotplug slot 1 control reg */ 42.1278 - PHP2, 8 /* hotplug slot 2 control reg */ 42.1279 - } 42.1280 + PSTA, 8, /* hotplug controller event reg */ 42.1281 + PSTB, 8, /* hotplug controller slot reg */ 42.1282 + PH00, 8, /* hotplug slot 0x00 control reg */ 42.1283 + PH01, 8, /* hotplug slot 0x01 control reg */ 42.1284 + PH02, 8, /* hotplug slot 0x02 control reg */ 42.1285 + PH03, 8, /* hotplug slot 0x03 control reg */ 42.1286 + PH04, 8, /* hotplug slot 0x04 control reg */ 42.1287 + PH05, 8, /* hotplug slot 0x05 control reg */ 42.1288 + PH06, 8, /* hotplug slot 0x06 control reg */ 42.1289 + PH07, 8, /* hotplug slot 0x07 control reg */ 42.1290 + PH08, 8, /* hotplug slot 0x08 control reg */ 42.1291 + PH09, 8, /* hotplug slot 0x09 control reg */ 42.1292 + PH0A, 8, /* hotplug slot 0x0a control reg */ 42.1293 + PH0B, 8, /* hotplug slot 0x0b control reg */ 42.1294 + PH0C, 8, /* hotplug slot 0x0c control reg */ 42.1295 + PH0D, 8, /* hotplug slot 0x0d control reg */ 42.1296 + PH0E, 8, /* hotplug slot 0x0e control reg */ 42.1297 + PH0F, 8, /* hotplug slot 0x0f control reg */ 42.1298 + PH10, 8, /* hotplug slot 0x10 control reg */ 42.1299 + PH11, 8, /* hotplug slot 0x11 control reg */ 42.1300 + PH12, 8, /* hotplug slot 0x12 control reg */ 42.1301 + PH13, 8, /* hotplug slot 0x13 control reg */ 42.1302 + PH14, 8, /* hotplug slot 0x14 control reg */ 42.1303 + PH15, 8, /* hotplug slot 0x15 control reg */ 42.1304 + PH16, 8, /* hotplug slot 0x16 control reg */ 42.1305 + PH17, 8, /* hotplug slot 0x17 control reg */ 42.1306 + PH18, 8, /* hotplug slot 0x18 control reg */ 42.1307 + PH19, 8, /* hotplug slot 0x19 control reg */ 42.1308 + PH1A, 8, /* hotplug slot 0x1a control reg */ 42.1309 + PH1B, 8, /* hotplug slot 0x1b control reg */ 42.1310 + PH1C, 8, /* hotplug slot 0x1c control reg */ 42.1311 + PH1D, 8, /* hotplug slot 0x1d control reg */ 42.1312 + PH1E, 8, /* hotplug slot 0x1e control reg */ 42.1313 + PH1F, 8 /* hotplug slot 0x1f control reg */ 42.1314 + } 42.1315 OperationRegion (DG1, SystemIO, 0xb044, 0x04) 42.1316 Field (DG1, ByteAcc, NoLock, Preserve) 42.1317 { 42.1318 DPT1, 8, 42.1319 DPT2, 8 42.1320 } 42.1321 - Method (_L03, 0, NotSerialized) 42.1322 + Method (_L03, 0, Serialized) 42.1323 { 42.1324 /* detect slot and event(remove/add) */ 42.1325 Name (SLT, 0x0) 42.1326 Name (EVT, 0x0) 42.1327 Store (PSTA, Local1) 42.1328 - ShiftRight (Local1, 0x4, SLT) 42.1329 And (Local1, 0xf, EVT) 42.1330 + Store (PSTB, Local1) /* XXX: Store (PSTB, SLT) ? */ 42.1331 + And (Local1, 0xff, SLT) 42.1332 42.1333 /* debug */ 42.1334 Store (SLT, DPT1) 42.1335 Store (EVT, DPT2) 42.1336 42.1337 - If ( LEqual(SLT, 0x1) ) 42.1338 + If ( LEqual(SLT, 0x00) ) 42.1339 + { 42.1340 + Notify (\_SB.PCI0.S00, EVT) 42.1341 + } 42.1342 + ElseIf ( LEqual(SLT, 0x01) ) 42.1343 + { 42.1344 + Notify (\_SB.PCI0.S01, EVT) 42.1345 + } 42.1346 + ElseIf ( LEqual(SLT, 0x02) ) 42.1347 + { 42.1348 + Notify (\_SB.PCI0.S02, EVT) 42.1349 + } 42.1350 + ElseIf ( LEqual(SLT, 0x03) ) 42.1351 + { 42.1352 + Notify (\_SB.PCI0.S03, EVT) 42.1353 + } 42.1354 + ElseIf ( LEqual(SLT, 0x04) ) 42.1355 + { 42.1356 + Notify (\_SB.PCI0.S04, EVT) 42.1357 + } 42.1358 + ElseIf ( LEqual(SLT, 0x05) ) 42.1359 + { 42.1360 + Notify (\_SB.PCI0.S05, EVT) 42.1361 + } 42.1362 + ElseIf ( LEqual(SLT, 0x06) ) 42.1363 + { 42.1364 + Notify (\_SB.PCI0.S06, EVT) 42.1365 + } 42.1366 + ElseIf ( LEqual(SLT, 0x07) ) 42.1367 { 42.1368 - Notify (\_SB.PCI0.S1F0, EVT) 42.1369 + Notify (\_SB.PCI0.S07, EVT) 42.1370 + } 42.1371 + ElseIf ( LEqual(SLT, 0x08) ) 42.1372 + { 42.1373 + Notify (\_SB.PCI0.S08, EVT) 42.1374 + } 42.1375 + ElseIf ( LEqual(SLT, 0x09) ) 42.1376 + { 42.1377 + Notify (\_SB.PCI0.S09, EVT) 42.1378 + } 42.1379 + ElseIf ( LEqual(SLT, 0x0a) ) 42.1380 + { 42.1381 + Notify (\_SB.PCI0.S0A, EVT) 42.1382 + } 42.1383 + ElseIf ( LEqual(SLT, 0x0b) ) 42.1384 + { 42.1385 + Notify (\_SB.PCI0.S0B, EVT) 42.1386 + } 42.1387 + ElseIf ( LEqual(SLT, 0x0c) ) 42.1388 + { 42.1389 + Notify (\_SB.PCI0.S0C, EVT) 42.1390 + } 42.1391 + ElseIf ( LEqual(SLT, 0x0d) ) 42.1392 + { 42.1393 + Notify (\_SB.PCI0.S0D, EVT) 42.1394 + } 42.1395 + ElseIf ( LEqual(SLT, 0x0e) ) 42.1396 + { 42.1397 + Notify (\_SB.PCI0.S0E, EVT) 42.1398 + } 42.1399 + ElseIf ( LEqual(SLT, 0x0f) ) 42.1400 + { 42.1401 + Notify (\_SB.PCI0.S0F, EVT) 42.1402 } 42.1403 - ElseIf ( LEqual(SLT, 0x2) ) 42.1404 + ElseIf ( LEqual(SLT, 0x10) ) 42.1405 + { 42.1406 + Notify (\_SB.PCI0.S10, EVT) 42.1407 + } 42.1408 + ElseIf ( LEqual(SLT, 0x11) ) 42.1409 + { 42.1410 + Notify (\_SB.PCI0.S11, EVT) 42.1411 + } 42.1412 + ElseIf ( LEqual(SLT, 0x12) ) 42.1413 + { 42.1414 + Notify (\_SB.PCI0.S12, EVT) 42.1415 + } 42.1416 + ElseIf ( LEqual(SLT, 0x13) ) 42.1417 + { 42.1418 + Notify (\_SB.PCI0.S13, EVT) 42.1419 + } 42.1420 + ElseIf ( LEqual(SLT, 0x14) ) 42.1421 + { 42.1422 + Notify (\_SB.PCI0.S14, EVT) 42.1423 + } 42.1424 + ElseIf ( LEqual(SLT, 0x15) ) 42.1425 + { 42.1426 + Notify (\_SB.PCI0.S15, EVT) 42.1427 + } 42.1428 + ElseIf ( LEqual(SLT, 0x16) ) 42.1429 + { 42.1430 + Notify (\_SB.PCI0.S16, EVT) 42.1431 + } 42.1432 + ElseIf ( LEqual(SLT, 0x17) ) 42.1433 { 42.1434 - Notify (\_SB.PCI0.S2F0, EVT) 42.1435 + Notify (\_SB.PCI0.S17, EVT) 42.1436 + } 42.1437 + ElseIf ( LEqual(SLT, 0x18) ) 42.1438 + { 42.1439 + Notify (\_SB.PCI0.S18, EVT) 42.1440 + } 42.1441 + ElseIf ( LEqual(SLT, 0x19) ) 42.1442 + { 42.1443 + Notify (\_SB.PCI0.S19, EVT) 42.1444 + } 42.1445 + ElseIf ( LEqual(SLT, 0x1a) ) 42.1446 + { 42.1447 + Notify (\_SB.PCI0.S1A, EVT) 42.1448 + } 42.1449 + ElseIf ( LEqual(SLT, 0x1b) ) 42.1450 + { 42.1451 + Notify (\_SB.PCI0.S1B, EVT) 42.1452 + } 42.1453 + ElseIf ( LEqual(SLT, 0x1c) ) 42.1454 + { 42.1455 + Notify (\_SB.PCI0.S1C, EVT) 42.1456 + } 42.1457 + ElseIf ( LEqual(SLT, 0x1d) ) 42.1458 + { 42.1459 + Notify (\_SB.PCI0.S1D, EVT) 42.1460 + } 42.1461 + ElseIf ( LEqual(SLT, 0x1e) ) 42.1462 + { 42.1463 + Notify (\_SB.PCI0.S1E, EVT) 42.1464 + } 42.1465 + ElseIf ( LEqual(SLT, 0x1f) ) 42.1466 + { 42.1467 + Notify (\_SB.PCI0.S1F, EVT) 42.1468 } 42.1469 } 42.1470 }
43.1 --- a/tools/firmware/hvmloader/acpi/dsdt.c Mon Mar 30 19:56:30 2009 -0700 43.2 +++ b/tools/firmware/hvmloader/acpi/dsdt.c Thu Apr 23 18:49:41 2009 -0700 43.3 @@ -5,15 +5,15 @@ 43.4 * Copyright (C) 2000 - 2008 Intel Corporation 43.5 * Supports ACPI Specification Revision 3.0a 43.6 * 43.7 - * Compilation of "dsdt.asl" - Fri Jan 23 14:30:29 2009 43.8 + * Compilation of "dsdt.asl" - Tue Mar 31 13:24:51 2009 43.9 * 43.10 * C source code output 43.11 * 43.12 */ 43.13 unsigned char AmlCode[] = 43.14 { 43.15 - 0x44,0x53,0x44,0x54,0x5E,0x11,0x00,0x00, /* 00000000 "DSDT^..." */ 43.16 - 0x02,0xEB,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */ 43.17 + 0x44,0x53,0x44,0x54,0xF3,0x31,0x00,0x00, /* 00000000 "DSDT.1.." */ 43.18 + 0x02,0x12,0x58,0x65,0x6E,0x00,0x00,0x00, /* 00000008 "..Xen..." */ 43.19 0x48,0x56,0x4D,0x00,0x00,0x00,0x00,0x00, /* 00000010 "HVM....." */ 43.20 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ 43.21 0x04,0x12,0x08,0x20,0x08,0x50,0x4D,0x42, /* 00000020 "... .PMB" */ 43.22 @@ -56,517 +56,1560 @@ unsigned char AmlCode[] = 43.23 0x07,0x0A,0x07,0x00,0x00,0x08,0x50,0x49, /* 00000148 "......PI" */ 43.24 0x43,0x44,0x00,0x14,0x0C,0x5F,0x50,0x49, /* 00000150 "CD..._PI" */ 43.25 0x43,0x01,0x70,0x68,0x50,0x49,0x43,0x44, /* 00000158 "C.phPICD" */ 43.26 - 0x10,0x4E,0xF3,0x5F,0x53,0x42,0x5F,0x5B, /* 00000160 ".N._SB_[" */ 43.27 - 0x80,0x42,0x49,0x4F,0x53,0x00,0x0C,0x00, /* 00000168 ".BIOS..." */ 43.28 - 0xA0,0x0E,0x00,0x0A,0x10,0x5B,0x81,0x21, /* 00000170 ".....[.!" */ 43.29 - 0x42,0x49,0x4F,0x53,0x01,0x55,0x41,0x52, /* 00000178 "BIOS.UAR" */ 43.30 - 0x31,0x01,0x55,0x41,0x52,0x32,0x01,0x48, /* 00000180 "1.UAR2.H" */ 43.31 - 0x50,0x45,0x54,0x01,0x00,0x1D,0x50,0x4D, /* 00000188 "PET...PM" */ 43.32 - 0x49,0x4E,0x20,0x50,0x4C,0x45,0x4E,0x20, /* 00000190 "IN PLEN " */ 43.33 - 0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D,0x30, /* 00000198 "[.I.MEM0" */ 43.34 - 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 000001A0 "._HID.A." */ 43.35 - 0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,0x11, /* 000001A8 "..._CRS." */ 43.36 - 0x33,0x0A,0x30,0x8A,0x2B,0x00,0x00,0x0D, /* 000001B0 "3.0.+..." */ 43.37 - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B8 "........" */ 43.38 + 0x10,0x83,0xB7,0x02,0x5F,0x53,0x42,0x5F, /* 00000160 "...._SB_" */ 43.39 + 0x5B,0x80,0x42,0x49,0x4F,0x53,0x00,0x0C, /* 00000168 "[.BIOS.." */ 43.40 + 0x00,0xA0,0x0E,0x00,0x0A,0x10,0x5B,0x81, /* 00000170 "......[." */ 43.41 + 0x21,0x42,0x49,0x4F,0x53,0x01,0x55,0x41, /* 00000178 "!BIOS.UA" */ 43.42 + 0x52,0x31,0x01,0x55,0x41,0x52,0x32,0x01, /* 00000180 "R1.UAR2." */ 43.43 + 0x48,0x50,0x45,0x54,0x01,0x00,0x1D,0x50, /* 00000188 "HPET...P" */ 43.44 + 0x4D,0x49,0x4E,0x20,0x50,0x4C,0x45,0x4E, /* 00000190 "MIN PLEN" */ 43.45 + 0x20,0x5B,0x82,0x49,0x04,0x4D,0x45,0x4D, /* 00000198 " [.I.MEM" */ 43.46 + 0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 000001A0 "0._HID.A" */ 43.47 + 0xD0,0x0C,0x02,0x08,0x5F,0x43,0x52,0x53, /* 000001A8 "...._CRS" */ 43.48 + 0x11,0x33,0x0A,0x30,0x8A,0x2B,0x00,0x00, /* 000001B0 ".3.0.+.." */ 43.49 + 0x0D,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B8 "........" */ 43.50 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C0 "........" */ 43.51 - 0x00,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ 43.52 + 0x00,0x00,0xFF,0xFF,0x09,0x00,0x00,0x00, /* 000001C8 "........" */ 43.53 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D0 "........" */ 43.54 - 0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00, /* 000001D8 "........" */ 43.55 - 0x00,0x79,0x00,0x5B,0x82,0x4A,0xEB,0x50, /* 000001E0 ".y.[.J.P" */ 43.56 - 0x43,0x49,0x30,0x08,0x5F,0x48,0x49,0x44, /* 000001E8 "CI0._HID" */ 43.57 - 0x0C,0x41,0xD0,0x0A,0x03,0x08,0x5F,0x55, /* 000001F0 ".A...._U" */ 43.58 - 0x49,0x44,0x00,0x08,0x5F,0x41,0x44,0x52, /* 000001F8 "ID.._ADR" */ 43.59 - 0x00,0x08,0x5F,0x42,0x42,0x4E,0x00,0x5B, /* 00000200 ".._BBN.[" */ 43.60 - 0x82,0x2A,0x48,0x50,0x30,0x5F,0x08,0x5F, /* 00000208 ".*HP0_._" */ 43.61 - 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x02, /* 00000210 "HID.A..." */ 43.62 - 0x08,0x5F,0x43,0x52,0x53,0x11,0x15,0x0A, /* 00000218 "._CRS..." */ 43.63 - 0x12,0x47,0x01,0xC0,0x10,0xC0,0x10,0x00, /* 00000220 ".G......" */ 43.64 - 0x03,0x47,0x01,0x44,0xB0,0x44,0xB0,0x00, /* 00000228 ".G.D.D.." */ 43.65 - 0x04,0x79,0x00,0x14,0x4E,0x0C,0x5F,0x43, /* 00000230 ".y..N._C" */ 43.66 - 0x52,0x53,0x00,0x08,0x50,0x52,0x54,0x30, /* 00000238 "RS..PRT0" */ 43.67 - 0x11,0x42,0x07,0x0A,0x6E,0x88,0x0D,0x00, /* 00000240 ".B..n..." */ 43.68 - 0x02,0x0E,0x00,0x00,0x00,0x00,0x00,0xFF, /* 00000248 "........" */ 43.69 - 0x00,0x00,0x00,0x00,0x01,0x47,0x01,0xF8, /* 00000250 ".....G.." */ 43.70 - 0x0C,0xF8,0x0C,0x01,0x08,0x88,0x0D,0x00, /* 00000258 "........" */ 43.71 - 0x01,0x0C,0x03,0x00,0x00,0x00,0x00,0xF7, /* 00000260 "........" */ 43.72 - 0x0C,0x00,0x00,0xF8,0x0C,0x88,0x0D,0x00, /* 00000268 "........" */ 43.73 - 0x01,0x0C,0x03,0x00,0x00,0x00,0x0D,0xFF, /* 00000270 "........" */ 43.74 - 0xFF,0x00,0x00,0x00,0xF3,0x87,0x17,0x00, /* 00000278 "........" */ 43.75 - 0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00, /* 00000280 "........" */ 43.76 - 0x00,0x0A,0x00,0xFF,0xFF,0x0B,0x00,0x00, /* 00000288 "........" */ 43.77 - 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x87, /* 00000290 "........" */ 43.78 - 0x17,0x00,0x00,0x0C,0x03,0x00,0x00,0x00, /* 00000298 "........" */ 43.79 - 0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF, /* 000002A0 "........" */ 43.80 - 0xF4,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000002A8 "........" */ 43.81 - 0x05,0x79,0x00,0x8A,0x50,0x52,0x54,0x30, /* 000002B0 ".y..PRT0" */ 43.82 - 0x0A,0x5C,0x4D,0x4D,0x49,0x4E,0x8A,0x50, /* 000002B8 ".\MMIN.P" */ 43.83 - 0x52,0x54,0x30,0x0A,0x60,0x4D,0x4D,0x41, /* 000002C0 "RT0.`MMA" */ 43.84 - 0x58,0x8A,0x50,0x52,0x54,0x30,0x0A,0x68, /* 000002C8 "X.PRT0.h" */ 43.85 - 0x4D,0x4C,0x45,0x4E,0x70,0x50,0x4D,0x49, /* 000002D0 "MLENpPMI" */ 43.86 - 0x4E,0x4D,0x4D,0x49,0x4E,0x70,0x50,0x4C, /* 000002D8 "NMMINpPL" */ 43.87 - 0x45,0x4E,0x4D,0x4C,0x45,0x4E,0x72,0x4D, /* 000002E0 "ENMLENrM" */ 43.88 - 0x4D,0x49,0x4E,0x4D,0x4C,0x45,0x4E,0x4D, /* 000002E8 "MINMLENM" */ 43.89 - 0x4D,0x41,0x58,0x74,0x4D,0x4D,0x41,0x58, /* 000002F0 "MAXtMMAX" */ 43.90 - 0x01,0x4D,0x4D,0x41,0x58,0xA4,0x50,0x52, /* 000002F8 ".MMAX.PR" */ 43.91 - 0x54,0x30,0x08,0x42,0x55,0x46,0x41,0x11, /* 00000300 "T0.BUFA." */ 43.92 - 0x09,0x0A,0x06,0x23,0x20,0x0C,0x18,0x79, /* 00000308 "...# ..y" */ 43.93 - 0x00,0x08,0x42,0x55,0x46,0x42,0x11,0x09, /* 00000310 "..BUFB.." */ 43.94 - 0x0A,0x06,0x23,0x00,0x00,0x18,0x79,0x00, /* 00000318 "..#...y." */ 43.95 - 0x8B,0x42,0x55,0x46,0x42,0x01,0x49,0x52, /* 00000320 ".BUFB.IR" */ 43.96 - 0x51,0x56,0x5B,0x82,0x48,0x08,0x4C,0x4E, /* 00000328 "QV[.H.LN" */ 43.97 - 0x4B,0x41,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000330 "KA._HID." */ 43.98 - 0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49, /* 00000338 "A...._UI" */ 43.99 - 0x44,0x01,0x14,0x1C,0x5F,0x53,0x54,0x41, /* 00000340 "D..._STA" */ 43.100 - 0x00,0x7B,0x50,0x49,0x52,0x41,0x0A,0x80, /* 00000348 ".{PIRA.." */ 43.101 - 0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4, /* 00000350 "`...`..." */ 43.102 - 0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14, /* 00000358 "........" */ 43.103 - 0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,0x42, /* 00000360 "._PRS..B" */ 43.104 - 0x55,0x46,0x41,0x14,0x11,0x5F,0x44,0x49, /* 00000368 "UFA.._DI" */ 43.105 - 0x53,0x00,0x7D,0x50,0x49,0x52,0x41,0x0A, /* 00000370 "S.}PIRA." */ 43.106 - 0x80,0x50,0x49,0x52,0x41,0x14,0x1A,0x5F, /* 00000378 ".PIRA.._" */ 43.107 - 0x43,0x52,0x53,0x00,0x7B,0x50,0x49,0x52, /* 00000380 "CRS.{PIR" */ 43.108 - 0x41,0x0A,0x0F,0x60,0x79,0x01,0x60,0x49, /* 00000388 "A..`y.`I" */ 43.109 - 0x52,0x51,0x56,0xA4,0x42,0x55,0x46,0x42, /* 00000390 "RQV.BUFB" */ 43.110 - 0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B, /* 00000398 ".._SRS.." */ 43.111 - 0x68,0x01,0x49,0x52,0x51,0x31,0x82,0x49, /* 000003A0 "h.IRQ1.I" */ 43.112 - 0x52,0x51,0x31,0x60,0x76,0x60,0x70,0x60, /* 000003A8 "RQ1`v`p`" */ 43.113 - 0x50,0x49,0x52,0x41,0x5B,0x82,0x49,0x08, /* 000003B0 "PIRA[.I." */ 43.114 - 0x4C,0x4E,0x4B,0x42,0x08,0x5F,0x48,0x49, /* 000003B8 "LNKB._HI" */ 43.115 - 0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F, /* 000003C0 "D.A...._" */ 43.116 - 0x55,0x49,0x44,0x0A,0x02,0x14,0x1C,0x5F, /* 000003C8 "UID...._" */ 43.117 - 0x53,0x54,0x41,0x00,0x7B,0x50,0x49,0x52, /* 000003D0 "STA.{PIR" */ 43.118 - 0x42,0x0A,0x80,0x60,0xA0,0x08,0x93,0x60, /* 000003D8 "B..`...`" */ 43.119 - 0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4, /* 000003E0 "........" */ 43.120 - 0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53, /* 000003E8 "...._PRS" */ 43.121 - 0x00,0xA4,0x42,0x55,0x46,0x41,0x14,0x11, /* 000003F0 "..BUFA.." */ 43.122 - 0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,0x49, /* 000003F8 "_DIS.}PI" */ 43.123 - 0x52,0x42,0x0A,0x80,0x50,0x49,0x52,0x42, /* 00000400 "RB..PIRB" */ 43.124 - 0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B, /* 00000408 ".._CRS.{" */ 43.125 - 0x50,0x49,0x52,0x42,0x0A,0x0F,0x60,0x79, /* 00000410 "PIRB..`y" */ 43.126 - 0x01,0x60,0x49,0x52,0x51,0x56,0xA4,0x42, /* 00000418 ".`IRQV.B" */ 43.127 - 0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,0x52, /* 00000420 "UFB.._SR" */ 43.128 - 0x53,0x01,0x8B,0x68,0x01,0x49,0x52,0x51, /* 00000428 "S..h.IRQ" */ 43.129 - 0x31,0x82,0x49,0x52,0x51,0x31,0x60,0x76, /* 00000430 "1.IRQ1`v" */ 43.130 - 0x60,0x70,0x60,0x50,0x49,0x52,0x42,0x5B, /* 00000438 "`p`PIRB[" */ 43.131 - 0x82,0x49,0x08,0x4C,0x4E,0x4B,0x43,0x08, /* 00000440 ".I.LNKC." */ 43.132 - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C, /* 00000448 "_HID.A.." */ 43.133 - 0x0F,0x08,0x5F,0x55,0x49,0x44,0x0A,0x03, /* 00000450 ".._UID.." */ 43.134 - 0x14,0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B, /* 00000458 ".._STA.{" */ 43.135 - 0x50,0x49,0x52,0x43,0x0A,0x80,0x60,0xA0, /* 00000460 "PIRC..`." */ 43.136 - 0x08,0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09, /* 00000468 "..`....." */ 43.137 - 0xA1,0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F, /* 00000470 "......._" */ 43.138 - 0x50,0x52,0x53,0x00,0xA4,0x42,0x55,0x46, /* 00000478 "PRS..BUF" */ 43.139 - 0x41,0x14,0x11,0x5F,0x44,0x49,0x53,0x00, /* 00000480 "A.._DIS." */ 43.140 - 0x7D,0x50,0x49,0x52,0x43,0x0A,0x80,0x50, /* 00000488 "}PIRC..P" */ 43.141 - 0x49,0x52,0x43,0x14,0x1A,0x5F,0x43,0x52, /* 00000490 "IRC.._CR" */ 43.142 - 0x53,0x00,0x7B,0x50,0x49,0x52,0x43,0x0A, /* 00000498 "S.{PIRC." */ 43.143 - 0x0F,0x60,0x79,0x01,0x60,0x49,0x52,0x51, /* 000004A0 ".`y.`IRQ" */ 43.144 - 0x56,0xA4,0x42,0x55,0x46,0x42,0x14,0x1B, /* 000004A8 "V.BUFB.." */ 43.145 - 0x5F,0x53,0x52,0x53,0x01,0x8B,0x68,0x01, /* 000004B0 "_SRS..h." */ 43.146 - 0x49,0x52,0x51,0x31,0x82,0x49,0x52,0x51, /* 000004B8 "IRQ1.IRQ" */ 43.147 - 0x31,0x60,0x76,0x60,0x70,0x60,0x50,0x49, /* 000004C0 "1`v`p`PI" */ 43.148 - 0x52,0x43,0x5B,0x82,0x49,0x08,0x4C,0x4E, /* 000004C8 "RC[.I.LN" */ 43.149 - 0x4B,0x44,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 000004D0 "KD._HID." */ 43.150 - 0x41,0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49, /* 000004D8 "A...._UI" */ 43.151 - 0x44,0x0A,0x04,0x14,0x1C,0x5F,0x53,0x54, /* 000004E0 "D...._ST" */ 43.152 - 0x41,0x00,0x7B,0x50,0x49,0x52,0x44,0x0A, /* 000004E8 "A.{PIRD." */ 43.153 - 0x80,0x60,0xA0,0x08,0x93,0x60,0x0A,0x80, /* 000004F0 ".`...`.." */ 43.154 - 0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B, /* 000004F8 "........" */ 43.155 - 0x14,0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4, /* 00000500 ".._PRS.." */ 43.156 - 0x42,0x55,0x46,0x41,0x14,0x11,0x5F,0x44, /* 00000508 "BUFA.._D" */ 43.157 - 0x49,0x53,0x00,0x7D,0x50,0x49,0x52,0x44, /* 00000510 "IS.}PIRD" */ 43.158 - 0x0A,0x80,0x50,0x49,0x52,0x44,0x14,0x1A, /* 00000518 "..PIRD.." */ 43.159 - 0x5F,0x43,0x52,0x53,0x00,0x7B,0x50,0x49, /* 00000520 "_CRS.{PI" */ 43.160 - 0x52,0x44,0x0A,0x0F,0x60,0x79,0x01,0x60, /* 00000528 "RD..`y.`" */ 43.161 - 0x49,0x52,0x51,0x56,0xA4,0x42,0x55,0x46, /* 00000530 "IRQV.BUF" */ 43.162 - 0x42,0x14,0x1B,0x5F,0x53,0x52,0x53,0x01, /* 00000538 "B.._SRS." */ 43.163 - 0x8B,0x68,0x01,0x49,0x52,0x51,0x31,0x82, /* 00000540 ".h.IRQ1." */ 43.164 - 0x49,0x52,0x51,0x31,0x60,0x76,0x60,0x70, /* 00000548 "IRQ1`v`p" */ 43.165 - 0x60,0x50,0x49,0x52,0x44,0x5B,0x82,0x44, /* 00000550 "`PIRD[.D" */ 43.166 - 0x05,0x48,0x50,0x45,0x54,0x08,0x5F,0x48, /* 00000558 ".HPET._H" */ 43.167 - 0x49,0x44,0x0C,0x41,0xD0,0x01,0x03,0x08, /* 00000560 "ID.A...." */ 43.168 - 0x5F,0x55,0x49,0x44,0x00,0x14,0x18,0x5F, /* 00000568 "_UID..._" */ 43.169 - 0x53,0x54,0x41,0x00,0xA0,0x0C,0x93,0x5E, /* 00000570 "STA....^" */ 43.170 - 0x5E,0x5E,0x48,0x50,0x45,0x54,0x00,0xA4, /* 00000578 "^^HPET.." */ 43.171 - 0x00,0xA1,0x04,0xA4,0x0A,0x0F,0x08,0x5F, /* 00000580 "......._" */ 43.172 - 0x43,0x52,0x53,0x11,0x1F,0x0A,0x1C,0x87, /* 00000588 "CRS....." */ 43.173 - 0x17,0x00,0x00,0x0D,0x01,0x00,0x00,0x00, /* 00000590 "........" */ 43.174 - 0x00,0x00,0x00,0xD0,0xFE,0xFF,0x03,0xD0, /* 00000598 "........" */ 43.175 - 0xFE,0x00,0x00,0x00,0x00,0x00,0x04,0x00, /* 000005A0 "........" */ 43.176 - 0x00,0x79,0x00,0x14,0x16,0x5F,0x50,0x52, /* 000005A8 ".y..._PR" */ 43.177 - 0x54,0x00,0xA0,0x0A,0x50,0x49,0x43,0x44, /* 000005B0 "T...PICD" */ 43.178 - 0xA4,0x50,0x52,0x54,0x41,0xA4,0x50,0x52, /* 000005B8 ".PRTA.PR" */ 43.179 - 0x54,0x50,0x08,0x50,0x52,0x54,0x50,0x12, /* 000005C0 "TP.PRTP." */ 43.180 - 0x49,0x36,0x3C,0x12,0x0D,0x04,0x0C,0xFF, /* 000005C8 "I6<....." */ 43.181 - 0xFF,0x01,0x00,0x00,0x4C,0x4E,0x4B,0x42, /* 000005D0 "....LNKB" */ 43.182 - 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x01, /* 000005D8 "........" */ 43.183 - 0x00,0x01,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 000005E0 "..LNKC.." */ 43.184 - 0x0E,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x0A, /* 000005E8 "........" */ 43.185 - 0x02,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E, /* 000005F0 ".LNKD..." */ 43.186 - 0x04,0x0C,0xFF,0xFF,0x01,0x00,0x0A,0x03, /* 000005F8 "........" */ 43.187 - 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 00000600 "LNKA...." */ 43.188 - 0x0C,0xFF,0xFF,0x02,0x00,0x00,0x4C,0x4E, /* 00000608 "......LN" */ 43.189 - 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000610 "KC......" */ 43.190 - 0xFF,0x02,0x00,0x01,0x4C,0x4E,0x4B,0x44, /* 00000618 "....LNKD" */ 43.191 - 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x02, /* 00000620 "........" */ 43.192 - 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x41,0x00, /* 00000628 "...LNKA." */ 43.193 - 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x02,0x00, /* 00000630 "........" */ 43.194 - 0x0A,0x03,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000638 "..LNKB.." */ 43.195 - 0x0D,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x00, /* 00000640 "........" */ 43.196 - 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000648 "LNKD...." */ 43.197 - 0x0C,0xFF,0xFF,0x03,0x00,0x01,0x4C,0x4E, /* 00000650 "......LN" */ 43.198 - 0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000658 "KA......" */ 43.199 - 0xFF,0x03,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000660 ".....LNK" */ 43.200 - 0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000668 "B......." */ 43.201 - 0x03,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x43, /* 00000670 "....LNKC" */ 43.202 - 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x04, /* 00000678 "........" */ 43.203 - 0x00,0x00,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000680 "..LNKA.." */ 43.204 - 0x0D,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x01, /* 00000688 "........" */ 43.205 - 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04, /* 00000690 "LNKB...." */ 43.206 - 0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x02,0x4C, /* 00000698 ".......L" */ 43.207 - 0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C, /* 000006A0 "NKC....." */ 43.208 - 0xFF,0xFF,0x04,0x00,0x0A,0x03,0x4C,0x4E, /* 000006A8 "......LN" */ 43.209 - 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000006B0 "KD......" */ 43.210 - 0xFF,0x05,0x00,0x00,0x4C,0x4E,0x4B,0x42, /* 000006B8 "....LNKB" */ 43.211 - 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x05, /* 000006C0 "........" */ 43.212 - 0x00,0x01,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 000006C8 "..LNKC.." */ 43.213 - 0x0E,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x0A, /* 000006D0 "........" */ 43.214 - 0x02,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E, /* 000006D8 ".LNKD..." */ 43.215 - 0x04,0x0C,0xFF,0xFF,0x05,0x00,0x0A,0x03, /* 000006E0 "........" */ 43.216 - 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 000006E8 "LNKA...." */ 43.217 - 0x0C,0xFF,0xFF,0x06,0x00,0x00,0x4C,0x4E, /* 000006F0 "......LN" */ 43.218 - 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000006F8 "KC......" */ 43.219 - 0xFF,0x06,0x00,0x01,0x4C,0x4E,0x4B,0x44, /* 00000700 "....LNKD" */ 43.220 - 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x06, /* 00000708 "........" */ 43.221 - 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x41,0x00, /* 00000710 "...LNKA." */ 43.222 - 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x06,0x00, /* 00000718 "........" */ 43.223 - 0x0A,0x03,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000720 "..LNKB.." */ 43.224 - 0x0D,0x04,0x0C,0xFF,0xFF,0x07,0x00,0x00, /* 00000728 "........" */ 43.225 - 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000730 "LNKD...." */ 43.226 - 0x0C,0xFF,0xFF,0x07,0x00,0x01,0x4C,0x4E, /* 00000738 "......LN" */ 43.227 - 0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000740 "KA......" */ 43.228 - 0xFF,0x07,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000748 ".....LNK" */ 43.229 - 0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000750 "B......." */ 43.230 - 0x07,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x43, /* 00000758 "....LNKC" */ 43.231 - 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x08, /* 00000760 "........" */ 43.232 - 0x00,0x00,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000768 "..LNKA.." */ 43.233 - 0x0D,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x01, /* 00000770 "........" */ 43.234 - 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04, /* 00000778 "LNKB...." */ 43.235 - 0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x02,0x4C, /* 00000780 ".......L" */ 43.236 - 0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C, /* 00000788 "NKC....." */ 43.237 - 0xFF,0xFF,0x08,0x00,0x0A,0x03,0x4C,0x4E, /* 00000790 "......LN" */ 43.238 - 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000798 "KD......" */ 43.239 - 0xFF,0x09,0x00,0x00,0x4C,0x4E,0x4B,0x42, /* 000007A0 "....LNKB" */ 43.240 - 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x09, /* 000007A8 "........" */ 43.241 - 0x00,0x01,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 000007B0 "..LNKC.." */ 43.242 - 0x0E,0x04,0x0C,0xFF,0xFF,0x09,0x00,0x0A, /* 000007B8 "........" */ 43.243 - 0x02,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E, /* 000007C0 ".LNKD..." */ 43.244 - 0x04,0x0C,0xFF,0xFF,0x09,0x00,0x0A,0x03, /* 000007C8 "........" */ 43.245 - 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 000007D0 "LNKA...." */ 43.246 - 0x0C,0xFF,0xFF,0x0A,0x00,0x00,0x4C,0x4E, /* 000007D8 "......LN" */ 43.247 - 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000007E0 "KC......" */ 43.248 - 0xFF,0x0A,0x00,0x01,0x4C,0x4E,0x4B,0x44, /* 000007E8 "....LNKD" */ 43.249 - 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0A, /* 000007F0 "........" */ 43.250 - 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x41,0x00, /* 000007F8 "...LNKA." */ 43.251 - 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0A,0x00, /* 00000800 "........" */ 43.252 - 0x0A,0x03,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000808 "..LNKB.." */ 43.253 - 0x0D,0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x00, /* 00000810 "........" */ 43.254 - 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000818 "LNKD...." */ 43.255 - 0x0C,0xFF,0xFF,0x0B,0x00,0x01,0x4C,0x4E, /* 00000820 "......LN" */ 43.256 - 0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000828 "KA......" */ 43.257 - 0xFF,0x0B,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000830 ".....LNK" */ 43.258 - 0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000838 "B......." */ 43.259 - 0x0B,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x43, /* 00000840 "....LNKC" */ 43.260 - 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0C, /* 00000848 "........" */ 43.261 - 0x00,0x00,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000850 "..LNKA.." */ 43.262 - 0x0D,0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x01, /* 00000858 "........" */ 43.263 - 0x4C,0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04, /* 00000860 "LNKB...." */ 43.264 - 0x0C,0xFF,0xFF,0x0C,0x00,0x0A,0x02,0x4C, /* 00000868 ".......L" */ 43.265 - 0x4E,0x4B,0x43,0x00,0x12,0x0E,0x04,0x0C, /* 00000870 "NKC....." */ 43.266 - 0xFF,0xFF,0x0C,0x00,0x0A,0x03,0x4C,0x4E, /* 00000878 "......LN" */ 43.267 - 0x4B,0x44,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000880 "KD......" */ 43.268 - 0xFF,0x0D,0x00,0x00,0x4C,0x4E,0x4B,0x42, /* 00000888 "....LNKB" */ 43.269 - 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0D, /* 00000890 "........" */ 43.270 - 0x00,0x01,0x4C,0x4E,0x4B,0x43,0x00,0x12, /* 00000898 "..LNKC.." */ 43.271 - 0x0E,0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x0A, /* 000008A0 "........" */ 43.272 - 0x02,0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0E, /* 000008A8 ".LNKD..." */ 43.273 - 0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x0A,0x03, /* 000008B0 "........" */ 43.274 - 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0D,0x04, /* 000008B8 "LNKA...." */ 43.275 - 0x0C,0xFF,0xFF,0x0E,0x00,0x00,0x4C,0x4E, /* 000008C0 "......LN" */ 43.276 - 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000008C8 "KC......" */ 43.277 - 0xFF,0x0E,0x00,0x01,0x4C,0x4E,0x4B,0x44, /* 000008D0 "....LNKD" */ 43.278 - 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0E, /* 000008D8 "........" */ 43.279 - 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x41,0x00, /* 000008E0 "...LNKA." */ 43.280 - 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0E,0x00, /* 000008E8 "........" */ 43.281 - 0x0A,0x03,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 000008F0 "..LNKB.." */ 43.282 - 0x0D,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x00, /* 000008F8 "........" */ 43.283 - 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000900 "LNKD...." */ 43.284 - 0x0C,0xFF,0xFF,0x0F,0x00,0x01,0x4C,0x4E, /* 00000908 "......LN" */ 43.285 - 0x4B,0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000910 "KA......" */ 43.286 - 0xFF,0x0F,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000918 ".....LNK" */ 43.287 - 0x42,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000920 "B......." */ 43.288 - 0x0F,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x43, /* 00000928 "....LNKC" */ 43.289 - 0x00,0x08,0x50,0x52,0x54,0x41,0x12,0x41, /* 00000930 "..PRTA.A" */ 43.290 - 0x2F,0x3C,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000938 "/<......" */ 43.291 - 0x01,0x00,0x00,0x00,0x0A,0x14,0x12,0x0B, /* 00000940 "........" */ 43.292 - 0x04,0x0C,0xFF,0xFF,0x01,0x00,0x01,0x00, /* 00000948 "........" */ 43.293 - 0x0A,0x15,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000950 "........" */ 43.294 - 0x01,0x00,0x0A,0x02,0x00,0x0A,0x16,0x12, /* 00000958 "........" */ 43.295 - 0x0C,0x04,0x0C,0xFF,0xFF,0x01,0x00,0x0A, /* 00000960 "........" */ 43.296 - 0x03,0x00,0x0A,0x17,0x12,0x0B,0x04,0x0C, /* 00000968 "........" */ 43.297 - 0xFF,0xFF,0x02,0x00,0x00,0x00,0x0A,0x18, /* 00000970 "........" */ 43.298 - 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x02,0x00, /* 00000978 "........" */ 43.299 - 0x01,0x00,0x0A,0x19,0x12,0x0C,0x04,0x0C, /* 00000980 "........" */ 43.300 - 0xFF,0xFF,0x02,0x00,0x0A,0x02,0x00,0x0A, /* 00000988 "........" */ 43.301 - 0x1A,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x02, /* 00000990 "........" */ 43.302 - 0x00,0x0A,0x03,0x00,0x0A,0x1B,0x12,0x0B, /* 00000998 "........" */ 43.303 - 0x04,0x0C,0xFF,0xFF,0x03,0x00,0x00,0x00, /* 000009A0 "........" */ 43.304 - 0x0A,0x1C,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 000009A8 "........" */ 43.305 - 0x03,0x00,0x01,0x00,0x0A,0x1D,0x12,0x0C, /* 000009B0 "........" */ 43.306 - 0x04,0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x02, /* 000009B8 "........" */ 43.307 - 0x00,0x0A,0x1E,0x12,0x0C,0x04,0x0C,0xFF, /* 000009C0 "........" */ 43.308 - 0xFF,0x03,0x00,0x0A,0x03,0x00,0x0A,0x1F, /* 000009C8 "........" */ 43.309 - 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x04,0x00, /* 000009D0 "........" */ 43.310 - 0x00,0x00,0x0A,0x20,0x12,0x0B,0x04,0x0C, /* 000009D8 "... ...." */ 43.311 - 0xFF,0xFF,0x04,0x00,0x01,0x00,0x0A,0x21, /* 000009E0 ".......!" */ 43.312 - 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x04,0x00, /* 000009E8 "........" */ 43.313 - 0x0A,0x02,0x00,0x0A,0x22,0x12,0x0C,0x04, /* 000009F0 "...."..." */ 43.314 - 0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x03,0x00, /* 000009F8 "........" */ 43.315 - 0x0A,0x23,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000A00 ".#......" */ 43.316 - 0x05,0x00,0x00,0x00,0x0A,0x24,0x12,0x0B, /* 00000A08 ".....$.." */ 43.317 - 0x04,0x0C,0xFF,0xFF,0x05,0x00,0x01,0x00, /* 00000A10 "........" */ 43.318 - 0x0A,0x25,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000A18 ".%......" */ 43.319 - 0x05,0x00,0x0A,0x02,0x00,0x0A,0x26,0x12, /* 00000A20 "......&." */ 43.320 - 0x0C,0x04,0x0C,0xFF,0xFF,0x05,0x00,0x0A, /* 00000A28 "........" */ 43.321 - 0x03,0x00,0x0A,0x27,0x12,0x0B,0x04,0x0C, /* 00000A30 "...'...." */ 43.322 - 0xFF,0xFF,0x06,0x00,0x00,0x00,0x0A,0x28, /* 00000A38 ".......(" */ 43.323 - 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x06,0x00, /* 00000A40 "........" */ 43.324 - 0x01,0x00,0x0A,0x29,0x12,0x0C,0x04,0x0C, /* 00000A48 "...)...." */ 43.325 - 0xFF,0xFF,0x06,0x00,0x0A,0x02,0x00,0x0A, /* 00000A50 "........" */ 43.326 - 0x2A,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x06, /* 00000A58 "*......." */ 43.327 - 0x00,0x0A,0x03,0x00,0x0A,0x2B,0x12,0x0B, /* 00000A60 ".....+.." */ 43.328 - 0x04,0x0C,0xFF,0xFF,0x07,0x00,0x00,0x00, /* 00000A68 "........" */ 43.329 - 0x0A,0x2C,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000A70 ".,......" */ 43.330 - 0x07,0x00,0x01,0x00,0x0A,0x2D,0x12,0x0C, /* 00000A78 ".....-.." */ 43.331 - 0x04,0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x02, /* 00000A80 "........" */ 43.332 - 0x00,0x0A,0x2E,0x12,0x0C,0x04,0x0C,0xFF, /* 00000A88 "........" */ 43.333 - 0xFF,0x07,0x00,0x0A,0x03,0x00,0x0A,0x2F, /* 00000A90 "......./" */ 43.334 - 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x08,0x00, /* 00000A98 "........" */ 43.335 - 0x00,0x00,0x0A,0x11,0x12,0x0B,0x04,0x0C, /* 00000AA0 "........" */ 43.336 - 0xFF,0xFF,0x08,0x00,0x01,0x00,0x0A,0x12, /* 00000AA8 "........" */ 43.337 - 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x08,0x00, /* 00000AB0 "........" */ 43.338 - 0x0A,0x02,0x00,0x0A,0x13,0x12,0x0C,0x04, /* 00000AB8 "........" */ 43.339 - 0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x03,0x00, /* 00000AC0 "........" */ 43.340 - 0x0A,0x14,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000AC8 "........" */ 43.341 - 0x09,0x00,0x00,0x00,0x0A,0x15,0x12,0x0B, /* 00000AD0 "........" */ 43.342 - 0x04,0x0C,0xFF,0xFF,0x09,0x00,0x01,0x00, /* 00000AD8 "........" */ 43.343 - 0x0A,0x16,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000AE0 "........" */ 43.344 - 0x09,0x00,0x0A,0x02,0x00,0x0A,0x17,0x12, /* 00000AE8 "........" */ 43.345 - 0x0C,0x04,0x0C,0xFF,0xFF,0x09,0x00,0x0A, /* 00000AF0 "........" */ 43.346 - 0x03,0x00,0x0A,0x18,0x12,0x0B,0x04,0x0C, /* 00000AF8 "........" */ 43.347 - 0xFF,0xFF,0x0A,0x00,0x00,0x00,0x0A,0x19, /* 00000B00 "........" */ 43.348 - 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0A,0x00, /* 00000B08 "........" */ 43.349 - 0x01,0x00,0x0A,0x1A,0x12,0x0C,0x04,0x0C, /* 00000B10 "........" */ 43.350 - 0xFF,0xFF,0x0A,0x00,0x0A,0x02,0x00,0x0A, /* 00000B18 "........" */ 43.351 - 0x1B,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0A, /* 00000B20 "........" */ 43.352 - 0x00,0x0A,0x03,0x00,0x0A,0x1C,0x12,0x0B, /* 00000B28 "........" */ 43.353 - 0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x00,0x00, /* 00000B30 "........" */ 43.354 - 0x0A,0x1D,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000B38 "........" */ 43.355 - 0x0B,0x00,0x01,0x00,0x0A,0x1E,0x12,0x0C, /* 00000B40 "........" */ 43.356 - 0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x0A,0x02, /* 00000B48 "........" */ 43.357 - 0x00,0x0A,0x1F,0x12,0x0C,0x04,0x0C,0xFF, /* 00000B50 "........" */ 43.358 - 0xFF,0x0B,0x00,0x0A,0x03,0x00,0x0A,0x20, /* 00000B58 "....... " */ 43.359 - 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0C,0x00, /* 00000B60 "........" */ 43.360 - 0x00,0x00,0x0A,0x21,0x12,0x0B,0x04,0x0C, /* 00000B68 "...!...." */ 43.361 - 0xFF,0xFF,0x0C,0x00,0x01,0x00,0x0A,0x22, /* 00000B70 "......."" */ 43.362 - 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0C,0x00, /* 00000B78 "........" */ 43.363 - 0x0A,0x02,0x00,0x0A,0x23,0x12,0x0C,0x04, /* 00000B80 "....#..." */ 43.364 - 0x0C,0xFF,0xFF,0x0C,0x00,0x0A,0x03,0x00, /* 00000B88 "........" */ 43.365 - 0x0A,0x24,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000B90 ".$......" */ 43.366 - 0x0D,0x00,0x00,0x00,0x0A,0x25,0x12,0x0B, /* 00000B98 ".....%.." */ 43.367 - 0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x01,0x00, /* 00000BA0 "........" */ 43.368 - 0x0A,0x26,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000BA8 ".&......" */ 43.369 - 0x0D,0x00,0x0A,0x02,0x00,0x0A,0x27,0x12, /* 00000BB0 "......'." */ 43.370 - 0x0C,0x04,0x0C,0xFF,0xFF,0x0D,0x00,0x0A, /* 00000BB8 "........" */ 43.371 - 0x03,0x00,0x0A,0x28,0x12,0x0B,0x04,0x0C, /* 00000BC0 "...(...." */ 43.372 - 0xFF,0xFF,0x0E,0x00,0x00,0x00,0x0A,0x29, /* 00000BC8 ".......)" */ 43.373 - 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0E,0x00, /* 00000BD0 "........" */ 43.374 - 0x01,0x00,0x0A,0x2A,0x12,0x0C,0x04,0x0C, /* 00000BD8 "...*...." */ 43.375 - 0xFF,0xFF,0x0E,0x00,0x0A,0x02,0x00,0x0A, /* 00000BE0 "........" */ 43.376 - 0x2B,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0E, /* 00000BE8 "+......." */ 43.377 - 0x00,0x0A,0x03,0x00,0x0A,0x2C,0x12,0x0B, /* 00000BF0 ".....,.." */ 43.378 - 0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x00,0x00, /* 00000BF8 "........" */ 43.379 - 0x0A,0x2D,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000C00 ".-......" */ 43.380 - 0x0F,0x00,0x01,0x00,0x0A,0x2E,0x12,0x0C, /* 00000C08 "........" */ 43.381 - 0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x0A,0x02, /* 00000C10 "........" */ 43.382 - 0x00,0x0A,0x2F,0x12,0x0C,0x04,0x0C,0xFF, /* 00000C18 "../....." */ 43.383 - 0xFF,0x0F,0x00,0x0A,0x03,0x00,0x0A,0x10, /* 00000C20 "........" */ 43.384 - 0x5B,0x82,0x46,0x37,0x49,0x53,0x41,0x5F, /* 00000C28 "[.F7ISA_" */ 43.385 - 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00000C30 "._ADR..." */ 43.386 - 0x01,0x00,0x5B,0x80,0x50,0x49,0x52,0x51, /* 00000C38 "..[.PIRQ" */ 43.387 - 0x02,0x0A,0x60,0x0A,0x04,0x10,0x2E,0x5C, /* 00000C40 "..`....\" */ 43.388 - 0x00,0x5B,0x81,0x29,0x5C,0x2F,0x04,0x5F, /* 00000C48 ".[.)\/._" */ 43.389 - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x49, /* 00000C50 "SB_PCI0I" */ 43.390 - 0x53,0x41,0x5F,0x50,0x49,0x52,0x51,0x01, /* 00000C58 "SA_PIRQ." */ 43.391 - 0x50,0x49,0x52,0x41,0x08,0x50,0x49,0x52, /* 00000C60 "PIRA.PIR" */ 43.392 - 0x42,0x08,0x50,0x49,0x52,0x43,0x08,0x50, /* 00000C68 "B.PIRC.P" */ 43.393 - 0x49,0x52,0x44,0x08,0x5B,0x82,0x46,0x0B, /* 00000C70 "IRD.[.F." */ 43.394 - 0x53,0x59,0x53,0x52,0x08,0x5F,0x48,0x49, /* 00000C78 "SYSR._HI" */ 43.395 - 0x44,0x0C,0x41,0xD0,0x0C,0x02,0x08,0x5F, /* 00000C80 "D.A...._" */ 43.396 - 0x55,0x49,0x44,0x01,0x08,0x43,0x52,0x53, /* 00000C88 "UID..CRS" */ 43.397 - 0x5F,0x11,0x4E,0x08,0x0A,0x8A,0x47,0x01, /* 00000C90 "_.N...G." */ 43.398 - 0x10,0x00,0x10,0x00,0x00,0x10,0x47,0x01, /* 00000C98 "......G." */ 43.399 - 0x22,0x00,0x22,0x00,0x00,0x0C,0x47,0x01, /* 00000CA0 ""."...G." */ 43.400 - 0x30,0x00,0x30,0x00,0x00,0x10,0x47,0x01, /* 00000CA8 "0.0...G." */ 43.401 - 0x44,0x00,0x44,0x00,0x00,0x1C,0x47,0x01, /* 00000CB0 "D.D...G." */ 43.402 - 0x62,0x00,0x62,0x00,0x00,0x02,0x47,0x01, /* 00000CB8 "b.b...G." */ 43.403 - 0x65,0x00,0x65,0x00,0x00,0x0B,0x47,0x01, /* 00000CC0 "e.e...G." */ 43.404 - 0x72,0x00,0x72,0x00,0x00,0x0E,0x47,0x01, /* 00000CC8 "r.r...G." */ 43.405 - 0x80,0x00,0x80,0x00,0x00,0x01,0x47,0x01, /* 00000CD0 "......G." */ 43.406 - 0x84,0x00,0x84,0x00,0x00,0x03,0x47,0x01, /* 00000CD8 "......G." */ 43.407 - 0x88,0x00,0x88,0x00,0x00,0x01,0x47,0x01, /* 00000CE0 "......G." */ 43.408 - 0x8C,0x00,0x8C,0x00,0x00,0x03,0x47,0x01, /* 00000CE8 "......G." */ 43.409 - 0x90,0x00,0x90,0x00,0x00,0x10,0x47,0x01, /* 00000CF0 "......G." */ 43.410 - 0xA2,0x00,0xA2,0x00,0x00,0x1C,0x47,0x01, /* 00000CF8 "......G." */ 43.411 - 0xE0,0x00,0xE0,0x00,0x00,0x10,0x47,0x01, /* 00000D00 "......G." */ 43.412 - 0xA0,0x08,0xA0,0x08,0x00,0x04,0x47,0x01, /* 00000D08 "......G." */ 43.413 - 0xC0,0x0C,0xC0,0x0C,0x00,0x10,0x47,0x01, /* 00000D10 "......G." */ 43.414 - 0xD0,0x04,0xD0,0x04,0x00,0x02,0x79,0x00, /* 00000D18 "......y." */ 43.415 - 0x14,0x0B,0x5F,0x43,0x52,0x53,0x00,0xA4, /* 00000D20 ".._CRS.." */ 43.416 - 0x43,0x52,0x53,0x5F,0x5B,0x82,0x2B,0x50, /* 00000D28 "CRS_[.+P" */ 43.417 - 0x49,0x43,0x5F,0x08,0x5F,0x48,0x49,0x44, /* 00000D30 "IC_._HID" */ 43.418 - 0x0B,0x41,0xD0,0x08,0x5F,0x43,0x52,0x53, /* 00000D38 ".A.._CRS" */ 43.419 - 0x11,0x18,0x0A,0x15,0x47,0x01,0x20,0x00, /* 00000D40 "....G. ." */ 43.420 - 0x20,0x00,0x01,0x02,0x47,0x01,0xA0,0x00, /* 00000D48 " ...G..." */ 43.421 - 0xA0,0x00,0x01,0x02,0x22,0x04,0x00,0x79, /* 00000D50 "...."..y" */ 43.422 - 0x00,0x5B,0x82,0x47,0x05,0x44,0x4D,0x41, /* 00000D58 ".[.G.DMA" */ 43.423 - 0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00000D60 "0._HID.A" */ 43.424 - 0xD0,0x02,0x00,0x08,0x5F,0x43,0x52,0x53, /* 00000D68 "...._CRS" */ 43.425 - 0x11,0x41,0x04,0x0A,0x3D,0x2A,0x10,0x04, /* 00000D70 ".A..=*.." */ 43.426 - 0x47,0x01,0x00,0x00,0x00,0x00,0x00,0x10, /* 00000D78 "G......." */ 43.427 - 0x47,0x01,0x81,0x00,0x81,0x00,0x00,0x03, /* 00000D80 "G......." */ 43.428 - 0x47,0x01,0x87,0x00,0x87,0x00,0x00,0x01, /* 00000D88 "G......." */ 43.429 - 0x47,0x01,0x89,0x00,0x89,0x00,0x00,0x03, /* 00000D90 "G......." */ 43.430 - 0x47,0x01,0x8F,0x00,0x8F,0x00,0x00,0x01, /* 00000D98 "G......." */ 43.431 - 0x47,0x01,0xC0,0x00,0xC0,0x00,0x00,0x20, /* 00000DA0 "G...... " */ 43.432 - 0x47,0x01,0x80,0x04,0x80,0x04,0x00,0x10, /* 00000DA8 "G......." */ 43.433 - 0x79,0x00,0x5B,0x82,0x25,0x54,0x4D,0x52, /* 00000DB0 "y.[.%TMR" */ 43.434 - 0x5F,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00000DB8 "_._HID.A" */ 43.435 - 0xD0,0x01,0x00,0x08,0x5F,0x43,0x52,0x53, /* 00000DC0 "...._CRS" */ 43.436 - 0x11,0x10,0x0A,0x0D,0x47,0x01,0x40,0x00, /* 00000DC8 "....G.@." */ 43.437 - 0x40,0x00,0x00,0x04,0x22,0x01,0x00,0x79, /* 00000DD0 "@..."..y" */ 43.438 - 0x00,0x5B,0x82,0x25,0x52,0x54,0x43,0x5F, /* 00000DD8 ".[.%RTC_" */ 43.439 - 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000DE0 "._HID.A." */ 43.440 - 0x0B,0x00,0x08,0x5F,0x43,0x52,0x53,0x11, /* 00000DE8 "..._CRS." */ 43.441 - 0x10,0x0A,0x0D,0x47,0x01,0x70,0x00,0x70, /* 00000DF0 "...G.p.p" */ 43.442 - 0x00,0x00,0x02,0x22,0x00,0x01,0x79,0x00, /* 00000DF8 "..."..y." */ 43.443 - 0x5B,0x82,0x22,0x53,0x50,0x4B,0x52,0x08, /* 00000E00 "[."SPKR." */ 43.444 - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x08, /* 00000E08 "_HID.A.." */ 43.445 - 0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x0D, /* 00000E10 ".._CRS.." */ 43.446 - 0x0A,0x0A,0x47,0x01,0x61,0x00,0x61,0x00, /* 00000E18 "..G.a.a." */ 43.447 - 0x00,0x01,0x79,0x00,0x5B,0x82,0x31,0x50, /* 00000E20 "..y.[.1P" */ 43.448 - 0x53,0x32,0x4D,0x08,0x5F,0x48,0x49,0x44, /* 00000E28 "S2M._HID" */ 43.449 - 0x0C,0x41,0xD0,0x0F,0x13,0x08,0x5F,0x43, /* 00000E30 ".A...._C" */ 43.450 - 0x49,0x44,0x0C,0x41,0xD0,0x0F,0x13,0x14, /* 00000E38 "ID.A...." */ 43.451 - 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000E40 "._STA..." */ 43.452 - 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x08, /* 00000E48 ".._CRS.." */ 43.453 - 0x0A,0x05,0x22,0x00,0x10,0x79,0x00,0x5B, /* 00000E50 ".."..y.[" */ 43.454 - 0x82,0x42,0x04,0x50,0x53,0x32,0x4B,0x08, /* 00000E58 ".B.PS2K." */ 43.455 - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x03, /* 00000E60 "_HID.A.." */ 43.456 - 0x03,0x08,0x5F,0x43,0x49,0x44,0x0C,0x41, /* 00000E68 ".._CID.A" */ 43.457 - 0xD0,0x03,0x0B,0x14,0x09,0x5F,0x53,0x54, /* 00000E70 "....._ST" */ 43.458 - 0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43, /* 00000E78 "A....._C" */ 43.459 - 0x52,0x53,0x11,0x18,0x0A,0x15,0x47,0x01, /* 00000E80 "RS....G." */ 43.460 - 0x60,0x00,0x60,0x00,0x00,0x01,0x47,0x01, /* 00000E88 "`.`...G." */ 43.461 - 0x64,0x00,0x64,0x00,0x00,0x01,0x22,0x02, /* 00000E90 "d.d..."." */ 43.462 - 0x00,0x79,0x00,0x5B,0x82,0x3A,0x46,0x44, /* 00000E98 ".y.[.:FD" */ 43.463 - 0x43,0x30,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 00000EA0 "C0._HID." */ 43.464 - 0x41,0xD0,0x07,0x00,0x14,0x09,0x5F,0x53, /* 00000EA8 "A....._S" */ 43.465 - 0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F, /* 00000EB0 "TA....._" */ 43.466 - 0x43,0x52,0x53,0x11,0x1B,0x0A,0x18,0x47, /* 00000EB8 "CRS....G" */ 43.467 - 0x01,0xF0,0x03,0xF0,0x03,0x01,0x06,0x47, /* 00000EC0 ".......G" */ 43.468 - 0x01,0xF7,0x03,0xF7,0x03,0x01,0x01,0x22, /* 00000EC8 "......."" */ 43.469 - 0x40,0x00,0x2A,0x04,0x00,0x79,0x00,0x5B, /* 00000ED0 "@.*..y.[" */ 43.470 - 0x82,0x46,0x04,0x55,0x41,0x52,0x31,0x08, /* 00000ED8 ".F.UAR1." */ 43.471 - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x05, /* 00000EE0 "_HID.A.." */ 43.472 - 0x01,0x08,0x5F,0x55,0x49,0x44,0x01,0x14, /* 00000EE8 ".._UID.." */ 43.473 - 0x19,0x5F,0x53,0x54,0x41,0x00,0xA0,0x0D, /* 00000EF0 "._STA..." */ 43.474 - 0x93,0x5E,0x5E,0x5E,0x5E,0x55,0x41,0x52, /* 00000EF8 ".^^^^UAR" */ 43.475 - 0x31,0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A, /* 00000F00 "1......." */ 43.476 - 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000F08 ".._CRS.." */ 43.477 - 0x0A,0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03, /* 00000F10 "..G....." */ 43.478 - 0x08,0x08,0x22,0x10,0x00,0x79,0x00,0x5B, /* 00000F18 ".."..y.[" */ 43.479 - 0x82,0x47,0x04,0x55,0x41,0x52,0x32,0x08, /* 00000F20 ".G.UAR2." */ 43.480 - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x05, /* 00000F28 "_HID.A.." */ 43.481 - 0x01,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02, /* 00000F30 ".._UID.." */ 43.482 - 0x14,0x19,0x5F,0x53,0x54,0x41,0x00,0xA0, /* 00000F38 ".._STA.." */ 43.483 - 0x0D,0x93,0x5E,0x5E,0x5E,0x5E,0x55,0x41, /* 00000F40 "..^^^^UA" */ 43.484 - 0x52,0x32,0x00,0xA4,0x00,0xA1,0x04,0xA4, /* 00000F48 "R2......" */ 43.485 - 0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11, /* 00000F50 "..._CRS." */ 43.486 - 0x10,0x0A,0x0D,0x47,0x01,0xF8,0x02,0xF8, /* 00000F58 "...G...." */ 43.487 - 0x02,0x08,0x08,0x22,0x08,0x00,0x79,0x00, /* 00000F60 "..."..y." */ 43.488 - 0x5B,0x82,0x36,0x4C,0x54,0x50,0x31,0x08, /* 00000F68 "[.6LTP1." */ 43.489 - 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x04, /* 00000F70 "_HID.A.." */ 43.490 - 0x00,0x08,0x5F,0x55,0x49,0x44,0x0A,0x02, /* 00000F78 ".._UID.." */ 43.491 - 0x14,0x09,0x5F,0x53,0x54,0x41,0x00,0xA4, /* 00000F80 ".._STA.." */ 43.492 - 0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53,0x11, /* 00000F88 "..._CRS." */ 43.493 - 0x10,0x0A,0x0D,0x47,0x01,0x78,0x03,0x78, /* 00000F90 "...G.x.x" */ 43.494 - 0x03,0x08,0x08,0x22,0x80,0x00,0x79,0x00, /* 00000F98 "..."..y." */ 43.495 - 0x5B,0x82,0x4D,0x07,0x53,0x31,0x46,0x30, /* 00000FA0 "[.M.S1F0" */ 43.496 - 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00000FA8 "._ADR..." */ 43.497 - 0x06,0x00,0x08,0x5F,0x53,0x55,0x4E,0x01, /* 00000FB0 "..._SUN." */ 43.498 - 0x14,0x13,0x5F,0x50,0x53,0x30,0x00,0x70, /* 00000FB8 ".._PS0.p" */ 43.499 - 0x0A,0x80,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00000FC0 "..\._GPE" */ 43.500 - 0x44,0x50,0x54,0x32,0x14,0x13,0x5F,0x50, /* 00000FC8 "DPT2.._P" */ 43.501 - 0x53,0x33,0x00,0x70,0x0A,0x83,0x5C,0x2E, /* 00000FD0 "S3.p..\." */ 43.502 - 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00000FD8 "_GPEDPT2" */ 43.503 - 0x14,0x1F,0x5F,0x45,0x4A,0x30,0x01,0x70, /* 00000FE0 ".._EJ0.p" */ 43.504 - 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00000FE8 "..\._GPE" */ 43.505 - 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00000FF0 "DPT2p.\." */ 43.506 - 0x5F,0x47,0x50,0x45,0x50,0x48,0x50,0x31, /* 00000FF8 "_GPEPHP1" */ 43.507 - 0x14,0x1E,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00001000 ".._STA.p" */ 43.508 - 0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001008 "..\._GPE" */ 43.509 - 0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,0x5F, /* 00001010 "DPT2.\._" */ 43.510 - 0x47,0x50,0x45,0x50,0x48,0x50,0x31,0x5B, /* 00001018 "GPEPHP1[" */ 43.511 - 0x82,0x4E,0x07,0x53,0x32,0x46,0x30,0x08, /* 00001020 ".N.S2F0." */ 43.512 - 0x5F,0x41,0x44,0x52,0x0C,0x00,0x00,0x07, /* 00001028 "_ADR...." */ 43.513 - 0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A,0x02, /* 00001030 ".._SUN.." */ 43.514 - 0x14,0x13,0x5F,0x50,0x53,0x30,0x00,0x70, /* 00001038 ".._PS0.p" */ 43.515 - 0x0A,0x90,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001040 "..\._GPE" */ 43.516 - 0x44,0x50,0x54,0x32,0x14,0x13,0x5F,0x50, /* 00001048 "DPT2.._P" */ 43.517 - 0x53,0x33,0x00,0x70,0x0A,0x93,0x5C,0x2E, /* 00001050 "S3.p..\." */ 43.518 - 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001058 "_GPEDPT2" */ 43.519 - 0x14,0x1F,0x5F,0x45,0x4A,0x30,0x01,0x70, /* 00001060 ".._EJ0.p" */ 43.520 - 0x0A,0x98,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001068 "..\._GPE" */ 43.521 - 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00001070 "DPT2p.\." */ 43.522 - 0x5F,0x47,0x50,0x45,0x50,0x48,0x50,0x32, /* 00001078 "_GPEPHP2" */ 43.523 - 0x14,0x1E,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00001080 ".._STA.p" */ 43.524 - 0x0A,0x99,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001088 "..\._GPE" */ 43.525 - 0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E,0x5F, /* 00001090 "DPT2.\._" */ 43.526 - 0x47,0x50,0x45,0x50,0x48,0x50,0x32,0x10, /* 00001098 "GPEPHP2." */ 43.527 - 0x4E,0x0B,0x5F,0x47,0x50,0x45,0x5B,0x80, /* 000010A0 "N._GPE[." */ 43.528 - 0x50,0x48,0x50,0x5F,0x01,0x0B,0xC0,0x10, /* 000010A8 "PHP_...." */ 43.529 - 0x0A,0x03,0x5B,0x81,0x15,0x50,0x48,0x50, /* 000010B0 "..[..PHP" */ 43.530 - 0x5F,0x01,0x50,0x53,0x54,0x41,0x08,0x50, /* 000010B8 "_.PSTA.P" */ 43.531 - 0x48,0x50,0x31,0x08,0x50,0x48,0x50,0x32, /* 000010C0 "HP1.PHP2" */ 43.532 - 0x08,0x5B,0x80,0x44,0x47,0x31,0x5F,0x01, /* 000010C8 ".[.DG1_." */ 43.533 - 0x0B,0x44,0xB0,0x0A,0x04,0x5B,0x81,0x10, /* 000010D0 ".D...[.." */ 43.534 - 0x44,0x47,0x31,0x5F,0x01,0x44,0x50,0x54, /* 000010D8 "DG1_.DPT" */ 43.535 - 0x31,0x08,0x44,0x50,0x54,0x32,0x08,0x14, /* 000010E0 "1.DPT2.." */ 43.536 - 0x46,0x07,0x5F,0x4C,0x30,0x33,0x00,0x08, /* 000010E8 "F._L03.." */ 43.537 - 0x53,0x4C,0x54,0x5F,0x00,0x08,0x45,0x56, /* 000010F0 "SLT_..EV" */ 43.538 - 0x54,0x5F,0x00,0x70,0x50,0x53,0x54,0x41, /* 000010F8 "T_.pPSTA" */ 43.539 - 0x61,0x7A,0x61,0x0A,0x04,0x53,0x4C,0x54, /* 00001100 "aza..SLT" */ 43.540 - 0x5F,0x7B,0x61,0x0A,0x0F,0x45,0x56,0x54, /* 00001108 "_{a..EVT" */ 43.541 - 0x5F,0x70,0x53,0x4C,0x54,0x5F,0x44,0x50, /* 00001110 "_pSLT_DP" */ 43.542 - 0x54,0x31,0x70,0x45,0x56,0x54,0x5F,0x44, /* 00001118 "T1pEVT_D" */ 43.543 - 0x50,0x54,0x32,0xA0,0x1B,0x93,0x53,0x4C, /* 00001120 "PT2...SL" */ 43.544 - 0x54,0x5F,0x01,0x86,0x5C,0x2F,0x03,0x5F, /* 00001128 "T_..\/._" */ 43.545 - 0x53,0x42,0x5F,0x50,0x43,0x49,0x30,0x53, /* 00001130 "SB_PCI0S" */ 43.546 - 0x31,0x46,0x30,0x45,0x56,0x54,0x5F,0xA1, /* 00001138 "1F0EVT_." */ 43.547 - 0x1E,0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F, /* 00001140 "....SLT_" */ 43.548 - 0x0A,0x02,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00001148 "...\/._S" */ 43.549 - 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x32, /* 00001150 "B_PCI0S2" */ 43.550 - 0x46,0x30,0x45,0x56,0x54,0x5F, 43.551 + 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00, /* 000001D8 "........" */ 43.552 + 0x00,0x00,0x79,0x00,0x5B,0x82,0x8E,0xAE, /* 000001E0 "..y.[..." */ 43.553 + 0x02,0x50,0x43,0x49,0x30,0x08,0x5F,0x48, /* 000001E8 ".PCI0._H" */ 43.554 + 0x49,0x44,0x0C,0x41,0xD0,0x0A,0x03,0x08, /* 000001F0 "ID.A...." */ 43.555 + 0x5F,0x55,0x49,0x44,0x00,0x08,0x5F,0x41, /* 000001F8 "_UID.._A" */ 43.556 + 0x44,0x52,0x00,0x08,0x5F,0x42,0x42,0x4E, /* 00000200 "DR.._BBN" */ 43.557 + 0x00,0x5B,0x82,0x2A,0x48,0x50,0x30,0x5F, /* 00000208 ".[.*HP0_" */ 43.558 + 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000210 "._HID.A." */ 43.559 + 0x0C,0x02,0x08,0x5F,0x43,0x52,0x53,0x11, /* 00000218 "..._CRS." */ 43.560 + 0x15,0x0A,0x12,0x47,0x01,0xC0,0x10,0xC0, /* 00000220 "...G...." */ 43.561 + 0x10,0x00,0x22,0x47,0x01,0x44,0xB0,0x44, /* 00000228 ".."G.D.D" */ 43.562 + 0xB0,0x00,0x04,0x79,0x00,0x14,0x4E,0x0C, /* 00000230 "...y..N." */ 43.563 + 0x5F,0x43,0x52,0x53,0x00,0x08,0x50,0x52, /* 00000238 "_CRS..PR" */ 43.564 + 0x54,0x30,0x11,0x42,0x07,0x0A,0x6E,0x88, /* 00000240 "T0.B..n." */ 43.565 + 0x0D,0x00,0x02,0x0E,0x00,0x00,0x00,0x00, /* 00000248 "........" */ 43.566 + 0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x47, /* 00000250 ".......G" */ 43.567 + 0x01,0xF8,0x0C,0xF8,0x0C,0x01,0x08,0x88, /* 00000258 "........" */ 43.568 + 0x0D,0x00,0x01,0x0C,0x03,0x00,0x00,0x00, /* 00000260 "........" */ 43.569 + 0x00,0xF7,0x0C,0x00,0x00,0xF8,0x0C,0x88, /* 00000268 "........" */ 43.570 + 0x0D,0x00,0x01,0x0C,0x03,0x00,0x00,0x00, /* 00000270 "........" */ 43.571 + 0x0D,0xFF,0xFF,0x00,0x00,0x00,0xF3,0x87, /* 00000278 "........" */ 43.572 + 0x17,0x00,0x00,0x0C,0x03,0x00,0x00,0x00, /* 00000280 "........" */ 43.573 + 0x00,0x00,0x00,0x0A,0x00,0xFF,0xFF,0x0B, /* 00000288 "........" */ 43.574 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02, /* 00000290 "........" */ 43.575 + 0x00,0x87,0x17,0x00,0x00,0x0C,0x03,0x00, /* 00000298 "........" */ 43.576 + 0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF, /* 000002A0 "........" */ 43.577 + 0xFF,0xFF,0xF4,0x00,0x00,0x00,0x00,0x00, /* 000002A8 "........" */ 43.578 + 0x00,0x00,0x05,0x79,0x00,0x8A,0x50,0x52, /* 000002B0 "...y..PR" */ 43.579 + 0x54,0x30,0x0A,0x5C,0x4D,0x4D,0x49,0x4E, /* 000002B8 "T0.\MMIN" */ 43.580 + 0x8A,0x50,0x52,0x54,0x30,0x0A,0x60,0x4D, /* 000002C0 ".PRT0.`M" */ 43.581 + 0x4D,0x41,0x58,0x8A,0x50,0x52,0x54,0x30, /* 000002C8 "MAX.PRT0" */ 43.582 + 0x0A,0x68,0x4D,0x4C,0x45,0x4E,0x70,0x50, /* 000002D0 ".hMLENpP" */ 43.583 + 0x4D,0x49,0x4E,0x4D,0x4D,0x49,0x4E,0x70, /* 000002D8 "MINMMINp" */ 43.584 + 0x50,0x4C,0x45,0x4E,0x4D,0x4C,0x45,0x4E, /* 000002E0 "PLENMLEN" */ 43.585 + 0x72,0x4D,0x4D,0x49,0x4E,0x4D,0x4C,0x45, /* 000002E8 "rMMINMLE" */ 43.586 + 0x4E,0x4D,0x4D,0x41,0x58,0x74,0x4D,0x4D, /* 000002F0 "NMMAXtMM" */ 43.587 + 0x41,0x58,0x01,0x4D,0x4D,0x41,0x58,0xA4, /* 000002F8 "AX.MMAX." */ 43.588 + 0x50,0x52,0x54,0x30,0x08,0x42,0x55,0x46, /* 00000300 "PRT0.BUF" */ 43.589 + 0x41,0x11,0x09,0x0A,0x06,0x23,0x20,0x0C, /* 00000308 "A....# ." */ 43.590 + 0x18,0x79,0x00,0x08,0x42,0x55,0x46,0x42, /* 00000310 ".y..BUFB" */ 43.591 + 0x11,0x09,0x0A,0x06,0x23,0x00,0x00,0x18, /* 00000318 "....#..." */ 43.592 + 0x79,0x00,0x8B,0x42,0x55,0x46,0x42,0x01, /* 00000320 "y..BUFB." */ 43.593 + 0x49,0x52,0x51,0x56,0x5B,0x82,0x48,0x08, /* 00000328 "IRQV[.H." */ 43.594 + 0x4C,0x4E,0x4B,0x41,0x08,0x5F,0x48,0x49, /* 00000330 "LNKA._HI" */ 43.595 + 0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F, /* 00000338 "D.A...._" */ 43.596 + 0x55,0x49,0x44,0x01,0x14,0x1C,0x5F,0x53, /* 00000340 "UID..._S" */ 43.597 + 0x54,0x41,0x00,0x7B,0x50,0x49,0x52,0x41, /* 00000348 "TA.{PIRA" */ 43.598 + 0x0A,0x80,0x60,0xA0,0x08,0x93,0x60,0x0A, /* 00000350 "..`...`." */ 43.599 + 0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4,0x0A, /* 00000358 "........" */ 43.600 + 0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53,0x00, /* 00000360 "..._PRS." */ 43.601 + 0xA4,0x42,0x55,0x46,0x41,0x14,0x11,0x5F, /* 00000368 ".BUFA.._" */ 43.602 + 0x44,0x49,0x53,0x00,0x7D,0x50,0x49,0x52, /* 00000370 "DIS.}PIR" */ 43.603 + 0x41,0x0A,0x80,0x50,0x49,0x52,0x41,0x14, /* 00000378 "A..PIRA." */ 43.604 + 0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B,0x50, /* 00000380 "._CRS.{P" */ 43.605 + 0x49,0x52,0x41,0x0A,0x0F,0x60,0x79,0x01, /* 00000388 "IRA..`y." */ 43.606 + 0x60,0x49,0x52,0x51,0x56,0xA4,0x42,0x55, /* 00000390 "`IRQV.BU" */ 43.607 + 0x46,0x42,0x14,0x1B,0x5F,0x53,0x52,0x53, /* 00000398 "FB.._SRS" */ 43.608 + 0x01,0x8B,0x68,0x01,0x49,0x52,0x51,0x31, /* 000003A0 "..h.IRQ1" */ 43.609 + 0x82,0x49,0x52,0x51,0x31,0x60,0x76,0x60, /* 000003A8 ".IRQ1`v`" */ 43.610 + 0x70,0x60,0x50,0x49,0x52,0x41,0x5B,0x82, /* 000003B0 "p`PIRA[." */ 43.611 + 0x49,0x08,0x4C,0x4E,0x4B,0x42,0x08,0x5F, /* 000003B8 "I.LNKB._" */ 43.612 + 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x0F, /* 000003C0 "HID.A..." */ 43.613 + 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x14, /* 000003C8 "._UID..." */ 43.614 + 0x1C,0x5F,0x53,0x54,0x41,0x00,0x7B,0x50, /* 000003D0 "._STA.{P" */ 43.615 + 0x49,0x52,0x42,0x0A,0x80,0x60,0xA0,0x08, /* 000003D8 "IRB..`.." */ 43.616 + 0x93,0x60,0x0A,0x80,0xA4,0x0A,0x09,0xA1, /* 000003E0 ".`......" */ 43.617 + 0x04,0xA4,0x0A,0x0B,0x14,0x0B,0x5F,0x50, /* 000003E8 "......_P" */ 43.618 + 0x52,0x53,0x00,0xA4,0x42,0x55,0x46,0x41, /* 000003F0 "RS..BUFA" */ 43.619 + 0x14,0x11,0x5F,0x44,0x49,0x53,0x00,0x7D, /* 000003F8 ".._DIS.}" */ 43.620 + 0x50,0x49,0x52,0x42,0x0A,0x80,0x50,0x49, /* 00000400 "PIRB..PI" */ 43.621 + 0x52,0x42,0x14,0x1A,0x5F,0x43,0x52,0x53, /* 00000408 "RB.._CRS" */ 43.622 + 0x00,0x7B,0x50,0x49,0x52,0x42,0x0A,0x0F, /* 00000410 ".{PIRB.." */ 43.623 + 0x60,0x79,0x01,0x60,0x49,0x52,0x51,0x56, /* 00000418 "`y.`IRQV" */ 43.624 + 0xA4,0x42,0x55,0x46,0x42,0x14,0x1B,0x5F, /* 00000420 ".BUFB.._" */ 43.625 + 0x53,0x52,0x53,0x01,0x8B,0x68,0x01,0x49, /* 00000428 "SRS..h.I" */ 43.626 + 0x52,0x51,0x31,0x82,0x49,0x52,0x51,0x31, /* 00000430 "RQ1.IRQ1" */ 43.627 + 0x60,0x76,0x60,0x70,0x60,0x50,0x49,0x52, /* 00000438 "`v`p`PIR" */ 43.628 + 0x42,0x5B,0x82,0x49,0x08,0x4C,0x4E,0x4B, /* 00000440 "B[.I.LNK" */ 43.629 + 0x43,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00000448 "C._HID.A" */ 43.630 + 0xD0,0x0C,0x0F,0x08,0x5F,0x55,0x49,0x44, /* 00000450 "...._UID" */ 43.631 + 0x0A,0x03,0x14,0x1C,0x5F,0x53,0x54,0x41, /* 00000458 "...._STA" */ 43.632 + 0x00,0x7B,0x50,0x49,0x52,0x43,0x0A,0x80, /* 00000460 ".{PIRC.." */ 43.633 + 0x60,0xA0,0x08,0x93,0x60,0x0A,0x80,0xA4, /* 00000468 "`...`..." */ 43.634 + 0x0A,0x09,0xA1,0x04,0xA4,0x0A,0x0B,0x14, /* 00000470 "........" */ 43.635 + 0x0B,0x5F,0x50,0x52,0x53,0x00,0xA4,0x42, /* 00000478 "._PRS..B" */ 43.636 + 0x55,0x46,0x41,0x14,0x11,0x5F,0x44,0x49, /* 00000480 "UFA.._DI" */ 43.637 + 0x53,0x00,0x7D,0x50,0x49,0x52,0x43,0x0A, /* 00000488 "S.}PIRC." */ 43.638 + 0x80,0x50,0x49,0x52,0x43,0x14,0x1A,0x5F, /* 00000490 ".PIRC.._" */ 43.639 + 0x43,0x52,0x53,0x00,0x7B,0x50,0x49,0x52, /* 00000498 "CRS.{PIR" */ 43.640 + 0x43,0x0A,0x0F,0x60,0x79,0x01,0x60,0x49, /* 000004A0 "C..`y.`I" */ 43.641 + 0x52,0x51,0x56,0xA4,0x42,0x55,0x46,0x42, /* 000004A8 "RQV.BUFB" */ 43.642 + 0x14,0x1B,0x5F,0x53,0x52,0x53,0x01,0x8B, /* 000004B0 ".._SRS.." */ 43.643 + 0x68,0x01,0x49,0x52,0x51,0x31,0x82,0x49, /* 000004B8 "h.IRQ1.I" */ 43.644 + 0x52,0x51,0x31,0x60,0x76,0x60,0x70,0x60, /* 000004C0 "RQ1`v`p`" */ 43.645 + 0x50,0x49,0x52,0x43,0x5B,0x82,0x49,0x08, /* 000004C8 "PIRC[.I." */ 43.646 + 0x4C,0x4E,0x4B,0x44,0x08,0x5F,0x48,0x49, /* 000004D0 "LNKD._HI" */ 43.647 + 0x44,0x0C,0x41,0xD0,0x0C,0x0F,0x08,0x5F, /* 000004D8 "D.A...._" */ 43.648 + 0x55,0x49,0x44,0x0A,0x04,0x14,0x1C,0x5F, /* 000004E0 "UID...._" */ 43.649 + 0x53,0x54,0x41,0x00,0x7B,0x50,0x49,0x52, /* 000004E8 "STA.{PIR" */ 43.650 + 0x44,0x0A,0x80,0x60,0xA0,0x08,0x93,0x60, /* 000004F0 "D..`...`" */ 43.651 + 0x0A,0x80,0xA4,0x0A,0x09,0xA1,0x04,0xA4, /* 000004F8 "........" */ 43.652 + 0x0A,0x0B,0x14,0x0B,0x5F,0x50,0x52,0x53, /* 00000500 "...._PRS" */ 43.653 + 0x00,0xA4,0x42,0x55,0x46,0x41,0x14,0x11, /* 00000508 "..BUFA.." */ 43.654 + 0x5F,0x44,0x49,0x53,0x00,0x7D,0x50,0x49, /* 00000510 "_DIS.}PI" */ 43.655 + 0x52,0x44,0x0A,0x80,0x50,0x49,0x52,0x44, /* 00000518 "RD..PIRD" */ 43.656 + 0x14,0x1A,0x5F,0x43,0x52,0x53,0x00,0x7B, /* 00000520 ".._CRS.{" */ 43.657 + 0x50,0x49,0x52,0x44,0x0A,0x0F,0x60,0x79, /* 00000528 "PIRD..`y" */ 43.658 + 0x01,0x60,0x49,0x52,0x51,0x56,0xA4,0x42, /* 00000530 ".`IRQV.B" */ 43.659 + 0x55,0x46,0x42,0x14,0x1B,0x5F,0x53,0x52, /* 00000538 "UFB.._SR" */ 43.660 + 0x53,0x01,0x8B,0x68,0x01,0x49,0x52,0x51, /* 00000540 "S..h.IRQ" */ 43.661 + 0x31,0x82,0x49,0x52,0x51,0x31,0x60,0x76, /* 00000548 "1.IRQ1`v" */ 43.662 + 0x60,0x70,0x60,0x50,0x49,0x52,0x44,0x5B, /* 00000550 "`p`PIRD[" */ 43.663 + 0x82,0x44,0x05,0x48,0x50,0x45,0x54,0x08, /* 00000558 ".D.HPET." */ 43.664 + 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x01, /* 00000560 "_HID.A.." */ 43.665 + 0x03,0x08,0x5F,0x55,0x49,0x44,0x00,0x14, /* 00000568 ".._UID.." */ 43.666 + 0x18,0x5F,0x53,0x54,0x41,0x00,0xA0,0x0C, /* 00000570 "._STA..." */ 43.667 + 0x93,0x5E,0x5E,0x5E,0x48,0x50,0x45,0x54, /* 00000578 ".^^^HPET" */ 43.668 + 0x00,0xA4,0x00,0xA1,0x04,0xA4,0x0A,0x0F, /* 00000580 "........" */ 43.669 + 0x08,0x5F,0x43,0x52,0x53,0x11,0x1F,0x0A, /* 00000588 "._CRS..." */ 43.670 + 0x1C,0x87,0x17,0x00,0x00,0x0D,0x01,0x00, /* 00000590 "........" */ 43.671 + 0x00,0x00,0x00,0x00,0x00,0xD0,0xFE,0xFF, /* 00000598 "........" */ 43.672 + 0x03,0xD0,0xFE,0x00,0x00,0x00,0x00,0x00, /* 000005A0 "........" */ 43.673 + 0x04,0x00,0x00,0x79,0x00,0x14,0x16,0x5F, /* 000005A8 "...y..._" */ 43.674 + 0x50,0x52,0x54,0x00,0xA0,0x0A,0x50,0x49, /* 000005B0 "PRT...PI" */ 43.675 + 0x43,0x44,0xA4,0x50,0x52,0x54,0x41,0xA4, /* 000005B8 "CD.PRTA." */ 43.676 + 0x50,0x52,0x54,0x50,0x08,0x50,0x52,0x54, /* 000005C0 "PRTP.PRT" */ 43.677 + 0x50,0x12,0x49,0x70,0x7C,0x12,0x0D,0x04, /* 000005C8 "P.Ip|..." */ 43.678 + 0x0C,0xFF,0xFF,0x01,0x00,0x00,0x4C,0x4E, /* 000005D0 "......LN" */ 43.679 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000005D8 "KB......" */ 43.680 + 0xFF,0x01,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 000005E0 "....LNKC" */ 43.681 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x01, /* 000005E8 "........" */ 43.682 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 000005F0 "...LNKD." */ 43.683 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x01,0x00, /* 000005F8 "........" */ 43.684 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000600 "..LNKA.." */ 43.685 + 0x0D,0x04,0x0C,0xFF,0xFF,0x02,0x00,0x00, /* 00000608 "........" */ 43.686 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 00000610 "LNKC...." */ 43.687 + 0x0C,0xFF,0xFF,0x02,0x00,0x01,0x4C,0x4E, /* 00000618 "......LN" */ 43.688 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000620 "KD......" */ 43.689 + 0xFF,0x02,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000628 ".....LNK" */ 43.690 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000630 "A......." */ 43.691 + 0x02,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 00000638 "....LNKB" */ 43.692 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x03, /* 00000640 "........" */ 43.693 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000648 "..LNKD.." */ 43.694 + 0x0D,0x04,0x0C,0xFF,0xFF,0x03,0x00,0x01, /* 00000650 "........" */ 43.695 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 00000658 "LNKA...." */ 43.696 + 0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x02,0x4C, /* 00000660 ".......L" */ 43.697 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000668 "NKB....." */ 43.698 + 0xFF,0xFF,0x03,0x00,0x0A,0x03,0x4C,0x4E, /* 00000670 "......LN" */ 43.699 + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000678 "KC......" */ 43.700 + 0xFF,0x04,0x00,0x00,0x4C,0x4E,0x4B,0x41, /* 00000680 "....LNKA" */ 43.701 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x04, /* 00000688 "........" */ 43.702 + 0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000690 "..LNKB.." */ 43.703 + 0x0E,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A, /* 00000698 "........" */ 43.704 + 0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E, /* 000006A0 ".LNKC..." */ 43.705 + 0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A,0x03, /* 000006A8 "........" */ 43.706 + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 000006B0 "LNKD...." */ 43.707 + 0x0C,0xFF,0xFF,0x05,0x00,0x00,0x4C,0x4E, /* 000006B8 "......LN" */ 43.708 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000006C0 "KB......" */ 43.709 + 0xFF,0x05,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 000006C8 "....LNKC" */ 43.710 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x05, /* 000006D0 "........" */ 43.711 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 000006D8 "...LNKD." */ 43.712 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x05,0x00, /* 000006E0 "........" */ 43.713 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 000006E8 "..LNKA.." */ 43.714 + 0x0D,0x04,0x0C,0xFF,0xFF,0x06,0x00,0x00, /* 000006F0 "........" */ 43.715 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 000006F8 "LNKC...." */ 43.716 + 0x0C,0xFF,0xFF,0x06,0x00,0x01,0x4C,0x4E, /* 00000700 "......LN" */ 43.717 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000708 "KD......" */ 43.718 + 0xFF,0x06,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000710 ".....LNK" */ 43.719 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000718 "A......." */ 43.720 + 0x06,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 00000720 "....LNKB" */ 43.721 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x07, /* 00000728 "........" */ 43.722 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000730 "..LNKD.." */ 43.723 + 0x0D,0x04,0x0C,0xFF,0xFF,0x07,0x00,0x01, /* 00000738 "........" */ 43.724 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 00000740 "LNKA...." */ 43.725 + 0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x02,0x4C, /* 00000748 ".......L" */ 43.726 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000750 "NKB....." */ 43.727 + 0xFF,0xFF,0x07,0x00,0x0A,0x03,0x4C,0x4E, /* 00000758 "......LN" */ 43.728 + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000760 "KC......" */ 43.729 + 0xFF,0x08,0x00,0x00,0x4C,0x4E,0x4B,0x41, /* 00000768 "....LNKA" */ 43.730 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x08, /* 00000770 "........" */ 43.731 + 0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000778 "..LNKB.." */ 43.732 + 0x0E,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A, /* 00000780 "........" */ 43.733 + 0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E, /* 00000788 ".LNKC..." */ 43.734 + 0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A,0x03, /* 00000790 "........" */ 43.735 + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000798 "LNKD...." */ 43.736 + 0x0C,0xFF,0xFF,0x09,0x00,0x00,0x4C,0x4E, /* 000007A0 "......LN" */ 43.737 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 000007A8 "KB......" */ 43.738 + 0xFF,0x09,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 000007B0 "....LNKC" */ 43.739 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x09, /* 000007B8 "........" */ 43.740 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 000007C0 "...LNKD." */ 43.741 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x09,0x00, /* 000007C8 "........" */ 43.742 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 000007D0 "..LNKA.." */ 43.743 + 0x0D,0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x00, /* 000007D8 "........" */ 43.744 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 000007E0 "LNKC...." */ 43.745 + 0x0C,0xFF,0xFF,0x0A,0x00,0x01,0x4C,0x4E, /* 000007E8 "......LN" */ 43.746 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 000007F0 "KD......" */ 43.747 + 0xFF,0x0A,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 000007F8 ".....LNK" */ 43.748 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000800 "A......." */ 43.749 + 0x0A,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 00000808 "....LNKB" */ 43.750 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0B, /* 00000810 "........" */ 43.751 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000818 "..LNKD.." */ 43.752 + 0x0D,0x04,0x0C,0xFF,0xFF,0x0B,0x00,0x01, /* 00000820 "........" */ 43.753 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 00000828 "LNKA...." */ 43.754 + 0x0C,0xFF,0xFF,0x0B,0x00,0x0A,0x02,0x4C, /* 00000830 ".......L" */ 43.755 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000838 "NKB....." */ 43.756 + 0xFF,0xFF,0x0B,0x00,0x0A,0x03,0x4C,0x4E, /* 00000840 "......LN" */ 43.757 + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000848 "KC......" */ 43.758 + 0xFF,0x0C,0x00,0x00,0x4C,0x4E,0x4B,0x41, /* 00000850 "....LNKA" */ 43.759 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0C, /* 00000858 "........" */ 43.760 + 0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000860 "..LNKB.." */ 43.761 + 0x0E,0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A, /* 00000868 "........" */ 43.762 + 0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E, /* 00000870 ".LNKC..." */ 43.763 + 0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A,0x03, /* 00000878 "........" */ 43.764 + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000880 "LNKD...." */ 43.765 + 0x0C,0xFF,0xFF,0x0D,0x00,0x00,0x4C,0x4E, /* 00000888 "......LN" */ 43.766 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000890 "KB......" */ 43.767 + 0xFF,0x0D,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 00000898 "....LNKC" */ 43.768 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0D, /* 000008A0 "........" */ 43.769 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 000008A8 "...LNKD." */ 43.770 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x0D,0x00, /* 000008B0 "........" */ 43.771 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 000008B8 "..LNKA.." */ 43.772 + 0x0D,0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x00, /* 000008C0 "........" */ 43.773 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 000008C8 "LNKC...." */ 43.774 + 0x0C,0xFF,0xFF,0x0E,0x00,0x01,0x4C,0x4E, /* 000008D0 "......LN" */ 43.775 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 000008D8 "KD......" */ 43.776 + 0xFF,0x0E,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 000008E0 ".....LNK" */ 43.777 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 000008E8 "A......." */ 43.778 + 0x0E,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 000008F0 "....LNKB" */ 43.779 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x0F, /* 000008F8 "........" */ 43.780 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000900 "..LNKD.." */ 43.781 + 0x0D,0x04,0x0C,0xFF,0xFF,0x0F,0x00,0x01, /* 00000908 "........" */ 43.782 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 00000910 "LNKA...." */ 43.783 + 0x0C,0xFF,0xFF,0x0F,0x00,0x0A,0x02,0x4C, /* 00000918 ".......L" */ 43.784 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000920 "NKB....." */ 43.785 + 0xFF,0xFF,0x0F,0x00,0x0A,0x03,0x4C,0x4E, /* 00000928 "......LN" */ 43.786 + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000930 "KC......" */ 43.787 + 0xFF,0x10,0x00,0x00,0x4C,0x4E,0x4B,0x41, /* 00000938 "....LNKA" */ 43.788 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x10, /* 00000940 "........" */ 43.789 + 0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000948 "..LNKB.." */ 43.790 + 0x0E,0x04,0x0C,0xFF,0xFF,0x10,0x00,0x0A, /* 00000950 "........" */ 43.791 + 0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E, /* 00000958 ".LNKC..." */ 43.792 + 0x04,0x0C,0xFF,0xFF,0x10,0x00,0x0A,0x03, /* 00000960 "........" */ 43.793 + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000968 "LNKD...." */ 43.794 + 0x0C,0xFF,0xFF,0x11,0x00,0x00,0x4C,0x4E, /* 00000970 "......LN" */ 43.795 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000978 "KB......" */ 43.796 + 0xFF,0x11,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 00000980 "....LNKC" */ 43.797 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x11, /* 00000988 "........" */ 43.798 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 00000990 "...LNKD." */ 43.799 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x11,0x00, /* 00000998 "........" */ 43.800 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 000009A0 "..LNKA.." */ 43.801 + 0x0D,0x04,0x0C,0xFF,0xFF,0x12,0x00,0x00, /* 000009A8 "........" */ 43.802 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 000009B0 "LNKC...." */ 43.803 + 0x0C,0xFF,0xFF,0x12,0x00,0x01,0x4C,0x4E, /* 000009B8 "......LN" */ 43.804 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 000009C0 "KD......" */ 43.805 + 0xFF,0x12,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 000009C8 ".....LNK" */ 43.806 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 000009D0 "A......." */ 43.807 + 0x12,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 000009D8 "....LNKB" */ 43.808 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x13, /* 000009E0 "........" */ 43.809 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 000009E8 "..LNKD.." */ 43.810 + 0x0D,0x04,0x0C,0xFF,0xFF,0x13,0x00,0x01, /* 000009F0 "........" */ 43.811 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 000009F8 "LNKA...." */ 43.812 + 0x0C,0xFF,0xFF,0x13,0x00,0x0A,0x02,0x4C, /* 00000A00 ".......L" */ 43.813 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000A08 "NKB....." */ 43.814 + 0xFF,0xFF,0x13,0x00,0x0A,0x03,0x4C,0x4E, /* 00000A10 "......LN" */ 43.815 + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000A18 "KC......" */ 43.816 + 0xFF,0x14,0x00,0x00,0x4C,0x4E,0x4B,0x41, /* 00000A20 "....LNKA" */ 43.817 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x14, /* 00000A28 "........" */ 43.818 + 0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000A30 "..LNKB.." */ 43.819 + 0x0E,0x04,0x0C,0xFF,0xFF,0x14,0x00,0x0A, /* 00000A38 "........" */ 43.820 + 0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E, /* 00000A40 ".LNKC..." */ 43.821 + 0x04,0x0C,0xFF,0xFF,0x14,0x00,0x0A,0x03, /* 00000A48 "........" */ 43.822 + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000A50 "LNKD...." */ 43.823 + 0x0C,0xFF,0xFF,0x15,0x00,0x00,0x4C,0x4E, /* 00000A58 "......LN" */ 43.824 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000A60 "KB......" */ 43.825 + 0xFF,0x15,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 00000A68 "....LNKC" */ 43.826 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x15, /* 00000A70 "........" */ 43.827 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 00000A78 "...LNKD." */ 43.828 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x15,0x00, /* 00000A80 "........" */ 43.829 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000A88 "..LNKA.." */ 43.830 + 0x0D,0x04,0x0C,0xFF,0xFF,0x16,0x00,0x00, /* 00000A90 "........" */ 43.831 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 00000A98 "LNKC...." */ 43.832 + 0x0C,0xFF,0xFF,0x16,0x00,0x01,0x4C,0x4E, /* 00000AA0 "......LN" */ 43.833 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000AA8 "KD......" */ 43.834 + 0xFF,0x16,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000AB0 ".....LNK" */ 43.835 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000AB8 "A......." */ 43.836 + 0x16,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 00000AC0 "....LNKB" */ 43.837 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x17, /* 00000AC8 "........" */ 43.838 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000AD0 "..LNKD.." */ 43.839 + 0x0D,0x04,0x0C,0xFF,0xFF,0x17,0x00,0x01, /* 00000AD8 "........" */ 43.840 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 00000AE0 "LNKA...." */ 43.841 + 0x0C,0xFF,0xFF,0x17,0x00,0x0A,0x02,0x4C, /* 00000AE8 ".......L" */ 43.842 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000AF0 "NKB....." */ 43.843 + 0xFF,0xFF,0x17,0x00,0x0A,0x03,0x4C,0x4E, /* 00000AF8 "......LN" */ 43.844 + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000B00 "KC......" */ 43.845 + 0xFF,0x18,0x00,0x00,0x4C,0x4E,0x4B,0x41, /* 00000B08 "....LNKA" */ 43.846 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x18, /* 00000B10 "........" */ 43.847 + 0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000B18 "..LNKB.." */ 43.848 + 0x0E,0x04,0x0C,0xFF,0xFF,0x18,0x00,0x0A, /* 00000B20 "........" */ 43.849 + 0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E, /* 00000B28 ".LNKC..." */ 43.850 + 0x04,0x0C,0xFF,0xFF,0x18,0x00,0x0A,0x03, /* 00000B30 "........" */ 43.851 + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000B38 "LNKD...." */ 43.852 + 0x0C,0xFF,0xFF,0x19,0x00,0x00,0x4C,0x4E, /* 00000B40 "......LN" */ 43.853 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000B48 "KB......" */ 43.854 + 0xFF,0x19,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 00000B50 "....LNKC" */ 43.855 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x19, /* 00000B58 "........" */ 43.856 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 00000B60 "...LNKD." */ 43.857 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x19,0x00, /* 00000B68 "........" */ 43.858 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000B70 "..LNKA.." */ 43.859 + 0x0D,0x04,0x0C,0xFF,0xFF,0x1A,0x00,0x00, /* 00000B78 "........" */ 43.860 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 00000B80 "LNKC...." */ 43.861 + 0x0C,0xFF,0xFF,0x1A,0x00,0x01,0x4C,0x4E, /* 00000B88 "......LN" */ 43.862 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000B90 "KD......" */ 43.863 + 0xFF,0x1A,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000B98 ".....LNK" */ 43.864 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000BA0 "A......." */ 43.865 + 0x1A,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 00000BA8 "....LNKB" */ 43.866 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1B, /* 00000BB0 "........" */ 43.867 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000BB8 "..LNKD.." */ 43.868 + 0x0D,0x04,0x0C,0xFF,0xFF,0x1B,0x00,0x01, /* 00000BC0 "........" */ 43.869 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 00000BC8 "LNKA...." */ 43.870 + 0x0C,0xFF,0xFF,0x1B,0x00,0x0A,0x02,0x4C, /* 00000BD0 ".......L" */ 43.871 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000BD8 "NKB....." */ 43.872 + 0xFF,0xFF,0x1B,0x00,0x0A,0x03,0x4C,0x4E, /* 00000BE0 "......LN" */ 43.873 + 0x4B,0x43,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000BE8 "KC......" */ 43.874 + 0xFF,0x1C,0x00,0x00,0x4C,0x4E,0x4B,0x41, /* 00000BF0 "....LNKA" */ 43.875 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1C, /* 00000BF8 "........" */ 43.876 + 0x00,0x01,0x4C,0x4E,0x4B,0x42,0x00,0x12, /* 00000C00 "..LNKB.." */ 43.877 + 0x0E,0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x0A, /* 00000C08 "........" */ 43.878 + 0x02,0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0E, /* 00000C10 ".LNKC..." */ 43.879 + 0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x0A,0x03, /* 00000C18 "........" */ 43.880 + 0x4C,0x4E,0x4B,0x44,0x00,0x12,0x0D,0x04, /* 00000C20 "LNKD...." */ 43.881 + 0x0C,0xFF,0xFF,0x1D,0x00,0x00,0x4C,0x4E, /* 00000C28 "......LN" */ 43.882 + 0x4B,0x42,0x00,0x12,0x0D,0x04,0x0C,0xFF, /* 00000C30 "KB......" */ 43.883 + 0xFF,0x1D,0x00,0x01,0x4C,0x4E,0x4B,0x43, /* 00000C38 "....LNKC" */ 43.884 + 0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x1D, /* 00000C40 "........" */ 43.885 + 0x00,0x0A,0x02,0x4C,0x4E,0x4B,0x44,0x00, /* 00000C48 "...LNKD." */ 43.886 + 0x12,0x0E,0x04,0x0C,0xFF,0xFF,0x1D,0x00, /* 00000C50 "........" */ 43.887 + 0x0A,0x03,0x4C,0x4E,0x4B,0x41,0x00,0x12, /* 00000C58 "..LNKA.." */ 43.888 + 0x0D,0x04,0x0C,0xFF,0xFF,0x1E,0x00,0x00, /* 00000C60 "........" */ 43.889 + 0x4C,0x4E,0x4B,0x43,0x00,0x12,0x0D,0x04, /* 00000C68 "LNKC...." */ 43.890 + 0x0C,0xFF,0xFF,0x1E,0x00,0x01,0x4C,0x4E, /* 00000C70 "......LN" */ 43.891 + 0x4B,0x44,0x00,0x12,0x0E,0x04,0x0C,0xFF, /* 00000C78 "KD......" */ 43.892 + 0xFF,0x1E,0x00,0x0A,0x02,0x4C,0x4E,0x4B, /* 00000C80 ".....LNK" */ 43.893 + 0x41,0x00,0x12,0x0E,0x04,0x0C,0xFF,0xFF, /* 00000C88 "A......." */ 43.894 + 0x1E,0x00,0x0A,0x03,0x4C,0x4E,0x4B,0x42, /* 00000C90 "....LNKB" */ 43.895 + 0x00,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1F, /* 00000C98 "........" */ 43.896 + 0x00,0x00,0x4C,0x4E,0x4B,0x44,0x00,0x12, /* 00000CA0 "..LNKD.." */ 43.897 + 0x0D,0x04,0x0C,0xFF,0xFF,0x1F,0x00,0x01, /* 00000CA8 "........" */ 43.898 + 0x4C,0x4E,0x4B,0x41,0x00,0x12,0x0E,0x04, /* 00000CB0 "LNKA...." */ 43.899 + 0x0C,0xFF,0xFF,0x1F,0x00,0x0A,0x02,0x4C, /* 00000CB8 ".......L" */ 43.900 + 0x4E,0x4B,0x42,0x00,0x12,0x0E,0x04,0x0C, /* 00000CC0 "NKB....." */ 43.901 + 0xFF,0xFF,0x1F,0x00,0x0A,0x03,0x4C,0x4E, /* 00000CC8 "......LN" */ 43.902 + 0x4B,0x43,0x00,0x08,0x50,0x52,0x54,0x41, /* 00000CD0 "KC..PRTA" */ 43.903 + 0x12,0x41,0x61,0x7C,0x12,0x0B,0x04,0x0C, /* 00000CD8 ".Aa|...." */ 43.904 + 0xFF,0xFF,0x01,0x00,0x00,0x00,0x0A,0x14, /* 00000CE0 "........" */ 43.905 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x01,0x00, /* 00000CE8 "........" */ 43.906 + 0x01,0x00,0x0A,0x15,0x12,0x0C,0x04,0x0C, /* 00000CF0 "........" */ 43.907 + 0xFF,0xFF,0x01,0x00,0x0A,0x02,0x00,0x0A, /* 00000CF8 "........" */ 43.908 + 0x16,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x01, /* 00000D00 "........" */ 43.909 + 0x00,0x0A,0x03,0x00,0x0A,0x17,0x12,0x0B, /* 00000D08 "........" */ 43.910 + 0x04,0x0C,0xFF,0xFF,0x02,0x00,0x00,0x00, /* 00000D10 "........" */ 43.911 + 0x0A,0x18,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000D18 "........" */ 43.912 + 0x02,0x00,0x01,0x00,0x0A,0x19,0x12,0x0C, /* 00000D20 "........" */ 43.913 + 0x04,0x0C,0xFF,0xFF,0x02,0x00,0x0A,0x02, /* 00000D28 "........" */ 43.914 + 0x00,0x0A,0x1A,0x12,0x0C,0x04,0x0C,0xFF, /* 00000D30 "........" */ 43.915 + 0xFF,0x02,0x00,0x0A,0x03,0x00,0x0A,0x1B, /* 00000D38 "........" */ 43.916 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x03,0x00, /* 00000D40 "........" */ 43.917 + 0x00,0x00,0x0A,0x1C,0x12,0x0B,0x04,0x0C, /* 00000D48 "........" */ 43.918 + 0xFF,0xFF,0x03,0x00,0x01,0x00,0x0A,0x1D, /* 00000D50 "........" */ 43.919 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x03,0x00, /* 00000D58 "........" */ 43.920 + 0x0A,0x02,0x00,0x0A,0x1E,0x12,0x0C,0x04, /* 00000D60 "........" */ 43.921 + 0x0C,0xFF,0xFF,0x03,0x00,0x0A,0x03,0x00, /* 00000D68 "........" */ 43.922 + 0x0A,0x1F,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000D70 "........" */ 43.923 + 0x04,0x00,0x00,0x00,0x0A,0x20,0x12,0x0B, /* 00000D78 "..... .." */ 43.924 + 0x04,0x0C,0xFF,0xFF,0x04,0x00,0x01,0x00, /* 00000D80 "........" */ 43.925 + 0x0A,0x21,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000D88 ".!......" */ 43.926 + 0x04,0x00,0x0A,0x02,0x00,0x0A,0x22,0x12, /* 00000D90 "......"." */ 43.927 + 0x0C,0x04,0x0C,0xFF,0xFF,0x04,0x00,0x0A, /* 00000D98 "........" */ 43.928 + 0x03,0x00,0x0A,0x23,0x12,0x0B,0x04,0x0C, /* 00000DA0 "...#...." */ 43.929 + 0xFF,0xFF,0x05,0x00,0x00,0x00,0x0A,0x24, /* 00000DA8 ".......$" */ 43.930 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x05,0x00, /* 00000DB0 "........" */ 43.931 + 0x01,0x00,0x0A,0x25,0x12,0x0C,0x04,0x0C, /* 00000DB8 "...%...." */ 43.932 + 0xFF,0xFF,0x05,0x00,0x0A,0x02,0x00,0x0A, /* 00000DC0 "........" */ 43.933 + 0x26,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x05, /* 00000DC8 "&......." */ 43.934 + 0x00,0x0A,0x03,0x00,0x0A,0x27,0x12,0x0B, /* 00000DD0 ".....'.." */ 43.935 + 0x04,0x0C,0xFF,0xFF,0x06,0x00,0x00,0x00, /* 00000DD8 "........" */ 43.936 + 0x0A,0x28,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000DE0 ".(......" */ 43.937 + 0x06,0x00,0x01,0x00,0x0A,0x29,0x12,0x0C, /* 00000DE8 ".....).." */ 43.938 + 0x04,0x0C,0xFF,0xFF,0x06,0x00,0x0A,0x02, /* 00000DF0 "........" */ 43.939 + 0x00,0x0A,0x2A,0x12,0x0C,0x04,0x0C,0xFF, /* 00000DF8 "..*....." */ 43.940 + 0xFF,0x06,0x00,0x0A,0x03,0x00,0x0A,0x2B, /* 00000E00 ".......+" */ 43.941 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x07,0x00, /* 00000E08 "........" */ 43.942 + 0x00,0x00,0x0A,0x2C,0x12,0x0B,0x04,0x0C, /* 00000E10 "...,...." */ 43.943 + 0xFF,0xFF,0x07,0x00,0x01,0x00,0x0A,0x2D, /* 00000E18 ".......-" */ 43.944 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x07,0x00, /* 00000E20 "........" */ 43.945 + 0x0A,0x02,0x00,0x0A,0x2E,0x12,0x0C,0x04, /* 00000E28 "........" */ 43.946 + 0x0C,0xFF,0xFF,0x07,0x00,0x0A,0x03,0x00, /* 00000E30 "........" */ 43.947 + 0x0A,0x2F,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000E38 "./......" */ 43.948 + 0x08,0x00,0x00,0x00,0x0A,0x11,0x12,0x0B, /* 00000E40 "........" */ 43.949 + 0x04,0x0C,0xFF,0xFF,0x08,0x00,0x01,0x00, /* 00000E48 "........" */ 43.950 + 0x0A,0x12,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000E50 "........" */ 43.951 + 0x08,0x00,0x0A,0x02,0x00,0x0A,0x13,0x12, /* 00000E58 "........" */ 43.952 + 0x0C,0x04,0x0C,0xFF,0xFF,0x08,0x00,0x0A, /* 00000E60 "........" */ 43.953 + 0x03,0x00,0x0A,0x14,0x12,0x0B,0x04,0x0C, /* 00000E68 "........" */ 43.954 + 0xFF,0xFF,0x09,0x00,0x00,0x00,0x0A,0x15, /* 00000E70 "........" */ 43.955 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x09,0x00, /* 00000E78 "........" */ 43.956 + 0x01,0x00,0x0A,0x16,0x12,0x0C,0x04,0x0C, /* 00000E80 "........" */ 43.957 + 0xFF,0xFF,0x09,0x00,0x0A,0x02,0x00,0x0A, /* 00000E88 "........" */ 43.958 + 0x17,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x09, /* 00000E90 "........" */ 43.959 + 0x00,0x0A,0x03,0x00,0x0A,0x18,0x12,0x0B, /* 00000E98 "........" */ 43.960 + 0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x00,0x00, /* 00000EA0 "........" */ 43.961 + 0x0A,0x19,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000EA8 "........" */ 43.962 + 0x0A,0x00,0x01,0x00,0x0A,0x1A,0x12,0x0C, /* 00000EB0 "........" */ 43.963 + 0x04,0x0C,0xFF,0xFF,0x0A,0x00,0x0A,0x02, /* 00000EB8 "........" */ 43.964 + 0x00,0x0A,0x1B,0x12,0x0C,0x04,0x0C,0xFF, /* 00000EC0 "........" */ 43.965 + 0xFF,0x0A,0x00,0x0A,0x03,0x00,0x0A,0x1C, /* 00000EC8 "........" */ 43.966 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0B,0x00, /* 00000ED0 "........" */ 43.967 + 0x00,0x00,0x0A,0x1D,0x12,0x0B,0x04,0x0C, /* 00000ED8 "........" */ 43.968 + 0xFF,0xFF,0x0B,0x00,0x01,0x00,0x0A,0x1E, /* 00000EE0 "........" */ 43.969 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0B,0x00, /* 00000EE8 "........" */ 43.970 + 0x0A,0x02,0x00,0x0A,0x1F,0x12,0x0C,0x04, /* 00000EF0 "........" */ 43.971 + 0x0C,0xFF,0xFF,0x0B,0x00,0x0A,0x03,0x00, /* 00000EF8 "........" */ 43.972 + 0x0A,0x20,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000F00 ". ......" */ 43.973 + 0x0C,0x00,0x00,0x00,0x0A,0x21,0x12,0x0B, /* 00000F08 ".....!.." */ 43.974 + 0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x01,0x00, /* 00000F10 "........" */ 43.975 + 0x0A,0x22,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000F18 "."......" */ 43.976 + 0x0C,0x00,0x0A,0x02,0x00,0x0A,0x23,0x12, /* 00000F20 "......#." */ 43.977 + 0x0C,0x04,0x0C,0xFF,0xFF,0x0C,0x00,0x0A, /* 00000F28 "........" */ 43.978 + 0x03,0x00,0x0A,0x24,0x12,0x0B,0x04,0x0C, /* 00000F30 "...$...." */ 43.979 + 0xFF,0xFF,0x0D,0x00,0x00,0x00,0x0A,0x25, /* 00000F38 ".......%" */ 43.980 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0D,0x00, /* 00000F40 "........" */ 43.981 + 0x01,0x00,0x0A,0x26,0x12,0x0C,0x04,0x0C, /* 00000F48 "...&...." */ 43.982 + 0xFF,0xFF,0x0D,0x00,0x0A,0x02,0x00,0x0A, /* 00000F50 "........" */ 43.983 + 0x27,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0D, /* 00000F58 "'......." */ 43.984 + 0x00,0x0A,0x03,0x00,0x0A,0x28,0x12,0x0B, /* 00000F60 ".....(.." */ 43.985 + 0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x00,0x00, /* 00000F68 "........" */ 43.986 + 0x0A,0x29,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000F70 ".)......" */ 43.987 + 0x0E,0x00,0x01,0x00,0x0A,0x2A,0x12,0x0C, /* 00000F78 ".....*.." */ 43.988 + 0x04,0x0C,0xFF,0xFF,0x0E,0x00,0x0A,0x02, /* 00000F80 "........" */ 43.989 + 0x00,0x0A,0x2B,0x12,0x0C,0x04,0x0C,0xFF, /* 00000F88 "..+....." */ 43.990 + 0xFF,0x0E,0x00,0x0A,0x03,0x00,0x0A,0x2C, /* 00000F90 ".......," */ 43.991 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x0F,0x00, /* 00000F98 "........" */ 43.992 + 0x00,0x00,0x0A,0x2D,0x12,0x0B,0x04,0x0C, /* 00000FA0 "...-...." */ 43.993 + 0xFF,0xFF,0x0F,0x00,0x01,0x00,0x0A,0x2E, /* 00000FA8 "........" */ 43.994 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x0F,0x00, /* 00000FB0 "........" */ 43.995 + 0x0A,0x02,0x00,0x0A,0x2F,0x12,0x0C,0x04, /* 00000FB8 "..../..." */ 43.996 + 0x0C,0xFF,0xFF,0x0F,0x00,0x0A,0x03,0x00, /* 00000FC0 "........" */ 43.997 + 0x0A,0x10,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00000FC8 "........" */ 43.998 + 0x10,0x00,0x00,0x00,0x0A,0x12,0x12,0x0B, /* 00000FD0 "........" */ 43.999 + 0x04,0x0C,0xFF,0xFF,0x10,0x00,0x01,0x00, /* 00000FD8 "........" */ 43.1000 + 0x0A,0x13,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00000FE0 "........" */ 43.1001 + 0x10,0x00,0x0A,0x02,0x00,0x0A,0x14,0x12, /* 00000FE8 "........" */ 43.1002 + 0x0C,0x04,0x0C,0xFF,0xFF,0x10,0x00,0x0A, /* 00000FF0 "........" */ 43.1003 + 0x03,0x00,0x0A,0x15,0x12,0x0B,0x04,0x0C, /* 00000FF8 "........" */ 43.1004 + 0xFF,0xFF,0x11,0x00,0x00,0x00,0x0A,0x16, /* 00001000 "........" */ 43.1005 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x11,0x00, /* 00001008 "........" */ 43.1006 + 0x01,0x00,0x0A,0x17,0x12,0x0C,0x04,0x0C, /* 00001010 "........" */ 43.1007 + 0xFF,0xFF,0x11,0x00,0x0A,0x02,0x00,0x0A, /* 00001018 "........" */ 43.1008 + 0x18,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x11, /* 00001020 "........" */ 43.1009 + 0x00,0x0A,0x03,0x00,0x0A,0x19,0x12,0x0B, /* 00001028 "........" */ 43.1010 + 0x04,0x0C,0xFF,0xFF,0x12,0x00,0x00,0x00, /* 00001030 "........" */ 43.1011 + 0x0A,0x1A,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00001038 "........" */ 43.1012 + 0x12,0x00,0x01,0x00,0x0A,0x1B,0x12,0x0C, /* 00001040 "........" */ 43.1013 + 0x04,0x0C,0xFF,0xFF,0x12,0x00,0x0A,0x02, /* 00001048 "........" */ 43.1014 + 0x00,0x0A,0x1C,0x12,0x0C,0x04,0x0C,0xFF, /* 00001050 "........" */ 43.1015 + 0xFF,0x12,0x00,0x0A,0x03,0x00,0x0A,0x1D, /* 00001058 "........" */ 43.1016 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x13,0x00, /* 00001060 "........" */ 43.1017 + 0x00,0x00,0x0A,0x1E,0x12,0x0B,0x04,0x0C, /* 00001068 "........" */ 43.1018 + 0xFF,0xFF,0x13,0x00,0x01,0x00,0x0A,0x1F, /* 00001070 "........" */ 43.1019 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x13,0x00, /* 00001078 "........" */ 43.1020 + 0x0A,0x02,0x00,0x0A,0x20,0x12,0x0C,0x04, /* 00001080 ".... ..." */ 43.1021 + 0x0C,0xFF,0xFF,0x13,0x00,0x0A,0x03,0x00, /* 00001088 "........" */ 43.1022 + 0x0A,0x21,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00001090 ".!......" */ 43.1023 + 0x14,0x00,0x00,0x00,0x0A,0x22,0x12,0x0B, /* 00001098 ".....".." */ 43.1024 + 0x04,0x0C,0xFF,0xFF,0x14,0x00,0x01,0x00, /* 000010A0 "........" */ 43.1025 + 0x0A,0x23,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 000010A8 ".#......" */ 43.1026 + 0x14,0x00,0x0A,0x02,0x00,0x0A,0x24,0x12, /* 000010B0 "......$." */ 43.1027 + 0x0C,0x04,0x0C,0xFF,0xFF,0x14,0x00,0x0A, /* 000010B8 "........" */ 43.1028 + 0x03,0x00,0x0A,0x25,0x12,0x0B,0x04,0x0C, /* 000010C0 "...%...." */ 43.1029 + 0xFF,0xFF,0x15,0x00,0x00,0x00,0x0A,0x26, /* 000010C8 ".......&" */ 43.1030 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x15,0x00, /* 000010D0 "........" */ 43.1031 + 0x01,0x00,0x0A,0x27,0x12,0x0C,0x04,0x0C, /* 000010D8 "...'...." */ 43.1032 + 0xFF,0xFF,0x15,0x00,0x0A,0x02,0x00,0x0A, /* 000010E0 "........" */ 43.1033 + 0x28,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x15, /* 000010E8 "(......." */ 43.1034 + 0x00,0x0A,0x03,0x00,0x0A,0x29,0x12,0x0B, /* 000010F0 ".....).." */ 43.1035 + 0x04,0x0C,0xFF,0xFF,0x16,0x00,0x00,0x00, /* 000010F8 "........" */ 43.1036 + 0x0A,0x2A,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00001100 ".*......" */ 43.1037 + 0x16,0x00,0x01,0x00,0x0A,0x2B,0x12,0x0C, /* 00001108 ".....+.." */ 43.1038 + 0x04,0x0C,0xFF,0xFF,0x16,0x00,0x0A,0x02, /* 00001110 "........" */ 43.1039 + 0x00,0x0A,0x2C,0x12,0x0C,0x04,0x0C,0xFF, /* 00001118 "..,....." */ 43.1040 + 0xFF,0x16,0x00,0x0A,0x03,0x00,0x0A,0x2D, /* 00001120 ".......-" */ 43.1041 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x17,0x00, /* 00001128 "........" */ 43.1042 + 0x00,0x00,0x0A,0x2E,0x12,0x0B,0x04,0x0C, /* 00001130 "........" */ 43.1043 + 0xFF,0xFF,0x17,0x00,0x01,0x00,0x0A,0x2F, /* 00001138 "......./" */ 43.1044 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x17,0x00, /* 00001140 "........" */ 43.1045 + 0x0A,0x02,0x00,0x0A,0x10,0x12,0x0C,0x04, /* 00001148 "........" */ 43.1046 + 0x0C,0xFF,0xFF,0x17,0x00,0x0A,0x03,0x00, /* 00001150 "........" */ 43.1047 + 0x0A,0x11,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00001158 "........" */ 43.1048 + 0x18,0x00,0x00,0x00,0x0A,0x13,0x12,0x0B, /* 00001160 "........" */ 43.1049 + 0x04,0x0C,0xFF,0xFF,0x18,0x00,0x01,0x00, /* 00001168 "........" */ 43.1050 + 0x0A,0x14,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00001170 "........" */ 43.1051 + 0x18,0x00,0x0A,0x02,0x00,0x0A,0x15,0x12, /* 00001178 "........" */ 43.1052 + 0x0C,0x04,0x0C,0xFF,0xFF,0x18,0x00,0x0A, /* 00001180 "........" */ 43.1053 + 0x03,0x00,0x0A,0x16,0x12,0x0B,0x04,0x0C, /* 00001188 "........" */ 43.1054 + 0xFF,0xFF,0x19,0x00,0x00,0x00,0x0A,0x17, /* 00001190 "........" */ 43.1055 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x19,0x00, /* 00001198 "........" */ 43.1056 + 0x01,0x00,0x0A,0x18,0x12,0x0C,0x04,0x0C, /* 000011A0 "........" */ 43.1057 + 0xFF,0xFF,0x19,0x00,0x0A,0x02,0x00,0x0A, /* 000011A8 "........" */ 43.1058 + 0x19,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x19, /* 000011B0 "........" */ 43.1059 + 0x00,0x0A,0x03,0x00,0x0A,0x1A,0x12,0x0B, /* 000011B8 "........" */ 43.1060 + 0x04,0x0C,0xFF,0xFF,0x1A,0x00,0x00,0x00, /* 000011C0 "........" */ 43.1061 + 0x0A,0x1B,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 000011C8 "........" */ 43.1062 + 0x1A,0x00,0x01,0x00,0x0A,0x1C,0x12,0x0C, /* 000011D0 "........" */ 43.1063 + 0x04,0x0C,0xFF,0xFF,0x1A,0x00,0x0A,0x02, /* 000011D8 "........" */ 43.1064 + 0x00,0x0A,0x1D,0x12,0x0C,0x04,0x0C,0xFF, /* 000011E0 "........" */ 43.1065 + 0xFF,0x1A,0x00,0x0A,0x03,0x00,0x0A,0x1E, /* 000011E8 "........" */ 43.1066 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x1B,0x00, /* 000011F0 "........" */ 43.1067 + 0x00,0x00,0x0A,0x1F,0x12,0x0B,0x04,0x0C, /* 000011F8 "........" */ 43.1068 + 0xFF,0xFF,0x1B,0x00,0x01,0x00,0x0A,0x20, /* 00001200 "....... " */ 43.1069 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x1B,0x00, /* 00001208 "........" */ 43.1070 + 0x0A,0x02,0x00,0x0A,0x21,0x12,0x0C,0x04, /* 00001210 "....!..." */ 43.1071 + 0x0C,0xFF,0xFF,0x1B,0x00,0x0A,0x03,0x00, /* 00001218 "........" */ 43.1072 + 0x0A,0x22,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00001220 "."......" */ 43.1073 + 0x1C,0x00,0x00,0x00,0x0A,0x23,0x12,0x0B, /* 00001228 ".....#.." */ 43.1074 + 0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x01,0x00, /* 00001230 "........" */ 43.1075 + 0x0A,0x24,0x12,0x0C,0x04,0x0C,0xFF,0xFF, /* 00001238 ".$......" */ 43.1076 + 0x1C,0x00,0x0A,0x02,0x00,0x0A,0x25,0x12, /* 00001240 "......%." */ 43.1077 + 0x0C,0x04,0x0C,0xFF,0xFF,0x1C,0x00,0x0A, /* 00001248 "........" */ 43.1078 + 0x03,0x00,0x0A,0x26,0x12,0x0B,0x04,0x0C, /* 00001250 "...&...." */ 43.1079 + 0xFF,0xFF,0x1D,0x00,0x00,0x00,0x0A,0x27, /* 00001258 ".......'" */ 43.1080 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x1D,0x00, /* 00001260 "........" */ 43.1081 + 0x01,0x00,0x0A,0x28,0x12,0x0C,0x04,0x0C, /* 00001268 "...(...." */ 43.1082 + 0xFF,0xFF,0x1D,0x00,0x0A,0x02,0x00,0x0A, /* 00001270 "........" */ 43.1083 + 0x29,0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x1D, /* 00001278 ")......." */ 43.1084 + 0x00,0x0A,0x03,0x00,0x0A,0x2A,0x12,0x0B, /* 00001280 ".....*.." */ 43.1085 + 0x04,0x0C,0xFF,0xFF,0x1E,0x00,0x00,0x00, /* 00001288 "........" */ 43.1086 + 0x0A,0x2B,0x12,0x0B,0x04,0x0C,0xFF,0xFF, /* 00001290 ".+......" */ 43.1087 + 0x1E,0x00,0x01,0x00,0x0A,0x2C,0x12,0x0C, /* 00001298 ".....,.." */ 43.1088 + 0x04,0x0C,0xFF,0xFF,0x1E,0x00,0x0A,0x02, /* 000012A0 "........" */ 43.1089 + 0x00,0x0A,0x2D,0x12,0x0C,0x04,0x0C,0xFF, /* 000012A8 "..-....." */ 43.1090 + 0xFF,0x1E,0x00,0x0A,0x03,0x00,0x0A,0x2E, /* 000012B0 "........" */ 43.1091 + 0x12,0x0B,0x04,0x0C,0xFF,0xFF,0x1F,0x00, /* 000012B8 "........" */ 43.1092 + 0x00,0x00,0x0A,0x2F,0x12,0x0B,0x04,0x0C, /* 000012C0 ".../...." */ 43.1093 + 0xFF,0xFF,0x1F,0x00,0x01,0x00,0x0A,0x10, /* 000012C8 "........" */ 43.1094 + 0x12,0x0C,0x04,0x0C,0xFF,0xFF,0x1F,0x00, /* 000012D0 "........" */ 43.1095 + 0x0A,0x02,0x00,0x0A,0x11,0x12,0x0C,0x04, /* 000012D8 "........" */ 43.1096 + 0x0C,0xFF,0xFF,0x1F,0x00,0x0A,0x03,0x00, /* 000012E0 "........" */ 43.1097 + 0x0A,0x12,0x5B,0x82,0x46,0x37,0x49,0x53, /* 000012E8 "..[.F7IS" */ 43.1098 + 0x41,0x5F,0x08,0x5F,0x41,0x44,0x52,0x0C, /* 000012F0 "A_._ADR." */ 43.1099 + 0x00,0x00,0x01,0x00,0x5B,0x80,0x50,0x49, /* 000012F8 "....[.PI" */ 43.1100 + 0x52,0x51,0x02,0x0A,0x60,0x0A,0x04,0x10, /* 00001300 "RQ..`..." */ 43.1101 + 0x2E,0x5C,0x00,0x5B,0x81,0x29,0x5C,0x2F, /* 00001308 ".\.[.)\/" */ 43.1102 + 0x04,0x5F,0x53,0x42,0x5F,0x50,0x43,0x49, /* 00001310 "._SB_PCI" */ 43.1103 + 0x30,0x49,0x53,0x41,0x5F,0x50,0x49,0x52, /* 00001318 "0ISA_PIR" */ 43.1104 + 0x51,0x01,0x50,0x49,0x52,0x41,0x08,0x50, /* 00001320 "Q.PIRA.P" */ 43.1105 + 0x49,0x52,0x42,0x08,0x50,0x49,0x52,0x43, /* 00001328 "IRB.PIRC" */ 43.1106 + 0x08,0x50,0x49,0x52,0x44,0x08,0x5B,0x82, /* 00001330 ".PIRD.[." */ 43.1107 + 0x46,0x0B,0x53,0x59,0x53,0x52,0x08,0x5F, /* 00001338 "F.SYSR._" */ 43.1108 + 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0C,0x02, /* 00001340 "HID.A..." */ 43.1109 + 0x08,0x5F,0x55,0x49,0x44,0x01,0x08,0x43, /* 00001348 "._UID..C" */ 43.1110 + 0x52,0x53,0x5F,0x11,0x4E,0x08,0x0A,0x8A, /* 00001350 "RS_.N..." */ 43.1111 + 0x47,0x01,0x10,0x00,0x10,0x00,0x00,0x10, /* 00001358 "G......." */ 43.1112 + 0x47,0x01,0x22,0x00,0x22,0x00,0x00,0x0C, /* 00001360 "G."."..." */ 43.1113 + 0x47,0x01,0x30,0x00,0x30,0x00,0x00,0x10, /* 00001368 "G.0.0..." */ 43.1114 + 0x47,0x01,0x44,0x00,0x44,0x00,0x00,0x1C, /* 00001370 "G.D.D..." */ 43.1115 + 0x47,0x01,0x62,0x00,0x62,0x00,0x00,0x02, /* 00001378 "G.b.b..." */ 43.1116 + 0x47,0x01,0x65,0x00,0x65,0x00,0x00,0x0B, /* 00001380 "G.e.e..." */ 43.1117 + 0x47,0x01,0x72,0x00,0x72,0x00,0x00,0x0E, /* 00001388 "G.r.r..." */ 43.1118 + 0x47,0x01,0x80,0x00,0x80,0x00,0x00,0x01, /* 00001390 "G......." */ 43.1119 + 0x47,0x01,0x84,0x00,0x84,0x00,0x00,0x03, /* 00001398 "G......." */ 43.1120 + 0x47,0x01,0x88,0x00,0x88,0x00,0x00,0x01, /* 000013A0 "G......." */ 43.1121 + 0x47,0x01,0x8C,0x00,0x8C,0x00,0x00,0x03, /* 000013A8 "G......." */ 43.1122 + 0x47,0x01,0x90,0x00,0x90,0x00,0x00,0x10, /* 000013B0 "G......." */ 43.1123 + 0x47,0x01,0xA2,0x00,0xA2,0x00,0x00,0x1C, /* 000013B8 "G......." */ 43.1124 + 0x47,0x01,0xE0,0x00,0xE0,0x00,0x00,0x10, /* 000013C0 "G......." */ 43.1125 + 0x47,0x01,0xA0,0x08,0xA0,0x08,0x00,0x04, /* 000013C8 "G......." */ 43.1126 + 0x47,0x01,0xC0,0x0C,0xC0,0x0C,0x00,0x10, /* 000013D0 "G......." */ 43.1127 + 0x47,0x01,0xD0,0x04,0xD0,0x04,0x00,0x02, /* 000013D8 "G......." */ 43.1128 + 0x79,0x00,0x14,0x0B,0x5F,0x43,0x52,0x53, /* 000013E0 "y..._CRS" */ 43.1129 + 0x00,0xA4,0x43,0x52,0x53,0x5F,0x5B,0x82, /* 000013E8 "..CRS_[." */ 43.1130 + 0x2B,0x50,0x49,0x43,0x5F,0x08,0x5F,0x48, /* 000013F0 "+PIC_._H" */ 43.1131 + 0x49,0x44,0x0B,0x41,0xD0,0x08,0x5F,0x43, /* 000013F8 "ID.A.._C" */ 43.1132 + 0x52,0x53,0x11,0x18,0x0A,0x15,0x47,0x01, /* 00001400 "RS....G." */ 43.1133 + 0x20,0x00,0x20,0x00,0x01,0x02,0x47,0x01, /* 00001408 " . ...G." */ 43.1134 + 0xA0,0x00,0xA0,0x00,0x01,0x02,0x22,0x04, /* 00001410 "......"." */ 43.1135 + 0x00,0x79,0x00,0x5B,0x82,0x47,0x05,0x44, /* 00001418 ".y.[.G.D" */ 43.1136 + 0x4D,0x41,0x30,0x08,0x5F,0x48,0x49,0x44, /* 00001420 "MA0._HID" */ 43.1137 + 0x0C,0x41,0xD0,0x02,0x00,0x08,0x5F,0x43, /* 00001428 ".A...._C" */ 43.1138 + 0x52,0x53,0x11,0x41,0x04,0x0A,0x3D,0x2A, /* 00001430 "RS.A..=*" */ 43.1139 + 0x10,0x04,0x47,0x01,0x00,0x00,0x00,0x00, /* 00001438 "..G....." */ 43.1140 + 0x00,0x10,0x47,0x01,0x81,0x00,0x81,0x00, /* 00001440 "..G....." */ 43.1141 + 0x00,0x03,0x47,0x01,0x87,0x00,0x87,0x00, /* 00001448 "..G....." */ 43.1142 + 0x00,0x01,0x47,0x01,0x89,0x00,0x89,0x00, /* 00001450 "..G....." */ 43.1143 + 0x00,0x03,0x47,0x01,0x8F,0x00,0x8F,0x00, /* 00001458 "..G....." */ 43.1144 + 0x00,0x01,0x47,0x01,0xC0,0x00,0xC0,0x00, /* 00001460 "..G....." */ 43.1145 + 0x00,0x20,0x47,0x01,0x80,0x04,0x80,0x04, /* 00001468 ". G....." */ 43.1146 + 0x00,0x10,0x79,0x00,0x5B,0x82,0x25,0x54, /* 00001470 "..y.[.%T" */ 43.1147 + 0x4D,0x52,0x5F,0x08,0x5F,0x48,0x49,0x44, /* 00001478 "MR_._HID" */ 43.1148 + 0x0C,0x41,0xD0,0x01,0x00,0x08,0x5F,0x43, /* 00001480 ".A...._C" */ 43.1149 + 0x52,0x53,0x11,0x10,0x0A,0x0D,0x47,0x01, /* 00001488 "RS....G." */ 43.1150 + 0x40,0x00,0x40,0x00,0x00,0x04,0x22,0x01, /* 00001490 "@.@..."." */ 43.1151 + 0x00,0x79,0x00,0x5B,0x82,0x25,0x52,0x54, /* 00001498 ".y.[.%RT" */ 43.1152 + 0x43,0x5F,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 000014A0 "C_._HID." */ 43.1153 + 0x41,0xD0,0x0B,0x00,0x08,0x5F,0x43,0x52, /* 000014A8 "A...._CR" */ 43.1154 + 0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0x70, /* 000014B0 "S....G.p" */ 43.1155 + 0x00,0x70,0x00,0x00,0x02,0x22,0x00,0x01, /* 000014B8 ".p...".." */ 43.1156 + 0x79,0x00,0x5B,0x82,0x22,0x53,0x50,0x4B, /* 000014C0 "y.[."SPK" */ 43.1157 + 0x52,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 000014C8 "R._HID.A" */ 43.1158 + 0xD0,0x08,0x00,0x08,0x5F,0x43,0x52,0x53, /* 000014D0 "...._CRS" */ 43.1159 + 0x11,0x0D,0x0A,0x0A,0x47,0x01,0x61,0x00, /* 000014D8 "....G.a." */ 43.1160 + 0x61,0x00,0x00,0x01,0x79,0x00,0x5B,0x82, /* 000014E0 "a...y.[." */ 43.1161 + 0x31,0x50,0x53,0x32,0x4D,0x08,0x5F,0x48, /* 000014E8 "1PS2M._H" */ 43.1162 + 0x49,0x44,0x0C,0x41,0xD0,0x0F,0x13,0x08, /* 000014F0 "ID.A...." */ 43.1163 + 0x5F,0x43,0x49,0x44,0x0C,0x41,0xD0,0x0F, /* 000014F8 "_CID.A.." */ 43.1164 + 0x13,0x14,0x09,0x5F,0x53,0x54,0x41,0x00, /* 00001500 "..._STA." */ 43.1165 + 0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53, /* 00001508 "...._CRS" */ 43.1166 + 0x11,0x08,0x0A,0x05,0x22,0x00,0x10,0x79, /* 00001510 "...."..y" */ 43.1167 + 0x00,0x5B,0x82,0x42,0x04,0x50,0x53,0x32, /* 00001518 ".[.B.PS2" */ 43.1168 + 0x4B,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00001520 "K._HID.A" */ 43.1169 + 0xD0,0x03,0x03,0x08,0x5F,0x43,0x49,0x44, /* 00001528 "...._CID" */ 43.1170 + 0x0C,0x41,0xD0,0x03,0x0B,0x14,0x09,0x5F, /* 00001530 ".A....._" */ 43.1171 + 0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08, /* 00001538 "STA....." */ 43.1172 + 0x5F,0x43,0x52,0x53,0x11,0x18,0x0A,0x15, /* 00001540 "_CRS...." */ 43.1173 + 0x47,0x01,0x60,0x00,0x60,0x00,0x00,0x01, /* 00001548 "G.`.`..." */ 43.1174 + 0x47,0x01,0x64,0x00,0x64,0x00,0x00,0x01, /* 00001550 "G.d.d..." */ 43.1175 + 0x22,0x02,0x00,0x79,0x00,0x5B,0x82,0x3A, /* 00001558 ""..y.[.:" */ 43.1176 + 0x46,0x44,0x43,0x30,0x08,0x5F,0x48,0x49, /* 00001560 "FDC0._HI" */ 43.1177 + 0x44,0x0C,0x41,0xD0,0x07,0x00,0x14,0x09, /* 00001568 "D.A....." */ 43.1178 + 0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A,0x0F, /* 00001570 "_STA...." */ 43.1179 + 0x08,0x5F,0x43,0x52,0x53,0x11,0x1B,0x0A, /* 00001578 "._CRS..." */ 43.1180 + 0x18,0x47,0x01,0xF0,0x03,0xF0,0x03,0x01, /* 00001580 ".G......" */ 43.1181 + 0x06,0x47,0x01,0xF7,0x03,0xF7,0x03,0x01, /* 00001588 ".G......" */ 43.1182 + 0x01,0x22,0x40,0x00,0x2A,0x04,0x00,0x79, /* 00001590 "."@.*..y" */ 43.1183 + 0x00,0x5B,0x82,0x46,0x04,0x55,0x41,0x52, /* 00001598 ".[.F.UAR" */ 43.1184 + 0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 000015A0 "1._HID.A" */ 43.1185 + 0xD0,0x05,0x01,0x08,0x5F,0x55,0x49,0x44, /* 000015A8 "...._UID" */ 43.1186 + 0x01,0x14,0x19,0x5F,0x53,0x54,0x41,0x00, /* 000015B0 "..._STA." */ 43.1187 + 0xA0,0x0D,0x93,0x5E,0x5E,0x5E,0x5E,0x55, /* 000015B8 "...^^^^U" */ 43.1188 + 0x41,0x52,0x31,0x00,0xA4,0x00,0xA1,0x04, /* 000015C0 "AR1....." */ 43.1189 + 0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52,0x53, /* 000015C8 "...._CRS" */ 43.1190 + 0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8,0x03, /* 000015D0 "....G..." */ 43.1191 + 0xF8,0x03,0x08,0x08,0x22,0x10,0x00,0x79, /* 000015D8 "...."..y" */ 43.1192 + 0x00,0x5B,0x82,0x47,0x04,0x55,0x41,0x52, /* 000015E0 ".[.G.UAR" */ 43.1193 + 0x32,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 000015E8 "2._HID.A" */ 43.1194 + 0xD0,0x05,0x01,0x08,0x5F,0x55,0x49,0x44, /* 000015F0 "...._UID" */ 43.1195 + 0x0A,0x02,0x14,0x19,0x5F,0x53,0x54,0x41, /* 000015F8 "...._STA" */ 43.1196 + 0x00,0xA0,0x0D,0x93,0x5E,0x5E,0x5E,0x5E, /* 00001600 "....^^^^" */ 43.1197 + 0x55,0x41,0x52,0x32,0x00,0xA4,0x00,0xA1, /* 00001608 "UAR2...." */ 43.1198 + 0x04,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52, /* 00001610 "....._CR" */ 43.1199 + 0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0xF8, /* 00001618 "S....G.." */ 43.1200 + 0x02,0xF8,0x02,0x08,0x08,0x22,0x08,0x00, /* 00001620 ".....".." */ 43.1201 + 0x79,0x00,0x5B,0x82,0x36,0x4C,0x54,0x50, /* 00001628 "y.[.6LTP" */ 43.1202 + 0x31,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 00001630 "1._HID.A" */ 43.1203 + 0xD0,0x04,0x00,0x08,0x5F,0x55,0x49,0x44, /* 00001638 "...._UID" */ 43.1204 + 0x0A,0x02,0x14,0x09,0x5F,0x53,0x54,0x41, /* 00001640 "...._STA" */ 43.1205 + 0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43,0x52, /* 00001648 "....._CR" */ 43.1206 + 0x53,0x11,0x10,0x0A,0x0D,0x47,0x01,0x78, /* 00001650 "S....G.x" */ 43.1207 + 0x03,0x78,0x03,0x08,0x08,0x22,0x80,0x00, /* 00001658 ".x...".." */ 43.1208 + 0x79,0x00,0x5B,0x82,0x49,0x0A,0x53,0x30, /* 00001660 "y.[.I.S0" */ 43.1209 + 0x30,0x5F,0x08,0x5F,0x41,0x44,0x52,0x00, /* 00001668 "0_._ADR." */ 43.1210 + 0x08,0x5F,0x53,0x55,0x4E,0x00,0x14,0x1F, /* 00001670 "._SUN..." */ 43.1211 + 0x5F,0x50,0x53,0x30,0x00,0x70,0x00,0x5C, /* 00001678 "_PS0.p.\" */ 43.1212 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001680 "._GPEDPT" */ 43.1213 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00001688 "1p..\._G" */ 43.1214 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x1F, /* 00001690 "PEDPT2.." */ 43.1215 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x00,0x5C, /* 00001698 "_PS3.p.\" */ 43.1216 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000016A0 "._GPEDPT" */ 43.1217 + 0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F,0x47, /* 000016A8 "1p..\._G" */ 43.1218 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x2B, /* 000016B0 "PEDPT2.+" */ 43.1219 + 0x5F,0x45,0x4A,0x30,0x01,0x70,0x00,0x5C, /* 000016B8 "_EJ0.p.\" */ 43.1220 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000016C0 "._GPEDPT" */ 43.1221 + 0x31,0x70,0x0A,0x88,0x5C,0x2E,0x5F,0x47, /* 000016C8 "1p..\._G" */ 43.1222 + 0x50,0x45,0x44,0x50,0x54,0x32,0x70,0x01, /* 000016D0 "PEDPT2p." */ 43.1223 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x50,0x48, /* 000016D8 "\._GPEPH" */ 43.1224 + 0x30,0x30,0x14,0x2A,0x5F,0x53,0x54,0x41, /* 000016E0 "00.*_STA" */ 43.1225 + 0x00,0x70,0x00,0x5C,0x2E,0x5F,0x47,0x50, /* 000016E8 ".p.\._GP" */ 43.1226 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x89, /* 000016F0 "EDPT1p.." */ 43.1227 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 000016F8 "\._GPEDP" */ 43.1228 + 0x54,0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50, /* 00001700 "T2.\._GP" */ 43.1229 + 0x45,0x50,0x48,0x30,0x30,0x5B,0x82,0x4D, /* 00001708 "EPH00[.M" */ 43.1230 + 0x0A,0x53,0x30,0x31,0x5F,0x08,0x5F,0x41, /* 00001710 ".S01_._A" */ 43.1231 + 0x44,0x52,0x0C,0x00,0x00,0x01,0x00,0x08, /* 00001718 "DR......" */ 43.1232 + 0x5F,0x53,0x55,0x4E,0x01,0x14,0x1F,0x5F, /* 00001720 "_SUN..._" */ 43.1233 + 0x50,0x53,0x30,0x00,0x70,0x01,0x5C,0x2E, /* 00001728 "PS0.p.\." */ 43.1234 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001730 "_GPEDPT1" */ 43.1235 + 0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47,0x50, /* 00001738 "p..\._GP" */ 43.1236 + 0x45,0x44,0x50,0x54,0x32,0x14,0x1F,0x5F, /* 00001740 "EDPT2.._" */ 43.1237 + 0x50,0x53,0x33,0x00,0x70,0x01,0x5C,0x2E, /* 00001748 "PS3.p.\." */ 43.1238 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001750 "_GPEDPT1" */ 43.1239 + 0x70,0x0A,0x83,0x5C,0x2E,0x5F,0x47,0x50, /* 00001758 "p..\._GP" */ 43.1240 + 0x45,0x44,0x50,0x54,0x32,0x14,0x2B,0x5F, /* 00001760 "EDPT2.+_" */ 43.1241 + 0x45,0x4A,0x30,0x01,0x70,0x01,0x5C,0x2E, /* 00001768 "EJ0.p.\." */ 43.1242 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001770 "_GPEDPT1" */ 43.1243 + 0x70,0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50, /* 00001778 "p..\._GP" */ 43.1244 + 0x45,0x44,0x50,0x54,0x32,0x70,0x01,0x5C, /* 00001780 "EDPT2p.\" */ 43.1245 + 0x2E,0x5F,0x47,0x50,0x45,0x50,0x48,0x30, /* 00001788 "._GPEPH0" */ 43.1246 + 0x31,0x14,0x2A,0x5F,0x53,0x54,0x41,0x00, /* 00001790 "1.*_STA." */ 43.1247 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001798 "p.\._GPE" */ 43.1248 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 000017A0 "DPT1p..\" */ 43.1249 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000017A8 "._GPEDPT" */ 43.1250 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000017B0 "2.\._GPE" */ 43.1251 + 0x50,0x48,0x30,0x31,0x5B,0x82,0x42,0x0B, /* 000017B8 "PH01[.B." */ 43.1252 + 0x53,0x30,0x32,0x5F,0x08,0x5F,0x41,0x44, /* 000017C0 "S02_._AD" */ 43.1253 + 0x52,0x0C,0x00,0x00,0x02,0x00,0x08,0x5F, /* 000017C8 "R......_" */ 43.1254 + 0x53,0x55,0x4E,0x0A,0x02,0x14,0x20,0x5F, /* 000017D0 "SUN... _" */ 43.1255 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x02,0x5C, /* 000017D8 "PS0.p..\" */ 43.1256 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000017E0 "._GPEDPT" */ 43.1257 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 000017E8 "1p..\._G" */ 43.1258 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 000017F0 "PEDPT2. " */ 43.1259 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x02, /* 000017F8 "_PS3.p.." */ 43.1260 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001800 "\._GPEDP" */ 43.1261 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00001808 "T1p..\._" */ 43.1262 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00001810 "GPEDPT2." */ 43.1263 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00001818 ",_EJ0.p." */ 43.1264 + 0x02,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001820 ".\._GPED" */ 43.1265 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00001828 "PT1p..\." */ 43.1266 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001830 "_GPEDPT2" */ 43.1267 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001838 "p.\._GPE" */ 43.1268 + 0x50,0x48,0x30,0x32,0x14,0x2B,0x5F,0x53, /* 00001840 "PH02.+_S" */ 43.1269 + 0x54,0x41,0x00,0x70,0x0A,0x02,0x5C,0x2E, /* 00001848 "TA.p..\." */ 43.1270 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001850 "_GPEDPT1" */ 43.1271 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00001858 "p..\._GP" */ 43.1272 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00001860 "EDPT2.\." */ 43.1273 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x32, /* 00001868 "_GPEPH02" */ 43.1274 + 0x5B,0x82,0x42,0x0B,0x53,0x30,0x33,0x5F, /* 00001870 "[.B.S03_" */ 43.1275 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00001878 "._ADR..." */ 43.1276 + 0x03,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00001880 "..._SUN." */ 43.1277 + 0x03,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00001888 ".. _PS0." */ 43.1278 + 0x70,0x0A,0x03,0x5C,0x2E,0x5F,0x47,0x50, /* 00001890 "p..\._GP" */ 43.1279 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00001898 "EDPT1p.." */ 43.1280 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 000018A0 "\._GPEDP" */ 43.1281 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 000018A8 "T2. _PS3" */ 43.1282 + 0x00,0x70,0x0A,0x03,0x5C,0x2E,0x5F,0x47, /* 000018B0 ".p..\._G" */ 43.1283 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 000018B8 "PEDPT1p." */ 43.1284 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 000018C0 ".\._GPED" */ 43.1285 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 000018C8 "PT2.,_EJ" */ 43.1286 + 0x30,0x01,0x70,0x0A,0x03,0x5C,0x2E,0x5F, /* 000018D0 "0.p..\._" */ 43.1287 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 000018D8 "GPEDPT1p" */ 43.1288 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000018E0 "..\._GPE" */ 43.1289 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 000018E8 "DPT2p.\." */ 43.1290 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x33, /* 000018F0 "_GPEPH03" */ 43.1291 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 000018F8 ".+_STA.p" */ 43.1292 + 0x0A,0x03,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001900 "..\._GPE" */ 43.1293 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00001908 "DPT1p..\" */ 43.1294 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001910 "._GPEDPT" */ 43.1295 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001918 "2.\._GPE" */ 43.1296 + 0x50,0x48,0x30,0x33,0x5B,0x82,0x42,0x0B, /* 00001920 "PH03[.B." */ 43.1297 + 0x53,0x30,0x34,0x5F,0x08,0x5F,0x41,0x44, /* 00001928 "S04_._AD" */ 43.1298 + 0x52,0x0C,0x00,0x00,0x04,0x00,0x08,0x5F, /* 00001930 "R......_" */ 43.1299 + 0x53,0x55,0x4E,0x0A,0x04,0x14,0x20,0x5F, /* 00001938 "SUN... _" */ 43.1300 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x04,0x5C, /* 00001940 "PS0.p..\" */ 43.1301 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001948 "._GPEDPT" */ 43.1302 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00001950 "1p..\._G" */ 43.1303 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00001958 "PEDPT2. " */ 43.1304 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x04, /* 00001960 "_PS3.p.." */ 43.1305 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001968 "\._GPEDP" */ 43.1306 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00001970 "T1p..\._" */ 43.1307 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00001978 "GPEDPT2." */ 43.1308 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00001980 ",_EJ0.p." */ 43.1309 + 0x04,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001988 ".\._GPED" */ 43.1310 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00001990 "PT1p..\." */ 43.1311 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001998 "_GPEDPT2" */ 43.1312 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000019A0 "p.\._GPE" */ 43.1313 + 0x50,0x48,0x30,0x34,0x14,0x2B,0x5F,0x53, /* 000019A8 "PH04.+_S" */ 43.1314 + 0x54,0x41,0x00,0x70,0x0A,0x04,0x5C,0x2E, /* 000019B0 "TA.p..\." */ 43.1315 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 000019B8 "_GPEDPT1" */ 43.1316 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 000019C0 "p..\._GP" */ 43.1317 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 000019C8 "EDPT2.\." */ 43.1318 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x34, /* 000019D0 "_GPEPH04" */ 43.1319 + 0x5B,0x82,0x42,0x0B,0x53,0x30,0x35,0x5F, /* 000019D8 "[.B.S05_" */ 43.1320 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 000019E0 "._ADR..." */ 43.1321 + 0x05,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 000019E8 "..._SUN." */ 43.1322 + 0x05,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 000019F0 ".. _PS0." */ 43.1323 + 0x70,0x0A,0x05,0x5C,0x2E,0x5F,0x47,0x50, /* 000019F8 "p..\._GP" */ 43.1324 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00001A00 "EDPT1p.." */ 43.1325 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001A08 "\._GPEDP" */ 43.1326 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00001A10 "T2. _PS3" */ 43.1327 + 0x00,0x70,0x0A,0x05,0x5C,0x2E,0x5F,0x47, /* 00001A18 ".p..\._G" */ 43.1328 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00001A20 "PEDPT1p." */ 43.1329 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001A28 ".\._GPED" */ 43.1330 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00001A30 "PT2.,_EJ" */ 43.1331 + 0x30,0x01,0x70,0x0A,0x05,0x5C,0x2E,0x5F, /* 00001A38 "0.p..\._" */ 43.1332 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00001A40 "GPEDPT1p" */ 43.1333 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001A48 "..\._GPE" */ 43.1334 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00001A50 "DPT2p.\." */ 43.1335 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x35, /* 00001A58 "_GPEPH05" */ 43.1336 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00001A60 ".+_STA.p" */ 43.1337 + 0x0A,0x05,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001A68 "..\._GPE" */ 43.1338 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00001A70 "DPT1p..\" */ 43.1339 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001A78 "._GPEDPT" */ 43.1340 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001A80 "2.\._GPE" */ 43.1341 + 0x50,0x48,0x30,0x35,0x5B,0x82,0x42,0x0B, /* 00001A88 "PH05[.B." */ 43.1342 + 0x53,0x30,0x36,0x5F,0x08,0x5F,0x41,0x44, /* 00001A90 "S06_._AD" */ 43.1343 + 0x52,0x0C,0x00,0x00,0x06,0x00,0x08,0x5F, /* 00001A98 "R......_" */ 43.1344 + 0x53,0x55,0x4E,0x0A,0x06,0x14,0x20,0x5F, /* 00001AA0 "SUN... _" */ 43.1345 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x06,0x5C, /* 00001AA8 "PS0.p..\" */ 43.1346 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001AB0 "._GPEDPT" */ 43.1347 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00001AB8 "1p..\._G" */ 43.1348 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00001AC0 "PEDPT2. " */ 43.1349 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x06, /* 00001AC8 "_PS3.p.." */ 43.1350 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001AD0 "\._GPEDP" */ 43.1351 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00001AD8 "T1p..\._" */ 43.1352 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00001AE0 "GPEDPT2." */ 43.1353 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00001AE8 ",_EJ0.p." */ 43.1354 + 0x06,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001AF0 ".\._GPED" */ 43.1355 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00001AF8 "PT1p..\." */ 43.1356 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001B00 "_GPEDPT2" */ 43.1357 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001B08 "p.\._GPE" */ 43.1358 + 0x50,0x48,0x30,0x36,0x14,0x2B,0x5F,0x53, /* 00001B10 "PH06.+_S" */ 43.1359 + 0x54,0x41,0x00,0x70,0x0A,0x06,0x5C,0x2E, /* 00001B18 "TA.p..\." */ 43.1360 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001B20 "_GPEDPT1" */ 43.1361 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00001B28 "p..\._GP" */ 43.1362 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00001B30 "EDPT2.\." */ 43.1363 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x36, /* 00001B38 "_GPEPH06" */ 43.1364 + 0x5B,0x82,0x42,0x0B,0x53,0x30,0x37,0x5F, /* 00001B40 "[.B.S07_" */ 43.1365 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00001B48 "._ADR..." */ 43.1366 + 0x07,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00001B50 "..._SUN." */ 43.1367 + 0x07,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00001B58 ".. _PS0." */ 43.1368 + 0x70,0x0A,0x07,0x5C,0x2E,0x5F,0x47,0x50, /* 00001B60 "p..\._GP" */ 43.1369 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00001B68 "EDPT1p.." */ 43.1370 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001B70 "\._GPEDP" */ 43.1371 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00001B78 "T2. _PS3" */ 43.1372 + 0x00,0x70,0x0A,0x07,0x5C,0x2E,0x5F,0x47, /* 00001B80 ".p..\._G" */ 43.1373 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00001B88 "PEDPT1p." */ 43.1374 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001B90 ".\._GPED" */ 43.1375 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00001B98 "PT2.,_EJ" */ 43.1376 + 0x30,0x01,0x70,0x0A,0x07,0x5C,0x2E,0x5F, /* 00001BA0 "0.p..\._" */ 43.1377 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00001BA8 "GPEDPT1p" */ 43.1378 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001BB0 "..\._GPE" */ 43.1379 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00001BB8 "DPT2p.\." */ 43.1380 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x37, /* 00001BC0 "_GPEPH07" */ 43.1381 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00001BC8 ".+_STA.p" */ 43.1382 + 0x0A,0x07,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001BD0 "..\._GPE" */ 43.1383 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00001BD8 "DPT1p..\" */ 43.1384 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001BE0 "._GPEDPT" */ 43.1385 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001BE8 "2.\._GPE" */ 43.1386 + 0x50,0x48,0x30,0x37,0x5B,0x82,0x42,0x0B, /* 00001BF0 "PH07[.B." */ 43.1387 + 0x53,0x30,0x38,0x5F,0x08,0x5F,0x41,0x44, /* 00001BF8 "S08_._AD" */ 43.1388 + 0x52,0x0C,0x00,0x00,0x08,0x00,0x08,0x5F, /* 00001C00 "R......_" */ 43.1389 + 0x53,0x55,0x4E,0x0A,0x08,0x14,0x20,0x5F, /* 00001C08 "SUN... _" */ 43.1390 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x08,0x5C, /* 00001C10 "PS0.p..\" */ 43.1391 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001C18 "._GPEDPT" */ 43.1392 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00001C20 "1p..\._G" */ 43.1393 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00001C28 "PEDPT2. " */ 43.1394 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x08, /* 00001C30 "_PS3.p.." */ 43.1395 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001C38 "\._GPEDP" */ 43.1396 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00001C40 "T1p..\._" */ 43.1397 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00001C48 "GPEDPT2." */ 43.1398 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00001C50 ",_EJ0.p." */ 43.1399 + 0x08,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001C58 ".\._GPED" */ 43.1400 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00001C60 "PT1p..\." */ 43.1401 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001C68 "_GPEDPT2" */ 43.1402 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001C70 "p.\._GPE" */ 43.1403 + 0x50,0x48,0x30,0x38,0x14,0x2B,0x5F,0x53, /* 00001C78 "PH08.+_S" */ 43.1404 + 0x54,0x41,0x00,0x70,0x0A,0x08,0x5C,0x2E, /* 00001C80 "TA.p..\." */ 43.1405 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001C88 "_GPEDPT1" */ 43.1406 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00001C90 "p..\._GP" */ 43.1407 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00001C98 "EDPT2.\." */ 43.1408 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x38, /* 00001CA0 "_GPEPH08" */ 43.1409 + 0x5B,0x82,0x42,0x0B,0x53,0x30,0x39,0x5F, /* 00001CA8 "[.B.S09_" */ 43.1410 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00001CB0 "._ADR..." */ 43.1411 + 0x09,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00001CB8 "..._SUN." */ 43.1412 + 0x09,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00001CC0 ".. _PS0." */ 43.1413 + 0x70,0x0A,0x09,0x5C,0x2E,0x5F,0x47,0x50, /* 00001CC8 "p..\._GP" */ 43.1414 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00001CD0 "EDPT1p.." */ 43.1415 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001CD8 "\._GPEDP" */ 43.1416 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00001CE0 "T2. _PS3" */ 43.1417 + 0x00,0x70,0x0A,0x09,0x5C,0x2E,0x5F,0x47, /* 00001CE8 ".p..\._G" */ 43.1418 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00001CF0 "PEDPT1p." */ 43.1419 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001CF8 ".\._GPED" */ 43.1420 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00001D00 "PT2.,_EJ" */ 43.1421 + 0x30,0x01,0x70,0x0A,0x09,0x5C,0x2E,0x5F, /* 00001D08 "0.p..\._" */ 43.1422 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00001D10 "GPEDPT1p" */ 43.1423 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001D18 "..\._GPE" */ 43.1424 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00001D20 "DPT2p.\." */ 43.1425 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x39, /* 00001D28 "_GPEPH09" */ 43.1426 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00001D30 ".+_STA.p" */ 43.1427 + 0x0A,0x09,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001D38 "..\._GPE" */ 43.1428 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00001D40 "DPT1p..\" */ 43.1429 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001D48 "._GPEDPT" */ 43.1430 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001D50 "2.\._GPE" */ 43.1431 + 0x50,0x48,0x30,0x39,0x5B,0x82,0x42,0x0B, /* 00001D58 "PH09[.B." */ 43.1432 + 0x53,0x30,0x41,0x5F,0x08,0x5F,0x41,0x44, /* 00001D60 "S0A_._AD" */ 43.1433 + 0x52,0x0C,0x00,0x00,0x0A,0x00,0x08,0x5F, /* 00001D68 "R......_" */ 43.1434 + 0x53,0x55,0x4E,0x0A,0x0A,0x14,0x20,0x5F, /* 00001D70 "SUN... _" */ 43.1435 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x0A,0x5C, /* 00001D78 "PS0.p..\" */ 43.1436 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001D80 "._GPEDPT" */ 43.1437 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00001D88 "1p..\._G" */ 43.1438 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00001D90 "PEDPT2. " */ 43.1439 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x0A, /* 00001D98 "_PS3.p.." */ 43.1440 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001DA0 "\._GPEDP" */ 43.1441 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00001DA8 "T1p..\._" */ 43.1442 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00001DB0 "GPEDPT2." */ 43.1443 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00001DB8 ",_EJ0.p." */ 43.1444 + 0x0A,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001DC0 ".\._GPED" */ 43.1445 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00001DC8 "PT1p..\." */ 43.1446 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001DD0 "_GPEDPT2" */ 43.1447 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001DD8 "p.\._GPE" */ 43.1448 + 0x50,0x48,0x30,0x41,0x14,0x2B,0x5F,0x53, /* 00001DE0 "PH0A.+_S" */ 43.1449 + 0x54,0x41,0x00,0x70,0x0A,0x0A,0x5C,0x2E, /* 00001DE8 "TA.p..\." */ 43.1450 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001DF0 "_GPEDPT1" */ 43.1451 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00001DF8 "p..\._GP" */ 43.1452 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00001E00 "EDPT2.\." */ 43.1453 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x41, /* 00001E08 "_GPEPH0A" */ 43.1454 + 0x5B,0x82,0x42,0x0B,0x53,0x30,0x42,0x5F, /* 00001E10 "[.B.S0B_" */ 43.1455 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00001E18 "._ADR..." */ 43.1456 + 0x0B,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00001E20 "..._SUN." */ 43.1457 + 0x0B,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00001E28 ".. _PS0." */ 43.1458 + 0x70,0x0A,0x0B,0x5C,0x2E,0x5F,0x47,0x50, /* 00001E30 "p..\._GP" */ 43.1459 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00001E38 "EDPT1p.." */ 43.1460 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001E40 "\._GPEDP" */ 43.1461 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00001E48 "T2. _PS3" */ 43.1462 + 0x00,0x70,0x0A,0x0B,0x5C,0x2E,0x5F,0x47, /* 00001E50 ".p..\._G" */ 43.1463 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00001E58 "PEDPT1p." */ 43.1464 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001E60 ".\._GPED" */ 43.1465 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00001E68 "PT2.,_EJ" */ 43.1466 + 0x30,0x01,0x70,0x0A,0x0B,0x5C,0x2E,0x5F, /* 00001E70 "0.p..\._" */ 43.1467 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00001E78 "GPEDPT1p" */ 43.1468 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001E80 "..\._GPE" */ 43.1469 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00001E88 "DPT2p.\." */ 43.1470 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x42, /* 00001E90 "_GPEPH0B" */ 43.1471 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00001E98 ".+_STA.p" */ 43.1472 + 0x0A,0x0B,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001EA0 "..\._GPE" */ 43.1473 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00001EA8 "DPT1p..\" */ 43.1474 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001EB0 "._GPEDPT" */ 43.1475 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001EB8 "2.\._GPE" */ 43.1476 + 0x50,0x48,0x30,0x42,0x5B,0x82,0x42,0x0B, /* 00001EC0 "PH0B[.B." */ 43.1477 + 0x53,0x30,0x43,0x5F,0x08,0x5F,0x41,0x44, /* 00001EC8 "S0C_._AD" */ 43.1478 + 0x52,0x0C,0x00,0x00,0x0C,0x00,0x08,0x5F, /* 00001ED0 "R......_" */ 43.1479 + 0x53,0x55,0x4E,0x0A,0x0C,0x14,0x20,0x5F, /* 00001ED8 "SUN... _" */ 43.1480 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x0C,0x5C, /* 00001EE0 "PS0.p..\" */ 43.1481 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00001EE8 "._GPEDPT" */ 43.1482 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00001EF0 "1p..\._G" */ 43.1483 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00001EF8 "PEDPT2. " */ 43.1484 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x0C, /* 00001F00 "_PS3.p.." */ 43.1485 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001F08 "\._GPEDP" */ 43.1486 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00001F10 "T1p..\._" */ 43.1487 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00001F18 "GPEDPT2." */ 43.1488 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00001F20 ",_EJ0.p." */ 43.1489 + 0x0C,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001F28 ".\._GPED" */ 43.1490 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00001F30 "PT1p..\." */ 43.1491 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00001F38 "_GPEDPT2" */ 43.1492 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001F40 "p.\._GPE" */ 43.1493 + 0x50,0x48,0x30,0x43,0x14,0x2B,0x5F,0x53, /* 00001F48 "PH0C.+_S" */ 43.1494 + 0x54,0x41,0x00,0x70,0x0A,0x0C,0x5C,0x2E, /* 00001F50 "TA.p..\." */ 43.1495 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00001F58 "_GPEDPT1" */ 43.1496 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00001F60 "p..\._GP" */ 43.1497 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00001F68 "EDPT2.\." */ 43.1498 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x43, /* 00001F70 "_GPEPH0C" */ 43.1499 + 0x5B,0x82,0x42,0x0B,0x53,0x30,0x44,0x5F, /* 00001F78 "[.B.S0D_" */ 43.1500 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00001F80 "._ADR..." */ 43.1501 + 0x0D,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00001F88 "..._SUN." */ 43.1502 + 0x0D,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00001F90 ".. _PS0." */ 43.1503 + 0x70,0x0A,0x0D,0x5C,0x2E,0x5F,0x47,0x50, /* 00001F98 "p..\._GP" */ 43.1504 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00001FA0 "EDPT1p.." */ 43.1505 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00001FA8 "\._GPEDP" */ 43.1506 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00001FB0 "T2. _PS3" */ 43.1507 + 0x00,0x70,0x0A,0x0D,0x5C,0x2E,0x5F,0x47, /* 00001FB8 ".p..\._G" */ 43.1508 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00001FC0 "PEDPT1p." */ 43.1509 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00001FC8 ".\._GPED" */ 43.1510 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00001FD0 "PT2.,_EJ" */ 43.1511 + 0x30,0x01,0x70,0x0A,0x0D,0x5C,0x2E,0x5F, /* 00001FD8 "0.p..\._" */ 43.1512 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00001FE0 "GPEDPT1p" */ 43.1513 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00001FE8 "..\._GPE" */ 43.1514 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00001FF0 "DPT2p.\." */ 43.1515 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x44, /* 00001FF8 "_GPEPH0D" */ 43.1516 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00002000 ".+_STA.p" */ 43.1517 + 0x0A,0x0D,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002008 "..\._GPE" */ 43.1518 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00002010 "DPT1p..\" */ 43.1519 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002018 "._GPEDPT" */ 43.1520 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002020 "2.\._GPE" */ 43.1521 + 0x50,0x48,0x30,0x44,0x5B,0x82,0x42,0x0B, /* 00002028 "PH0D[.B." */ 43.1522 + 0x53,0x30,0x45,0x5F,0x08,0x5F,0x41,0x44, /* 00002030 "S0E_._AD" */ 43.1523 + 0x52,0x0C,0x00,0x00,0x0E,0x00,0x08,0x5F, /* 00002038 "R......_" */ 43.1524 + 0x53,0x55,0x4E,0x0A,0x0E,0x14,0x20,0x5F, /* 00002040 "SUN... _" */ 43.1525 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x0E,0x5C, /* 00002048 "PS0.p..\" */ 43.1526 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002050 "._GPEDPT" */ 43.1527 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00002058 "1p..\._G" */ 43.1528 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00002060 "PEDPT2. " */ 43.1529 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x0E, /* 00002068 "_PS3.p.." */ 43.1530 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002070 "\._GPEDP" */ 43.1531 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00002078 "T1p..\._" */ 43.1532 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00002080 "GPEDPT2." */ 43.1533 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00002088 ",_EJ0.p." */ 43.1534 + 0x0E,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002090 ".\._GPED" */ 43.1535 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00002098 "PT1p..\." */ 43.1536 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 000020A0 "_GPEDPT2" */ 43.1537 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000020A8 "p.\._GPE" */ 43.1538 + 0x50,0x48,0x30,0x45,0x14,0x2B,0x5F,0x53, /* 000020B0 "PH0E.+_S" */ 43.1539 + 0x54,0x41,0x00,0x70,0x0A,0x0E,0x5C,0x2E, /* 000020B8 "TA.p..\." */ 43.1540 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 000020C0 "_GPEDPT1" */ 43.1541 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 000020C8 "p..\._GP" */ 43.1542 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 000020D0 "EDPT2.\." */ 43.1543 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x45, /* 000020D8 "_GPEPH0E" */ 43.1544 + 0x5B,0x82,0x42,0x0B,0x53,0x30,0x46,0x5F, /* 000020E0 "[.B.S0F_" */ 43.1545 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 000020E8 "._ADR..." */ 43.1546 + 0x0F,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 000020F0 "..._SUN." */ 43.1547 + 0x0F,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 000020F8 ".. _PS0." */ 43.1548 + 0x70,0x0A,0x0F,0x5C,0x2E,0x5F,0x47,0x50, /* 00002100 "p..\._GP" */ 43.1549 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00002108 "EDPT1p.." */ 43.1550 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002110 "\._GPEDP" */ 43.1551 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00002118 "T2. _PS3" */ 43.1552 + 0x00,0x70,0x0A,0x0F,0x5C,0x2E,0x5F,0x47, /* 00002120 ".p..\._G" */ 43.1553 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00002128 "PEDPT1p." */ 43.1554 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002130 ".\._GPED" */ 43.1555 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00002138 "PT2.,_EJ" */ 43.1556 + 0x30,0x01,0x70,0x0A,0x0F,0x5C,0x2E,0x5F, /* 00002140 "0.p..\._" */ 43.1557 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00002148 "GPEDPT1p" */ 43.1558 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002150 "..\._GPE" */ 43.1559 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00002158 "DPT2p.\." */ 43.1560 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x30,0x46, /* 00002160 "_GPEPH0F" */ 43.1561 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00002168 ".+_STA.p" */ 43.1562 + 0x0A,0x0F,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002170 "..\._GPE" */ 43.1563 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00002178 "DPT1p..\" */ 43.1564 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002180 "._GPEDPT" */ 43.1565 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002188 "2.\._GPE" */ 43.1566 + 0x50,0x48,0x30,0x46,0x5B,0x82,0x42,0x0B, /* 00002190 "PH0F[.B." */ 43.1567 + 0x53,0x31,0x30,0x5F,0x08,0x5F,0x41,0x44, /* 00002198 "S10_._AD" */ 43.1568 + 0x52,0x0C,0x00,0x00,0x10,0x00,0x08,0x5F, /* 000021A0 "R......_" */ 43.1569 + 0x53,0x55,0x4E,0x0A,0x10,0x14,0x20,0x5F, /* 000021A8 "SUN... _" */ 43.1570 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x10,0x5C, /* 000021B0 "PS0.p..\" */ 43.1571 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000021B8 "._GPEDPT" */ 43.1572 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 000021C0 "1p..\._G" */ 43.1573 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 000021C8 "PEDPT2. " */ 43.1574 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x10, /* 000021D0 "_PS3.p.." */ 43.1575 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 000021D8 "\._GPEDP" */ 43.1576 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 000021E0 "T1p..\._" */ 43.1577 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 000021E8 "GPEDPT2." */ 43.1578 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 000021F0 ",_EJ0.p." */ 43.1579 + 0x10,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 000021F8 ".\._GPED" */ 43.1580 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00002200 "PT1p..\." */ 43.1581 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00002208 "_GPEDPT2" */ 43.1582 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002210 "p.\._GPE" */ 43.1583 + 0x50,0x48,0x31,0x30,0x14,0x2B,0x5F,0x53, /* 00002218 "PH10.+_S" */ 43.1584 + 0x54,0x41,0x00,0x70,0x0A,0x10,0x5C,0x2E, /* 00002220 "TA.p..\." */ 43.1585 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00002228 "_GPEDPT1" */ 43.1586 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00002230 "p..\._GP" */ 43.1587 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00002238 "EDPT2.\." */ 43.1588 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x30, /* 00002240 "_GPEPH10" */ 43.1589 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x31,0x5F, /* 00002248 "[.B.S11_" */ 43.1590 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00002250 "._ADR..." */ 43.1591 + 0x11,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00002258 "..._SUN." */ 43.1592 + 0x11,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00002260 ".. _PS0." */ 43.1593 + 0x70,0x0A,0x11,0x5C,0x2E,0x5F,0x47,0x50, /* 00002268 "p..\._GP" */ 43.1594 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00002270 "EDPT1p.." */ 43.1595 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002278 "\._GPEDP" */ 43.1596 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00002280 "T2. _PS3" */ 43.1597 + 0x00,0x70,0x0A,0x11,0x5C,0x2E,0x5F,0x47, /* 00002288 ".p..\._G" */ 43.1598 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00002290 "PEDPT1p." */ 43.1599 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002298 ".\._GPED" */ 43.1600 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 000022A0 "PT2.,_EJ" */ 43.1601 + 0x30,0x01,0x70,0x0A,0x11,0x5C,0x2E,0x5F, /* 000022A8 "0.p..\._" */ 43.1602 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 000022B0 "GPEDPT1p" */ 43.1603 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000022B8 "..\._GPE" */ 43.1604 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 000022C0 "DPT2p.\." */ 43.1605 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x31, /* 000022C8 "_GPEPH11" */ 43.1606 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 000022D0 ".+_STA.p" */ 43.1607 + 0x0A,0x11,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000022D8 "..\._GPE" */ 43.1608 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 000022E0 "DPT1p..\" */ 43.1609 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000022E8 "._GPEDPT" */ 43.1610 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000022F0 "2.\._GPE" */ 43.1611 + 0x50,0x48,0x31,0x31,0x5B,0x82,0x42,0x0B, /* 000022F8 "PH11[.B." */ 43.1612 + 0x53,0x31,0x32,0x5F,0x08,0x5F,0x41,0x44, /* 00002300 "S12_._AD" */ 43.1613 + 0x52,0x0C,0x00,0x00,0x12,0x00,0x08,0x5F, /* 00002308 "R......_" */ 43.1614 + 0x53,0x55,0x4E,0x0A,0x12,0x14,0x20,0x5F, /* 00002310 "SUN... _" */ 43.1615 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x12,0x5C, /* 00002318 "PS0.p..\" */ 43.1616 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002320 "._GPEDPT" */ 43.1617 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00002328 "1p..\._G" */ 43.1618 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00002330 "PEDPT2. " */ 43.1619 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x12, /* 00002338 "_PS3.p.." */ 43.1620 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002340 "\._GPEDP" */ 43.1621 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00002348 "T1p..\._" */ 43.1622 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00002350 "GPEDPT2." */ 43.1623 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00002358 ",_EJ0.p." */ 43.1624 + 0x12,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002360 ".\._GPED" */ 43.1625 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00002368 "PT1p..\." */ 43.1626 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00002370 "_GPEDPT2" */ 43.1627 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002378 "p.\._GPE" */ 43.1628 + 0x50,0x48,0x31,0x32,0x14,0x2B,0x5F,0x53, /* 00002380 "PH12.+_S" */ 43.1629 + 0x54,0x41,0x00,0x70,0x0A,0x12,0x5C,0x2E, /* 00002388 "TA.p..\." */ 43.1630 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00002390 "_GPEDPT1" */ 43.1631 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00002398 "p..\._GP" */ 43.1632 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 000023A0 "EDPT2.\." */ 43.1633 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x32, /* 000023A8 "_GPEPH12" */ 43.1634 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x33,0x5F, /* 000023B0 "[.B.S13_" */ 43.1635 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 000023B8 "._ADR..." */ 43.1636 + 0x13,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 000023C0 "..._SUN." */ 43.1637 + 0x13,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 000023C8 ".. _PS0." */ 43.1638 + 0x70,0x0A,0x13,0x5C,0x2E,0x5F,0x47,0x50, /* 000023D0 "p..\._GP" */ 43.1639 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 000023D8 "EDPT1p.." */ 43.1640 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 000023E0 "\._GPEDP" */ 43.1641 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 000023E8 "T2. _PS3" */ 43.1642 + 0x00,0x70,0x0A,0x13,0x5C,0x2E,0x5F,0x47, /* 000023F0 ".p..\._G" */ 43.1643 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 000023F8 "PEDPT1p." */ 43.1644 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002400 ".\._GPED" */ 43.1645 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00002408 "PT2.,_EJ" */ 43.1646 + 0x30,0x01,0x70,0x0A,0x13,0x5C,0x2E,0x5F, /* 00002410 "0.p..\._" */ 43.1647 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00002418 "GPEDPT1p" */ 43.1648 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002420 "..\._GPE" */ 43.1649 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00002428 "DPT2p.\." */ 43.1650 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x33, /* 00002430 "_GPEPH13" */ 43.1651 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00002438 ".+_STA.p" */ 43.1652 + 0x0A,0x13,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002440 "..\._GPE" */ 43.1653 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00002448 "DPT1p..\" */ 43.1654 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002450 "._GPEDPT" */ 43.1655 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002458 "2.\._GPE" */ 43.1656 + 0x50,0x48,0x31,0x33,0x5B,0x82,0x42,0x0B, /* 00002460 "PH13[.B." */ 43.1657 + 0x53,0x31,0x34,0x5F,0x08,0x5F,0x41,0x44, /* 00002468 "S14_._AD" */ 43.1658 + 0x52,0x0C,0x00,0x00,0x14,0x00,0x08,0x5F, /* 00002470 "R......_" */ 43.1659 + 0x53,0x55,0x4E,0x0A,0x14,0x14,0x20,0x5F, /* 00002478 "SUN... _" */ 43.1660 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x14,0x5C, /* 00002480 "PS0.p..\" */ 43.1661 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002488 "._GPEDPT" */ 43.1662 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00002490 "1p..\._G" */ 43.1663 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00002498 "PEDPT2. " */ 43.1664 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x14, /* 000024A0 "_PS3.p.." */ 43.1665 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 000024A8 "\._GPEDP" */ 43.1666 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 000024B0 "T1p..\._" */ 43.1667 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 000024B8 "GPEDPT2." */ 43.1668 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 000024C0 ",_EJ0.p." */ 43.1669 + 0x14,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 000024C8 ".\._GPED" */ 43.1670 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 000024D0 "PT1p..\." */ 43.1671 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 000024D8 "_GPEDPT2" */ 43.1672 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000024E0 "p.\._GPE" */ 43.1673 + 0x50,0x48,0x31,0x34,0x14,0x2B,0x5F,0x53, /* 000024E8 "PH14.+_S" */ 43.1674 + 0x54,0x41,0x00,0x70,0x0A,0x14,0x5C,0x2E, /* 000024F0 "TA.p..\." */ 43.1675 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 000024F8 "_GPEDPT1" */ 43.1676 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00002500 "p..\._GP" */ 43.1677 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00002508 "EDPT2.\." */ 43.1678 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x34, /* 00002510 "_GPEPH14" */ 43.1679 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x35,0x5F, /* 00002518 "[.B.S15_" */ 43.1680 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00002520 "._ADR..." */ 43.1681 + 0x15,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00002528 "..._SUN." */ 43.1682 + 0x15,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00002530 ".. _PS0." */ 43.1683 + 0x70,0x0A,0x15,0x5C,0x2E,0x5F,0x47,0x50, /* 00002538 "p..\._GP" */ 43.1684 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00002540 "EDPT1p.." */ 43.1685 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002548 "\._GPEDP" */ 43.1686 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00002550 "T2. _PS3" */ 43.1687 + 0x00,0x70,0x0A,0x15,0x5C,0x2E,0x5F,0x47, /* 00002558 ".p..\._G" */ 43.1688 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00002560 "PEDPT1p." */ 43.1689 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002568 ".\._GPED" */ 43.1690 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00002570 "PT2.,_EJ" */ 43.1691 + 0x30,0x01,0x70,0x0A,0x15,0x5C,0x2E,0x5F, /* 00002578 "0.p..\._" */ 43.1692 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00002580 "GPEDPT1p" */ 43.1693 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002588 "..\._GPE" */ 43.1694 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00002590 "DPT2p.\." */ 43.1695 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x35, /* 00002598 "_GPEPH15" */ 43.1696 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 000025A0 ".+_STA.p" */ 43.1697 + 0x0A,0x15,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000025A8 "..\._GPE" */ 43.1698 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 000025B0 "DPT1p..\" */ 43.1699 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000025B8 "._GPEDPT" */ 43.1700 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000025C0 "2.\._GPE" */ 43.1701 + 0x50,0x48,0x31,0x35,0x5B,0x82,0x42,0x0B, /* 000025C8 "PH15[.B." */ 43.1702 + 0x53,0x31,0x36,0x5F,0x08,0x5F,0x41,0x44, /* 000025D0 "S16_._AD" */ 43.1703 + 0x52,0x0C,0x00,0x00,0x16,0x00,0x08,0x5F, /* 000025D8 "R......_" */ 43.1704 + 0x53,0x55,0x4E,0x0A,0x16,0x14,0x20,0x5F, /* 000025E0 "SUN... _" */ 43.1705 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x16,0x5C, /* 000025E8 "PS0.p..\" */ 43.1706 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000025F0 "._GPEDPT" */ 43.1707 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 000025F8 "1p..\._G" */ 43.1708 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00002600 "PEDPT2. " */ 43.1709 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x16, /* 00002608 "_PS3.p.." */ 43.1710 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002610 "\._GPEDP" */ 43.1711 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00002618 "T1p..\._" */ 43.1712 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00002620 "GPEDPT2." */ 43.1713 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00002628 ",_EJ0.p." */ 43.1714 + 0x16,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002630 ".\._GPED" */ 43.1715 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00002638 "PT1p..\." */ 43.1716 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00002640 "_GPEDPT2" */ 43.1717 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002648 "p.\._GPE" */ 43.1718 + 0x50,0x48,0x31,0x36,0x14,0x2B,0x5F,0x53, /* 00002650 "PH16.+_S" */ 43.1719 + 0x54,0x41,0x00,0x70,0x0A,0x16,0x5C,0x2E, /* 00002658 "TA.p..\." */ 43.1720 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00002660 "_GPEDPT1" */ 43.1721 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00002668 "p..\._GP" */ 43.1722 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00002670 "EDPT2.\." */ 43.1723 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x36, /* 00002678 "_GPEPH16" */ 43.1724 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x37,0x5F, /* 00002680 "[.B.S17_" */ 43.1725 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00002688 "._ADR..." */ 43.1726 + 0x17,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00002690 "..._SUN." */ 43.1727 + 0x17,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00002698 ".. _PS0." */ 43.1728 + 0x70,0x0A,0x17,0x5C,0x2E,0x5F,0x47,0x50, /* 000026A0 "p..\._GP" */ 43.1729 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 000026A8 "EDPT1p.." */ 43.1730 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 000026B0 "\._GPEDP" */ 43.1731 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 000026B8 "T2. _PS3" */ 43.1732 + 0x00,0x70,0x0A,0x17,0x5C,0x2E,0x5F,0x47, /* 000026C0 ".p..\._G" */ 43.1733 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 000026C8 "PEDPT1p." */ 43.1734 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 000026D0 ".\._GPED" */ 43.1735 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 000026D8 "PT2.,_EJ" */ 43.1736 + 0x30,0x01,0x70,0x0A,0x17,0x5C,0x2E,0x5F, /* 000026E0 "0.p..\._" */ 43.1737 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 000026E8 "GPEDPT1p" */ 43.1738 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000026F0 "..\._GPE" */ 43.1739 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 000026F8 "DPT2p.\." */ 43.1740 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x37, /* 00002700 "_GPEPH17" */ 43.1741 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00002708 ".+_STA.p" */ 43.1742 + 0x0A,0x17,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002710 "..\._GPE" */ 43.1743 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00002718 "DPT1p..\" */ 43.1744 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002720 "._GPEDPT" */ 43.1745 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002728 "2.\._GPE" */ 43.1746 + 0x50,0x48,0x31,0x37,0x5B,0x82,0x42,0x0B, /* 00002730 "PH17[.B." */ 43.1747 + 0x53,0x31,0x38,0x5F,0x08,0x5F,0x41,0x44, /* 00002738 "S18_._AD" */ 43.1748 + 0x52,0x0C,0x00,0x00,0x18,0x00,0x08,0x5F, /* 00002740 "R......_" */ 43.1749 + 0x53,0x55,0x4E,0x0A,0x18,0x14,0x20,0x5F, /* 00002748 "SUN... _" */ 43.1750 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x18,0x5C, /* 00002750 "PS0.p..\" */ 43.1751 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002758 "._GPEDPT" */ 43.1752 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00002760 "1p..\._G" */ 43.1753 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00002768 "PEDPT2. " */ 43.1754 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x18, /* 00002770 "_PS3.p.." */ 43.1755 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002778 "\._GPEDP" */ 43.1756 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00002780 "T1p..\._" */ 43.1757 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00002788 "GPEDPT2." */ 43.1758 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00002790 ",_EJ0.p." */ 43.1759 + 0x18,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002798 ".\._GPED" */ 43.1760 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 000027A0 "PT1p..\." */ 43.1761 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 000027A8 "_GPEDPT2" */ 43.1762 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000027B0 "p.\._GPE" */ 43.1763 + 0x50,0x48,0x31,0x38,0x14,0x2B,0x5F,0x53, /* 000027B8 "PH18.+_S" */ 43.1764 + 0x54,0x41,0x00,0x70,0x0A,0x18,0x5C,0x2E, /* 000027C0 "TA.p..\." */ 43.1765 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 000027C8 "_GPEDPT1" */ 43.1766 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 000027D0 "p..\._GP" */ 43.1767 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 000027D8 "EDPT2.\." */ 43.1768 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x38, /* 000027E0 "_GPEPH18" */ 43.1769 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x39,0x5F, /* 000027E8 "[.B.S19_" */ 43.1770 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 000027F0 "._ADR..." */ 43.1771 + 0x19,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 000027F8 "..._SUN." */ 43.1772 + 0x19,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00002800 ".. _PS0." */ 43.1773 + 0x70,0x0A,0x19,0x5C,0x2E,0x5F,0x47,0x50, /* 00002808 "p..\._GP" */ 43.1774 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00002810 "EDPT1p.." */ 43.1775 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002818 "\._GPEDP" */ 43.1776 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00002820 "T2. _PS3" */ 43.1777 + 0x00,0x70,0x0A,0x19,0x5C,0x2E,0x5F,0x47, /* 00002828 ".p..\._G" */ 43.1778 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00002830 "PEDPT1p." */ 43.1779 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002838 ".\._GPED" */ 43.1780 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00002840 "PT2.,_EJ" */ 43.1781 + 0x30,0x01,0x70,0x0A,0x19,0x5C,0x2E,0x5F, /* 00002848 "0.p..\._" */ 43.1782 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00002850 "GPEDPT1p" */ 43.1783 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002858 "..\._GPE" */ 43.1784 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00002860 "DPT2p.\." */ 43.1785 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x39, /* 00002868 "_GPEPH19" */ 43.1786 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00002870 ".+_STA.p" */ 43.1787 + 0x0A,0x19,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002878 "..\._GPE" */ 43.1788 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00002880 "DPT1p..\" */ 43.1789 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002888 "._GPEDPT" */ 43.1790 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002890 "2.\._GPE" */ 43.1791 + 0x50,0x48,0x31,0x39,0x5B,0x82,0x42,0x0B, /* 00002898 "PH19[.B." */ 43.1792 + 0x53,0x31,0x41,0x5F,0x08,0x5F,0x41,0x44, /* 000028A0 "S1A_._AD" */ 43.1793 + 0x52,0x0C,0x00,0x00,0x1A,0x00,0x08,0x5F, /* 000028A8 "R......_" */ 43.1794 + 0x53,0x55,0x4E,0x0A,0x1A,0x14,0x20,0x5F, /* 000028B0 "SUN... _" */ 43.1795 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x1A,0x5C, /* 000028B8 "PS0.p..\" */ 43.1796 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000028C0 "._GPEDPT" */ 43.1797 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 000028C8 "1p..\._G" */ 43.1798 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 000028D0 "PEDPT2. " */ 43.1799 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x1A, /* 000028D8 "_PS3.p.." */ 43.1800 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 000028E0 "\._GPEDP" */ 43.1801 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 000028E8 "T1p..\._" */ 43.1802 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 000028F0 "GPEDPT2." */ 43.1803 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 000028F8 ",_EJ0.p." */ 43.1804 + 0x1A,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002900 ".\._GPED" */ 43.1805 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00002908 "PT1p..\." */ 43.1806 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00002910 "_GPEDPT2" */ 43.1807 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002918 "p.\._GPE" */ 43.1808 + 0x50,0x48,0x31,0x41,0x14,0x2B,0x5F,0x53, /* 00002920 "PH1A.+_S" */ 43.1809 + 0x54,0x41,0x00,0x70,0x0A,0x1A,0x5C,0x2E, /* 00002928 "TA.p..\." */ 43.1810 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00002930 "_GPEDPT1" */ 43.1811 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00002938 "p..\._GP" */ 43.1812 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00002940 "EDPT2.\." */ 43.1813 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x41, /* 00002948 "_GPEPH1A" */ 43.1814 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x42,0x5F, /* 00002950 "[.B.S1B_" */ 43.1815 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00002958 "._ADR..." */ 43.1816 + 0x1B,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00002960 "..._SUN." */ 43.1817 + 0x1B,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00002968 ".. _PS0." */ 43.1818 + 0x70,0x0A,0x1B,0x5C,0x2E,0x5F,0x47,0x50, /* 00002970 "p..\._GP" */ 43.1819 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00002978 "EDPT1p.." */ 43.1820 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002980 "\._GPEDP" */ 43.1821 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00002988 "T2. _PS3" */ 43.1822 + 0x00,0x70,0x0A,0x1B,0x5C,0x2E,0x5F,0x47, /* 00002990 ".p..\._G" */ 43.1823 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00002998 "PEDPT1p." */ 43.1824 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 000029A0 ".\._GPED" */ 43.1825 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 000029A8 "PT2.,_EJ" */ 43.1826 + 0x30,0x01,0x70,0x0A,0x1B,0x5C,0x2E,0x5F, /* 000029B0 "0.p..\._" */ 43.1827 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 000029B8 "GPEDPT1p" */ 43.1828 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000029C0 "..\._GPE" */ 43.1829 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 000029C8 "DPT2p.\." */ 43.1830 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x42, /* 000029D0 "_GPEPH1B" */ 43.1831 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 000029D8 ".+_STA.p" */ 43.1832 + 0x0A,0x1B,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000029E0 "..\._GPE" */ 43.1833 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 000029E8 "DPT1p..\" */ 43.1834 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 000029F0 "._GPEDPT" */ 43.1835 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 000029F8 "2.\._GPE" */ 43.1836 + 0x50,0x48,0x31,0x42,0x5B,0x82,0x42,0x0B, /* 00002A00 "PH1B[.B." */ 43.1837 + 0x53,0x31,0x43,0x5F,0x08,0x5F,0x41,0x44, /* 00002A08 "S1C_._AD" */ 43.1838 + 0x52,0x0C,0x00,0x00,0x1C,0x00,0x08,0x5F, /* 00002A10 "R......_" */ 43.1839 + 0x53,0x55,0x4E,0x0A,0x1C,0x14,0x20,0x5F, /* 00002A18 "SUN... _" */ 43.1840 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x1C,0x5C, /* 00002A20 "PS0.p..\" */ 43.1841 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002A28 "._GPEDPT" */ 43.1842 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00002A30 "1p..\._G" */ 43.1843 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00002A38 "PEDPT2. " */ 43.1844 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x1C, /* 00002A40 "_PS3.p.." */ 43.1845 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002A48 "\._GPEDP" */ 43.1846 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00002A50 "T1p..\._" */ 43.1847 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00002A58 "GPEDPT2." */ 43.1848 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00002A60 ",_EJ0.p." */ 43.1849 + 0x1C,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002A68 ".\._GPED" */ 43.1850 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00002A70 "PT1p..\." */ 43.1851 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00002A78 "_GPEDPT2" */ 43.1852 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002A80 "p.\._GPE" */ 43.1853 + 0x50,0x48,0x31,0x43,0x14,0x2B,0x5F,0x53, /* 00002A88 "PH1C.+_S" */ 43.1854 + 0x54,0x41,0x00,0x70,0x0A,0x1C,0x5C,0x2E, /* 00002A90 "TA.p..\." */ 43.1855 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00002A98 "_GPEDPT1" */ 43.1856 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00002AA0 "p..\._GP" */ 43.1857 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00002AA8 "EDPT2.\." */ 43.1858 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x43, /* 00002AB0 "_GPEPH1C" */ 43.1859 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x44,0x5F, /* 00002AB8 "[.B.S1D_" */ 43.1860 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00002AC0 "._ADR..." */ 43.1861 + 0x1D,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00002AC8 "..._SUN." */ 43.1862 + 0x1D,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00002AD0 ".. _PS0." */ 43.1863 + 0x70,0x0A,0x1D,0x5C,0x2E,0x5F,0x47,0x50, /* 00002AD8 "p..\._GP" */ 43.1864 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00002AE0 "EDPT1p.." */ 43.1865 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002AE8 "\._GPEDP" */ 43.1866 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00002AF0 "T2. _PS3" */ 43.1867 + 0x00,0x70,0x0A,0x1D,0x5C,0x2E,0x5F,0x47, /* 00002AF8 ".p..\._G" */ 43.1868 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00002B00 "PEDPT1p." */ 43.1869 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002B08 ".\._GPED" */ 43.1870 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00002B10 "PT2.,_EJ" */ 43.1871 + 0x30,0x01,0x70,0x0A,0x1D,0x5C,0x2E,0x5F, /* 00002B18 "0.p..\._" */ 43.1872 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00002B20 "GPEDPT1p" */ 43.1873 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002B28 "..\._GPE" */ 43.1874 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00002B30 "DPT2p.\." */ 43.1875 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x44, /* 00002B38 "_GPEPH1D" */ 43.1876 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00002B40 ".+_STA.p" */ 43.1877 + 0x0A,0x1D,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002B48 "..\._GPE" */ 43.1878 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00002B50 "DPT1p..\" */ 43.1879 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002B58 "._GPEDPT" */ 43.1880 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002B60 "2.\._GPE" */ 43.1881 + 0x50,0x48,0x31,0x44,0x5B,0x82,0x42,0x0B, /* 00002B68 "PH1D[.B." */ 43.1882 + 0x53,0x31,0x45,0x5F,0x08,0x5F,0x41,0x44, /* 00002B70 "S1E_._AD" */ 43.1883 + 0x52,0x0C,0x00,0x00,0x1E,0x00,0x08,0x5F, /* 00002B78 "R......_" */ 43.1884 + 0x53,0x55,0x4E,0x0A,0x1E,0x14,0x20,0x5F, /* 00002B80 "SUN... _" */ 43.1885 + 0x50,0x53,0x30,0x00,0x70,0x0A,0x1E,0x5C, /* 00002B88 "PS0.p..\" */ 43.1886 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002B90 "._GPEDPT" */ 43.1887 + 0x31,0x70,0x0A,0x80,0x5C,0x2E,0x5F,0x47, /* 00002B98 "1p..\._G" */ 43.1888 + 0x50,0x45,0x44,0x50,0x54,0x32,0x14,0x20, /* 00002BA0 "PEDPT2. " */ 43.1889 + 0x5F,0x50,0x53,0x33,0x00,0x70,0x0A,0x1E, /* 00002BA8 "_PS3.p.." */ 43.1890 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002BB0 "\._GPEDP" */ 43.1891 + 0x54,0x31,0x70,0x0A,0x83,0x5C,0x2E,0x5F, /* 00002BB8 "T1p..\._" */ 43.1892 + 0x47,0x50,0x45,0x44,0x50,0x54,0x32,0x14, /* 00002BC0 "GPEDPT2." */ 43.1893 + 0x2C,0x5F,0x45,0x4A,0x30,0x01,0x70,0x0A, /* 00002BC8 ",_EJ0.p." */ 43.1894 + 0x1E,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002BD0 ".\._GPED" */ 43.1895 + 0x50,0x54,0x31,0x70,0x0A,0x88,0x5C,0x2E, /* 00002BD8 "PT1p..\." */ 43.1896 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x32, /* 00002BE0 "_GPEDPT2" */ 43.1897 + 0x70,0x01,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002BE8 "p.\._GPE" */ 43.1898 + 0x50,0x48,0x31,0x45,0x14,0x2B,0x5F,0x53, /* 00002BF0 "PH1E.+_S" */ 43.1899 + 0x54,0x41,0x00,0x70,0x0A,0x1E,0x5C,0x2E, /* 00002BF8 "TA.p..\." */ 43.1900 + 0x5F,0x47,0x50,0x45,0x44,0x50,0x54,0x31, /* 00002C00 "_GPEDPT1" */ 43.1901 + 0x70,0x0A,0x89,0x5C,0x2E,0x5F,0x47,0x50, /* 00002C08 "p..\._GP" */ 43.1902 + 0x45,0x44,0x50,0x54,0x32,0xA4,0x5C,0x2E, /* 00002C10 "EDPT2.\." */ 43.1903 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x45, /* 00002C18 "_GPEPH1E" */ 43.1904 + 0x5B,0x82,0x42,0x0B,0x53,0x31,0x46,0x5F, /* 00002C20 "[.B.S1F_" */ 43.1905 + 0x08,0x5F,0x41,0x44,0x52,0x0C,0x00,0x00, /* 00002C28 "._ADR..." */ 43.1906 + 0x1F,0x00,0x08,0x5F,0x53,0x55,0x4E,0x0A, /* 00002C30 "..._SUN." */ 43.1907 + 0x1F,0x14,0x20,0x5F,0x50,0x53,0x30,0x00, /* 00002C38 ".. _PS0." */ 43.1908 + 0x70,0x0A,0x1F,0x5C,0x2E,0x5F,0x47,0x50, /* 00002C40 "p..\._GP" */ 43.1909 + 0x45,0x44,0x50,0x54,0x31,0x70,0x0A,0x80, /* 00002C48 "EDPT1p.." */ 43.1910 + 0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44,0x50, /* 00002C50 "\._GPEDP" */ 43.1911 + 0x54,0x32,0x14,0x20,0x5F,0x50,0x53,0x33, /* 00002C58 "T2. _PS3" */ 43.1912 + 0x00,0x70,0x0A,0x1F,0x5C,0x2E,0x5F,0x47, /* 00002C60 ".p..\._G" */ 43.1913 + 0x50,0x45,0x44,0x50,0x54,0x31,0x70,0x0A, /* 00002C68 "PEDPT1p." */ 43.1914 + 0x83,0x5C,0x2E,0x5F,0x47,0x50,0x45,0x44, /* 00002C70 ".\._GPED" */ 43.1915 + 0x50,0x54,0x32,0x14,0x2C,0x5F,0x45,0x4A, /* 00002C78 "PT2.,_EJ" */ 43.1916 + 0x30,0x01,0x70,0x0A,0x1F,0x5C,0x2E,0x5F, /* 00002C80 "0.p..\._" */ 43.1917 + 0x47,0x50,0x45,0x44,0x50,0x54,0x31,0x70, /* 00002C88 "GPEDPT1p" */ 43.1918 + 0x0A,0x88,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002C90 "..\._GPE" */ 43.1919 + 0x44,0x50,0x54,0x32,0x70,0x01,0x5C,0x2E, /* 00002C98 "DPT2p.\." */ 43.1920 + 0x5F,0x47,0x50,0x45,0x50,0x48,0x31,0x46, /* 00002CA0 "_GPEPH1F" */ 43.1921 + 0x14,0x2B,0x5F,0x53,0x54,0x41,0x00,0x70, /* 00002CA8 ".+_STA.p" */ 43.1922 + 0x0A,0x1F,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002CB0 "..\._GPE" */ 43.1923 + 0x44,0x50,0x54,0x31,0x70,0x0A,0x89,0x5C, /* 00002CB8 "DPT1p..\" */ 43.1924 + 0x2E,0x5F,0x47,0x50,0x45,0x44,0x50,0x54, /* 00002CC0 "._GPEDPT" */ 43.1925 + 0x32,0xA4,0x5C,0x2E,0x5F,0x47,0x50,0x45, /* 00002CC8 "2.\._GPE" */ 43.1926 + 0x50,0x48,0x31,0x46,0x10,0x4E,0x51,0x5F, /* 00002CD0 "PH1F.NQ_" */ 43.1927 + 0x47,0x50,0x45,0x5B,0x80,0x50,0x48,0x50, /* 00002CD8 "GPE[.PHP" */ 43.1928 + 0x5F,0x01,0x0B,0xC0,0x10,0x0A,0x22,0x5B, /* 00002CE0 "_....."[" */ 43.1929 + 0x81,0x41,0x0B,0x50,0x48,0x50,0x5F,0x01, /* 00002CE8 ".A.PHP_." */ 43.1930 + 0x50,0x53,0x54,0x41,0x08,0x50,0x53,0x54, /* 00002CF0 "PSTA.PST" */ 43.1931 + 0x42,0x08,0x50,0x48,0x30,0x30,0x08,0x50, /* 00002CF8 "B.PH00.P" */ 43.1932 + 0x48,0x30,0x31,0x08,0x50,0x48,0x30,0x32, /* 00002D00 "H01.PH02" */ 43.1933 + 0x08,0x50,0x48,0x30,0x33,0x08,0x50,0x48, /* 00002D08 ".PH03.PH" */ 43.1934 + 0x30,0x34,0x08,0x50,0x48,0x30,0x35,0x08, /* 00002D10 "04.PH05." */ 43.1935 + 0x50,0x48,0x30,0x36,0x08,0x50,0x48,0x30, /* 00002D18 "PH06.PH0" */ 43.1936 + 0x37,0x08,0x50,0x48,0x30,0x38,0x08,0x50, /* 00002D20 "7.PH08.P" */ 43.1937 + 0x48,0x30,0x39,0x08,0x50,0x48,0x30,0x41, /* 00002D28 "H09.PH0A" */ 43.1938 + 0x08,0x50,0x48,0x30,0x42,0x08,0x50,0x48, /* 00002D30 ".PH0B.PH" */ 43.1939 + 0x30,0x43,0x08,0x50,0x48,0x30,0x44,0x08, /* 00002D38 "0C.PH0D." */ 43.1940 + 0x50,0x48,0x30,0x45,0x08,0x50,0x48,0x30, /* 00002D40 "PH0E.PH0" */ 43.1941 + 0x46,0x08,0x50,0x48,0x31,0x30,0x08,0x50, /* 00002D48 "F.PH10.P" */ 43.1942 + 0x48,0x31,0x31,0x08,0x50,0x48,0x31,0x32, /* 00002D50 "H11.PH12" */ 43.1943 + 0x08,0x50,0x48,0x31,0x33,0x08,0x50,0x48, /* 00002D58 ".PH13.PH" */ 43.1944 + 0x31,0x34,0x08,0x50,0x48,0x31,0x35,0x08, /* 00002D60 "14.PH15." */ 43.1945 + 0x50,0x48,0x31,0x36,0x08,0x50,0x48,0x31, /* 00002D68 "PH16.PH1" */ 43.1946 + 0x37,0x08,0x50,0x48,0x31,0x38,0x08,0x50, /* 00002D70 "7.PH18.P" */ 43.1947 + 0x48,0x31,0x39,0x08,0x50,0x48,0x31,0x41, /* 00002D78 "H19.PH1A" */ 43.1948 + 0x08,0x50,0x48,0x31,0x42,0x08,0x50,0x48, /* 00002D80 ".PH1B.PH" */ 43.1949 + 0x31,0x43,0x08,0x50,0x48,0x31,0x44,0x08, /* 00002D88 "1C.PH1D." */ 43.1950 + 0x50,0x48,0x31,0x45,0x08,0x50,0x48,0x31, /* 00002D90 "PH1E.PH1" */ 43.1951 + 0x46,0x08,0x5B,0x80,0x44,0x47,0x31,0x5F, /* 00002D98 "F.[.DG1_" */ 43.1952 + 0x01,0x0B,0x44,0xB0,0x0A,0x04,0x5B,0x81, /* 00002DA0 "..D...[." */ 43.1953 + 0x10,0x44,0x47,0x31,0x5F,0x01,0x44,0x50, /* 00002DA8 ".DG1_.DP" */ 43.1954 + 0x54,0x31,0x08,0x44,0x50,0x54,0x32,0x08, /* 00002DB0 "T1.DPT2." */ 43.1955 + 0x14,0x4A,0x43,0x5F,0x4C,0x30,0x33,0x08, /* 00002DB8 ".JC_L03." */ 43.1956 + 0x08,0x53,0x4C,0x54,0x5F,0x00,0x08,0x45, /* 00002DC0 ".SLT_..E" */ 43.1957 + 0x56,0x54,0x5F,0x00,0x70,0x50,0x53,0x54, /* 00002DC8 "VT_.pPST" */ 43.1958 + 0x41,0x61,0x7B,0x61,0x0A,0x0F,0x45,0x56, /* 00002DD0 "Aa{a..EV" */ 43.1959 + 0x54,0x5F,0x70,0x50,0x53,0x54,0x42,0x61, /* 00002DD8 "T_pPSTBa" */ 43.1960 + 0x7B,0x61,0x0A,0xFF,0x53,0x4C,0x54,0x5F, /* 00002DE0 "{a..SLT_" */ 43.1961 + 0x70,0x53,0x4C,0x54,0x5F,0x44,0x50,0x54, /* 00002DE8 "pSLT_DPT" */ 43.1962 + 0x31,0x70,0x45,0x56,0x54,0x5F,0x44,0x50, /* 00002DF0 "1pEVT_DP" */ 43.1963 + 0x54,0x32,0xA0,0x1B,0x93,0x53,0x4C,0x54, /* 00002DF8 "T2...SLT" */ 43.1964 + 0x5F,0x00,0x86,0x5C,0x2F,0x03,0x5F,0x53, /* 00002E00 "_..\/._S" */ 43.1965 + 0x42,0x5F,0x50,0x43,0x49,0x30,0x53,0x30, /* 00002E08 "B_PCI0S0" */ 43.1966 + 0x30,0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4C, /* 00002E10 "0_EVT_.L" */ 43.1967 + 0x3D,0xA0,0x1B,0x93,0x53,0x4C,0x54,0x5F, /* 00002E18 "=...SLT_" */ 43.1968 + 0x01,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002E20 "..\/._SB" */ 43.1969 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x31, /* 00002E28 "_PCI0S01" */ 43.1970 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x3B, /* 00002E30 "_EVT_.M;" */ 43.1971 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002E38 "...SLT_." */ 43.1972 + 0x02,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002E40 "..\/._SB" */ 43.1973 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x32, /* 00002E48 "_PCI0S02" */ 43.1974 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x39, /* 00002E50 "_EVT_.M9" */ 43.1975 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002E58 "...SLT_." */ 43.1976 + 0x03,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002E60 "..\/._SB" */ 43.1977 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x33, /* 00002E68 "_PCI0S03" */ 43.1978 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x37, /* 00002E70 "_EVT_.M7" */ 43.1979 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002E78 "...SLT_." */ 43.1980 + 0x04,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002E80 "..\/._SB" */ 43.1981 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x34, /* 00002E88 "_PCI0S04" */ 43.1982 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x35, /* 00002E90 "_EVT_.M5" */ 43.1983 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002E98 "...SLT_." */ 43.1984 + 0x05,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002EA0 "..\/._SB" */ 43.1985 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x35, /* 00002EA8 "_PCI0S05" */ 43.1986 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x33, /* 00002EB0 "_EVT_.M3" */ 43.1987 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002EB8 "...SLT_." */ 43.1988 + 0x06,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002EC0 "..\/._SB" */ 43.1989 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x36, /* 00002EC8 "_PCI0S06" */ 43.1990 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x31, /* 00002ED0 "_EVT_.M1" */ 43.1991 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002ED8 "...SLT_." */ 43.1992 + 0x07,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002EE0 "..\/._SB" */ 43.1993 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x37, /* 00002EE8 "_PCI0S07" */ 43.1994 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x2F, /* 00002EF0 "_EVT_.M/" */ 43.1995 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002EF8 "...SLT_." */ 43.1996 + 0x08,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002F00 "..\/._SB" */ 43.1997 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x38, /* 00002F08 "_PCI0S08" */ 43.1998 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x2D, /* 00002F10 "_EVT_.M-" */ 43.1999 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002F18 "...SLT_." */ 43.2000 + 0x09,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002F20 "..\/._SB" */ 43.2001 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x39, /* 00002F28 "_PCI0S09" */ 43.2002 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x2B, /* 00002F30 "_EVT_.M+" */ 43.2003 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002F38 "...SLT_." */ 43.2004 + 0x0A,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002F40 "..\/._SB" */ 43.2005 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x41, /* 00002F48 "_PCI0S0A" */ 43.2006 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x29, /* 00002F50 "_EVT_.M)" */ 43.2007 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002F58 "...SLT_." */ 43.2008 + 0x0B,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002F60 "..\/._SB" */ 43.2009 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x42, /* 00002F68 "_PCI0S0B" */ 43.2010 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x27, /* 00002F70 "_EVT_.M'" */ 43.2011 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002F78 "...SLT_." */ 43.2012 + 0x0C,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002F80 "..\/._SB" */ 43.2013 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x43, /* 00002F88 "_PCI0S0C" */ 43.2014 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x25, /* 00002F90 "_EVT_.M%" */ 43.2015 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002F98 "...SLT_." */ 43.2016 + 0x0D,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002FA0 "..\/._SB" */ 43.2017 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x44, /* 00002FA8 "_PCI0S0D" */ 43.2018 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x23, /* 00002FB0 "_EVT_.M#" */ 43.2019 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002FB8 "...SLT_." */ 43.2020 + 0x0E,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002FC0 "..\/._SB" */ 43.2021 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x45, /* 00002FC8 "_PCI0S0E" */ 43.2022 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x21, /* 00002FD0 "_EVT_.M!" */ 43.2023 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002FD8 "...SLT_." */ 43.2024 + 0x0F,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00002FE0 "..\/._SB" */ 43.2025 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x30,0x46, /* 00002FE8 "_PCI0S0F" */ 43.2026 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x1F, /* 00002FF0 "_EVT_.M." */ 43.2027 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00002FF8 "...SLT_." */ 43.2028 + 0x10,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003000 "..\/._SB" */ 43.2029 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x30, /* 00003008 "_PCI0S10" */ 43.2030 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x1D, /* 00003010 "_EVT_.M." */ 43.2031 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003018 "...SLT_." */ 43.2032 + 0x11,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003020 "..\/._SB" */ 43.2033 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x31, /* 00003028 "_PCI0S11" */ 43.2034 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x1B, /* 00003030 "_EVT_.M." */ 43.2035 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003038 "...SLT_." */ 43.2036 + 0x12,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003040 "..\/._SB" */ 43.2037 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x32, /* 00003048 "_PCI0S12" */ 43.2038 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x19, /* 00003050 "_EVT_.M." */ 43.2039 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003058 "...SLT_." */ 43.2040 + 0x13,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003060 "..\/._SB" */ 43.2041 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x33, /* 00003068 "_PCI0S13" */ 43.2042 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x17, /* 00003070 "_EVT_.M." */ 43.2043 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003078 "...SLT_." */ 43.2044 + 0x14,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003080 "..\/._SB" */ 43.2045 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x34, /* 00003088 "_PCI0S14" */ 43.2046 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x15, /* 00003090 "_EVT_.M." */ 43.2047 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003098 "...SLT_." */ 43.2048 + 0x15,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000030A0 "..\/._SB" */ 43.2049 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x35, /* 000030A8 "_PCI0S15" */ 43.2050 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x13, /* 000030B0 "_EVT_.M." */ 43.2051 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 000030B8 "...SLT_." */ 43.2052 + 0x16,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000030C0 "..\/._SB" */ 43.2053 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x36, /* 000030C8 "_PCI0S16" */ 43.2054 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x11, /* 000030D0 "_EVT_.M." */ 43.2055 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 000030D8 "...SLT_." */ 43.2056 + 0x17,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000030E0 "..\/._SB" */ 43.2057 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x37, /* 000030E8 "_PCI0S17" */ 43.2058 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x0F, /* 000030F0 "_EVT_.M." */ 43.2059 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 000030F8 "...SLT_." */ 43.2060 + 0x18,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003100 "..\/._SB" */ 43.2061 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x38, /* 00003108 "_PCI0S18" */ 43.2062 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x0D, /* 00003110 "_EVT_.M." */ 43.2063 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003118 "...SLT_." */ 43.2064 + 0x19,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003120 "..\/._SB" */ 43.2065 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x39, /* 00003128 "_PCI0S19" */ 43.2066 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x0B, /* 00003130 "_EVT_.M." */ 43.2067 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003138 "...SLT_." */ 43.2068 + 0x1A,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003140 "..\/._SB" */ 43.2069 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x41, /* 00003148 "_PCI0S1A" */ 43.2070 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x09, /* 00003150 "_EVT_.M." */ 43.2071 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003158 "...SLT_." */ 43.2072 + 0x1B,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003160 "..\/._SB" */ 43.2073 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x42, /* 00003168 "_PCI0S1B" */ 43.2074 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x07, /* 00003170 "_EVT_.M." */ 43.2075 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003178 "...SLT_." */ 43.2076 + 0x1C,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 00003180 "..\/._SB" */ 43.2077 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x43, /* 00003188 "_PCI0S1C" */ 43.2078 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x4D,0x05, /* 00003190 "_EVT_.M." */ 43.2079 + 0xA0,0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A, /* 00003198 "...SLT_." */ 43.2080 + 0x1D,0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42, /* 000031A0 "..\/._SB" */ 43.2081 + 0x5F,0x50,0x43,0x49,0x30,0x53,0x31,0x44, /* 000031A8 "_PCI0S1D" */ 43.2082 + 0x5F,0x45,0x56,0x54,0x5F,0xA1,0x3D,0xA0, /* 000031B0 "_EVT_.=." */ 43.2083 + 0x1C,0x93,0x53,0x4C,0x54,0x5F,0x0A,0x1E, /* 000031B8 "..SLT_.." */ 43.2084 + 0x86,0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F, /* 000031C0 ".\/._SB_" */ 43.2085 + 0x50,0x43,0x49,0x30,0x53,0x31,0x45,0x5F, /* 000031C8 "PCI0S1E_" */ 43.2086 + 0x45,0x56,0x54,0x5F,0xA1,0x1E,0xA0,0x1C, /* 000031D0 "EVT_...." */ 43.2087 + 0x93,0x53,0x4C,0x54,0x5F,0x0A,0x1F,0x86, /* 000031D8 ".SLT_..." */ 43.2088 + 0x5C,0x2F,0x03,0x5F,0x53,0x42,0x5F,0x50, /* 000031E0 "\/._SB_P" */ 43.2089 + 0x43,0x49,0x30,0x53,0x31,0x46,0x5F,0x45, /* 000031E8 "CI0S1F_E" */ 43.2090 + 0x56,0x54,0x5F, 43.2091 }; 43.2092 int DsdtLen=sizeof(AmlCode);
44.1 --- a/tools/firmware/hvmloader/acpi/static_tables.c Mon Mar 30 19:56:30 2009 -0700 44.2 +++ b/tools/firmware/hvmloader/acpi/static_tables.c Thu Apr 23 18:49:41 2009 -0700 44.3 @@ -69,7 +69,7 @@ struct acpi_20_fadt Fadt = { 44.4 .p_lvl3_lat = 0x0fff, /* >1000, means we do not support C3 state */ 44.5 .iapc_boot_arch = ACPI_8042, 44.6 .flags = (ACPI_PROC_C1 | ACPI_SLP_BUTTON | 44.7 - ACPI_WBINVD | ACPI_PWR_BUTTON | 44.8 + ACPI_WBINVD | 44.9 ACPI_FIX_RTC | ACPI_TMR_VAL_EXT), 44.10 44.11 .reset_reg = {
45.1 --- a/tools/firmware/hvmloader/config.h Mon Mar 30 19:56:30 2009 -0700 45.2 +++ b/tools/firmware/hvmloader/config.h Thu Apr 23 18:49:41 2009 -0700 45.3 @@ -47,6 +47,7 @@ extern unsigned long pci_mem_start, pci_ 45.4 #define E820_OFFSET 0x8 45.5 45.6 /* Xen Platform Device */ 45.7 +#define XEN_PF_IOBASE 0x10 45.8 #define PFFLAG_ROM_LOCK 1 /* Sets whether ROM memory area is RW or RO */ 45.9 45.10 /* Located at BIOS_INFO_PHYSICAL_ADDRESS. */ 45.11 @@ -56,9 +57,7 @@ struct bios_info { 45.12 uint8_t hpet_present:1; /* 0[2] - System has HPET? */ 45.13 uint32_t pci_min, pci_len; /* 4, 8 - PCI I/O hole boundaries */ 45.14 uint32_t bios32_entry; /* 12 - Entry point for 32-bit BIOS */ 45.15 - uint16_t xen_pfiob; /* 16 - Xen platform device I/O ports */ 45.16 }; 45.17 #define BIOSINFO_OFF_bios32_entry 12 45.18 -#define BIOSINFO_OFF_xen_pfiob 16 45.19 45.20 #endif /* __HVMLOADER_CONFIG_H__ */
46.1 --- a/tools/firmware/hvmloader/hvmloader.c Mon Mar 30 19:56:30 2009 -0700 46.2 +++ b/tools/firmware/hvmloader/hvmloader.c Thu Apr 23 18:49:41 2009 -0700 46.3 @@ -88,8 +88,8 @@ asm ( 46.4 " .align 8 \n" 46.5 "gdt: \n" 46.6 " .quad 0x0000000000000000 \n" 46.7 - " .quad 0x00009a000000ffff \n" /* Ring 0 code, base 0 limit 0xffff */ 46.8 - " .quad 0x000092000000ffff \n" /* Ring 0 data, base 0 limit 0xffff */ 46.9 + " .quad 0x008f9a000000ffff \n" /* Ring 0 16b code, base 0 limit 4G */ 46.10 + " .quad 0x008f92000000ffff \n" /* Ring 0 16b data, base 0 limit 4G */ 46.11 "gdt_end: \n" 46.12 " \n" 46.13 " .bss \n" 46.14 @@ -539,25 +539,6 @@ static void cmos_write_memory_size(void) 46.15 cmos_outb(0x35, (uint8_t)( alt_mem >> 8)); 46.16 } 46.17 46.18 -static uint16_t xen_platform_io_base(void) 46.19 -{ 46.20 - uint32_t devfn, bar_data; 46.21 - uint16_t vendor_id, device_id; 46.22 - 46.23 - for ( devfn = 0; devfn < 128; devfn++ ) 46.24 - { 46.25 - vendor_id = pci_readw(devfn, PCI_VENDOR_ID); 46.26 - device_id = pci_readw(devfn, PCI_DEVICE_ID); 46.27 - if ( (vendor_id == 0x5853) && (device_id == 0x0001) ) 46.28 - { 46.29 - bar_data = pci_readl(devfn, PCI_BASE_ADDRESS_0); 46.30 - return bar_data & PCI_BASE_ADDRESS_IO_MASK; 46.31 - } 46.32 - } 46.33 - 46.34 - return 0; 46.35 -} 46.36 - 46.37 /* 46.38 * Set up an empty TSS area for virtual 8086 mode to use. 46.39 * The only important thing is that it musn't have any bits set 46.40 @@ -744,7 +725,6 @@ int main(void) 46.41 bios_info->pci_min = pci_mem_start; 46.42 bios_info->pci_len = pci_mem_end - pci_mem_start; 46.43 bios_info->bios32_entry = bios32_addr; 46.44 - bios_info->xen_pfiob = xen_platform_io_base(); 46.45 46.46 printf("Invoking ROMBIOS ...\n"); 46.47 return 0;
47.1 --- a/tools/firmware/rombios/32bit/pmm.c Mon Mar 30 19:56:30 2009 -0700 47.2 +++ b/tools/firmware/rombios/32bit/pmm.c Thu Apr 23 18:49:41 2009 -0700 47.3 @@ -71,10 +71,13 @@ 47.4 47.5 #define DEBUG_PMM 0 47.6 47.7 +#define __stringify(a) #a 47.8 +#define stringify(a) __stringify(a) 47.9 + 47.10 #define ASSERT(_expr, _action) \ 47.11 if (!(_expr)) { \ 47.12 printf("ASSERTION FAIL: %s %s:%d %s()\n", \ 47.13 - __STRING(_expr), __FILE__, __LINE__, __func__); \ 47.14 + stringify(_expr), __FILE__, __LINE__, __func__); \ 47.15 _action; \ 47.16 } else 47.17
48.1 --- a/tools/firmware/rombios/32bitgateway.c Mon Mar 30 19:56:30 2009 -0700 48.2 +++ b/tools/firmware/rombios/32bitgateway.c Thu Apr 23 18:49:41 2009 -0700 48.3 @@ -56,13 +56,13 @@ gdt_entry_pm_32bit_cs: 48.4 .byte 0x00, 0x9b, 0xcf, 0x00 48.5 gdt_entry_pm_16bit_cs: 48.6 .word 0xffff, 0x0000 48.7 - .byte REAL_MODE_CODE_OFFSET >> 16, 0x9b, 0x0, 0x0 48.8 + .byte REAL_MODE_CODE_OFFSET >> 16, 0x9b, 0x8f, 0x0 48.9 gdt_entry_pm_32bit_ds: 48.10 .word 0xffff, 0x0000 48.11 .byte 0x0, 0x93, 0xcf, 0x0 48.12 gdt_entry_pm_16bit_ds: 48.13 .word 0xffff, 0x0000 48.14 - .byte 0x0, 0x93, 0x0, 0x0 48.15 + .byte 0x0, 0x93, 0x8f, 0x0 48.16 gdt_entry_end: 48.17 48.18 protmode_gdtdesc:
49.1 --- a/tools/firmware/rombios/rombios.c Mon Mar 30 19:56:30 2009 -0700 49.2 +++ b/tools/firmware/rombios/rombios.c Thu Apr 23 18:49:41 2009 -0700 49.3 @@ -1418,24 +1418,14 @@ fixup_base_mem_in_k() 49.4 write_word(0x40, 0x13, base_mem >> 10); 49.5 } 49.6 49.7 -ASM_START 49.8 -_rom_write_access_control: 49.9 - push ds 49.10 - mov ax,#(BIOS_INFO_PHYSICAL_ADDRESS >> 4) 49.11 - mov ds,ax 49.12 - mov ax,[BIOSINFO_OFF_xen_pfiob] 49.13 - pop ds 49.14 - ret 49.15 -ASM_END 49.16 - 49.17 void enable_rom_write_access() 49.18 { 49.19 - outb(rom_write_access_control(), 0); 49.20 + outb(XEN_PF_IOBASE, 0); 49.21 } 49.22 49.23 void disable_rom_write_access() 49.24 { 49.25 - outb(rom_write_access_control(), PFFLAG_ROM_LOCK); 49.26 + outb(XEN_PF_IOBASE, PFFLAG_ROM_LOCK); 49.27 } 49.28 49.29 #endif /* HVMASSIST */
50.1 --- a/tools/fs-back/Makefile Mon Mar 30 19:56:30 2009 -0700 50.2 +++ b/tools/fs-back/Makefile Thu Apr 23 18:49:41 2009 -0700 50.3 @@ -16,7 +16,7 @@ CFLAGS += -D_GNU_SOURCE 50.4 LIBS := -L. -L.. -L../lib 50.5 LIBS += $(LDFLAGS_libxenctrl) 50.6 LIBS += $(LDFLAGS_libxenstore) 50.7 -LIBS += -lpthread -lrt 50.8 +LIBS += -lrt 50.9 50.10 OBJS := fs-xenbus.o fs-ops.o 50.11
51.1 --- a/tools/fs-back/fs-backend.c Mon Mar 30 19:56:30 2009 -0700 51.2 +++ b/tools/fs-back/fs-backend.c Thu Apr 23 18:49:41 2009 -0700 51.3 @@ -1,108 +1,76 @@ 51.4 #undef NDEBUG 51.5 +#include <unistd.h> 51.6 #include <stdio.h> 51.7 #include <string.h> 51.8 #include <assert.h> 51.9 #include <malloc.h> 51.10 -#include <pthread.h> 51.11 #include <xenctrl.h> 51.12 #include <aio.h> 51.13 #include <sys/mman.h> 51.14 #include <sys/select.h> 51.15 +#include <sys/socket.h> 51.16 #include <xen/io/ring.h> 51.17 +#include <xc_private.h> 51.18 +#include <err.h> 51.19 +#include "sys-queue.h" 51.20 #include "fs-backend.h" 51.21 +#include "fs-debug.h" 51.22 51.23 struct xs_handle *xsh = NULL; 51.24 static struct fs_export *fs_exports = NULL; 51.25 static int export_id = 0; 51.26 static int mount_id = 0; 51.27 +static int pipefds[2]; 51.28 +static LIST_HEAD(mount_requests_head, fs_mount) mount_requests_head; 51.29 51.30 -static void dispatch_response(struct fs_mount *mount, int priv_req_id) 51.31 +static void free_mount_request(struct fs_mount *mount); 51.32 + 51.33 +static void dispatch_response(struct fs_request *request) 51.34 { 51.35 int i; 51.36 struct fs_op *op; 51.37 - struct fs_request *req = &mount->requests[priv_req_id]; 51.38 51.39 for(i=0;;i++) 51.40 { 51.41 op = fsops[i]; 51.42 /* We should dispatch a response before reaching the end of the array */ 51.43 assert(op != NULL); 51.44 - if(op->type == req->req_shadow.type) 51.45 + if(op->type == request->req_shadow.type) 51.46 { 51.47 - printf("Found op for type=%d\n", op->type); 51.48 + FS_DEBUG("Found op for type=%d\n", op->type); 51.49 /* There needs to be a response handler */ 51.50 assert(op->response_handler != NULL); 51.51 - op->response_handler(mount, req); 51.52 + op->response_handler(request->mount, request); 51.53 break; 51.54 } 51.55 } 51.56 51.57 - req->active = 0; 51.58 - add_id_to_freelist(priv_req_id, mount->freelist); 51.59 + request->active = 0; 51.60 + add_id_to_freelist(request->id, request->mount->freelist); 51.61 } 51.62 51.63 -static void handle_aio_events(struct fs_mount *mount) 51.64 +static void handle_aio_event(struct fs_request *request) 51.65 { 51.66 - int fd, ret, count, i, notify; 51.67 - evtchn_port_t port; 51.68 - /* AIO control block for the evtchn file destriptor */ 51.69 - struct aiocb evtchn_cb; 51.70 - const struct aiocb * cb_list[mount->nr_entries]; 51.71 - int request_ids[mount->nr_entries]; 51.72 - 51.73 - /* Prepare the AIO control block for evtchn */ 51.74 - fd = xc_evtchn_fd(mount->evth); 51.75 - bzero(&evtchn_cb, sizeof(struct aiocb)); 51.76 - evtchn_cb.aio_fildes = fd; 51.77 - evtchn_cb.aio_nbytes = sizeof(port); 51.78 - evtchn_cb.aio_buf = &port; 51.79 - assert(aio_read(&evtchn_cb) == 0); 51.80 + int ret, notify; 51.81 51.82 -wait_again: 51.83 - /* Create list of active AIO requests */ 51.84 - count = 0; 51.85 - for(i=0; i<mount->nr_entries; i++) 51.86 - if(mount->requests[i].active) 51.87 - { 51.88 - cb_list[count] = &mount->requests[i].aiocb; 51.89 - request_ids[count] = i; 51.90 - count++; 51.91 - } 51.92 - /* Add the event channel at the end of the list. Event channel needs to be 51.93 - * handled last as it exits this function. */ 51.94 - cb_list[count] = &evtchn_cb; 51.95 - request_ids[count] = -1; 51.96 - count++; 51.97 + FS_DEBUG("handle_aio_event: mount %s request %d\n", request->mount->frontend, request->id); 51.98 + if (request->active < 0) { 51.99 + request->mount->nr_entries++; 51.100 + if (!request->mount->nr_entries) 51.101 + free_mount_request(request->mount); 51.102 + return; 51.103 + } 51.104 51.105 - /* Block till an AIO requset finishes, or we get an event */ 51.106 - while(1) { 51.107 - int ret = aio_suspend(cb_list, count, NULL); 51.108 - if (!ret) 51.109 - break; 51.110 - assert(errno == EINTR); 51.111 - } 51.112 - for(i=0; i<count; i++) 51.113 - if(aio_error(cb_list[i]) != EINPROGRESS) 51.114 - { 51.115 - if(request_ids[i] >= 0) 51.116 - dispatch_response(mount, request_ids[i]); 51.117 - else 51.118 - goto read_event_channel; 51.119 - } 51.120 - 51.121 - RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&mount->ring, notify); 51.122 - printf("Pushed responces and notify=%d\n", notify); 51.123 + ret = aio_error(&request->aiocb); 51.124 + if(ret != EINPROGRESS && ret != ECANCELED) 51.125 + dispatch_response(request); 51.126 + 51.127 + RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&request->mount->ring, notify); 51.128 + FS_DEBUG("Pushed responces and notify=%d\n", notify); 51.129 if(notify) 51.130 - xc_evtchn_notify(mount->evth, mount->local_evtchn); 51.131 - 51.132 - goto wait_again; 51.133 - 51.134 -read_event_channel: 51.135 - assert(aio_return(&evtchn_cb) == sizeof(evtchn_port_t)); 51.136 - assert(xc_evtchn_unmask(mount->evth, mount->local_evtchn) >= 0); 51.137 + xc_evtchn_notify(request->mount->evth, request->mount->local_evtchn); 51.138 } 51.139 51.140 - 51.141 static void allocate_request_array(struct fs_mount *mount) 51.142 { 51.143 int i, nr_entries = mount->nr_entries; 51.144 @@ -116,6 +84,7 @@ static void allocate_request_array(struc 51.145 for(i=0; i< nr_entries; i++) 51.146 { 51.147 requests[i].active = 0; 51.148 + requests[i].mount = mount; 51.149 add_id_to_freelist(i, freelist); 51.150 } 51.151 mount->requests = requests; 51.152 @@ -123,86 +92,102 @@ static void allocate_request_array(struc 51.153 } 51.154 51.155 51.156 -static void *handle_mount(void *data) 51.157 +static void handle_mount(struct fs_mount *mount) 51.158 { 51.159 int more, notify; 51.160 - struct fs_mount *mount = (struct fs_mount *)data; 51.161 - 51.162 - printf("Starting a thread for mount: %d\n", mount->mount_id); 51.163 - allocate_request_array(mount); 51.164 + int nr_consumed=0; 51.165 + RING_IDX cons, rp; 51.166 + struct fsif_request *req; 51.167 51.168 - for(;;) 51.169 - { 51.170 - int nr_consumed=0; 51.171 - RING_IDX cons, rp; 51.172 - struct fsif_request *req; 51.173 - 51.174 - handle_aio_events(mount); 51.175 moretodo: 51.176 - rp = mount->ring.sring->req_prod; 51.177 - xen_rmb(); /* Ensure we see queued requests up to 'rp'. */ 51.178 + rp = mount->ring.sring->req_prod; 51.179 + xen_rmb(); /* Ensure we see queued requests up to 'rp'. */ 51.180 51.181 - while ((cons = mount->ring.req_cons) != rp) 51.182 + while ((cons = mount->ring.req_cons) != rp) 51.183 + { 51.184 + int i; 51.185 + struct fs_op *op; 51.186 + 51.187 + FS_DEBUG("Got a request at %d (of %d)\n", 51.188 + cons, RING_SIZE(&mount->ring)); 51.189 + req = RING_GET_REQUEST(&mount->ring, cons); 51.190 + FS_DEBUG("Request type=%d\n", req->type); 51.191 + for(i=0;;i++) 51.192 { 51.193 - int i; 51.194 - struct fs_op *op; 51.195 - 51.196 - printf("Got a request at %d (of %d)\n", 51.197 - cons, RING_SIZE(&mount->ring)); 51.198 - req = RING_GET_REQUEST(&mount->ring, cons); 51.199 - printf("Request type=%d\n", req->type); 51.200 - for(i=0;;i++) 51.201 + op = fsops[i]; 51.202 + if(op == NULL) 51.203 + { 51.204 + /* We've reached the end of the array, no appropirate 51.205 + * handler found. Warn, ignore and continue. */ 51.206 + FS_DEBUG("WARN: Unknown request type: %d\n", req->type); 51.207 + mount->ring.req_cons++; 51.208 + break; 51.209 + } 51.210 + if(op->type == req->type) 51.211 { 51.212 - op = fsops[i]; 51.213 - if(op == NULL) 51.214 - { 51.215 - /* We've reached the end of the array, no appropirate 51.216 - * handler found. Warn, ignore and continue. */ 51.217 - printf("WARN: Unknown request type: %d\n", req->type); 51.218 - mount->ring.req_cons++; 51.219 - break; 51.220 - } 51.221 - if(op->type == req->type) 51.222 - { 51.223 - /* There needs to be a dispatch handler */ 51.224 - assert(op->dispatch_handler != NULL); 51.225 - op->dispatch_handler(mount, req); 51.226 - break; 51.227 - } 51.228 - } 51.229 + /* There needs to be a dispatch handler */ 51.230 + assert(op->dispatch_handler != NULL); 51.231 + op->dispatch_handler(mount, req); 51.232 + break; 51.233 + } 51.234 + } 51.235 + 51.236 + nr_consumed++; 51.237 + } 51.238 + FS_DEBUG("Backend consumed: %d requests\n", nr_consumed); 51.239 + RING_FINAL_CHECK_FOR_REQUESTS(&mount->ring, more); 51.240 + if(more) goto moretodo; 51.241 + 51.242 + RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&mount->ring, notify); 51.243 + FS_DEBUG("Pushed responces and notify=%d\n", notify); 51.244 + if(notify) 51.245 + xc_evtchn_notify(mount->evth, mount->local_evtchn); 51.246 +} 51.247 51.248 - nr_consumed++; 51.249 - } 51.250 - printf("Backend consumed: %d requests\n", nr_consumed); 51.251 - RING_FINAL_CHECK_FOR_REQUESTS(&mount->ring, more); 51.252 - if(more) goto moretodo; 51.253 +static void terminate_mount_request(struct fs_mount *mount) { 51.254 + int count = 0, i; 51.255 + 51.256 + FS_DEBUG("terminate_mount_request %s\n", mount->frontend); 51.257 + xenbus_write_backend_state(mount, STATE_CLOSING); 51.258 51.259 - RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&mount->ring, notify); 51.260 - printf("Pushed responces and notify=%d\n", notify); 51.261 - if(notify) 51.262 - xc_evtchn_notify(mount->evth, mount->local_evtchn); 51.263 - } 51.264 - 51.265 - printf("Destroying thread for mount: %d\n", mount->mount_id); 51.266 - xc_gnttab_munmap(mount->gnth, mount->ring.sring, 1); 51.267 + for(i=0; i<mount->nr_entries; i++) 51.268 + if(mount->requests[i].active) { 51.269 + mount->requests[i].active = -1; 51.270 + aio_cancel(mount->requests[i].aiocb.aio_fildes, &mount->requests[i].aiocb); 51.271 + count--; 51.272 + } 51.273 + mount->nr_entries = count; 51.274 + 51.275 + while (!xenbus_frontend_state_changed(mount, STATE_CLOSING)); 51.276 + xenbus_write_backend_state(mount, STATE_CLOSED); 51.277 + 51.278 + xc_gnttab_munmap(mount->gnth, mount->ring.sring, mount->shared_ring_size); 51.279 xc_gnttab_close(mount->gnth); 51.280 xc_evtchn_unbind(mount->evth, mount->local_evtchn); 51.281 xc_evtchn_close(mount->evth); 51.282 + 51.283 + if (!count) 51.284 + free_mount_request(mount); 51.285 +} 51.286 + 51.287 +static void free_mount_request(struct fs_mount *mount) { 51.288 + FS_DEBUG("free_mount_request %s\n", mount->frontend); 51.289 free(mount->frontend); 51.290 - pthread_exit(NULL); 51.291 + free(mount->requests); 51.292 + free(mount->freelist); 51.293 + LIST_REMOVE (mount, entries); 51.294 + free(mount); 51.295 } 51.296 51.297 static void handle_connection(int frontend_dom_id, int export_id, char *frontend) 51.298 { 51.299 struct fs_mount *mount; 51.300 struct fs_export *export; 51.301 - int evt_port; 51.302 - pthread_t handling_thread; 51.303 struct fsif_sring *sring; 51.304 uint32_t dom_ids[MAX_RING_SIZE]; 51.305 int i; 51.306 51.307 - printf("Handling connection from dom=%d, for export=%d\n", 51.308 + FS_DEBUG("Handling connection from dom=%d, for export=%d\n", 51.309 frontend_dom_id, export_id); 51.310 /* Try to find the export on the list */ 51.311 export = fs_exports; 51.312 @@ -214,7 +199,7 @@ static void handle_connection(int fronte 51.313 } 51.314 if(!export) 51.315 { 51.316 - printf("Could not find the export (the id is unknown).\n"); 51.317 + FS_DEBUG("Could not find the export (the id is unknown).\n"); 51.318 return; 51.319 } 51.320 51.321 @@ -223,7 +208,7 @@ static void handle_connection(int fronte 51.322 mount->export = export; 51.323 mount->mount_id = mount_id++; 51.324 xenbus_read_mount_request(mount, frontend); 51.325 - printf("Frontend found at: %s (gref=%d, evtchn=%d)\n", 51.326 + FS_DEBUG("Frontend found at: %s (gref=%d, evtchn=%d)\n", 51.327 mount->frontend, mount->grefs[0], mount->remote_evtchn); 51.328 xenbus_write_backend_node(mount); 51.329 mount->evth = -1; 51.330 @@ -249,18 +234,24 @@ static void handle_connection(int fronte 51.331 mount->nr_entries = mount->ring.nr_ents; 51.332 for (i = 0; i < MAX_FDS; i++) 51.333 mount->fds[i] = -1; 51.334 - xenbus_write_backend_ready(mount); 51.335 51.336 - pthread_create(&handling_thread, NULL, &handle_mount, mount); 51.337 + LIST_INSERT_HEAD(&mount_requests_head, mount, entries); 51.338 + xenbus_watch_frontend_state(mount); 51.339 + xenbus_write_backend_state(mount, STATE_READY); 51.340 + 51.341 + allocate_request_array(mount); 51.342 } 51.343 51.344 static void await_connections(void) 51.345 { 51.346 - int fd, ret, dom_id, export_id; 51.347 + int fd, max_fd, ret, dom_id, export_id; 51.348 fd_set fds; 51.349 char **watch_paths; 51.350 unsigned int len; 51.351 char d; 51.352 + struct fs_mount *pointer; 51.353 + 51.354 + LIST_INIT (&mount_requests_head); 51.355 51.356 assert(xsh != NULL); 51.357 fd = xenbus_get_watch_fd(); 51.358 @@ -268,28 +259,97 @@ static void await_connections(void) 51.359 do { 51.360 FD_ZERO(&fds); 51.361 FD_SET(fd, &fds); 51.362 - ret = select(fd+1, &fds, NULL, NULL, NULL); 51.363 - assert(ret == 1); 51.364 - watch_paths = xs_read_watch(xsh, &len); 51.365 - assert(len == 2); 51.366 - assert(strcmp(watch_paths[1], "conn-watch") == 0); 51.367 - dom_id = -1; 51.368 - export_id = -1; 51.369 - d = 0; 51.370 - printf("Path changed %s\n", watch_paths[0]); 51.371 - sscanf(watch_paths[0], WATCH_NODE"/%d/%d/fronten%c", 51.372 - &dom_id, &export_id, &d); 51.373 - if((dom_id >= 0) && (export_id >= 0) && d == 'd') { 51.374 - char *frontend = xs_read(xsh, XBT_NULL, watch_paths[0], NULL); 51.375 - if (frontend) { 51.376 - handle_connection(dom_id, export_id, frontend); 51.377 - xs_rm(xsh, XBT_NULL, watch_paths[0]); 51.378 - } 51.379 - } 51.380 -next_select: 51.381 - printf("Awaiting next connection.\n"); 51.382 - /* TODO - we need to figure out what to free */ 51.383 - free(watch_paths); 51.384 + FD_SET(pipefds[0], &fds); 51.385 + max_fd = fd > pipefds[0] ? fd : pipefds[0]; 51.386 + LIST_FOREACH(pointer, &mount_requests_head, entries) { 51.387 + int tfd = xc_evtchn_fd(pointer->evth); 51.388 + FD_SET(tfd, &fds); 51.389 + if (tfd > max_fd) max_fd = tfd; 51.390 + } 51.391 + ret = select(max_fd+1, &fds, NULL, NULL, NULL); 51.392 + if (ret < 0) { 51.393 + if (errno == EINTR) continue; 51.394 + /* try to recover */ 51.395 + else if (errno == EBADF) { 51.396 + struct timeval timeout; 51.397 + memset(&timeout, 0x00, sizeof(timeout)); 51.398 + FD_ZERO(&fds); 51.399 + FD_SET(fd, &fds); 51.400 + FD_SET(pipefds[0], &fds); 51.401 + max_fd = fd > pipefds[0] ? fd : pipefds[0]; 51.402 + ret = select(max_fd + 1, &fds, NULL, NULL, &timeout); 51.403 + if (ret < 0) 51.404 + err(1, "select: unrecoverable error occurred: %d\n", errno); 51.405 + 51.406 + /* trying to find the bogus fd among the open event channels */ 51.407 + LIST_FOREACH(pointer, &mount_requests_head, entries) { 51.408 + int tfd = xc_evtchn_fd(pointer->evth); 51.409 + memset(&timeout, 0x00, sizeof(timeout)); 51.410 + FD_ZERO(&fds); 51.411 + FD_SET(tfd, &fds); 51.412 + ret = select(tfd + 1, &fds, NULL, NULL, &timeout); 51.413 + if (ret < 0) { 51.414 + FS_DEBUG("fd %d is bogus, closing the related connection\n", tfd); 51.415 + pointer->evth = fd; 51.416 + terminate_mount_request(pointer); 51.417 + continue; 51.418 + } 51.419 + } 51.420 + continue; 51.421 + } else 51.422 + err(1, "select: unrecoverable error occurred: %d\n", errno); 51.423 + } 51.424 + if (FD_ISSET(fd, &fds)) { 51.425 + watch_paths = xs_read_watch(xsh, &len); 51.426 + if (!strcmp(watch_paths[XS_WATCH_TOKEN], "conn-watch")) { 51.427 + dom_id = -1; 51.428 + export_id = -1; 51.429 + d = 0; 51.430 + FS_DEBUG("Path changed %s\n", watch_paths[0]); 51.431 + sscanf(watch_paths[XS_WATCH_PATH], WATCH_NODE"/%d/%d/fronten%c", 51.432 + &dom_id, &export_id, &d); 51.433 + if((dom_id >= 0) && (export_id >= 0) && d == 'd') { 51.434 + char *frontend = xs_read(xsh, XBT_NULL, watch_paths[XS_WATCH_PATH], NULL); 51.435 + if (frontend) { 51.436 + handle_connection(dom_id, export_id, frontend); 51.437 + xs_rm(xsh, XBT_NULL, watch_paths[XS_WATCH_PATH]); 51.438 + } 51.439 + } 51.440 + } else if (!strcmp(watch_paths[XS_WATCH_TOKEN], "frontend-state")) { 51.441 + LIST_FOREACH(pointer, &mount_requests_head, entries) { 51.442 + if (!strncmp(pointer->frontend, watch_paths[XS_WATCH_PATH], strlen(pointer->frontend))) { 51.443 + char *state = xenbus_read_frontend_state(pointer); 51.444 + if (!state || strcmp(state, STATE_READY)) { 51.445 + xenbus_unwatch_frontend_state(pointer); 51.446 + terminate_mount_request(pointer); 51.447 + } 51.448 + free(state); 51.449 + break; 51.450 + } 51.451 + } 51.452 + } else { 51.453 + FS_DEBUG("xenstore watch event unrecognized\n"); 51.454 + } 51.455 + FS_DEBUG("Awaiting next connection.\n"); 51.456 + /* TODO - we need to figure out what to free */ 51.457 + free(watch_paths); 51.458 + } 51.459 + if (FD_ISSET(pipefds[0], &fds)) { 51.460 + struct fs_request *request; 51.461 + if (read_exact(pipefds[0], &request, sizeof(struct fs_request *)) < 0) 51.462 + err(1, "read request failed\n"); 51.463 + handle_aio_event(request); 51.464 + } 51.465 + LIST_FOREACH(pointer, &mount_requests_head, entries) { 51.466 + if (FD_ISSET(xc_evtchn_fd(pointer->evth), &fds)) { 51.467 + evtchn_port_t port; 51.468 + port = xc_evtchn_pending(pointer->evth); 51.469 + if (port != -1) { 51.470 + handle_mount(pointer); 51.471 + xc_evtchn_unmask(pointer->evth, port); 51.472 + } 51.473 + } 51.474 + } 51.475 } while (1); 51.476 } 51.477 51.478 @@ -312,10 +372,29 @@ static struct fs_export* create_export(c 51.479 return curr_export; 51.480 } 51.481 51.482 +static void aio_signal_handler(int signo, siginfo_t *info, void *context) 51.483 +{ 51.484 + struct fs_request *request = (struct fs_request*) info->si_value.sival_ptr; 51.485 + int saved_errno = errno; 51.486 + if (write_exact(pipefds[1], &request, sizeof(struct fs_request *)) < 0) 51.487 + err(1, "write request filed\n"); 51.488 + errno = saved_errno; 51.489 +} 51.490 51.491 int main(void) 51.492 { 51.493 struct fs_export *export; 51.494 + struct sigaction act; 51.495 + sigset_t enable; 51.496 + 51.497 + sigemptyset(&enable); 51.498 + sigaddset(&enable, SIGUSR2); 51.499 + pthread_sigmask(SIG_UNBLOCK, &enable, NULL); 51.500 + 51.501 + sigfillset(&act.sa_mask); 51.502 + act.sa_flags = SA_SIGINFO; /* do not restart syscalls to interrupt select(); use sa_sigaction */ 51.503 + act.sa_sigaction = aio_signal_handler; 51.504 + sigaction(SIGUSR2, &act, NULL); 51.505 51.506 /* Open the connection to XenStore first */ 51.507 xsh = xs_domain_open(); 51.508 @@ -328,6 +407,9 @@ int main(void) 51.509 export = create_export("default", "/exports"); 51.510 xenbus_register_export(export); 51.511 51.512 + if (socketpair(PF_UNIX,SOCK_STREAM, 0, pipefds) == -1) 51.513 + err(1, "failed to create pipe\n"); 51.514 + 51.515 await_connections(); 51.516 /* Close the connection to XenStore when we are finished with everything */ 51.517 xs_daemon_close(xsh);
52.1 --- a/tools/fs-back/fs-backend.h Mon Mar 30 19:56:30 2009 -0700 52.2 +++ b/tools/fs-back/fs-backend.h Thu Apr 23 18:49:41 2009 -0700 52.3 @@ -7,6 +7,7 @@ 52.4 #include <xen/event_channel.h> 52.5 #include <xen/io/ring.h> 52.6 #include <xen/io/fsif.h> 52.7 +#include "sys-queue.h" 52.8 52.9 #define ROOT_NODE "backend/vfs" 52.10 #define EXPORTS_SUBNODE "exports" 52.11 @@ -25,6 +26,8 @@ struct fs_export 52.12 52.13 struct fs_request 52.14 { 52.15 + struct fs_mount *mount; 52.16 + int id; 52.17 int active; 52.18 void *page; /* Pointer to mapped grant */ 52.19 int count; 52.20 @@ -50,6 +53,7 @@ struct fs_mount 52.21 struct fs_request *requests; 52.22 unsigned short *freelist; 52.23 int fds[MAX_FDS]; 52.24 + LIST_ENTRY(fs_mount) entries; 52.25 }; 52.26 52.27 52.28 @@ -61,7 +65,11 @@ int xenbus_register_export(struct fs_exp 52.29 int xenbus_get_watch_fd(void); 52.30 void xenbus_read_mount_request(struct fs_mount *mount, char *frontend); 52.31 void xenbus_write_backend_node(struct fs_mount *mount); 52.32 -void xenbus_write_backend_ready(struct fs_mount *mount); 52.33 +void xenbus_write_backend_state(struct fs_mount *mount, const char *state); 52.34 +int xenbus_frontend_state_changed(struct fs_mount *mount, const char *oldstate); 52.35 +void xenbus_watch_frontend_state(struct fs_mount *mount); 52.36 +void xenbus_unwatch_frontend_state(struct fs_mount *mount); 52.37 +char* xenbus_read_frontend_state(struct fs_mount *mount); 52.38 52.39 /* File operations, implemented in fs-ops.c */ 52.40 struct fs_op
53.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 53.2 +++ b/tools/fs-back/fs-debug.h Thu Apr 23 18:49:41 2009 -0700 53.3 @@ -0,0 +1,12 @@ 53.4 +#ifndef __FS_DEBUG__ 53.5 +#define __FS_DEBUG__ 53.6 + 53.7 +// #define DEBUG 1 53.8 + 53.9 +#ifdef DEBUG 53.10 +#define FS_DEBUG(fmt, ...) do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0) 53.11 +#else 53.12 +#define FS_DEBUG(fmt, ...) do { } while (0) 53.13 +#endif 53.14 + 53.15 +#endif /*__FS_DEBUG__*/
54.1 --- a/tools/fs-back/fs-ops.c Mon Mar 30 19:56:30 2009 -0700 54.2 +++ b/tools/fs-back/fs-ops.c Thu Apr 23 18:49:41 2009 -0700 54.3 @@ -14,6 +14,7 @@ 54.4 #include <sys/mount.h> 54.5 #include <unistd.h> 54.6 #include "fs-backend.h" 54.7 +#include "fs-debug.h" 54.8 54.9 /* For debugging only */ 54.10 #include <sys/time.h> 54.11 @@ -22,12 +23,11 @@ 54.12 54.13 #define BUFFER_SIZE 1024 54.14 54.15 - 54.16 static unsigned short get_request(struct fs_mount *mount, struct fsif_request *req) 54.17 { 54.18 unsigned short id = get_id_from_freelist(mount->freelist); 54.19 54.20 - printf("Private Request id: %d\n", id); 54.21 + FS_DEBUG("Private Request id: %d\n", id); 54.22 memcpy(&mount->requests[id].req_shadow, req, sizeof(struct fsif_request)); 54.23 mount->requests[id].active = 1; 54.24 54.25 @@ -49,12 +49,11 @@ static void dispatch_file_open(struct fs 54.26 { 54.27 char *file_name, full_path[BUFFER_SIZE]; 54.28 int fd; 54.29 - struct timeval tv1, tv2; 54.30 RING_IDX rsp_idx; 54.31 fsif_response_t *rsp; 54.32 uint16_t req_id; 54.33 54.34 - printf("Dispatching file open operation (gref=%d).\n", req->u.fopen.gref); 54.35 + FS_DEBUG("Dispatching file open operation (gref=%d).\n", req->u.fopen.gref); 54.36 /* Read the request, and open file */ 54.37 file_name = xc_gnttab_map_grant_ref(mount->gnth, 54.38 mount->dom_id, 54.39 @@ -62,13 +61,13 @@ static void dispatch_file_open(struct fs 54.40 PROT_READ); 54.41 54.42 req_id = req->id; 54.43 - printf("File open issued for %s\n", file_name); 54.44 + FS_DEBUG("File open issued for %s\n", file_name); 54.45 assert(BUFFER_SIZE > 54.46 strlen(file_name) + strlen(mount->export->export_path) + 1); 54.47 snprintf(full_path, sizeof(full_path), "%s/%s", 54.48 mount->export->export_path, file_name); 54.49 assert(xc_gnttab_munmap(mount->gnth, file_name, 1) == 0); 54.50 - printf("Issuing open for %s\n", full_path); 54.51 + FS_DEBUG("Issuing open for %s\n", full_path); 54.52 fd = get_fd(mount); 54.53 if (fd >= 0) { 54.54 int real_fd = open(full_path, O_RDWR); 54.55 @@ -77,7 +76,7 @@ static void dispatch_file_open(struct fs 54.56 else 54.57 { 54.58 mount->fds[fd] = real_fd; 54.59 - printf("Got FD: %d for real %d\n", fd, real_fd); 54.60 + FS_DEBUG("Got FD: %d for real %d\n", fd, real_fd); 54.61 } 54.62 } 54.63 /* We can advance the request consumer index, from here on, the request 54.64 @@ -87,7 +86,7 @@ static void dispatch_file_open(struct fs 54.65 54.66 /* Get a response from the ring */ 54.67 rsp_idx = mount->ring.rsp_prod_pvt++; 54.68 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.69 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.70 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.71 rsp->id = req_id; 54.72 rsp->ret_val = (uint64_t)fd; 54.73 @@ -100,7 +99,7 @@ static void dispatch_file_close(struct f 54.74 fsif_response_t *rsp; 54.75 uint16_t req_id; 54.76 54.77 - printf("Dispatching file close operation (fd=%d).\n", req->u.fclose.fd); 54.78 + FS_DEBUG("Dispatching file close operation (fd=%d).\n", req->u.fclose.fd); 54.79 54.80 req_id = req->id; 54.81 if (req->u.fclose.fd < MAX_FDS) { 54.82 @@ -109,7 +108,7 @@ static void dispatch_file_close(struct f 54.83 mount->fds[req->u.fclose.fd] = -1; 54.84 } else 54.85 ret = -1; 54.86 - printf("Got ret: %d\n", ret); 54.87 + FS_DEBUG("Got ret: %d\n", ret); 54.88 /* We can advance the request consumer index, from here on, the request 54.89 * should not be used (it may be overrinden by a response) */ 54.90 mount->ring.req_cons++; 54.91 @@ -117,7 +116,7 @@ static void dispatch_file_close(struct f 54.92 54.93 /* Get a response from the ring */ 54.94 rsp_idx = mount->ring.rsp_prod_pvt++; 54.95 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.96 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.97 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.98 rsp->id = req_id; 54.99 rsp->ret_val = (uint64_t)ret; 54.100 @@ -127,7 +126,7 @@ static void dispatch_file_close(struct f 54.101 static void dispatch_file_read(struct fs_mount *mount, struct fsif_request *req) 54.102 { 54.103 void *buf; 54.104 - int fd, i, count; 54.105 + int fd, count; 54.106 uint16_t req_id; 54.107 unsigned short priv_id; 54.108 struct fs_request *priv_req; 54.109 @@ -143,7 +142,7 @@ static void dispatch_file_read(struct fs 54.110 PROT_WRITE); 54.111 54.112 req_id = req->id; 54.113 - printf("File read issued for FD=%d (len=%"PRIu64", offest=%"PRIu64")\n", 54.114 + FS_DEBUG("File read issued for FD=%d (len=%"PRIu64", offest=%"PRIu64")\n", 54.115 req->u.fread.fd, req->u.fread.len, req->u.fread.offset); 54.116 54.117 if (req->u.fread.fd < MAX_FDS) 54.118 @@ -152,10 +151,11 @@ static void dispatch_file_read(struct fs 54.119 fd = -1; 54.120 54.121 priv_id = get_request(mount, req); 54.122 - printf("Private id is: %d\n", priv_id); 54.123 + FS_DEBUG("Private id is: %d\n", priv_id); 54.124 priv_req = &mount->requests[priv_id]; 54.125 priv_req->page = buf; 54.126 priv_req->count = count; 54.127 + priv_req->id = priv_id; 54.128 54.129 /* Dispatch AIO read request */ 54.130 bzero(&priv_req->aiocb, sizeof(struct aiocb)); 54.131 @@ -163,9 +163,11 @@ static void dispatch_file_read(struct fs 54.132 priv_req->aiocb.aio_nbytes = req->u.fread.len; 54.133 priv_req->aiocb.aio_offset = req->u.fread.offset; 54.134 priv_req->aiocb.aio_buf = buf; 54.135 + priv_req->aiocb.aio_sigevent.sigev_notify = SIGEV_SIGNAL; 54.136 + priv_req->aiocb.aio_sigevent.sigev_signo = SIGUSR2; 54.137 + priv_req->aiocb.aio_sigevent.sigev_value.sival_ptr = priv_req; 54.138 assert(aio_read(&priv_req->aiocb) >= 0); 54.139 54.140 -out: 54.141 /* We can advance the request consumer index, from here on, the request 54.142 * should not be used (it may be overrinden by a response) */ 54.143 mount->ring.req_cons++; 54.144 @@ -185,7 +187,7 @@ static void end_file_read(struct fs_moun 54.145 /* Get a response from the ring */ 54.146 rsp_idx = mount->ring.rsp_prod_pvt++; 54.147 req_id = priv_req->req_shadow.id; 54.148 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.149 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.150 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.151 rsp->id = req_id; 54.152 rsp->ret_val = (uint64_t)aio_return(&priv_req->aiocb); 54.153 @@ -194,7 +196,7 @@ static void end_file_read(struct fs_moun 54.154 static void dispatch_file_write(struct fs_mount *mount, struct fsif_request *req) 54.155 { 54.156 void *buf; 54.157 - int fd, count, i; 54.158 + int fd, count; 54.159 uint16_t req_id; 54.160 unsigned short priv_id; 54.161 struct fs_request *priv_req; 54.162 @@ -210,7 +212,7 @@ static void dispatch_file_write(struct f 54.163 PROT_READ); 54.164 54.165 req_id = req->id; 54.166 - printf("File write issued for FD=%d (len=%"PRIu64", offest=%"PRIu64")\n", 54.167 + FS_DEBUG("File write issued for FD=%d (len=%"PRIu64", offest=%"PRIu64")\n", 54.168 req->u.fwrite.fd, req->u.fwrite.len, req->u.fwrite.offset); 54.169 54.170 if (req->u.fwrite.fd < MAX_FDS) 54.171 @@ -219,10 +221,11 @@ static void dispatch_file_write(struct f 54.172 fd = -1; 54.173 54.174 priv_id = get_request(mount, req); 54.175 - printf("Private id is: %d\n", priv_id); 54.176 + FS_DEBUG("Private id is: %d\n", priv_id); 54.177 priv_req = &mount->requests[priv_id]; 54.178 priv_req->page = buf; 54.179 priv_req->count = count; 54.180 + priv_req->id = priv_id; 54.181 54.182 /* Dispatch AIO write request */ 54.183 bzero(&priv_req->aiocb, sizeof(struct aiocb)); 54.184 @@ -230,6 +233,9 @@ static void dispatch_file_write(struct f 54.185 priv_req->aiocb.aio_nbytes = req->u.fwrite.len; 54.186 priv_req->aiocb.aio_offset = req->u.fwrite.offset; 54.187 priv_req->aiocb.aio_buf = buf; 54.188 + priv_req->aiocb.aio_sigevent.sigev_notify = SIGEV_SIGNAL; 54.189 + priv_req->aiocb.aio_sigevent.sigev_signo = SIGUSR2; 54.190 + priv_req->aiocb.aio_sigevent.sigev_value.sival_ptr = priv_req; 54.191 assert(aio_write(&priv_req->aiocb) >= 0); 54.192 54.193 54.194 @@ -252,7 +258,7 @@ static void end_file_write(struct fs_mou 54.195 /* Get a response from the ring */ 54.196 rsp_idx = mount->ring.rsp_prod_pvt++; 54.197 req_id = priv_req->req_shadow.id; 54.198 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.199 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.200 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.201 rsp->id = req_id; 54.202 rsp->ret_val = (uint64_t)aio_return(&priv_req->aiocb); 54.203 @@ -260,7 +266,6 @@ static void end_file_write(struct fs_mou 54.204 54.205 static void dispatch_stat(struct fs_mount *mount, struct fsif_request *req) 54.206 { 54.207 - struct fsif_stat_response *buf; 54.208 struct stat stat; 54.209 int fd, ret; 54.210 uint16_t req_id; 54.211 @@ -273,7 +278,7 @@ static void dispatch_stat(struct fs_moun 54.212 else 54.213 fd = -1; 54.214 54.215 - printf("File stat issued for FD=%d\n", req->u.fstat.fd); 54.216 + FS_DEBUG("File stat issued for FD=%d\n", req->u.fstat.fd); 54.217 54.218 /* We can advance the request consumer index, from here on, the request 54.219 * should not be used (it may be overrinden by a response) */ 54.220 @@ -281,12 +286,12 @@ static void dispatch_stat(struct fs_moun 54.221 54.222 /* Stat, and create the response */ 54.223 ret = fstat(fd, &stat); 54.224 - printf("Mode=%o, uid=%d, a_time=%ld\n", 54.225 + FS_DEBUG("Mode=%o, uid=%d, a_time=%ld\n", 54.226 stat.st_mode, stat.st_uid, (long)stat.st_atime); 54.227 54.228 /* Get a response from the ring */ 54.229 rsp_idx = mount->ring.rsp_prod_pvt++; 54.230 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.231 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.232 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.233 rsp->id = req_id; 54.234 rsp->fstat.stat_ret = (uint32_t)ret; 54.235 @@ -320,7 +325,7 @@ static void dispatch_truncate(struct fs_ 54.236 54.237 req_id = req->id; 54.238 length = req->u.ftruncate.length; 54.239 - printf("File truncate issued for FD=%d, length=%"PRId64"\n", req->u.ftruncate.fd, length); 54.240 + FS_DEBUG("File truncate issued for FD=%d, length=%"PRId64"\n", req->u.ftruncate.fd, length); 54.241 54.242 if (req->u.ftruncate.fd < MAX_FDS) 54.243 fd = mount->fds[req->u.ftruncate.fd]; 54.244 @@ -336,7 +341,7 @@ static void dispatch_truncate(struct fs_ 54.245 54.246 /* Get a response from the ring */ 54.247 rsp_idx = mount->ring.rsp_prod_pvt++; 54.248 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.249 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.250 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.251 rsp->id = req_id; 54.252 rsp->ret_val = (uint64_t)ret; 54.253 @@ -350,7 +355,7 @@ static void dispatch_remove(struct fs_mo 54.254 fsif_response_t *rsp; 54.255 uint16_t req_id; 54.256 54.257 - printf("Dispatching remove operation (gref=%d).\n", req->u.fremove.gref); 54.258 + FS_DEBUG("Dispatching remove operation (gref=%d).\n", req->u.fremove.gref); 54.259 /* Read the request, and open file */ 54.260 file_name = xc_gnttab_map_grant_ref(mount->gnth, 54.261 mount->dom_id, 54.262 @@ -358,15 +363,15 @@ static void dispatch_remove(struct fs_mo 54.263 PROT_READ); 54.264 54.265 req_id = req->id; 54.266 - printf("File remove issued for %s\n", file_name); 54.267 + FS_DEBUG("File remove issued for %s\n", file_name); 54.268 assert(BUFFER_SIZE > 54.269 strlen(file_name) + strlen(mount->export->export_path) + 1); 54.270 snprintf(full_path, sizeof(full_path), "%s/%s", 54.271 mount->export->export_path, file_name); 54.272 assert(xc_gnttab_munmap(mount->gnth, file_name, 1) == 0); 54.273 - printf("Issuing remove for %s\n", full_path); 54.274 + FS_DEBUG("Issuing remove for %s\n", full_path); 54.275 ret = remove(full_path); 54.276 - printf("Got ret: %d\n", ret); 54.277 + FS_DEBUG("Got ret: %d\n", ret); 54.278 /* We can advance the request consumer index, from here on, the request 54.279 * should not be used (it may be overrinden by a response) */ 54.280 mount->ring.req_cons++; 54.281 @@ -374,7 +379,7 @@ static void dispatch_remove(struct fs_mo 54.282 54.283 /* Get a response from the ring */ 54.284 rsp_idx = mount->ring.rsp_prod_pvt++; 54.285 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.286 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.287 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.288 rsp->id = req_id; 54.289 rsp->ret_val = (uint64_t)ret; 54.290 @@ -390,7 +395,7 @@ static void dispatch_rename(struct fs_mo 54.291 fsif_response_t *rsp; 54.292 uint16_t req_id; 54.293 54.294 - printf("Dispatching rename operation (gref=%d).\n", req->u.fremove.gref); 54.295 + FS_DEBUG("Dispatching rename operation (gref=%d).\n", req->u.fremove.gref); 54.296 /* Read the request, and open file */ 54.297 buf = xc_gnttab_map_grant_ref(mount->gnth, 54.298 mount->dom_id, 54.299 @@ -400,7 +405,7 @@ static void dispatch_rename(struct fs_mo 54.300 req_id = req->id; 54.301 old_file_name = buf + req->u.frename.old_name_offset; 54.302 new_file_name = buf + req->u.frename.new_name_offset; 54.303 - printf("File rename issued for %s -> %s (buf=%s)\n", 54.304 + FS_DEBUG("File rename issued for %s -> %s (buf=%s)\n", 54.305 old_file_name, new_file_name, buf); 54.306 assert(BUFFER_SIZE > 54.307 strlen(old_file_name) + strlen(mount->export->export_path) + 1); 54.308 @@ -411,9 +416,9 @@ static void dispatch_rename(struct fs_mo 54.309 snprintf(new_full_path, sizeof(new_full_path), "%s/%s", 54.310 mount->export->export_path, new_file_name); 54.311 assert(xc_gnttab_munmap(mount->gnth, buf, 1) == 0); 54.312 - printf("Issuing rename for %s -> %s\n", old_full_path, new_full_path); 54.313 + FS_DEBUG("Issuing rename for %s -> %s\n", old_full_path, new_full_path); 54.314 ret = rename(old_full_path, new_full_path); 54.315 - printf("Got ret: %d\n", ret); 54.316 + FS_DEBUG("Got ret: %d\n", ret); 54.317 /* We can advance the request consumer index, from here on, the request 54.318 * should not be used (it may be overrinden by a response) */ 54.319 mount->ring.req_cons++; 54.320 @@ -421,7 +426,7 @@ static void dispatch_rename(struct fs_mo 54.321 54.322 /* Get a response from the ring */ 54.323 rsp_idx = mount->ring.rsp_prod_pvt++; 54.324 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.325 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.326 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.327 rsp->id = req_id; 54.328 rsp->ret_val = (uint64_t)ret; 54.329 @@ -438,7 +443,7 @@ static void dispatch_create(struct fs_mo 54.330 fsif_response_t *rsp; 54.331 uint16_t req_id; 54.332 54.333 - printf("Dispatching file create operation (gref=%d).\n", req->u.fcreate.gref); 54.334 + FS_DEBUG("Dispatching file create operation (gref=%d).\n", req->u.fcreate.gref); 54.335 /* Read the request, and create file/directory */ 54.336 mode = req->u.fcreate.mode; 54.337 directory = req->u.fcreate.directory; 54.338 @@ -448,7 +453,7 @@ static void dispatch_create(struct fs_mo 54.339 PROT_READ); 54.340 54.341 req_id = req->id; 54.342 - printf("File create issued for %s\n", file_name); 54.343 + FS_DEBUG("File create issued for %s\n", file_name); 54.344 assert(BUFFER_SIZE > 54.345 strlen(file_name) + strlen(mount->export->export_path) + 1); 54.346 snprintf(full_path, sizeof(full_path), "%s/%s", 54.347 @@ -460,12 +465,12 @@ static void dispatch_create(struct fs_mo 54.348 54.349 if(directory) 54.350 { 54.351 - printf("Issuing create for directory: %s\n", full_path); 54.352 + FS_DEBUG("Issuing create for directory: %s\n", full_path); 54.353 ret = mkdir(full_path, mode); 54.354 } 54.355 else 54.356 { 54.357 - printf("Issuing create for file: %s\n", full_path); 54.358 + FS_DEBUG("Issuing create for file: %s\n", full_path); 54.359 ret = get_fd(mount); 54.360 if (ret >= 0) { 54.361 int real_fd = creat(full_path, mode); 54.362 @@ -474,15 +479,15 @@ static void dispatch_create(struct fs_mo 54.363 else 54.364 { 54.365 mount->fds[ret] = real_fd; 54.366 - printf("Got FD: %d for real %d\n", ret, real_fd); 54.367 + FS_DEBUG("Got FD: %d for real %d\n", ret, real_fd); 54.368 } 54.369 } 54.370 } 54.371 - printf("Got ret %d (errno=%d)\n", ret, errno); 54.372 + FS_DEBUG("Got ret %d (errno=%d)\n", ret, errno); 54.373 54.374 /* Get a response from the ring */ 54.375 rsp_idx = mount->ring.rsp_prod_pvt++; 54.376 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.377 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.378 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.379 rsp->id = req_id; 54.380 rsp->ret_val = (uint64_t)ret; 54.381 @@ -499,7 +504,7 @@ static void dispatch_list(struct fs_moun 54.382 DIR *dir; 54.383 struct dirent *dirent = NULL; 54.384 54.385 - printf("Dispatching list operation (gref=%d).\n", req->u.flist.gref); 54.386 + FS_DEBUG("Dispatching list operation (gref=%d).\n", req->u.flist.gref); 54.387 /* Read the request, and list directory */ 54.388 offset = req->u.flist.offset; 54.389 buf = file_name = xc_gnttab_map_grant_ref(mount->gnth, 54.390 @@ -508,7 +513,7 @@ static void dispatch_list(struct fs_moun 54.391 PROT_READ | PROT_WRITE); 54.392 54.393 req_id = req->id; 54.394 - printf("Dir list issued for %s\n", file_name); 54.395 + FS_DEBUG("Dir list issued for %s\n", file_name); 54.396 assert(BUFFER_SIZE > 54.397 strlen(file_name) + strlen(mount->export->export_path) + 1); 54.398 snprintf(full_path, sizeof(full_path), "%s/%s", 54.399 @@ -552,7 +557,7 @@ error_out: 54.400 54.401 /* Get a response from the ring */ 54.402 rsp_idx = mount->ring.rsp_prod_pvt++; 54.403 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.404 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.405 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.406 rsp->id = req_id; 54.407 rsp->ret_val = ret_val; 54.408 @@ -566,7 +571,7 @@ static void dispatch_chmod(struct fs_mou 54.409 uint16_t req_id; 54.410 int32_t mode; 54.411 54.412 - printf("Dispatching file chmod operation (fd=%d, mode=%o).\n", 54.413 + FS_DEBUG("Dispatching file chmod operation (fd=%d, mode=%o).\n", 54.414 req->u.fchmod.fd, req->u.fchmod.mode); 54.415 req_id = req->id; 54.416 if (req->u.fchmod.fd < MAX_FDS) 54.417 @@ -583,7 +588,7 @@ static void dispatch_chmod(struct fs_mou 54.418 54.419 /* Get a response from the ring */ 54.420 rsp_idx = mount->ring.rsp_prod_pvt++; 54.421 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.422 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.423 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.424 rsp->id = req_id; 54.425 rsp->ret_val = (uint64_t)ret; 54.426 @@ -598,7 +603,7 @@ static void dispatch_fs_space(struct fs_ 54.427 struct statvfs stat; 54.428 int64_t ret; 54.429 54.430 - printf("Dispatching fs space operation (gref=%d).\n", req->u.fspace.gref); 54.431 + FS_DEBUG("Dispatching fs space operation (gref=%d).\n", req->u.fspace.gref); 54.432 /* Read the request, and open file */ 54.433 file_name = xc_gnttab_map_grant_ref(mount->gnth, 54.434 mount->dom_id, 54.435 @@ -606,13 +611,13 @@ static void dispatch_fs_space(struct fs_ 54.436 PROT_READ); 54.437 54.438 req_id = req->id; 54.439 - printf("Fs space issued for %s\n", file_name); 54.440 + FS_DEBUG("Fs space issued for %s\n", file_name); 54.441 assert(BUFFER_SIZE > 54.442 strlen(file_name) + strlen(mount->export->export_path) + 1); 54.443 snprintf(full_path, sizeof(full_path), "%s/%s", 54.444 mount->export->export_path, file_name); 54.445 assert(xc_gnttab_munmap(mount->gnth, file_name, 1) == 0); 54.446 - printf("Issuing fs space for %s\n", full_path); 54.447 + FS_DEBUG("Issuing fs space for %s\n", full_path); 54.448 ret = statvfs(full_path, &stat); 54.449 if(ret >= 0) 54.450 ret = stat.f_bsize * stat.f_bfree; 54.451 @@ -624,7 +629,7 @@ static void dispatch_fs_space(struct fs_ 54.452 54.453 /* Get a response from the ring */ 54.454 rsp_idx = mount->ring.rsp_prod_pvt++; 54.455 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.456 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.457 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.458 rsp->id = req_id; 54.459 rsp->ret_val = (uint64_t)ret; 54.460 @@ -643,15 +648,19 @@ static void dispatch_file_sync(struct fs 54.461 else 54.462 fd = -1; 54.463 54.464 - printf("File sync issued for FD=%d\n", req->u.fsync.fd); 54.465 + FS_DEBUG("File sync issued for FD=%d\n", req->u.fsync.fd); 54.466 54.467 priv_id = get_request(mount, req); 54.468 - printf("Private id is: %d\n", priv_id); 54.469 + FS_DEBUG("Private id is: %d\n", priv_id); 54.470 priv_req = &mount->requests[priv_id]; 54.471 + priv_req->id = priv_id; 54.472 54.473 /* Dispatch AIO read request */ 54.474 bzero(&priv_req->aiocb, sizeof(struct aiocb)); 54.475 priv_req->aiocb.aio_fildes = fd; 54.476 + priv_req->aiocb.aio_sigevent.sigev_notify = SIGEV_SIGNAL; 54.477 + priv_req->aiocb.aio_sigevent.sigev_signo = SIGUSR2; 54.478 + priv_req->aiocb.aio_sigevent.sigev_value.sival_ptr = priv_req; 54.479 assert(aio_fsync(O_SYNC, &priv_req->aiocb) >= 0); 54.480 54.481 54.482 @@ -669,7 +678,7 @@ static void end_file_sync(struct fs_moun 54.483 /* Get a response from the ring */ 54.484 rsp_idx = mount->ring.rsp_prod_pvt++; 54.485 req_id = priv_req->req_shadow.id; 54.486 - printf("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.487 + FS_DEBUG("Writing response at: idx=%d, id=%d\n", rsp_idx, req_id); 54.488 rsp = RING_GET_RESPONSE(&mount->ring, rsp_idx); 54.489 rsp->id = req_id; 54.490 rsp->ret_val = (uint64_t)aio_return(&priv_req->aiocb);
55.1 --- a/tools/fs-back/fs-xenbus.c Mon Mar 30 19:56:30 2009 -0700 55.2 +++ b/tools/fs-back/fs-xenbus.c Thu Apr 23 18:49:41 2009 -0700 55.3 @@ -4,10 +4,12 @@ 55.4 #include <stdarg.h> 55.5 #include <string.h> 55.6 #include <assert.h> 55.7 +#include <sys/select.h> 55.8 #include <xenctrl.h> 55.9 #include <xs.h> 55.10 #include <xen/io/fsif.h> 55.11 #include "fs-backend.h" 55.12 +#include "fs-debug.h" 55.13 55.14 55.15 static bool xenbus_printf(struct xs_handle *xsh, 55.16 @@ -25,7 +27,7 @@ static bool xenbus_printf(struct xs_hand 55.17 snprintf(fullpath, sizeof(fullpath), "%s/%s", node, path); 55.18 vsnprintf(val, sizeof(val), fmt, args); 55.19 va_end(args); 55.20 - printf("xenbus_printf (%s) <= %s.\n", fullpath, val); 55.21 + FS_DEBUG("xenbus_printf (%s) <= %s.\n", fullpath, val); 55.22 55.23 return xs_write(xsh, xbt, fullpath, val, strlen(val)); 55.24 } 55.25 @@ -57,19 +59,19 @@ int xenbus_register_export(struct fs_exp 55.26 assert(xsh != NULL); 55.27 if(xsh == NULL) 55.28 { 55.29 - printf("Could not open connection to xenbus deamon.\n"); 55.30 + FS_DEBUG("Could not open connection to xenbus deamon.\n"); 55.31 goto error_exit; 55.32 } 55.33 - printf("Connection to the xenbus deamon opened successfully.\n"); 55.34 + FS_DEBUG("Connection to the xenbus deamon opened successfully.\n"); 55.35 55.36 /* Start transaction */ 55.37 xst = xs_transaction_start(xsh); 55.38 if(xst == 0) 55.39 { 55.40 - printf("Could not start a transaction.\n"); 55.41 + FS_DEBUG("Could not start a transaction.\n"); 55.42 goto error_exit; 55.43 } 55.44 - printf("XS transaction is %d\n", xst); 55.45 + FS_DEBUG("XS transaction is %d\n", xst); 55.46 55.47 /* Create node string */ 55.48 snprintf(node, sizeof(node), "%s/%d", EXPORTS_NODE, export->export_id); 55.49 @@ -78,7 +80,7 @@ int xenbus_register_export(struct fs_exp 55.50 55.51 if(!xenbus_printf(xsh, xst, node, "name", "%s", export->name)) 55.52 { 55.53 - printf("Could not write the export node.\n"); 55.54 + FS_DEBUG("Could not write the export node.\n"); 55.55 goto error_exit; 55.56 } 55.57 55.58 @@ -87,7 +89,7 @@ int xenbus_register_export(struct fs_exp 55.59 perms.perms = XS_PERM_READ; 55.60 if(!xs_set_permissions(xsh, xst, EXPORTS_NODE, &perms, 1)) 55.61 { 55.62 - printf("Could not set permissions on the export node.\n"); 55.63 + FS_DEBUG("Could not set permissions on the export node.\n"); 55.64 goto error_exit; 55.65 } 55.66 55.67 @@ -166,7 +168,7 @@ void xenbus_write_backend_node(struct fs 55.68 55.69 assert(xsh != NULL); 55.70 self_id = get_self_id(); 55.71 - printf("Our own dom_id=%d\n", self_id); 55.72 + FS_DEBUG("Our own dom_id=%d\n", self_id); 55.73 snprintf(node, sizeof(node), "%s/backend", mount->frontend); 55.74 snprintf(backend_node, sizeof(backend_node), "/local/domain/%d/"ROOT_NODE"/%d", 55.75 self_id, mount->mount_id); 55.76 @@ -176,7 +178,7 @@ void xenbus_write_backend_node(struct fs 55.77 xs_write(xsh, XBT_NULL, node, STATE_INITIALISED, strlen(STATE_INITIALISED)); 55.78 } 55.79 55.80 -void xenbus_write_backend_ready(struct fs_mount *mount) 55.81 +void xenbus_write_backend_state(struct fs_mount *mount, const char *state) 55.82 { 55.83 char node[1024]; 55.84 int self_id; 55.85 @@ -184,6 +186,59 @@ void xenbus_write_backend_ready(struct f 55.86 assert(xsh != NULL); 55.87 self_id = get_self_id(); 55.88 snprintf(node, sizeof(node), ROOT_NODE"/%d/state", mount->mount_id); 55.89 - xs_write(xsh, XBT_NULL, node, STATE_READY, strlen(STATE_READY)); 55.90 + xs_write(xsh, XBT_NULL, node, state, strlen(state)); 55.91 +} 55.92 + 55.93 +void xenbus_watch_frontend_state(struct fs_mount *mount) 55.94 +{ 55.95 + int res; 55.96 + char statepath[1024]; 55.97 + 55.98 + assert(xsh != NULL); 55.99 + snprintf(statepath, sizeof(statepath), "%s/state", mount->frontend); 55.100 + res = xs_watch(xsh, statepath, "frontend-state"); 55.101 + assert(res); 55.102 +} 55.103 + 55.104 +void xenbus_unwatch_frontend_state(struct fs_mount *mount) 55.105 +{ 55.106 + int res; 55.107 + char statepath[1024]; 55.108 + 55.109 + assert(xsh != NULL); 55.110 + snprintf(statepath, sizeof(statepath), "%s/state", mount->frontend); 55.111 + res = xs_unwatch(xsh, statepath, "frontend-state"); 55.112 + assert(res); 55.113 } 55.114 55.115 +int xenbus_frontend_state_changed(struct fs_mount *mount, const char *oldstate) 55.116 +{ 55.117 + unsigned int len; 55.118 + char statepath[1024]; 55.119 + char *state = NULL; 55.120 + 55.121 + assert(xsh != NULL); 55.122 + snprintf(statepath, sizeof(statepath), "%s/state", mount->frontend); 55.123 + state = xs_read(xsh, XBT_NULL, statepath, &len); 55.124 + if (state && len > 0) { 55.125 + if (strcmp(state, oldstate)) { 55.126 + free(state); 55.127 + return 1; 55.128 + } else { 55.129 + free(state); 55.130 + return 0; 55.131 + } 55.132 + } else 55.133 + return 1; 55.134 +} 55.135 + 55.136 +char* xenbus_read_frontend_state(struct fs_mount *mount) 55.137 +{ 55.138 + unsigned int len; 55.139 + char statepath[1024]; 55.140 + 55.141 + assert(xsh != NULL); 55.142 + snprintf(statepath, sizeof(statepath), "%s/state", mount->frontend); 55.143 + return xs_read(xsh, XBT_NULL, statepath, &len); 55.144 +} 55.145 +
56.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 56.2 +++ b/tools/fs-back/sys-queue.h Thu Apr 23 18:49:41 2009 -0700 56.3 @@ -0,0 +1,338 @@ 56.4 +/* $NetBSD: queue.h,v 1.45.14.1 2007/07/18 20:13:24 liamjfoy Exp $ */ 56.5 + 56.6 +/* 56.7 + * Qemu version: Copy from netbsd, removed debug code, removed some of 56.8 + * the implementations. Left in lists, tail queues and circular queues. 56.9 + */ 56.10 + 56.11 +/* 56.12 + * Copyright (c) 1991, 1993 56.13 + * The Regents of the University of California. All rights reserved. 56.14 + * 56.15 + * Redistribution and use in source and binary forms, with or without 56.16 + * modification, are permitted provided that the following conditions 56.17 + * are met: 56.18 + * 1. Redistributions of source code must retain the above copyright 56.19 + * notice, this list of conditions and the following disclaimer. 56.20 + * 2. Redistributions in binary form must reproduce the above copyright 56.21 + * notice, this list of conditions and the following disclaimer in the 56.22 + * documentation and/or other materials provided with the distribution. 56.23 + * 3. Neither the name of the University nor the names of its contributors 56.24 + * may be used to endorse or promote products derived from this software 56.25 + * without specific prior written permission. 56.26 + * 56.27 + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 56.28 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 56.29 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 56.30 + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 56.31 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 56.32 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 56.33 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 56.34 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 56.35 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 56.36 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 56.37 + * SUCH DAMAGE. 56.38 + * 56.39 + * @(#)queue.h 8.5 (Berkeley) 8/20/94 56.40 + */ 56.41 + 56.42 +#ifndef _SYS_QUEUE_H_ 56.43 +#define _SYS_QUEUE_H_ 56.44 + 56.45 +/* 56.46 + * This file defines three types of data structures: 56.47 + * lists, tail queues, and circular queues. 56.48 + * 56.49 + * A list is headed by a single forward pointer (or an array of forward 56.50 + * pointers for a hash table header). The elements are doubly linked 56.51 + * so that an arbitrary element can be removed without a need to 56.52 + * traverse the list. New elements can be added to the list before 56.53 + * or after an existing element or at the head of the list. A list 56.54 + * may only be traversed in the forward direction. 56.55 + * 56.56 + * A tail queue is headed by a pair of pointers, one to the head of the 56.57 + * list and the other to the tail of the list. The elements are doubly 56.58 + * linked so that an arbitrary element can be removed without a need to 56.59 + * traverse the list. New elements can be added to the list before or 56.60 + * after an existing element, at the head of the list, or at the end of 56.61 + * the list. A tail queue may be traversed in either direction. 56.62 + * 56.63 + * A circle queue is headed by a pair of pointers, one to the head of the 56.64 + * list and the other to the tail of the list. The elements are doubly 56.65 + * linked so that an arbitrary element can be removed without a need to 56.66 + * traverse the list. New elements can be added to the list before or after 56.67 + * an existing element, at the head of the list, or at the end of the list. 56.68 + * A circle queue may be traversed in either direction, but has a more 56.69 + * complex end of list detection. 56.70 + * 56.71 + * For details on the use of these macros, see the queue(3) manual page. 56.72 + */ 56.73 + 56.74 +/* 56.75 + * List definitions. 56.76 + */ 56.77 +#define LIST_HEAD(name, type) \ 56.78 +struct name { \ 56.79 + struct type *lh_first; /* first element */ \ 56.80 +} 56.81 + 56.82 +#define LIST_HEAD_INITIALIZER(head) \ 56.83 + { NULL } 56.84 + 56.85 +#define LIST_ENTRY(type) \ 56.86 +struct { \ 56.87 + struct type *le_next; /* next element */ \ 56.88 + struct type **le_prev; /* address of previous next element */ \ 56.89 +} 56.90 + 56.91 +/* 56.92 + * List functions. 56.93 + */ 56.94 +#define LIST_INIT(head) do { \ 56.95 + (head)->lh_first = NULL; \ 56.96 +} while (/*CONSTCOND*/0) 56.97 + 56.98 +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ 56.99 + if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ 56.100 + (listelm)->field.le_next->field.le_prev = \ 56.101 + &(elm)->field.le_next; \ 56.102 + (listelm)->field.le_next = (elm); \ 56.103 + (elm)->field.le_prev = &(listelm)->field.le_next; \ 56.104 +} while (/*CONSTCOND*/0) 56.105 + 56.106 +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ 56.107 + (elm)->field.le_prev = (listelm)->field.le_prev; \ 56.108 + (elm)->field.le_next = (listelm); \ 56.109 + *(listelm)->field.le_prev = (elm); \ 56.110 + (listelm)->field.le_prev = &(elm)->field.le_next; \ 56.111 +} while (/*CONSTCOND*/0) 56.112 + 56.113 +#define LIST_INSERT_HEAD(head, elm, field) do { \ 56.114 + if (((elm)->field.le_next = (head)->lh_first) != NULL) \ 56.115 + (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ 56.116 + (head)->lh_first = (elm); \ 56.117 + (elm)->field.le_prev = &(head)->lh_first; \ 56.118 +} while (/*CONSTCOND*/0) 56.119 + 56.120 +#define LIST_REMOVE(elm, field) do { \ 56.121 + if ((elm)->field.le_next != NULL) \ 56.122 + (elm)->field.le_next->field.le_prev = \ 56.123 + (elm)->field.le_prev; \ 56.124 + *(elm)->field.le_prev = (elm)->field.le_next; \ 56.125 +} while (/*CONSTCOND*/0) 56.126 + 56.127 +#define LIST_FOREACH(var, head, field) \ 56.128 + for ((var) = ((head)->lh_first); \ 56.129 + (var); \ 56.130 + (var) = ((var)->field.le_next)) 56.131 + 56.132 +/* 56.133 + * List access methods. 56.134 + */ 56.135 +#define LIST_EMPTY(head) ((head)->lh_first == NULL) 56.136 +#define LIST_FIRST(head) ((head)->lh_first) 56.137 +#define LIST_NEXT(elm, field) ((elm)->field.le_next) 56.138 + 56.139 + 56.140 +/* 56.141 + * Tail queue definitions. 56.142 + */ 56.143 +#define _TAILQ_HEAD(name, type, qual) \ 56.144 +struct name { \ 56.145 + qual type *tqh_first; /* first element */ \ 56.146 + qual type *qual *tqh_last; /* addr of last next element */ \ 56.147 +} 56.148 +#define TAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,) 56.149 + 56.150 +#define TAILQ_HEAD_INITIALIZER(head) \ 56.151 + { NULL, &(head).tqh_first } 56.152 + 56.153 +#define _TAILQ_ENTRY(type, qual) \ 56.154 +struct { \ 56.155 + qual type *tqe_next; /* next element */ \ 56.156 + qual type *qual *tqe_prev; /* address of previous next element */\ 56.157 +} 56.158 +#define TAILQ_ENTRY(type) _TAILQ_ENTRY(struct type,) 56.159 + 56.160 +/* 56.161 + * Tail queue functions. 56.162 + */ 56.163 +#define TAILQ_INIT(head) do { \ 56.164 + (head)->tqh_first = NULL; \ 56.165 + (head)->tqh_last = &(head)->tqh_first; \ 56.166 +} while (/*CONSTCOND*/0) 56.167 + 56.168 +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ 56.169 + if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ 56.170 + (head)->tqh_first->field.tqe_prev = \ 56.171 + &(elm)->field.tqe_next; \ 56.172 + else \ 56.173 + (head)->tqh_last = &(elm)->field.tqe_next; \ 56.174 + (head)->tqh_first = (elm); \ 56.175 + (elm)->field.tqe_prev = &(head)->tqh_first; \ 56.176 +} while (/*CONSTCOND*/0) 56.177 + 56.178 +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ 56.179 + (elm)->field.tqe_next = NULL; \ 56.180 + (elm)->field.tqe_prev = (head)->tqh_last; \ 56.181 + *(head)->tqh_last = (elm); \ 56.182 + (head)->tqh_last = &(elm)->field.tqe_next; \ 56.183 +} while (/*CONSTCOND*/0) 56.184 + 56.185 +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 56.186 + if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ 56.187 + (elm)->field.tqe_next->field.tqe_prev = \ 56.188 + &(elm)->field.tqe_next; \ 56.189 + else \ 56.190 + (head)->tqh_last = &(elm)->field.tqe_next; \ 56.191 + (listelm)->field.tqe_next = (elm); \ 56.192 + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ 56.193 +} while (/*CONSTCOND*/0) 56.194 + 56.195 +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ 56.196 + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ 56.197 + (elm)->field.tqe_next = (listelm); \ 56.198 + *(listelm)->field.tqe_prev = (elm); \ 56.199 + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ 56.200 +} while (/*CONSTCOND*/0) 56.201 + 56.202 +#define TAILQ_REMOVE(head, elm, field) do { \ 56.203 + if (((elm)->field.tqe_next) != NULL) \ 56.204 + (elm)->field.tqe_next->field.tqe_prev = \ 56.205 + (elm)->field.tqe_prev; \ 56.206 + else \ 56.207 + (head)->tqh_last = (elm)->field.tqe_prev; \ 56.208 + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ 56.209 +} while (/*CONSTCOND*/0) 56.210 + 56.211 +#define TAILQ_FOREACH(var, head, field) \ 56.212 + for ((var) = ((head)->tqh_first); \ 56.213 + (var); \ 56.214 + (var) = ((var)->field.tqe_next)) 56.215 + 56.216 +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ 56.217 + for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \ 56.218 + (var); \ 56.219 + (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last))) 56.220 + 56.221 +/* 56.222 + * Tail queue access methods. 56.223 + */ 56.224 +#define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) 56.225 +#define TAILQ_FIRST(head) ((head)->tqh_first) 56.226 +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) 56.227 + 56.228 +#define TAILQ_LAST(head, headname) \ 56.229 + (*(((struct headname *)((head)->tqh_last))->tqh_last)) 56.230 +#define TAILQ_PREV(elm, headname, field) \ 56.231 + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) 56.232 + 56.233 + 56.234 +/* 56.235 + * Circular queue definitions. 56.236 + */ 56.237 +#define CIRCLEQ_HEAD(name, type) \ 56.238 +struct name { \ 56.239 + struct type *cqh_first; /* first element */ \ 56.240 + struct type *cqh_last; /* last element */ \ 56.241 +} 56.242 + 56.243 +#define CIRCLEQ_HEAD_INITIALIZER(head) \ 56.244 + { (void *)&head, (void *)&head } 56.245 + 56.246 +#define CIRCLEQ_ENTRY(type) \ 56.247 +struct { \ 56.248 + struct type *cqe_next; /* next element */ \ 56.249 + struct type *cqe_prev; /* previous element */ \ 56.250 +} 56.251 + 56.252 +/* 56.253 + * Circular queue functions. 56.254 + */ 56.255 +#define CIRCLEQ_INIT(head) do { \ 56.256 + (head)->cqh_first = (void *)(head); \ 56.257 + (head)->cqh_last = (void *)(head); \ 56.258 +} while (/*CONSTCOND*/0) 56.259 + 56.260 +#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 56.261 + (elm)->field.cqe_next = (listelm)->field.cqe_next; \ 56.262 + (elm)->field.cqe_prev = (listelm); \ 56.263 + if ((listelm)->field.cqe_next == (void *)(head)) \ 56.264 + (head)->cqh_last = (elm); \ 56.265 + else \ 56.266 + (listelm)->field.cqe_next->field.cqe_prev = (elm); \ 56.267 + (listelm)->field.cqe_next = (elm); \ 56.268 +} while (/*CONSTCOND*/0) 56.269 + 56.270 +#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ 56.271 + (elm)->field.cqe_next = (listelm); \ 56.272 + (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ 56.273 + if ((listelm)->field.cqe_prev == (void *)(head)) \ 56.274 + (head)->cqh_first = (elm); \ 56.275 + else \ 56.276 + (listelm)->field.cqe_prev->field.cqe_next = (elm); \ 56.277 + (listelm)->field.cqe_prev = (elm); \ 56.278 +} while (/*CONSTCOND*/0) 56.279 + 56.280 +#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ 56.281 + (elm)->field.cqe_next = (head)->cqh_first; \ 56.282 + (elm)->field.cqe_prev = (void *)(head); \ 56.283 + if ((head)->cqh_last == (void *)(head)) \ 56.284 + (head)->cqh_last = (elm); \ 56.285 + else \ 56.286 + (head)->cqh_first->field.cqe_prev = (elm); \ 56.287 + (head)->cqh_first = (elm); \ 56.288 +} while (/*CONSTCOND*/0) 56.289 + 56.290 +#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ 56.291 + (elm)->field.cqe_next = (void *)(head); \ 56.292 + (elm)->field.cqe_prev = (head)->cqh_last; \ 56.293 + if ((head)->cqh_first == (void *)(head)) \ 56.294 + (head)->cqh_first = (elm); \ 56.295 + else \ 56.296 + (head)->cqh_last->field.cqe_next = (elm); \ 56.297 + (head)->cqh_last = (elm); \ 56.298 +} while (/*CONSTCOND*/0) 56.299 + 56.300 +#define CIRCLEQ_REMOVE(head, elm, field) do { \ 56.301 + if ((elm)->field.cqe_next == (void *)(head)) \ 56.302 + (head)->cqh_last = (elm)->field.cqe_prev; \ 56.303 + else \ 56.304 + (elm)->field.cqe_next->field.cqe_prev = \ 56.305 + (elm)->field.cqe_prev; \ 56.306 + if ((elm)->field.cqe_prev == (void *)(head)) \ 56.307 + (head)->cqh_first = (elm)->field.cqe_next; \ 56.308 + else \ 56.309 + (elm)->field.cqe_prev->field.cqe_next = \ 56.310 + (elm)->field.cqe_next; \ 56.311 +} while (/*CONSTCOND*/0) 56.312 + 56.313 +#define CIRCLEQ_FOREACH(var, head, field) \ 56.314 + for ((var) = ((head)->cqh_first); \ 56.315 + (var) != (const void *)(head); \ 56.316 + (var) = ((var)->field.cqe_next)) 56.317 + 56.318 +#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ 56.319 + for ((var) = ((head)->cqh_last); \ 56.320 + (var) != (const void *)(head); \ 56.321 + (var) = ((var)->field.cqe_prev)) 56.322 + 56.323 +/* 56.324 + * Circular queue access methods. 56.325 + */ 56.326 +#define CIRCLEQ_EMPTY(head) ((head)->cqh_first == (void *)(head)) 56.327 +#define CIRCLEQ_FIRST(head) ((head)->cqh_first) 56.328 +#define CIRCLEQ_LAST(head) ((head)->cqh_last) 56.329 +#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) 56.330 +#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) 56.331 + 56.332 +#define CIRCLEQ_LOOP_NEXT(head, elm, field) \ 56.333 + (((elm)->field.cqe_next == (void *)(head)) \ 56.334 + ? ((head)->cqh_first) \ 56.335 + : (elm->field.cqe_next)) 56.336 +#define CIRCLEQ_LOOP_PREV(head, elm, field) \ 56.337 + (((elm)->field.cqe_prev == (void *)(head)) \ 56.338 + ? ((head)->cqh_last) \ 56.339 + : (elm->field.cqe_prev)) 56.340 + 56.341 +#endif /* !_SYS_QUEUE_H_ */
57.1 --- a/tools/hotplug/Linux/Makefile Mon Mar 30 19:56:30 2009 -0700 57.2 +++ b/tools/hotplug/Linux/Makefile Thu Apr 23 18:49:41 2009 -0700 57.3 @@ -16,7 +16,6 @@ XEN_SCRIPTS += network-route vif-route 57.4 XEN_SCRIPTS += network-nat vif-nat 57.5 XEN_SCRIPTS += block 57.6 XEN_SCRIPTS += block-enbd block-nbd 57.7 -XEN_SCRIPTS += blktap 57.8 XEN_SCRIPTS += vtpm vtpm-delete 57.9 XEN_SCRIPTS += xen-hotplug-cleanup 57.10 XEN_SCRIPTS += external-device-migrate 57.11 @@ -30,7 +29,7 @@ XEN_HOTPLUG_DIR = /etc/hotplug 57.12 XEN_HOTPLUG_SCRIPTS = xen-backend.agent 57.13 57.14 UDEV_RULES_DIR = /etc/udev 57.15 -UDEV_RULES = xen-backend.rules 57.16 +UDEV_RULES = xen-backend.rules xend.rules 57.17 57.18 DI = $(if $(DISTDIR),$(shell readlink -f $(DISTDIR)),) 57.19 DE = $(if $(DESTDIR),$(shell readlink -f $(DESTDIR)),)
58.1 --- a/tools/hotplug/Linux/blktap Mon Mar 30 19:56:30 2009 -0700 58.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 58.3 @@ -1,93 +0,0 @@ 58.4 -#!/bin/bash 58.5 - 58.6 -# Copyright (c) 2005, XenSource Ltd. 58.7 - 58.8 -dir=$(dirname "$0") 58.9 -. "$dir/xen-hotplug-common.sh" 58.10 -. "$dir/block-common.sh" 58.11 - 58.12 -findCommand "$@" 58.13 - 58.14 -## 58.15 -# check_blktap_sharing file mode 58.16 -# 58.17 -# Perform the sharing check for the given blktap and mode. 58.18 -# 58.19 -check_blktap_sharing() 58.20 -{ 58.21 - local file="$1" 58.22 - local mode="$2" 58.23 - 58.24 - local base_path="$XENBUS_BASE_PATH/$XENBUS_TYPE" 58.25 - for dom in $(xenstore-list "$base_path") 58.26 - do 58.27 - for dev in $(xenstore-list "$base_path/$dom") 58.28 - do 58.29 - params=$(xenstore_read "$base_path/$dom/$dev/params" | cut -d: -f2) 58.30 - if [ "$file" = "$params" ] 58.31 - then 58.32 - 58.33 - if [ "$mode" = 'w' ] 58.34 - then 58.35 - if ! same_vm "$dom" 58.36 - then 58.37 - echo 'guest' 58.38 - return 58.39 - fi 58.40 - else 58.41 - local m=$(xenstore_read "$base_path/$dom/$dev/mode") 58.42 - m=$(canonicalise_mode "$m") 58.43 - 58.44 - if [ "$m" = 'w' ] 58.45 - then 58.46 - if ! same_vm "$dom" 58.47 - then 58.48 - echo 'guest' 58.49 - return 58.50 - fi 58.51 - fi 58.52 - fi 58.53 - fi 58.54 - done 58.55 - done 58.56 - 58.57 - echo 'ok' 58.58 -} 58.59 - 58.60 - 58.61 -t=$(xenstore_read_default "$XENBUS_PATH/type" 'MISSING') 58.62 -if [ -n "$t" ] 58.63 -then 58.64 - p=$(xenstore_read "$XENBUS_PATH/params") 58.65 - # if we have a ':', chew from head including : 58.66 - if echo $p | grep -q \: 58.67 - then 58.68 - p=${p#*:} 58.69 - fi 58.70 -fi 58.71 -# some versions of readlink cannot be passed a regular file 58.72 -if [ -L "$p" ]; then 58.73 - file=$(readlink -f "$p") || fatal "$p link does not exist." 58.74 -else 58.75 - file="$p" 58.76 -fi 58.77 - 58.78 -if [ "$command" = 'add' ] 58.79 -then 58.80 - [ -e "$file" ] || { fatal $file does not exist; } 58.81 - 58.82 - FRONTEND_ID=$(xenstore_read "$XENBUS_PATH/frontend-id") 58.83 - FRONTEND_UUID=$(xenstore_read "/local/domain/$FRONTEND_ID/vm") 58.84 - mode=$(xenstore_read "$XENBUS_PATH/mode") 58.85 - mode=$(canonicalise_mode "$mode") 58.86 - 58.87 - if [ "$mode" != '!' ] 58.88 - then 58.89 - result=$(check_blktap_sharing "$file" "$mode") 58.90 - [ "$result" = 'ok' ] || ebusy "$file already in use by other domain" 58.91 - fi 58.92 - 58.93 - success 58.94 -fi 58.95 - 58.96 -exit 0
59.1 --- a/tools/hotplug/Linux/init.d/xend Mon Mar 30 19:56:30 2009 -0700 59.2 +++ b/tools/hotplug/Linux/init.d/xend Thu Apr 23 18:49:41 2009 -0700 59.3 @@ -39,11 +39,13 @@ function await_daemons_up 59.4 59.5 case "$1" in 59.6 start) 59.7 + touch /var/lock/subsys/xend 59.8 xend start 59.9 await_daemons_up 59.10 ;; 59.11 stop) 59.12 xend stop 59.13 + rm -f /var/lock/subsys/xend 59.14 ;; 59.15 status) 59.16 xend status
60.1 --- a/tools/hotplug/Linux/network-bridge Mon Mar 30 19:56:30 2009 -0700 60.2 +++ b/tools/hotplug/Linux/network-bridge Thu Apr 23 18:49:41 2009 -0700 60.3 @@ -106,7 +106,7 @@ get_ip_info() { 60.4 } 60.5 60.6 do_ifup() { 60.7 - if ! ifup $1 ; then 60.8 + if [ $1 != "${netdev}" ] || ! ifup $1 ; then 60.9 if [ -n "$addr_pfx" ] ; then 60.10 # use the info from get_ip_info() 60.11 ip addr flush $1 60.12 @@ -223,9 +223,13 @@ op_start () { 60.13 60.14 preiftransfer ${netdev} 60.15 transfer_addrs ${netdev} ${tdev} 60.16 + # Remember slaves for bonding interface. 60.17 + if [ -e /sys/class/net/${netdev}/bonding/slaves ]; then 60.18 + slaves=`cat /sys/class/net/${netdev}/bonding/slaves` 60.19 + fi 60.20 + # Remember the IP details for do_ifup. 60.21 + get_ip_info ${netdev} 60.22 if ! ifdown ${netdev}; then 60.23 - # If ifdown fails, remember the IP details. 60.24 - get_ip_info ${netdev} 60.25 ip link set ${netdev} down 60.26 ip addr flush ${netdev} 60.27 fi 60.28 @@ -234,6 +238,11 @@ op_start () { 60.29 60.30 setup_bridge_port ${pdev} 60.31 60.32 + # Restore slaves 60.33 + if [ -n "${slaves}" ]; then 60.34 + ip link set ${pdev} up 60.35 + ifenslave ${pdev} ${slaves} 60.36 + fi 60.37 add_to_bridge2 ${bridge} ${pdev} 60.38 do_ifup ${bridge} 60.39
61.1 --- a/tools/hotplug/Linux/network-nat Mon Mar 30 19:56:30 2009 -0700 61.2 +++ b/tools/hotplug/Linux/network-nat Thu Apr 23 18:49:41 2009 -0700 61.3 @@ -48,12 +48,16 @@ then 61.4 fi 61.5 fi 61.6 61.7 +domain_name=`cat /etc/resolv.conf | grep -v "#" | grep -E 'search|domain' -i | tail -n 1 | awk '{ print $2 }'` 61.8 +nameserver=`cat /etc/resolv.conf | grep -v "#" | grep "nameserver" -i -m 1 | awk '{ print $2 }'` 61.9 61.10 function dhcp_start() 61.11 { 61.12 if ! grep -q "subnet 10.0.0.0" "$dhcpd_conf_file" 61.13 then 61.14 - echo >>"$dhcpd_conf_file" "subnet 10.0.0.0 netmask 255.255.0.0 {}" 61.15 + echo >>"$dhcpd_conf_file" "subnet 10.0.0.0 netmask 255.255.0.0 {\ 61.16 + option domain-name \"$domain_name\";\ 61.17 + option domain-name-servers $nameserver; }" 61.18 fi 61.19 61.20 "$dhcpd_init_file" restart
62.1 --- a/tools/hotplug/Linux/vif-common.sh Mon Mar 30 19:56:30 2009 -0700 62.2 +++ b/tools/hotplug/Linux/vif-common.sh Thu Apr 23 18:49:41 2009 -0700 62.3 @@ -68,17 +68,20 @@ frob_iptable() 62.4 { 62.5 if [ "$command" == "online" ] 62.6 then 62.7 - local c="-A" 62.8 + local c="-I" 62.9 else 62.10 local c="-D" 62.11 fi 62.12 62.13 iptables "$c" FORWARD -m physdev --physdev-in "$vif" "$@" -j ACCEPT \ 62.14 - 2>/dev/null || 62.15 - [ "$c" == "-D" ] || 62.16 - log err \ 62.17 - "iptables $c FORWARD -m physdev --physdev-in $vif $@ -j ACCEPT failed. 62.18 -If you are using iptables, this may affect networking for guest domains." 62.19 + 2>/dev/null && 62.20 + iptables "$c" FORWARD -m state --state RELATED,ESTABLISHED -m physdev \ 62.21 + --physdev-out "$vif" -j ACCEPT 2>/dev/null 62.22 + 62.23 + if [ "$command" == "online" ] && [ $? ] 62.24 + then 62.25 + log err "iptables setup failed. This may affect guest networking." 62.26 + fi 62.27 } 62.28 62.29
63.1 --- a/tools/hotplug/Linux/xen-backend.rules Mon Mar 30 19:56:30 2009 -0700 63.2 +++ b/tools/hotplug/Linux/xen-backend.rules Thu Apr 23 18:49:41 2009 -0700 63.3 @@ -1,4 +1,3 @@ 63.4 -SUBSYSTEM=="xen-backend", KERNEL=="tap*", RUN+="/etc/xen/scripts/blktap $env{ACTION}" 63.5 SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}" 63.6 SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm $env{ACTION}" 63.7 SUBSYSTEM=="xen-backend", KERNEL=="vif*", ACTION=="online", RUN+="$env{script} online"
64.1 --- a/tools/hotplug/Linux/xen-hotplug-cleanup Mon Mar 30 19:56:30 2009 -0700 64.2 +++ b/tools/hotplug/Linux/xen-hotplug-cleanup Thu Apr 23 18:49:41 2009 -0700 64.3 @@ -11,6 +11,17 @@ dir=$(dirname "$0") 64.4 # This is pretty horrible, but there's not really a nicer way of solving this. 64.5 claim_lock "block" 64.6 64.7 +# split backend/DEVCLASS/VMID/DEVID on slashes 64.8 +path_array=( ${XENBUS_PATH//\// } ) 64.9 +# get /vm/UUID path 64.10 +vm=$(xenstore_read_default "/local/domain/${path_array[2]}/vm" "") 64.11 +# construct /vm/UUID/device/DEVCLASS/DEVID 64.12 +if [ "$vm" != "" ]; then 64.13 + vm_dev="$vm/device/${path_array[1]}/${path_array[3]}" 64.14 +else 64.15 + vm_dev= 64.16 +fi 64.17 + 64.18 # remove device frontend store entries 64.19 xenstore-rm -t \ 64.20 $(xenstore-read "$XENBUS_PATH/frontend" 2>/dev/null) 2>/dev/null || true 64.21 @@ -19,4 +30,7 @@ xenstore-rm -t \ 64.22 xenstore-rm -t "$XENBUS_PATH" 2>/dev/null || true 64.23 xenstore-rm -t "error/$XENBUS_PATH" 2>/dev/null || true 64.24