c316867e76e5083f250dcd8e2e3a904aa8e2f1f8
[dpdk.git] / drivers / net / sfc / base / siena_impl.h
1 /*
2  * Copyright (c) 2009-2016 Solarflare Communications Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  *    this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  *    this list of conditions and the following disclaimer in the documentation
12  *    and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
24  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * The views and conclusions contained in the software and documentation are
27  * those of the authors and should not be interpreted as representing official
28  * policies, either expressed or implied, of the FreeBSD Project.
29  */
30
31 #ifndef _SYS_SIENA_IMPL_H
32 #define _SYS_SIENA_IMPL_H
33
34 #include "efx.h"
35 #include "efx_regs.h"
36 #include "efx_mcdi.h"
37 #include "siena_flash.h"
38
39 #ifdef  __cplusplus
40 extern "C" {
41 #endif
42
43 #define SIENA_NVRAM_CHUNK 0x80
44
45 extern  __checkReturn   efx_rc_t
46 siena_nic_probe(
47         __in            efx_nic_t *enp);
48
49 extern  __checkReturn   efx_rc_t
50 siena_nic_reset(
51         __in            efx_nic_t *enp);
52
53 extern  __checkReturn   efx_rc_t
54 siena_nic_init(
55         __in            efx_nic_t *enp);
56
57 #if EFSYS_OPT_DIAG
58
59 extern  __checkReturn   efx_rc_t
60 siena_nic_register_test(
61         __in            efx_nic_t *enp);
62
63 #endif  /* EFSYS_OPT_DIAG */
64
65 extern                  void
66 siena_nic_fini(
67         __in            efx_nic_t *enp);
68
69 extern                  void
70 siena_nic_unprobe(
71         __in            efx_nic_t *enp);
72
73 #define SIENA_SRAM_ROWS 0x12000
74
75 extern                  void
76 siena_sram_init(
77         __in            efx_nic_t *enp);
78
79 #if EFSYS_OPT_DIAG
80
81 extern  __checkReturn   efx_rc_t
82 siena_sram_test(
83         __in            efx_nic_t *enp,
84         __in            efx_sram_pattern_fn_t func);
85
86 #endif  /* EFSYS_OPT_DIAG */
87
88 #if EFSYS_OPT_MCDI
89
90 extern  __checkReturn   efx_rc_t
91 siena_mcdi_init(
92         __in            efx_nic_t *enp,
93         __in            const efx_mcdi_transport_t *mtp);
94
95 extern                  void
96 siena_mcdi_send_request(
97         __in                    efx_nic_t *enp,
98         __in_bcount(hdr_len)    void *hdrp,
99         __in                    size_t hdr_len,
100         __in_bcount(sdu_len)    void *sdup,
101         __in                    size_t sdu_len);
102
103 extern  __checkReturn   boolean_t
104 siena_mcdi_poll_response(
105         __in            efx_nic_t *enp);
106
107 extern                  void
108 siena_mcdi_read_response(
109         __in                    efx_nic_t *enp,
110         __out_bcount(length)    void *bufferp,
111         __in                    size_t offset,
112         __in                    size_t length);
113
114 extern                  efx_rc_t
115 siena_mcdi_poll_reboot(
116         __in            efx_nic_t *enp);
117
118 extern                  void
119 siena_mcdi_fini(
120         __in            efx_nic_t *enp);
121
122 extern  __checkReturn   efx_rc_t
123 siena_mcdi_feature_supported(
124         __in            efx_nic_t *enp,
125         __in            efx_mcdi_feature_id_t id,
126         __out           boolean_t *supportedp);
127
128 extern                  void
129 siena_mcdi_get_timeout(
130         __in            efx_nic_t *enp,
131         __in            efx_mcdi_req_t *emrp,
132         __out           uint32_t *timeoutp);
133
134 #endif /* EFSYS_OPT_MCDI */
135
136 typedef struct siena_link_state_s {
137         uint32_t                sls_adv_cap_mask;
138         uint32_t                sls_lp_cap_mask;
139         unsigned int            sls_fcntl;
140         efx_link_mode_t         sls_link_mode;
141         boolean_t               sls_mac_up;
142 } siena_link_state_t;
143
144 extern                  void
145 siena_phy_link_ev(
146         __in            efx_nic_t *enp,
147         __in            efx_qword_t *eqp,
148         __out           efx_link_mode_t *link_modep);
149
150 extern  __checkReturn   efx_rc_t
151 siena_phy_get_link(
152         __in            efx_nic_t *enp,
153         __out           siena_link_state_t *slsp);
154
155 extern  __checkReturn   efx_rc_t
156 siena_phy_power(
157         __in            efx_nic_t *enp,
158         __in            boolean_t on);
159
160 extern  __checkReturn   efx_rc_t
161 siena_phy_reconfigure(
162         __in            efx_nic_t *enp);
163
164 extern  __checkReturn   efx_rc_t
165 siena_phy_verify(
166         __in            efx_nic_t *enp);
167
168 extern  __checkReturn   efx_rc_t
169 siena_phy_oui_get(
170         __in            efx_nic_t *enp,
171         __out           uint32_t *ouip);
172
173 extern  __checkReturn   efx_rc_t
174 siena_mac_poll(
175         __in            efx_nic_t *enp,
176         __out           efx_link_mode_t *link_modep);
177
178 extern  __checkReturn   efx_rc_t
179 siena_mac_up(
180         __in            efx_nic_t *enp,
181         __out           boolean_t *mac_upp);
182
183 extern  __checkReturn   efx_rc_t
184 siena_mac_reconfigure(
185         __in    efx_nic_t *enp);
186
187 extern  __checkReturn   efx_rc_t
188 siena_mac_pdu_get(
189         __in    efx_nic_t *enp,
190         __out   size_t *pdu);
191
192 #ifdef  __cplusplus
193 }
194 #endif
195
196 #endif  /* _SYS_SIENA_IMPL_H */