xref: /spdk/scripts/gen_nvme.sh (revision 407e88fd2ab020d753e33014cf759353a9901b51)
1#!/usr/bin/env bash
2
3set -e
4
5rootdir=$(readlink -f $(dirname $0))/..
6source "$rootdir/scripts/common.sh"
7
8function create_classic_config()
9{
10	echo "[Nvme]"
11	for (( i=0; i < ${#bdfs[@]}; i++))
12	do
13		echo "  TransportID \"trtype:PCIe traddr:${bdfs[i]}\" Nvme$i"
14	done
15}
16
17function create_json_config()
18{
19	echo "{"
20	echo '"subsystem": "bdev",'
21	echo '"config": ['
22	for (( i=0; i < ${#bdfs[@]}; i++))
23	do
24		echo '{'
25		echo '"params": {'
26		echo '"trtype": "PCIe",'
27		echo "\"name\": \"Nvme$i\","
28		echo "\"traddr\": \"${bdfs[i]}\""
29		echo '},'
30		echo '"method": "construct_nvme_bdev"'
31		if [ -z ${bdfs[i+1]} ]; then
32			echo '}'
33		else
34			echo '},'
35		fi
36	done
37	echo ']'
38	echo '}'
39}
40
41bdfs=()
42# Check used drivers. If it's not vfio-pci or uio-pci-generic
43# then most likely PCI_WHITELIST option was used for setup.sh
44# and we do not want to use that disk.
45for bdf in $(iter_pci_class_code 01 08 02); do
46	driver=$(grep DRIVER /sys/bus/pci/devices/$bdf/uevent | awk -F"=" '{print $2}')
47	if [ "$driver" != "nvme" ]; then
48		bdfs+=("$bdf")
49	fi
50done
51
52if [ "$1" = "--json" ]; then
53	create_json_config
54else
55	create_classic_config
56fi
57