summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Goldstein <cardoe@gentoo.org>2008-02-07 15:43:50 +0000
committerDoug Goldstein <cardoe@gentoo.org>2008-02-07 15:43:50 +0000
commitdb0c25b6d6937ca1db180c2933146d727801a464 (patch)
tree9cf22f5a85bc47bfdc434749a3523fd824cce0a5 /app-emulation
parentamd64 stable (diff)
downloadgentoo-2-db0c25b6d6937ca1db180c2933146d727801a464.tar.gz
gentoo-2-db0c25b6d6937ca1db180c2933146d727801a464.tar.bz2
gentoo-2-db0c25b6d6937ca1db180c2933146d727801a464.zip
updated ebuild and patch from Andrey Romanchev <andreyr@parallels.com> for bug #209171. Some clean ups and tweaks by me.
(Portage version: 2.1.4.1)
Diffstat (limited to 'app-emulation')
-rw-r--r--app-emulation/parallels-workstation/ChangeLog12
-rw-r--r--app-emulation/parallels-workstation/files/parallels-workstation-2.2.2112-2.6.23.patch452
-rw-r--r--app-emulation/parallels-workstation/parallels-workstation-2.2.2112-r2.ebuild83
3 files changed, 545 insertions, 2 deletions
diff --git a/app-emulation/parallels-workstation/ChangeLog b/app-emulation/parallels-workstation/ChangeLog
index f0a3c9052cd7..7d8a062ae769 100644
--- a/app-emulation/parallels-workstation/ChangeLog
+++ b/app-emulation/parallels-workstation/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for app-emulation/parallels-workstation
-# Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-emulation/parallels-workstation/ChangeLog,v 1.2 2007/07/02 14:00:27 peper Exp $
+# Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/app-emulation/parallels-workstation/ChangeLog,v 1.3 2008/02/07 15:43:49 cardoe Exp $
+
+*parallels-workstation-2.2.2112-r2 (07 Feb 2008)
+
+ 07 Feb 2008; Doug Klima <cardoe@gentoo.org>
+ +files/parallels-workstation-2.2.2112-2.6.23.patch,
+ +parallels-workstation-2.2.2112-r2.ebuild:
+ updated ebuild and patch from Andrey Romanchev <andreyr@parallels.com> for
+ bug #209171. Some clean ups and tweaks by me.
02 Jul 2007; Piotr Jaroszyński <peper@gentoo.org>
parallels-workstation-2.2.2112-r1.ebuild:
diff --git a/app-emulation/parallels-workstation/files/parallels-workstation-2.2.2112-2.6.23.patch b/app-emulation/parallels-workstation/files/parallels-workstation-2.2.2112-2.6.23.patch
new file mode 100644
index 000000000000..47efd01ff125
--- /dev/null
+++ b/app-emulation/parallels-workstation/files/parallels-workstation-2.2.2112-2.6.23.patch
@@ -0,0 +1,452 @@
+--- data/drivers/drv_main/compat/compat_memory.h
++++ data/drivers/drv_main/compat/compat_memory.h
+123a124,136
+> /* change kmem_cache_t to kmem_cache */
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22)
+> # define kmem_cache_compat struct kmem_cache
+> # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23)
+> # define compat_kmem_cache_create(a, b, c, d, e, f) (kmem_cache_create(a, b, c, d, e))
+> # else
+> # define compat_kmem_cache_create(a, b, c, d, e, f) (kmem_cache_create(a, b, c, d, e, f))
+> # endif
+> #else
+> # define kmem_cache_compat kmem_cache_t
+> # define compat_kmem_cache_create(a, b, c, d, e, f) (kmem_cache_create(a, b, c, d, e, f))
+> #endif
+>
+--- data/drivers/drv_main/Makefile
++++ data/drivers/drv_main/Makefile
+2c2
+< KSRC=/lib/modules/$(shell uname -r)/build
+---
+> KSRC ?= /lib/modules/$(shell uname -r)/build
+--- data/drivers/drv_main/mm/manager.c
++++ data/drivers/drv_main/mm/manager.c
+22a23
+> #include <linux/sched.h>
+268c269
+< vmGlobal.vmPmms.pmmRegionsSlab = kmem_cache_create("vmRegions", sizeof(struct pmm_region_t), 0,
+---
+> vmGlobal.vmPmms.pmmRegionsSlab = compat_kmem_cache_create("vmRegions", sizeof(struct pmm_region_t), 0,
+--- data/drivers/drv_main/mm/pages.c
++++ data/drivers/drv_main/mm/pages.c
+20a21
+> #include <linux/sched.h>
+--- data/drivers/drv_main/vmmain.h
++++ data/drivers/drv_main/vmmain.h
+23a24
+> #include "compat/compat_memory.h"
+196c197
+< kmem_cache_t *pmmRegionsSlab;
+---
+> kmem_cache_compat *pmmRegionsSlab;
+--- data/drivers/drv_net/linux/prlnet.c
++++ data/drivers/drv_net/linux/prlnet.c
+6c6
+< // $Id: parallels-workstation-2.2.2112-2.6.23.patch,v 1.1 2008/02/07 15:43:50 cardoe Exp $
+---
+> // $Id: parallels-workstation-2.2.2112-2.6.23.patch,v 1.1 2008/02/07 15:43:50 cardoe Exp $
+17a18
+> #include <linux/mm.h>
+33a35,38
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+> #include <net/ip.h>
+> #endif
+>
+725a731,735
+>
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+> skb_reset_mac_header(skb);
+> skb_set_network_header(skb, sizeof(skb->mac_header));
+> #else
+727a738
+> #endif
+783a795,797
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+> eth = (eth_header_t *)skb_mac_header(skbout);
+> #else
+784a799
+> #endif
+875c890,895
+< prlnet_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
+---
+> prlnet_recv(
+> struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
+> , struct net_device *origdev
+> #endif
+> )
+884c904,909
+< && skb->ip_summed == CHECKSUM_HW;
+---
+> && skb->ip_summed ==
+> #ifdef CHECKSUM_HW
+> CHECKSUM_HW;
+> #else
+> CHECKSUM_PARTIAL;
+> #endif
+887a913,915
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+> int len = skb->data - skb_mac_header(skb) + skb->len;
+> #else
+888a917
+> #endif
+891a921,936
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+> // can't use skb_copy_and_csum_dev(skb, buf + 2) here
+> // because skb->h == skb->nh. opensource rules!
+> int hoff = sizeof(struct ethhdr) + ip_hdrlen(skb);
+> // IP header checksum is done by the kernel
+> skb_copy_bits(skb,
+> skb_mac_header(skb) - skb->data, buf + 2, hoff);
+>
+> // skb->csum is an offset from true skb->h.raw
+> *(unsigned short *)(buf + 2 + hoff + skb->csum) =
+> csum_fold(
+> // kernel does conceptual header too
+> skb_copy_and_csum_bits(skb,
+> skb_mac_header(skb) + hoff - skb->data,
+> buf + 2 + hoff, len - hoff, 0));
+> #else
+897a943
+>
+904a951
+> #endif
+906a954,957
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+> skb_copy_bits(skb,
+> skb_mac_header(skb) - skb->data, buf + 2, len);
+> #else
+908a960
+> #endif
+910a963
+> kfree(buf);
+912d964
+< kfree(buf);
+922a975,977
+> #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+> hw_recv(hw, skb_mac_header(skb), skb->data - skb_mac_header(skb) + skb->len);
+> #else
+923a979
+> #endif
+1010a1067
+> #if WIRELESS_EXT < 19
+1012a1070
+> #endif
+--- data/drivers/drv_net/linux/prlnet.h
++++ data/drivers/drv_net/linux/prlnet.h
+6c6
+< // $Id: parallels-workstation-2.2.2112-2.6.23.patch,v 1.1 2008/02/07 15:43:50 cardoe Exp $
+---
+> // $Id: parallels-workstation-2.2.2112-2.6.23.patch,v 1.1 2008/02/07 15:43:50 cardoe Exp $
+Только в data/drivers/drv_net/linux: vm-bridge.mod.c
+--- data/drivers/drv_virtualnic/vmvirtualnic.c
++++ data/drivers/drv_virtualnic/vmvirtualnic.c
+72c72
+< MODULE_DESCRIPTION("Transparen ethernet bridge");
+---
+> MODULE_DESCRIPTION("Virtual ethernet card");
+75,77d74
+< // Version
+< //static const char *version = "VMVirtualNIC.c:v1.01 VirtualNIC driver from Parallels Inc. http://www.parallelssoft.com/";
+<
+79c76
+< struct net_device* dev;
+---
+> struct net_device* devs[5];
+99d95
+<
+101c97
+< };
+---
+> }
+121d116
+<
+123c118
+< };
+---
+> }
+201a197,203
+> int maxdev = 1;
+> #if defined(module_param)
+> module_param(maxdev, int, 0);
+> #elif defined(MODULE_PARM)
+> MODULE_PARM(maxdev, "i");
+> #endif
+>
+217,222c219,233
+< // MAC address is hardwired to that value as in windows version
+< unsigned char station_addr[6] = { 0x00, 0x01, 0x23, 0x45, 0xBE, 0xEF };
+< #if 0
+< hypervisorPresentInSystem(); /* fake call to hypervisor -- ms */
+< #endif
+<
+---
+> // MAC address is hardwired to that value as in windows version
+> static const unsigned char station_addr[5][6] = {
+> { 0x00, 0x01, 0x23, 0x45, 0xBE, 0xEF },
+> { 0x00, 0x01, 0x23, 0x45, 0xCA, 0xFE },
+> { 0x00, 0x01, 0x23, 0x45, 0xDA, 0xCE },
+> { 0x00, 0x01, 0x23, 0x45, 0xEC, 0xAE },
+> { 0x00, 0x01, 0x23, 0x45, 0xFA, 0xDE }
+> };
+> int i;
+>
+> if (maxdev < 0)
+> maxdev = 1;
+> if (maxdev > 5)
+> maxdev = 5;
+> for (i = 0; i < maxdev; ++i) {
+224c235
+< dev = alloc_etherdev(sizeof(struct net_device_stats));
+---
+> devs[i] = alloc_etherdev(sizeof(struct net_device_stats));
+226,229c237,239
+< dev = init_etherdev(0, 0);
+< // May be it needed ?
+< ether_setup(dev);
+< dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
+---
+> devs[i] = init_etherdev(0, 0);
+> ether_setup(devs[i]);
+> devs[i]->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
+232,242c242,252
+< dev_alloc_name(dev, "vnic%d");
+< // Set MAC address
+< memcpy(dev->dev_addr, station_addr, ETH_ALEN);
+< memset(dev->priv, 0, sizeof(struct net_device_stats));
+<
+< // Set functions
+< dev->hard_start_xmit = &VNICXmit;
+< dev->get_stats = &VNICGetStats;
+< dev->open = &VNICOpen;
+< dev->stop = &VNICClose;
+< dev->set_mac_address = &VNICSetMAC;
+---
+> dev_alloc_name(devs[i], "vnic%d");
+> // Set MAC address
+> memcpy(devs[i]->dev_addr, station_addr[i], ETH_ALEN);
+> memset(devs[i]->priv, 0, sizeof(struct net_device_stats));
+>
+> // Set functions
+> devs[i]->hard_start_xmit = VNICXmit;
+> devs[i]->get_stats = VNICGetStats;
+> devs[i]->open = VNICOpen;
+> devs[i]->stop = VNICClose;
+> devs[i]->set_mac_address = VNICSetMAC;
+244c254
+< SET_MODULE_OWNER(dev);
+---
+> SET_MODULE_OWNER(devs[i]);
+248c258
+< register_netdev(dev);
+---
+> register_netdev(devs[i]);
+250,252c260,262
+<
+< return(0);
+< };
+---
+> }
+> return 0;
+> }
+268a279
+> int i;
+270,272c281,283
+< if (dev)
+< {
+< ndstat = dev->priv;
+---
+> for (i = 0; i < 5; ++i) {
+> if (devs[i]) {
+> ndstat = devs[i]->priv;
+274c285
+< unregister_netdev(dev);
+---
+> unregister_netdev(devs[i]);
+276c287
+< free_netdev(dev);
+---
+> free_netdev(devs[i]);
+278,280c289,291
+< kfree(ndstat);
+< dev->priv = NULL;
+< kfree(dev);
+---
+> kfree(ndstat);
+> devs[i]->priv = NULL;
+> kfree(devs[i]);
+281a293,294
+> devs[i] = NULL;
+> }
+--- data/drivers/hypervisor/hypercall.h
++++ data/drivers/hypervisor/hypercall.h
+19,20c19,22
+< #ifndef __HYPERCALL_H__
+< #define __HYPERCALL_H__
+---
+>
+>
+> #ifndef __PRL_HYPERCALL_H__
+> #define __PRL_HYPERCALL_H__
+115,116c117
+<
+< #endif /* __HYPERCALL_H__ */
+---
+> #endif /* __PRL_HYPERCALL_H__ */
+--- data/drivers/hypervisor/hypervisor.h
++++ data/drivers/hypervisor/hypervisor.h
+19,20c19,20
+< #ifndef __HYPERVISOR_H__
+< #define __HYPERVISOR_H__
+---
+> #ifndef __PRL_HYPERVISOR_H__
+> #define __PRL_HYPERVISOR_H__
+33a34
+> # include "compat_memory.h"
+130c131
+< kmem_cache_t *vmStateCache;
+---
+> kmem_cache_compat *vmStateCache;
+177c178
+< #endif /* __HYPERVISOR_H__ */
+---
+> #endif /* __PRL_HYPERVISOR_H__ */
+--- data/drivers/hypervisor/hypvmstate.c
++++ data/drivers/hypervisor/hypvmstate.c
+24a25
+> #include "compat_memory.h"
+169c170
+< if (!(hypState.vmStateCache = kmem_cache_create(VMSTATE_SLABNAME, sizeof(struct hyp_vmstate_t), 0,
+---
+> if (!(hypState.vmStateCache = compat_kmem_cache_create(VMSTATE_SLABNAME, sizeof(struct hyp_vmstate_t), 0,
+--- data/drivers/hypervisor/svm_init.h
++++ data/drivers/hypervisor/svm_init.h
+34a35,38
+> /// Definitions of AMD CPUID function to get SVM revision and feature identification
+> #define CPUID_SVM_REV 0x8000000a
+>
+>
+37a42,48
+> /// Definition of bit SVM_LOCK in edx after CPUID_SVM_REV fn
+> #define SVM_LOCK (1 << 2)
+>
+> /// Definition of bit SVM Disabled in VM_CR SMR
+> #define VM_CR_SVMDIS (1 << 4)
+>
+>
+45a57,83
+> /// Definition of address of VM_CR SMR
+> #define SMR_VM_CR 0xc0010114
+>
+>
+>
+> /**
+> * Check CPU provider.
+> */
+> static __inline__ int is_amd()
+> {
+> unsigned int _ebx, _ecx, _edx;
+>
+> __asm__ __volatile__(
+> "cpuid \n\t"
+> : /* out */ "=b" (_ebx), "=c" (_ecx), "=d" (_edx)
+> : /* in */ "a" (0)
+> : /* clo */ "memory"
+> );
+>
+> // "AuthenticAMD"
+> if ((_ebx == 0x68747541) &&
+> (_ecx == 0x444D4163) &&
+> (_edx == 0x69746E65))
+> return 1;
+>
+> return 0;
+> }
+66,67c104,147
+< /* Check SVM bit in CPUID extended features */
+< return cpuid_ecx(CPUID_PROCESSOR_SIGNATURE) & CPUID_SVM;
+---
+> // Don't initialize this variables !!!
+> // because gcc on OSx remove all checks with this variables
+> // and we can get wrmsr on locked msr register (which cause GP#) -- ms
+> unsigned long msr_edx, msr_eax;
+> unsigned int cpuid_1_ecx;
+> unsigned int cpuid_2_edx;
+>
+>
+> if (!is_amd())
+> return 0;
+>
+> msr_edx = 0;
+> msr_eax = 0;
+>
+> // Check SVM bit in CPUID extended features
+> cpuid_1_ecx = cpuid_ecx(CPUID_PROCESSOR_SIGNATURE);
+>
+> cpuid_2_edx = 0;
+>
+> // Check SVM bit in CPUID feature indentifiers
+> if ((cpuid_1_ecx & CPUID_SVM) == 0)
+> return 0; // SVM not available
+>
+>
+> // Get VM_CR MSR value
+> rdmsr(SMR_VM_CR, msr_eax, msr_edx);
+>
+> if((msr_eax & VM_CR_SVMDIS) == 0)
+> {
+> // set EFER.SVME
+> rdmsr(MSR_IA32_EFER, msr_eax, msr_edx);
+> wrmsr(MSR_IA32_EFER, msr_eax | EFER_SVME, msr_edx);
+> return 1; // SVM allowed
+> }
+>
+> // CPUID SVM Revision and Feature Identification EDX
+> cpuid_2_edx = cpuid_edx(CPUID_SVM_REV);
+>
+> if((cpuid_2_edx & SVM_LOCK) == 0)
+> {
+> return 0; // SVM disabled at bios not unlockable
+> }
+>
+> return 0; // SVM disabled with key
+70a151
+>
+--- data/drivers/hypervisor/vtx_init.h
++++ data/drivers/hypervisor/vtx_init.h
+75a76,97
+> /**
+> * Check CPU provider.
+> */
+> static __inline__ int is_intelPW22()
+> {
+> unsigned int _ebx, _ecx, _edx;
+>
+> __asm__ __volatile__(
+> "cpuid \n\t"
+> : /* out */ "=b" (_ebx), "=c" (_ecx), "=d" (_edx)
+> : /* in */ "a" (0)
+> : /* clo */ "memory"
+> );
+>
+> // "GenuineIntel"
+> if ((_ebx == 0x756e6547) &&
+> (_ecx == 0x6c65746e) &&
+> (_edx == 0x49656e69))
+> return 1;
+>
+> return 0;
+> }
+96a119,121
+> if (!is_intelPW22())
+> return 0;
+>
+--- data/drivers/Makefile
++++ data/drivers/Makefile
+0a1
+> KSRC ?= /lib/modules/$(shell uname -r)/build
+5c6
+< cd drv_main/ && $(MAKE) && cd ..
+---
+> cd drv_main/ && $(MAKE) KSRC=${KSRC} && cd ..
diff --git a/app-emulation/parallels-workstation/parallels-workstation-2.2.2112-r2.ebuild b/app-emulation/parallels-workstation/parallels-workstation-2.2.2112-r2.ebuild
new file mode 100644
index 000000000000..3d8d7497df79
--- /dev/null
+++ b/app-emulation/parallels-workstation/parallels-workstation-2.2.2112-r2.ebuild
@@ -0,0 +1,83 @@
+# Copyright 1999-2008 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-emulation/parallels-workstation/parallels-workstation-2.2.2112-r2.ebuild,v 1.1 2008/02/07 15:43:49 cardoe Exp $
+
+inherit eutils
+
+S=${WORKDIR}/parallels-${PV}-lin
+DESCRIPTION="Virtual machine software that runs multiple operating systems and their applications simultaneously on a single PC."
+HOMEPAGE="http://www.parallels.com"
+SRC_URI="http://download.parallels.com/GA/Parallels-${PV}-lin.tgz"
+
+LICENSE="Parallels"
+SLOT="0"
+KEYWORDS="-* ~x86"
+RESTRICT="strip"
+
+DEPEND="virtual/os-headers
+ =x11-libs/qt-3*
+ >=sys-libs/libstdc++-v3-3.0.0
+"
+destdir=/usr/lib/parallels
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}"/${PN}-2.2.2112-2.6.23.patch
+}
+
+src_install() {
+ dodoc data/doc/README data/doc/INSTALL data/doc/LICENSE
+
+ dodir ${destdir}/doc
+ insinto ${destdir}/doc
+ doins data/doc/README data/doc/INSTALL data/doc/LICENSE
+
+ insinto ${destdir}
+ doins data/*
+
+ dodir ${destdir}/bugreports
+ fperms 1777 ${destdir}/bugreports
+
+ touch ${destdir}/.parallels_common_options
+ fperms 666 ${destdir}/.parallels_common_options
+ touch ${destdir}/.parallels_license
+ fperms 666 ${destdir}/.parallels_license
+ touch ${destdir}/.not_configured
+
+ dosym ${destdir}/parallels /usr/bin/parallels
+ dosym ${destdir}/imagetool /usr/bin/imagetool
+ dosym ${destdir}/parallels-config /usr/bin/parallels-config
+
+ dosym /usr/bin/parallels /usr/bin/Parallels
+ dosym /usr/bin/parallels-config /usr/bin/Parallels-config
+
+ newinitd "${FILESDIR}"/parallels.rc parallels
+}
+
+pkg_preinst() {
+ running=`rc-status -s | grep parallels | grep started`
+ if [[ $running != "" ]]; then
+ /etc/init.d/parallels stop
+ fi
+}
+
+pkg_postinst() {
+ rm -f $destdir/.ereaded
+
+ $destdir/tools/mimelink associate 2> /dev/null
+ chmod 06555 $destdir/parallels-linux
+
+ echo
+ elog "You should configure ${PN} ${PV}"
+ elog "before starting it for the first time."
+ elog "Issue \"parallels-config\" command."
+ echo
+}
+
+pkg_postrm() {
+ if [ -e $destdir/Makefile ]; then
+ make -C $destdir clean distclean > /dev/null 2>&1
+ fi
+}