From: "Steven J. Hill" <sjhill@realitydiluted.com>
To: netdev@vger.kernel.org
Subject: [PATCH] Merge GT/MV642xx Support into MV643xx Driver [3/8]
Date: Wed, 18 Jul 2007 23:51:55 -0500 [thread overview]
Message-ID: <469EEDEB.9020804@realitydiluted.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 118 bytes --]
Add 642xx support to 'drivers/net/mv643xx_eth.h'
Signed-off-by: Steven J. Hill <sjhill1@rockwellcollins.com>
---
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 03-mv643xx-64260-driver-header.patch --]
[-- Type: text/x-patch; name="03-mv643xx-64260-driver-header.patch", Size: 10091 bytes --]
--- linux-2.6.22.1/drivers/net/mv643xx_eth.h 2007-07-11 08:53:06.000000000 -0500
+++ linux-2.6.22.1-rci/drivers/net/mv643xx_eth.h 2007-07-11 09:28:16.000000000 -0500
@@ -14,8 +14,13 @@
/* Checksum offload for Tx works for most packets, but
* fails if previous packet sent did not use hw csum
*/
+#ifdef CONFIG_GT64260
+#undef MV643XX_CHECKSUM_OFFLOAD_TX
+#undef MV643XX_NAPI
+#else
#define MV643XX_CHECKSUM_OFFLOAD_TX
#define MV643XX_NAPI
+#endif
#define MV643XX_TX_FAST_REFILL
#undef MV643XX_COAL
@@ -54,17 +59,31 @@
#define ETH_RX_QUEUES_ENABLED (1 << 0) /* use only Q0 for receive */
#define ETH_TX_QUEUES_ENABLED (1 << 0) /* use only Q0 for transmit */
+#ifdef CONFIG_GT64260
+#define ETH_INT_CAUSE_RX_DONE (ETH_RX_QUEUES_ENABLED << 16)
+#define ETH_INT_CAUSE_RX_ERROR (ETH_RX_QUEUES_ENABLED << 20)
+#define ETH_INT_CAUSE_RX (ETH_INT_CAUSE_RX_DONE | ETH_INT_CAUSE_RX_ERROR)
+#define ETH_INT_UNMASK_ALL 0x30ff010d
+#else
#define ETH_INT_CAUSE_RX_DONE (ETH_RX_QUEUES_ENABLED << 2)
#define ETH_INT_CAUSE_RX_ERROR (ETH_RX_QUEUES_ENABLED << 9)
#define ETH_INT_CAUSE_RX (ETH_INT_CAUSE_RX_DONE | ETH_INT_CAUSE_RX_ERROR)
#define ETH_INT_CAUSE_EXT 0x00000002
#define ETH_INT_UNMASK_ALL (ETH_INT_CAUSE_RX | ETH_INT_CAUSE_EXT)
+#endif
+#ifdef CONFIG_GT64260
+#define ETH_INT_CAUSE_TX_DONE (ETH_TX_QUEUES_ENABLED << 2)
+#define ETH_INT_CAUSE_TX_ERROR (ETH_TX_QUEUES_ENABLED << 10)
+#define ETH_INT_CAUSE_TX (ETH_INT_CAUSE_TX_DONE | ETH_INT_CAUSE_TX_ERROR)
+#define ETH_INT_CAUSE_PHY 0x10000000
+#else
#define ETH_INT_CAUSE_TX_DONE (ETH_TX_QUEUES_ENABLED << 0)
#define ETH_INT_CAUSE_TX_ERROR (ETH_TX_QUEUES_ENABLED << 8)
#define ETH_INT_CAUSE_TX (ETH_INT_CAUSE_TX_DONE | ETH_INT_CAUSE_TX_ERROR)
#define ETH_INT_CAUSE_PHY 0x00010000
#define ETH_INT_UNMASK_ALL_EXT (ETH_INT_CAUSE_TX | ETH_INT_CAUSE_PHY)
+#endif
#define ETH_INT_MASK_ALL 0x00000000
#define ETH_INT_MASK_ALL_EXT 0x00000000
@@ -73,11 +92,42 @@
#define PHY_WAIT_MICRO_SECONDS 10
/* Buffer offset from buffer pointer */
+#ifdef CONFIG_GT64260
+#define RX_BUF_OFFSET 0x4
+#else
#define RX_BUF_OFFSET 0x2
+#endif
/* Gigabit Ethernet Unit Global Registers */
/* MIB Counters register definitions */
+#ifdef CONFIG_GT64260
+#define ETH_MIB_OCTETS_RECEIVED 0x0
+#define ETH_MIB_OCTETS_SENT 0x4
+#define ETH_MIB_FRAMES_RECEIVED 0x8
+#define ETH_MIB_FRAMES_SENT 0xc
+#define ETH_MIB_TOTAL_OCTETS_RECEIVED 0x10
+#define ETH_MIB_TOTAL_FRAMES_RECEIVED 0x14
+#define ETH_MIB_BROADCAST_FRAMES_RECEIVED 0x18
+#define ETH_MIB_MULTICAST_FRAMES_RECEIVED 0x1c
+#define ETH_MIB_BAD_CRC_EVENT 0x20
+#define ETH_MIB_OVERSIZE_RECEIVED 0x24
+#define ETH_MIB_FRAGMENTS_RECEIVED 0x28
+#define ETH_MIB_JABBER_RECEIVED 0x2c
+#define ETH_MIB_COLLISION 0x30
+#define ETH_MIB_LATE_COLLISION 0x34
+#define ETH_MIB_FRAMES_64_OCTETS 0x38
+#define ETH_MIB_FRAMES_65_TO_127_OCTETS 0x3c
+#define ETH_MIB_FRAMES_128_TO_255_OCTETS 0x40
+#define ETH_MIB_FRAMES_256_TO_511_OCTETS 0x44
+#define ETH_MIB_FRAMES_512_TO_1023_OCTETS 0x48
+#define ETH_MIB_FRAMES_1024_TO_MAX_OCTETS 0x4c
+#define ETH_MIB_MAC_RECEIVE_ERROR 0x50
+#define ETH_MIB_DROPPED_FRAMES 0x54
+#define ETH_MIB_MULTICAST_FRAMES_SENT 0x58
+#define ETH_MIB_BROADCAST_FRAMES_SENT 0x5c
+#define ETH_MIB_UNDERSIZE_RECEIVED 0x60
+#else
#define ETH_MIB_GOOD_OCTETS_RECEIVED_LOW 0x0
#define ETH_MIB_GOOD_OCTETS_RECEIVED_HIGH 0x4
#define ETH_MIB_BAD_OCTETS_RECEIVED 0x8
@@ -110,6 +160,7 @@
#define ETH_MIB_BAD_CRC_EVENT 0x74
#define ETH_MIB_COLLISION 0x78
#define ETH_MIB_LATE_COLLISION 0x7c
+#endif
/* Port serial status reg (PSR) */
#define ETH_INTERFACE_PCM 0x00000001
@@ -134,18 +185,35 @@
/* SDMA command status fields macros */
/* Tx & Rx descriptors status */
+#ifdef CONFIG_GT64260
+#define ETH_ERROR_SUMMARY 0x00008000
+#else
#define ETH_ERROR_SUMMARY 0x00000001
+#endif
/* Tx & Rx descriptors command */
#define ETH_BUFFER_OWNED_BY_DMA 0x80000000
/* Tx descriptors status */
+#ifdef CONFIG_GT64260
+#define ETH_LC_ERROR 0x00000020
+#define ETH_UR_ERROR 0x00000040
+#define ETH_RL_ERROR 0x00000100
+#else
#define ETH_LC_ERROR 0
#define ETH_UR_ERROR 0x00000002
#define ETH_RL_ERROR 0x00000004
#define ETH_LLC_SNAP_FORMAT 0x00000200
+#endif
/* Rx descriptors status */
+#ifdef CONFIG_GT64260
+#define ETH_OVERRUN_ERROR 0x00000040
+#define ETH_MAX_FRAME_LENGTH_ERROR 0x00000080
+#define ETH_RX_LAST_DESC 0x00010000
+#define ETH_RX_FIRST_DESC 0x00020000
+#define ETH_RX_ENABLE_INTERRUPT 0x00800000
+#else
#define ETH_OVERRUN_ERROR 0x00000002
#define ETH_MAX_FRAME_LENGTH_ERROR 0x00000004
#define ETH_RESOURCE_ERROR 0x00000006
@@ -161,11 +229,19 @@
#define ETH_UNKNOWN_DESTINATION_ADDR 0x10000000
#define ETH_RX_ENABLE_INTERRUPT 0x20000000
#define ETH_LAYER_4_CHECKSUM_OK 0x40000000
+#endif
/* Rx descriptors byte count */
#define ETH_FRAME_FRAGMENTED 0x00000004
/* Tx descriptors command */
+#ifdef CONFIG_GT64260
+#define ETH_ZERO_PADDING 0x00040000
+#define ETH_TX_LAST_DESC 0x00010000
+#define ETH_TX_FIRST_DESC 0x00020000
+#define ETH_GEN_CRC 0x00400000
+#define ETH_TX_ENABLE_INTERRUPT 0x00800000
+#else
#define ETH_LAYER_4_CHECKSUM_FIRST_DESC 0x00000400
#define ETH_FRAME_SET_TO_VLAN 0x00008000
#define ETH_UDP_FRAME 0x00010000
@@ -177,6 +253,7 @@
#define ETH_GEN_CRC 0x00400000
#define ETH_TX_ENABLE_INTERRUPT 0x00800000
#define ETH_AUTO_MODE 0x40000000
+#endif
#define ETH_TX_IHL_SHIFT 11
@@ -204,11 +281,27 @@
*/
#if defined(__BIG_ENDIAN)
struct eth_rx_desc {
+# ifdef CONFIG_GT64260
+ u16 buf_size; /* Buffer size */
+ u16 byte_cnt; /* Descriptor buffer byte count */
+ u32 cmd_sts; /* Descriptor command status */
+ u32 next_desc_ptr; /* Next descriptor pointer */
+ u32 buf_ptr; /* Descriptor buffer pointer */
+
+ /*
+ * Force sizeof(gt64260enetDMAdescriptor) == sizeof(cacheline)
+ * Not yet sure exactly why this is necessary but the GT64260-B
+ * part apparently has (yet another) bug that shows itself without
+ * this padding. The symptom is that all Enet comms simply stop.
+ */
+ u32 cachelineSizePadding[4];
+# else
u16 byte_cnt; /* Descriptor buffer byte count */
u16 buf_size; /* Buffer size */
u32 cmd_sts; /* Descriptor command status */
u32 next_desc_ptr; /* Next descriptor pointer */
u32 buf_ptr; /* Descriptor buffer pointer */
+# endif
};
struct eth_tx_desc {
@@ -217,15 +310,32 @@
u32 cmd_sts; /* Command/status field */
u32 next_desc_ptr; /* Pointer to next descriptor */
u32 buf_ptr; /* pointer to buffer for this descriptor*/
+# ifdef CONFIG_GT64260
+ /*
+ * Force sizeof(gt64260enetDMAdescriptor) == sizeof(cacheline)
+ * Not yet sure exactly why this is necessary but the GT64260-B
+ * part apparently has (yet another) bug that shows itself without
+ * this padding. The symptom is that all Enet comms simply stop.
+ */
+ u32 cachelineSizePadding[4];
+# endif
};
#elif defined(__LITTLE_ENDIAN)
struct eth_rx_desc {
+# ifdef CONFIG_GT64260
+ u32 cmd_sts; /* Descriptor command status */
+ u16 byte_cnt; /* Descriptor buffer byte count */
+ u16 buf_size; /* Buffer size */
+ u32 buf_ptr; /* Descriptor buffer pointer */
+ u32 next_desc_ptr; /* Next descriptor pointer */
+# else
u32 cmd_sts; /* Descriptor command status */
u16 buf_size; /* Buffer size */
u16 byte_cnt; /* Descriptor buffer byte count */
u32 buf_ptr; /* Descriptor buffer pointer */
u32 next_desc_ptr; /* Next descriptor pointer */
+# endif
};
struct eth_tx_desc {
@@ -249,8 +359,53 @@
struct sk_buff *return_info; /* User resource return information */
};
+#ifdef CONFIG_GT64260
+struct eth_hash_table_entry {
+ u32 hi;
+ u32 lo;
+};
+
+#define MAC_ENTRY_SIZE sizeof(struct eth_hash_table_entry)
+
+/* Cache helper macros */
+#define flush_dcache_addr_size(addr, length) \
+ flush_dcache_range((u32) addr, (((u32) addr) + length))
+
+#define invalidate_dcache_addr_size(addr, length) \
+ invalidate_dcache_range((u32) addr, (((u32) addr) + length))
+#endif
+
/* Ethernet port specific information */
+#ifdef CONFIG_GT64260
+struct gt64260_mib_counters {
+ u32 good_octets_received;
+ u32 good_octets_sent;
+ u32 good_frames_received;
+ u32 good_frames_sent;
+ u32 total_octets_received;
+ u32 total_frames_received;
+ u32 broadcast_frames_received;
+ u32 multicast_frames_received;
+ u32 bad_crc_event;
+ u32 oversize_received;
+ u32 fragments_received;
+ u32 jabber_received;
+ u32 collision;
+ u32 late_collision;
+ u32 frames_64_octets;
+ u32 frames_65_to_127_octets;
+ u32 frames_128_to_255_octets;
+ u32 frames_256_to_511_octets;
+ u32 frames_512_to_1023_octets;
+ u32 frames_1024_to_max_octets;
+ u32 mac_receive_error;
+ u32 dropped_frames;
+ u32 multicast_frames_sent;
+ u32 broadcast_frames_sent;
+ u32 undersize_received;
+};
+#else
struct mv643xx_mib_counters {
u64 good_octets_received;
u32 bad_octets_received;
@@ -283,6 +438,7 @@
u32 collision;
u32 late_collision;
};
+#endif
struct mv643xx_private {
int port_num; /* User Ethernet port number */
@@ -294,7 +450,7 @@
int rx_resource_err; /* Rx ring resource error flag */
- /* Tx/Rx rings managment indexes fields. For driver use */
+ /* Tx/Rx rings management indexes fields. For driver use */
/* Next available and first returning Rx resource */
int rx_curr_desc_q, rx_used_desc_q;
@@ -319,7 +475,14 @@
struct work_struct tx_timeout_task;
struct net_device_stats stats;
+#ifdef CONFIG_GT64260
+ struct gt64260_mib_counters mib_counters;
+ struct eth_hash_table_entry *eth_hash_table;
+ dma_addr_t eth_hash_table_dma;
+ int eth_hash_table_size;
+#else
struct mv643xx_mib_counters mib_counters;
+#endif
spinlock_t lock;
/* Size of Tx Ring per queue */
int tx_ring_size;
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 254 bytes --]
reply other threads:[~2007-07-19 5:24 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=469EEDEB.9020804@realitydiluted.com \
--to=sjhill@realitydiluted.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).