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

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/devs/eth/cf
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/v2_0/cdl/cf_eth_drivers.cdl
0,0 → 1,132
# ====================================================================
#
# cf_eth_drivers.cdl
#
# Ethernet drivers - device support for PCMCIA (Compact Flash)
# Socket Communications: Low Power Compact Flash Ethernet board
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): gthomas
# Contributors: gthomas, jskov
# Date: 2000-07-07
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_DEVS_ETH_CF {
display "PCMCIA (Compact Flash) ethernet drivers"
 
parent CYGPKG_IO_ETH_DRIVERS
active_if CYGPKG_IO_ETH_DRIVERS
active_if CYGPKG_IO_PCMCIA
requires CYGPKG_DEVS_ETH_NS_DP83902A
 
implements CYGHWR_NET_DRIVERS
implements CYGHWR_NET_DRIVER_ETH0
include_dir cyg/io
description "Ethernet driver for various PCMCIA (Compact Flash) boards."
compile -library=libextras.a if_sc_lpe.c
 
# FIXME: This really belongs in the NS DP83902A package
cdl_interface CYGINT_DEVS_ETH_NS_DP83902A_REQUIRED {
display "NS DP83902A ethernet driver required"
}
define_proc {
puts $::cdl_system_header "/***** ethernet driver proc output start *****/"
puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_NS_DP83902A_INL <cyg/io/devs_eth_cf.inl>"
puts $::cdl_system_header "#define CYGDAT_DEVS_ETH_NS_DP83902A_CFG <pkgconf/devs_eth_cf.h>"
puts $::cdl_system_header "/***** ethernet driver proc output end *****/"
}
 
cdl_component CYGPKG_DEVS_ETH_CF_ETH0 {
display "CF ethernet port driver"
flavor bool
default_value 1
description "
This option includes the ethernet device driver for a
CF card."
 
implements CYGINT_DEVS_ETH_NS_DP83902A_REQUIRED
 
cdl_option CYGDAT_DEVS_ETH_CF_ETH0_NAME {
display "Device name for the ETH0 ethernet driver"
flavor data
default_value {"\"eth0\""}
description "
This option sets the name of the ethernet device."
}
 
cdl_component CYGSEM_DEVS_ETH_CF_ETH0_SET_ESA {
display "Set the ethernet station address"
flavor bool
default_value 0
description "Enabling this option will allow the ethernet
station address to be forced to the value set by the
configuration. This may be required if the hardware does
not include a serial EEPROM for the ESA."
cdl_option CYGDAT_DEVS_ETH_CF_ETH0_ESA {
display "The ethernet station address"
flavor data
default_value {"{0x08, 0x88, 0x12, 0x34, 0x56, 0x78}"}
description "The ethernet station address"
}
}
}
 
cdl_component CYGPKG_DEVS_ETH_CF_OPTIONS {
display "PCMCIA ethernet driver build options"
flavor none
no_define
 
cdl_option CYGPKG_DEVS_ETH_CF_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "-D_KERNEL -D__ECOS" }
description "
This option modifies the set of compiler flags for
building the PCMCIA ethernet driver package.
These flags are used in addition
to the set of global flags."
}
}
}
 
/v2_0/include/devs_eth_cf.inl
0,0 → 1,108
//==========================================================================
//
// devs_eth_cf.inl
//
// CF (PCMCIA) ethernet I/O definitions.
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jskov
// Contributors:jskov
// Date: 2001-06-15
// Purpose: PCMCIA ethernet defintions
//
//####DESCRIPTIONEND####
//==========================================================================
 
#include <cyg/hal/hal_intr.h> // CYGNUM_HAL_INTERRUPT_ETHR
#include <cyg/hal/hal_if.h>
#include <cyg/infra/cyg_type.h>
#include <cyg/io/pcmcia.h>
 
#ifdef __WANT_CONFIG
 
#undef CYGHWR_NS_DP83902A_PLF_INT_CLEAR
#define CYGHWR_NS_DP83902A_PLF_INT_CLEAR(_dp_) \
CYG_MACRO_START \
struct cf_slot* slot = (struct cf_slot*) (_dp_)->plf_priv; \
cf_clear_interrupt(slot); \
CYG_MACRO_END
 
