serial_console = 1;
        } else if (idev == PROMDEV_ITTYB && odev == PROMDEV_OTTYB) {
                serial_console = 2;
+       } else if (idev == PROMDEV_IRSC && odev == PROMDEV_ORSC) {
+               serial_console = 3;
        } else {
                prom_printf("Inconsistent console: "
                            "input %d, output %d\n",
 
        if (!strncmp(propb, "keyboard", 8))
                return PROMDEV_ITTYA;
 
+       if (!strncmp (propb, "rsc", 3))
+               return PROMDEV_IRSC;
+
        if (strncmp (propb, "tty", 3) || !propb[3])
                return PROMDEV_I_UNK;
+
        switch (propb[3]) {
                case 'a': return PROMDEV_ITTYA;
                case 'b': return PROMDEV_ITTYB;
        if (!strncmp(propb, "screen", 6))
                return PROMDEV_OTTYA;
 
+       if (!strncmp (propb, "rsc", 3))
+               return PROMDEV_ORSC;
+
        if (strncmp (propb, "tty", 3) || !propb[3])
                return PROMDEV_O_UNK;
+
        switch (propb[3]) {
                case 'a': return PROMDEV_OTTYA;
                case 'b': return PROMDEV_OTTYB;
 
        char *mode_prop = "ttyX-mode";
        char *cd_prop = "ttyX-ignore-cd";
        char *dtr_prop = "ttyX-rts-dtr-off";
+       char *ssp_console_modes_prop = "ssp-console-modes";
        int baud, bits, stop, cflag;
        char parity;
        int carrier = 0;
        if (!serial_console)
                return;
 
-       if (serial_console == 1) {
+       switch (serial_console) {
+       case PROMDEV_OTTYA:
                mode_prop[3] = 'a';
                cd_prop[3] = 'a';
                dtr_prop[3] = 'a';
-       } else {
+               break;
+
+       case PROMDEV_OTTYB:
                mode_prop[3] = 'b';
                cd_prop[3] = 'b';
                dtr_prop[3] = 'b';
+               break;
+
+       case PROMDEV_ORSC:
+
+               nd = prom_pathtoinode("rsc");
+               if (!nd) {
+                       strcpy(mode, "115200,8,n,1,-");
+                       goto no_options;
+               }
+
+               if (!prom_node_has_property(nd, ssp_console_modes_prop)) {
+                       strcpy(mode, "115200,8,n,1,-");
+                       goto no_options;
+               }
+
+               memset(mode, 0, sizeof(mode));
+               prom_getstring(nd, ssp_console_modes_prop, mode, sizeof(mode));
+               goto no_options;
+
+       default:
+               strcpy(mode, "9600,8,n,1,-");
+               goto no_options;
        }
 
        topnd = prom_getchild(prom_root_node);
                case 9600: cflag |= B9600; break;
                case 19200: cflag |= B19200; break;
                case 38400: cflag |= B38400; break;
+               case 57600: cflag |= B57600; break;
+               case 115200: cflag |= B115200; break;
+               case 230400: cflag |= B230400; break;
+               case 460800: cflag |= B460800; break;
                default: baud = 9600; cflag |= B9600; break;
        }
 
 
 
        sunserial_console_termios(con);
 
-       /* Firmware console speed is limited to 150-->38400 baud so
-        * this hackish cflag thing is OK.
-        */
        switch (con->cflag & CBAUD) {
        case B150: baud = 150; break;
        case B300: baud = 300; break;
        default: case B9600: baud = 9600; break;
        case B19200: baud = 19200; break;
        case B38400: baud = 38400; break;
+       case B57600: baud = 57600; break;
+       case B115200: baud = 115200; break;
+       case B230400: baud = 230400; break;
+       case B460800: baud = 460800; break;
        };
 
        /*
 
        PROMDEV_IKBD,                   /* input from keyboard */
        PROMDEV_ITTYA,                  /* input from ttya */
        PROMDEV_ITTYB,                  /* input from ttyb */
+       PROMDEV_IRSC,                   /* input from rsc */
        PROMDEV_I_UNK,
 };
 
        PROMDEV_OSCREEN,                /* to screen */
        PROMDEV_OTTYA,                  /* to ttya */
        PROMDEV_OTTYB,                  /* to ttyb */
+       PROMDEV_ORSC,                   /* to rsc */
        PROMDEV_O_UNK,
 };