Line
Link Here
|
0 |
-- data/drivers/drv_main/compat/compat_memory.h |
0 |
++ data/drivers/drv_main/compat/compat_memory.h |
Line 124
Link Here
|
124 |
-- data/drivers/drv_main/Makefile |
124 |
/* change kmem_cache_t to kmem_cache */ |
|
|
125 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) |
126 |
# define kmem_cache_compat struct kmem_cache |
127 |
# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 23) |
128 |
# define compat_kmem_cache_create(a, b, c, d, e, f) (kmem_cache_create(a, b, c, d, e)) |
129 |
# else |
130 |
# define compat_kmem_cache_create(a, b, c, d, e, f) (kmem_cache_create(a, b, c, d, e, f)) |
131 |
# endif |
132 |
#else |
133 |
# define kmem_cache_compat kmem_cache_t |
134 |
# define compat_kmem_cache_create(a, b, c, d, e, f) (kmem_cache_create(a, b, c, d, e, f)) |
135 |
#endif |
136 |
|
|
|
137 |
++ data/drivers/drv_main/Makefile |
Line 2
Link Here
|
2 |
KSRC=/lib/modules/$(shell uname -r)/build |
2 |
KSRC ?= /lib/modules/$(shell uname -r)/build |
3 |
-- |
|
|
4 |
-- data/drivers/drv_main/mm/manager.c |
3 |
++ data/drivers/drv_main/mm/manager.c |
Line 23
Link Here
|
|
|
23 |
#include <linux/sched.h> |
Line 268
Link Here
|
268 |
vmGlobal.vmPmms.pmmRegionsSlab = kmem_cache_create("vmRegions", sizeof(struct pmm_region_t), 0, |
269 |
vmGlobal.vmPmms.pmmRegionsSlab = compat_kmem_cache_create("vmRegions", sizeof(struct pmm_region_t), 0, |
269 |
-- |
|
|
270 |
-- data/drivers/drv_main/mm/pages.c |
270 |
++ data/drivers/drv_main/mm/pages.c |
Line 21
Link Here
|
21 |
-- data/drivers/drv_main/vmmain.h |
21 |
#include <linux/sched.h> |
|
|
22 |
++ data/drivers/drv_main/vmmain.h |
Line 24
Link Here
|
|
|
24 |
#include "compat/compat_memory.h" |
Line 196
Link Here
|
196 |
kmem_cache_t *pmmRegionsSlab; |
197 |
kmem_cache_compat *pmmRegionsSlab; |
197 |
-- |
|
|
198 |
-- data/drivers/drv_net/linux/prlnet.c |
198 |
++ data/drivers/drv_net/linux/prlnet.c |
Line 6
Link Here
|
6 |
// $Id: prlnet.c,v 1.6 2006/07/21 09:05:36 sergeyv Exp $ |
6 |
// $Id: prlnet.c 28219 2007-07-27 08:03:39Z anatolykh $ |
7 |
-- |
|
|
Line 18
Link Here
|
|
|
18 |
#include <linux/mm.h> |
Line 34
Link Here
|
|
|
35 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
36 |
#include <net/ip.h> |
37 |
#endif |
38 |
|
Line 726
Link Here
|
|
|
731 |
|
732 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
733 |
skb_reset_mac_header(skb); |
734 |
skb_set_network_header(skb, sizeof(skb->mac_header)); |
735 |
#else |
Line 728
Link Here
|
|
|
738 |
#endif |
Line 784
Link Here
|
|
|
795 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
796 |
eth = (eth_header_t *)skb_mac_header(skbout); |
797 |
#else |
Line 785
Link Here
|
|
|
799 |
#endif |
Line 875
Link Here
|
875 |
prlnet_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) |
890 |
prlnet_recv( |
876 |
-- |
891 |
struct sk_buff *skb, struct net_device *dev, struct packet_type *pt |
|
|
892 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14) |
893 |
, struct net_device *origdev |
894 |
#endif |
895 |
) |
Line 884
Link Here
|
884 |
&& skb->ip_summed == CHECKSUM_HW; |
904 |
&& skb->ip_summed == |
885 |
-- |
905 |
#ifdef CHECKSUM_HW |
|
|
906 |
CHECKSUM_HW; |
907 |
#else |
908 |
CHECKSUM_PARTIAL; |
909 |
#endif |
Line 888
Link Here
|
|
|
913 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
914 |
int len = skb->data - skb_mac_header(skb) + skb->len; |
915 |
#else |
Line 889
Link Here
|
|
|
917 |
#endif |
Line 892
Link Here
|
|
|
921 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
922 |
// can't use skb_copy_and_csum_dev(skb, buf + 2) here |
923 |
// because skb->h == skb->nh. opensource rules! |
924 |
int hoff = sizeof(struct ethhdr) + ip_hdrlen(skb); |
925 |
// IP header checksum is done by the kernel |
926 |
skb_copy_bits(skb, |
927 |
skb_mac_header(skb) - skb->data, buf + 2, hoff); |
928 |
|
929 |
// skb->csum is an offset from true skb->h.raw |
930 |
*(unsigned short *)(buf + 2 + hoff + skb->csum) = |
931 |
csum_fold( |
932 |
// kernel does conceptual header too |
933 |
skb_copy_and_csum_bits(skb, |
934 |
skb_mac_header(skb) + hoff - skb->data, |
935 |
buf + 2 + hoff, len - hoff, 0)); |
936 |
#else |
Line 898
Link Here
|
|
|
943 |
|
Line 905
Link Here
|
|
|
951 |
#endif |
Line 907
Link Here
|
|
|
954 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
955 |
skb_copy_bits(skb, |
956 |
skb_mac_header(skb) - skb->data, buf + 2, len); |
957 |
#else |
Line 909
Link Here
|
|
|
960 |
#endif |
Line 911
Link Here
|
|
|
963 |
kfree(buf); |
Line 912
Link Here
|
912 |
kfree(buf); |
|
|
Line 923
Link Here
|
|
|
975 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
976 |
hw_recv(hw, skb_mac_header(skb), skb->data - skb_mac_header(skb) + skb->len); |
977 |
#else |
Line 924
Link Here
|
|
|
979 |
#endif |
Line 1011
Link Here
|
|
|
1067 |
#if WIRELESS_EXT < 19 |
Line 1013
Link Here
|
1013 |
-- data/drivers/drv_net/linux/prlnet.h |
1070 |
#endif |
|
|
1071 |
++ data/drivers/drv_net/linux/prlnet.h |
Line 6
Link Here
|
6 |
// $Id: prlnet.h,v 1.2 2006/02/06 13:46:49 mihailsi Exp $ |
6 |
// $Id: prlnet.h 6855 2006-02-06 13:46:49Z mihailsi $ |
7 |
-- |
|
|
8 |
-- data/drivers/drv_virtualnic/vmvirtualnic.c |
7 |
++ data/drivers/drv_virtualnic/vmvirtualnic.c |
Line 72
Link Here
|
72 |
MODULE_DESCRIPTION("Transparen ethernet bridge"); |
72 |
MODULE_DESCRIPTION("Virtual ethernet card"); |
73 |
-- |
|
|
Lines 75-77
Link Here
|
75 |
// Version |
|
|
76 |
//static const char *version = "VMVirtualNIC.c:v1.01 VirtualNIC driver from Parallels Inc. http://www.parallelssoft.com/"; |
77 |
|
Line 79
Link Here
|
79 |
struct net_device* dev; |
76 |
struct net_device* devs[5]; |
80 |
-- |
|
|
Line 99
Link Here
|
99 |
|
|
|
Line 101
Link Here
|
101 |
}; |
97 |
} |
102 |
-- |
|
|
Line 121
Link Here
|
121 |
|
|
|
Line 123
Link Here
|
123 |
}; |
118 |
} |
124 |
-- |
|
|
Line 202
Link Here
|
|
|
197 |
int maxdev = 1; |
198 |
#if defined(module_param) |
199 |
module_param(maxdev, int, 0); |
200 |
#elif defined(MODULE_PARM) |
201 |
MODULE_PARM(maxdev, "i"); |
202 |
#endif |
203 |
|
Lines 217-222
Link Here
|
217 |
// MAC address is hardwired to that value as in windows version |
219 |
// MAC address is hardwired to that value as in windows version |
218 |
unsigned char station_addr[6] = { 0x00, 0x01, 0x23, 0x45, 0xBE, 0xEF }; |
220 |
static const unsigned char station_addr[5][6] = { |
219 |
#if 0 |
221 |
{ 0x00, 0x01, 0x23, 0x45, 0xBE, 0xEF }, |
220 |
hypervisorPresentInSystem(); /* fake call to hypervisor -- ms */ |
222 |
{ 0x00, 0x01, 0x23, 0x45, 0xCA, 0xFE }, |
221 |
#endif |
223 |
{ 0x00, 0x01, 0x23, 0x45, 0xDA, 0xCE }, |
222 |
|
224 |
{ 0x00, 0x01, 0x23, 0x45, 0xEC, 0xAE }, |
223 |
-- |
225 |
{ 0x00, 0x01, 0x23, 0x45, 0xFA, 0xDE } |
|
|
226 |
}; |
227 |
int i; |
228 |
|
229 |
if (maxdev < 0) |
230 |
maxdev = 1; |
231 |
if (maxdev > 5) |
232 |
maxdev = 5; |
233 |
for (i = 0; i < maxdev; ++i) { |
Line 224
Link Here
|
224 |
dev = alloc_etherdev(sizeof(struct net_device_stats)); |
235 |
devs[i] = alloc_etherdev(sizeof(struct net_device_stats)); |
225 |
-- |
|
|
Lines 226-229
Link Here
|
226 |
dev = init_etherdev(0, 0); |
237 |
devs[i] = init_etherdev(0, 0); |
227 |
// May be it needed ? |
238 |
ether_setup(devs[i]); |
228 |
ether_setup(dev); |
239 |
devs[i]->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL); |
229 |
dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL); |
|
|
230 |
-- |
Lines 232-242
Link Here
|
232 |
dev_alloc_name(dev, "vnic%d"); |
242 |
dev_alloc_name(devs[i], "vnic%d"); |
233 |
// Set MAC address |
243 |
// Set MAC address |
234 |
memcpy(dev->dev_addr, station_addr, ETH_ALEN); |
244 |
memcpy(devs[i]->dev_addr, station_addr[i], ETH_ALEN); |
235 |
memset(dev->priv, 0, sizeof(struct net_device_stats)); |
245 |
memset(devs[i]->priv, 0, sizeof(struct net_device_stats)); |
236 |
|
246 |
|
237 |
// Set functions |
247 |
// Set functions |
238 |
dev->hard_start_xmit = &VNICXmit; |
248 |
devs[i]->hard_start_xmit = VNICXmit; |
239 |
dev->get_stats = &VNICGetStats; |
249 |
devs[i]->get_stats = VNICGetStats; |
240 |
dev->open = &VNICOpen; |
250 |
devs[i]->open = VNICOpen; |
241 |
dev->stop = &VNICClose; |
251 |
devs[i]->stop = VNICClose; |
242 |
dev->set_mac_address = &VNICSetMAC; |
252 |
devs[i]->set_mac_address = VNICSetMAC; |
243 |
-- |
|
|
Line 244
Link Here
|
244 |
SET_MODULE_OWNER(dev); |
254 |
SET_MODULE_OWNER(devs[i]); |
245 |
-- |
|
|
Line 248
Link Here
|
248 |
register_netdev(dev); |
258 |
register_netdev(devs[i]); |
249 |
-- |
|
|
Lines 250-252
Link Here
|
250 |
|
260 |
} |
251 |
return(0); |
261 |
return 0; |
252 |
}; |
262 |
} |
253 |
-- |
|
|
Line 269
Link Here
|
|
|
279 |
int i; |
Lines 270-272
Link Here
|
270 |
if (dev) |
281 |
for (i = 0; i < 5; ++i) { |
271 |
{ |
282 |
if (devs[i]) { |
272 |
ndstat = dev->priv; |
283 |
ndstat = devs[i]->priv; |
273 |
-- |
|
|
Line 274
Link Here
|
274 |
unregister_netdev(dev); |
285 |
unregister_netdev(devs[i]); |
275 |
-- |
|
|
Line 276
Link Here
|
276 |
free_netdev(dev); |
287 |
free_netdev(devs[i]); |
277 |
-- |
|
|
Lines 278-280
Link Here
|
278 |
kfree(ndstat); |
289 |
kfree(ndstat); |
279 |
dev->priv = NULL; |
290 |
devs[i]->priv = NULL; |
280 |
kfree(dev); |
291 |
kfree(devs[i]); |
281 |
-- |
|
|
Line 282
Link Here
|
282 |
-- data/drivers/hypervisor/hypercall.h |
293 |
devs[i] = NULL; |
|
|
294 |
} |
|
|
295 |
++ data/drivers/hypervisor/hypercall.h |
Lines 19-20
Link Here
|
19 |
#ifndef __HYPERCALL_H__ |
19 |
|
20 |
#define __HYPERCALL_H__ |
20 |
|
21 |
-- |
21 |
#ifndef __PRL_HYPERCALL_H__ |
|
|
22 |
#define __PRL_HYPERCALL_H__ |
Lines 115-116
Link Here
|
115 |
|
117 |
#endif /* __PRL_HYPERCALL_H__ */ |
116 |
#endif /* __HYPERCALL_H__ */ |
|
|
117 |
-- |
118 |
-- data/drivers/hypervisor/hypervisor.h |
118 |
++ data/drivers/hypervisor/hypervisor.h |
Lines 19-20
Link Here
|
19 |
#ifndef __HYPERVISOR_H__ |
19 |
#ifndef __PRL_HYPERVISOR_H__ |
20 |
#define __HYPERVISOR_H__ |
20 |
#define __PRL_HYPERVISOR_H__ |
21 |
-- |
|
|
Line 34
Link Here
|
|
|
34 |
# include "compat_memory.h" |
Line 130
Link Here
|
130 |
kmem_cache_t *vmStateCache; |
131 |
kmem_cache_compat *vmStateCache; |
131 |
-- |
|
|
Line 177
Link Here
|
177 |
#endif /* __HYPERVISOR_H__ */ |
178 |
#endif /* __PRL_HYPERVISOR_H__ */ |
178 |
-- |
|
|
179 |
-- data/drivers/hypervisor/hypvmstate.c |
179 |
++ data/drivers/hypervisor/hypvmstate.c |
Line 25
Link Here
|
|
|
25 |
#include "compat_memory.h" |
Line 169
Link Here
|
169 |
if (!(hypState.vmStateCache = kmem_cache_create(VMSTATE_SLABNAME, sizeof(struct hyp_vmstate_t), 0, |
170 |
if (!(hypState.vmStateCache = compat_kmem_cache_create(VMSTATE_SLABNAME, sizeof(struct hyp_vmstate_t), 0, |
170 |
-- |
|
|
171 |
-- data/drivers/hypervisor/svm_init.h |
171 |
++ data/drivers/hypervisor/svm_init.h |
Line 35
Link Here
|
|
|
35 |
/// Definitions of AMD CPUID function to get SVM revision and feature identification |
36 |
#define CPUID_SVM_REV 0x8000000a |
37 |
|
38 |
|
Line 38
Link Here
|
|
|
42 |
/// Definition of bit SVM_LOCK in edx after CPUID_SVM_REV fn |
43 |
#define SVM_LOCK (1 << 2) |
44 |
|
45 |
/// Definition of bit SVM Disabled in VM_CR SMR |
46 |
#define VM_CR_SVMDIS (1 << 4) |
47 |
|
48 |
|
Line 46
Link Here
|
|
|
57 |
/// Definition of address of VM_CR SMR |
58 |
#define SMR_VM_CR 0xc0010114 |
59 |
|
60 |
|
61 |
|
62 |
/** |
63 |
* Check CPU provider. |
64 |
*/ |
65 |
static __inline__ int is_amd() |
66 |
{ |
67 |
unsigned int _ebx, _ecx, _edx; |
68 |
|
69 |
__asm__ __volatile__( |
70 |
"cpuid \n\t" |
71 |
: /* out */ "=b" (_ebx), "=c" (_ecx), "=d" (_edx) |
72 |
: /* in */ "a" (0) |
73 |
: /* clo */ "memory" |
74 |
); |
75 |
|
76 |
// "AuthenticAMD" |
77 |
if ((_ebx == 0x68747541) && |
78 |
(_ecx == 0x444D4163) && |
79 |
(_edx == 0x69746E65)) |
80 |
return 1; |
81 |
|
82 |
return 0; |
83 |
} |
Lines 66-67
Link Here
|
66 |
/* Check SVM bit in CPUID extended features */ |
104 |
// Don't initialize this variables !!! |
67 |
return cpuid_ecx(CPUID_PROCESSOR_SIGNATURE) & CPUID_SVM; |
105 |
// because gcc on OSx remove all checks with this variables |
68 |
-- |
106 |
// and we can get wrmsr on locked msr register (which cause GP#) -- ms |
|
|
107 |
unsigned long msr_edx, msr_eax; |
108 |
unsigned int cpuid_1_ecx; |
109 |
unsigned int cpuid_2_edx; |
110 |
|
111 |
|
112 |
if (!is_amd()) |
113 |
return 0; |
114 |
|
115 |
msr_edx = 0; |
116 |
msr_eax = 0; |
117 |
|
118 |
// Check SVM bit in CPUID extended features |
119 |
cpuid_1_ecx = cpuid_ecx(CPUID_PROCESSOR_SIGNATURE); |
120 |
|
121 |
cpuid_2_edx = 0; |
122 |
|
123 |
// Check SVM bit in CPUID feature indentifiers |
124 |
if ((cpuid_1_ecx & CPUID_SVM) == 0) |
125 |
return 0; // SVM not available |
126 |
|
127 |
|
128 |
// Get VM_CR MSR value |
129 |
rdmsr(SMR_VM_CR, msr_eax, msr_edx); |
130 |
|
131 |
if((msr_eax & VM_CR_SVMDIS) == 0) |
132 |
{ |
133 |
// set EFER.SVME |
134 |
rdmsr(MSR_IA32_EFER, msr_eax, msr_edx); |
135 |
wrmsr(MSR_IA32_EFER, msr_eax | EFER_SVME, msr_edx); |
136 |
return 1; // SVM allowed |
137 |
} |
138 |
|
139 |
// CPUID SVM Revision and Feature Identification EDX |
140 |
cpuid_2_edx = cpuid_edx(CPUID_SVM_REV); |
141 |
|
142 |
if((cpuid_2_edx & SVM_LOCK) == 0) |
143 |
{ |
144 |
return 0; // SVM disabled at bios not unlockable |
145 |
} |
146 |
|
147 |
return 0; // SVM disabled with key |
Line 71
Link Here
|
71 |
-- data/drivers/hypervisor/vtx_init.h |
151 |
|
|
|
152 |
++ data/drivers/hypervisor/vtx_init.h |
Line 76
Link Here
|
|
|
76 |
/** |
77 |
* Check CPU provider. |
78 |
*/ |
79 |
static __inline__ int is_intelPW22() |
80 |
{ |
81 |
unsigned int _ebx, _ecx, _edx; |
82 |
|
83 |
__asm__ __volatile__( |
84 |
"cpuid \n\t" |
85 |
: /* out */ "=b" (_ebx), "=c" (_ecx), "=d" (_edx) |
86 |
: /* in */ "a" (0) |
87 |
: /* clo */ "memory" |
88 |
); |
89 |
|
90 |
// "GenuineIntel" |
91 |
if ((_ebx == 0x756e6547) && |
92 |
(_ecx == 0x6c65746e) && |
93 |
(_edx == 0x49656e69)) |
94 |
return 1; |
95 |
|
96 |
return 0; |
97 |
} |
Line 97
Link Here
|
97 |
-- data/drivers/Makefile |
119 |
if (!is_intelPW22()) |
|
|
120 |
return 0; |
121 |
|
|
|
122 |
++ data/drivers/Makefile |
Line 1
Link Here
|
|
|
1 |
KSRC ?= /lib/modules/$(shell uname -r)/build |
Line 5
Link Here
|
5 |
cd drv_main/ && $(MAKE) && cd .. |
6 |
cd drv_main/ && $(MAKE) KSRC=${KSRC} && cd .. |
6 |
-- |
|
|