blob: 5eb36f10485fa221fa6d5a6400eff32942c18293 [file] [log] [blame]
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 "<channel>|<intf> <channel2>|<intf2>", 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)
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