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