#include <linux/autoconf.h>
#include <asm/bootinfo.h>
-#include "platform.h"
-
-extern unsigned long mips_machtype;
-
-#undef ETHERNET_BASE
-#define ETHERNET_BASE ar_eth_base
-#define ETHERNET_SIZE 0x00100000
-#define ETHERNET_MACS 2
-
-#undef DMA_BASE
-#define DMA_BASE ar_dma_base
-#define DMA_SIZE 0x00100000
-
+#include <ar531x_platform.h>
/*
* probe link timer - 5 secs
*/
-#define LINK_TIMER (5*HZ)
-
-/*
- * Interrupt register base address
- */
-#define INTERRUPT_BASE PHYS_TO_K1(ar_int_base)
-
-/*
- * Reset Register
- */
-#define AR531X_RESET (AR531X_RESETTMR + 0x0020)
-#define RESET_SYSTEM 0x00000001 /* cold reset full system */
-#define RESET_PROC 0x00000002 /* cold reset MIPS core */
-#define RESET_WLAN0 0x00000004 /* cold reset WLAN MAC and BB */
-#define RESET_EPHY0 0x00000008 /* cold reset ENET0 phy */
-#define RESET_EPHY1 0x00000010 /* cold reset ENET1 phy */
-#define RESET_ENET0 0x00000020 /* cold reset ENET0 mac */
-#define RESET_ENET1 0x00000040 /* cold reset ENET1 mac */
+#define LINK_TIMER (5*HZ)
#define IS_DMA_TX_INT(X) (((X) & (DMA_STATUS_TI)) != 0)
#define IS_DMA_RX_INT(X) (((X) & (DMA_STATUS_RI)) != 0)
#define IS_DRIVER_OWNED(X) (((X) & (DMA_TX_OWN)) == 0)
-#ifndef K1_TO_PHYS
-// hack
-#define K1_TO_PHYS(x) (((unsigned int)(x)) & 0x1FFFFFFF) /* kseg1 to physical */
-#endif
-
-#ifndef PHYS_TO_K1
-// hack
-#define PHYS_TO_K1(x) (((unsigned int)(x)) | 0xA0000000) /* physical to kseg1 */
-#endif
-
#define AR2313_TX_TIMEOUT (HZ/4)
/*
#define DSC_RING_ENTRIES_SIZE (AR2313_DESCR_ENTRIES * sizeof(struct desc))
#define DSC_NEXT(idx) ((idx + 1) & (AR2313_DESCR_ENTRIES - 1))
-static inline int tx_space (u32 csm, u32 prd)
+static inline int tx_space(u32 csm, u32 prd)
{
return (csm - prd - 1) & (AR2313_DESCR_ENTRIES - 1);
}
#if MAX_SKB_FRAGS
-#define TX_RESERVED (MAX_SKB_FRAGS+1) /* +1 for message header */
+#define TX_RESERVED (MAX_SKB_FRAGS+1) /* +1 for message header */
#define tx_ring_full(csm, prd) (tx_space(csm, prd) <= TX_RESERVED)
#else
#define tx_ring_full 0
#define AR2313_SYNC 12
-struct ar2313_cmd {
- u32 cmd;
- u32 address; /* virtual address of image */
- u32 length; /* size of image to download */
- u32 mailbox; /* mailbox to get/set */
- u32 data[2]; /* contents of mailbox to read/write */
-};
-
+//
+// New Combo structure for Both Eth0 AND eth1
+//
+typedef struct {
+ volatile unsigned int mac_control; /* 0x00 */
+ volatile unsigned int mac_addr[2]; /* 0x04 - 0x08 */
+ volatile unsigned int mcast_table[2]; /* 0x0c - 0x10 */
+ volatile unsigned int mii_addr; /* 0x14 */
+ volatile unsigned int mii_data; /* 0x18 */
+ volatile unsigned int flow_control; /* 0x1c */
+ volatile unsigned int vlan_tag; /* 0x20 */
+ volatile unsigned int pad[7]; /* 0x24 - 0x3c */
+ volatile unsigned int ucast_table[8]; /* 0x40-0x5c */
+
+} ETHERNET_STRUCT;
+
+/********************************************************************
+ * Interrupt controller
+ ********************************************************************/
+
+typedef struct {
+ volatile unsigned int wdog_control; /* 0x08 */
+ volatile unsigned int wdog_timer; /* 0x0c */
+ volatile unsigned int misc_status; /* 0x10 */
+ volatile unsigned int misc_mask; /* 0x14 */
+ volatile unsigned int global_status; /* 0x18 */
+ volatile unsigned int reserved; /* 0x1c */
+ volatile unsigned int reset_control; /* 0x20 */
+} INTERRUPT;
+
+/********************************************************************
+ * DMA controller
+ ********************************************************************/
+typedef struct {
+ volatile unsigned int bus_mode; /* 0x00 (CSR0) */
+ volatile unsigned int xmt_poll; /* 0x04 (CSR1) */
+ volatile unsigned int rcv_poll; /* 0x08 (CSR2) */
+ volatile unsigned int rcv_base; /* 0x0c (CSR3) */
+ volatile unsigned int xmt_base; /* 0x10 (CSR4) */
+ volatile unsigned int status; /* 0x14 (CSR5) */
+ volatile unsigned int control; /* 0x18 (CSR6) */
+ volatile unsigned int intr_ena; /* 0x1c (CSR7) */
+ volatile unsigned int rcv_missed; /* 0x20 (CSR8) */
+ volatile unsigned int reserved[11]; /* 0x24-0x4c (CSR9-19) */
+ volatile unsigned int cur_tx_buf_addr; /* 0x50 (CSR20) */
+ volatile unsigned int cur_rx_buf_addr; /* 0x50 (CSR21) */
+} DMA;
/*
* Struct private for the Sibyte.
* Frequently accessed variables are put at the beginning of the
* struct to help the compiler generate better/shorter code.
*/
-struct ar2313_private
-{
+struct ar2313_private {
struct net_device *dev;
- int version;
- u32 mb[2];
-
- volatile ETHERNET_STRUCT *eth_regs;
- volatile DMA *dma_regs;
- volatile u32 *int_regs;
+ int version;
+ u32 mb[2];
+
+ volatile ETHERNET_STRUCT *phy_regs;
+ volatile ETHERNET_STRUCT *eth_regs;
+ volatile DMA *dma_regs;
+ volatile u32 *int_regs;
+ struct ar531x_eth *cfg;
- spinlock_t lock; /* Serialise access to device */
+ spinlock_t lock; /* Serialise access to device */
- /*
+ /*
* RX and TX descriptors, must be adjacent
*/
- ar2313_descr_t *rx_ring;
- ar2313_descr_t *tx_ring;
+ ar2313_descr_t *rx_ring;
+ ar2313_descr_t *tx_ring;
- struct sk_buff **rx_skb;
- struct sk_buff **tx_skb;
+ struct sk_buff **rx_skb;
+ struct sk_buff **tx_skb;
- /*
+ /*
* RX elements
*/
- u32 rx_skbprd;
- u32 cur_rx;
+ u32 rx_skbprd;
+ u32 cur_rx;
- /*
+ /*
* TX elements
*/
- u32 tx_prd;
- u32 tx_csm;
+ u32 tx_prd;
+ u32 tx_csm;
- /*
+ /*
* Misc elements
*/
- int board_idx;
- char name[48];
+ int board_idx;
+ char name[48];
struct net_device_stats stats;
struct {
- u32 address;
- u32 length;
- char *mapping;
+ u32 address;
+ u32 length;
+ char *mapping;
} desc;
struct timer_list link_timer;
- unsigned short phy; /* merlot phy = 1, samsung phy = 0x1f */
+ unsigned short phy; /* merlot phy = 1, samsung phy = 0x1f */
unsigned short mac;
- unsigned short link; /* 0 - link down, 1 - link up */
+ unsigned short link; /* 0 - link down, 1 - link up */
u16 phyData;
struct tasklet_struct rx_tasklet;
/*
* Prototypes
*/
-static int ar2313_init(struct net_device *dev);
+static int ar2313_init(struct net_device *dev);
#ifdef TX_TIMEOUT
static void ar2313_tx_timeout(struct net_device *dev);
#endif
#endif
static int ar2313_restart(struct net_device *dev);
#if DEBUG
-static void ar2313_dump_regs(struct net_device *dev);
+static void ar2313_dump_regs(struct net_device *dev);
#endif
static void ar2313_load_rx_ring(struct net_device *dev, int bufs);
static irqreturn_t ar2313_interrupt(int irq, void *dev_id);
-static int ar2313_open(struct net_device *dev);
-static int ar2313_start_xmit(struct sk_buff *skb, struct net_device *dev);
-static int ar2313_close(struct net_device *dev);
-static int ar2313_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
+static int ar2313_open(struct net_device *dev);
+static int ar2313_start_xmit(struct sk_buff *skb, struct net_device *dev);
+static int ar2313_close(struct net_device *dev);
+static int ar2313_ioctl(struct net_device *dev, struct ifreq *ifr,
+ int cmd);
static void ar2313_init_cleanup(struct net_device *dev);
-static int ar2313_setup_timer(struct net_device *dev);
+static int ar2313_setup_timer(struct net_device *dev);
static void ar2313_link_timer_fn(unsigned long data);
static void ar2313_check_link(struct net_device *dev);
static struct net_device_stats *ar2313_get_stats(struct net_device *dev);
-#endif /* _AR2313_H_ */
+#endif /* _AR2313_H_ */