#endif // __WANT_CONFIG
 
#ifdef __WANT_DEVS
 
externC int cyg_sc_lpe_int_vector(struct eth_drv_sc *sc);
externC bool cyg_sc_lpe_init(struct cyg_netdevtab_entry *tab);
 
#ifdef CYGPKG_DEVS_ETH_CF_ETH0
 
static dp83902a_priv_data_t dp83902a_eth0_priv_data = {
tx_buf1: 0x40,
tx_buf2: 0x48,
rx_buf_start: 0x50,
rx_buf_end: 0x80,
#ifdef CYGSEM_DEVS_ETH_CF_ETH0_SET_ESA
esa : CYGDAT_DEVS_ETH_CF_ETH0_ESA,
hardwired_esa : true,
#else
hardwired_esa : false,
#endif
};
 
ETH_DRV_SC(dp83902a_sc,
&dp83902a_eth0_priv_data, // Driver specific data
CYGDAT_DEVS_ETH_CF_ETH0_NAME,
dp83902a_start,
dp83902a_stop,
dp83902a_control,
dp83902a_can_send,
dp83902a_send,
dp83902a_recv,
dp83902a_deliver, // "pseudoDSR" called from fast net thread
dp83902a_poll, // poll function, encapsulates ISR and DSR
cyg_sc_lpe_int_vector);
 
NETDEVTAB_ENTRY(dp83902a_netdev,
"dp83902a_" CYGDAT_DEVS_ETH_CF_ETH0_NAME,
cyg_sc_lpe_init,
&dp83902a_sc);
#endif // CYGPKG_DEVS_ETH_CF_ETH0
 
#endif // __WANT_DEVS
 
// EOF devs_eth_cf.inl
/v2_0/ChangeLog
0,0 → 1,168
2002-11-04 Gary Thomas <gthomas@ecoscentric.com>
 
* src/if_sc_lpe.c (do_delay): Fix problem with overloaded name 'ticks'.
n.b. the FreeBSD stack has this defined for it's own use.
 
2002-06-14 Gary Thomas <gary@chez-thomas.org>
 
* src/if_sc_lpe.c:
Need to include <pkgconf/io_eth_drivers.h> for proper configuration
of stand-alone (polled) vs. system (interrupt driven) mode.
 
2002-05-30 Jonathan Larmour <jlarmour@redhat.com>
 
* src/if_sc_lpe.c: Conditionalize use of thread on CYGPKG_KERNEL
not CYGPKG_NET.
 
2002-04-12 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Clean up warnings.
 
2001-10-16 Jesper Skov <jskov@redhat.com>
 
* include/devs_eth_cf.inl: Added buffer parameters.
 
2001-08-25 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c (sc_lpe_card_handler): Rework ESA discovery code.
 
2001-08-22 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c:
printf() is no longer a part of RedBoot. Thus all programs
must use diag_printf() and related functions instead.
 
2001-06-16 Jesper Skov <jskov@redhat.com>
 
* src/if_sc_lpe.c: Use generic DP83902A driver, only redefining
the init function to handle card details (which incidently do not
appear to be fully working).
 
* include/devs_eth_cf.inl: Device details moved here so the
generic driver can access them.
 
* cdl/cf_eth_drivers.cdl: Changes to use generic driver. Allow ESA
to be configured.
Require DP83902A package.
 
* src/dp8390.h: Deleted.
 
2001-04-13 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c (sc_lpe_card_handler): Work around broken card(s)
which do not have valid ESA in config EPROM.
 
2000-09-15 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Suppress noisy message which seems to sometimes
happen if the card is re-initialized from warm.
 
2000-09-14 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Better recovery for bad devices [stand-alone].
 
2000-09-13 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Fix handling of receive buffer overflow,
i.e. missed data. [quietly ignored]
 
* src/dp8390.h: Update layout of Tx/Rx buffers.
 
2000-09-12 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c (sc_lpe_card_handler): Handle case when card
is warm (powered up from boot ROM).
 
2000-09-01 Hugo Tyson <hmt@cygnus.co.uk>
 
