patch-2.4.25 linux-2.4.25/arch/mips/galileo-boards/ev64120/compressed/load.c
Next file: linux-2.4.25/arch/mips/galileo-boards/ev64120/compressed/meminit.S
Previous file: linux-2.4.25/arch/mips/galileo-boards/ev64120/compressed/ld.sys.big.burner
Back to the patch index
Back to the overall index
- Lines: 245
- Date:
1969-12-31 16:00:00.000000000 -0800
- Orig file:
linux-2.4.24/arch/mips/galileo-boards/ev64120/compressed/load.c
- Orig date:
2002-08-02 17:39:43.000000000 -0700
diff -urN linux-2.4.24/arch/mips/galileo-boards/ev64120/compressed/load.c linux-2.4.25/arch/mips/galileo-boards/ev64120/compressed/load.c
@@ -1,244 +0,0 @@
-
-/* control character used for download */
-#define ETX CNTRL('c')
-#define ACK CNTRL('f')
-#define NAK CNTRL('u')
-#define XON CNTRL('q')
-#define XOFF CNTRL('s')
-
-unsigned int csum;
-unsigned int dl_entry;
-
-static const unsigned char hextab[256] = {
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255,
- 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255,
- 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255,
- 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255,
-};
-
-
-unsigned char ascii_to_bin(unsigned char c)
-{
- return hextab[c];
-}
-
-unsigned char read_char_direct(void)
-{
- unsigned char c, *cp;
- cp = (unsigned char *) 0xbd000020;
- while (1) {
- if (*(cp + 0x14) & 0x01) {
- c = (volatile unsigned char) *cp;
- return c;
- }
- cp++;
- cp--;
- }
-}
-
-unsigned char get_pair(void)
-{
- unsigned char byte;
-
- byte = ascii_to_bin(read_char_direct()) << 4;
- byte |= ascii_to_bin(read_char_direct());
- csum += byte;
- return (byte);
-}
-
-
-void serial_putc(int ch)
-{
- unsigned long temp;
- for (temp = 0; temp < 1000; temp++) {
- }
- *(char *) 0xbd000020 = (char) ch;
-}
-
-
-int inline serial_getc(void)
-{
- return read_char_direct();
-}
-
-int serial_ischar(void)
-{
-
- unsigned char c, *cp;
- unsigned count;
- cp = (unsigned char *) 0xbd000020;
- count = 0;
- while (count != 100) {
- if (*(cp + 0x14) & 0x01) {
- c = (volatile unsigned char) *cp;
- return c;
- }
- cp++;
- cp--;
- count++;
- }
- return 0;
-}
-
-int serial_init(void)
-{
- return 0;
-}
-
-
-int galileo_dl(void)
-{
-#define display_char '.'
-#define display_error 'E'
-#define display_error_bad_7 '7'
-#define display_error_unknown 'U'
-#define display_error_length 'L'
-
- register int length, address, save_csum;
- int i, first, done, eof, reccount, type, client_pc;
- int src, dbl_length;
- unsigned char *buffptr, databuff[258], tempo;
- register int display_counter, chunks, leftovers, putter,
- bytes_per_chunk;
- display_counter = 0;
- bytes_per_chunk = 16;
- csum = 0;
-
- reccount = 1;
- for (first = 1, done = 0; !done; first = 0, reccount++) {
- while (read_char_direct() != 'S')
- continue;
- csum = 0;
- type = read_char_direct();
- length = get_pair();
- if (length < 0 || length >= 256) {
- *(char *) 0xbd000020 = display_error_length;
- // *(char*)0xbd00000c = display_error_length;
- return 0;
- }
- length--;
- switch (type) {
- case '0':
- while (length-- > 0)
- get_pair();
- break;
- case '3':
- address = 0;
- for (i = 0; i < 4; i++) {
- address <<= 8;
- address |= get_pair();
- length--;
- }
- if (address == -1) {
- eof = 1;
- continue;
- }
- buffptr = &databuff[0];
- dbl_length = length << 1;
- chunks = dbl_length / bytes_per_chunk;
- leftovers = dbl_length % bytes_per_chunk;
- putter = bytes_per_chunk >> 1;
- while (chunks--) {
- for (i = 0; i < bytes_per_chunk; i++)
- databuff[i] = read_char_direct();
- src = i = 0;
- while (i++ < putter) {
- tempo =
- (ascii_to_bin(databuff[src++])
- << 4) |
- ascii_to_bin(databuff[src++]);
- csum += tempo;
- *(char *) address++ = tempo;
- }
- }
- if (leftovers) {
- putter = leftovers / 2;
- for (i = 0; i < leftovers; i++)
- databuff[i] = read_char_direct();
- src = i = 0;
- while (i++ < putter) {
- tempo =
- (ascii_to_bin(databuff[src++])
- << 4) |
- ascii_to_bin(databuff[src++]);
- csum += tempo;
- *(char *) address++ = tempo;
- }
- }
- break;
-
- case '7':
- address = 0;
- for (i = 0; i < 4; i++) {
- address <<= 8;
- address |= get_pair();
- length--;
- }
- if (address == -1) {
- eof = 1;
- continue;
- }
- client_pc = address;
- if (length) {
- *(char *) 0xbd000020 = display_error_bad_7;
- // *(char*)0xbd00000c = display_error_bad_7;
- }
-
- done = 1;
- break;
-
- default:
- *(char *) 0xbd000020 = display_error_unknown;
- // *(char*)0xbd00000c = display_error_unknown;
-
- break;
- }
- save_csum = (~csum) & 0xff;
- if ((csum = get_pair()) < 0) {
- eof = 1;
- continue;
- }
- if (csum != save_csum) {
- *(char *) 0xbd000020 = display_error;
- // *(char*)0xbd00000c = display_error;
- } else {
-
- if (display_counter % 50 == 0) {
- *(char *) 0xbd000020 = display_char;
- display_counter = 0;
- }
- display_counter++;
-
- }
- }
- --reccount;
- dl_entry = client_pc;
- return dl_entry; /* Success */
-}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)