Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
staging
vt6656
firmware.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3
* All rights reserved.
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License along
16
* with this program; if not, write to the Free Software Foundation, Inc.,
17
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
*
20
* File: baseband.c
21
*
22
* Purpose: Implement functions to access baseband
23
*
24
* Author: Yiching Chen
25
*
26
* Date: May 20, 2004
27
*
28
* Functions:
29
*
30
* Revision History:
31
*
32
*/
33
34
#include "
firmware.h
"
35
#include "
control.h
"
36
#include "
rndis.h
"
37
38
/*--------------------- Static Definitions -------------------------*/
39
40
static
int
msglevel =
MSG_LEVEL_INFO
;
41
//static int msglevel =MSG_LEVEL_DEBUG;
42
43
#define FIRMWARE_VERSION 0x133
/* version 1.51 */
44
#define FIRMWARE_NAME "vntwusb.fw"
45
46
#define FIRMWARE_CHUNK_SIZE 0x400
47
48
/*--------------------- Static Classes ----------------------------*/
49
50
/*--------------------- Static Variables --------------------------*/
51
52
/*--------------------- Static Functions --------------------------*/
53
54
/*--------------------- Export Variables --------------------------*/
55
56
/*--------------------- Export Functions --------------------------*/
57
58
59
BOOL
60
FIRMWAREbDownload
(
61
PSDevice
pDevice
62
)
63
{
64
const
struct
firmware
*
fw
;
65
int
NdisStatus;
66
void
*
pBuffer
=
NULL
;
67
BOOL
result
=
FALSE
;
68
u16
wLength
;
69
int
ii;
70
71
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"---->Download firmware\n"
);
72
spin_unlock_irq(&pDevice->
lock
);
73
74
if
(!pDevice->
firmware
) {
75
struct
device
*
dev
= &pDevice->
usb
->dev;
76
int
rc
;
77
78
rc =
request_firmware
(&pDevice->
firmware
,
FIRMWARE_NAME
, dev);
79
if
(rc) {
80
dev_err
(dev,
"firmware file %s request failed (%d)\n"
,
81
FIRMWARE_NAME
, rc);
82
goto
out
;
83
}
84
}
85
fw = pDevice->
firmware
;
86
87
pBuffer =
kmalloc
(
FIRMWARE_CHUNK_SIZE
,
GFP_KERNEL
);
88
if
(!pBuffer)
89
goto
out
;
90
91
for
(ii = 0; ii < fw->
size
; ii +=
FIRMWARE_CHUNK_SIZE
) {
92
wLength =
min_t
(
int
, fw->
size
- ii,
FIRMWARE_CHUNK_SIZE
);
93
memcpy
(pBuffer, fw->
data
+ ii, wLength);
94
95
NdisStatus =
CONTROLnsRequestOutAsyn
(pDevice,
96
0,
97
0x1200+ii,
98
0x0000,
99
wLength,
100
pBuffer
101
);
102
103
DBG_PRT
(
MSG_LEVEL_DEBUG
,
104
KERN_INFO
"Download firmware...%d %zu\n"
, ii, fw->
size
);
105
if
(NdisStatus !=
STATUS_SUCCESS
)
106
goto
out
;
107
}
108
109
result =
TRUE
;
110
111
out
:
112
kfree
(pBuffer);
113
114
spin_lock_irq(&pDevice->
lock
);
115
return
result
;
116
}
117
MODULE_FIRMWARE
(
FIRMWARE_NAME
);
118
119
BOOL
120
FIRMWAREbBrach2Sram
(
121
PSDevice
pDevice
122
)
123
{
124
int
NdisStatus;
125
126
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"---->Branch to Sram\n"
);
127
128
NdisStatus =
CONTROLnsRequestOut
(pDevice,
129
1,
130
0x1200,
131
0x0000,
132
0,
133
NULL
134
);
135
136
if
(NdisStatus !=
STATUS_SUCCESS
) {
137
return
(
FALSE
);
138
}
else
{
139
return
(
TRUE
);
140
}
141
}
142
143
144
BOOL
145
FIRMWAREbCheckVersion
(
146
PSDevice
pDevice
147
)
148
{
149
int
ntStatus;
150
151
ntStatus =
CONTROLnsRequestIn
(pDevice,
152
MESSAGE_TYPE_READ
,
153
0,
154
MESSAGE_REQUEST_VERSION
,
155
2,
156
(
PBYTE
) &(pDevice->
wFirmwareVersion
));
157
158
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Firmware Version [%04x]\n"
, pDevice->
wFirmwareVersion
);
159
if
(ntStatus !=
STATUS_SUCCESS
) {
160
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Firmware Invalid.\n"
);
161
return
FALSE
;
162
}
163
if
(pDevice->
wFirmwareVersion
== 0xFFFF) {
164
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"In Loader.\n"
);
165
return
FALSE
;
166
}
167
DBG_PRT
(
MSG_LEVEL_DEBUG
,
KERN_INFO
"Firmware Version [%04x]\n"
, pDevice->
wFirmwareVersion
);
168
if
(pDevice->
wFirmwareVersion
<
FIRMWARE_VERSION
) {
169
// branch to loader for download new firmware
170
FIRMWAREbBrach2Sram
(pDevice);
171
return
FALSE
;
172
}
173
return
TRUE
;
174
}
Generated on Thu Jan 10 2013 13:12:54 for Linux Kernel by
1.8.2