updates to rge to get it to compile

This commit is contained in:
Randall Stewart 2009-10-29 15:55:58 +00:00
parent 6e3272ee6f
commit 1b4a3a93ea
2 changed files with 156 additions and 152 deletions

View file

@ -79,30 +79,33 @@
#include <machine/param.h>
#include <machine/intr_machdep.h>
#include <machine/clock.h> /* for DELAY */
#include <machine/bus.h>
#include <machine/bus.h> /* */
#include <machine/resource.h>
#include <mips/xlr/interrupt.h>
#include <mips/xlr/msgring.h>
#include <mips/xlr/iomap.h>
#include <mips/xlr/debug.h>
#include <mips/xlr/pic.h>
#include <mips/xlr/xlrconfig.h>
#include <mips/xlr/shared_structs.h>
#include <mips/xlr/board.h>
#include <mips/rmi/interrupt.h>
#include <mips/rmi/msgring.h>
#include <mips/rmi/iomap.h>
#include <mips/rmi/debug.h>
#include <mips/rmi/pic.h>
#include <mips/rmi/xlrconfig.h>
#include <mips/rmi/shared_structs.h>
#include <mips/rmi/board.h>
#include <dev/rmi/xlr/atx_cpld.h>
#include <dev/rmi/xlr/xgmac_mdio.h>
#include <dev/rmi/xlr/rge.h>
#include <dev/mii/mii.h>
#include <dev/mii/miivar.h>
#include "miidevs.h"
#include <dev/mii/brgphyreg.h>
#include "miibus_if.h"
#include <sys/sysctl.h>
#include <dev/rmi/xlr/rge.h>
/* #include "opt_rge.h" */
#include "miibus_if.h"
MODULE_DEPEND(rge, ether, 1, 1, 1);
MODULE_DEPEND(rge, miibus, 1, 1, 1);
@ -160,93 +163,6 @@ int mac_debug = 0;
*****************************************************************/
extern uint32_t cpu_ltop_map[32];
typedef enum {
xlr_mac_speed_10, xlr_mac_speed_100,
xlr_mac_speed_1000, xlr_mac_speed_rsvd
} xlr_mac_speed_t;
typedef enum {
xlr_mac_duplex_auto, xlr_mac_duplex_half,
xlr_mac_duplex_full
} xlr_mac_duplex_t;
typedef enum {
xlr_mac_link_down,
xlr_mac_link_up,
} xlr_mac_link_t;
typedef enum {
xlr_mac_fc_auto, xlr_mac_fc_disabled, xlr_mac_fc_frame,
xlr_mac_fc_collision, xlr_mac_fc_carrier
} xlr_mac_fc_t;
struct rge_softc_stats {
unsigned long rx_frames;
unsigned long tx_frames;
unsigned long rx_packets;
unsigned long rx_bytes;
unsigned long tx_packets;
unsigned long tx_bytes;
};
struct driver_data {
/*
* Let these be the first fields in this structure the structure is
* cacheline aligned when allocated in init_etherdev
*/
struct fr_desc *frin_spill;
struct fr_desc *frout_spill;
union rx_tx_desc *class_0_spill;
union rx_tx_desc *class_1_spill;
union rx_tx_desc *class_2_spill;
union rx_tx_desc *class_3_spill;
int spill_configured;
struct rge_softc *sc; /* pointer to freebsd device soft-pointer */
struct rge_softc_stats stats;
struct mtx lock;
xlr_reg_t *mmio;
xlr_reg_t *mii_mmio;
xlr_reg_t *pcs_mmio;
xlr_reg_t *serdes_mmio;
int txbucket;
int rfrbucket;
int phy_oldbmsr;
int phy_oldanlpar;
int phy_oldk1stsr;
int phy_oldlinkstat;
unsigned char phys_addr[2];
xlr_mac_speed_t speed; /* current speed */
xlr_mac_duplex_t duplex;/* current duplex */
xlr_mac_link_t link; /* current link */
xlr_mac_fc_t flow_ctrl; /* current flow control setting */
int advertising;
int id;
int type;
int mode;
int instance;
int phy_addr;
int frin_to_be_sent[8];
int init_frin_desc;
};
/* static int mac_frin_to_be_sent_thr[8]; */
enum {
PORT_TX,
PORT_TX_COMPLETE,
PORT_STARTQ,
PORT_STOPQ,
PORT_START_DEV_STATE,
PORT_STOP_DEV_STATE,
};
#ifdef ENABLED_DEBUG
static int port_counters[4][8] __aligned(XLR_CACHELINE_SIZE);
@ -285,37 +201,6 @@ ldadd_wu(unsigned int value, unsigned long *addr)
/* #define mac_stats_add(x, val) ({(x) += (val);}) */
#define mac_stats_add(x, val) ldadd_wu(val, &x)
struct rge_softc {
int unit;
int irq;
unsigned char dev_addr[6];
unsigned long base_addr;
unsigned long mem_end;
struct ifnet *rge_ifp;/* interface info */
device_t rge_dev;
int mtu;
int flags;
struct driver_data priv;
struct mtx rge_mtx;
device_t rge_miibus;
struct mii_data rge_mii;/* MII/media information */
bus_space_handle_t rge_bhandle;
bus_space_tag_t rge_btag;
void *rge_intrhand;
struct resource rge_irq;
struct resource *rge_res;
struct ifmedia rge_ifmedia; /* TBI media info */
int rge_if_flags;
int rge_link; /* link state */
int rge_link_evt; /* pending link event */
struct callout rge_stat_ch;
void (*xmit) (struct ifnet *);
void (*stop) (struct rge_softc *);
int (*ioctl) (struct ifnet *, u_long, caddr_t);
struct rge_softc_stats *(*get_stats) (struct rge_softc *);
int active;
int link_up;
};
#define XLR_MAX_CORE 8
#define RGE_LOCK_INIT(_sc, _name) \
@ -354,7 +239,7 @@ static int rge_ioctl(struct ifnet *, u_long, caddr_t);
static void rge_init(void *);
static void rge_stop(struct rge_softc *);
static void rge_watchdog(struct ifnet *);
static void rge_shutdown(device_t);
static int rge_shutdown(device_t);
static void rge_reset(struct rge_softc *);
static struct mbuf *get_mbuf(void);
@ -367,8 +252,8 @@ static void rmi_xlr_mac_set_enable(struct driver_data *priv, int flag);
static void rmi_xlr_xgmac_init(struct driver_data *priv);
static void rmi_xlr_gmac_init(struct driver_data *priv);
static void mac_common_init(void);
static void rge_mii_write(struct device *, int, int, int);
static int rge_mii_read(struct device *, int, int);
static int rge_mii_write(device_t, int, int, int);
static int rge_mii_read(device_t, int, int);
static void rmi_xlr_mac_mii_statchg(device_t);
static int rmi_xlr_mac_mediachange(struct ifnet *);
static void rmi_xlr_mac_mediastatus(struct ifnet *, struct ifmediareq *);
@ -418,8 +303,8 @@ static device_method_t rge_methods[] = {
/* MII interface */
DEVMETHOD(miibus_readreg, rge_mii_read),
DEVMETHOD(miibus_writereg, rge_mii_write),
DEVMETHOD(miibus_statchg, rmi_xlr_mac_mii_statchg),
DEVMETHOD(miibus_writereg, rge_mii_write),
{0, 0}
};
@ -693,7 +578,7 @@ build_frag_list(struct mbuf *m_head, struct msgrng_msg *p2p_msg, struct p2d_tx_d
p1 = vtophys(taddr);
if ((p2 + len2) != p1) {
printf("p1 = %llx p2 = %llx\n", p1, p2);
printf("p1 = %p p2 = %p\n", (void *)p1, (void *)p2);
printf("len1 = %x len2 = %x\n", len1,
len2);
printf("m_data %p\n", m->m_data);
@ -989,7 +874,7 @@ rge_mii_read_internal(xlr_reg_t *mii_mmio, int phyaddr, int regidx)
}
static int
rge_mii_read(struct device *dev, int phyaddr, int regidx)
rge_mii_read(device_t dev, int phyaddr, int regidx)
{
struct rge_softc *sc = device_get_softc(dev);
return rge_mii_read_internal(sc->priv.mii_mmio, phyaddr, regidx);
@ -1051,7 +936,7 @@ rmi_xlr_mac_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
* Return value:
* nothing
********************************************************************* */
static void
static void
rge_mii_write_internal(xlr_reg_t *mii_mmio, int phyaddr, int regidx, int regval)
{
int i = 0;
@ -1071,16 +956,17 @@ rge_mii_write_internal(xlr_reg_t *mii_mmio, int phyaddr, int regidx, int regval)
return;
}
static void
rge_mii_write(struct device *dev, int phyaddr, int regidx, int regval)
static int
rge_mii_write(device_t dev, int phyaddr, int regidx, int regval)
{
struct rge_softc *sc = device_get_softc(dev);
rge_mii_write_internal(sc->priv.mii_mmio, phyaddr, regidx, regval);
return (0);
}
static void
rmi_xlr_mac_mii_statchg(device_t dev)
rmi_xlr_mac_mii_statchg(struct device *dev)
{
}
@ -1906,8 +1792,7 @@ static void xlr_tx_q_wakeup(void *addr)
}
static int
rge_attach(dev)
device_t dev;
rge_attach(device_t dev)
{
struct ifnet *ifp;
struct rge_softc *sc;
@ -2017,12 +1902,12 @@ rge_attach(dev)
/* Initialize the rge_softc */
sc->irq = gmac_conf->baseirq + priv->instance % 4;
sc->rge_irq.r_flags = (u_int) sc->irq; /* We will use r_flags for
* storing irq which
* iodi_setup_intr can check */
/* Set the IRQ into the rid field */
rman_set_rid(&sc->rge_irq, sc->irq);
ret = bus_setup_intr(dev, &sc->rge_irq, INTR_FAST | INTR_TYPE_NET | INTR_MPSAFE,
rge_intr, sc, &sc->rge_intrhand);
NULL, rge_intr, sc, &sc->rge_intrhand);
if (ret) {
rge_detach(dev);
@ -2047,7 +1932,7 @@ rge_attach(dev)
*/
sc->rge_mii.mii_ifp = ifp;
sc->rge_mii.mii_readreg = rge_mii_read;
sc->rge_mii.mii_writereg = rge_mii_write;
sc->rge_mii.mii_writereg = (mii_writereg_t)rge_mii_write;
sc->rge_mii.mii_statchg = rmi_xlr_mac_mii_statchg;
ifmedia_init(&sc->rge_mii.mii_media, 0, rmi_xlr_mac_mediachange,
rmi_xlr_mac_mediastatus);
@ -2235,7 +2120,7 @@ rge_rx(struct rge_softc *sc, vm_paddr_t paddr, int len)
if (mag != 0xf00bad) {
/* somebody else packet Error - FIXME in intialization */
printf("cpu %d: *ERROR* Not my packet paddr %llx\n", xlr_cpu_id(), paddr);
printf("cpu %d: *ERROR* Not my packet paddr %p\n", xlr_cpu_id(), (void *)paddr);
return;
}
@ -2469,7 +2354,7 @@ rge_watchdog(struct ifnet *sc)
{
}
static void
static int
rge_shutdown(device_t dev)
{
struct rge_softc *sc;
@ -2480,7 +2365,7 @@ rge_shutdown(device_t dev)
rge_reset(sc);
RGE_UNLOCK(sc);
return;
return(0);
}
static int
@ -2800,7 +2685,7 @@ mac_common_init(void)
}
}
#if notyet
/* Not yet
if (xlr_board_atx_ii()) {
if (register_msgring_handler
(TX_STN_XGS_0, rmi_xlr_mac_msgring_handler, NULL)) {
@ -2811,5 +2696,5 @@ mac_common_init(void)
panic("Couldn't register msgring handler for TX_STN_XGS_1\n");
}
}
#endif
*/
}

