X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/63b12ffd1bf4012ffb97802ca54a60a3d895903a..4530e52764e0b2206f4bb380c1a7e1bb28621970:/target/linux/atheros-2.6/files/drivers/net/ar2313/ar2313.h diff --git a/target/linux/atheros-2.6/files/drivers/net/ar2313/ar2313.h b/target/linux/atheros-2.6/files/drivers/net/ar2313/ar2313.h index 3606bd7a2..c0b3a4f76 100644 --- a/target/linux/atheros-2.6/files/drivers/net/ar2313/ar2313.h +++ b/target/linux/atheros-2.6/files/drivers/net/ar2313/ar2313.h @@ -3,56 +3,17 @@ #include #include -#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 /* * 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) /* @@ -61,13 +22,13 @@ extern unsigned long mips_machtype; #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 @@ -86,14 +47,53 @@ static inline int tx_space (u32 csm, u32 prd) #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. @@ -105,57 +105,58 @@ struct ar2313_cmd { * 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; @@ -166,7 +167,7 @@ struct ar2313_private /* * 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 @@ -175,17 +176,18 @@ static void ar2313_multicast_list(struct net_device *dev); #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_ */