OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-2.0/] [packages/] [devs/] [eth/] [arm/] [cerf/] [v2_0/] [include/] [devs_eth_arm_cerf.inl] - Blame information for rev 174

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 unneback
//==========================================================================
2
//
3
//      devs_eth_arm_cerf.inl
4
//
5
//      CERF 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
//
13
// eCos is free software; you can redistribute it and/or modify it under
14
// the terms of the GNU General Public License as published by the Free
15
// Software Foundation; either version 2 or (at your option) any later version.
16
//
17
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
19
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20
// for more details.
21
//
22
// You should have received a copy of the GNU General Public License along
23
// with eCos; if not, write to the Free Software Foundation, Inc.,
24
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25
//
26
// As a special exception, if other files instantiate templates or use macros
27
// or inline functions from this file, or you compile this file and link it
28
// with other works to produce a work based on this file, this file does not
29
// by itself cause the resulting work to be covered by the GNU General Public
30
// License. However the source code for this file must still be made available
31
// in accordance with section (3) of the GNU General Public License.
32
//
33
// This exception does not invalidate any other reasons why a work based on
34
// this file might be covered by the GNU General Public License.
35
//
36
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37
// at http://sources.redhat.com/ecos/ecos-license/
38
// -------------------------------------------
39
//####ECOSGPLCOPYRIGHTEND####
40
//==========================================================================
41
//#####DESCRIPTIONBEGIN####
42
//
43
// Author(s):   jskov
44
// Contributors:jskov
45
// Date:        2001-11-14
46
// Purpose:     CERF ethernet defintions
47
//
48
//####DESCRIPTIONEND####
49
//==========================================================================
50
 
51
#include 
52
#include 
53
#include 
54
 
55
#ifdef CYGPKG_REDBOOT
56
# include 
57
# ifdef CYGSEM_REDBOOT_FLASH_CONFIG
58
#  include 
59
#  include 
60
# endif
61
#endif
62
 
63
#ifdef __WANT_CONFIG
64
# define CS8900A_step 2
65
#endif
66
 
67
#ifdef __WANT_DEVS
68
 
69
#ifdef CYGPKG_DEVS_ETH_ARM_CERF_ETH0
70
 
71
#ifndef CYGSEM_DEVS_ETH_ARM_CERF_ETH0_SET_ESA
72
# if defined(CYGPKG_REDBOOT) && defined(CYGSEM_REDBOOT_FLASH_CONFIG)
73
RedBoot_config_option("Set " CYGDAT_DEVS_ETH_ARM_CERF_ETH0_NAME " network hardware address [MAC]",
74
                      eth0_esa,
75
                      ALWAYS_ENABLED, true,
76
                      CONFIG_BOOL, false
77
    );
78
RedBoot_config_option(CYGDAT_DEVS_ETH_ARM_CERF_ETH0_NAME " network hardware address [MAC]",
79
                      eth0_esa_data,
80
                      "eth0_esa", true,
81
                      CONFIG_ESA, 0
82
    );
83
# endif // CYGPKG_REDBOOT && CYGSEM_REDBOOT_FLASH_CONFIG
84
 
85
# ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
86
// Note that this section *is* active in an application, outside RedBoot,
87
// where the above section is not included.
88
 
89
#  include 
90
 
91
#  ifndef CONFIG_ESA
92
#   define CONFIG_ESA (6)
93
#  endif
94
#  ifndef CONFIG_BOOL
95
#   define CONFIG_BOOL (1)
96
#  endif
97
 
98
cyg_bool
99
_cerf_provide_eth0_esa(struct cs8900a_priv_data* cpd)
100
{
101
    cyg_bool set_esa;
102
    int ok;
103
    ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET,
104
                                      "eth0_esa", &set_esa, CONFIG_BOOL);
105
    if (ok && set_esa) {
106
        ok = CYGACC_CALL_IF_FLASH_CFG_OP( CYGNUM_CALL_IF_FLASH_CFG_GET,
107
                                          "eth0_esa_data", cpd->esa, CONFIG_ESA);
108
    }
109
    return ok && set_esa;
110
}
111
 
