diff --git a/xCAT-client/share/xcat/rvid/rvid.blade b/xCAT-client/share/xcat/rvid/rvid.blade
index 1c2773c6d..ec9d5a71c 100755
--- a/xCAT-client/share/xcat/rvid/rvid.blade
+++ b/xCAT-client/share/xcat/rvid/rvid.blade
@@ -1,9 +1,28 @@
-#!/bin/sh
+#!/bin/bash
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
+set
+fwpref=${rvid_fwrev%%???}
+fwver=${rvid_fwrev##????}
+fwmaj=${fwver%%?}
+if [ -z "$fwmaj" ]; then
+ echo "Unable to recognize AMM firmware revision"
+ exit 1
+fi
mkdir -p /tmp/xcat
if [ ! -f /tmp/xcat/$rvid_server.remotekvm.jar ]; then
wget -O /tmp/xcat/$rvid_server.remotekvm.jar http://$rvid_server/private/remotekvm.jar
fi
+if [ $fwpref == 'BPET' ]; then
+ if [ $fwmaj -ge 46 ]; then
+ java -jar /tmp/xcat/$rvid_server.remotekvm.jar -s $rvid_server -r $rvid_authtoken -b $rvid_slot >& /dev/null
+ elif [ $fwmaj -ge 42 ]; then
+ java -jar /tmp/xcat/$rvid_server.remotekvm.jar $rvid_server -rbs $rvid_authtoken -ba $rvid_ba -port $rvid_port >& /dev/null
+ else
+ echo "Unknown method for firmware $rvid_fwrev, ensure it is at least BPET42R";
+ fi
+else
+ echo "Unknown semantics for $fwpref, trying a particular way, may not work."
+ java -jar /tmp/xcat/$rvid_server.remotekvm.jar $rvid_server -rbs $rvid_authtoken -ba $rvid_ba -b $rvid_slot >& /dev/null
+fi
-java -jar /tmp/xcat/$rvid_server.remotekvm.jar -s $rvid_server -r $rvid_authtoken -b $rvid_slot >& /dev/null
-rm /tmp/xcat/rvid_server.remotekvm.jar
+rm /tmp/xcat/$rvid_server.remotekvm.jar
diff --git a/xCAT-server/lib/xcat/plugins/blade.pm b/xCAT-server/lib/xcat/plugins/blade.pm
index ed441edd0..0d880fb5c 100644
--- a/xCAT-server/lib/xcat/plugins/blade.pm
+++ b/xCAT-server/lib/xcat/plugins/blade.pm
@@ -1783,30 +1783,41 @@ sub get_kvm_params {
my $html = $response->{_content};
my $destip;
my $rbs;
+ my $fwrev;
+ my $port;
foreach (split /\n/,$html) {
if (/get("http://$mpa/private/remotecontrol.js.php");
+ $html = $response->{_content};
foreach (split /\n/,$html) {
- if (/{$mpa}->{username};
my $pass = $mpahash->{$mpa}->{password};
httplogin($mpa,$user,$pass);
- (my $target, my $authtoken) = get_kvm_params($mpa);
+ (my $target, my $authtoken, my $fwrev, my $port, my $ba) = get_kvm_params($mpa);
#an http logoff would invalidate the KVM token, so we can't do it here
#For the instant in time, banking on the http session timeout to cleanup for us
#It may be possible to provide the session id to client so it can logoff when done, but
@@ -2662,6 +2673,13 @@ sub dompa {
push(@output,"server:$target");
push(@output,"authtoken:$authtoken");
push(@output,"slot:$slot");
+ push(@output,"fwrev:$fwrev");
+ if ($port) {
+ push(@output,"ba:$ba");
+ }
+ if ($ba) {
+ push(@output,"ba:$ba");
+ }
my %outh;
$outh{node}->[0]->{name}=[$node];
$outh{node}->[0]->{data}=[];