1e4c8f4bc7fbb4de96a20b45719cce563f7fd7a3
[o-du/phy.git] / fhi_lib / app / dpdk.sh
1 #! /bin/bash\r
2 \r
3 #/******************************************************************************\r
4 #*\r
5 #*   Copyright (c) 2019 Intel.\r
6 #*\r
7 #*   Licensed under the Apache License, Version 2.0 (the "License");\r
8 #*   you may not use this file except in compliance with the License.\r
9 #*   You may obtain a copy of the License at\r
10 #*\r
11 #*       http://www.apache.org/licenses/LICENSE-2.0\r
12 #*\r
13 #*   Unless required by applicable law or agreed to in writing, software\r
14 #*   distributed under the License is distributed on an "AS IS" BASIS,\r
15 #*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16 #*   See the License for the specific language governing permissions and\r
17 #*   limitations under the License.\r
18 #*\r
19 #*******************************************************************************/\r
20 \r
21 \r
22 export RTE_SDK=/home/turner/dpdk\r
23 export RTE_TARGET=x86_64-native-linuxapp-icc\r
24 \r
25 #\r
26 # Unloads igb_uio.ko.\r
27 #\r
28 remove_igb_uio_module()\r
29 {\r
30     echo "Unloading any existing DPDK UIO module"\r
31     /sbin/lsmod | grep -s igb_uio > /dev/null\r
32     if [ $? -eq 0 ] ; then\r
33         sudo /sbin/rmmod igb_uio\r
34     fi\r
35 }\r
36 \r
37 #\r
38 # Loads new igb_uio.ko (and uio module if needed).\r
39 #\r
40 load_igb_uio_module()\r
41 {\r
42     if [ ! -f $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko ];then\r
43         echo "## ERROR: Target does not have the DPDK UIO Kernel Module."\r
44         echo "       To fix, please try to rebuild target."\r
45         return\r
46     fi\r
47 \r
48     remove_igb_uio_module\r
49 \r
50     /sbin/lsmod | grep -s uio > /dev/null\r
51     if [ $? -ne 0 ] ; then\r
52         if [ -f /lib/modules/$(uname -r)/kernel/drivers/uio/uio.ko ] ; then\r
53             echo "Loading uio module"\r
54             sudo /sbin/modprobe uio\r
55         fi\r
56     fi\r
57 \r
58     # UIO may be compiled into kernel, so it may not be an error if it can't\r
59     # be loaded.\r
60 \r
61     echo "Loading DPDK UIO module"\r
62     sudo /sbin/insmod $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko\r
63     if [ $? -ne 0 ] ; then\r
64         echo "## ERROR: Could not load kmod/igb_uio.ko."\r
65         quit\r
66     fi\r
67 }\r
68 \r
69 #\r
70 # Unloads VFIO modules.\r
71 #\r
72 remove_vfio_module()\r
73 {\r
74         echo "Unloading any existing VFIO module"\r
75         /sbin/lsmod | grep -s vfio > /dev/null\r
76         if [ $? -eq 0 ] ; then\r
77                 sudo /sbin/rmmod vfio-pci\r
78                 sudo /sbin/rmmod vfio_iommu_type1\r
79                 sudo /sbin/rmmod vfio\r
80         fi\r
81 }\r
82 \r
83 #\r
84 # Loads new vfio-pci (and vfio module if needed).\r
85 #\r
86 load_vfio_module()\r
87 {\r
88         remove_vfio_module\r
89 \r
90         VFIO_PATH="kernel/drivers/vfio/pci/vfio-pci.ko"\r
91 \r
92         echo "Loading VFIO module"\r
93         /sbin/lsmod | grep -s vfio_pci > /dev/null\r
94         if [ $? -ne 0 ] ; then\r
95                 if [ -f /lib/modules/$(uname -r)/$VFIO_PATH ] ; then\r
96                         sudo /sbin/modprobe vfio-pci\r
97                 fi\r
98         fi\r
99 \r
100         # make sure regular users can read /dev/vfio\r
101         echo "chmod /dev/vfio"\r
102         sudo chmod a+x /dev/vfio\r
103         if [ $? -ne 0 ] ; then\r
104                 echo "FAIL"\r
105                 quit\r
106         fi\r
107         echo "OK"\r
108 \r
109         # check if /dev/vfio/vfio exists - that way we\r
110         # know we either loaded the module, or it was\r
111         # compiled into the kernel\r
112         if [ ! -e /dev/vfio/vfio ] ; then\r
113                 echo "## ERROR: VFIO not found!"\r
114         fi\r
115 }\r
116 \r
117 \r
118 load_igb_uio_module\r
119 load_vfio_module\r
120 \r
121 CPU_FEATURES_DETECT=`cat /proc/cpuinfo |grep hypervisor | wc -l`\r
122 \r
123 if [ "$CPU_FEATURES_DETECT" -eq "0" ]\r
124 then\r
125 VM_DETECT='HOST'\r
126 echo ${VM_DETECT}\r
127 else\r
128 VM_DETECT='VM'\r
129 echo ${VM_DETECT}\r
130 fi\r
131 \r
132 $RTE_SDK/usertools/dpdk-devbind.py --status\r
133 if [ ${VM_DETECT} == 'HOST' ]; then\r
134     #HOST\r
135     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:22:02.0\r
136     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:22:02.1\r
137     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:22:0a.0\r
138     $RTE_SDK/usertools/dpdk-devbind.py --bind=vfio-pci 0000:22:0a.1\r
139 else\r
140     #VM\r
141     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:04.0\r
142     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:05.0\r
143     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:06.0\r
144     $RTE_SDK/usertools/dpdk-devbind.py --bind=igb_uio 0000:00:07.0\r
145 fi\r
146 \r
147 $RTE_SDK/usertools/dpdk-devbind.py --status\r
148 \r