@@ -1445,7 +1445,8 @@ ips_info(struct Scsi_Host *SH) {
1445
1445
bp = & buffer [0 ];
1446
1446
memset (bp , 0 , sizeof (buffer ));
1447
1447
1448
- sprintf (bp , "%s%s%s" , "IBM PCI ServeRAID " , IPS_VERSION_HIGH , IPS_VERSION_LOW );
1448
+ sprintf (bp , "%s%s%s Build %d" , "IBM PCI ServeRAID " ,
1449
+ IPS_VERSION_HIGH , IPS_VERSION_LOW , IPS_BUILD_IDENT );
1449
1450
1450
1451
if (ha -> ad_type > 0 &&
1451
1452
ha -> ad_type <= MAX_ADAPTER_NAME ) {
@@ -1590,6 +1591,7 @@ static int
1590
1591
ips_make_passthru (ips_ha_t * ha , Scsi_Cmnd * SC , ips_scb_t * scb , int intr ) {
1591
1592
ips_passthru_t * pt ;
1592
1593
int length = 0 ;
1594
+ int ret ;
1593
1595
1594
1596
METHOD_TRACE ("ips_make_passthru" , 1 );
1595
1597
@@ -1656,9 +1658,11 @@ ips_make_passthru(ips_ha_t *ha, Scsi_Cmnd *SC, ips_scb_t *scb, int intr) {
1656
1658
}
1657
1659
1658
1660
if (ha -> device_id == IPS_DEVICEID_COPPERHEAD &&
1659
- pt -> CoppCP .cmd .flashfw .op_code == IPS_CMD_RW_BIOSFW )
1660
- return ips_flash_copperhead (ha , pt , scb );
1661
-
1661
+ pt -> CoppCP .cmd .flashfw .op_code == IPS_CMD_RW_BIOSFW ) {
1662
+ ret = ips_flash_copperhead (ha , pt , scb );
1663
+ ips_scmd_buf_write (SC , ha -> ioctl_data , sizeof (ips_passthru_t ));
1664
+ return ret ;
1665
+ }
1662
1666
if (ips_usrcmd (ha , pt , scb ))
1663
1667
return (IPS_SUCCESS );
1664
1668
else
@@ -2082,6 +2086,9 @@ ips_host_info(ips_ha_t *ha, char *ptr, off_t offset, int len) {
2082
2086
copy_info (& info , "\tDriver Version : %s%s\n" ,
2083
2087
IPS_VERSION_HIGH , IPS_VERSION_LOW );
2084
2088
2089
+ copy_info (& info , "\tDriver Build : %d\n" ,
2090
+ IPS_BUILD_IDENT );
2091
+
2085
2092
copy_info (& info , "\tMax Physical Devices : %d\n" ,
2086
2093
ha -> enq -> ucMaxPhysicalDevices );
2087
2094
copy_info (& info , "\tMax Active Commands : %d\n" ,
@@ -6464,6 +6471,8 @@ static void ips_version_check(ips_ha_t *ha, int intr) {
6464
6471
uint8_t BiosVersion [ IPS_COMPAT_ID_LENGTH + 1 ];
6465
6472
int MatchError ;
6466
6473
int rc ;
6474
+ char BiosString [10 ];
6475
+ char FirmwareString [10 ];
6467
6476
6468
6477
METHOD_TRACE ("ips_version_check" , 1 );
6469
6478
@@ -6496,28 +6505,30 @@ static void ips_version_check(ips_ha_t *ha, int intr) {
6496
6505
MatchError = 0 ;
6497
6506
6498
6507
if (strncmp (FirmwareVersion , Compatable [ ha -> nvram -> adapter_type ], IPS_COMPAT_ID_LENGTH ) != 0 )
6499
- {
6500
- if (ips_cd_boot == 0 )
6501
- printk (KERN_WARNING "Warning: Adapter %d Firmware Compatible Version is %s, but should be %s\n" ,
6502
- ha -> host_num , FirmwareVersion , Compatable [ ha -> nvram -> adapter_type ]);
6503
6508
MatchError = 1 ;
6504
- }
6505
6509
6506
6510
if (strncmp (BiosVersion , IPS_COMPAT_BIOS , IPS_COMPAT_ID_LENGTH ) != 0 )
6507
- {
6508
- if (ips_cd_boot == 0 )
6509
- printk (KERN_WARNING "Warning: Adapter %d BIOS Compatible Version is %s, but should be %s\n" ,
6510
- ha -> host_num , BiosVersion , IPS_COMPAT_BIOS );
6511
6511
MatchError = 1 ;
6512
- }
6513
6512
6514
6513
ha -> nvram -> versioning = 1 ; /* Indicate the Driver Supports Versioning */
6515
6514
6516
6515
if (MatchError )
6517
6516
{
6518
6517
ha -> nvram -> version_mismatch = 1 ;
6519
- if (ips_cd_boot == 0 )
6520
- printk (KERN_WARNING "Warning ! ! ! ServeRAID Version Mismatch\n" );
6518
+ if (ips_cd_boot == 0 )
6519
+ {
6520
+ strncpy (& BiosString [0 ], ha -> nvram -> bios_high , 4 );
6521
+ strncpy (& BiosString [4 ], ha -> nvram -> bios_low , 4 );
6522
+ BiosString [8 ] = 0 ;
6523
+
6524
+ strncpy (& FirmwareString [0 ], ha -> enq -> CodeBlkVersion , 8 );
6525
+ FirmwareString [8 ] = 0 ;
6526
+
6527
+ printk (KERN_WARNING "Warning ! ! ! ServeRAID Version Mismatch\n" );
6528
+ printk (KERN_WARNING "Bios = %s, Firmware = %s, Device Driver = %s%s\n" ,
6529
+ BiosString , FirmwareString , IPS_VERSION_HIGH , IPS_VERSION_LOW );
6530
+ printk (KERN_WARNING "These levels should match to avoid possible compatibility problems.\n" );
6531
+ }
6521
6532
}
6522
6533
else
6523
6534
{
0 commit comments