FILESEXTRAPATHS:prepend:gbmc := "${THISDIR}/${PN}:" SRC_URI:append:gbmc = " \ file://gbmc_eth_config.json \ file://gbmc_eth_access.json \ " DEPENDS:append:gbmc = " jq-native" GBMCBR_IPMI_CHANNEL ?= "11" GBMC_NCSI_IPMI_CHANNEL ??= "1" GBMC_NCSI_IPMI_CHANNEL:npcm8xx ??= "2" # Only used for extra channels, GBMCBR and NCSI are autopopulated # Format looks like "| |", Ex. "2|eth0 3|back" GBMC_IPMI_CHANNEL_MAP ??= "" ENTITY_MAPPING ?= "default" gbmc_add_channel() { local chan="$1" local intf="$2" jq --slurpfile ecfg ${WORKDIR}/gbmc_eth_config.json --arg CHAN "$chan" --arg INTF "$intf" \ '. + {$CHAN: ($ecfg[0] + {"name": $INTF})}' $config_json >${WORKDIR}/tmp-config.json mv ${WORKDIR}/tmp-config.json $config_json jq --slurpfile ecfg ${WORKDIR}/gbmc_eth_access.json --arg CHAN "$chan" \ '. + {$CHAN: $ecfg[0]}' $access_json >${WORKDIR}/tmp-access.json mv ${WORKDIR}/tmp-access.json $access_json } # Replace a channel in config.json to add gbmcbr reporting do_install:append:gbmc() { config_json=${D}${datadir}/ipmi-providers/channel_config.json access_json=${D}${datadir}/ipmi-providers/channel_access.json overlapping="$(jq '."${GBMCBR_IPMI_CHANNEL}" | .is_valid and .name != "gbmcbr"' $config_json)" if [ "$overlapping" != "false" ]; then echo "gBMC channel config overlaps on ${GBMCBR_IPMI_CHANNEL}" >&2 cat $config_json exit 1 fi overlapping="$(jq '."${GBMCBR_IPMI_CHANNEL}" | .access_mode and .access_mode != "always_available"' $access_json)" if [ "$overlapping" != "false" ]; then echo "gBMC channel access overlaps on ${GBMCBR_IPMI_CHANNEL}" >&2 cat $access_json exit 1 fi gbmc_add_channel ${GBMCBR_IPMI_CHANNEL} gbmcbr if [ -n "${GBMC_NCSI_IF_NAME}" ]; then gbmc_add_channel ${GBMC_NCSI_IPMI_CHANNEL} ${GBMC_NCSI_IF_NAME} fi map="${GBMC_IPMI_CHANNEL_MAP}" # Split the map over the space separated entries for entry in $map; do OLDIFS="$IFS" # Split the entry over the `|` separator IFS='|' gbmc_add_channel $entry IFS="$OLDIFS" done # Set entity-map.json to empty json for gBMC by default. # Each system will override it if needed. if [[ "${ENTITY_MAPPING}" != "default" ]]; then echo "[]" > ${D}${datadir}/ipmi-providers/entity-map.json fi } python do_gbmc_version () { import json if d.getVar('GBMC_VERSION') is None: return version = d.getVar('GBMC_VERSION').split('.') major = min(int(version[0]), 0x7F) & 0x7F minor = min(int(version[1]), 99) minor = int(minor / 10) * 16 + minor % 10; point = int(version[2]) subpoint = int(version[3]) dir = d.getVar('D') + d.getVar('datadir') + '/ipmi-providers' path = os.path.join(dir, 'dev_id.json') dev_id = {} # Open existing dev_id and override the fields not needed for version. with open(path, 'r') as f: dev_id = json.load(f) dev_id["firmware_revision"] = { "major": major, "minor": minor } dev_id["aux"] = subpoint << 16 | (0xFFFF & point) dev_id["manuf_id"] = 11129 dev_id["prod_id"] = 14426 with open(path, 'w') as f: json.dump(dev_id, f, sort_keys=True, indent=4) } addtask gbmc_version after do_install before do_package