From 9b0e700d2392cb1943dd20ae80398a61da719c2e Mon Sep 17 00:00:00 2001 From: Li-Ta Lo Date: Wed, 6 Dec 2000 06:44:07 +0000 Subject: [PATCH] clean up and some document for serial init stuff --- src/pc80/serial.inc | 210 ++++++++++++++------------- src/superio/sis/950/setup_serial.inc | 61 ++++---- 2 files changed, 140 insertions(+), 131 deletions(-) diff --git a/src/pc80/serial.inc b/src/pc80/serial.inc index c253dc3643..fe8a81b173 100644 --- a/src/pc80/serial.inc +++ b/src/pc80/serial.inc @@ -20,38 +20,37 @@ #define TTYS0_MSR (TTYS0+0x06) #define TTYS0_SCR (TTYS0+0x07) - jmp serial0 + jmp serial0 /* uses: ax, dx */ - #define TTYS0_TX_AL \ - mov %al, %ah ; \ -9: mov $TTYS0_LSR, %dx ; \ - inb %dx, %al ; \ - test $0x20, %al ; \ - je 9b ; \ - mov $TTYS0_TBR, %dx ; \ - mov %ah, %al ; \ - outb %al, %dx + mov %al, %ah ; \ +9: mov $TTYS0_LSR, %dx ; \ + inb %dx, %al ; \ + test $0x20, %al ; \ + je 9b ; \ + mov $TTYS0_TBR, %dx ; \ + mov %ah, %al ; \ + outb %al, %dx /* uses: esp, ax, dx */ #define TTYS0_TX_CHAR(byte) \ - mov byte, %al ; \ + mov byte, %al ; \ CALLSP(ttys0_tx_al) /* uses: esp, ax, dx */ #define TTYS0_TX_HEX8(byte) \ - mov byte, %al ; \ + mov byte, %al ; \ CALLSP(ttys0_tx_hex8) /* uses: esp, eax, ebx, dx */ #define TTYS0_TX_HEX32(lword) \ - mov lword, %eax ; \ + mov lword, %eax ; \ CALLSP(ttys0_tx_hex32) /* uses: esp, ebx, ax, dx */ #define TTYS0_TX_STRING(string) \ - mov string, %ebx ; \ + mov string, %ebx ; \ CALLSP(ttys0_tx_string) /* uses: esp, ax, dx */ @@ -61,132 +60,135 @@ ttys0_tx_al: /* uses: esp, ax, dx */ ttys0_tx_hex8: - mov $TTYS0_SCR, %dx - outb %al, %dx - shr $4, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov $TTYS0_SCR, %dx + outb %al, %dx + shr $4, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL - mov $TTYS0_SCR, %dx - inb %dx, %al - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov $TTYS0_SCR, %dx + inb %dx, %al + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL RETSP /* uses: esp, ebx, eax, dx */ ttys0_tx_hex32: - mov %eax, %ebx - shr $28, %eax - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al -9: - TTYS0_TX_AL - - mov %ebx, %eax - shr $24, %eax - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov %eax, %ebx + shr $28, %eax + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL - mov %ebx, %eax - shr $20, %eax - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov %ebx, %eax + shr $24, %eax + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL - mov %ebx, %eax - shr $16, %eax - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov %ebx, %eax + shr $20, %eax + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL - mov %ebx, %eax - shr $12, %eax - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov %ebx, %eax + shr $16, %eax + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL - mov %ebx, %eax - shr $8, %eax - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov %ebx, %eax + shr $12, %eax + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL - mov %ebx, %eax - shr $4, %eax - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov %ebx, %eax + shr $8, %eax + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL - mov %ebx, %eax - and $0x0f, %al - add $'0', %al - cmp $'9', %al - jle 9f - add $39, %al + mov %ebx, %eax + shr $4, %eax + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al 9: TTYS0_TX_AL + mov %ebx, %eax + and $0x0f, %al + add $'0', %al + cmp $'9', %al + jle 9f + add $39, %al +9: + TTYS0_TX_AL RETSP /* Uses esp, ebx, ax, dx */ ttys0_tx_string: - mov (%ebx), %al - inc %ebx - cmp $0, %al - jne 9f + mov (%ebx), %al + inc %ebx + cmp $0, %al + jne 9f RETSP -9: TTYS0_TX_AL - jmp ttys0_tx_string +9: + TTYS0_TX_AL + jmp ttys0_tx_string serial0: - /* Set 115.2Kbps,8n1 */ + /* Set 8bit, 1 stop bit, no parity, DLAB */ + mov $TTYS0_LCR, %dx + mov $0x83, %al + out %al, %dx - mov $TTYS0_LCR, %dx - mov $0x83, %al - out %al, %dx - mov $TTYS0_DLL, %dx - mov $0x01, %al - out %al, %dx - mov $TTYS0_DLM, %dx - mov $0x00, %al - out %al, %dx - mov $TTYS0_LCR, %dx - mov $0x03, %al - out %al, %dx + /* set Baud Rate Divisor to 1 ==> 115200 Buad */ + mov $TTYS0_DLL, %dx + mov $0x01, %al + out %al, %dx + mov $TTYS0_DLM, %dx + mov $0x00, %al + out %al, %dx + + /* Disable DLAB */ + mov $TTYS0_LCR, %dx + mov $0x03, %al + out %al, %dx diff --git a/src/superio/sis/950/setup_serial.inc b/src/superio/sis/950/setup_serial.inc index 9a6a69f2e4..54a8c9c023 100644 --- a/src/superio/sis/950/setup_serial.inc +++ b/src/superio/sis/950/setup_serial.inc @@ -6,47 +6,54 @@ /* to do: move this to a common include file! */ #define WRITESIOBYTE(register, value) movw register, %dx ;\ - movb value, %al ;\ - outb %al, %dx; OUTIT(%al, $0x80) + movb value, %al ;\ + outb %al, %dx;\ + OUTIT(%al, $0x80) #define WRITESIOWORD(register, value) movw register, %dx ;\ - movw value, %ax ;\ - outw %ax, %dx; OUTIT(%al, $0x80) + movw value, %ax ;\ + outw %ax, %dx;\ + OUTIT(%al, $0x80) -/* turn on PnP */ + /* turn on PnP */ OUT2E($0x87) OUT2E($1) OUT2E($0x55) OUT2E($0x55) -/* select com1 */ + /* select com1 */ OUT2E($7) OUT2F($1) -/* set the enable in reg. 0x30 */ + + /* set the enable in reg. 0x30 */ OUT2E($0x30) OUT2F($1) -/* set the proper control bits for clock etc. in register 0x24 */ + + /* set the proper control bits for clock etc. in register 0x24 */ OUT2E($0x24) -/* NOTE: this also turns on all the proper bits for FLASH. - * they're combined in here. - */ + /* NOTE: this also turns on all the proper bits for FLASH. + * they're combined in here. + */ OUT2F($0xfd) -/* turn off PnP */ + + /* turn off PnP */ OUT2E($2) OUT2F($2) -/* all done that nonsense -- from here on it's standard pc80 */ -// set up register to set baud rate. + + /* all done that nonsense -- from here on it's standard pc80 */ + + /* Enable DLAB to set baud rate. */ WRITESIOBYTE($0x3fb, $0x80) -// Set 115 kb -// I don't think this thing can run at that rate. -// WRITESIOWORD($0x3f8, $1) -// Set 38.4 kb - WRITESIOWORD($0x3f8, $3) -// now set no parity, one stop, 8 bits - WRITESIOBYTE($0x3fb, $3) -// now turn on RTS, DRT - WRITESIOBYTE($0x3fc, $3) -// Enable interrupts - WRITESIOBYTE($0x3f9, $0xf) -// should be done. Dump a char for fun. - WRITESIOBYTE($0x3f8, $48) + + /* Set Buad Rate Divisor = 1==> 115 kb */ + WRITESIOWORD($0x3f8, $0x01) + + /* now set no parity, one stop, 8 bits, disable DLAB */ + WRITESIOBYTE($0x3fb, $0x03) + /* now turn on RTS, DTR */ + WRITESIOBYTE($0x3fc, $0x03) + /* Enable interrupts */ + WRITESIOBYTE($0x3f9, $0x0f) + + /* should be done. Dump a char for fun. */ + WRITESIOBYTE($0x3f8, $0x30)