net: drop !NET_MULTI bcm570x/tigon3 drivers
These drivers have never been converted to NET_MULTI, and they are only used by one board (BMW). So drop the drivers until someone feels like rewriting them for NET_MULTI support. Rather than punting the BMW board completely, just disable net support in its board config. Seems to build fine without it. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
1285a2808a
commit
029cf6b4b2
@ -1,46 +0,0 @@
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* History: */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#if INCLUDE_5701_AX_FIX
|
||||
|
||||
#include "bcm570x_mm.h"
|
||||
#include "5701rls.h"
|
||||
|
||||
LM_STATUS LM_LoadRlsFirmware(PLM_DEVICE_BLOCK pDevice)
|
||||
{
|
||||
T3_FWIMG_INFO FwImgInfo;
|
||||
|
||||
FwImgInfo.StartAddress = t3FwStartAddr;
|
||||
FwImgInfo.Text.Buffer = (PLM_UINT8)t3FwText;
|
||||
FwImgInfo.Text.Offset = t3FwTextAddr;
|
||||
FwImgInfo.Text.Length = t3FwTextLen;
|
||||
FwImgInfo.ROnlyData.Buffer = (PLM_UINT8)t3FwRodata;
|
||||
FwImgInfo.ROnlyData.Offset = t3FwRodataAddr;
|
||||
FwImgInfo.ROnlyData.Length = t3FwRodataLen;
|
||||
FwImgInfo.Data.Buffer = (PLM_UINT8)t3FwData;
|
||||
FwImgInfo.Data.Offset = t3FwDataAddr;
|
||||
FwImgInfo.Data.Length = t3FwDataLen;
|
||||
|
||||
if (LM_LoadFirmware(pDevice,
|
||||
&FwImgInfo,
|
||||
T3_RX_CPU_ID | T3_TX_CPU_ID,
|
||||
T3_RX_CPU_ID) != LM_STATUS_SUCCESS)
|
||||
{
|
||||
return LM_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
return LM_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#endif /* INCLUDE_5701_AX_FIX */
|
@ -1,198 +0,0 @@
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* History: */
|
||||
/******************************************************************************/
|
||||
|
||||
typedef unsigned long U32;
|
||||
int t3FwReleaseMajor = 0x0;
|
||||
int t3FwReleaseMinor = 0x0;
|
||||
int t3FwReleaseFix = 0x0;
|
||||
U32 t3FwStartAddr = 0x08000000;
|
||||
U32 t3FwTextAddr = 0x08000000;
|
||||
int t3FwTextLen = 0x9c0;
|
||||
U32 t3FwRodataAddr = 0x080009c0;
|
||||
int t3FwRodataLen = 0x60;
|
||||
U32 t3FwDataAddr = 0x08000a40;
|
||||
int t3FwDataLen = 0x20;
|
||||
U32 t3FwSbssAddr = 0x08000a60;
|
||||
int t3FwSbssLen = 0xc;
|
||||
U32 t3FwBssAddr = 0x08000a70;
|
||||
int t3FwBssLen = 0x10;
|
||||
U32 t3FwText[(0x9c0/4) + 1] = {
|
||||
0x0,
|
||||
0x10000003, 0x0, 0xd, 0xd,
|
||||
0x3c1d0800, 0x37bd3ffc, 0x3a0f021, 0x3c100800,
|
||||
0x26100000, 0xe000018, 0x0, 0xd,
|
||||
0x3c1d0800, 0x37bd3ffc, 0x3a0f021, 0x3c100800,
|
||||
0x26100034, 0xe00021c, 0x0, 0xd,
|
||||
0x0, 0x0, 0x0, 0x27bdffe0,
|
||||
0x3c1cc000, 0xafbf0018, 0xaf80680c, 0xe00004c,
|
||||
0x241b2105, 0x97850000, 0x97870002, 0x9782002c,
|
||||
0x9783002e, 0x3c040800, 0x248409c0, 0xafa00014,
|
||||
0x21400, 0x621825, 0x52c00, 0xafa30010,
|
||||
0x8f860010, 0xe52825, 0xe000060, 0x24070102,
|
||||
0x3c02ac00, 0x34420100, 0x3c03ac01, 0x34630100,
|
||||
0xaf820490, 0x3c02ffff, 0xaf820494, 0xaf830498,
|
||||
0xaf82049c, 0x24020001, 0xaf825ce0, 0xe00003f,
|
||||
0xaf825d00, 0xe000140, 0x0, 0x8fbf0018,
|
||||
0x3e00008, 0x27bd0020, 0x2402ffff, 0xaf825404,
|
||||
0x8f835400, 0x34630400, 0xaf835400, 0xaf825404,
|
||||
0x3c020800, 0x24420034, 0xaf82541c, 0x3e00008,
|
||||
0xaf805400, 0x0, 0x0, 0x3c020800,
|
||||
0x34423000, 0x3c030800, 0x34633000, 0x3c040800,
|
||||
0x348437ff, 0x3c010800, 0xac220a64, 0x24020040,
|
||||
0x3c010800, 0xac220a68, 0x3c010800, 0xac200a60,
|
||||
0xac600000, 0x24630004, 0x83102b, 0x5040fffd,
|
||||
0xac600000, 0x3e00008, 0x0, 0x804821,
|
||||
0x8faa0010, 0x3c020800, 0x8c420a60, 0x3c040800,
|
||||
0x8c840a68, 0x8fab0014, 0x24430001, 0x44102b,
|
||||
0x3c010800, 0xac230a60, 0x14400003, 0x4021,
|
||||
0x3c010800, 0xac200a60, 0x3c020800, 0x8c420a60,
|
||||
0x3c030800, 0x8c630a64, 0x91240000, 0x21140,
|
||||
0x431021, 0x481021, 0x25080001, 0xa0440000,
|
||||
0x29020008, 0x1440fff4, 0x25290001, 0x3c020800,
|
||||
0x8c420a60, 0x3c030800, 0x8c630a64, 0x8f84680c,
|
||||
0x21140, 0x431021, 0xac440008, 0xac45000c,
|
||||
0xac460010, 0xac470014, 0xac4a0018, 0x3e00008,
|
||||
0xac4b001c, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x2000008,
|
||||
0x0, 0xa0001e3, 0x3c0a0001, 0xa0001e3,
|
||||
0x3c0a0002, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x3c0a0007, 0xa0001e3, 0x3c0a0008, 0xa0001e3,
|
||||
0x3c0a0009, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x3c0a000b, 0xa0001e3,
|
||||
0x3c0a000c, 0xa0001e3, 0x3c0a000d, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x3c0a000e, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x0, 0xa0001e3,
|
||||
0x0, 0xa0001e3, 0x3c0a0013, 0xa0001e3,
|
||||
0x3c0a0014, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x27bdffe0,
|
||||
0x1821, 0x1021, 0xafbf0018, 0xafb10014,
|
||||
0xafb00010, 0x3c010800, 0x220821, 0xac200a70,
|
||||
0x3c010800, 0x220821, 0xac200a74, 0x3c010800,
|
||||
0x220821, 0xac200a78, 0x24630001, 0x1860fff5,
|
||||
0x2442000c, 0x24110001, 0x8f906810, 0x32020004,
|
||||
0x14400005, 0x24040001, 0x3c020800, 0x8c420a78,
|
||||
0x18400003, 0x2021, 0xe000182, 0x0,
|
||||
0x32020001, 0x10400003, 0x0, 0xe000169,
|
||||
0x0, 0xa000153, 0xaf915028, 0x8fbf0018,
|
||||
0x8fb10014, 0x8fb00010, 0x3e00008, 0x27bd0020,
|
||||
0x3c050800, 0x8ca50a70, 0x3c060800, 0x8cc60a80,
|
||||
0x3c070800, 0x8ce70a78, 0x27bdffe0, 0x3c040800,
|
||||
0x248409d0, 0xafbf0018, 0xafa00010, 0xe000060,
|
||||
0xafa00014, 0xe00017b, 0x2021, 0x8fbf0018,
|
||||
0x3e00008, 0x27bd0020, 0x24020001, 0x8f836810,
|
||||
0x821004, 0x21027, 0x621824, 0x3e00008,
|
||||
0xaf836810, 0x27bdffd8, 0xafbf0024, 0x1080002e,
|
||||
0xafb00020, 0x8f825cec, 0xafa20018, 0x8f825cec,
|
||||
0x3c100800, 0x26100a78, 0xafa2001c, 0x34028000,
|
||||
0xaf825cec, 0x8e020000, 0x18400016, 0x0,
|
||||
0x3c020800, 0x94420a74, 0x8fa3001c, 0x221c0,
|
||||
0xac830004, 0x8fa2001c, 0x3c010800, 0xe000201,
|
||||
0xac220a74, 0x10400005, 0x0, 0x8e020000,
|
||||
0x24420001, 0xa0001df, 0xae020000, 0x3c020800,
|
||||
0x8c420a70, 0x21c02, 0x321c0, 0xa0001c5,
|
||||
0xafa2001c, 0xe000201, 0x0, 0x1040001f,
|
||||
0x0, 0x8e020000, 0x8fa3001c, 0x24420001,
|
||||
0x3c010800, 0xac230a70, 0x3c010800, 0xac230a74,
|
||||
0xa0001df, 0xae020000, 0x3c100800, 0x26100a78,
|
||||
0x8e020000, 0x18400028, 0x0, 0xe000201,
|
||||
0x0, 0x14400024, 0x0, 0x8e020000,
|
||||
0x3c030800, 0x8c630a70, 0x2442ffff, 0xafa3001c,
|
||||
0x18400006, 0xae020000, 0x31402, 0x221c0,
|
||||
0x8c820004, 0x3c010800, 0xac220a70, 0x97a2001e,
|
||||
0x2442ff00, 0x2c420300, 0x1440000b, 0x24024000,
|
||||
0x3c040800, 0x248409dc, 0xafa00010, 0xafa00014,
|
||||
0x8fa6001c, 0x24050008, 0xe000060, 0x3821,
|
||||
0xa0001df, 0x0, 0xaf825cf8, 0x3c020800,
|
||||
0x8c420a40, 0x8fa3001c, 0x24420001, 0xaf835cf8,
|
||||
0x3c010800, 0xac220a40, 0x8fbf0024, 0x8fb00020,
|
||||
0x3e00008, 0x27bd0028, 0x27bdffe0, 0x3c040800,
|
||||
0x248409e8, 0x2821, 0x3021, 0x3821,
|
||||
0xafbf0018, 0xafa00010, 0xe000060, 0xafa00014,
|
||||
0x8fbf0018, 0x3e00008, 0x27bd0020, 0x8f82680c,
|
||||
0x8f85680c, 0x21827, 0x3182b, 0x31823,
|
||||
0x431024, 0x441021, 0xa2282b, 0x10a00006,
|
||||
0x0, 0x401821, 0x8f82680c, 0x43102b,
|
||||
0x1440fffd, 0x0, 0x3e00008, 0x0,
|
||||
0x3c040800, 0x8c840000, 0x3c030800, 0x8c630a40,
|
||||
0x64102b, 0x54400002, 0x831023, 0x641023,
|
||||
0x2c420008, 0x3e00008, 0x38420001, 0x27bdffe0,
|
||||
0x802821, 0x3c040800, 0x24840a00, 0x3021,
|
||||
0x3821, 0xafbf0018, 0xafa00010, 0xe000060,
|
||||
0xafa00014, 0xa000216, 0x0, 0x8fbf0018,
|
||||
0x3e00008, 0x27bd0020, 0x0, 0x27bdffe0,
|
||||
0x3c1cc000, 0xafbf0018, 0xe00004c, 0xaf80680c,
|
||||
0x3c040800, 0x24840a10, 0x3802821, 0x3021,
|
||||
0x3821, 0xafa00010, 0xe000060, 0xafa00014,
|
||||
0x2402ffff, 0xaf825404, 0x3c0200aa, 0xe000234,
|
||||
0xaf825434, 0x8fbf0018, 0x3e00008, 0x27bd0020,
|
||||
0x0, 0x0, 0x0, 0x27bdffe8,
|
||||
0xafb00010, 0x24100001, 0xafbf0014, 0x3c01c003,
|
||||
0xac200000, 0x8f826810, 0x30422000, 0x10400003,
|
||||
0x0, 0xe000246, 0x0, 0xa00023a,
|
||||
0xaf905428, 0x8fbf0014, 0x8fb00010, 0x3e00008,
|
||||
0x27bd0018, 0x27bdfff8, 0x8f845d0c, 0x3c0200ff,
|
||||
0x3c030800, 0x8c630a50, 0x3442fff8, 0x821024,
|
||||
0x1043001e, 0x3c0500ff, 0x34a5fff8, 0x3c06c003,
|
||||
0x3c074000, 0x851824, 0x8c620010, 0x3c010800,
|
||||
0xac230a50, 0x30420008, 0x10400005, 0x871025,
|
||||
0x8cc20000, 0x24420001, 0xacc20000, 0x871025,
|
||||
0xaf825d0c, 0x8fa20000, 0x24420001, 0xafa20000,
|
||||
0x8fa20000, 0x8fa20000, 0x24420001, 0xafa20000,
|
||||
0x8fa20000, 0x8f845d0c, 0x3c030800, 0x8c630a50,
|
||||
0x851024, 0x1443ffe8, 0x851824, 0x27bd0008,
|
||||
0x3e00008, 0x0, 0x0, 0x0 };
|
||||
U32 t3FwRodata[(0x60/4) + 1] = {
|
||||
0x35373031, 0x726c7341, 0x0,
|
||||
0x0, 0x53774576, 0x656e7430, 0x0,
|
||||
0x726c7045, 0x76656e74, 0x31000000, 0x556e6b6e,
|
||||
0x45766e74, 0x0, 0x0, 0x0,
|
||||
0x0, 0x66617461, 0x6c457272, 0x0,
|
||||
0x0, 0x4d61696e, 0x43707542, 0x0,
|
||||
0x0, 0x0 };
|
||||
U32 t3FwData[(0x20/4) + 1] = {
|
||||
0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0 };
|
@ -31,9 +31,6 @@ COBJS-$(CONFIG_ALTERA_TSE) += altera_tse.o
|
||||
COBJS-$(CONFIG_ARMADA100_FEC) += armada100_fec.o
|
||||
COBJS-$(CONFIG_DRIVER_AT91EMAC) += at91_emac.o
|
||||
COBJS-$(CONFIG_DRIVER_AX88180) += ax88180.o
|
||||
COBJS-$(CONFIG_BCM570x) += bcm570x.o
|
||||
COBJS-$(CONFIG_BCM570x) += bcm570x_autoneg.o
|
||||
COBJS-$(CONFIG_BCM570x) += 5701rls.o
|
||||
COBJS-$(CONFIG_BFIN_MAC) += bfin_mac.o
|
||||
COBJS-$(CONFIG_CS8900) += cs8900.o
|
||||
COBJS-$(CONFIG_TULIP) += dc2114x.o
|
||||
@ -76,9 +73,6 @@ COBJS-$(CONFIG_DRIVER_S3C4510_ETH) += s3c4510b_eth.o
|
||||
COBJS-$(CONFIG_SH_ETHER) += sh_eth.o
|
||||
COBJS-$(CONFIG_SMC91111) += smc91111.o
|
||||
COBJS-$(CONFIG_SMC911X) += smc911x.o
|
||||
COBJS-$(CONFIG_TIGON3) += tigon3.o
|
||||
COBJS-$(CONFIG_TIGON3) += bcm570x_autoneg.o
|
||||
COBJS-$(CONFIG_TIGON3) += 5701rls.o
|
||||
COBJS-$(CONFIG_DRIVER_TI_EMAC) += davinci_emac.o
|
||||
COBJS-$(CONFIG_TSEC_ENET) += tsec.o fsl_mdio.o
|
||||
COBJS-$(CONFIG_FMAN_ENET) += fsl_mdio.o
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,439 +0,0 @@
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2001 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* History: */
|
||||
/******************************************************************************/
|
||||
#if !defined(CONFIG_NET_MULTI)
|
||||
#if INCLUDE_TBI_SUPPORT
|
||||
#include "bcm570x_autoneg.h"
|
||||
#include "bcm570x_mm.h"
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
void
|
||||
MM_AnTxConfig(
|
||||
PAN_STATE_INFO pAnInfo)
|
||||
{
|
||||
PLM_DEVICE_BLOCK pDevice;
|
||||
|
||||
pDevice = (PLM_DEVICE_BLOCK) pAnInfo->pContext;
|
||||
|
||||
REG_WR(pDevice, MacCtrl.TxAutoNeg, (LM_UINT32) pAnInfo->TxConfig.AsUSHORT);
|
||||
|
||||
pDevice->MacMode |= MAC_MODE_SEND_CONFIGS;
|
||||
REG_WR(pDevice, MacCtrl.Mode, pDevice->MacMode);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
void
|
||||
MM_AnTxIdle(
|
||||
PAN_STATE_INFO pAnInfo)
|
||||
{
|
||||
PLM_DEVICE_BLOCK pDevice;
|
||||
|
||||
pDevice = (PLM_DEVICE_BLOCK) pAnInfo->pContext;
|
||||
|
||||
pDevice->MacMode &= ~MAC_MODE_SEND_CONFIGS;
|
||||
REG_WR(pDevice, MacCtrl.Mode, pDevice->MacMode);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
char
|
||||
MM_AnRxConfig(
|
||||
PAN_STATE_INFO pAnInfo,
|
||||
unsigned short *pRxConfig)
|
||||
{
|
||||
PLM_DEVICE_BLOCK pDevice;
|
||||
LM_UINT32 Value32;
|
||||
char Retcode;
|
||||
|
||||
Retcode = AN_FALSE;
|
||||
|
||||
pDevice = (PLM_DEVICE_BLOCK) pAnInfo->pContext;
|
||||
|
||||
Value32 = REG_RD(pDevice, MacCtrl.Status);
|
||||
if(Value32 & MAC_STATUS_RECEIVING_CFG)
|
||||
{
|
||||
Value32 = REG_RD(pDevice, MacCtrl.RxAutoNeg);
|
||||
*pRxConfig = (unsigned short) Value32;
|
||||
|
||||
Retcode = AN_TRUE;
|
||||
}
|
||||
|
||||
return Retcode;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
void
|
||||
AutonegInit(
|
||||
PAN_STATE_INFO pAnInfo)
|
||||
{
|
||||
unsigned long j;
|
||||
|
||||
for(j = 0; j < sizeof(AN_STATE_INFO); j++)
|
||||
{
|
||||
((unsigned char *) pAnInfo)[j] = 0;
|
||||
}
|
||||
|
||||
/* Initialize the default advertisement register. */
|
||||
pAnInfo->mr_adv_full_duplex = 1;
|
||||
pAnInfo->mr_adv_sym_pause = 1;
|
||||
pAnInfo->mr_adv_asym_pause = 1;
|
||||
pAnInfo->mr_an_enable = 1;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
AUTONEG_STATUS
|
||||
Autoneg8023z(
|
||||
PAN_STATE_INFO pAnInfo)
|
||||
{
|
||||
unsigned short RxConfig;
|
||||
unsigned long Delta_us;
|
||||
AUTONEG_STATUS AnRet;
|
||||
|
||||
/* Get the current time. */
|
||||
if(pAnInfo->State == AN_STATE_UNKNOWN)
|
||||
{
|
||||
pAnInfo->RxConfig.AsUSHORT = 0;
|
||||
pAnInfo->CurrentTime_us = 0;
|
||||
pAnInfo->LinkTime_us = 0;
|
||||
pAnInfo->AbilityMatchCfg = 0;
|
||||
pAnInfo->AbilityMatchCnt = 0;
|
||||
pAnInfo->AbilityMatch = AN_FALSE;
|
||||
pAnInfo->IdleMatch = AN_FALSE;
|
||||
pAnInfo->AckMatch = AN_FALSE;
|
||||
}
|
||||
|
||||
/* Increment the timer tick. This function is called every microsecon. */
|
||||
/* pAnInfo->CurrentTime_us++; */
|
||||
|
||||
/* Set the AbilityMatch, IdleMatch, and AckMatch flags if their */
|
||||
/* corresponding conditions are satisfied. */
|
||||
if(MM_AnRxConfig(pAnInfo, &RxConfig))
|
||||
{
|
||||
if(RxConfig != pAnInfo->AbilityMatchCfg)
|
||||
{
|
||||
pAnInfo->AbilityMatchCfg = RxConfig;
|
||||
pAnInfo->AbilityMatch = AN_FALSE;
|
||||
pAnInfo->AbilityMatchCnt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAnInfo->AbilityMatchCnt++;
|
||||
if(pAnInfo->AbilityMatchCnt > 1)
|
||||
{
|
||||
pAnInfo->AbilityMatch = AN_TRUE;
|
||||
pAnInfo->AbilityMatchCfg = RxConfig;
|
||||
}
|
||||
}
|
||||
|
||||
if(RxConfig & AN_CONFIG_ACK)
|
||||
{
|
||||
pAnInfo->AckMatch = AN_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAnInfo->AckMatch = AN_FALSE;
|
||||
}
|
||||
|
||||
pAnInfo->IdleMatch = AN_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAnInfo->IdleMatch = AN_TRUE;
|
||||
|
||||
pAnInfo->AbilityMatchCfg = 0;
|
||||
pAnInfo->AbilityMatchCnt = 0;
|
||||
pAnInfo->AbilityMatch = AN_FALSE;
|
||||
pAnInfo->AckMatch = AN_FALSE;
|
||||
|
||||
RxConfig = 0;
|
||||
}
|
||||
|
||||
/* Save the last Config. */
|
||||
pAnInfo->RxConfig.AsUSHORT = RxConfig;
|
||||
|
||||
/* Default return code. */
|
||||
AnRet = AUTONEG_STATUS_OK;
|
||||
|
||||
/* Autoneg state machine as defined in 802.3z section 37.3.1.5. */
|
||||
switch(pAnInfo->State)
|
||||
{
|
||||
case AN_STATE_UNKNOWN:
|
||||
if(pAnInfo->mr_an_enable || pAnInfo->mr_restart_an)
|
||||
{
|
||||
pAnInfo->CurrentTime_us = 0;
|
||||
pAnInfo->State = AN_STATE_AN_ENABLE;
|
||||
}
|
||||
|
||||
/* Fall through.*/
|
||||
|
||||
case AN_STATE_AN_ENABLE:
|
||||
pAnInfo->mr_an_complete = AN_FALSE;
|
||||
pAnInfo->mr_page_rx = AN_FALSE;
|
||||
|
||||
if(pAnInfo->mr_an_enable)
|
||||
{
|
||||
pAnInfo->LinkTime_us = 0;
|
||||
pAnInfo->AbilityMatchCfg = 0;
|
||||
pAnInfo->AbilityMatchCnt = 0;
|
||||
pAnInfo->AbilityMatch = AN_FALSE;
|
||||
pAnInfo->IdleMatch = AN_FALSE;
|
||||
pAnInfo->AckMatch = AN_FALSE;
|
||||
|
||||
pAnInfo->State = AN_STATE_AN_RESTART_INIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAnInfo->State = AN_STATE_DISABLE_LINK_OK;
|
||||
}
|
||||
break;
|
||||
|
||||
case AN_STATE_AN_RESTART_INIT:
|
||||
pAnInfo->LinkTime_us = pAnInfo->CurrentTime_us;
|
||||
pAnInfo->mr_np_loaded = AN_FALSE;
|
||||
|
||||
pAnInfo->TxConfig.AsUSHORT = 0;
|
||||
MM_AnTxConfig(pAnInfo);
|
||||
|
||||
AnRet = AUTONEG_STATUS_TIMER_ENABLED;
|
||||
|
||||
pAnInfo->State = AN_STATE_AN_RESTART;
|
||||
|
||||
/* Fall through.*/
|
||||
|
||||
case AN_STATE_AN_RESTART:
|
||||
/* Get the current time and compute the delta with the saved */
|
||||
/* link timer. */
|
||||
Delta_us = pAnInfo->CurrentTime_us - pAnInfo->LinkTime_us;
|
||||
if(Delta_us > AN_LINK_TIMER_INTERVAL_US)
|
||||
{
|
||||
pAnInfo->State = AN_STATE_ABILITY_DETECT_INIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
AnRet = AUTONEG_STATUS_TIMER_ENABLED;
|
||||
}
|
||||
break;
|
||||
|
||||
case AN_STATE_DISABLE_LINK_OK:
|
||||
AnRet = AUTONEG_STATUS_DONE;
|
||||
break;
|
||||
|
||||
case AN_STATE_ABILITY_DETECT_INIT:
|
||||
/* Note: in the state diagram, this variable is set to */
|
||||
/* mr_adv_ability<12>. Is this right?. */
|
||||
pAnInfo->mr_toggle_tx = AN_FALSE;
|
||||
|
||||
/* Send the config as advertised in the advertisement register. */
|
||||
pAnInfo->TxConfig.AsUSHORT = 0;
|
||||
pAnInfo->TxConfig.D5_FD = pAnInfo->mr_adv_full_duplex;
|
||||
pAnInfo->TxConfig.D6_HD = pAnInfo->mr_adv_half_duplex;
|
||||
pAnInfo->TxConfig.D7_PS1 = pAnInfo->mr_adv_sym_pause;
|
||||
pAnInfo->TxConfig.D8_PS2 = pAnInfo->mr_adv_asym_pause;
|
||||
pAnInfo->TxConfig.D12_RF1 = pAnInfo->mr_adv_remote_fault1;
|
||||
pAnInfo->TxConfig.D13_RF2 = pAnInfo->mr_adv_remote_fault2;
|
||||
pAnInfo->TxConfig.D15_NP = pAnInfo->mr_adv_next_page;
|
||||
|
||||
MM_AnTxConfig(pAnInfo);
|
||||
|
||||
pAnInfo->State = AN_STATE_ABILITY_DETECT;
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_ABILITY_DETECT:
|
||||
if(pAnInfo->AbilityMatch == AN_TRUE &&
|
||||
pAnInfo->RxConfig.AsUSHORT != 0)
|
||||
{
|
||||
pAnInfo->State = AN_STATE_ACK_DETECT_INIT;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_ACK_DETECT_INIT:
|
||||
pAnInfo->TxConfig.D14_ACK = 1;
|
||||
MM_AnTxConfig(pAnInfo);
|
||||
|
||||
pAnInfo->State = AN_STATE_ACK_DETECT;
|
||||
|
||||
/* Fall through. */
|
||||
|
||||
case AN_STATE_ACK_DETECT:
|
||||
if(pAnInfo->AckMatch == AN_TRUE)
|
||||
{
|
||||
if((pAnInfo->RxConfig.AsUSHORT & ~AN_CONFIG_ACK) ==
|
||||
(pAnInfo->AbilityMatchCfg & ~AN_CONFIG_ACK))
|
||||
{
|
||||
pAnInfo->State = AN_STATE_COMPLETE_ACK_INIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
pAnInfo->State = AN_STATE_AN_ENABLE;
|
||||
}
|
||||
}
|
||||
else if(pAnInfo->AbilityMatch == AN_TRUE &&
|
||||
pAnInfo->RxConfig.AsUSHORT == 0)
|
||||
{
|
||||
pAnInfo->State = AN_STATE_AN_ENABLE;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_COMPLETE_ACK_INIT:
|
||||
/* Make sure invalid bits are not set. */
|
||||
if(pAnInfo->RxConfig.bits.D0 || pAnInfo->RxConfig.bits.D1 ||
|
||||
pAnInfo->RxConfig.bits.D2 || pAnInfo->RxConfig.bits.D3 ||
|
||||
pAnInfo->RxConfig.bits.D4 || pAnInfo->RxConfig.bits.D9 ||
|
||||
pAnInfo->RxConfig.bits.D10 || pAnInfo->RxConfig.bits.D11)
|
||||
{
|
||||
AnRet = AUTONEG_STATUS_FAILED;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Set up the link partner advertisement register. */
|
||||
pAnInfo->mr_lp_adv_full_duplex = pAnInfo->RxConfig.D5_FD;
|
||||
pAnInfo->mr_lp_adv_half_duplex = pAnInfo->RxConfig.D6_HD;
|
||||
pAnInfo->mr_lp_adv_sym_pause = pAnInfo->RxConfig.D7_PS1;
|
||||
pAnInfo->mr_lp_adv_asym_pause = pAnInfo->RxConfig.D8_PS2;
|
||||
pAnInfo->mr_lp_adv_remote_fault1 = pAnInfo->RxConfig.D12_RF1;
|
||||
pAnInfo->mr_lp_adv_remote_fault2 = pAnInfo->RxConfig.D13_RF2;
|
||||
pAnInfo->mr_lp_adv_next_page = pAnInfo->RxConfig.D15_NP;
|
||||
|
||||
pAnInfo->LinkTime_us = pAnInfo->CurrentTime_us;
|
||||
|
||||
pAnInfo->mr_toggle_tx = !pAnInfo->mr_toggle_tx;
|
||||
pAnInfo->mr_toggle_rx = pAnInfo->RxConfig.bits.D11;
|
||||
pAnInfo->mr_np_rx = pAnInfo->RxConfig.D15_NP;
|
||||
pAnInfo->mr_page_rx = AN_TRUE;
|
||||
|
||||
pAnInfo->State = AN_STATE_COMPLETE_ACK;
|
||||
AnRet = AUTONEG_STATUS_TIMER_ENABLED;
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_COMPLETE_ACK:
|
||||
if(pAnInfo->AbilityMatch == AN_TRUE &&
|
||||
pAnInfo->RxConfig.AsUSHORT == 0)
|
||||
{
|
||||
pAnInfo->State = AN_STATE_AN_ENABLE;
|
||||
break;
|
||||
}
|
||||
|
||||
Delta_us = pAnInfo->CurrentTime_us - pAnInfo->LinkTime_us;
|
||||
|
||||
if(Delta_us > AN_LINK_TIMER_INTERVAL_US)
|
||||
{
|
||||
if(pAnInfo->mr_adv_next_page == 0 ||
|
||||
pAnInfo->mr_lp_adv_next_page == 0)
|
||||
{
|
||||
pAnInfo->State = AN_STATE_IDLE_DETECT_INIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(pAnInfo->TxConfig.bits.D15 == 0 &&
|
||||
pAnInfo->mr_np_rx == 0)
|
||||
{
|
||||
pAnInfo->State = AN_STATE_IDLE_DETECT_INIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
AnRet = AUTONEG_STATUS_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_IDLE_DETECT_INIT:
|
||||
pAnInfo->LinkTime_us = pAnInfo->CurrentTime_us;
|
||||
|
||||
MM_AnTxIdle(pAnInfo);
|
||||
|
||||
pAnInfo->State = AN_STATE_IDLE_DETECT;
|
||||
|
||||
AnRet = AUTONEG_STATUS_TIMER_ENABLED;
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_IDLE_DETECT:
|
||||
if(pAnInfo->AbilityMatch == AN_TRUE &&
|
||||
pAnInfo->RxConfig.AsUSHORT == 0)
|
||||
{
|
||||
pAnInfo->State = AN_STATE_AN_ENABLE;
|
||||
break;
|
||||
}
|
||||
|
||||
Delta_us = pAnInfo->CurrentTime_us - pAnInfo->LinkTime_us;
|
||||
if(Delta_us > AN_LINK_TIMER_INTERVAL_US)
|
||||
{
|
||||
#if 0
|
||||
/* if(pAnInfo->IdleMatch == AN_TRUE) */
|
||||
/* { */
|
||||
#endif
|
||||
pAnInfo->State = AN_STATE_LINK_OK;
|
||||
#if 0
|
||||
/* } */
|
||||
/* else */
|
||||
/* { */
|
||||
/* AnRet = AUTONEG_STATUS_FAILED; */
|
||||
/* break; */
|
||||
/* } */
|
||||
#endif
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_LINK_OK:
|
||||
pAnInfo->mr_an_complete = AN_TRUE;
|
||||
pAnInfo->mr_link_ok = AN_TRUE;
|
||||
AnRet = AUTONEG_STATUS_DONE;
|
||||
|
||||
break;
|
||||
|
||||
case AN_STATE_NEXT_PAGE_WAIT_INIT:
|
||||
break;
|
||||
|
||||
case AN_STATE_NEXT_PAGE_WAIT:
|
||||
break;
|
||||
|
||||
default:
|
||||
AnRet = AUTONEG_STATUS_FAILED;
|
||||
break;
|
||||
}
|
||||
|
||||
return AnRet;
|
||||
}
|
||||
#endif /* INCLUDE_TBI_SUPPORT */
|
||||
|
||||
#endif /* !defined(CONFIG_NET_MULTI) */
|
@ -1,408 +0,0 @@
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2001 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* History: */
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
#ifndef AUTONEG_H
|
||||
#define AUTONEG_H
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Constants. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define AN_LINK_TIMER_INTERVAL_US 9000 /* 10ms */
|
||||
|
||||
/* TRUE, FALSE */
|
||||
#define AN_TRUE 1
|
||||
#define AN_FALSE 0
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Main data structure for keeping track of 802.3z auto-negotation state */
|
||||
/* variables as shown in Figure 37-6 of the IEEE 802.3z specification. */
|
||||
/******************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* Current auto-negotiation state. */
|
||||
unsigned long State;
|
||||
#define AN_STATE_UNKNOWN 0
|
||||
#define AN_STATE_AN_ENABLE 1
|
||||
#define AN_STATE_AN_RESTART_INIT 2
|
||||
#define AN_STATE_AN_RESTART 3
|
||||
#define AN_STATE_DISABLE_LINK_OK 4
|
||||
#define AN_STATE_ABILITY_DETECT_INIT 5
|
||||
#define AN_STATE_ABILITY_DETECT 6
|
||||
#define AN_STATE_ACK_DETECT_INIT 7
|
||||
#define AN_STATE_ACK_DETECT 8
|
||||
#define AN_STATE_COMPLETE_ACK_INIT 9
|
||||
#define AN_STATE_COMPLETE_ACK 10
|
||||
#define AN_STATE_IDLE_DETECT_INIT 11
|
||||
#define AN_STATE_IDLE_DETECT 12
|
||||
#define AN_STATE_LINK_OK 13
|
||||
#define AN_STATE_NEXT_PAGE_WAIT_INIT 14
|
||||
#define AN_STATE_NEXT_PAGE_WAIT 16
|
||||
|
||||
/* Link timer. */
|
||||
unsigned long LinkTime_us;
|
||||
|
||||
/* Current time. */
|
||||
unsigned long CurrentTime_us;
|
||||
|
||||
/* Need these values for consistency check. */
|
||||
unsigned short AbilityMatchCfg;
|
||||
|
||||
/* Ability, idle, and ack match functions. */
|
||||
unsigned long AbilityMatchCnt;
|
||||
char AbilityMatch;
|
||||
char IdleMatch;
|
||||
char AckMatch;
|
||||
|
||||
/* Tx config data */
|
||||
union
|
||||
{
|
||||
/* The TxConfig register is arranged as follows: */
|
||||
/* */
|
||||
/* MSB LSB */
|
||||
/* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ */
|
||||
/* | D7| D6| D5| D4| D3| D2| D1| D0|D15|D14|D13|D12|D11|D10| D9| D8| */
|
||||
/* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ */
|
||||
struct
|
||||
{
|
||||
#ifdef BIG_ENDIAN_HOST
|
||||
unsigned int D7:1; /* PS1 */
|
||||
unsigned int D6:1; /* HD */
|
||||
unsigned int D5:1; /* FD */
|
||||
unsigned int D4:1;
|
||||
unsigned int D3:1;
|
||||
unsigned int D2:1;
|
||||
unsigned int D1:1;
|
||||
unsigned int D0:1;
|
||||
unsigned int D15:1; /* NP */
|
||||
unsigned int D14:1; /* ACK */
|
||||
unsigned int D13:1; /* RF2 */
|
||||
unsigned int D12:1; /* RF1 */
|
||||
unsigned int D11:1;
|
||||
unsigned int D10:1;
|
||||
unsigned int D9:1;
|
||||
unsigned int D8:1; /* PS2 */
|
||||
#else /* BIG_ENDIAN_HOST */
|
||||
unsigned int D8:1; /* PS2 */
|
||||
unsigned int D9:1;
|
||||
unsigned int D10:1;
|
||||
unsigned int D11:1;
|
||||
unsigned int D12:1; /* RF1 */
|
||||
unsigned int D13:1; /* RF2 */
|
||||
unsigned int D14:1; /* ACK */
|
||||
unsigned int D15:1; /* NP */
|
||||
unsigned int D0:1;
|
||||
unsigned int D1:1;
|
||||
unsigned int D2:1;
|
||||
unsigned int D3:1;
|
||||
unsigned int D4:1;
|
||||
unsigned int D5:1; /* FD */
|
||||
unsigned int D6:1; /* HD */
|
||||
unsigned int D7:1; /* PS1 */
|
||||
#endif
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define D8_PS2 bits.D8
|
||||
#define D12_RF1 bits.D12
|
||||
#define D13_RF2 bits.D13
|
||||
#define D14_ACK bits.D14
|
||||
#define D15_NP bits.D15
|
||||
#define D5_FD bits.D5
|
||||
#define D6_HD bits.D6
|
||||
#define D7_PS1 bits.D7
|
||||
} TxConfig;
|
||||
|
||||
/* Rx config data */
|
||||
union
|
||||
{
|
||||
/* The RxConfig register is arranged as follows: */
|
||||
/* */
|
||||
/* MSB LSB */
|
||||
/* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ */
|
||||
/* | D7| D6| D5| D4| D3| D2| D1| D0|D15|D14|D13|D12|D11|D10| D9| D8| */
|
||||
/* +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ */
|
||||
struct
|
||||
{
|
||||
#ifdef BIG_ENDIAN_HOST
|
||||
unsigned int D7:1; /* PS1 */
|
||||
unsigned int D6:1; /* HD */
|
||||
unsigned int D5:1; /* FD */
|
||||
unsigned int D4:1;
|
||||
unsigned int D3:1;
|
||||
unsigned int D2:1;
|
||||
unsigned int D1:1;
|
||||
unsigned int D0:1;
|
||||
unsigned int D15:1; /* NP */
|
||||
unsigned int D14:1; /* ACK */
|
||||
unsigned int D13:1; /* RF2 */
|
||||
unsigned int D12:1; /* RF1 */
|
||||
unsigned int D11:1;
|
||||
unsigned int D10:1;
|
||||
unsigned int D9:1;
|
||||
unsigned int D8:1; /* PS2 */
|
||||
#else /* BIG_ENDIAN_HOST */
|
||||
unsigned int D8:1; /* PS2 */
|
||||
unsigned int D9:1;
|
||||
unsigned int D10:1;
|
||||
unsigned int D11:1;
|
||||
unsigned int D12:1; /* RF1 */
|
||||
unsigned int D13:1; /* RF2 */
|
||||
unsigned int D14:1; /* ACK */
|
||||
unsigned int D15:1; /* NP */
|
||||
unsigned int D0:1;
|
||||
unsigned int D1:1;
|
||||
unsigned int D2:1;
|
||||
unsigned int D3:1;
|
||||
unsigned int D4:1;
|
||||
unsigned int D5:1; /* FD */
|
||||
unsigned int D6:1; /* HD */
|
||||
unsigned int D7:1; /* PS1 */
|
||||
#endif
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
} RxConfig;
|
||||
|
||||
#define AN_CONFIG_NP 0x0080
|
||||
#define AN_CONFIG_ACK 0x0040
|
||||
#define AN_CONFIG_RF2 0x0020
|
||||
#define AN_CONFIG_RF1 0x0010
|
||||
#define AN_CONFIG_PS2 0x0001
|
||||
#define AN_CONFIG_PS1 0x8000
|
||||
#define AN_CONFIG_HD 0x4000
|
||||
#define AN_CONFIG_FD 0x2000
|
||||
|
||||
|
||||
/* Management registers. */
|
||||
|
||||
/* Control register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int an_enable:1;
|
||||
unsigned int loopback:1;
|
||||
unsigned int reset:1;
|
||||
unsigned int restart_an:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define mr_an_enable Mr0.bits.an_enable
|
||||
#define mr_loopback Mr0.bits.loopback
|
||||
#define mr_main_reset Mr0.bits.reset
|
||||
#define mr_restart_an Mr0.bits.restart_an
|
||||
} Mr0;
|
||||
|
||||
/* Status register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int an_complete:1;
|
||||
unsigned int link_ok:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define mr_an_complete Mr1.bits.an_complete
|
||||
#define mr_link_ok Mr1.bits.link_ok
|
||||
} Mr1;
|
||||
|
||||
/* Advertisement register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int reserved_4:5;
|
||||
unsigned int full_duplex:1;
|
||||
unsigned int half_duplex:1;
|
||||
unsigned int sym_pause:1;
|
||||
unsigned int asym_pause:1;
|
||||
unsigned int reserved_11:3;
|
||||
unsigned int remote_fault1:1;
|
||||
unsigned int remote_fault2:1;
|
||||
unsigned int reserved_14:1;
|
||||
unsigned int next_page:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define mr_adv_full_duplex Mr4.bits.full_duplex
|
||||
#define mr_adv_half_duplex Mr4.bits.half_duplex
|
||||
#define mr_adv_sym_pause Mr4.bits.sym_pause
|
||||
#define mr_adv_asym_pause Mr4.bits.asym_pause
|
||||
#define mr_adv_remote_fault1 Mr4.bits.remote_fault1
|
||||
#define mr_adv_remote_fault2 Mr4.bits.remote_fault2
|
||||
#define mr_adv_next_page Mr4.bits.next_page
|
||||
} Mr4;
|
||||
|
||||
/* Link partner advertisement register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int reserved_4:5;
|
||||
unsigned int lp_full_duplex:1;
|
||||
unsigned int lp_half_duplex:1;
|
||||
unsigned int lp_sym_pause:1;
|
||||
unsigned int lp_asym_pause:1;
|
||||
unsigned int reserved_11:3;
|
||||
unsigned int lp_remote_fault1:1;
|
||||
unsigned int lp_remote_fault2:1;
|
||||
unsigned int lp_ack:1;
|
||||
unsigned int lp_next_page:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define mr_lp_adv_full_duplex Mr5.bits.lp_full_duplex
|
||||
#define mr_lp_adv_half_duplex Mr5.bits.lp_half_duplex
|
||||
#define mr_lp_adv_sym_pause Mr5.bits.lp_sym_pause
|
||||
#define mr_lp_adv_asym_pause Mr5.bits.lp_asym_pause
|
||||
#define mr_lp_adv_remote_fault1 Mr5.bits.lp_remote_fault1
|
||||
#define mr_lp_adv_remote_fault2 Mr5.bits.lp_remote_fault2
|
||||
#define mr_lp_adv_next_page Mr5.bits.lp_next_page
|
||||
} Mr5;
|
||||
|
||||
/* Auto-negotiation expansion register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int reserved_0:1;
|
||||
unsigned int page_received:1;
|
||||
unsigned int next_pageable:1;
|
||||
unsigned int reserved_15:13;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
} Mr6;
|
||||
|
||||
/* Auto-negotiation next page transmit register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int code_field:11;
|
||||
unsigned int toggle:1;
|
||||
unsigned int ack2:1;
|
||||
unsigned int message_page:1;
|
||||
unsigned int reserved_14:1;
|
||||
unsigned int next_page:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define mr_np_tx Mr7.AsUSHORT
|
||||
} Mr7;
|
||||
|
||||
/* Auto-negotiation link partner ability register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int code_field:11;
|
||||
unsigned int toggle:1;
|
||||
unsigned int ack2:1;
|
||||
unsigned int message_page:1;
|
||||
unsigned int ack:1;
|
||||
unsigned int next_page:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define mr_lp_np_rx Mr8.AsUSHORT
|
||||
} Mr8;
|
||||
|
||||
/* Extended status register. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int reserved_11:12;
|
||||
unsigned int base1000_t_hd:1;
|
||||
unsigned int base1000_t_fd:1;
|
||||
unsigned int base1000_x_hd:1;
|
||||
unsigned int base1000_x_fd:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
} Mr15;
|
||||
|
||||
/* Miscellaneous state variables. */
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int toggle_tx:1;
|
||||
unsigned int toggle_rx:1;
|
||||
unsigned int np_rx:1;
|
||||
unsigned int page_rx:1;
|
||||
unsigned int np_loaded:1;
|
||||
} bits;
|
||||
|
||||
unsigned short AsUSHORT;
|
||||
|
||||
#define mr_toggle_tx MrMisc.bits.toggle_tx
|
||||
#define mr_toggle_rx MrMisc.bits.toggle_rx
|
||||
#define mr_np_rx MrMisc.bits.np_rx
|
||||
#define mr_page_rx MrMisc.bits.page_rx
|
||||
#define mr_np_loaded MrMisc.bits.np_loaded
|
||||
} MrMisc;
|
||||
|
||||
|
||||
/* Implement specifics */
|
||||
|
||||
/* Pointer to the operating system specific data structure. */
|
||||
void *pContext;
|
||||
} AN_STATE_INFO, *PAN_STATE_INFO;
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Return code of Autoneg8023z. */
|
||||
/******************************************************************************/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AUTONEG_STATUS_OK = 0,
|
||||
AUTONEG_STATUS_DONE = 1,
|
||||
AUTONEG_STATUS_TIMER_ENABLED = 2,
|
||||
AUTONEG_STATUS_FAILED = 0xfffffff
|
||||
} AUTONEG_STATUS, *PAUTONEG_STATUS;
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Function prototypes. */
|
||||
/******************************************************************************/
|
||||
|
||||
AUTONEG_STATUS Autoneg8023z(PAN_STATE_INFO pAnInfo);
|
||||
void AutonegInit(PAN_STATE_INFO pAnInfo);
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* The following functions are defined in the os-dependent module. */
|
||||
/******************************************************************************/
|
||||
|
||||
void MM_AnTxConfig(PAN_STATE_INFO pAnInfo);
|
||||
void MM_AnTxIdle(PAN_STATE_INFO pAnInfo);
|
||||
char MM_AnRxConfig(PAN_STATE_INFO pAnInfo, unsigned short *pRxConfig);
|
||||
|
||||
|
||||
#endif /* AUTONEG_H */
|
@ -1,57 +0,0 @@
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* History: */
|
||||
/* 02/25/00 Hav Khauv Initial version. */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef BITS_H
|
||||
#define BITS_H
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Bit Mask definitions */
|
||||
/******************************************************************************/
|
||||
#define BIT_NONE 0x00
|
||||
#define BIT_0 0x01
|
||||
#define BIT_1 0x02
|
||||
#define BIT_2 0x04
|
||||
#define BIT_3 0x08
|
||||
#define BIT_4 0x10
|
||||
#define BIT_5 0x20
|
||||
#define BIT_6 0x40
|
||||
#define BIT_7 0x80
|
||||
#define BIT_8 0x0100
|
||||
#define BIT_9 0x0200
|
||||
#define BIT_10 0x0400
|
||||
#define BIT_11 0x0800
|
||||
#define BIT_12 0x1000
|
||||
#define BIT_13 0x2000
|
||||
#define BIT_14 0x4000
|
||||
#define BIT_15 0x8000
|
||||
#define BIT_16 0x010000
|
||||
#define BIT_17 0x020000
|
||||
#define BIT_18 0x040000
|
||||
#define BIT_19 0x080000
|
||||
#define BIT_20 0x100000
|
||||
#define BIT_21 0x200000
|
||||
#define BIT_22 0x400000
|
||||
#define BIT_23 0x800000
|
||||
#define BIT_24 0x01000000
|
||||
#define BIT_25 0x02000000
|
||||
#define BIT_26 0x04000000
|
||||
#define BIT_27 0x08000000
|
||||
#define BIT_28 0x10000000
|
||||
#define BIT_29 0x20000000
|
||||
#define BIT_30 0x40000000
|
||||
#define BIT_31 0x80000000
|
||||
|
||||
#endif /* BITS_H */
|
@ -1,109 +0,0 @@
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* History: */
|
||||
/* 02/25/00 Hav Khauv Initial version. */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
|
||||
#ifdef VXWORKS
|
||||
#include <vxWorks.h>
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
/* Debug macros */
|
||||
/******************************************************************************/
|
||||
|
||||
/* Code path for controlling output debug messages. */
|
||||
/* Define your code path here. */
|
||||
#define CP_INIT 0x010000
|
||||
#define CP_SEND 0x020000
|
||||
#define CP_RCV 0x040000
|
||||
#define CP_INT 0x080000
|
||||
#define CP_UINIT 0x100000
|
||||
#define CP_RESET 0x200000
|
||||
|
||||
#define CP_ALL (CP_INIT | CP_SEND | CP_RCV | CP_INT | \
|
||||
CP_RESET | CP_UINIT)
|
||||
|
||||
#define CP_MASK 0xffff0000
|
||||
|
||||
|
||||
/* Debug message levels. */
|
||||
#define LV_VERBOSE 0x03
|
||||
#define LV_INFORM 0x02
|
||||
#define LV_WARN 0x01
|
||||
#define LV_FATAL 0x00
|
||||
|
||||
#define LV_MASK 0xffff
|
||||
|
||||
|
||||
/* Code path and messsage level combined. These are the first argument of */
|
||||
/* the DbgMessage macro. */
|
||||
#define INIT_V (CP_INIT | LV_VERBOSE)
|
||||
#define INIT_I (CP_INIT | LV_INFORM)
|
||||
#define INIT_W (CP_INIT | LV_WARN)
|
||||
#define SEND_V (CP_SEND | LV_VERBOSE)
|
||||
#define SEND_I (CP_SEND | LV_INFORM)
|
||||
#define SEND_W (CP_SEND | LV_WARN)
|
||||
#define RCV_V (CP_RCV | LV_VERBOSE)
|
||||
#define RCV_I (CP_RCV | LV_INFORM)
|
||||
#define RCV_W (CP_RCV | LV_WARN)
|
||||
#define INT_V (CP_INT | LV_VERBOSE)
|
||||
#define INT_I (CP_INT | LV_INFORM)
|
||||
#define INT_W (CP_INT | LV_WARN)
|
||||
#define UINIT_V (CP_UINIT | LV_VERBOSE)
|
||||
#define UINIT_I (CP_UINIT | LV_INFORM)
|
||||
#define UINIT_W (CP_UINIT | LV_WARN)
|
||||
#define RESET_V (CP_RESET | LV_VERBOSE)
|
||||
#define RESET_I (CP_RESET | LV_INFORM)
|
||||
#define RESET_W (CP_RESET | LV_WARN)
|
||||
#define CPALL_V (CP_ALL | LV_VERBOSE)
|
||||
#define CPALL_I (CP_ALL | LV_INFORM)
|
||||
#define CPALL_W (CP_ALL | LV_WARN)
|
||||
|
||||
|
||||
/* All code path message levels. */
|
||||
#define FATAL (CP_ALL | LV_FATAL)
|
||||
#define WARN (CP_ALL | LV_WARN)
|
||||
#define INFORM (CP_ALL | LV_INFORM)
|
||||
#define VERBOSE (CP_ALL | LV_VERBOSE)
|
||||
|
||||
|
||||
/* These constants control the message output. */
|
||||
/* Set your debug message output level and code path here. */
|
||||
#ifndef DBG_MSG_CP
|
||||
#define DBG_MSG_CP CP_ALL /* Where to output messages. */
|
||||
#endif
|
||||
|
||||
#ifndef DBG_MSG_LV
|
||||
#define DBG_MSG_LV LV_VERBOSE /* Level of message output. */
|
||||
#endif
|
||||
|
||||
/* DbgMessage macro. */
|
||||
#if DBG
|
||||
#define DbgMessage(CNTRL, MESSAGE) \
|
||||
if((CNTRL & DBG_MSG_CP) && ((CNTRL & LV_MASK) <= DBG_MSG_LV)) \
|
||||
printf MESSAGE
|
||||
#define DbgBreak() DbgBreakPoint()
|
||||
#undef STATIC
|
||||
#define STATIC
|
||||
#else
|
||||
#define DbgMessage(CNTRL, MESSAGE)
|
||||
#define DbgBreak()
|
||||
#undef STATIC
|
||||
#define STATIC static
|
||||
#endif /* DBG */
|
||||
|
||||
|
||||
#endif /* DEBUG_H */
|
@ -1,434 +0,0 @@
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* History: */
|
||||
/* 02/25/00 Hav Khauv Initial version. */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef LM_H
|
||||
#define LM_H
|
||||
|
||||
#include "bcm570x_queue.h"
|
||||
#include "bcm570x_bits.h"
|
||||
|
||||
/******************************************************************************/
|
||||
/* Basic types. */
|
||||
/******************************************************************************/
|
||||
|
||||
typedef char LM_CHAR, *PLM_CHAR;
|
||||
typedef unsigned int LM_UINT, *PLM_UINT;
|
||||
typedef unsigned char LM_UINT8, *PLM_UINT8;
|
||||
typedef unsigned short LM_UINT16, *PLM_UINT16;
|
||||
typedef unsigned int LM_UINT32, *PLM_UINT32;
|
||||
typedef unsigned int LM_COUNTER, *PLM_COUNTER;
|
||||
typedef void LM_VOID, *PLM_VOID;
|
||||
typedef char LM_BOOL, *PLM_BOOL;
|
||||
|
||||
/* 64bit value. */
|
||||
typedef struct {
|
||||
#ifdef BIG_ENDIAN_HOST
|
||||
LM_UINT32 High;
|
||||
LM_UINT32 Low;
|
||||
#else /* BIG_ENDIAN_HOST */
|
||||
LM_UINT32 Low;
|
||||
LM_UINT32 High;
|
||||
#endif /* !BIG_ENDIAN_HOST */
|
||||
} LM_UINT64, *PLM_UINT64;
|
||||
|
||||
typedef LM_UINT64 LM_PHYSICAL_ADDRESS, *PLM_PHYSICAL_ADDRESS;
|
||||
|
||||
/* void LM_INC_PHYSICAL_ADDRESS(PLM_PHYSICAL_ADDRESS pAddr,LM_UINT32 IncSize) */
|
||||
#define LM_INC_PHYSICAL_ADDRESS(pAddr, IncSize) \
|
||||
{ \
|
||||
LM_UINT32 OrgLow; \
|
||||
\
|
||||
OrgLow = (pAddr)->Low; \
|
||||
(pAddr)->Low += IncSize; \
|
||||
if((pAddr)->Low < OrgLow) { \
|
||||
(pAddr)->High++; /* Wrap around. */ \
|
||||
} \
|
||||
}
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL ((void *) 0)
|
||||
#endif /* NULL */
|
||||
|
||||
#ifndef OFFSETOF
|
||||
#define OFFSETOF(_s, _m) (MM_UINT_PTR(&(((_s *) 0)->_m)))
|
||||
#endif /* OFFSETOF */
|
||||
|
||||
/******************************************************************************/
|
||||
/* Simple macros. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define IS_ETH_BROADCAST(_pEthAddr) \
|
||||
(((unsigned char *) (_pEthAddr))[0] == ((unsigned char) 0xff))
|
||||
|
||||
#define IS_ETH_MULTICAST(_pEthAddr) \
|
||||
(((unsigned char *) (_pEthAddr))[0] & ((unsigned char) 0x01))
|
||||
|
||||
#define IS_ETH_ADDRESS_EQUAL(_pEtherAddr1, _pEtherAddr2) \
|
||||
((((unsigned char *) (_pEtherAddr1))[0] == \
|
||||
((unsigned char *) (_pEtherAddr2))[0]) && \
|
||||
(((unsigned char *) (_pEtherAddr1))[1] == \
|
||||
((unsigned char *) (_pEtherAddr2))[1]) && \
|
||||
(((unsigned char *) (_pEtherAddr1))[2] == \
|
||||
((unsigned char *) (_pEtherAddr2))[2]) && \
|
||||
(((unsigned char *) (_pEtherAddr1))[3] == \
|
||||
((unsigned char *) (_pEtherAddr2))[3]) && \
|
||||
(((unsigned char *) (_pEtherAddr1))[4] == \
|
||||
((unsigned char *) (_pEtherAddr2))[4]) && \
|
||||
(((unsigned char *) (_pEtherAddr1))[5] == \
|
||||
((unsigned char *) (_pEtherAddr2))[5]))
|
||||
|
||||
#define COPY_ETH_ADDRESS(_Src, _Dst) \
|
||||
((unsigned char *) (_Dst))[0] = ((unsigned char *) (_Src))[0]; \
|
||||
((unsigned char *) (_Dst))[1] = ((unsigned char *) (_Src))[1]; \
|
||||
((unsigned char *) (_Dst))[2] = ((unsigned char *) (_Src))[2]; \
|
||||
((unsigned char *) (_Dst))[3] = ((unsigned char *) (_Src))[3]; \
|
||||
((unsigned char *) (_Dst))[4] = ((unsigned char *) (_Src))[4]; \
|
||||
((unsigned char *) (_Dst))[5] = ((unsigned char *) (_Src))[5];
|
||||
|
||||
/******************************************************************************/
|
||||
/* Constants. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define ETHERNET_ADDRESS_SIZE 6
|
||||
#define ETHERNET_PACKET_HEADER_SIZE 14
|
||||
#define MIN_ETHERNET_PACKET_SIZE 64 /* with 4 byte crc. */
|
||||
#define MAX_ETHERNET_PACKET_SIZE 1518 /* with 4 byte crc. */
|
||||
#define MIN_ETHERNET_PACKET_SIZE_NO_CRC 60
|
||||
#define MAX_ETHERNET_PACKET_SIZE_NO_CRC 1514
|
||||
#define MAX_ETHERNET_PACKET_BUFFER_SIZE 1536 /* A nice even number. */
|
||||
|
||||
#ifndef LM_MAX_MC_TABLE_SIZE
|
||||
#define LM_MAX_MC_TABLE_SIZE 32
|
||||
#endif /* LM_MAX_MC_TABLE_SIZE */
|
||||
#define LM_MC_ENTRY_SIZE (ETHERNET_ADDRESS_SIZE+1)
|
||||
#define LM_MC_INSTANCE_COUNT_INDEX (LM_MC_ENTRY_SIZE-1)
|
||||
|
||||
/* Receive filter masks. */
|
||||
#define LM_ACCEPT_UNICAST 0x0001
|
||||
#define LM_ACCEPT_MULTICAST 0x0002
|
||||
#define LM_ACCEPT_ALL_MULTICAST 0x0004
|
||||
#define LM_ACCEPT_BROADCAST 0x0008
|
||||
#define LM_ACCEPT_ERROR_PACKET 0x0010
|
||||
|
||||
#define LM_PROMISCUOUS_MODE 0x10000
|
||||
|
||||
/******************************************************************************/
|
||||
/* PCI registers. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define PCI_VENDOR_ID_REG 0x00
|
||||
#define PCI_DEVICE_ID_REG 0x02
|
||||
|
||||
#define PCI_COMMAND_REG 0x04
|
||||
#define PCI_IO_SPACE_ENABLE 0x0001
|
||||
#define PCI_MEM_SPACE_ENABLE 0x0002
|
||||
#define PCI_BUSMASTER_ENABLE 0x0004
|
||||
#define PCI_MEMORY_WRITE_INVALIDATE 0x0010
|
||||
#define PCI_PARITY_ERROR_ENABLE 0x0040
|
||||
#define PCI_SYSTEM_ERROR_ENABLE 0x0100
|
||||
#define PCI_FAST_BACK_TO_BACK_ENABLE 0x0200
|
||||
|
||||
#define PCI_STATUS_REG 0x06
|
||||
#define PCI_REV_ID_REG 0x08
|
||||
|
||||
#define PCI_CACHE_LINE_SIZE_REG 0x0c
|
||||
|
||||
#define PCI_IO_BASE_ADDR_REG 0x10
|
||||
#define PCI_IO_BASE_ADDR_MASK 0xfffffff0
|
||||
|
||||
#define PCI_MEM_BASE_ADDR_LOW 0x10
|
||||
#define PCI_MEM_BASE_ADDR_HIGH 0x14
|
||||
|
||||
#define PCI_SUBSYSTEM_VENDOR_ID_REG 0x2c
|
||||
#define PCI_SUBSYSTEM_ID_REG 0x2e
|
||||
#define PCI_INT_LINE_REG 0x3c
|
||||
|
||||
#define PCIX_CAP_REG 0x40
|
||||
#define PCIX_ENABLE_RELAXED_ORDERING BIT_17
|
||||
|
||||
/******************************************************************************/
|
||||
/* Fragment structure. */
|
||||
/******************************************************************************/
|
||||
|
||||
typedef struct {
|
||||
LM_UINT32 FragSize;
|
||||
LM_PHYSICAL_ADDRESS FragBuf;
|
||||
} LM_FRAG, *PLM_FRAG;
|
||||
|
||||
typedef struct {
|
||||
/* FragCount is initialized for the caller to the maximum array size, on */
|
||||
/* return FragCount is the number of the actual fragments in the array. */
|
||||
LM_UINT32 FragCount;
|
||||
|
||||
/* Total buffer size. */
|
||||
LM_UINT32 TotalSize;
|
||||
|
||||
/* Fragment array buffer. */
|
||||
LM_FRAG Fragments[1];
|
||||
} LM_FRAG_LIST, *PLM_FRAG_LIST;
|
||||
|
||||
#define DECLARE_FRAG_LIST_BUFFER_TYPE(_FRAG_LIST_TYPE_NAME, _MAX_FRAG_COUNT) \
|
||||
typedef struct { \
|
||||
LM_FRAG_LIST FragList; \
|
||||
LM_FRAG FragListBuffer[_MAX_FRAG_COUNT-1]; \
|
||||
} _FRAG_LIST_TYPE_NAME, *P##_FRAG_LIST_TYPE_NAME
|
||||
|
||||
/******************************************************************************/
|
||||
/* Status codes. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_STATUS_SUCCESS 0
|
||||
#define LM_STATUS_FAILURE 1
|
||||
|
||||
#define LM_STATUS_INTERRUPT_ACTIVE 2
|
||||
#define LM_STATUS_INTERRUPT_NOT_ACTIVE 3
|
||||
|
||||
#define LM_STATUS_LINK_ACTIVE 4
|
||||
#define LM_STATUS_LINK_DOWN 5
|
||||
#define LM_STATUS_LINK_SETTING_MISMATCH 6
|
||||
|
||||
#define LM_STATUS_TOO_MANY_FRAGMENTS 7
|
||||
#define LM_STATUS_TRANSMIT_ABORTED 8
|
||||
#define LM_STATUS_TRANSMIT_ERROR 9
|
||||
#define LM_STATUS_RECEIVE_ABORTED 10
|
||||
#define LM_STATUS_RECEIVE_ERROR 11
|
||||
#define LM_STATUS_INVALID_PACKET_SIZE 12
|
||||
#define LM_STATUS_OUT_OF_MAP_REGISTERS 13
|
||||
#define LM_STATUS_UNKNOWN_ADAPTER 14
|
||||
|
||||
typedef LM_UINT LM_STATUS, *PLM_STATUS;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Requested media type. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_REQUESTED_MEDIA_TYPE_AUTO 0
|
||||
#define LM_REQUESTED_MEDIA_TYPE_BNC 1
|
||||
#define LM_REQUESTED_MEDIA_TYPE_UTP_AUTO 2
|
||||
#define LM_REQUESTED_MEDIA_TYPE_UTP_10MBPS 3
|
||||
#define LM_REQUESTED_MEDIA_TYPE_UTP_10MBPS_FULL_DUPLEX 4
|
||||
#define LM_REQUESTED_MEDIA_TYPE_UTP_100MBPS 5
|
||||
#define LM_REQUESTED_MEDIA_TYPE_UTP_100MBPS_FULL_DUPLEX 6
|
||||
#define LM_REQUESTED_MEDIA_TYPE_UTP_1000MBPS 7
|
||||
#define LM_REQUESTED_MEDIA_TYPE_UTP_1000MBPS_FULL_DUPLEX 8
|
||||
#define LM_REQUESTED_MEDIA_TYPE_FIBER_100MBPS 9
|
||||
#define LM_REQUESTED_MEDIA_TYPE_FIBER_100MBPS_FULL_DUPLEX 10
|
||||
#define LM_REQUESTED_MEDIA_TYPE_FIBER_1000MBPS 11
|
||||
#define LM_REQUESTED_MEDIA_TYPE_FIBER_1000MBPS_FULL_DUPLEX 12
|
||||
#define LM_REQUESTED_MEDIA_TYPE_MAC_LOOPBACK 0xfffe
|
||||
#define LM_REQUESTED_MEDIA_TYPE_PHY_LOOPBACK 0xffff
|
||||
|
||||
typedef LM_UINT32 LM_REQUESTED_MEDIA_TYPE, *PLM_REQUESTED_MEDIA_TYPE;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Media type. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_MEDIA_TYPE_UNKNOWN -1
|
||||
#define LM_MEDIA_TYPE_AUTO 0
|
||||
#define LM_MEDIA_TYPE_UTP 1
|
||||
#define LM_MEDIA_TYPE_BNC 2
|
||||
#define LM_MEDIA_TYPE_AUI 3
|
||||
#define LM_MEDIA_TYPE_FIBER 4
|
||||
|
||||
typedef LM_UINT32 LM_MEDIA_TYPE, *PLM_MEDIA_TYPE;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Line speed. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_LINE_SPEED_UNKNOWN 0
|
||||
#define LM_LINE_SPEED_10MBPS 1
|
||||
#define LM_LINE_SPEED_100MBPS 2
|
||||
#define LM_LINE_SPEED_1000MBPS 3
|
||||
|
||||
typedef LM_UINT32 LM_LINE_SPEED, *PLM_LINE_SPEED;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Duplex mode. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_DUPLEX_MODE_UNKNOWN 0
|
||||
#define LM_DUPLEX_MODE_HALF 1
|
||||
#define LM_DUPLEX_MODE_FULL 2
|
||||
|
||||
typedef LM_UINT32 LM_DUPLEX_MODE, *PLM_DUPLEX_MODE;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Power state. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_POWER_STATE_D0 0
|
||||
#define LM_POWER_STATE_D1 1
|
||||
#define LM_POWER_STATE_D2 2
|
||||
#define LM_POWER_STATE_D3 3
|
||||
|
||||
typedef LM_UINT32 LM_POWER_STATE, *PLM_POWER_STATE;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Task offloading. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_TASK_OFFLOAD_NONE 0x0000
|
||||
#define LM_TASK_OFFLOAD_TX_IP_CHECKSUM 0x0001
|
||||
#define LM_TASK_OFFLOAD_RX_IP_CHECKSUM 0x0002
|
||||
#define LM_TASK_OFFLOAD_TX_TCP_CHECKSUM 0x0004
|
||||
#define LM_TASK_OFFLOAD_RX_TCP_CHECKSUM 0x0008
|
||||
#define LM_TASK_OFFLOAD_TX_UDP_CHECKSUM 0x0010
|
||||
#define LM_TASK_OFFLOAD_RX_UDP_CHECKSUM 0x0020
|
||||
#define LM_TASK_OFFLOAD_TCP_SEGMENTATION 0x0040
|
||||
|
||||
typedef LM_UINT32 LM_TASK_OFFLOAD, *PLM_TASK_OFFLOAD;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Flow control. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_FLOW_CONTROL_NONE 0x00
|
||||
#define LM_FLOW_CONTROL_RECEIVE_PAUSE 0x01
|
||||
#define LM_FLOW_CONTROL_TRANSMIT_PAUSE 0x02
|
||||
#define LM_FLOW_CONTROL_RX_TX_PAUSE (LM_FLOW_CONTROL_RECEIVE_PAUSE | \
|
||||
LM_FLOW_CONTROL_TRANSMIT_PAUSE)
|
||||
|
||||
/* This value can be or-ed with RECEIVE_PAUSE and TRANSMIT_PAUSE. If the */
|
||||
/* auto-negotiation is disabled and the RECEIVE_PAUSE and TRANSMIT_PAUSE */
|
||||
/* bits are set, then flow control is enabled regardless of link partner's */
|
||||
/* flow control capability. */
|
||||
#define LM_FLOW_CONTROL_AUTO_PAUSE 0x80000000
|
||||
|
||||
typedef LM_UINT32 LM_FLOW_CONTROL, *PLM_FLOW_CONTROL;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Wake up mode. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_WAKE_UP_MODE_NONE 0
|
||||
#define LM_WAKE_UP_MODE_MAGIC_PACKET 1
|
||||
#define LM_WAKE_UP_MODE_NWUF 2
|
||||
#define LM_WAKE_UP_MODE_LINK_CHANGE 4
|
||||
|
||||
typedef LM_UINT32 LM_WAKE_UP_MODE, *PLM_WAKE_UP_MODE;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Counters. */
|
||||
/******************************************************************************/
|
||||
|
||||
#define LM_COUNTER_FRAMES_XMITTED_OK 0
|
||||
#define LM_COUNTER_FRAMES_RECEIVED_OK 1
|
||||
#define LM_COUNTER_ERRORED_TRANSMIT_COUNT 2
|
||||
#define LM_COUNTER_ERRORED_RECEIVE_COUNT 3
|
||||
#define LM_COUNTER_RCV_CRC_ERROR 4
|
||||
#define LM_COUNTER_ALIGNMENT_ERROR 5
|
||||
#define LM_COUNTER_SINGLE_COLLISION_FRAMES 6
|
||||
#define LM_COUNTER_MULTIPLE_COLLISION_FRAMES 7
|
||||
#define LM_COUNTER_FRAMES_DEFERRED 8
|
||||
#define LM_COUNTER_MAX_COLLISIONS 9
|
||||
#define LM_COUNTER_RCV_OVERRUN 10
|
||||
#define LM_COUNTER_XMIT_UNDERRUN 11
|
||||
#define LM_COUNTER_UNICAST_FRAMES_XMIT 12
|
||||
#define LM_COUNTER_MULTICAST_FRAMES_XMIT 13
|
||||
#define LM_COUNTER_BROADCAST_FRAMES_XMIT 14
|
||||
#define LM_COUNTER_UNICAST_FRAMES_RCV 15
|
||||
#define LM_COUNTER_MULTICAST_FRAMES_RCV 16
|
||||
#define LM_COUNTER_BROADCAST_FRAMES_RCV 17
|
||||
|
||||
typedef LM_UINT32 LM_COUNTER_TYPE, *PLM_COUNTER_TYPE;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Forward definition. */
|
||||
/******************************************************************************/
|
||||
|
||||
typedef struct _LM_DEVICE_BLOCK *PLM_DEVICE_BLOCK;
|
||||
typedef struct _LM_PACKET *PLM_PACKET;
|
||||
|
||||
/******************************************************************************/
|
||||
/* Function prototypes. */
|
||||
/******************************************************************************/
|
||||
|
||||
LM_STATUS LM_GetAdapterInfo (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_InitializeAdapter (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_ResetAdapter (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_DisableInterrupt (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_EnableInterrupt (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_SendPacket (PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
|
||||
LM_STATUS LM_ServiceInterrupts (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_QueueRxPackets (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_SetReceiveMask (PLM_DEVICE_BLOCK pDevice, LM_UINT32 Mask);
|
||||
LM_STATUS LM_Halt (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_Abort (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_MulticastAdd (PLM_DEVICE_BLOCK pDevice, PLM_UINT8 pMcAddress);
|
||||
LM_STATUS LM_MulticastDel (PLM_DEVICE_BLOCK pDevice, PLM_UINT8 pMcAddress);
|
||||
LM_STATUS LM_MulticastClear (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_SetMacAddress (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_LoopbackAddress (PLM_DEVICE_BLOCK pDevice, PLM_UINT8 pAddress);
|
||||
|
||||
LM_UINT32 LM_GetCrcCounter (PLM_DEVICE_BLOCK pDevice);
|
||||
|
||||
LM_WAKE_UP_MODE LM_PMCapabilities (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_NwufAdd (PLM_DEVICE_BLOCK pDevice, LM_UINT32 ByteMaskSize,
|
||||
LM_UINT8 * pByteMask, LM_UINT8 * pPattern);
|
||||
LM_STATUS LM_NwufRemove (PLM_DEVICE_BLOCK pDevice, LM_UINT32 ByteMaskSize,
|
||||
LM_UINT8 * pByteMask, LM_UINT8 * pPattern);
|
||||
LM_STATUS LM_SetPowerState (PLM_DEVICE_BLOCK pDevice,
|
||||
LM_POWER_STATE PowerLevel);
|
||||
|
||||
LM_VOID LM_ReadPhy (PLM_DEVICE_BLOCK pDevice, LM_UINT32 PhyReg,
|
||||
PLM_UINT32 pData32);
|
||||
LM_VOID LM_WritePhy (PLM_DEVICE_BLOCK pDevice, LM_UINT32 PhyReg,
|
||||
LM_UINT32 Data32);
|
||||
|
||||
LM_STATUS LM_ControlLoopBack (PLM_DEVICE_BLOCK pDevice, LM_UINT32 Control);
|
||||
LM_STATUS LM_SetupPhy (PLM_DEVICE_BLOCK pDevice);
|
||||
int LM_BlinkLED (PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlinkDuration);
|
||||
|
||||
/******************************************************************************/
|
||||
/* These are the OS specific functions called by LMAC. */
|
||||
/******************************************************************************/
|
||||
|
||||
LM_STATUS MM_ReadConfig16 (PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
|
||||
LM_UINT16 * pValue16);
|
||||
LM_STATUS MM_WriteConfig16 (PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
|
||||
LM_UINT16 Value16);
|
||||
LM_STATUS MM_ReadConfig32 (PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
|
||||
LM_UINT32 * pValue32);
|
||||
LM_STATUS MM_WriteConfig32 (PLM_DEVICE_BLOCK pDevice, LM_UINT32 Offset,
|
||||
LM_UINT32 Value32);
|
||||
LM_STATUS MM_MapMemBase (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS MM_MapIoBase (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS MM_IndicateRxPackets (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS MM_IndicateTxPackets (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS MM_StartTxDma (PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
|
||||
LM_STATUS MM_CompleteTxDma (PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
|
||||
LM_STATUS MM_AllocateMemory (PLM_DEVICE_BLOCK pDevice, LM_UINT32 BlockSize,
|
||||
PLM_VOID * pMemoryBlockVirt);
|
||||
LM_STATUS MM_AllocateSharedMemory (PLM_DEVICE_BLOCK pDevice,
|
||||
LM_UINT32 BlockSize,
|
||||
PLM_VOID * pMemoryBlockVirt,
|
||||
PLM_PHYSICAL_ADDRESS pMemoryBlockPhy,
|
||||
LM_BOOL Cached);
|
||||
LM_STATUS MM_GetConfig (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS MM_IndicateStatus (PLM_DEVICE_BLOCK pDevice, LM_STATUS Status);
|
||||
LM_STATUS MM_InitializeUmPackets (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS MM_FreeRxBuffer (PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
|
||||
LM_STATUS MM_CoalesceTxBuffer (PLM_DEVICE_BLOCK pDevice, PLM_PACKET pPacket);
|
||||
LM_STATUS LM_MbufWorkAround (PLM_DEVICE_BLOCK pDevice);
|
||||
LM_STATUS LM_SetLinkSpeed (PLM_DEVICE_BLOCK pDevice,
|
||||
LM_REQUESTED_MEDIA_TYPE RequestedMediaType);
|
||||
|
||||
#if INCLUDE_5703_A0_FIX
|
||||
LM_STATUS LM_Load5703DmaWFirmware (PLM_DEVICE_BLOCK pDevice);
|
||||
#endif
|
||||
|
||||
#endif /* LM_H */
|
@ -1,158 +0,0 @@
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef MM_H
|
||||
#define MM_H
|
||||
|
||||
#define __raw_readl readl
|
||||
#define __raw_writel writel
|
||||
|
||||
#define BIG_ENDIAN_HOST 1
|
||||
#define readl(addr) (*(volatile unsigned int*)(addr))
|
||||
#define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b))
|
||||
|
||||
/* Define memory barrier function here if needed */
|
||||
#define wmb()
|
||||
#define membar()
|
||||
#include <common.h>
|
||||
#include <asm/types.h>
|
||||
#include "bcm570x_lm.h"
|
||||
#include "bcm570x_queue.h"
|
||||
#include "tigon3.h"
|
||||
#include <pci.h>
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
#define ERROR -1
|
||||
|
||||
#if DBG
|
||||
#define STATIC
|
||||
#else
|
||||
#define STATIC static
|
||||
#endif
|
||||
|
||||
extern int MM_Packet_Desc_Size;
|
||||
|
||||
#define MM_PACKET_DESC_SIZE MM_Packet_Desc_Size
|
||||
|
||||
DECLARE_QUEUE_TYPE (UM_RX_PACKET_Q, MAX_RX_PACKET_DESC_COUNT + 1);
|
||||
|
||||
#define MAX_MEM 16
|
||||
|
||||
/* Synch */
|
||||
typedef int mutex_t;
|
||||
typedef int spinlock_t;
|
||||
|
||||
/* Embedded device control */
|
||||
typedef struct _UM_DEVICE_BLOCK {
|
||||
LM_DEVICE_BLOCK lm_dev;
|
||||
pci_dev_t pdev;
|
||||
char *name;
|
||||
void *mem_list[MAX_MEM];
|
||||
dma_addr_t dma_list[MAX_MEM];
|
||||
int mem_size_list[MAX_MEM];
|
||||
int mem_list_num;
|
||||
int mtu;
|
||||
int index;
|
||||
int opened;
|
||||
int delayed_link_ind; /* Delay link status during initial load */
|
||||
int adapter_just_inited; /* the first few seconds after init. */
|
||||
int spurious_int; /* new -- unsupported */
|
||||
int timer_interval;
|
||||
int adaptive_expiry;
|
||||
int crc_counter_expiry; /* new -- unsupported */
|
||||
int poll_tib_expiry; /* new -- unsupported */
|
||||
int tx_full;
|
||||
int tx_queued;
|
||||
int line_speed; /* in Mbps, 0 if link is down */
|
||||
UM_RX_PACKET_Q rx_out_of_buf_q;
|
||||
int rx_out_of_buf;
|
||||
int rx_low_buf_thresh; /* changed to rx_buf_repl_thresh */
|
||||
int rx_buf_repl_panic_thresh;
|
||||
int rx_buf_align; /* new -- unsupported */
|
||||
int do_global_lock;
|
||||
mutex_t global_lock;
|
||||
mutex_t undi_lock;
|
||||
long undi_flags;
|
||||
volatile int interrupt;
|
||||
int tasklet_pending;
|
||||
int tasklet_busy; /* new -- unsupported */
|
||||
int rx_pkt;
|
||||
int tx_pkt;
|
||||
#ifdef NICE_SUPPORT /* unsupported, this is a linux ioctl */
|
||||
void (*nice_rx) (void *, void *);
|
||||
void *nice_ctx;
|
||||
#endif /* NICE_SUPPORT */
|
||||
int rx_adaptive_coalesce;
|
||||
unsigned int rx_last_cnt;
|
||||
unsigned int tx_last_cnt;
|
||||
unsigned int rx_curr_coalesce_frames;
|
||||
unsigned int rx_curr_coalesce_ticks;
|
||||
unsigned int tx_curr_coalesce_frames; /* new -- unsupported */
|
||||
#if TIGON3_DEBUG /* new -- unsupported */
|
||||
uint tx_zc_count;
|
||||
uint tx_chksum_count;
|
||||
uint tx_himem_count;
|
||||
uint rx_good_chksum_count;
|
||||
#endif
|
||||
unsigned int rx_bad_chksum_count; /* new -- unsupported */
|
||||
unsigned int rx_misc_errors; /* new -- unsupported */
|
||||
} UM_DEVICE_BLOCK, *PUM_DEVICE_BLOCK;
|
||||
|
||||
/* Physical/PCI DMA address */
|
||||
typedef union {
|
||||
dma_addr_t dma_map;
|
||||
} dma_map_t;
|
||||
|
||||
/* Packet */
|
||||
typedef struct
|
||||
_UM_PACKET {
|
||||
LM_PACKET lm_packet;
|
||||
void *skbuff; /* Address of packet buffer */
|
||||
} UM_PACKET, *PUM_PACKET;
|
||||
|
||||
#define MM_ACQUIRE_UNDI_LOCK(_pDevice)
|
||||
#define MM_RELEASE_UNDI_LOCK(_pDevice)
|
||||
#define MM_ACQUIRE_INT_LOCK(_pDevice)
|
||||
#define MM_RELEASE_INT_LOCK(_pDevice)
|
||||
#define MM_UINT_PTR(_ptr) ((unsigned long) (_ptr))
|
||||
|
||||
/* Macro for setting 64bit address struct */
|
||||
#define set_64bit_addr(paddr, low, high) \
|
||||
(paddr)->Low = low; \
|
||||
(paddr)->High = high;
|
||||
|
||||
/* Assume that PCI controller's view of host memory is same as host */
|
||||
|
||||
#define MEM_TO_PCI_PHYS(addr) (addr)
|
||||
|
||||
extern void MM_SetAddr (LM_PHYSICAL_ADDRESS * paddr, dma_addr_t addr);
|
||||
extern void MM_SetT3Addr (T3_64BIT_HOST_ADDR * paddr, dma_addr_t addr);
|
||||
extern void MM_MapTxDma (PLM_DEVICE_BLOCK pDevice,
|
||||
struct _LM_PACKET *pPacket, T3_64BIT_HOST_ADDR * paddr,
|
||||
LM_UINT32 * len, int frag);
|
||||
extern void MM_MapRxDma (PLM_DEVICE_BLOCK pDevice,
|
||||
struct _LM_PACKET *pPacket,
|
||||
T3_64BIT_HOST_ADDR * paddr);
|
||||
|
||||
/* BSP needs to provide sysUsecDelay and sysSerialPrintString */
|
||||
extern void sysSerialPrintString (char *s);
|
||||
#define MM_Wait(usec) udelay(usec)
|
||||
|
||||
/* Define memory barrier function here if needed */
|
||||
#define wmb()
|
||||
|
||||
#if 0
|
||||
#define cpu_to_le32(val) LONGSWAP(val)
|
||||
#endif
|
||||
#endif /* MM_H */
|
@ -1,387 +0,0 @@
|
||||
|
||||
/******************************************************************************/
|
||||
/* */
|
||||
/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2000 Broadcom */
|
||||
/* Corporation. */
|
||||
/* All rights reserved. */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation, located in the file LICENSE. */
|
||||
/* */
|
||||
/* Queue functions. */
|
||||
/* void QQ_InitQueue(PQQ_CONTAINER pQueue) */
|
||||
/* char QQ_Full(PQQ_CONTAINER pQueue) */
|
||||
/* char QQ_Empty(PQQ_CONTAINER pQueue) */
|
||||
/* unsigned int QQ_GetSize(PQQ_CONTAINER pQueue) */
|
||||
/* unsigned int QQ_GetEntryCnt(PQQ_CONTAINER pQueue) */
|
||||
/* char QQ_PushHead(PQQ_CONTAINER pQueue, PQQ_ENTRY pEntry) */
|
||||
/* char QQ_PushTail(PQQ_CONTAINER pQueue, PQQ_ENTRY pEntry) */
|
||||
/* PQQ_ENTRY QQ_PopHead(PQQ_CONTAINER pQueue) */
|
||||
/* PQQ_ENTRY QQ_PopTail(PQQ_CONTAINER pQueue) */
|
||||
/* PQQ_ENTRY QQ_GetHead(PQQ_CONTAINER pQueue, unsigned int Idx) */
|
||||
/* PQQ_ENTRY QQ_GetTail(PQQ_CONTAINER pQueue, unsigned int Idx) */
|
||||
/* */
|
||||
/* */
|
||||
/* History: */
|
||||
/* 02/25/00 Hav Khauv Initial version. */
|
||||
/******************************************************************************/
|
||||
|
||||
#ifndef BCM_QUEUE_H
|
||||
#define BCM_QUEUE_H
|
||||
#ifndef EMBEDDED
|
||||
#define EMBEDDED 1
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
/* Queue definitions. */
|
||||
/******************************************************************************/
|
||||
|
||||
/* Entry for queueing. */
|
||||
typedef void *PQQ_ENTRY;
|
||||
|
||||
/* Linux Atomic Ops support */
|
||||
typedef struct { int counter; } atomic_t;
|
||||
|
||||
|
||||
/*
|
||||
* This combination of `inline' and `extern' has almost the effect of a
|
||||
* macro. The way to use it is to put a function definition in a header
|
||||
* file with these keywords, and put another copy of the definition
|
||||
* (lacking `inline' and `extern') in a library file. The definition in
|
||||
* the header file will cause most calls to the function to be inlined.
|
||||
* If any uses of the function remain, they will refer to the single copy
|
||||
* in the library.
|
||||
*/
|
||||
extern __inline void
|
||||
atomic_set(atomic_t* entry, int val)
|
||||
{
|
||||
entry->counter = val;
|
||||
}
|
||||
extern __inline int
|
||||
atomic_read(atomic_t* entry)
|
||||
{
|
||||
return entry->counter;
|
||||
}
|
||||
extern __inline void
|
||||
atomic_inc(atomic_t* entry)
|
||||
{
|
||||
if(entry)
|
||||
entry->counter++;
|
||||
}
|
||||
|
||||
extern __inline void
|
||||
atomic_dec(atomic_t* entry)
|
||||
{
|
||||
if(entry)
|
||||
entry->counter--;
|
||||
}
|
||||
|
||||
extern __inline void
|
||||
atomic_sub(int a, atomic_t* entry)
|
||||
{
|
||||
if(entry)
|
||||
entry->counter -= a;
|
||||
}
|
||||
extern __inline void
|
||||
atomic_add(int a, atomic_t* entry)
|
||||
{
|
||||
if(entry)
|
||||
entry->counter += a;
|
||||
}
|
||||
|
||||
|
||||
/* Queue header -- base type. */
|
||||
typedef struct {
|
||||
unsigned int Head;
|
||||
unsigned int Tail;
|
||||
unsigned int Size;
|
||||
atomic_t EntryCnt;
|
||||
PQQ_ENTRY Array[1];
|
||||
} QQ_CONTAINER, *PQQ_CONTAINER;
|
||||
|
||||
|
||||
/* Declare queue type macro. */
|
||||
#define DECLARE_QUEUE_TYPE(_QUEUE_TYPE, _QUEUE_SIZE) \
|
||||
\
|
||||
typedef struct { \
|
||||
QQ_CONTAINER Container; \
|
||||
PQQ_ENTRY EntryBuffer[_QUEUE_SIZE]; \
|
||||
} _QUEUE_TYPE, *P##_QUEUE_TYPE
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Compilation switches. */
|
||||
/******************************************************************************/
|
||||
|
||||
#if DBG
|
||||
#undef QQ_NO_OVERFLOW_CHECK
|
||||
#undef QQ_NO_UNDERFLOW_CHECK
|
||||
#endif /* DBG */
|
||||
|
||||
#ifdef QQ_USE_MACROS
|
||||
/* notdone */
|
||||
#else
|
||||
|
||||
#ifdef QQ_NO_INLINE
|
||||
#define __inline
|
||||
#endif /* QQ_NO_INLINE */
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline void
|
||||
QQ_InitQueue(
|
||||
PQQ_CONTAINER pQueue,
|
||||
unsigned int QueueSize) {
|
||||
pQueue->Head = 0;
|
||||
pQueue->Tail = 0;
|
||||
pQueue->Size = QueueSize+1;
|
||||
atomic_set(&pQueue->EntryCnt, 0);
|
||||
} /* QQ_InitQueue */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline char
|
||||
QQ_Full(
|
||||
PQQ_CONTAINER pQueue) {
|
||||
unsigned int NewHead;
|
||||
|
||||
NewHead = (pQueue->Head + 1) % pQueue->Size;
|
||||
|
||||
return(NewHead == pQueue->Tail);
|
||||
} /* QQ_Full */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline char
|
||||
QQ_Empty(
|
||||
PQQ_CONTAINER pQueue) {
|
||||
return(pQueue->Head == pQueue->Tail);
|
||||
} /* QQ_Empty */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline unsigned int
|
||||
QQ_GetSize(
|
||||
PQQ_CONTAINER pQueue) {
|
||||
return pQueue->Size;
|
||||
} /* QQ_GetSize */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline unsigned int
|
||||
QQ_GetEntryCnt(
|
||||
PQQ_CONTAINER pQueue) {
|
||||
return atomic_read(&pQueue->EntryCnt);
|
||||
} /* QQ_GetEntryCnt */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/* TRUE entry was added successfully. */
|
||||
/* FALSE queue is full. */
|
||||
/******************************************************************************/
|
||||
extern __inline char
|
||||
QQ_PushHead(
|
||||
PQQ_CONTAINER pQueue,
|
||||
PQQ_ENTRY pEntry) {
|
||||
unsigned int Head;
|
||||
|
||||
Head = (pQueue->Head + 1) % pQueue->Size;
|
||||
|
||||
#if !defined(QQ_NO_OVERFLOW_CHECK)
|
||||
if(Head == pQueue->Tail) {
|
||||
return 0;
|
||||
} /* if */
|
||||
#endif /* QQ_NO_OVERFLOW_CHECK */
|
||||
|
||||
pQueue->Array[pQueue->Head] = pEntry;
|
||||
wmb();
|
||||
pQueue->Head = Head;
|
||||
atomic_inc(&pQueue->EntryCnt);
|
||||
|
||||
return -1;
|
||||
} /* QQ_PushHead */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/* TRUE entry was added successfully. */
|
||||
/* FALSE queue is full. */
|
||||
/******************************************************************************/
|
||||
extern __inline char
|
||||
QQ_PushTail(
|
||||
PQQ_CONTAINER pQueue,
|
||||
PQQ_ENTRY pEntry) {
|
||||
unsigned int Tail;
|
||||
|
||||
Tail = pQueue->Tail;
|
||||
if(Tail == 0) {
|
||||
Tail = pQueue->Size;
|
||||
} /* if */
|
||||
Tail--;
|
||||
|
||||
#if !defined(QQ_NO_OVERFLOW_CHECK)
|
||||
if(Tail == pQueue->Head) {
|
||||
return 0;
|
||||
} /* if */
|
||||
#endif /* QQ_NO_OVERFLOW_CHECK */
|
||||
|
||||
pQueue->Array[Tail] = pEntry;
|
||||
wmb();
|
||||
pQueue->Tail = Tail;
|
||||
atomic_inc(&pQueue->EntryCnt);
|
||||
|
||||
return -1;
|
||||
} /* QQ_PushTail */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline PQQ_ENTRY
|
||||
QQ_PopHead(
|
||||
PQQ_CONTAINER pQueue) {
|
||||
unsigned int Head;
|
||||
PQQ_ENTRY Entry;
|
||||
|
||||
Head = pQueue->Head;
|
||||
|
||||
#if !defined(QQ_NO_UNDERFLOW_CHECK)
|
||||
if(Head == pQueue->Tail) {
|
||||
return (PQQ_ENTRY) 0;
|
||||
} /* if */
|
||||
#endif /* QQ_NO_UNDERFLOW_CHECK */
|
||||
|
||||
if(Head == 0) {
|
||||
Head = pQueue->Size;
|
||||
} /* if */
|
||||
Head--;
|
||||
|
||||
Entry = pQueue->Array[Head];
|
||||
#ifdef EMBEDDED
|
||||
membar();
|
||||
#else
|
||||
mb();
|
||||
#endif
|
||||
pQueue->Head = Head;
|
||||
atomic_dec(&pQueue->EntryCnt);
|
||||
|
||||
return Entry;
|
||||
} /* QQ_PopHead */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline PQQ_ENTRY
|
||||
QQ_PopTail(
|
||||
PQQ_CONTAINER pQueue) {
|
||||
unsigned int Tail;
|
||||
PQQ_ENTRY Entry;
|
||||
|
||||
Tail = pQueue->Tail;
|
||||
|
||||
#if !defined(QQ_NO_UNDERFLOW_CHECK)
|
||||
if(Tail == pQueue->Head) {
|
||||
return (PQQ_ENTRY) 0;
|
||||
} /* if */
|
||||
#endif /* QQ_NO_UNDERFLOW_CHECK */
|
||||
|
||||
Entry = pQueue->Array[Tail];
|
||||
#ifdef EMBEDDED
|
||||
membar();
|
||||
#else
|
||||
mb();
|
||||
#endif
|
||||
pQueue->Tail = (Tail + 1) % pQueue->Size;
|
||||
atomic_dec(&pQueue->EntryCnt);
|
||||
|
||||
return Entry;
|
||||
} /* QQ_PopTail */
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline PQQ_ENTRY
|
||||
QQ_GetHead(
|
||||
PQQ_CONTAINER pQueue,
|
||||
unsigned int Idx)
|
||||
{
|
||||
if(Idx >= atomic_read(&pQueue->EntryCnt))
|
||||
{
|
||||
return (PQQ_ENTRY) 0;
|
||||
}
|
||||
|
||||
if(pQueue->Head > Idx)
|
||||
{
|
||||
Idx = pQueue->Head - Idx;
|
||||
}
|
||||
else
|
||||
{
|
||||
Idx = pQueue->Size - (Idx - pQueue->Head);
|
||||
}
|
||||
Idx--;
|
||||
|
||||
return pQueue->Array[Idx];
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
/* Description: */
|
||||
/* */
|
||||
/* Return: */
|
||||
/******************************************************************************/
|
||||
extern __inline PQQ_ENTRY
|
||||
QQ_GetTail(
|
||||
PQQ_CONTAINER pQueue,
|
||||
unsigned int Idx)
|
||||
{
|
||||
if(Idx >= atomic_read(&pQueue->EntryCnt))
|
||||
{
|
||||
return (PQQ_ENTRY) 0;
|
||||
}
|
||||
|
||||
Idx += pQueue->Tail;
|
||||
if(Idx >= pQueue->Size)
|
||||
{
|
||||
Idx = Idx - pQueue->Size;
|
||||
}
|
||||
|
||||
return pQueue->Array[Idx];
|
||||
}
|
||||
|
||||
#endif /* QQ_USE_MACROS */
|
||||
|
||||
|
||||
#endif /* QUEUE_H */
|
5697
drivers/net/tigon3.c
5697
drivers/net/tigon3.c
File diff suppressed because it is too large
Load Diff
3339
drivers/net/tigon3.h
3339
drivers/net/tigon3.h
File diff suppressed because it is too large
Load Diff
@ -49,9 +49,6 @@
|
||||
|
||||
#define CONFIG_MISC_INIT_F 1 /* Use misc_init_f() */
|
||||
|
||||
#define CONFIG_BCM570x 1 /* Use Broadcom BCM570x Ethernet Driver */
|
||||
#define CONFIG_TIGON3 1
|
||||
|
||||
#define CONFIG_CONS_INDEX 1
|
||||
#define CONFIG_BAUDRATE 9600
|
||||
#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
|
||||
@ -84,6 +81,8 @@
|
||||
|
||||
#define CONFIG_CMD_DATE
|
||||
#define CONFIG_CMD_ELF
|
||||
#undef CONFIG_CMD_NET
|
||||
#undef CONFIG_CMD_NFS
|
||||
|
||||
|
||||
#if 0
|
||||
|
Loading…
Reference in New Issue
Block a user