* src/if_sc_lpe.c (sc_lpe_init): Work with new fast net
thread to do all the copying work instead of loading up DSR time.
In detail:
o New "deliver" function in the interface record. It's the same
function as the poll entry; sc_lpe_int().
o In registering the interrupt handler, use eth_drv_dsr (from the
logical driver) instead of sc_lpe_int.
 
2000-08-29 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c (sc_lpe_recv): Better handling if upper layer
had no buffers [this routine called anyway].
 
2000-08-28 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Better handling of "hot" cards (i.e. one
initialized by a debug environment).
 
2000-08-23 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Add new function to return interrupt vector
used by interface. Also, handle interrupts from interface even
if there is no kernel (CF callback).
 
2000-08-03 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Ensure DSR locked while initializing hardware.
 
* cdl/cf_eth_drivers.cdl: Ethernet driver package hierarchy changed.
 
2000-07-26 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: Update for new eth_drv interfaces (via *sc).
 
2000-07-18 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c (sc_lpe_RxEvent): Handle case where chip gets lost
and keeps returning the same input packet (hardware bug?).
 
2000-07-16 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c (sc_lpe_card_handler): Add initialization message and
timeout when running stand-alone.
 
2000-07-15 Gary Thomas <gthomas@redhat.com>
 
* src/if_sc_lpe.c: CF interrupts are now handled by the slot handler,
not directly in this code.
 
2000-07-14 Gary Thomas <gthomas@redhat.com>
 
* cdl/cf_eth_drivers.cdl:
* src/if_sc_lpe.c: Support building in eCos and stand-alone modes.
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
 
/v2_0/src/if_sc_lpe.c
0,0 → 1,326
//==========================================================================
//
// dev/if_sc_lpe.c
//
// Ethernet device driver for Socket Communications Compact Flash card
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
// Copyright (C) 2002 Gary Thomas
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//####BSDCOPYRIGHTBEGIN####
//
// -------------------------------------------
//
// Portions of this software may have been derived from OpenBSD or other sources,
// and are covered by the appropriate copyright disclaimers included herein.
//
// -------------------------------------------
//
//####BSDCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas, jskov
// Date: 2000-07-07
// Purpose:
// Description: hardware driver for LPCF+ ethernet
//
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/system.h>
#include <pkgconf/io_eth_drivers.h>
 
#include <cyg/infra/cyg_type.h>
#include <cyg/hal/hal_arch.h>
#include <cyg/infra/diag.h>
#include <cyg/hal/drv_api.h>
#include <cyg/io/pcmcia.h>
#include <cyg/io/eth/eth_drv.h>
#include <cyg/io/eth/netdev.h>
 
#ifdef CYGPKG_NET
#include <pkgconf/net.h>
#else
#include <cyg/hal/hal_if.h>
#endif
 
#include <cyg/io/dp83902a.h>
 
#define DP_DATA 0x10
#define DP_CARD_RESET 0x1f
 
#define SC_LPE_MANUF 0x0104
 
#ifdef CYGPKG_KERNEL
#define STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
static char sc_lpe_card_handler_stack[STACK_SIZE];
static cyg_thread sc_lpe_card_handler_thread_data;
static cyg_handle_t sc_lpe_card_handler_thread_handle;
#endif // CYGPKG_KERNEL
 
__inline__ static void
do_delay(int _ticks)
{
#ifdef CYGPKG_KERNEL
cyg_thread_delay(_ticks);
#else
CYGACC_CALL_IF_DELAY_US(10000*_ticks);
#endif
}
 
