]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/devs/eth/sh/sh4_202_md/v2_0/include/devs_eth_sh4_202_md.inl
Initial revision
[karo-tx-redboot.git] / packages / devs / eth / sh / sh4_202_md / v2_0 / include / devs_eth_sh4_202_md.inl
1 //==========================================================================
2 //
3 //      devs/eth/sh/sh4_202_md/..../include/devs_eth_sh4_202_md.inl
4 //
5 //      Microdev ethernet I/O definitions.
6 //
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 // Copyright (C) 2003 Nick Garnett 
13 //
14 // eCos is free software; you can redistribute it and/or modify it under
15 // the terms of the GNU General Public License as published by the Free
16 // Software Foundation; either version 2 or (at your option) any later version.
17 //
18 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
19 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21 // for more details.
22 //
23 // You should have received a copy of the GNU General Public License along
24 // with eCos; if not, write to the Free Software Foundation, Inc.,
25 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 //
27 // As a special exception, if other files instantiate templates or use macros
28 // or inline functions from this file, or you compile this file and link it
29 // with other works to produce a work based on this file, this file does not
30 // by itself cause the resulting work to be covered by the GNU General Public
31 // License. However the source code for this file must still be made available
32 // in accordance with section (3) of the GNU General Public License.
33 //
34 // This exception does not invalidate any other reasons why a work based on
35 // this file might be covered by the GNU General Public License.
36 //
37 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
38 // at http://sources.redhat.com/ecos/ecos-license/
39 // -------------------------------------------
40 //####ECOSGPLCOPYRIGHTEND####
41 //==========================================================================
42 //#####DESCRIPTIONBEGIN####
43 //
44 // Author(s):    nickg
45 // Contributors: nickg
46 // Date:         2003-08-20
47 // Purpose:      Microdev ethernet definitions
48 //####DESCRIPTIONEND####
49 //==========================================================================
50
51 #include <pkgconf/system.h>
52 #include <pkgconf/devs_eth_sh_microdev.h>
53 #include <cyg/hal/hal_intr.h>          
54
55 #ifdef CYGPKG_REDBOOT
56 # include <pkgconf/redboot.h>
57 # ifdef CYGSEM_REDBOOT_FLASH_CONFIG
58 #  include <redboot.h>
59 #  include <flash_config.h>
60 # endif
61 #endif
62
63 #define LAN91CXX_IS_LAN91C111
64
65 #ifdef CYGPKG_DEVS_ETH_SH_MICRODEV_ETH0
66
67 #if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG)
68 RedBoot_config_option("Set " CYGDAT_DEVS_ETH_SH_MICRODEV_ETH0_NAME " network hardware address [MAC]",
69                       eth0_esa,
70                       ALWAYS_ENABLED, true,
71                       CONFIG_BOOL, false
72     );
73 RedBoot_config_option(CYGDAT_DEVS_ETH_SH_MICRODEV_ETH0_NAME " network hardware address [MAC]",
74                       eth0_esa_data,
75                       "eth0_esa", true,
76                       CONFIG_ESA, 0
77     );
78 #endif // CYGPKG_REDBOOT && CYGSEM_REDBOOT_FLASH_CONFIG
79
80 #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
81 // Note that this section *is* active in an application, outside RedBoot,
82 // where the above section is not included.
83
84 # include <cyg/hal/hal_if.h>
85
86 # ifndef CONFIG_ESA
87 #  define CONFIG_ESA (6)
88 # endif
89 # ifndef CONFIG_BOOL
90 #  define CONFIG_BOOL (1)
91 # endif
92
93 cyg_bool
94 _microdev_provide_eth0_esa(struct lan91cxx_priv_data* cpd)
95 {
96     cyg_bool set_esa;
97     int ok;
98     ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET,
99                                       "eth0_esa", &set_esa, CONFIG_BOOL);
100     if (ok && set_esa) {
101         ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET,
102                                           "eth0_esa_data", cpd->enaddr, CONFIG_ESA);
103     }
104     return ok && set_esa;
105 }
106
107 #endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
108
109 static lan91cxx_priv_data lan91cxx_eth0_priv_data = { 
110     base : (unsigned short *) 0xA7500000,
111     interrupt: CYGNUM_HAL_INTERRUPT_LVL3,
112 #ifdef CYGSEM_DEVS_ETH_SH_MICRODEV_ETH0_SET_ESA
113     enaddr        : CYGDAT_DEVS_ETH_SH_MICRODEV_ETH0_ESA,
114     hardwired_esa : true,
115 #else
116     hardwired_esa : false,
117 #endif
118 #ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
119     provide_esa   : &_microdev_provide_eth0_esa,
120 #else
121     provide_esa   : NULL,
122 #endif
123 };
124
125 ETH_DRV_SC(lan91cxx_sc,
126            &lan91cxx_eth0_priv_data,          // Driver specific data
127            CYGDAT_DEVS_ETH_SH_MICRODEV_ETH0_NAME, // Name for device
128            lan91cxx_start,
129            lan91cxx_stop,
130            lan91cxx_control,
131            lan91cxx_can_send,
132            lan91cxx_send,
133            lan91cxx_recv,
134            lan91cxx_deliver,
135            lan91cxx_poll,
136            lan91cxx_int_vector
137 );
138
139 NETDEVTAB_ENTRY(lan91cxx_netdev, 
140                 "lan91cxx_" CYGDAT_DEVS_ETH_SH_MICRODEV_ETH0_NAME,
141                 smsc_lan91cxx_init,
142                 &lan91cxx_sc);
143
144 #endif // CYGPKG_DEVS_ETH_SH_MICRODEV_ETH0
145
146
147