1/******************************************************************************/ 2/* */ 3/* Broadcom BCM5700 Linux Network Driver, Copyright (c) 2002 - 2004 Broadcom */ 4/* Corporation. */ 5/* All rights reserved. */ 6/* */ 7/* This program is free software; you can redistribute it and/or modify */ 8/* it under the terms of the GNU General Public License as published by */ 9/* the Free Software Foundation, located in the file LICENSE. */ 10/* */ 11/* History: */ 12/* */ 13/******************************************************************************/ 14 15#include "mm.h" 16 17#ifdef INCLUDE_TCP_SEG_SUPPORT 18#include "fw_stkoffld.h" 19#include "fw_lso05.h" 20 21LM_UINT32 LM_GetStkOffLdFirmwareSize(PLM_DEVICE_BLOCK pDevice) 22{ 23 LM_UINT32 FwSize; 24 25 if (T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5750) 26 { 27 return 0; 28 } 29 if (T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5705) 30 { 31 FwSize = (LM_UINT32)(t3StkOffLd05FwTextLen + 32 t3StkOffLd05FwRodataLen + 33 t3StkOffLd05FwDataLen + 34 t3StkOffLd05FwSbssLen + 35 t3StkOffLd05FwBssLen); 36 } 37 else 38 { 39 FwSize = (LM_UINT32)(t3StkOffLdFwTextLen + 40 t3StkOffLdFwRodataLen + 41 t3StkOffLdFwDataLen + 42 t3StkOffLdFwSbssLen + 43 t3StkOffLdFwBssLen); 44 } 45 46 return FwSize; 47} 48 49LM_STATUS LM_LoadStkOffLdFirmware(PLM_DEVICE_BLOCK pDevice) 50{ 51 T3_FWIMG_INFO FwImgInfo; 52 LM_UINT32 Cpu; 53 54 if (T3_ASIC_IS_575X_PLUS(pDevice->ChipRevId)) 55 { 56 return LM_STATUS_SUCCESS; 57 } 58 if (T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5705) 59 { 60 FwImgInfo.StartAddress = t3StkOffLd05FwStartAddr; 61 FwImgInfo.Text.Buffer = (PLM_UINT8)t3StkOffLd05FwText; 62 FwImgInfo.Text.Offset = t3StkOffLd05FwTextAddr; 63 FwImgInfo.Text.Length = t3StkOffLd05FwTextLen; 64 FwImgInfo.ROnlyData.Buffer = (PLM_UINT8)t3StkOffLd05FwRodata; 65 FwImgInfo.ROnlyData.Offset = t3StkOffLd05FwRodataAddr; 66 FwImgInfo.ROnlyData.Length = t3StkOffLd05FwRodataLen; 67 FwImgInfo.Data.Buffer = (PLM_UINT8)t3StkOffLd05FwData; 68 FwImgInfo.Data.Offset = t3StkOffLd05FwDataAddr; 69 FwImgInfo.Data.Length = t3StkOffLd05FwDataLen; 70 FwImgInfo.Sbss.Offset = t3StkOffLd05FwSbssAddr; 71 FwImgInfo.Sbss.Length = t3StkOffLd05FwSbssLen; 72 FwImgInfo.Bss.Offset = t3StkOffLd05FwBssAddr; 73 FwImgInfo.Bss.Length = t3StkOffLd05FwBssLen; 74 Cpu = T3_RX_CPU_ID; 75 } 76 else 77 { 78 FwImgInfo.StartAddress = t3StkOffLdFwStartAddr; 79 FwImgInfo.Text.Buffer = (PLM_UINT8)t3StkOffLdFwText; 80 FwImgInfo.Text.Offset = t3StkOffLdFwTextAddr; 81 FwImgInfo.Text.Length = t3StkOffLdFwTextLen; 82 FwImgInfo.ROnlyData.Buffer = (PLM_UINT8)t3StkOffLdFwRodata; 83 FwImgInfo.ROnlyData.Offset = t3StkOffLdFwRodataAddr; 84 FwImgInfo.ROnlyData.Length = t3StkOffLdFwRodataLen; 85 FwImgInfo.Data.Buffer = (PLM_UINT8)t3StkOffLdFwData; 86 FwImgInfo.Data.Offset = t3StkOffLdFwDataAddr; 87 FwImgInfo.Data.Length = t3StkOffLdFwDataLen; 88 FwImgInfo.Sbss.Offset = t3StkOffLdFwSbssAddr; 89 FwImgInfo.Sbss.Length = t3StkOffLdFwSbssLen; 90 FwImgInfo.Bss.Offset = t3StkOffLdFwBssAddr; 91 FwImgInfo.Bss.Length = t3StkOffLdFwBssLen; 92 Cpu = T3_TX_CPU_ID; 93 } 94 95 if (LM_LoadFirmware(pDevice, 96 &FwImgInfo, 97 Cpu, 98 Cpu) != LM_STATUS_SUCCESS) 99 { 100 return LM_STATUS_FAILURE; 101 } 102 103 return LM_STATUS_SUCCESS; 104} 105 106#endif /* INCLUDE_TCP_SEG_SUPPORT */ 107