meta-phosphor: jsnbd: promote dynamic-layers content

The previous 'dynamic-layers' content has been fixed so that it is
functional on both aspeed and nuvoton (and likely any system that
exposes the same sysfs class entries).  Promote this content out
of dynamic-layers and make it common to reduce the hardware-specific
duplication.

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I8f8247098ef8f8b035269815ebe77dedb2e8a441
diff --git a/meta-phosphor/recipes-connectivity/jsnbd/jsnbd/state_hook b/meta-phosphor/recipes-connectivity/jsnbd/jsnbd/state_hook
new file mode 100755
index 0000000..3f5a974
--- /dev/null
+++ b/meta-phosphor/recipes-connectivity/jsnbd/jsnbd/state_hook
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+if [ $# -ne 2 ]
+then
+    echo "usage: $0 <start|stop> <config>" >&2
+    exit 1
+fi
+
+action=$1
+config=$2
+
+gadget_name=mass-storage
+gadget_dir=/sys/kernel/config/usb_gadget/$gadget_name
+
+case "$config" in
+0)
+    nbd_device=/dev/nbd0
+    ;;
+1)
+    nbd_device=/dev/nbd1
+    ;;
+*)
+    echo "invalid config $config" >&2
+    exit 1
+    ;;
+esac
+
+set -ex
+
+case "$action" in
+start)
+    mkdir -p $gadget_dir
+    (
+    cd $gadget_dir
+    # http://www.linux-usb.org/usb.ids
+    #    |-> 1d6b  Linux Foundation
+    #          |-> 0104  Multifunction Composite Gadget
+    echo "0x1d6b" > idVendor
+    echo "0x0104" > idProduct
+    mkdir -p strings/0x409
+    echo "OpenBMC" > strings/0x409/manufacturer
+    echo "Virtual Media Device" > strings/0x409/product
+    mkdir -p configs/c.1/strings/0x409
+    echo "config 1" > configs/c.1/strings/0x409/configuration
+    mkdir -p functions/mass_storage.usb0
+    ln -s functions/mass_storage.usb0 configs/c.1
+    echo 1 > functions/mass_storage.usb0/lun.0/removable
+    echo 1 > functions/mass_storage.usb0/lun.0/ro
+    echo 0 > functions/mass_storage.usb0/lun.0/cdrom
+    echo $nbd_device > functions/mass_storage.usb0/lun.0/file
+    echo "1e6a0000.usb-vhub:p4" > UDC
+    )
+    ;;
+stop)
+    (
+    cd $gadget_dir
+    rm configs/c.1/mass_storage.usb0
+    rmdir functions/mass_storage.usb0
+    rmdir configs/c.1/strings/0x409
+    rmdir configs/c.1
+    rmdir strings/0x409
+    )
+    rmdir $gadget_dir
+    ;;
+*)
+    echo "invalid action $action" >&2
+    exit 1
+esac
+
+exit 0
+
diff --git a/meta-phosphor/recipes-connectivity/jsnbd/jsnbd_git.bb b/meta-phosphor/recipes-connectivity/jsnbd/jsnbd_git.bb
index 4b6cd33..6a119dd 100644
--- a/meta-phosphor/recipes-connectivity/jsnbd/jsnbd_git.bb
+++ b/meta-phosphor/recipes-connectivity/jsnbd/jsnbd_git.bb
@@ -8,7 +8,10 @@
 PV = "1.0+git${SRCPV}"
 PR = "r1"
 
-SRC_URI = "git://github.com/openbmc/jsnbd;branch=master;protocol=https"
+SRC_URI = "\ 
+    git://github.com/openbmc/jsnbd;branch=master;protocol=https \
+    file://state_hook \
+    "
 
 S = "${WORKDIR}/git"
 
@@ -17,8 +20,11 @@
 do_install:append() {
     install -d ${D}${sysconfdir}/nbd-proxy/
     install -m 0644 ${NBD_PROXY_CONFIG_JSON} ${D}${sysconfdir}/nbd-proxy/config.json
+    install -m 0755 ${WORKDIR}/state_hook ${D}${sysconfdir}/nbd-proxy/state
 }
 
+FILES:${PN} += "${sysconfdir}/nbd-proxy/state"
+
 RDEPENDS:${PN} += "nbd-client"
 
 NBD_PROXY_CONFIG_JSON ??= "${S}/config.sample.json"