changeset 9906:bfc3790e8ac6

6818975 nge driver should support MCP79 ethernet 6849324 checking status and packet length in physical ring of descriptors in nge is not atomic on S10
author Winson Wang - Sun Microsystems - Beijing China <Zhen.W@Sun.COM>
date Fri, 19 Jun 2009 18:13:27 +0800
parents 6ec9863bc3c6
children 98086c85a8f7
files usr/src/uts/common/io/nge/nge.h usr/src/uts/common/io/nge/nge_chip.c usr/src/uts/common/io/nge/nge_chip.h usr/src/uts/common/io/nge/nge_rx.c usr/src/uts/common/io/nge/nge_tx.c
diffstat 5 files changed, 16 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/nge/nge.h	Fri Jun 19 14:52:09 2009 +0800
+++ b/usr/src/uts/common/io/nge/nge.h	Fri Jun 19 18:13:27 2009 +0800
@@ -657,7 +657,7 @@
 	void (*txd_fill)(void *, const ddi_dma_cookie_t *, size_t,
 			uint32_t, boolean_t);
 
-	uint32_t (*txd_check)(const void *, size_t *);
+	uint32_t (*txd_check)(const void *);
 };
 
 typedef struct nge_desc_attr nge_desc_attr_t;
@@ -1045,7 +1045,7 @@
 
 extern void nge_sum_txd_fill(void *, const ddi_dma_cookie_t *,
 				size_t, uint32_t, boolean_t);
-extern uint32_t nge_sum_txd_check(const void *, size_t *);
+extern uint32_t nge_sum_txd_check(const void *);
 
 /*
  * DESC MODE 3
@@ -1056,7 +1056,7 @@
 
 extern void nge_hot_txd_fill(void *, const ddi_dma_cookie_t *,
 				size_t, uint32_t, boolean_t);
-extern uint32_t nge_hot_txd_check(const void *, size_t *);
+extern uint32_t nge_hot_txd_check(const void *);
 
 #ifdef __cplusplus
 }
--- a/usr/src/uts/common/io/nge/nge_chip.c	Fri Jun 19 14:52:09 2009 +0800
+++ b/usr/src/uts/common/io/nge/nge_chip.c	Fri Jun 19 18:13:27 2009 +0800
@@ -530,6 +530,7 @@
 		break;
 
 	case DEVICE_ID_MCP77_760:
+	case DEVICE_ID_MCP79_AB0:
 		dev_param_p->msi = B_FALSE;
 		dev_param_p->msi_x = B_FALSE;
 		dev_param_p->vlan = B_FALSE;
@@ -1112,7 +1113,8 @@
 	    ngep->chipinfo.device == DEVICE_ID_MCP55_373 ||
 	    ngep->chipinfo.device == DEVICE_ID_MCP61_3EE ||
 	    ngep->chipinfo.device == DEVICE_ID_MCP61_3EF ||
-	    ngep->chipinfo.device == DEVICE_ID_MCP77_760) {
+	    ngep->chipinfo.device == DEVICE_ID_MCP77_760 ||
+	    ngep->chipinfo.device == DEVICE_ID_MCP79_AB0) {
 
 		pm_cntl2.cntl_val = nge_reg_get32(ngep, NGE_PM_CNTL2);
 		/* bring phy out of coma mode */
--- a/usr/src/uts/common/io/nge/nge_chip.h	Fri Jun 19 14:52:09 2009 +0800
+++ b/usr/src/uts/common/io/nge/nge_chip.h	Fri Jun 19 18:13:27 2009 +0800
@@ -46,6 +46,7 @@
 #define	DEVICE_ID_MCP61_3EE	0x3ee
 #define	DEVICE_ID_MCP61_3EF	0x3ef
 #define	DEVICE_ID_MCP77_760	0x760
+#define	DEVICE_ID_MCP79_AB0	0xab0
 #define	DEVICE_ID_NF3_E6	0xe6
 #define	DEVICE_ID_NF3_DF	0xdf
 
--- a/usr/src/uts/common/io/nge/nge_rx.c	Fri Jun 19 14:52:09 2009 +0800
+++ b/usr/src/uts/common/io/nge/nge_rx.c	Fri Jun 19 18:13:27 2009 +0800
@@ -473,10 +473,8 @@
 	const hot_rx_bd * hrbdp;
 
 	hrbdp = hwd;
-
-	err_flag = hrbdp->cntl_status.cntl_val & ~RXD_BCNT_MSK;
-	*len = hrbdp->cntl_status.status_bits_legacy.bcnt;
-
+	err_flag = hrbdp->cntl_status.cntl_val;
+	*len = err_flag & RXD_BCNT_MSK;
 	return (err_flag);
 }
 
@@ -488,8 +486,7 @@
 
 	hrbdp = hwd;
 
-	err_flag = hrbdp->cntl_status.cntl_val & ~RXD_BCNT_MSK;
-	*len = hrbdp->cntl_status.status_bits.bcnt;
-
+	err_flag = hrbdp->cntl_status.cntl_val;
+	*len = err_flag & RXD_BCNT_MSK;
 	return (err_flag);
 }
--- a/usr/src/uts/common/io/nge/nge_tx.c	Fri Jun 19 14:52:09 2009 +0800
+++ b/usr/src/uts/common/io/nge/nge_tx.c	Fri Jun 19 18:13:27 2009 +0800
@@ -145,7 +145,6 @@
 {
 	int resched;
 	uint32_t stflg;
-	size_t len;
 	uint32_t free;
 	uint32_t slot;
 	uint32_t used;
@@ -202,7 +201,7 @@
 
 		if (ssbdp->flags == HOST_OWN)
 			break;
-		stflg = ngep->desc_attr.txd_check(hw_sbd_p, &len);
+		stflg = ngep->desc_attr.txd_check(hw_sbd_p);
 		if ((stflg & TXD_OWN) != 0)
 			break;
 		DMA_ZERO(ssbdp->desc);
@@ -682,28 +681,24 @@
 }
 
 uint32_t
-nge_hot_txd_check(const void *hwd, size_t *len)
+nge_hot_txd_check(const void *hwd)
 {
 	uint32_t err_flag;
 	const hot_tx_bd * htbdp;
 
 	htbdp = hwd;
-	err_flag = htbdp->control_status.cntl_val & ~TXD_BCNT_MSK;
-
-	*len = htbdp->control_status.status_bits.bcnt;
+	err_flag = htbdp->control_status.cntl_val;
 	return (err_flag);
 }
 
 uint32_t
-nge_sum_txd_check(const void *hwd, size_t *len)
+nge_sum_txd_check(const void *hwd)
 {
 	uint32_t err_flag;
 	const sum_tx_bd * htbdp;
 
 	htbdp = hwd;
-	err_flag = htbdp->control_status.cntl_val & ~TXD_BCNT_MSK;
-
-	*len = htbdp->control_status.status_bits.bcnt;
+	err_flag = htbdp->control_status.cntl_val;
 	return (err_flag);
 }