From: David Barksdale <[EMAIL PROTECTED]>

This change allows the RadiSys ASCII serial driver to work on a wider
range of systems. When initializing the serial interface the driver now
tries two different commands to get the IPMB address of the controller.

Signed-off-by: David Barksdale <[EMAIL PROTECTED]>
---
--- drivers/char/ipmi/ipmi_serial_radisys_ascii.c.orig  2008-02-25
12:39:54.911766000 -0600
+++ drivers/char/ipmi/ipmi_serial_radisys_ascii.c       2008-02-25
12:02:25.000000000 -0600
@@ -292,15 +292,25 @@ static void ra_setup_termios(struct kter
        return;
 }
 
+#define RA_OEM1_NETFN          0x30
 #define RA_CONTROLLER_OEM_NETFN        0x3e
 #define RA_GET_IPMB_ADDR_CMD   0x12
-static unsigned char get_ipmbaddr_msg[] = { 0x01,
-                                           RA_CONTROLLER_OEM_NETFN <<
2,
-                                           0x07, /* checksum1 */
-                                           0x00, /* source addr */
-                                           0x00, /* seq num/rsLUN */
-                                           RA_GET_IPMB_ADDR_CMD,
-                                           0xee  /* checksum2 */
+static unsigned char get_ipmbaddr_msg1[] = { 0x01, /* dest addr */
+                                            RA_OEM1_NETFN << 2,
+                                            0x3f, /* checksum1 */
+                                            0x01, /* source addr */
+                                            0x00, /* seq num/rsLUN */
+                                            RA_GET_IPMB_ADDR_CMD,
+                                            0xed  /* checksum2 */
+};
+
+static unsigned char get_ipmbaddr_msg2[] = { 0x01, /* dest addr */
+                                            RA_CONTROLLER_OEM_NETFN <<
2,
+                                            0x07, /* checksum1 */
+                                            0x01, /* source addr */
+                                            0x00, /* seq num/rsLUN */
+                                            RA_GET_IPMB_ADDR_CMD,
+                                            0xed  /* checksum2 */
 };
 
 static void handle_init_getipmbaddr(struct ipmi_serial_codec_data
*data,
@@ -313,12 +323,23 @@ static void handle_init_getipmbaddr(stru
                return;
        len--;
 
-       if (((msg[1] >> 2) != (RA_CONTROLLER_OEM_NETFN | 1))
+       if (((msg[1] >> 2) != (RA_OEM1_NETFN | 1)
+           && (msg[1] >> 2) != (RA_CONTROLLER_OEM_NETFN | 1))
            || (msg[5] != RA_GET_IPMB_ADDR_CMD))
                return;
 
        if (msg[6] != 0) {
-               ipmi_serial_ll_init_complete(data->info, -EINVAL);
+               if ((msg[1] >> 2) == (RA_OEM1_NETFN | 1)) {
+                       unsigned long flags;
+
+                       spin_lock_irqsave(&data->lock, flags);
+                       format_msg(data, get_ipmbaddr_msg2,
+                                  sizeof(get_ipmbaddr_msg2));
+                       try_to_send_data(data, &flags);
+                       spin_unlock_irqrestore(&data->lock, flags);
+               }
+               else
+                       ipmi_serial_ll_init_complete(data->info,
-EINVAL);
                return;
        }
 
@@ -337,11 +358,11 @@ static int ra_init(struct ipmi_serial_co
        spin_lock_init(&data->lock);
        data->info = info;
        data->bmc_i2c_addr = 1; /* Initial setting should work ok. */
-       data->smi_i2c_addr = 0; /* Initial setting should work ok. */
+       data->smi_i2c_addr = 1; /* Initial setting should work ok. */
 
        data->recv_msg_handler = handle_init_getipmbaddr;
        spin_lock_irqsave(&data->lock, flags);
-       format_msg(data, get_ipmbaddr_msg, sizeof(get_ipmbaddr_msg));
+       format_msg(data, get_ipmbaddr_msg1, sizeof(get_ipmbaddr_msg1));
        try_to_send_data(data, &flags);
        spin_unlock_irqrestore(&data->lock, flags);
        return 0;



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Openipmi-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to