Mercurial > illumos > illumos-gate
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); }