5a7c8f14a4920db0e082b9f4db3f54e7c8da26a5
[linux-2.6.git] / drivers / net / bcm5700 / tcp_seg.c
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
21 LM_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
49 LM_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 */