annotate packages/io/serial/current/src/common/haldiag.c @ 3292:7f8e529b4d82 default tip

Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
author vae
date Wed, 29 Apr 2015 23:31:48 +0000
parents 74dbf4c3f2e1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // io/serial/common/haldiag.c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // Serial I/O interface module using HAL I/O routines
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //==========================================================================
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
8 // ####ECOSGPLCOPYRIGHTBEGIN####
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
9 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
12 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
14 // the terms of the GNU General Public License as published by the Free
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
16 // version.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
17 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
18 // eCos is distributed in the hope that it will be useful, but WITHOUT
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
21 // for more details.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
22 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
23 // You should have received a copy of the GNU General Public License
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
24 // along with eCos; if not, write to the Free Software Foundation, Inc.,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
26 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
27 // As a special exception, if other files instantiate templates or use
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
28 // macros or inline functions from this file, or you compile this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
29 // and link it with other works to produce a work based on this file,
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
30 // this file does not by itself cause the resulting work to be covered by
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
31 // the GNU General Public License. However the source code for this file
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
32 // must still be made available in accordance with section (3) of the GNU
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
33 // General Public License v2.
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 115
diff changeset
34 //
2729
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
35 // This exception does not invalidate any other reasons why a work based
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
36 // on this file might be covered by the GNU General Public License.
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
37 // -------------------------------------------
74dbf4c3f2e1 Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents: 2035
diff changeset
38 // ####ECOSGPLCOPYRIGHTEND####
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 // Author(s): gthomas
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43 // Contributors: gthomas
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 // Date: 1999-02-04
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 // Purpose: HAL/diag serial driver
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // Description:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 //==========================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 #include <pkgconf/io.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 #include <pkgconf/io_serial.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54 #ifdef CYGPKG_IO_SERIAL_HALDIAG
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55 #include <cyg/io/io.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 #include <cyg/io/devtab.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 #include <cyg/io/serial.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58 #include <cyg/infra/diag.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 #include <cyg/hal/hal_diag.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61 static bool haldiag_init(struct cyg_devtab_entry *tab);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 static bool haldiag_putc(serial_channel *chan, unsigned char c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 static unsigned char haldiag_getc(serial_channel *chan);
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
64 static Cyg_ErrNo haldiag_set_config(serial_channel *chan, cyg_uint32 key,
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
65 const void *xbuf, cyg_uint32 *len);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
66
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
67 static SERIAL_FUNS(haldiag_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 haldiag_putc,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
69 haldiag_getc,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 haldiag_set_config,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
71 0, // start xmit - not used
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72 0 // stop xmit - not used
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 static int _no_data;
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 2
diff changeset
76 static SERIAL_CHANNEL(haldiag_channel0,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 haldiag_funs,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78 _no_data,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 CYG_SERIAL_BAUD_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80 CYG_SERIAL_STOP_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 CYG_SERIAL_PARITY_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 CYG_SERIAL_WORD_LENGTH_DEFAULT,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 CYG_SERIAL_FLAGS_DEFAULT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85 DEVTAB_ENTRY(haldiag_io0,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 "/dev/haldiag",
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 0, // Does not depend on a lower level interface
62
7a6ac9edc838 Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents: 2
diff changeset
88 &cyg_io_serial_devio,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
89 haldiag_init,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
90 0, // No initialization/lookup needed
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
91 &haldiag_channel0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
92
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 static void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 haldiag_config_port(serial_channel *chan)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 static bool
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99 haldiag_init(struct cyg_devtab_entry *tab)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 serial_channel *chan = (serial_channel *)tab->priv;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102 #ifdef CYGDBG_IO_INIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 diag_printf("HAL/diag SERIAL init\n");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 haldiag_config_port(chan);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 return true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
109 // Return 'true' if character is sent to device
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
110 static bool
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
111 haldiag_putc(serial_channel *chan, unsigned char c)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
112 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
113 HAL_DIAG_WRITE_CHAR(c);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 return true;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117 static unsigned char
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 haldiag_getc(serial_channel *chan)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
119 {
2035
42d972ba4f44 * src/common/tty.c (tty_write):
asl
parents: 210
diff changeset
120 char c;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 HAL_DIAG_READ_CHAR(c);
2035
42d972ba4f44 * src/common/tty.c (tty_write):
asl
parents: 210
diff changeset
122 return (unsigned char)c;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
125 static Cyg_ErrNo
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
126 haldiag_set_config(serial_channel *chan, cyg_uint32 key, const void *xbuf,
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
127 cyg_uint32 *len)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
128 {
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
129 switch (key) {
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
130 case CYG_IO_SET_CONFIG_SERIAL_INFO:
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
131 diag_printf("%s\n", __FUNCTION__);
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
132 return ENOERR;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
133 default:
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
134 return -EINVAL;
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 66
diff changeset
135 }
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
136 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 #endif // CYGPKG_IO_SERIAL_HALDIAG