//
// This runs as a separate thread to handle the card. In particular, insertions
// and deletions need to be handled and they take time/coordination, thus the
// separate thread.
//
#ifdef CYGPKG_KERNEL
static void
#else
static int
#endif
sc_lpe_card_handler(cyg_addrword_t param)
{
struct eth_drv_sc *sc = (struct eth_drv_sc *)param;
dp83902a_priv_data_t *dp = (dp83902a_priv_data_t*)sc->driver_private;
struct cf_slot *slot;
struct cf_cftable cftable;
struct cf_config config;
int i, len, ptr, cor = 0;
unsigned char buf[256], *cp;
cyg_uint8* base;
unsigned char *vers_product, *vers_manuf, *vers_revision, *vers_date;
#ifndef CYGPKG_KERNEL
int tries = 0;
#endif
bool first = true;
 
slot = (struct cf_slot*)dp->plf_priv;
cyg_drv_dsr_lock();
while (true) {
cyg_drv_dsr_unlock(); // Give DSRs a chance to run (card insertion)
cyg_drv_dsr_lock();
if ((slot->state == CF_SLOT_STATE_Inserted) ||
((slot->state == CF_SLOT_STATE_Ready) && first)) {
first = false;
if (slot->state != CF_SLOT_STATE_Ready) {
cf_change_state(slot, CF_SLOT_STATE_Ready);
}
if (slot->state != CF_SLOT_STATE_Ready) {
diag_printf("CF card won't go ready!\n");
#ifndef CYGPKG_KERNEL
return false;
#else
continue;
#endif
}
len = sizeof(buf);
ptr = 0;
if (cf_get_CIS(slot, CF_CISTPL_MANFID, buf, &len, &ptr)) {
if (*(short *)&buf[2] != SC_LPE_MANUF) {
diag_printf("Not a SC LPE, sorry\n");
continue;
}
}
ptr = 0;
if (cf_get_CIS(slot, CF_CISTPL_VERS_1, buf, &len, &ptr)) {
// Find individual strings
cp = &buf[4];
vers_product = cp;
while (*cp++) ; // Skip to nul
vers_manuf = cp;
while (*cp++) ; // Skip to nul
vers_revision = cp;
while (*cp++) ; // Skip to nul
vers_date = cp;
#ifndef CYGPKG_KERNEL
if (tries != 0) diag_printf("\n");
diag_printf("%s: %s %s %s\n", vers_manuf, vers_product, vers_revision, vers_date);
#endif
}
ptr = 0;
if (cf_get_CIS(slot, CF_CISTPL_CONFIG, buf, &len, &ptr)) {
if (cf_parse_config(buf, len, &config)) {
cor = config.base;
}
}
if (!cor) {
// diag_printf("Couldn't find COR pointer!\n");
continue;
}
 
ptr = 0;
if (cf_get_CIS(slot, CF_CISTPL_CFTABLE_ENTRY, buf, &len, &ptr)) {
if (cf_parse_cftable(buf, len, &cftable)) {
cyg_uint8 tmp;
// Initialize dp83902a IO details
dp->base = base = (cyg_uint8*)&slot->io[cftable.io_space.base[0]];
dp->data = base + DP_DATA;
dp->interrupt = slot->int_num;
cf_set_COR(slot, cor, cftable.cor);
// Reset card (read issues RESET, write clears it)
HAL_READ_UINT8(base+DP_CARD_RESET, tmp);
HAL_WRITE_UINT8(base+DP_CARD_RESET, tmp);
// Wait for card
do {
DP_IN(base, DP_ISR, tmp);
} while (0 == (tmp & DP_ISR_RESET));
 
// Fetch hardware address from card - terrible, but not well defined
// Patterned after what Linux drivers do
if (!dp->hardwired_esa) {
static unsigned char sc_lpe_addr[] = { 0x00, 0xC0, 0x1B, 0x00, 0x99, 0x9E};
if ((slot->attr[0x1C0] == sc_lpe_addr[0]) &&
(slot->attr[0x1C2] == sc_lpe_addr[1]) &&
(slot->attr[0x1C4] == sc_lpe_addr[2])) {
sc_lpe_addr[3] = slot->attr[0x1C6];
sc_lpe_addr[4] = slot->attr[0x1C8];
sc_lpe_addr[5] = slot->attr[0x1CA];
} else {
// Coudn't find it in the CIS (attribute) data
unsigned char prom[32];
 
// Tell device to give up ESA
DP_OUT(base, DP_DCR, 0x48); // Bytewide access
DP_OUT(base, DP_RBCH, 0); // Remote byte count
DP_OUT(base, DP_RBCL, 0);
DP_OUT(base, DP_ISR, 0xFF); // Clear any pending interrupts
DP_OUT(base, DP_IMR, 0x00); // Mask all interrupts
DP_OUT(base, DP_RCR, 0x20); // Monitor
DP_OUT(base, DP_TCR, 0x02); // loopback
DP_OUT(base, DP_RBCH, 32); // Remote byte count
DP_OUT(base, DP_RBCL, 0);
DP_OUT(base, DP_RSAL, 0); // Remote address
DP_OUT(base, DP_RSAH, 0);
DP_OUT(base, DP_CR, DP_CR_START|DP_CR_RDMA); // Read data
for (i = 0; i < 32; i++) {
HAL_READ_UINT8(base+DP_DATAPORT, prom[i]);
}
if ((prom[0] == sc_lpe_addr[0]) &&
(prom[2] == sc_lpe_addr[1]) &&
(prom[4] == sc_lpe_addr[2])) {
diag_printf("Getting address from port\n");
sc_lpe_addr[3] = prom[6];
sc_lpe_addr[4] = prom[8];
sc_lpe_addr[5] = prom[10];
} else {
diag_printf("No valid ESA found in CIS! Hardwiring to 00:C0:1B:00:99:9E\n");
}
}
for (i = 0; i < 6; i++) {
dp->esa[i] = sc_lpe_addr[i];
}
}
 
// Initialize upper level driver
(sc->funs->eth_drv->init)(sc, dp->esa);
// Tell system card is ready to talk
dp->tab->status = CYG_NETDEVTAB_STATUS_AVAIL;
#ifndef CYGPKG_KERNEL
cyg_drv_dsr_unlock();
return true;
#endif
} else {
diag_printf("Can't parse CIS\n");
continue;
}
} else {
diag_printf("Can't fetch config info\n");
continue;
}
} else if (slot->state == CF_SLOT_STATE_Removed) {
diag_printf("Compact Flash card removed!\n");
} else {
cyg_drv_dsr_unlock();
do_delay(50); // FIXME!
#ifndef CYGPKG_KERNEL
if (tries == 0) diag_printf("... Waiting for network card: ");
diag_printf(".");
if (++tries == 10) {
// 5 seconds have elapsed - give up
return false;
}
cf_hwr_poll(slot); // Check to see if card has been inserted
#endif
cyg_drv_dsr_lock();
}
}
}
 
