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
arch
mips
cavium-octeon
executive
cvmx-helper-npi.c
Go to the documentation of this file.
1
/***********************license start***************
2
* Author: Cavium Networks
3
*
4
* Contact:
[email protected]
5
* This file is part of the OCTEON SDK
6
*
7
* Copyright (c) 2003-2008 Cavium Networks
8
*
9
* This file is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License, Version 2, as
11
* published by the Free Software Foundation.
12
*
13
* This file is distributed in the hope that it will be useful, but
14
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16
* NONINFRINGEMENT. See the GNU General Public License for more
17
* details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this file; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
* or visit http://www.gnu.org/licenses/.
23
*
24
* This file may also be available under a different license from Cavium.
25
* Contact Cavium Networks for more information
26
***********************license end**************************************/
27
28
/*
29
* Functions for NPI initialization, configuration,
30
* and monitoring.
31
*/
32
#include <
asm/octeon/octeon.h
>
33
34
#include <
asm/octeon/cvmx-config.h
>
35
36
#include <
asm/octeon/cvmx-helper.h
>
37
38
#include <
asm/octeon/cvmx-pip-defs.h
>
39
49
int
__cvmx_helper_npi_probe
(
int
interface
)
50
{
51
#if CVMX_PKO_QUEUES_PER_PORT_PCI > 0
52
if
(
OCTEON_IS_MODEL
(
OCTEON_CN38XX
) ||
OCTEON_IS_MODEL
(
OCTEON_CN58XX
))
53
return
4;
54
else
if
(
OCTEON_IS_MODEL
(
OCTEON_CN56XX
)
55
&& !
OCTEON_IS_MODEL
(
OCTEON_CN56XX_PASS1_X
))
56
/* The packet engines didn't exist before pass 2 */
57
return
4;
58
else
if
(
OCTEON_IS_MODEL
(
OCTEON_CN52XX
)
59
&& !
OCTEON_IS_MODEL
(
OCTEON_CN52XX_PASS1_X
))
60
/* The packet engines didn't exist before pass 2 */
61
return
4;
62
#if 0
63
/*
64
* Technically CN30XX, CN31XX, and CN50XX contain packet
65
* engines, but nobody ever uses them. Since this is the case,
66
* we disable them here.
67
*/
68
else
if
(
OCTEON_IS_MODEL
(
OCTEON_CN31XX
)
69
||
OCTEON_IS_MODEL
(
OCTEON_CN50XX
))
70
return
2;
71
else
if
(
OCTEON_IS_MODEL
(
OCTEON_CN30XX
))
72
return
1;
73
#endif
74
#endif
75
return
0;
76
}
77
87
int
__cvmx_helper_npi_enable
(
int
interface
)
88
{
89
/*
90
* On CN50XX, CN52XX, and CN56XX we need to disable length
91
* checking so packet < 64 bytes and jumbo frames don't get
92
* errors.
93
*/
94
if
(!
OCTEON_IS_MODEL
(
OCTEON_CN3XXX
) &&
95
!
OCTEON_IS_MODEL
(
OCTEON_CN58XX
)) {
96
int
num_ports
=
cvmx_helper_ports_on_interface
(interface);
97
int
port
;
98
for
(port = 0; port < num_ports; port++) {
99
union
cvmx_pip_prt_cfgx
port_cfg;
100
int
ipd_port =
101
cvmx_helper_get_ipd_port
(interface, port);
102
port_cfg.
u64
=
103
cvmx_read_csr(
CVMX_PIP_PRT_CFGX
(ipd_port));
104
port_cfg.
s
.maxerr_en = 0;
105
port_cfg.
s
.minerr_en = 0;
106
cvmx_write_csr(
CVMX_PIP_PRT_CFGX
(ipd_port),
107
port_cfg.
u64
);
108
}
109
}
110
111
/* Enables are controlled by the remote host, so nothing to do here */
112
return
0;
113
}
Generated on Thu Jan 10 2013 13:09:05 for Linux Kernel by
1.8.2