View file

@ -940,6 +940,125 @@
#define R_CC_CPU6_0 0x3b0
#define R_CC_CPU7_0 0x3b8
typedef enum {
xlr_mac_speed_10, xlr_mac_speed_100,
xlr_mac_speed_1000, xlr_mac_speed_rsvd
} xlr_mac_speed_t;
typedef enum {
xlr_mac_duplex_auto, xlr_mac_duplex_half,
xlr_mac_duplex_full
} xlr_mac_duplex_t;
typedef enum {
xlr_mac_link_down,
xlr_mac_link_up,
} xlr_mac_link_t;
typedef enum {
xlr_mac_fc_auto, xlr_mac_fc_disabled, xlr_mac_fc_frame,
xlr_mac_fc_collision, xlr_mac_fc_carrier
} xlr_mac_fc_t;
/* static int mac_frin_to_be_sent_thr[8]; */
enum {
PORT_TX,
PORT_TX_COMPLETE,
PORT_STARTQ,
PORT_STOPQ,
PORT_START_DEV_STATE,
PORT_STOP_DEV_STATE,
};
struct rge_softc_stats {
unsigned long rx_frames;
unsigned long tx_frames;
unsigned long rx_packets;
unsigned long rx_bytes;
unsigned long tx_packets;
unsigned long tx_bytes;
};
struct driver_data {
/*
* Let these be the first fields in this structure the structure is
* cacheline aligned when allocated in init_etherdev
*/
struct fr_desc *frin_spill;
struct fr_desc *frout_spill;
union rx_tx_desc *class_0_spill;
union rx_tx_desc *class_1_spill;
union rx_tx_desc *class_2_spill;
union rx_tx_desc *class_3_spill;
int spill_configured;
struct rge_softc *sc; /* pointer to freebsd device soft-pointer */
struct rge_softc_stats stats;
struct mtx lock;
xlr_reg_t *mmio;
xlr_reg_t *mii_mmio;
xlr_reg_t *pcs_mmio;
xlr_reg_t *serdes_mmio;
int txbucket;
int rfrbucket;
int phy_oldbmsr;
int phy_oldanlpar;
int phy_oldk1stsr;
int phy_oldlinkstat;
unsigned char phys_addr[2];
xlr_mac_speed_t speed; /* current speed */
xlr_mac_duplex_t duplex;/* current duplex */
xlr_mac_link_t link; /* current link */
xlr_mac_fc_t flow_ctrl; /* current flow control setting */
int advertising;
int id;
int type;
int mode;
int instance;
int phy_addr;
int frin_to_be_sent[8];
int init_frin_desc;
};
struct rge_softc {
int unit;
int irq;
unsigned char dev_addr[6];
unsigned long base_addr;
unsigned long mem_end;
struct ifnet *rge_ifp;/* interface info */
device_t rge_dev;
int mtu;
int flags;
struct driver_data priv;
struct mtx rge_mtx;
device_t rge_miibus;
struct mii_data rge_mii;/* MII/media information */
bus_space_handle_t rge_bhandle;
bus_space_tag_t rge_btag;
void *rge_intrhand;
struct resource rge_irq;
struct resource *rge_res;
struct ifmedia rge_ifmedia; /* TBI media info */
int rge_if_flags;
int rge_link; /* link state */
int rge_link_evt; /* pending link event */
struct callout rge_stat_ch;
void (*xmit) (struct ifnet *);
void (*stop) (struct rge_softc *);
int (*ioctl) (struct ifnet *, u_long, caddr_t);
struct rge_softc_stats *(*get_stats) (struct rge_softc *);
int active;
int link_up;
};
struct size_1_desc {
uint64_t entry0;
};