bool
cyg_sc_lpe_init(struct cyg_netdevtab_entry *tab)
{
struct eth_drv_sc *sc = (struct eth_drv_sc *)tab->device_instance;
dp83902a_priv_data_t *dp = (dp83902a_priv_data_t *)sc->driver_private;
struct cf_slot* slot;
 
cf_init(); // Make sure Compact Flash subsystem is initialized
slot = dp->plf_priv = (void*)cf_get_slot(0);
dp->tab = tab;
 
#ifdef CYGPKG_KERNEL
// Create card handling [background] thread
cyg_thread_create(CYGPKG_NET_THREAD_PRIORITY-1, // Priority
sc_lpe_card_handler, // entry
(cyg_addrword_t)sc, // entry parameter
"SC LP-E card support", // Name
&sc_lpe_card_handler_stack[0], // Stack
STACK_SIZE, // Size
&sc_lpe_card_handler_thread_handle, // Handle
&sc_lpe_card_handler_thread_data // Thread data structure
);
cyg_thread_resume(sc_lpe_card_handler_thread_handle); // Start it
 
// Initialize environment, setup interrupt handler
// eth_drv_dsr is used to tell the fast net thread to run the deliver funcion.
cf_register_handler(slot, eth_drv_dsr, sc);
 
return false; // Device is not ready until inserted, powered up, etc.
#else
// Initialize card
return sc_lpe_card_handler((cyg_addrword_t)sc);
#endif
}
 
int
cyg_sc_lpe_int_vector(struct eth_drv_sc *sc)
{
dp83902a_priv_data_t *dp = (dp83902a_priv_data_t *)sc->driver_private;
struct cf_slot* slot = (struct cf_slot*)dp->plf_priv;
 
return slot->int_num;
}

powered by: WebSVN 2.1.0

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