112
# endif // CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
113
#endif // ! CYGSEM_DEVS_ETH_ARM_CERF_ETH0_SET_ESA
114
 
115
// ------------------------------------------------------------------------
116
// EEPROM access functions
117
//
118
#define PP_ECR          0x0040
119
#define PP_EE_READ_CMD  0x0200
120
#define PP_EE_WRITE_CMD 0x0100
121
#define PP_EE_DATA              0x0042
122
#define PP_EE_ADDR_W0   0x001C
123
#define PP_EE_ADDR_W1   0x001D
124
#define PP_EE_ADDR_W2   0x001E
125
 
126
static __inline__ cyg_uint16
127
read_eeprom(cyg_addrword_t base, cyg_uint16 offset)
128
{
129
    while (get_reg(base, PP_SelfStat) & PP_SelfStat_SIBSY)
130
        ;
131
 
132
    put_reg(base, PP_ECR, (offset | PP_EE_READ_CMD));
133
 
134
    while (get_reg(base, PP_SelfStat) & PP_SelfStat_SIBSY)
135
        ;
136
 
137
    return get_reg(base, PP_EE_DATA);
138
}
139
 
140
static __inline__ void
141
copy_eeprom(cyg_addrword_t base)
142
{
143
    cyg_uint16 esa_word;
144
    int i;
145
    for (i = 0;  i < 6;  i += 2)
146
    {
147
         esa_word = read_eeprom(base, PP_EE_ADDR_W0 + (i/2));
148
         put_reg(base, PP_IA+(i/2), esa_word);
149
    }
150
}
151
 
152
static __inline__ void
153
post_reset(cyg_addrword_t base)
154
{
155
    // Toggle A0 connected to the SBHE line on the Crystal chip.
156
    *(char*)(0x20000000) = 1;
157
    *(char*)(0x20000001) = 2;
158
    *(char*)(0x20000000) = 3;
159
    *(char*)(0x20000001) = 0;
160
}
161
 
162
#undef  CYGHWR_CL_CS8900A_PLF_POST_RESET
163
#define CYGHWR_CL_CS8900A_PLF_POST_RESET(base) post_reset(base)
164
 
165
#undef  CYGHWR_CL_CS8900A_PLF_RESET
166
#define CYGHWR_CL_CS8900A_PLF_RESET(base) copy_eeprom(base)
167
 
168
static cs8900a_priv_data_t cs8900a_eth0_priv_data = {
169
    base : (cyg_addrword_t) 0xf0000300,
170
    interrupt:SA1110_IRQ_GPIO_ETH,
171
#ifdef CYGSEM_DEVS_ETH_ARM_CERF_ETH0_SET_ESA
172
    esa : CYGDAT_DEVS_ETH_ARM_CERF_ETH0_ESA,
173
    hardwired_esa : true,
174
#else
175
    hardwired_esa : false,
176
# ifdef CYGSEM_HAL_VIRTUAL_VECTOR_SUPPORT
177
    provide_esa : &_cerf_provide_eth0_esa,
178
# else
179
    provide_esa : NULL,
180
# endif
181
#endif
182
 
183
};
184
 
185
 
186
ETH_DRV_SC(cs8900a_sc,
187
           &cs8900a_eth0_priv_data, // Driver specific data
188
           CYGDAT_DEVS_ETH_ARM_CERF_ETH0_NAME,
189
           cs8900a_start,
190
           cs8900a_stop,
191
           cs8900a_control,
192
           cs8900a_can_send,
193
           cs8900a_send,
194
           cs8900a_recv,
195
           cs8900a_deliver,     // "pseudoDSR" called from fast net thread
196
           cs8900a_poll,        // poll function, encapsulates ISR and DSR
197
           cs8900a_int_vector);
198
 
199
NETDEVTAB_ENTRY(cs8900a_netdev,
200
                "cs8900a_" CYGDAT_DEVS_ETH_ARM_CERF_ETH0_NAME,
201
                cs8900a_init,
202
                &cs8900a_sc);
203
 
204
#endif // CYGPKG_DEVS_ETH_ARM_CERF_ETH0
205
 
206
#endif // __WANT_DEVS
207
 
208
// EOF devs_eth_arm_cerf.inl

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.